| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Layout mit dyn. Block einrichten (1825 / mal gelesen)
|
xem Mitglied Zeichner
Beiträge: 847 Registriert: 07.08.2008 Software: AutoCAD 2022 - 64bit Windows 10 Pro - 64bit PDFCreator 1.0.2 - 32bit Ghostscript 9.0 - 64bit PDF-XChange Viewer - 64bit GIMP 2.6.8 - 64bit MS Office 2013 - 32bit Opera 12 - 32bit MacroX - 32bit 7-zip - 64bit ----------------------- Hardware: Intel i5 680 3,6GHz @ 4GHz 8GB RAM 1333MHz nVidia GTX 460 1024MB Intel SSD 2.5 80GB X25-M Samsung SyncMaster 245B+ Iiyama ProLite E1900s Logitech mx518 Logitech G11 Roccat Sense Glacier Blue
|
erstellt am: 14. Apr. 2016 14:29 <-- editieren / zitieren --> Unities abgeben:
Hallo, wir verwenden für unsere Layouts einen dyn. Block als Rahmen, bei dem wir vorgegebene Höhen / Breiten auswählen können. Jetzt bin ich am überlegen, wie man die Größe des Rahmens in das Layout bekommt. Der Block müsste ausgewählt und dann die zwei Werte für die Höhe und Breite ausgelesen werden. Diese Werte lasse ich mir schon in einem Schriftfeld anzeigen und wären die Werte für "Abrufen" und "Abrufen1" (im Block sind zwei Abruf-Tabellen um die Höhe und Breite auszuwählen). Wie kann ich in LISP mir diese zwei Werte in eine Variable X und Y auslesen? Danke ------------------ Error in Layer 8 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 21533 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 14. Apr. 2016 19:51 <-- editieren / zitieren --> Unities abgeben: Nur für xem
|
xem Mitglied Zeichner
Beiträge: 847 Registriert: 07.08.2008 Software: AutoCAD 2022 - 64bit Windows 10 Pro - 64bit PDFCreator 1.0.2 - 32bit Ghostscript 9.0 - 64bit PDF-XChange Viewer - 64bit GIMP 2.6.8 - 64bit MS Office 2013 - 32bit Opera 12 - 32bit MacroX - 32bit 7-zip - 64bit ----------------------- Hardware: Intel i5 680 3,6GHz @ 4GHz 8GB RAM 1333MHz nVidia GTX 460 1024MB Intel SSD 2.5 80GB X25-M Samsung SyncMaster 245B+ Iiyama ProLite E1900s Logitech mx518 Logitech G11 Roccat Sense Glacier Blue
|
erstellt am: 15. Apr. 2016 09:24 <-- editieren / zitieren --> Unities abgeben:
Hallo, >hier< habe ich was gefunden, wo mir die Eigenschaften ausgegeben werden. Mir werden aber alle Werte für das Abrufen ausgegeben. Ich möchte aber nur den aktuell ausgewählten Wert haben. Geht das oder bekomme ich nur die komplette List?
Code: (defun c:test ( / sel str ) (if (and (princ "\nSelect dynamic block: ") (setq sel (ssget "_+.:E:S" '((0 . "INSERT")))) (setq str (getstring "\nSpecify dynamic parameter name: ")) ) (LM:getdynpropallowedvalues (vlax-ename->vla-object (ssname sel 0)) str ) ) ) ;; Get Dynamic Block Property Allowed Values-Lee Mac ;; Returns the allowed values for a specific Dynamic Block property. ;; blk - [vla] VLA Dynamic Block Reference object ;; prp - [str] Dynamic Block property name (case-insensitive) ;; Returns: [lst] List of allowed values for property, else nil if no restrictions (defun LM:getdynpropallowedvalues ( blk prp ) (setq prp (strcase prp)) (vl-some '(lambda ( x ) (if (= prp (strcase (vla-get-propertyname x))) (vlax-get x 'allowedvalues))) (vlax-invoke blk 'getdynamicblockproperties) ) ) (vl-load-com) (princ)
------------------ Error in Layer 8 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 21533 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 15. Apr. 2016 09:47 <-- editieren / zitieren --> Unities abgeben: Nur für xem
Wie in der Beschreibung angegeben werden dort die möglichen Werte ausgegeben, es wird also im Block gesucht und nicht die Blockreferenz angesprochen. Du brauchst dowas hier: http://ww3.cad.de/foren/ubb/Forum145/HTML/001303.shtml daraus kannst du dir dann leicht ein get anstatt set machen, ohne Gewähr zur Variantumwandlung sieht das dann so aus: ; (getProperty (vlax-ename->vla-object (car (entsel))) "Laenge") (defun getProperty (vlaDynBlock sPropertyName / vlaProperty) (foreach vlaProperty (vlax-safearray->list (vlax-variant-value (vla-GetDynamicBlockProperties vlaDynBlock))) (if (= (vla-get-PropertyName vlaProperty) sPropertyName) (vlax-variant-value(vla-get-value vlaProperty)) ); end if ); end foreach ); end defun Allerdings gibt es sicher auch schöneres bereits fertig im Lispforum. ------------------ CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
xem Mitglied Zeichner
Beiträge: 847 Registriert: 07.08.2008 Software: AutoCAD 2022 - 64bit Windows 10 Pro - 64bit PDFCreator 1.0.2 - 32bit Ghostscript 9.0 - 64bit PDF-XChange Viewer - 64bit GIMP 2.6.8 - 64bit MS Office 2013 - 32bit Opera 12 - 32bit MacroX - 32bit 7-zip - 64bit ----------------------- Hardware: Intel i5 680 3,6GHz @ 4GHz 8GB RAM 1333MHz nVidia GTX 460 1024MB Intel SSD 2.5 80GB X25-M Samsung SyncMaster 245B+ Iiyama ProLite E1900s Logitech mx518 Logitech G11 Roccat Sense Glacier Blue
|
erstellt am: 15. Apr. 2016 10:51 <-- editieren / zitieren --> Unities abgeben:
Bin bei Lee Mac fündig geworden. Dynamic Block Functionsso funktioniert es:
Code: (defun c:test ( / sel str ) (if (and (princ "\nSelect dynamic block: ") (setq sel (ssget "_+.:E:S" '((0 . "INSERT")))) (setq str (getstring "\nSpecify dynamic parameter name: ")) ) (LM:getdynpropvalue (vlax-ename->vla-object (ssname sel 0)) str ) ) ) ;; Get Dynamic Block Property Value - Lee Mac ;; Returns the value of a Dynamic Block property (if present) ;; blk - [vla] VLA Dynamic Block Reference object ;; prp - [str] Dynamic Block property name (case-insensitive)(defun LM:getdynpropvalue ( blk prp ) (setq prp (strcase prp)) (vl-some '(lambda ( x ) (if (= prp (strcase (vla-get-propertyname x))) (vlax-get x 'value))) (vlax-invoke blk 'getdynamicblockproperties) ) ) (vl-load-com) (princ)
In welcher Variablen ist der Wert dann hinterlegt oder muss der Wert noch in eine Variablen gespeichert werden? ------------------ Error in Layer 8 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 21533 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 15. Apr. 2016 10:55 <-- editieren / zitieren --> Unities abgeben: Nur für xem
|
xem Mitglied Zeichner
Beiträge: 847 Registriert: 07.08.2008 Software: AutoCAD 2022 - 64bit Windows 10 Pro - 64bit PDFCreator 1.0.2 - 32bit Ghostscript 9.0 - 64bit PDF-XChange Viewer - 64bit GIMP 2.6.8 - 64bit MS Office 2013 - 32bit Opera 12 - 32bit MacroX - 32bit 7-zip - 64bit ----------------------- Hardware: Intel i5 680 3,6GHz @ 4GHz 8GB RAM 1333MHz nVidia GTX 460 1024MB Intel SSD 2.5 80GB X25-M Samsung SyncMaster 245B+ Iiyama ProLite E1900s Logitech mx518 Logitech G11 Roccat Sense Glacier Blue
|
erstellt am: 15. Apr. 2016 14:58 <-- editieren / zitieren --> Unities abgeben:
So den ersten Wert bekomme ich in eine Variable, aber den zweiten Wert will er mir einfach nicht auslesen Warum? Code: (defun c:test ( / obj epar1 epar2 apar1 apar2) (if (and (setq obj (ssget "_X" (list'(-4 . "<OR") '(-4 . "<AND") '(0 . "INSERT") '(2 . "E-Rahmen,`*U*") '(-4 . "AND>") '(-4 . "OR>") (cons 410 (getvar "CTAB"))))) (setq epar1 "abrufen") (setq epar2 "abrufen1") ) (setq apar1 (LM:getdynpropvalue (vlax-ename->vla-object (ssname obj 0)) epar1 ) ) (setq apar2 (LM:getdynpropvalue (vlax-ename->vla-object (ssname obj 0)) epar2 ) ) ) ) (defun LM:getdynpropvalue ( blk prp ) (setq prp (strcase prp)) (vl-some '(lambda ( x ) (if (= prp (strcase (vla-get-propertyname x))) (vlax-get x 'value))) (vlax-invoke blk 'getdynamicblockproperties) ) ) (vl-load-com) (princ)
------------------ Error in Layer 8 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 21533 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 15. Apr. 2016 15:38 <-- editieren / zitieren --> Unities abgeben: Nur für xem
Weil dein IF-Konstrukt nicht so ist wie es deinem Wunsch entsprechen müßte? Code: (if ; WENN (and ; DAS WAHR IST (setq obj (ssget "_X" (list'(-4 . "<OR") ...usw))) (setq epar1 "abrufen") (setq epar2 "abrufen1") ) ; DANN MACH DIESES (setq apar1 (LM:getdynpropvalue (vlax-ename->vla-object (ssname obj 0)) epar1 ) ) ; ANSONSTEN MACH DAS HIER (setq apar2 (LM:getdynpropvalue (vlax-ename->vla-object (ssname obj 0)) epar2 ) ) ); IF-END
Vermutlich soll er, wenn die Bedingung wahr ist, beide (setq apar1 UND (setq apar2 abarbeiten, also müßtest du diese beiden zusammenfassen. Entweder durch ein PROGN außen herum (progn (setq apar1 "Test")(setq apar2 "lauf")), oder indem du nur einen setq Ausdruck nutzt (setq apar1 "Test" apar2 "LAUF") ------------------ CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
xem Mitglied Zeichner
Beiträge: 847 Registriert: 07.08.2008 Software: AutoCAD 2022 - 64bit Windows 10 Pro - 64bit PDFCreator 1.0.2 - 32bit Ghostscript 9.0 - 64bit PDF-XChange Viewer - 64bit GIMP 2.6.8 - 64bit MS Office 2013 - 32bit Opera 12 - 32bit MacroX - 32bit 7-zip - 64bit ----------------------- Hardware: Intel i5 680 3,6GHz @ 4GHz 8GB RAM 1333MHz nVidia GTX 460 1024MB Intel SSD 2.5 80GB X25-M Samsung SyncMaster 245B+ Iiyama ProLite E1900s Logitech mx518 Logitech G11 Roccat Sense Glacier Blue
|
erstellt am: 18. Apr. 2016 11:01 <-- editieren / zitieren --> Unities abgeben:
Hallo, so funktioniert es jetzt:
Code: (defun c:test ( / obj epar1 epar2 apar1 apar2) (if (and (setq obj (ssget "_X" (list'(-4 . "<OR") '(-4 . "<AND") '(0 . "INSERT") '(2 . "E-Rahmen,`*U*") '(-4 . "AND>") '(-4 . "OR>") (cons 410 (getvar "CTAB"))))) (setq epar1 "abrufen") (setq epar2 "abrufen1") ) (progn (setq apar1 (LM:getdynpropvalue (vlax-ename->vla-object (ssname obj 0)) epar1 ) ) (setq apar2 (LM:getdynpropvalue (vlax-ename->vla-object (ssname obj 0)) epar2 ) ) ) ) (command "-plot" "ja" "" "_Designjet 800 - V2.pc3" (strcat apar2 "x" apar1) "M" "Q" "N" "F" (strcat "-" apar1 "," apar2) "0,0" "1:1" "0,0" "Ja" "farbig.ctb" "Ja" "Nein" "Nein" "Nein" "Nein" "Ja" "Nein") ) (defun LM:getdynpropvalue ( blk prp ) (setq prp (strcase prp)) (vl-some '(lambda ( x ) (if (= prp (strcase (vla-get-propertyname x))) (vlax-get x 'value))) (vlax-invoke blk 'getdynamicblockproperties) ) ) (vl-load-com) (princ)
Am Ende zeigt AutoCAD aber noch ein "nil" an. Hat das was zu sagen? ------------------ Error in Layer 8 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 21533 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 18. Apr. 2016 13:47 <-- editieren / zitieren --> Unities abgeben: Nur für xem
nil ist Nichts und zb. die normale Rückgabe von(command...) Da du nun weiter bist: Du erstellst einen Auswahlsatz mit Blockreferenzen von Blöcken die mit Nahmen E-Rahmen oder *U anfangen,Dateiweit. ausgewertet wird nur das erste Objekt um Auswahlsatz. Das Ergebis ist also mit (russisch) Roulette vergleichbar, dies nur als Hinweis. Mit *U fangen fangen alle dynamisch veränderte Blöcke an zB. Wenn also mal neben dem Rahmen so eine Blockreferenz den Weg ins Layout findet kann es knallen. ------------------ CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
xem Mitglied Zeichner
Beiträge: 847 Registriert: 07.08.2008 Software: AutoCAD 2022 - 64bit Windows 10 Pro - 64bit PDFCreator 1.0.2 - 32bit Ghostscript 9.0 - 64bit PDF-XChange Viewer - 64bit GIMP 2.6.8 - 64bit MS Office 2013 - 32bit Opera 12 - 32bit MacroX - 32bit 7-zip - 64bit ----------------------- Hardware: Intel i5 680 3,6GHz @ 4GHz 8GB RAM 1333MHz nVidia GTX 460 1024MB Intel SSD 2.5 80GB X25-M Samsung SyncMaster 245B+ Iiyama ProLite E1900s Logitech mx518 Logitech G11 Roccat Sense Glacier Blue
|
erstellt am: 18. Apr. 2016 14:40 <-- editieren / zitieren --> Unities abgeben:
Danke für den Hinweis. Da es immer der gleiche Block sein soll, habe ich mal den Rest gelöscht. Für die Blattausrichtung musste ich noch prüfen lassen ob Hoch- oder Querformat eingestellt werden soll. Code:
(defun c:test ( / obj epar1 epar2 apar1 apar2 hq) ;richtet das Layout automatisch ein anhand vom Block E-Rahmen (if (and (setq obj (ssget "_X" (list'(-4 . "<OR") '(-4 . "<AND") '(0 . "INSERT") '(2 . "E-Rahmen") '(-4 . "AND>") '(-4 . "OR>") (cons 410 (getvar "CTAB"))))) (setq epar1 "abrufen") (setq epar2 "abrufen1") ) (progn (setq apar1 (LM:getdynpropvalue (vlax-ename->vla-object (ssname obj 0)) epar1 ) ) (setq apar2 (LM:getdynpropvalue (vlax-ename->vla-object (ssname obj 0)) epar2 ) ) ) ) (if (< (atof apar1) (atof apar2)) (setq hq "H") (setq hq "Q")) (command "-plot" "ja" "" "_Designjet 800 - V2.pc3" (strcat apar2 "x" apar1) "M" hq "N" "F" (strcat "-" apar1 "," apar2) "0,0" "1:1" "0,0" "Ja" "farbig.ctb" "Ja" "Nein" "Nein" "Nein" "Nein" "Ja" "Nein") ) (defun LM:getdynpropvalue ( blk prp ) (setq prp (strcase prp)) (vl-some '(lambda ( x ) (if (= prp (strcase (vla-get-propertyname x))) (vlax-get x 'value))) (vlax-invoke blk 'getdynamicblockproperties) ) ) (vl-load-com) (princ)
Eine Überlegung wäre jetzt noch das ganze Layout auf Basis 0,0 zu verschieben oder die Basis vom Block zu verwenden. Jetzt wird davon ausgegangen, dass der Block auf 0,0 liegt. Mal schauen wenn etwas mehr Luft ist werde ich das noch versuchen und wenn mir noch ein paar Sachen einfallen. Danke für deine Hilfe! ------------------ Error in Layer 8 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
xem Mitglied Zeichner
Beiträge: 847 Registriert: 07.08.2008 Software: AutoCAD 2022 - 64bit Windows 10 Pro - 64bit PDFCreator 1.0.2 - 32bit Ghostscript 9.0 - 64bit PDF-XChange Viewer - 64bit GIMP 2.6.8 - 64bit MS Office 2013 - 32bit Opera 12 - 32bit MacroX - 32bit 7-zip - 64bit ----------------------- Hardware: Intel i5 680 3,6GHz @ 4GHz 8GB RAM 1333MHz nVidia GTX 460 1024MB Intel SSD 2.5 80GB X25-M Samsung SyncMaster 245B+ Iiyama ProLite E1900s Logitech mx518 Logitech G11 Roccat Sense Glacier Blue
|
erstellt am: 04. Mai. 2016 11:54 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich habe festgestellt das mein Block (dynamisch) zwar den Namen "E-Rahmen" hat, aber unter Code: '(2 . "E-Rahmen,`*U*")
nicht mit "E-Rahmen" sondern über "`*U*" gefunden wird. Dann habe ich mit "(entget(car(entsel)))" nachgeschaut und da steht (2 . "*U21") Warum wird mir der Name angezeigt wenn er dann doch nur U21 ist? Wie kann ich den Block richtig über seinen Namen finden? Danke ------------------ Error in Layer 8 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 21533 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 04. Mai. 2016 12:00 <-- editieren / zitieren --> Unities abgeben: Nur für xem
|
xem Mitglied Zeichner
Beiträge: 847 Registriert: 07.08.2008 Software: AutoCAD 2022 - 64bit Windows 10 Pro - 64bit PDFCreator 1.0.2 - 32bit Ghostscript 9.0 - 64bit PDF-XChange Viewer - 64bit GIMP 2.6.8 - 64bit MS Office 2013 - 32bit Opera 12 - 32bit MacroX - 32bit 7-zip - 64bit ----------------------- Hardware: Intel i5 680 3,6GHz @ 4GHz 8GB RAM 1333MHz nVidia GTX 460 1024MB Intel SSD 2.5 80GB X25-M Samsung SyncMaster 245B+ Iiyama ProLite E1900s Logitech mx518 Logitech G11 Roccat Sense Glacier Blue
|
erstellt am: 04. Mai. 2016 16:41 <-- editieren / zitieren --> Unities abgeben:
Ich habe es jetzt mal so versucht: Code: (defun c:autol ( / obj1 obj2 epar1 epar2 apar1 apar2 hq) (if (and (setq obj1 (ssget "_X" (list'(-4 . "<OR") '(-4 . "<AND") '(0 . "INSERT") '(2 . "E-Rahmen,`*U*") '(-4 . "AND>") '(-4 . "OR>") (cons 410 (getvar "CTAB"))))) (setq epar1 "Abrufen") (setq epar2 "Abrufen1") ) (progn (setq obj2 (vlax-ename->vla-object (ssname obj1 0))) (if (= (vla-get-effectivename obj2) "E-Rahmen") (progn (setq apar1 (LM:getdynpropvalue obj2 epar1)) (setq apar2 (LM:getdynpropvalue obj2 epar2)) ) ) ) ) (if (< (atof apar1) (atof apar2)) (setq hq "H") (setq hq "Q")) (command "-plot" "ja" "" "_HP DesignJet T930_CAD.pc3" (strcat apar2 "x" apar1) "M" hq "N" "F" (strcat "-" apar1 "," apar2) "0,0" "1:1" "0,0" "Ja" "farbig.ctb" "Ja" "Nein" "Nein" "Nein" "Nein" "Ja" "Nein") ) (defun LM:getdynpropvalue ( blk prp ) (setq prp (strcase prp)) (vl-some '(lambda ( x ) (if (= prp (strcase (vla-get-propertyname x))) (vlax-get x 'value))) (vlax-invoke blk 'getdynamicblockproperties) ) ) (vl-load-com) (princ)
Solange ein dyn. Block in der Zeichnung drin ist funktioniert es auch. Ist ein zweiter dyn. Block drin kommt:
Code: nil ; Fehler: Fehlerhafter Argumenttyp: stringp nil
Mit:
Code: (if (= (vla-get-effectivename obj2) "E-Rahmen")
lasse ich doch den Namen überprüfen. Warum geht es beim dann nicht wenn ein weiterer dyn. Block drin ist? Danke ------------------ Ich habe es noch mal so geändert:
Code: (defun c:autol ( / i obj1 obj2 epar1 epar2 apar1 apar2 hq) (if (and (setq obj1 (ssget "_X" (list'(-4 . "<OR") '(-4 . "<AND") '(0 . "INSERT") '(2 . "E-Rahmen,`*U*") '(-4 . "AND>") '(-4 . "OR>") (cons 410 (getvar "CTAB"))))) (setq epar1 "Abrufen") (setq epar2 "Abrufen1") ) (repeat (setq i (sslength obj1)) (setq obj2 (vlax-ename->vla-object (ssname obj1 (setq i (1- i))))) (if (and (equal (vla-get-IsDynamicBlock obj2) :vlax-true) (equal (vla-get-EffectiveName obj2) "E-Rahmen") ) (progn (setq apar1 (LM:getdynpropvalue obj2 epar1)) (setq apar2 (LM:getdynpropvalue obj2 epar2)) ) ) ) ) (if (< (atof apar1) (atof apar2)) (setq hq "H") (setq hq "Q")) (command "-plot" "ja" "" "_HP DesignJet T930_CAD.pc3" (strcat apar2 "x" apar1) "M" hq "N" "F" (strcat "-" apar1 "," apar2) "0,0" "1:1" "0,0" "Ja" "farbig.ctb" "Ja" "Nein" "Nein" "Nein" "Nein" "Ja" "Nein") ) (defun LM:getdynpropvalue ( blk prp ) (setq prp (strcase prp)) (vl-some '(lambda ( x ) (if (= prp (strcase (vla-get-propertyname x))) (vlax-get x 'value))) (vlax-invoke blk 'getdynamicblockproperties) ) ) (vl-load-com) (princ)
Das sieht soweit gut aus. Ich werde es nach dem Vatertag noch genauer testen. [Diese Nachricht wurde von xem am 04. Mai. 2016 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 21533 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 04. Mai. 2016 17:34 <-- editieren / zitieren --> Unities abgeben: Nur für xem
[EDIT: Dieses Posting entstand VOR deinem EDIT] Mit einem zweiten DynBlock (wobeiu es hier um einen ganz anderen Block geht, nicht um eine weitere Referenz von "E-Rahmen"), klappt das auch, grundsätzlich zumindest.
ABER: Diese furchtbaren Zeilen nehmen nur die erste Blockreferenz des Auswahlsatzen (es könnten ja mehrere vorhanden sien, nur einer wird bearbeitet) und zweitens: Sollte "die erste Blockreferenz" im Auswahlsatz zufällig von einem anderen Block sein, dann fehlt diesem evtl. der Parameter "Abrufen" und/oder "Abrufen2", unabhängig davon das du mit dem Ergebnis sowieso nicht glücklich werden würdest, da die Rückgabe wohl kaum zufällig dem entsprechen was du für eine andere Blockreferenz abfragen wolltest. Code: (defun c:autol ( / obj1 obj2 epar1 epar2 apar1 apar2 hq) (if (and (setq obj1 (ssget "_X" (list'(-4 . "<OR") '(-4 . "<AND") '(0 . "INSERT") '(2 . "E-Rahmen,`*U*") ; wählt alle Blockreferenzen die Blöcke referenzieren mit dem Namen E-Rahmen oder mit *U beginnen und noch mal in Erinnerung: ALLE dynamisch veränderten Blöcke/Referenzen haben einen Namen der mit *U beginnt. Nicht nur die des E-Rahmen '(-4 . "AND>") '(-4 . "OR>") (cons 410 (getvar "CTAB"))))) (setq epar1 "Abrufen") (setq epar2 "Abrufen1") ) (progn ; wenn zuvor die (and <Bedingungen>) erfüllt ist, dann wird diese PROGN-Teil ausgeführt, sonst nichts) (setq obj2 (vlax-ename->vla-object (ssname obj1 0))) (if (= (vla-get-effectivename obj2) "E-Rahmen"); schaut nur nach dem ersten Objekt im Auswahlsatz und berücksichtigt keine GROSSkleinSchreibung (progn (setq apar1 (LM:getdynpropvalue obj2 epar1)) ; hier fragst du den Wert vom Parameter "Abrufen" ab (setq apar2 (LM:getdynpropvalue obj2 epar2)) ; wenn der Block so einen Parameter nicht hat, wird nil zurückgegeben und apar1 hat keinen Wert.. ) ) ) ) (if (< (atof apar1) (atof apar2)) ; hier nimmst du an das apar1 und apar2 existieren, das ist aber nicht immer der Fall ; (wenn "(= (vla-get-effectivename obj2) "E-Rahmen")" nicht zutraf gibt es kein apar1 und apar2 ; oder wenn der Block keinen Parameter "Abrufen" oder "Abrufen1" entsprechend apar1/apar2 hatte. (setq hq "H") (setq hq "Q") ) ; und hier nimmst du schon wieder an das apar2 hp etc existieren.. (command "-plot" "ja" "" "_HP DesignJet T930_CAD.pc3" (strcat apar2 "x" apar1) "M" hq "N" "F" (strcat "-" apar1 "," apar2) "0,0" "1:1" "0,0" "Ja" "farbig.ctb" "Ja" "Nein" "Nein" "Nein" "Nein" "Ja" "Nein") )
------------------ CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |