| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Elemente in Blöcken auslesen (1691 mal gelesen)
|
Abele Mitglied
Beiträge: 71 Registriert: 09.06.2004
|
erstellt am: 04. Okt. 2004 11:40 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich stehe immer wieder vor dem Problem, das ich bestimmte Layer aus Zeichnungen entfernen will, diese aber noch laut AutoCAD in dictionaries referenziert sind. Ich habe nun schon festgestellt, das das wohl bedeutet, das in irgendwelchen Blöcken Elemente mit diesem Layer vorhanden sind. Nun dachte ich mir ich mach in VBA eine Routine, die die Blöcke durchsucht. In der Regel gehe ich wie folgt vor Dim Objekt as acadblockreference Dim Element as acadentity Dim I as double For each element in thisdrawing.modelspace If element.objektname = "AcDbBlockReference" then Set Objekt = thisdrawing.objectIDtoobject(element.objectID) ' Hier dann der Code für die Vorgänge End if Next element Leider finde ich keinen Weg um dann an die einzelnen Element in diesen Blöcken ranzukommen um die Layer zu prüfen. Hat mir jemand Rat?
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: 4171 Registriert: 17.05.2001 ACAD20XX, defun-tools
|
erstellt am: 04. Okt. 2004 11:46 <-- editieren / zitieren --> Unities abgeben: Nur für Abele
HAllo Abele, du musst durch die Blocks-Collection der aktuellen Zeichnung und dann durch die Elemente des Blockes 'hecheln'. Du musst zusätzlich wenn dur eine Blockreferenz findest, schauen, dass die Attributrefrenzen acuh nicht die Layereigenschaften zugewiesen bekommen haben. 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 |
Abele Mitglied
Beiträge: 71 Registriert: 09.06.2004
|
erstellt am: 04. Okt. 2004 11:53 <-- editieren / zitieren --> Unities abgeben:
Danke erstmal Ich habe das mit der Block-Collection auch schon versucht(falls du die acadblocks meinst). Habe dann mit Count die Anzahl der Elemente in dem Block geholt und mit einer for-next die elemente durchsuchen wollen. Allerdings kam dann immer der debugger und blieb auf so einer Zeile stehen: If Block.item(I).layer = "AM_1" then Ist das das falsche vorgehen? 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: 4171 Registriert: 17.05.2001 ACAD20XX, defun-tools
|
erstellt am: 04. Okt. 2004 12:29 <-- editieren / zitieren --> Unities abgeben: Nur für Abele
Hallo Abele, schau dir mal das Objektmodell genau an. Das kann so nicht funktionieren Die Hierarchi ist in etwa so: -Drawing ---Blocks -----Block -------z.B. LINE -------ff Elemente der Blockdefinition Da nur die Elemente die Eigenschaft LAYER haben, muss das Programm in deinem Konstrukt einen Fehler bringen. 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 |
Abele Mitglied
Beiträge: 71 Registriert: 09.06.2004
|
erstellt am: 04. Okt. 2004 13:04 <-- editieren / zitieren --> Unities abgeben:
Ok. Habs geschafft, das die Routine durchläuft. Er findet aber trotzdem keine Elemente mit den besagten Layern. Hast Du eine Ahnung was diese dictionaries, weswegen sich manche Layer nicht bereinigen, bzw. löschen lassen noch sein können? 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: 4171 Registriert: 17.05.2001 ACAD20XX, defun-tools
|
erstellt am: 04. Okt. 2004 13:06 <-- editieren / zitieren --> Unities abgeben: Nur für Abele
|
Abele Mitglied
Beiträge: 71 Registriert: 09.06.2004
|
erstellt am: 04. Okt. 2004 13:08 <-- editieren / zitieren --> Unities abgeben:
|
Brischke Ehrenmitglied V.I.P. h.c. CAD on demand GmbH
Beiträge: 4171 Registriert: 17.05.2001 ACAD20XX, defun-tools
|
erstellt am: 04. Okt. 2004 21:09 <-- editieren / zitieren --> Unities abgeben: Nur für Abele
Hallo Abele, :hmm schau mal in der DXF-Hilfe nach den oben genannten Stichwörtern. Diese sind AutoCAD-Objekte. Layerfilter werden, wenn ich das richtig in Erinnerung habe, in Dictionaries gespeichert, wie alle nichtgrafischen Objekte eben. Habe im Moment auch wegen der Messevorbereitung wenig Zeit, sonst hätte ich selbst mal nachgesehen, und dir egtwas besser helfen können. Wenn es dir auf eine Lösung ankommt, dann schau mal auf cadwiesel.de und auch auf defun.de .. dort solltest du für dein Problem Lösungen finden können. 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 |