| |
| 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: Attribute aus dyn. Block auslesen (2431 / mal gelesen)
|
KathaB Mitglied Techn. Zeichner
Beiträge: 19 Registriert: 18.11.2016
|
erstellt am: 18. Nov. 2016 14:39 <-- editieren / zitieren --> Unities abgeben:
Hallo Zusammen, ich bin hier neu im Forum und auch ein Neuling in der LISP Programmierung. Meine Frage an Euch: Ich möchte aus einem Layout die Attribute eines dynamischen Blockes und Attribute eines "normalen" Blockes auslesen. Kann mir jemand Unterstützung wie ich das anpacken kann. Mit einer treffenden Antwort wäre ich übers Wochenende beschäftigt :-) Danke schon im Voraus Kathi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADwiesel Moderator CAD4FM UG
Beiträge: 1989 Registriert: 05.09.2000 AutoCAD, Bricscad Wir machen das Mögliche unmöglich
|
erstellt am: 18. Nov. 2016 15:38 <-- editieren / zitieren --> Unities abgeben: Nur für KathaB
Hier hasde was zum üben... Code: (if (and (setq vlaObj(vlax-ename->vla-object(car(entsel)))) (vlax-property-available-p vlaObj 'hasattributes) (= (vla-get-hasattributes vlaObj) :vlax-true) ) (setq lstAtts (vlax-safearray->list (vlax-variant-value (vla-Getattributes vlaObj)) ) ;_ end of vlax-safearray->list lstAtts (mapcar 'list ;lstAtts (mapcar 'vla-get-TagString lstAtts) (mapcar 'vla-get-TextString lstAtts) ) ;_ end of mapcar ) ;_ end of setq )
------------------ Gruß CADwiesel Besucht uns im CHAT
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KathaB Mitglied Techn. Zeichner
Beiträge: 19 Registriert: 18.11.2016
|
erstellt am: 18. Nov. 2016 15:55 <-- editieren / zitieren --> Unities abgeben:
Danke für die so schnelle Antwort - da habe ich wirklich was über das Wochenende tun :-) Ich muss die Befehlsfolge Schritt für Schritt testen. Mein dynamischer Block hat immer die Feste Bezeichnung "Verbindungselemente" Mein Standardblock hat den Namen "Planrahmen_A3" Kann ich diese in Deinem ProgrammCode vor/mitgeben um den Block nicht händisch zu ermitteln. Grüßle Kathi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 18. Nov. 2016 16:12 <-- editieren / zitieren --> Unities abgeben: Nur für KathaB
Wenn man nicht nur copy&pasten, sondern verstehen will, werden viele Wochenenden nötig, nicht nur eins. Die Arbeit rund um Blöcke benötigt schon viel Wissen und Lispfunktionen, das ist eigentlich kein gutes Einstiegsthema, Linie oder Kreis wäre da schon was anderes. 1. Blöcke haben keine Attribute, nur Blockreferenzen 2. "Mein dynamischer Block hat immer die Feste Bezeichnung "Verbindungselemente"" Das stimmt zwar, aber sobalnd man die Blockreferenz dynamisch verändert, erstellt Acad einen neuen Block und dieser hat dann beispielsweise den Namen "*U123" >sogenannte anonyme Blöcke, die Namen können sich mit jedem Zeichnungsstart ändern< Name des Block per Hand ermitteln: (alert(cdr(assoc 2 (entget(car(entsel)))))) Klicke einmal auf eine "frische" Blockreferenz und danach auf eine dynamisch geänderte.. Hier ein netter Beitrag der auch auf dyn.Blöcke in Acad eingeht. Da Blöcke nicht dynamisch sein können, hat Adesk da tief in die Trickkiste gegriffen. Beitrag FAQ zu Blöcken: http://ww3.cad.de/foren/ubb/Forum54/HTML/013223.shtml Für "Attribute auslesen" ist das ganze zum Glück nicht so relevant, es genügt zu wissen wie man ermittelt welche Blöcke zu dem gewünschten "mein Block" dazu gehören. Hier ein Beispiel: http://forum.cad.de/foren/ubb/Forum145/HTML/003343.shtml
------------------ CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KathaB Mitglied Techn. Zeichner
Beiträge: 19 Registriert: 18.11.2016
|
erstellt am: 23. Nov. 2016 13:55 <-- editieren / zitieren --> Unities abgeben:
Hallo Zusammen, vielen Dank für Eure Hilfe. Die Entwicklung hat mich zwar viele Stunden gekostet aber ich stellte das Programm so zusammen wie ich es benötige - wow. Ohne Eure Tipps hätte ich es allerdings nicht geschafft. Den einen oder anderen Teil Eurer vorgeschlagenen Programmcodes habe ich noch nicht richtig verstanden - da muss ich noch ein paar Stunden dranhängen :-) Meine heutige Frage: Kann Lisp auch die Werte einer "normalen" Tabelle lesen ? Gruß Kathi
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 23. Nov. 2016 14:08 <-- editieren / zitieren --> Unities abgeben: Nur für KathaB
|
KathaB Mitglied Techn. Zeichner
Beiträge: 19 Registriert: 18.11.2016
|
erstellt am: 23. Nov. 2016 14:27 <-- editieren / zitieren --> Unities abgeben:
Hallo nochmals, ja ich hatte bis soeben an die ACADobject Tabelle gedacht. Aber mit dem EXCEL Hinweis werde ich mir überlegen ob das für mich die bessere Lösung ist. Werde mal nach Beispielen "googeln". Gruß aus dem Süden Kathi Gruß Kathi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KathaB Mitglied Techn. Zeichner
Beiträge: 19 Registriert: 18.11.2016
|
erstellt am: 25. Nov. 2016 14:48 <-- editieren / zitieren --> Unities abgeben:
Hallo Zusammen, das Wochenende ist da und ich versuch mich weiter in LISP. In meinem Programm lese ich wie folgt die Attribute von Blöcken aus. Die Blöcke kommen beliebig oft in der gesamten Zeichnung vor. Wie grenze ich das Ausschreiben der Attribute nur auf das aktuelle Layout ein. (setq ss (ssget "a" (list (cons 0 "INSERT") (cons 2 BLNAME ) (cons 66 1) ) ) ) Vielleicht hat jemand schon das gleiche Problem gelöst. Ganz liebe Grüße Kathi
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 25. Nov. 2016 15:07 <-- editieren / zitieren --> Unities abgeben: Nur für KathaB
[QUOTE]Original erstellt von KathaB: Vielleicht hat jemand schon das gleiche Problem gelöst.Du wirst in deinem Lisp-Leben vermutlich nichts machen, wozu es nicht schon bereits unzählige Lösungen gibt "Wie grenze ich das Ausschreiben der Attribute nur auf das aktuelle Layout ein." Du meinst das Filtern von Objekte auch den aktuellen Bereich.
a) Schau dir den Aufbau bestehender Objekte an: (entget(car(entsel))) b) Schau dir die DXF-Reference von AutoDesk an Du wirst den Gruppencode 410 finden, zusammen mit der Systemvariable CTAB (Gibt den Namen des aktuellen Layouts in der Zeichnung zurück.) wirst du zum Ziel kommen. (ssget "_X" (list ... (cons 410 (getvar "CTAB")))) schönes WE
------------------ CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KathaB Mitglied Techn. Zeichner
Beiträge: 19 Registriert: 18.11.2016
|
erstellt am: 06. Dez. 2016 14:58 <-- editieren / zitieren --> Unities abgeben:
Hallo Lisp Programmierer, dank Eurer Hilfe konnte ich alle Attribute welche ich benötige aus den Blöcken auslesen. Gerade versuche ich mich daran die Texte der Blockattribute zu ändern und zurückzuschreiben. In der Praxis möchte ich meinen Block anklicken und die darin enthaltenen Attributtexte ändern. Nochmals ein letzter Tipp von Euch wäre klasse, dann bin ich mit meiner Aufgabe fertig. Viele Grüße Kathi
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 06. Dez. 2016 15:10 <-- editieren / zitieren --> Unities abgeben: Nur für KathaB
VLisp ( vla-put-Textstring <VLA-Objekt_des_Attributes> "neuerText") oder (Auto-)LISP EntityList (entget(car(nentsel))) (entmod (subst(cons 1 "neuerText")(assoc 1 <EntityList> )<EntityList> )) Umfassender wäre es wohl kein Tip mehr ------------------ CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |