_

[LISP] właściwości pliku

Forum poświęcone flagowemu produktowi oraz aplikacjom pochodnym Autodesku. To jedyne forum mające w tytule nazwę programu, a to ze względu na jego olbrzymią popularność w Polsce. Można tutaj umieszczać również posty z ogólnie pojętej tematyki "Kreślarskie 2D".

[LISP] właściwości pliku

Postprzez wilda » wrz 28, 2018 22:28

Potrzebuję sprawdzić lispem czy właściwość dokumentu istnieje. Jeżeli nie, to powinna być utworzona poprzez podanie przez użytkownika, jeżeli istnieje, program powinien działać dalej.
Coś takiego testuje, ale program nie chce działać, gdy właściwość już jest, "if" traktuje tak jakby właściwości nie było i chce jeszcze raz ją utworzyć.
Kod: Zaznacz cały
(defun c:If_property ()
;***********************************
(setq App (vlax-Get-Acad-Object)
Doc (vla-Get-ActiveDocument App)
DwgProps (vla-Get-SummaryInfo Doc)
)

(setq errobj (vl-catch-all-apply 'vla-SetCustomByKey (list DwgProps "TEST" S1)))

(if (vl-catch-all-error-p errobj)
   (vla-AddCustomInfo DwgProps "TEST" "wartość") ;jeżeli prawda
   (WYRAZENIE JAKIEŚ)                        ;jeżeli fałsz
)                                    ;_ if
)
wilda
 
Posty: 227
Dołączył(a): gru 18, 2007 21:41

Re: [LISP] właściwości pliku

Postprzez ziele_o2k » wrz 29, 2018 15:52

Pomyśl nad czymś takim:
Kod: Zaznacz cały
(defun c:testinfo ( / dwgProps custKey custVal val)
    (setq
        dwgProps (vla-Get-SummaryInfo (cd:ACX_ADoc))
        custKey "TEST"
        custVal "wartosc_dodana"
    )
    (if   
        (vl-catch-all-error-p
            (vl-catch-all-apply
                'vlax-invoke-method
                (list dwgProps 'GetCustomByKey custKey 'val)
            )
        )
        (progn
            (princ "\nDodano CustomInfo")
            (vlax-invoke-method DwgProps 'AddCustomInfo  custKey custVal)
        )
        (princ (strcat "\nCustomInfo juz istnieje:\n" val))
    )
    (princ)
)
Ziele
Avatar użytkownika
ziele_o2k
 
Posty: 728
Dołączył(a): mar 18, 2014 11:33
Lokalizacja: Poznań

Re: [LISP] właściwości pliku

Postprzez wilda » wrz 29, 2018 17:52

Dzięki, o to właśnie chodziło.
wilda
 
Posty: 227
Dołączył(a): gru 18, 2007 21:41

Re: [LISP] właściwości pliku

Postprzez ziele_o2k » paź 01, 2018 01:02

wilda napisał(a):Dzięki, o to właśnie chodziło.

To ja dzięki :) nie wiedziałem, że coś takiego istnieje, a z chęcią wykorzystam :)
Ziele
Avatar użytkownika
ziele_o2k
 
Posty: 728
Dołączył(a): mar 18, 2014 11:33
Lokalizacja: Poznań

Re: [LISP] właściwości pliku

Postprzez kojacek » paź 01, 2018 06:21

ziele_o2k napisał(a):
wilda napisał(a):Dzięki, o to właśnie chodziło.

To ja dzięki :) nie wiedziałem, że coś takiego istnieje, a z chęcią wykorzystam :)


No bo w CAD-Pack'u, od lat to pies...

cadpackdwgprop.png


;)
Avatar użytkownika
kojacek
 
Posty: 5450
Dołączył(a): paź 03, 2005 20:17

Re: [LISP] właściwości pliku

Postprzez ziele_o2k » paź 01, 2018 14:06

kojacek napisał(a):
ziele_o2k napisał(a):
wilda napisał(a):Dzięki, o to właśnie chodziło.

To ja dzięki :) nie wiedziałem, że coś takiego istnieje, a z chęcią wykorzystam :)


No bo w CAD-Pack'u, od lat to pies...

cadpackdwgprop.png


;)

Bo CADpacka trza znać :) to, że używam go od kilku lat już nie znaczy, że wiem co wy tam żeście naskrobali :)
To od razu pytanie kojacku.
Mam szereg funkcji lispowych, które z ząłożenia mają pozostawiać po sobie ślad w pliku.
Do tej pory robiłem to za pomocą czegoś takiego:
Kod: Zaznacz cały
;; Add or replace xrecord
;; Example:
;; (gtc:AddXrecord "app_name" "units" '((1 . "ABC")))
(defun gtc:AddXrecord (@Root @Name @XData / _dct_ename _xrec_ename )
  (if
    (not (setq _dct_ename (cd:DCT_GetDict (namedobjdict) @Root)))
    (setq _dct_ename (cd:DCT_AddDict (namedobjdict) @Root))
  )
  (if
    (setq _xrec_ename (cd:DCT_GetDict _dct_ename @Name))
    (cd:DCT_ReplaceXrecord _xrec_ename @XData)
    (cd:DCT_AddXrecord _dct_ename @Name @XData)
  )
  (princ)
)
;; (gtc:GetXrecord "app_name" "units" )
(defun gtc:GetXrecord (@Root @Name / _dct_ename _xrec_ename )
  (if
    (and
      (setq _dct_ename (cd:DCT_GetDict (namedobjdict) @Root))
      (setq _xrec_ename (cd:DCT_GetDict _dct_ename @Name))
      (setq _res (cd:DCT_GetXRecord _xrec_ename))
    )
    _res
    nil
  )
)

Pytanie, czy nie lepiej zastąpić to dwgcustom prop?
Ziele
Avatar użytkownika
ziele_o2k
 
Posty: 728
Dołączył(a): mar 18, 2014 11:33
Lokalizacja: Poznań

Re: [LISP] właściwości pliku

Postprzez kojacek » paź 01, 2018 20:08

ziele_o2k napisał(a): (...)
Pytanie, czy nie lepiej zastąpić to dwgcustom prop?


To zależy co i po co (jakie dane) chcesz przechowywać. W customprop, dane są właściwie jawne, to może być zaletą jeśli informacje mają być dzielone i wykorzystywane przez innych userów, itp.
Własne słowniki i Xrecordy mają tę zaletę że są "niewidzialne". Ponadto można je organizować w bardziej złożone struktury (więcej Xrecordów, słowników itp.) Na koniec - typy danych - w custom możesz przechowywać tylko łańcuchy. W Xrecord możesz mieć INT REAL POINT LIST STR ENAME...
Avatar użytkownika
kojacek
 
Posty: 5450
Dołączył(a): paź 03, 2005 20:17

Re: [LISP] właściwości pliku

Postprzez wilda » paź 02, 2018 09:52

ziele_o2k napisał(a):
wilda napisał(a):Dzięki, o to właśnie chodziło.

To ja dzięki :) nie wiedziałem, że coś takiego istnieje, a z chęcią wykorzystam :)

Niezmiernie się cieszę, że choć raz, ja mogłem (choć nieświadowmie) pomóc!
wilda
 
Posty: 227
Dołączył(a): gru 18, 2007 21:41


Powrót do AutoCAD

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników