| |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
 | NVIDIA GTC Paris und ISC High Performance-Konferenz 2025, eine Pressemitteilung
|
Autor
|
Thema: dyn Blöcke 2 (1701 mal gelesen)
|
Christian B. Mitglied

 Beiträge: 86 Registriert: 09.03.2006
|
erstellt am: 08. Feb. 2010 16:29 <-- editieren / zitieren --> Unities abgeben:         
Hallo da draußen, http://ww3.cad.de/foren/ubb/Forum145/HTML/001303.shtml#000002 http://ww3.cad.de/foren/ubb/Forum145/HTML/002928.shtml Nachdem nun einige Monate vergangen sind und ich mich jetzt einigermaßen in Lisp eingearbeitet habe, hab ich nun zwei Funktionen, die auf den Sichtbarkeitsparameter ansetzten. ->test funktioniert soweit, kann aber nur ein Obkekt auswählen und ist mit if ->aa sollte eigentlich ein ganzes Selection-Set auswählen und dann mehrere Bedingungen aktzeptieren, hier liegt das Problem. Es muss irgendein Fehler mit dem ssget und dem vla-object sein. Vieleicht kann mir jemand den unterschied im Datentyp erklären, da es ja mit entsel(da verstehe ich allerdings das car nicht, das wählt normalerweise ja nur den ersten Punkt aus einer Liste, entsel und entlast geben ja sowieso nur ein Objekt wieder ?!?) ist ja funktioniert. Gibt es eine Möglichkeit alle Benutzerdefinierten Parameter Einzusehen? Mit (vlax-dump-object object) oder Variabelüberprüfung im VLisp Editor sehe ich nur IsDynamicBlock= -1 (:VlTrue) ansonsten sehe ich da nichts das nach Benutzerparametern aussieht. (defun c:test() (vl-load-com) (setProperty (vlax-ename->vla-object (car (entsel))) "Sichtbarkeit" "Field 3.00m") ) (defun setProperty (vlaDynBlock sPropertyName rValue / vlaProperty) (foreach vlaProperty (vlax-safearray->list (vlax-variant-value (vla-GetDynamicBlockProperties vlaDynBlock))) (if (= (vla-get-PropertyName vlaProperty) sPropertyName) (vla-put-value vlaProperty (vlax-make-variant rValue)) ); end if ); end foreach ); end defun
(defun c:aa() (vl-load-com) (blkObj (vlax-ename->vla-object (car (ssget))));zweiter Versuch ;(setq blkObj (ssget));erster Versuch (setq blkProps (vlax-safearray->list (vlax-variant-value (vla-GetDynamicBlockProperties blkObj)))) (foreach blkProp blkProps (cond ((and (= (vla-Get-PropertyName blkProp) "Sichtbarkeit")) Sichtbarkeitsname (vla-Put-Value blkProp "Field 3.00m") ; Sichtbarkeit ) ) ) )
ACAD sagt folgendes dazu: Objekte wählen: ; Fehler: Fehlerhafter Argumenttyp: consp <Selection set: 9> Bezw. im Editor LOG Fehlerverfolgung ............... <1> :ERROR-BREAK [2] (CAR <Selection set: 9> ) [3] (C:AA) <4> :CALLBACK-ENTRY <5> :ARQ-SUBR-CALLBACK Vielen Dank für Eure Mühen, Christian B.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
       

 Beiträge: 22497 Registriert: 03.06.2002 Alles
|
erstellt am: 08. Feb. 2010 16:39 <-- editieren / zitieren --> Unities abgeben:          Nur für Christian B.
ich fange mal von oben und auch nur mit einem Punkt an (der Rest kommt sicher noch) "da es ja mit entsel(da verstehe ich allerdings das car nicht, das wählt normalerweise ja nur den ersten Punkt aus einer Liste, entsel und entlast geben ja sowieso nur ein Objekt wieder ?!?)" Dann hast du ein sehr spezielles "entsel" - bei allen anderen funktioniert entsel so wie in der Hilfe beschrieben und gibt eine Liste von Objektnamen und Pick-Punkt Koordinate aus ! ------------------ CAD.de System-Angaben - CAD on demand - User:FAQ(Acad) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
       

 Beiträge: 13530 Registriert: 30.11.2003 .
|
erstellt am: 08. Feb. 2010 16:40 <-- editieren / zitieren --> Unities abgeben:          Nur für Christian B.
|
cadffm Moderator 良い精神
       

 Beiträge: 22497 Registriert: 03.06.2002 Alles
|
erstellt am: 08. Feb. 2010 16:46 <-- editieren / zitieren --> Unities abgeben:          Nur für Christian B.
Und vorab schonmal die Frage wie deine Funktion "blkObj" ausschaut, oder hast du da nur eine "setq" vergessen ? Danach kannst du dir auch in Hilfe ansehen bezüglich "Auswahlsatz" (ssget) und wie man darauf zugreifen kann . Dazu alle Hilfe-Einträge ansehen von Funktionen die mit "ss" anfangen () <jetzt habe ich erkannt das du das ssget nur vergessen hast, da war ich eben noch unsicher, sorry>AutoLisp Reference - AutoLisp Reference - AutoLisp Functions - [S Functions] - ss* Als allererstes SSGET selbst und dann SSNAME ------------------ CAD.de System-Angaben - CAD on demand - User:FAQ(Acad) [Diese Nachricht wurde von cadffm am 08. Feb. 2010 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Christian B. Mitglied

 Beiträge: 86 Registriert: 09.03.2006
|
erstellt am: 10. Feb. 2010 00:42 <-- editieren / zitieren --> Unities abgeben:         
Hallo, danke für eure Tips, stimmt die Hilfe ist wirklich "hilfreich"  (defun c:aa() (vl-load-com) (setq blkSET (ssget)) (setq blkNrCurr 0) (setq blkNrInSET (sslength blkSET)) (setq blkObj (vlax-ename->vla-object (ssname (blkSET) blkNrCurr))) ;(setq blkObj (vlax-ename->vla-object (ssname (ssget) 0))) PRIMA!!! ;(foreach blkObj blkSet (setq blkProps (vlax-safearray->list (vlax-variant-value (vla-GetDynamicBlockProperties blkObj)))) (foreach blkProp blkProps ; Name Liste (cond ((and (= (vla-Get-PropertyName blkProp) Sichtbarkeit" ))Sichtbarkeitsname (vla-Put-Value blkProp "Field 3.00m") ; Sichtbarkeit ) ) ) (setq blkNrCurr (+ blkNrCurr 1)) ) Soweit bin ich jetzt gekommen. Allerdings bin ich immer noch nicht so ganz da wo ich das Ding haben will. Ich will irgendwie alle Blöcke im Blockset bearbeiten. Dazu habe ich einen Zähler eingebaut, der noch irgendwie bis zu der max. Anzahl der Elemente in der Liste zählen soll und dann immer wieder, insofern vorhanden den Parameter abändern soll. (setq blkObj (vlax-ename->vla-object (ssname (ssget) 0))) (setq blkObj (vlax-ename->vla-object (ssname (blkSET) blkNrCurr))) Das erste geht, das zweite mit Variablen nicht. Hab ich da irgendeinen Denkfehler in der Reihenfolge? (Komme von VBA) Trotzdem mal soweit herzlichen Dank! Christian B. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dorfy Mitglied Double-Dipl.-Ing. Bleistiftanspitzer
  
 Beiträge: 900 Registriert: 21.07.2006 AutoCad2007, ProE, HiCad
|
erstellt am: 10. Feb. 2010 07:30 <-- editieren / zitieren --> Unities abgeben:          Nur für Christian B.
Zitat: Original erstellt von Christian B.: ... Soweit bin ich jetzt gekommen. Allerdings bin ich immer noch nicht so ganz da wo ich das Ding haben will. Ich will irgendwie alle Blöcke im Blockset bearbeiten. Dazu habe ich einen Zähler eingebaut, der noch irgendwie bis zu der max. Anzahl der Elemente in der Liste zählen soll und dann immer wieder, insofern vorhanden den Parameter abändern soll. ... Das erste geht, das zweite mit Variablen nicht. Hab ich da irgendeinen Denkfehler in der Reihenfolge? (Komme von VBA)
Hi, na dann bau mal noch ne Schleife ein, da die Hilfe ja hilfreich ist Stichwort repeat oder while ... sowas gibt es ja auch in VBA. sslength könnte auch noch nützlich sein... ------------------ Mfg Heiko Elefantenjagd in Afrika "... LISP-Programmierer bauen einen Irrgarten aus Klammern und hoffen, dass sich der Elefant darin verirrt..." (www.uni-leipzig.de/~rotheh/elefant.htm) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Christian B. Mitglied

 Beiträge: 86 Registriert: 09.03.2006
|
erstellt am: 10. Feb. 2010 18:36 <-- editieren / zitieren --> Unities abgeben:         
Hi, Jetzt ist sie soweit fertig und klappt prima, danke. Zum Schluss kommt aber immer noch eine Fehlermeldung: Befehl: aa Objekte wählen: Entgegengesetzte Ecke angeben: 4 gefunden Objekte wählen: ; Fehler: Fehlerhafter Argumenttyp: lentityp nil BZW.: <1> :ERROR-BREAK [2] (vlax-ename->vla-object nil) [3] (C:AA) <4> :CALLBACK-ENTRY <5> :ARQ-SUBR-CALLBACK Kann mir da noch jemand einen kleinen Anstupser geben? (defun c:aa() (vl-load-com) (setq blkSET (ssget)) (setq blkNrCurr 0) (setq blkNrInSET (sslength blkSET))
(while (<= blkNrCurr blkNrInSET) (setq blkObj (vlax-ename->vla-object (ssname (blkSET) blkNrCurr))) (setq blkProps (vlax-safearray->list (vlax-variant-value (vla-GetDynamicBlockProperties blkObj)))) (foreach blkProp blkProps ; Name Liste (cond ((and (= (vla-Get-PropertyName blkProp) "Sichtbarkeit")) ; Sichtbarkeitsname (vla-Put-Value blkProp "Field 3.00m") ; Sichtbarkeit ) ) ) (setq blkNrCurr (1+ blkNrCurr)) ) ) Grüße, Christian
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |

| |
CADmium Moderator Maschinenbaukonstrukteur
       

 Beiträge: 13530 Registriert: 30.11.2003 .
|
erstellt am: 10. Feb. 2010 18:39 <-- editieren / zitieren --> Unities abgeben:          Nur für Christian B.
|