Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Rund um AutoCAD
  Layout mit dyn. Block einrichten

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
  
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


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

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 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

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
良い精神




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

Beiträge: 21533
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 14. Apr. 2016 19:51    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 xem 10 Unities + Antwort hilfreich

Suche im Forum145 (Lisp) nach dynamischen Blöcken, da findest du Codebeispiele.

------------------
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


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

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 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

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
良い精神




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

Beiträge: 21533
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 15. Apr. 2016 09:47    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 xem 10 Unities + Antwort hilfreich

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


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

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 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

Bin bei Lee Mac fündig geworden.
Dynamic Block Functions

so 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
良い精神




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

Beiträge: 21533
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 15. Apr. 2016 10:55    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 xem 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von xem:
oder muss der Wert noch in eine Variablen gespeichert werden?

So ist es, wenn man das möchte/benötigt.

------------------
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


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

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 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

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
良い精神




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

Beiträge: 21533
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 15. Apr. 2016 15:38    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 xem 10 Unities + Antwort hilfreich

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


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

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 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

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
良い精神




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

Beiträge: 21533
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 18. Apr. 2016 13:47    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 xem 10 Unities + Antwort hilfreich

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


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

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 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

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


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

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 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

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
良い精神




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

Beiträge: 21533
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 04. Mai. 2016 12:00    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 xem 10 Unities + Antwort hilfreich

Die Eigenschaften-Palette zeigt dir den EFFEKTIVNAMEN an,
der wirkliche referenzierte Block hat den Namen E-RAHMEN, wenn er nocht NICHT dynamisch verändert wurde, oder
*Unnn wenn es eine abgleitete Blockdefinition ist (Blockreferenz wurde dynamisch verändert).

Schau dir die Datenstruktur von dyn.Blocks mal an, User FAQ im Forum, zum Thema BLÖCKE..

Wie regelt man das:
Da gibt es mehrere Wege und kommt es darauf an ob nur unverschachelte Blockreferenzen benötigt,
wer an ssget geht, den interessieren nur unverschachtelte Blockreferenzen, in dem Fall könnte
man alle *Unn mit einsammeln wie gewohnt(dein Beispiel) und auf effectivname prüfen..

Hier zB. ist das Thema umgesetzt: http://ww3.cad.de/foren/ubb/Forum145/HTML/003155.shtml


------------------
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


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

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 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

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
良い精神




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

Beiträge: 21533
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 04. Mai. 2016 17: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 xem 10 Unities + Antwort hilfreich

[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

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)2023 CAD.de | Impressum | Datenschutz