Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Bitte Code aus der Online-Hilfe erklären (add_props)

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:   Bitte Code aus der Online-Hilfe erklären (add_props) (2466 mal gelesen)
Peter2
Ehrenmitglied V.I.P. h.c.




Sehen Sie sich das Profil von Peter2 an!   Senden Sie eine Private Message an Peter2  Schreiben Sie einen Gästebucheintrag für Peter2

Beiträge: 3374
Registriert: 15.10.2003

Win 10/64 Pro
AutoCAD MAP 3D 2018

erstellt am: 07. Nov. 2006 21:12    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

In der Lisp-Onlinehilfe zu Acad 2006 steht zum Ausfüllen der Zeichnungseigenschaften per Lisp auch folgender Code:

Code:
(vl-load-com)

(defun c:ADD_PROPS (/ doc db si author nc nc2 nc3 value3 value4)
  (setq doc (vla-get-ActiveDocument (vlax-get-Acad-Object)))
  (setq db (vla-get-Database doc))
  (setq si (vla-get-SummaryInfo db))
  (vla-put-author si "John")
  (vla-put-comments si "New comments")
  (vla-put-hyperlinkbase si "http://AddURL")
  (vla-put-keywords si "New keywords")
  (vla-AddCustomInfo si "siPutKey" "siPutValue")
  (setq nc (vla-numcustominfo si))
  (vla-SetCustomByKey si "siPutKey" "siPutValueByKey")
  (vla-GetCustomByKey si "siPutKey" 'value3)
  (if (/= "siPutValueByKey" value3)
    (princ "*** Error SetCustomByKey\n")
  )
  (vla-SetCustomByIndex si (1- nc) "siPutCustomByIndexKey"
    "siPutCustomByIndexValue")
  (vla-GetCustomByKey si "siPutCustomByIndexKey" 'value4)
  (if (/= "siPutCustomByIndexValue" value4)
    (princ "*** Error SetCustomByIndex\n")
  )
  (vla-RemoveCustomByIndex si (1- nc))
  (setq nc2 (vla-numcustominfo si))
  (if (/= nc2 (1- nc))
    (princ "*** Error RemoveCustomByIndex")
  )
  (vla-AddCustomInfo si "siPutKey" "siPutValue")
  ; Remove property
  (vla-RemoveCustomByKey si "siPutKey")
  (setq nc3 (vla-numcustominfo si))
  (if (/= nc2 (1- nc))
    (princ "*** Error RemoveCustomByKey")
  )
  (vla-AddCustomInfo si "siPutKey" "siPutValue")
  (vlax-release-object si)
  (vlax-release-object db)
  (vlax-release-object doc)
  (princ)
)
(princ)


Dazu ersuche ich um ein paar erklärende Code-Kommentare - der Mittelteil mit den value, nc, ERROR usw. ist mir nicht klar.

Mir geht es im aktuellen Fall nur um die Frage, wie man konkret die "Zeile 9" der benutzerdefinierten Spalten ausfüllt.

Danke

Peter

------------------
Für jedes Problem gibt es eine einfache Lösung.
Die ist aber meistens falsch. ;-)

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

marc.scherer
Ehrenmitglied V.I.P. h.c.
CAD-Administrator



Sehen Sie sich das Profil von marc.scherer an!   Senden Sie eine Private Message an marc.scherer  Schreiben Sie einen Gästebucheintrag für marc.scherer

Beiträge: 2484
Registriert: 02.11.2001

Windows 10 64bit
AutoCAD Architecture 2018/2019 (deu/eng)
AEC-Collection 2019 (Revit und Zeugs)
Wenn sich's nicht vermeiden läßt:
D-A-CH Erweiterung (mies implementierter Schrott)

erstellt am: 07. Nov. 2006 22:34    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Peter2 10 Unities + Antwort hilfreich

Guck Dir mal die Rückgabe von:
Code:

(vlax-dump-object
  (vla-get-SummaryInfo
    (vla-get-Database
      (vla-get-ActiveDocument (vlax-get-Acad-Object))
    )
  )
  'T
)


an. Das gibt Dir alle Methoden und Eigenschaften des SummaryInfo-Objects zurück. In etwa so:
Code:

; IAcadSummaryInfo: IAcadSummaryInfo Interface
; Eigenschaftswerte:
;  Author = ""
;  Comments = ""
;  HyperlinkBase = ""
;  Keywords = ""
;  LastSavedBy = ""
;  RevisionNumber = ""
;  Subject = ""
;  Title = ""
; Unterstützte Methoden:
;  AddCustomInfo (2)
;  GetCustomByIndex (3)
;  GetCustomByKey (2)
;  NumCustomInfo ()
;  RemoveCustomByIndex (1)
;  RemoveCustomByKey (1)
;  SetCustomByIndex (3)
;  SetCustomByKey (2)


Da siehst Du schon, das Du auf die benutzerdefinierten Eigenschaften wie bei einer Collection nur via Index bzw. Key zugreifen kannst. Und die Methodik hierfür findest Du ja im Beispielcode...

Wenn Du Zeile 9 beschreiben willst, müssen die acht Zeilen vorher bereits gefüllt sein. Ist aber nicht sinnvoll, da der Zugriff ja via    eindeutigem Key erfolgen kann. Wieso also an eine bestimmte Reihenfolge klammern? 

------------------
Ciao,
Marc
   

[Diese Nachricht wurde von marc.scherer am 07. Nov. 2006 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Peter2
Ehrenmitglied V.I.P. h.c.




Sehen Sie sich das Profil von Peter2 an!   Senden Sie eine Private Message an Peter2  Schreiben Sie einen Gästebucheintrag für Peter2

Beiträge: 3374
Registriert: 15.10.2003

Win 10/64 Pro
AutoCAD MAP 3D 2018

erstellt am: 07. Nov. 2006 23:02    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Zitat:
Original erstellt von marc.scherer:
...Wieso also an eine bestimmte Reihenfolge klammern? 

Aus der 2002er-Logik und der Zeichnungstechnik bisher.

Ich habe bisher (in 2002 - nur 10 Zeilen möglich)
- mit Propulate die Zeilen 1 - 8 eindeutig und die Zeilen 9-10 mit (nicht eindeutigen) Platzhaltern " - / - " ausgefüllt
- dann mit einer Unterroutine die 10. Zeile eindeutig ausgefüllt
- mit CadXplorer die Daten im Explorer angezeigt bzw. im TotalCommander ausgewertet - und hier steckt auch noch die alte Nummernlogik 1 - 10 dahinter

Aber inzwischen habe ich
- mit Propulate-Definitionen so umgebaut, dass auch die 10. Zeile eindeutig ist
- einen Lisp-Code gefunden, der mir die (nun) eindeutige Definition findet und ausfüllt - und den ich auch besser verstehe.

Damit hat sich das gelöst - danke für die Meldung.

Peter


; ***********************************************************************************
; VON http:discussion.autodesk.com/thread.jspa?threadID=296833

Code:
(defun SetCustomDwgProp (key value / App Doc DwgProps)
    (vl-load-com)
    (setq  App (vlax-Get-Acad-Object)
            Doc (vla-Get-ActiveDocument App)
            DwgProps (vla-Get-SummaryInfo Doc)
    )
    (if (getCustomDwgProp key)
        (vla-SetCustomByKey DwgProps key value)
        (vla-AddCustomInfo DwgProps key value)
    )
)
; ***********************************************************************************
(defun getCustomDwgProp (key / app doc dwgprops try val)
    (vl-load-com)
    (setq  App (vlax-Get-Acad-Object)
            Doc (vla-Get-ActiveDocument App)
            DwgProps (vla-Get-SummaryInfo Doc)
    )
    (cond
        ((vl-catch-all-error-p
            (setq try (vl-catch-all-apply 'vla-GetCustomByKey (list DwgProps key 'val)))
        )
        (setq val nil)
        )
    )
    val
)

------------------
Für jedes Problem gibt es eine einfache Lösung.
Die ist aber meistens falsch. ;-)

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2020 CAD.de | Impressum | Datenschutz