| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY bietet das umfangreichste Ökosystem von B2B als auch B2C-Lösungen für IT-Akteure auf dem Markt, eine Pressemitteilung
|
Autor
|
Thema: Eigenschaften von Applikations-Elementen (EED) abrufen+setzen (2375 / mal gelesen)
|
archi.archi Mitglied
Beiträge: 109 Registriert: 08.10.2010 Windows 11 AutoCAD 2024 Revit 2024
|
erstellt am: 23. Mrz. 2021 16:26 <-- editieren / zitieren --> Unities abgeben:
Hallo Spezialisten, für Elemente einer Applikation (Berechnungen Haustechnik) möchte ich die Applikations-Eigenschaften abrufen und setzen. Mit Applikation können jeweils nur die Werte eines gewählten Elementes geändert werden. entget (car (entsel)) '("*")) führt leider nicht zum Erfolg. Objekt wählen: ((-1 . <Objektname: 1f705e73b40> ) (0 . "LINDBCONTOURAREA") (330 . <Objektname: 1f705e65b70> ) (5 . "348C") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "G00_A__RAUMKONT") (62 . 1) (440 . 33554559) (100 . "linDbBaseObject") (100 . "linDbContourArea")) Als Anlage ein Beispiel. An der roten Fläche (Raum) müssen die nachstehenden Werte dranhängen (s. Foto): G111, N222, R333, B444, 88 und 99. Hoffentlich kann jemand die Daten freilegen. Jeder Hinweis ist (wie immer) willkommen! Beste Grüße archi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAD-Huebner Ehrenmitglied V.I.P. h.c. Verm.- Ing., ATC-Trainer
Beiträge: 9803 Registriert: 01.12.2003 One AutoCAD 2.5 - 2024, AutoCAD, Civil 3D, Win10/Win11
|
erstellt am: 23. Mrz. 2021 17:58 <-- editieren / zitieren --> Unities abgeben: Nur für archi.archi
Habe die Applikation von LiNear nicht im Einsatz. Bei benutzerdef. Objekten steuert der Applikationsentwickler, wie seine Daten im Objekt gespeichert sind. als EEds offenbar nicht. Befehl: LISTE 1 gefunden ACAD_PROXY_ENTITY Layer: "G00_A__RAUMKONT" Bereich: Modellbereich Farbe: 1 (rot) Linientyp: "VONLAYER" Transparenz:50 Referenz = 348c DXF Name: LINDBCONTOURAREA Name der Klasse: linDbContourArea Name der Anwendung: LINEAR_GMAN_DESCR Den Object Enabler für LiNear hab ich jetzt nicht getestet. https://www.linear.eu/de/services-media/linear-support/#c35285 ------------------ Mit freundlichem Gruß Udo Hübner www.CAD-Huebner.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
archi.archi Mitglied
Beiträge: 109 Registriert: 08.10.2010 Windows 11 AutoCAD 2024 Revit 2024
|
erstellt am: 24. Mrz. 2021 08:38 <-- editieren / zitieren --> Unities abgeben:
Hallo Udo, vielen Dank für den schnellen Versuch. Andere Objekte (Linien = "Rohre") werden mit EEDs angereichert. Die Raumfläche ist also eine spezielle liNear-Klasse. Für Wände, Fenster usw. werden von liNear ADT-Bauteile verwendet. Könnte die Raumfläche auch aus der Ecke stammen? Mit dem Enabler können diese Klassen leider nur angezeigt werden. Bei mir (mit der Applikation) ergibt Befehl Liste: LINDBCONTOURAREA Layer: "G00_A__RAUMKONT" Bereich: Modellbereich Farbe: 1 (rot) Linientyp: "VONLAYER" Transparenz:50 Referenz = 348c LINDBCONTOURAREA Bauteil-Typ : Raumkontur Positions-Nummer : Fläche (m²) : 6.81 Höhenlage(m) : 0.0000000000 Gibt es vielleicht noch irgendeine andere Möglichkeit, die Daten herauszukizzeln? Beste Grüße archi [Diese Nachricht wurde von archi.archi am 24. Mrz. 2021 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22298 Registriert: 03.06.2002 Alles
|
erstellt am: 24. Mrz. 2021 09:36 <-- editieren / zitieren --> Unities abgeben: Nur für archi.archi
[QUOTE]Original erstellt von archi.archi: >> für Elemente einer Applikation (Berechnungen Haustechnik) möchte ich die Applikations-Eigenschaften abrufen und setzen. Mit Applikation können jeweils nur die Werte eines gewählten Elementes geändert werden.Gewagt wenn man nicht sicher alle Hintergrundfunktionen kennt, macht aber immer wieder Spaß. >>entget (car (entsel)) '("*")) führt leider nicht zum Erfolg. Tja, eigentlich ist der Link zum Raumblock hinterlegt, aber wenn liNear der API die Infos nicht weitergibt, pech.
>>An der roten Fläche (Raum) müssen die nachstehenden Werte dranhängen (s. Foto): G111, N222, R333, B444, 88 und 99. Wer sagt das , das "muss" nicht zwingend so sein. Aber ja, eigentlich würde man einen Link zum Raumblock finden - aber die Info bekommst du wohl so herum nicht. Im angehängten Beispiel wird der Raumstempel direkt nach der Kontur erzeugt, also kommst du mit ENTNEXT heran, nur nehme ich an das dies durchaus auch mal anders sein kann. (linear wird sicher auch zulassen einen gelöschten Raumstempel dann neu zu erstellen, dann passt es vllt nicht mehr)
Nur diese DWG betrachtet sind R333 und B444 dumme Attributwerte des Raumblockes, mehr nicht?. G111 und N222 sind wie auch 88&99 im Dictionary ROOMDATA gespeichert. - An der Stelle mache ich Schluss Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
archi.archi Mitglied
Beiträge: 109 Registriert: 08.10.2010 Windows 11 AutoCAD 2024 Revit 2024
|
erstellt am: 24. Mrz. 2021 10:49 <-- editieren / zitieren --> Unities abgeben:
Hallo cadffm, die verlässlichen Unterstützer zum Glück hier ALLE noch im Einsatz! Der Beschrifter hat nur dumme Attribute, d.h. diese werden beim Editieren der Fläche an den Beschrifter übertragen. Die Richtung Attribute vom Beschrifter zur Raumfläche funktioniert leider nicht. Die Änderung muss also über die Applikation erfolgen. "G111 und N222 sind wie auch 88&99 im Dictionary ROOMDATA gespeichert." Im Beschrifter-Block oder an der Fläche? Beste Grüße archi
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22298 Registriert: 03.06.2002 Alles
|
erstellt am: 24. Mrz. 2021 11:03 <-- editieren / zitieren --> Unities abgeben: Nur für archi.archi
Zitat: Original erstellt von archi.archi: "G111 und N222 sind wie auch 88&99 im Dictionary ROOMDATA gespeichert." Im Beschrifter-Block oder an der Fläche?
ähhm. Weder noch!? Aber du kommst vom Raumblock dorthin. Vom Insert starten und den Einträgen folgen -> Dict "liNearObjectDict" 360 -> dann weiter -> Dict "Roomdata" 360 -> und hier sind die vier Daten im Xrecord hinterlegt, GRuppencodes 40 40 300 300 und so weiter
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
archi.archi Mitglied
Beiträge: 109 Registriert: 08.10.2010 Windows 11 AutoCAD 2024 Revit 2024
|
erstellt am: 24. Mrz. 2021 12:56 <-- editieren / zitieren --> Unities abgeben:
Hallo cadffm, sehr guter Hinweis, das könnte funktionieren. Vielen Dank. Die Umsetzung wird sicher ein paar Tage dauern, da ich nun erstmal wieder meine Kenntnisse auffrischen muss! Beste Grüße archi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
archi.archi Mitglied
Beiträge: 109 Registriert: 08.10.2010 Windows 11 AutoCAD 2024 Revit 2024
|
erstellt am: 25. Mrz. 2021 12:20 <-- editieren / zitieren --> Unities abgeben:
Hallo Spezialisten, nach Auffrischung meiner verschütteten Lisp-Kenntnisse konnte ich an die Werte ran: Befehl: (entget (cdr (assoc 360 (entget (cdr (assoc 360 (entget (cdr (assoc 360 (entget (entlast))))))))))) ((-1 . <Objektname: 1fdde289a70> ) (0 . "XRECORD") (5 . "35AF") (102 . "{ACAD_REACTORS") (330 . <Objektname: 1fdde289a60> ) (102 . "}") (330 . <Objektname: 1fdde289a60> ) (100 . "AcDbXrecord") (280 . 1) (90 . 7) (40 . 88.0) (40 . 99.0) (290 . 0) (90 . 999) (290 . 1) (90 . 1) (300 . "N222") (40 . 0.0) (40 . 0.0) (300 . "G111")) Ich konnte noch weitere Raumparameter in ROOMDATA identifizieren. Da in ROOMDATA Raumnummer und Raumname nicht enthalten sind, habe ich nach diesen Werten gesucht und testhalber die Attribute des Raumbeschrifters geändert. Und siehe da: in der aktuellen Programmversion werden (anders als bisher) die Attribute an die Raumkontur geschrieben! Das ist dann natürlich ein viel einfacherer Weg zur Gebäudestrukturierung. Wieder etwas (Lisp) aufgefrischt und das Problem gelöst. Zur Not könnte ich jetzt auch ROOMDATA manipulieren. Vielen Dank und digitale Grüße archi [Diese Nachricht wurde von archi.archi am 25. Mrz. 2021 editiert.] [Diese Nachricht wurde von archi.archi am 25. Mrz. 2021 editiert.] [Diese Nachricht wurde von archi.archi am 01. Apr. 2021 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
archi.archi Mitglied
Beiträge: 109 Registriert: 08.10.2010 Windows 11 AutoCAD 2024 Revit 2024
|
erstellt am: 28. Mrz. 2021 18:57 <-- editieren / zitieren --> Unities abgeben:
Hallo cadffm, zu früh gefreut: die liNear-Applikation hat wahrscheinlich einen Fehler. Beim manuellen Anlegen eines Raumes kann man die Attribute "G111" (Gebäudeteil) und "N222" (Nutzungseinheit) im Beschrifterblock ändern und die Werte werden dann an die Raumkontur übertragen. Beim Anlegen von Räumen über einen Ifc-Import werden die Raumkonturen und auch ein Beschrifterblock erzeugt. Die Änderungen der Attribute dieses Beschrifterblockes werden aber nicht an die Raumkontur übertragen. Ich muss jetzt also nicht die Block-Attribute (das wäre leicht) sondern die ROOMDATA direkt manipulieren. Befehl: (entget (cdr (assoc 360 (entget (cdr (assoc 360 (entget (cdr (assoc 360 (entget (entlast))))))))))) ((-1 . <Objektname: 1fdde289a70> ) (0 . "XRECORD") (5 . "35AF") (102 . "{ACAD_REACTORS") (330 . <Objektname: 1fdde289a60> ) (102 . "}") (330 . <Objektname: 1fdde289a60> ) (100 . "AcDbXrecord") (280 . 1) (90 . 7) (40 . 88.0) (40 . 99.0) (290 . 0) (90 . 999) (290 . 1) (90 . 1) (300 . "N222") (40 . 0.0) (40 . 0.0) (300 . "G111")) Alle ROMMDATA werden angelegt, nicht aus der Ifc-Datei übernommene Attribute sind leer. Es geht jetzt also z.B. darum (300 . "") in (300 . "N222") zu ändern. Meine letzten Lisp-Aktionen liegen schon zu weit zurück und brauche jetzt eine Hilfe für den erforderlichen entmode-Aufruf. Beste Grüße archi
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
archi.archi Mitglied
Beiträge: 109 Registriert: 08.10.2010 Windows 11 AutoCAD 2024 Revit 2024
|
erstellt am: 30. Mrz. 2021 14:27 <-- editieren / zitieren --> Unities abgeben:
Hallo Miteinander, sind denn alle schon im Osterurlaub :-)? Mein "Rost" ist etwas ab, mit:
Code: (setq ent1 (entget (cdr (assoc 360 (entget (cdr (assoc 360 (entget (cdr (assoc 360 (entget (entlast)))))))))))) (entmod (subst (cons 300 "TEST-N222") (assoc 300 ent1) ent1)) ((-1 . <Objektname: 23d043a7a70>) (0 . "XRECORD") (5 . "35AF") (102 . "{ACAD_REACTORS") (330 . <Objektname: 23d043a7a60>) (102 . "}") (330 . <Objektname: 23d043a7a60>) (100 . "AcDbXrecord") (280 . 1) (90 . 7) (40 . 88.0) (40 . 99.0) (290 . 0) (90 . 0) (290 . 0) (90 . 1) (300 . "TEST-N222") (40 . 0.0) (40 . 0.0) (300 . "G111"))
konnte ich den ersten Wert (300 . " N222") ändern. Wie kann ich auf den zweiten Wert (300 . "G333") mit gleichem Gruppencode 300 zugreifen? Sonnige Grüße archi
[Diese Nachricht wurde von archi.archi am 30. Mrz. 2021 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22298 Registriert: 03.06.2002 Alles
|
erstellt am: 30. Mrz. 2021 14:52 <-- editieren / zitieren --> Unities abgeben: Nur für archi.archi
Entweder du bastelst du eine Ordentliche Routine welche den 1. und 2. und den 3. optional immer so weiter.. findet und tauscht, oder wenn sicher nur der erste und der letzte benötigt werden, dann nimmst du einfach assoc. Das eine mal nimmst du die Liste wie sie ist, das andere Mal dreht du die Liste dafür einfach um REVERSE (entmod (subst neu alt (reverse (subst neu alt (reverse EntityList))))) Wobei das nächste Problem bei SUBST liegen könnte, denn wenn deine 300er der Original-Liste denselben Wert haben, dann erinnert man sich daran dass SUBST ALLE gleiche Vorkommen ändert. Daher wäre eine aufwändigere Funktion sinnvoll. Oserferien? Wohl nicht. Nur müde. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
archi.archi Mitglied
Beiträge: 109 Registriert: 08.10.2010 Windows 11 AutoCAD 2024 Revit 2024
|
erstellt am: 30. Mrz. 2021 15:15 <-- editieren / zitieren --> Unities abgeben:
Hallo cadffm, vielen Dank! Müdigkeit: die beliebte Sommerzeitumstellung? reverse also bei definitev <= 2 Werten möglich. Für > 2 Werte also ordentliche Funktion (vielleicht sicherer, wenn dann mal Programmänderungen kommen). Kleines Problem: trotz entmode-Rückgabe (300 . "TEST-N222") ergibt ein entget leider wieder (300 . "N222")? Beste Grüße archi [Diese Nachricht wurde von archi.archi am 30. Mrz. 2021 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22298 Registriert: 03.06.2002 Alles
|
erstellt am: 30. Mrz. 2021 15:29 <-- editieren / zitieren --> Unities abgeben: Nur für archi.archi
>>"Müdigkeit: die beliebte Sommerzeitumstellung?" Vielleicht auch auch müde von Jahrzehnte Mühen für nichts und jetzt einfach keinen Bock mehr - für und wegen nichts. Zumindest trifft es auf mich zu. >>Kleines Problem: trotz entmode-Rückgabe (300 . "TEST-N222") ergibt ein entget leider wieder (300 . "N222")? Sowas gibts, irgendwas mag Acad dann nicht, abr ob dies an einem korrigierbaren Fehler deinerseits liegt oder in der Natur der Sache (dazu müßte ich selbst testen oder nachsehen), das kann ich dir auch nicht sagen ohne entsprechendes 1:1 Testmaterial (DWG/CODE). Wie sagte ich Anfangs: Gewagt wenn man nicht sicher alle Hintergrundfunktionen kennt, macht aber immer wieder Spaß. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
archi.archi Mitglied
Beiträge: 109 Registriert: 08.10.2010 Windows 11 AutoCAD 2024 Revit 2024
|
erstellt am: 30. Mrz. 2021 15:46 <-- editieren / zitieren --> Unities abgeben:
"Keinen Bock mehr" dann vielleicht viel in die Sonne! Ich versuche es erst einmal selbst (Spaß haben und evtl. kurz vor dem Ziel!). Falls es doch nichts wird, stelle ich das Testmaterial hier rein. Ordentliche Funktion heißt: die gesamte Liste um die fehlenden Werte ergänzen und dann entmod?
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
archi.archi Mitglied
Beiträge: 109 Registriert: 08.10.2010 Windows 11 AutoCAD 2024 Revit 2024
|
erstellt am: 31. Mrz. 2021 13:59 <-- editieren / zitieren --> Unities abgeben:
Hallo cadffm, bis zur Manipulation der ROOMDATA habe ich mich vorgearbeitet. Bitte versuchen, die ROOMDATA zu schreiben. Mir fehlt hier irgendwie die Idee und die Technologie. Im Voraus vielen Dank. Beste Grüße und immer abnehmende Mühdigkeit archi
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
archi.archi Mitglied
Beiträge: 109 Registriert: 08.10.2010 Windows 11 AutoCAD 2024 Revit 2024
|
erstellt am: 01. Apr. 2021 10:30 <-- editieren / zitieren --> Unities abgeben:
Hallo Miteinander, Code verbessert ergänzt um entmod. Bitte erbarmt sich jemand und versucht, ob die Daten geändert werden! Bei mir will es nicht so recht funktionieren. Bremst die liNear-Applikation das Ändern ihrer Daten? Beste Grüße archi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
Beiträge: 1766 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. Apr. 2021 18:13 <-- editieren / zitieren --> Unities abgeben: Nur für archi.archi
Hallo Archi, ich hatte Deinen Code mal auf die Schnelle gestestet und den Eindruck, dass pro Durchlauf beim ENTMOD immer neue Einträge ins Dictionary gekommen sind, kann das sein? Aus Zeitgründen haben ich das nicht weiterverfolgt. Weil ich aber noch ungeübt bei Dictionary's bin und einfach mal anhand dieses Beispiels probieren wollte habe ich es Alternativ mit VLA-Kram probiert (das scheint mir eifacher als das ganze Entpacken der 360er-Codes). Vielleicht kannst Du Dir aus der Testfunktion ein paar Erkenntnisse rausziehen. Im Prinzip habe ich zu Beginn eine Liste erstellt, in der immer der zu ändernde Wert und die Positionsnummer im Dictionary stehen. In der Funktion wird das Dictionary aktualisiert und die Attribute werden angepasst. Allerdings habe ich noch gegrübelt, ob es "linear" aus dem Tritt bringt, wenn man die Daten einfach so ändert? Das mußt du prüfen falls Du es so machst.
Code:
(defun c:testDict ( / DICTVALLIST LISTE NAME OBJ TYP VAL VALNEW VLA-ATTLIST VLA-OBJ X) (setq Name "ROOMDATA" liste '((7 "N1234" "APARTNAME") (10 "G1234" "BUILDINGPART"))) ;;;liste (NTH-Pos, neuer Wert, ATTNAME) (if (and(setq obj (car(entsel "\nRaumbeschrifter waehlen:"))) (or(= "INSERT" (cdr(assoc 0 (entget obj)))) (alert "Das war kein Block.")) (setq vla-obj (vlax-ename->vla-object obj)) (or (setq vla-AttList (JBf_list_att_aus_block_vla-obj vla-obj)) (alert "Es sind keine Attribute vorhanden.")) ) (vlax-for ITEM (vla-getExtensionDictionary (vlax-ename->vla-object obj)) (vlax-for ITEM1 ITEM (if (= (vla-get-Name ITEM1)Name) (progn ;;;Dictdaten getten (vla-getxrecorddata ITEM1 'typ 'val) (setq DictValList(mapcar '(lambda(X)(list (vlax-variant-type X) (vlax-variant-value X))) (vlax-safearray->list val))) ;;;Dictdaten: Werte anpassen (mapcar '(lambda(X) (setq DictValList (JBf_list:nth:change DictValList (list (car(nth (car X) DictValList))(cadr X)) (car X))) )liste) ;;;Dictdaten setten (setq valNew (vlax-safearray-fill (vlax-make-safearray vlax-vbVariant (cons 0 (-(length DictValList)1))) (mapcar '(lambda(X) (vlax-make-variant (cadr X)(car X)))DictValList))) (vla-SetXRecordData ITEM1 typ valNew) ;;;Attribute anpassen (mapcar '(lambda(X) (if (assoc (strcase (caddr X))vla-AttList) (vla-put-TextString (cadr (assoc (strcase(caddr X))vla-AttList))(cadr X)) ) ) liste) ) ) ) ) ) (princ) ) (defun JBf_list_att_aus_block_vla-obj(vla-obj / A) (if (=(vla-get-hasattributes vla-obj):vlax-true) (mapcar '(lambda(A)(list(strcase(vlax-get A 'TagString))A)) (vlax-safearray->list (vlax-variant-value(vla-getattributes vla-obj)))) )) (defun JBf_list:nth:change(liste EintragNew pos / n ) (setq n -1) (mapcar '(lambda (A) (setq n (+ n 1)) (if (= n pos) EintragNew A))liste))
------------------ viele Grüße Jörn http://www.bosse-engineering.com Bosse_tools-Überblick Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
archi.archi Mitglied
Beiträge: 109 Registriert: 08.10.2010 Windows 11 AutoCAD 2024 Revit 2024
|
erstellt am: 07. Apr. 2021 19:45 <-- editieren / zitieren --> Unities abgeben:
Hallo Jörn, vielen Dank für den neuen Ansatz. Da wird dann der Unterschied vom Gelegenheits-Programmierer zum Profi deutlich sichtbar! Eigentlich bin ich der Nutzer, der nur Hand anlegt, weil der Hersteller sehr nützliche Funktionen nicht programmiert. Ich werde in den nächsten Tage den Code testen und versuchen, ihn nachzuvollziehen. Bei Problemen oder Erfolg geht es hier dann weiter. Bei ENTMOD immer neue Einträge hatte ich manchmal auch, aber nicht immer. Die Reaktion von liNear werde ich natürlich argwöhnisch im Auge behalten! Beste Grüße archi [Diese Nachricht wurde von archi.archi am 07. Apr. 2021 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
archi.archi Mitglied
Beiträge: 109 Registriert: 08.10.2010 Windows 11 AutoCAD 2024 Revit 2024
|
erstellt am: 09. Apr. 2021 10:49 <-- editieren / zitieren --> Unities abgeben:
Hallo Jörn, nach dem Test deines Codes ergeben sich fabelhafte Ergebnisse! Damit wird der Code in das "Große Ganze" eingebaut und führt zum gewünschten Ergebnis (liNear hat kein Problem mit der Manipulation). Ich würde nicht behaupten, die Einzelheiten verstanden zu haben, aber es funktioniert und kann dann an evtl. Programmänderungen angepasst werden. Vielen, vielen Dank! Ein kleines Problem ist noch zu Lösen: Durch den Programm-Fehler (keine Kopplung zw. Raumkontur und Beschrifter bei IFC-Import) muss ich leider (bis zur angeforderten Programmkorrektur) alle Raumbeschrifter durchlaufen, den Befehl "Raumdaten editieren" aufrufen und das sich öffnende Fenster jeweils mit Enter beenden (ja, schöne Krücke, aber dann erfolgt die Kopplung). Habe bisher im Forum dazu nichts gefunden. Wie kann das Problem gelöst werden? Beste Grüße archi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
Beiträge: 1766 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: 09. Apr. 2021 13:46 <-- editieren / zitieren --> Unities abgeben: Nur für archi.archi
Hallo Archi, ich habe Dir meine Testfunktion nochmal in eine REPEAT-Schleife gepackt. Es wird ein Auswahlsatz mit Blöcken gebildet, alle im Auswahlsatz werden dann in der Schleife durchlaufen. Prüf mal, ob Du damit weiterkommst.
Code:
(defun c:testDict1 ( / DICTVALLIST LISTE NAME OBJ TYP VAL VALNEW VLA-ATTLIST VLA-OBJ X N AWS ERRORAWS) (setq Name "ROOMDATA" liste '((7 "N1234" "APARTNAME") (10 "G1234" "BUILDINGPART"))) ;;;liste (NTH-Pos, neuer Wert, ATTNAME)
(if (setq aws (ssget (list (cons 0 "INSERT")(cons 2 "B_RA+GT+NE_HK")))) ;;;(der Filter in GC 2 für den Blocknamen kann z.B. auch "B_*" heißen, Jokerzeichen sind hier erlaubt)
(progn (setq n 0) (setq ErrorAws (ssadd)) (repeat (sslength aws) (setq obj (ssname aws n)) (setq vla-obj (vlax-ename->vla-object obj)) (if (not(setq vla-AttList (JBf_list_att_aus_block_vla-obj vla-obj))) (ssadd obj ErrorAws) (vlax-for ITEM (vla-getExtensionDictionary (vlax-ename->vla-object obj)) (vlax-for ITEM1 ITEM (if (= (vla-get-Name ITEM1)Name) (progn ;;;Dictdaten getten (vla-getxrecorddata ITEM1 'typ 'val) (setq DictValList(mapcar '(lambda(X)(list (vlax-variant-type X) (vlax-variant-value X))) (vlax-safearray->list val))) ;;;Dictdaten: Werte anpassen (mapcar '(lambda(X) (setq DictValList (JBf_list:nth:change DictValList (list (car(nth (car X) DictValList))(cadr X)) (car X))) )liste) ;;;Dictdaten setten (setq valNew (vlax-safearray-fill (vlax-make-safearray vlax-vbVariant (cons 0 (-(length DictValList)1))) (mapcar '(lambda(X) (vlax-make-variant (cadr X)(car X)))DictValList))) (vla-SetXRecordData ITEM1 typ valNew) ;;;Attribute anpassen (mapcar '(lambda(X) (if (assoc (strcase (caddr X))vla-AttList) (vla-put-TextString (cadr (assoc (strcase(caddr X))vla-AttList))(cadr X)) ) ) liste) ) ) ) ) ) (setq n (+ n 1)) ) ) ) (if (/=(sslength ErrorAws)0) (progn (alert "Sie haben Blöcke ohne Attribute ausgewählt, diese Blöcke werden abschließend selektiert.") (sssetfirst ErrorAws ErrorAws) ) ) (princ) ) (defun JBf_list_att_aus_block_vla-obj(vla-obj / A) (if (=(vla-get-hasattributes vla-obj):vlax-true) (mapcar '(lambda(A)(list(strcase(vlax-get A 'TagString))A)) (vlax-safearray->list (vlax-variant-value(vla-getattributes vla-obj)))) )) (defun JBf_list:nth:change(liste EintragNew pos / n ) (setq n -1) (mapcar '(lambda (A) (setq n (+ n 1)) (if (= n pos) EintragNew A))liste))
------------------ viele Grüße Jörn http://www.bosse-engineering.com Bosse_tools-Überblick Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
archi.archi Mitglied
Beiträge: 109 Registriert: 08.10.2010 Windows 11 AutoCAD 2024 Revit 2024
|
erstellt am: 09. Apr. 2021 14:16 <-- editieren / zitieren --> Unities abgeben:
Hallo Jörn, Danke, fast zu viele Geschenke! Ich teste es. Hast du hierfür vielleicht noch einen Tip: "Befehl "Raumdaten editieren" aufrufen und das sich öffnende Fenster jeweils mit Enter beenden" Oder geht es nicht mit Lisp? Beste Grüße archi
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
Beiträge: 1766 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: 09. Apr. 2021 14:40 <-- editieren / zitieren --> Unities abgeben: Nur für archi.archi
|
archi.archi Mitglied
Beiträge: 109 Registriert: 08.10.2010 Windows 11 AutoCAD 2024 Revit 2024
|
erstellt am: 09. Apr. 2021 15:47 <-- editieren / zitieren --> Unities abgeben:
Hallo Jörn, ist ein liNear-Befehl - öffnet das Fenster mit den Raumdaten (s. Anlage). Muss mit Enter sofort wieder geschlossen werden. (Die Anpassung des Programm-Fehlers dauert erfahrungsgemäß Wochen oder Monate,daher die Krücke.) Beste Grüße archi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
archi.archi Mitglied
Beiträge: 109 Registriert: 08.10.2010 Windows 11 AutoCAD 2024 Revit 2024
|
erstellt am: 12. Apr. 2021 12:26 <-- editieren / zitieren --> Unities abgeben:
|
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
Beiträge: 1766 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: 12. Apr. 2021 15:25 <-- editieren / zitieren --> Unities abgeben: Nur für archi.archi
|