| |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
 | PNY: der unverzichtbare Partner für umfassende KI-Lösungen von Workstations bis zu Edge Computing und KI-Cluster-Bereitstellung, eine Pressemitteilung
|
Autor
|
Thema: Blöcke auslesen (1436 mal gelesen)
|
BerndE Mitglied Hochbautechniker
  
 Beiträge: 557 Registriert: 05.07.2003
|
erstellt am: 27. Sep. 2004 14:16 <-- editieren / zitieren --> Unities abgeben:         
Hi Forum, Um meine Zeichnung nach Blöcken mit Attributen zu durchsuchen und dann die Inhalte auszulesen gehe ich bisher immer so vor: For Each elem In AcadApp.ActiveDocument.ModelSpace If Mid(elem.Name, 1, 5) <> "R_st_" Then GoTo next_elem With elem If StrComp(.EntityName, "AcDbBlockReference", 1) = 0 Then If .HasAttributes Then ....usw End if End if End if next_elem: Next Elem Ich überprüfe also JEDES AutoCad-Element darauf, den Namen "R_st_" hat, dann darauf, ob es ein block ist, dann jeden gefundenen Block, ob er Attribute hat. Das kann bei nem großen Plan schon ganz schön lange dauern. Irgendwie hab ich das Gefühl, das müßte doch auch kürzer gehen. Kann mir jemand helfen?
------------------ Bernd Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Ehrenmitglied V.I.P. h.c. CAD on demand GmbH

 Beiträge: 4191 Registriert: 17.05.2001 ACAD20XX, defun-tools
|
erstellt am: 27. Sep. 2004 14:21 <-- editieren / zitieren --> Unities abgeben:          Nur für BerndE
Hallo Bernd, klar geht das schneller. Filterlisten sollten dir helfen .. aber in Lisp istr's einfacher. Schau hier, da habe ich mal ein Filterlistenkonstrukt veröffentlicht. Alternativ kanst du auch auf meiner Seite das VBA-Tutorial ziehen. Darin ist das Thema auch behandelt. Bei Fragen ... Grüße Holger ------------------ Holger Brischke (defun - Lisp over night! AutoLISP-Programmierung für AutoCAD Da weiß man, wann man's hat! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
       

 Beiträge: 13530 Registriert: 30.11.2003 ACAD 2008 Mechanical
|
erstellt am: 27. Sep. 2004 14:21 <-- editieren / zitieren --> Unities abgeben:          Nur für BerndE
durchlaufe einfach die blocks aus AcadApp.ActiveDocument ------------------ - Thomas - "Bei 99% aller Problemen ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Ehrenmitglied V.I.P. h.c. CAD on demand GmbH

 Beiträge: 4191 Registriert: 17.05.2001 ACAD20XX, defun-tools
|
erstellt am: 27. Sep. 2004 14:22 <-- editieren / zitieren --> Unities abgeben:          Nur für BerndE
Zitat: Original erstellt von CADmium: durchlaufe einfach die [b]blocks aus AcadApp.ActiveDocument[/B]
@cadmium wenn er an die Attribute will, dann langt das nicht, denn die hängen ja am INSERT. Um rauszufinden, ob es die Blöcke überhaupt gibt .. ok, dann deine Variante. Grüße Holger
------------------ Holger Brischke (defun - Lisp over night! AutoLISP-Programmierung für AutoCAD Da weiß man, wann man's hat! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
       

 Beiträge: 13530 Registriert: 30.11.2003 ACAD 2008 Mechanical
|
erstellt am: 27. Sep. 2004 14:27 <-- editieren / zitieren --> Unities abgeben:          Nur für BerndE
@Holg, da haste Recht ... aber in den Blocks kann man ja die elemente nach Attdef durchsuchen .... egal, ich find Lisp auch besser  ------------------ - Thomas - "Bei 99% aller Problemen ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fuchsi Mitglied Programmierer c#.net Datawarehouse
   
 Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 27. Sep. 2004 14:35 <-- editieren / zitieren --> Unities abgeben:          Nur für BerndE
schau dir mal in der VBA Hilfe den bereich SelectionSets durch. hier kannst du direkt nach blöcken (INSERT) suchen , deren namen mit "R-ST_* beginnen und die attribute haben. in lisp wäre das so (ssget "X" (list (cons 0 "INSERT") (cons 2 "R_ST_*") (cons 66 1)) die suchschlüssel sind da in VBA ident 0.. elemnttyp (INSERT) 2.. elementname (R_ST_* mit Wildcards möglich) 66.. hat attribute (1) musst dir halt nur die beispiele anschauen, und nach deinen suchkriterien abändern. ------------------ WWW.FFZELL.AT.TC Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
BerndE Mitglied Hochbautechniker
  
 Beiträge: 557 Registriert: 05.07.2003
|
erstellt am: 27. Sep. 2004 14:37 <-- editieren / zitieren --> Unities abgeben:         
Danke für Eure wieder mal superschnellen Antworten. Meine schon damals nur kläglichen Lisp-Kenntnisse sind mittlerweile schon sehr eingerostet. Nachdem Lisp auch immer mal wieder totgesagt wird, wollte ich mich auch nicht mehr mit beschäftigen (war das ein falscher Entschluss?) Also werde ich mich mal auf die Seite von Holger begeben. Auf jedenfall danke ich Euch allen. Bernd ------------------ Bernd Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Ehrenmitglied V.I.P. h.c. CAD on demand GmbH

 Beiträge: 4191 Registriert: 17.05.2001 ACAD20XX, defun-tools
|
erstellt am: 27. Sep. 2004 14:41 <-- editieren / zitieren --> Unities abgeben:          Nur für BerndE
Zitat: Original erstellt von BerndE: ... Nachdem Lisp auch immer mal wieder totgesagt wird, wollte ich mich auch nicht mehr mit beschäftigen (war das ein falscher Entschluss?)...
Totgesagte leben länger. Ich denke mittelfristig sind beide noch von Bestand. Ich gehe nicht davon aus, dass die eine Programmiersprache die andere wesentlich länger überleben wird. Grüße Holger ------------------ Holger Brischke (defun - Lisp over night! AutoLISP-Programmierung für AutoCAD Da weiß man, wann man's hat! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |