Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Dynamische Blöcke, Parametertyp ermitteln?

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
  
PNY präsentiert die neue NVIDIA RTX A400 und die A1000 Grafikkarte, eine Pressemitteilung
Autor Thema:  Dynamische Blöcke, Parametertyp ermitteln? (157 / mal gelesen)
joern bosse
Ehrenmitglied
Dipl.-Ing. Vermessung


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

Beiträge: 1774
Registriert: 11.10.2004

Window 11
ACAD 2021
CIVIL 2021
BricsCAD ab V14
11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz 2.80 GHz
32.0GB RAM
NVIDIA GeForce MX450<P>

erstellt am: 06. Jan. 2025 12:56    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


ParameterProps.jpg

 
Hallo,
ich habe einen dynamischen Block und möchte feststellen, ob ein Drehungsparameter vorhanden ist, damit ich den Wert auf den Winkel der eigentlichen Blockreferenz draufaddieren kann.

mit der Methode getdynamicblockproperties erhalte ich folgende Werte:
; Eigenschaftswerte:
;  AllowedValues (RO) = nil
;  Description (RO) = ""
;  PropertyName (RO) = "Winkel1"
;  ReadOnly (RO) = 0
;  show (RO) = -1
;  UnitsType (RO) = 1
;  Value = 1.95188

Den Parametertyp "Drehung" bekommme ich so aber nicht, geht das gar nicht oder sehe ich den Wald vor lauter Bäumen nicht??

Bin wie immer dankbar für jeden Tipp.

------------------
viele Grüße

Jörn
http://www.bosse-engineering.com

Der Multifilter (V 1.1)

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: 22322
Registriert: 03.06.2002

Alles

erstellt am: 06. Jan. 2025 15:35    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 joern bosse 10 Unities + Antwort hilfreich

Frohes Neues,

dynamische Parameter eines dynBlocks (hier eingeschränkt auf Drehungsparameter):

Code:
(defun test (blk / prms)
    (if (and
            (= :vlax-true (vla-get-isdynamicblock blk))
            (= :vlax-true (vla-get-hasextensiondictionary blk))
            (setq prms
                (mapcar
                  '(lambda (pair)
                        (if (and
                                (= 360 (car pair))
(= (strcase "BLOCKROTATIONPARAMETER") (cdr (assoc 0 (entget (cdr pair)))))
                            )
                            (cdr pair)
                        )
                    )
                    (dictsearch
                        (vlax-vla-object->ename (vla-getextensiondictionary blk))
                        "ACAD_ENHANCEDBLOCK"
                    )
                )
            )
        )
      (vl-remove 'nil prms)
    )
)

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

joern bosse
Ehrenmitglied
Dipl.-Ing. Vermessung


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

Beiträge: 1774
Registriert: 11.10.2004

Window 11
ACAD 2021
CIVIL 2021
BricsCAD ab V14
11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz 2.80 GHz
32.0GB RAM
NVIDIA GeForce MX450<P>

erstellt am: 06. Jan. 2025 16: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


DynBlockParametertyp.dwg

 
Hallo Sebastian,
ich habe es mal ausprobiert, allerdings kommt bei
(dictsearch(vlax-vla-object->ename (vla-getextensiondictionary blk))
                  "ACAD_ENHANCEDBLOCK"
                    )
nur NIL zurück, die MAPCAR-Schleife wird dann nicht durchlaufen.
Als blk habe ich das VLA-Objekt einer Blockreferenz eines dynamischen Blockes übergeben. Die Bespielzeichnung mit 2 Blockreferenzen habe ich angehängt.

Ist das bei Dir auch so?


Code:

(defun c:test:Parametertyp:Rotate ( / obj)
  (if (setq obj (car(entsel)))
    (test:ParametertypRotate-p (vlax-ename->vla-object obj))
    )
  )


(defun test:ParametertypRotate-p (blk / prms)
    (if (and
            (= :vlax-true (vla-get-isdynamicblock blk))
            (= :vlax-true (vla-get-hasextensiondictionary blk))
            (setq prms
                (mapcar
                  '(lambda (pair)
                        (if (and
                                (= 360 (car pair))
(= (strcase "BLOCKROTATIONPARAMETER") (cdr (assoc 0 (entget (cdr pair)))))
                            )
                            (cdr pair)
                        )
                    )
                    (dictsearch
                        (vlax-vla-object->ename (vla-getextensiondictionary blk))
                        "ACAD_ENHANCEDBLOCK"
                    )
                )
            )
        )
      (vl-remove 'nil prms)
    )
)


------------------
viele Grüße

Jörn
http://www.bosse-engineering.com

Der Multifilter (V 1.1)

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: 22322
Registriert: 03.06.2002

Alles

erstellt am: 06. Jan. 2025 20:10    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 joern bosse 10 Unities + Antwort hilfreich

>" habe einen dynamischen Block und möchte feststellen, ob ein Drehungsparameter vorhanden ist, "
blk ist der Block, nicht die Blockreferenz!

Beim allgemeingültigen programmieren müßte man ja zunächst herausfinden wie der (oder die) Dreh-Parameter heißen!

Für die Blockreferenz, in welcher du dann den Wert auch änderst, kommt man dann so weiter


Code:

Extra mal allgemein:
(defun getalldynprops (blk / pli)
    (mapcar '(lambda ( x )
  (if (/= "Origin" (vla-get-propertyname x)) ; <- ! Achtung / Fehlerquelle falls ein Parameter "Origin" genannt wurde
      (setq pli (cons (strcat (vla-get-propertyname x) " - " (vl-princ-to-string(vlax-get x 'value))) pli))
  )
      )
        (vlax-invoke blk 'getdynamicblockproperties)
    )
  (foreach s pli (print s))
  (princ)
)

(getalldynprops (setq blk (vlax-ename->vla-object(car(entsel)))))




oder wenn du den Parameternamen ohnehin schon kennst:
(getpropertyvalue (car(entsel)) "AcDbDynBlockPropertyWinkel1")

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

joern bosse
Ehrenmitglied
Dipl.-Ing. Vermessung


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

Beiträge: 1774
Registriert: 11.10.2004

Window 11
ACAD 2021
CIVIL 2021
BricsCAD ab V14
11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz 2.80 GHz
32.0GB RAM
NVIDIA GeForce MX450<P>

erstellt am: 07. Jan. 2025 11:30    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 Sebastian,
danke für Deine Ausdauer, ich habe jetzt die Blockdefinition verwendet und schon klappt es. Ich habe mir erstmal eine Liste mit Parametertyp und Parametername ausgegeben, damit komme ich in jedem Fall weiter.

Code:

(defun c:test:DynPara ( / obj)
  (if (setq obj (car(entsel "\nDynBlockRef picken:")))
    (test:DynPara:List
      (vla-item(vla-get-blocks(vla-get-activedocument(vlax-get-acad-object)))
        (vla-get-Effectivename (vlax-ename->vla-object obj)))
      )
    )
  )


(defun test:DynPara:List (vla-BlockDef / PARALIST X)
  (if (and
        (= :vlax-true (vla-get-isdynamicblock vla-BlockDef))
        (= :vlax-true (vla-get-hasextensiondictionary vla-BlockDef))
        (setq ParaList(mapcar '(lambda(X)
                                (list (cdr(assoc 0 (entget(cdr X))))
                                      (cdr(assoc 305 (entget(cdr X)))))
                                )
                        (vl-remove-if (function(lambda(X)(or(/=(car X)360)
                                                            (not(wcmatch
                                                                  (cdr(assoc 0(entget(cdr X))))
                                                                  "*PARAMETER")))))
                          (dictsearch
                            (vlax-vla-object->ename (vla-getextensiondictionary vla-BlockDef))
                            "ACAD_ENHANCEDBLOCK"
                            )
                          )
                        )
              )
        )
    ParaList)
  )


Rückgabeliste:
(("BLOCKROTATIONPARAMETER" "Winkel1")
  ("BLOCKFLIPPARAMETER" "Umkehrstatus1")
  ("BLOCKFLIPPARAMETER" "Umkehrstatus2")
  ("BLOCKLINEARPARAMETER" "Abstand1")
  ("BLOCKLINEARPARAMETER" "Abstand2")
  ("BLOCKLINEARPARAMETER" "Abstand3"))

------------------
viele Grüße

Jörn
http://www.bosse-engineering.com

Der Multifilter (V 1.1)

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