| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Objekt in Blöcken suchen und löschen (4685 mal gelesen)
|
CADuceus Mitglied LWL-Netzplaner GIS
Beiträge: 358 Registriert: 20.01.2005 LWL Netzplanung AutoCAD Map 3D 2020 Win10 64bit / Chrome Intel® Core™ i7-4770K 3.50GHz / 32GB NVidia Quadro P400 HP DesignJet T795
|
erstellt am: 13. Apr. 2011 14:04 <-- editieren / zitieren --> Unities abgeben:
Grüeziwohl. Ich habe verschiedene Blockreferenzen in denen ein eindeutiges Objekt vorkommt (Polylinie 0.485 lang, globale Breite 0.012, Layer 0) welches ich regelmässig aus allen Blöcken löschen möchte ohne die Blöcke zu sprengen. Wie kann man das automatisieren? Forumsuche war erfolglos. ------------------ Du kannst in anderen nur entzünden, was in Dir selber brennt! Wollte noch ein File anhängen, aber habe die Kiste schon heruntergefahren. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin
Beiträge: 2624 Registriert: 02.05.2006 AutoCAD LandDesktop R2 bis 2004 Civil 3D 2005 - 2022 Bricscad V11-V21 pro Plateia, Canalis Visual Basic
|
erstellt am: 13. Apr. 2011 14:23 <-- editieren / zitieren --> Unities abgeben: Nur für CADuceus
Ist mir jetzt nicht ganz klar was Du machen möchtest. Hast Du verschiedene Blöcke (also unterschiedliche Namen) oder gleicher Block öfters eingefügt? Im letzter Fall bräuchtest Du ja nur mit dem Blockeditor den Ursprungsblock bearbeiten und hast nach synchronisieren alle geändert. Sollte das für mehrere Zeichnungen und/oder mehrere Blöcke geschehen, könnte man das auch über ein kleines Programmtool machen. Hat die Polylinie mehr als zwei Stützpunkte?
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13508 Registriert: 30.11.2003 Hinweis: Meine Mitarbeit auf CAD.DE ist fakultativ, unentgeltlich und beruht nur auf einem ausgeprägtem Helfersyndrom.
|
erstellt am: 13. Apr. 2011 14:24 <-- editieren / zitieren --> Unities abgeben: Nur für CADuceus
|
CADuceus Mitglied LWL-Netzplaner GIS
Beiträge: 358 Registriert: 20.01.2005 LWL Netzplanung AutoCAD Map 3D 2020 Win10 64bit / Chrome Intel® Core™ i7-4770K 3.50GHz / 32GB NVidia Quadro P400 HP DesignJet T795
|
erstellt am: 13. Apr. 2011 15:43 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von KlaK: Ist mir jetzt nicht ganz klar was Du machen möchtest.Hast Du verschiedene Blöcke (also unterschiedliche Namen) oder gleicher Block öfters eingefügt? [...]
Zitat: Von mir selbst: Ich habe verschiedene Blockreferenzen [...]
Was ist da unklar? @CADmium (gehört u.U. ins Lisp-Forum): Ich schaffe es ALLE Polylinien zu löschen:
Code: (if (= (strcase (vla-get-objectname ITEM)) (strcase "AcDbPolyline"))
Aber wie kann am einfachsten weitere Filterkriterien einbauen? Folgende Anpassung produziert nur die Fehlermeldung: Fehlerhafter Argumenttyp: stringp 808.5:
Code: (if (and (= (strcase (vla-get-objectname ITEM)) (strcase "AcDbPolyline")) (= (strcase (vla-get-Length ITEM)) (strcase "0.485")))
------------------ Du kannst in anderen nur entzünden, was in Dir selber brennt! Wollte noch ein File anhängen, aber habe die Kiste schon heruntergefahren. [Diese Nachricht wurde von CADuceus am 13. Apr. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andreas Kraus Mitglied Elektrotechniker
Beiträge: 1356 Registriert: 11.01.2006 Win 10 ACAD 2022
|
erstellt am: 13. Apr. 2011 16:11 <-- editieren / zitieren --> Unities abgeben: Nur für CADuceus
(vla-get-Length ITEM) gibt dir ja auch keine Zeichenkette zurück, sondern einen Realwert. (= (strcase (rtos (vla-get-Length ITEM))) (strcase "0.485")) sollte gehen aber bitte auf die Anzahl Nachkommastellen aufpassen. In diesem Fall z.B.: (= (strcase (rtos (vla-get-Length ITEM) 2 3)) (strcase "0.485")) Steht aber alles in der Hilfe ------------------ Geht nicht, gibts nicht Gruß Andreas http://kraus-cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13508 Registriert: 30.11.2003 Hinweis: Meine Mitarbeit auf CAD.DE ist fakultativ, unentgeltlich und beruht nur auf einem ausgeprägtem Helfersyndrom.
|
erstellt am: 14. Apr. 2011 08:05 <-- editieren / zitieren --> Unities abgeben: Nur für CADuceus
|
CADuceus Mitglied LWL-Netzplaner GIS
Beiträge: 358 Registriert: 20.01.2005 LWL Netzplanung AutoCAD Map 3D 2020 Win10 64bit / Chrome Intel® Core™ i7-4770K 3.50GHz / 32GB NVidia Quadro P400 HP DesignJet T795
|
erstellt am: 14. Apr. 2011 15:00 <-- editieren / zitieren --> Unities abgeben:
Vielen Dank erstaml an alle für die regen Infos. Das Lisp funktioniert (mit der Zeile von Kraus). Die abgespeckte Version von CADmium lässt die Linie aber stehen. Egal, denn: Leider habe ich mein Problem nicht richtig erkannt. Erst nach dem Lisp ist mir aufgefallen, dass die Blöcke alle unterschiedlich skaliert sind. Und nur in der skalierten Version sind die betreffenden Linien gleich lang und dick. Die störenden Linien können also nicht anhand ihrer Grösse erkannt werden. Einzige Gemeinsamkeit in allen Blöcken: Die Linie berührt als einzige den Nullpunkt (= Block-Basispunkt). Kann ich jetzt mit "vla-get-coordinate(s)" oder ähnlichem nach der Lage filtern? @Krause: Und wenn es in der Hilfe steht, wo genau? Und in welcher Hilfe? ACAD? Lispeditor? Forumhilfe? Mapcar? Entschuldige wenn ich hier so agressiv nachfrage aber wenn ich in den Autodesk-Hilfen einen Syntax nachschlagen will wachsen mir graue Haare. Ich find die Dinger einfach nicht (v.a. "vla-get-..."). ------------------ Du kannst in anderen nur entzünden, was in Dir selber brennt! Wollte noch ein File anhängen, aber habe die Kiste schon heruntergefahren. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13508 Registriert: 30.11.2003 Hinweis: Meine Mitarbeit auf CAD.DE ist fakultativ, unentgeltlich und beruht nur auf einem ausgeprägtem Helfersyndrom.
|
erstellt am: 14. Apr. 2011 19:34 <-- editieren / zitieren --> Unities abgeben: Nur für CADuceus
|
CADuceus Mitglied LWL-Netzplaner GIS
Beiträge: 358 Registriert: 20.01.2005 LWL Netzplanung AutoCAD Map 3D 2020 Win10 64bit / Chrome Intel® Core™ i7-4770K 3.50GHz / 32GB NVidia Quadro P400 HP DesignJet T795
|
erstellt am: 15. Apr. 2011 13:22 <-- editieren / zitieren --> Unities abgeben:
Vielen Dank. Klappt bestens. CADmium darf sich in Winterthur einen Schokoladen-Osterhasen abholen. ------------------ Du kannst in anderen nur entzünden, was in Dir selber brennt! Wollte noch ein File anhängen, aber habe die Kiste schon heruntergefahren. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
JoeLis Mitglied Application Engineer
Beiträge: 3 Registriert: 17.06.2016 DELL PRECISION TOWER 5810, Windows 10 Build 1809,E5-1620 v3 @3,50GHz, NVIDIA Quatro M4000, 32GB RAM, AutoCAD Architecture 2018
|
erstellt am: 11. Nov. 2019 11:22 <-- editieren / zitieren --> Unities abgeben: Nur für CADuceus
ACHTUNG! Sie antworten auf einen Beitrag der älter als 1 Jahr ist! Hallo zusammen, der Beitrag ist sehr alt, ich weiß, aber vielleicht schaut hier noch mal jemand vorbei. Ich benötige im Prinzip die gleiche Lisproutine von CADmium, möchte aber PUNKTE anstelle von Polylinien aus Blöcken löschen. Kann jemand diese Lisp so anpassen, das Punkte gelöscht werden? Vielen Dank Gruß Jörg Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADuceus Mitglied LWL-Netzplaner GIS
Beiträge: 358 Registriert: 20.01.2005 LWL Netzplanung AutoCAD Map 3D 2020 Win10 64bit / Chrome Intel® Core™ i7-4770K 3.50GHz / 32GB NVidia Quadro P400 HP DesignJet T795
|
erstellt am: 11. Nov. 2019 11:45 <-- editieren / zitieren --> Unities abgeben:
Hallo JoeLis Eigentlich solltest Du mit ganz wenig Lisp-Verständnis den obigen Code selber ganz einfach an Dein Bedürfnis anpassen können. Da mir aber in diesem Forum auch oft auf die Sprünge geholfen worden ist (und ich auch diesen Thread eröffnet habe), hier die klitzekleine Anpassung:
Code: (vl-load-com) (vlax-for BLOCK (vla-get-blocks(vla-get-activedocument(vlax-get-acad-object))) (if(=(vla-get-isxref BLOCK):vlax-false) (vlax-for ITEM BLOCK (if(=(strcase(vla-get-objectname ITEM))"ACDBPOINT") (vl-catch-all-error-p(vl-catch-all-apply'vla-delete(list ITEM))) ) ) ) ) (vla-regen(vla-get-activedocument (vlax-get-acad-object)) acAllViewports)
------------------ Du kannst in anderen nur entzünden, was in Dir selber brennt! Wollte noch ein File anhängen, aber habe die Kiste schon heruntergefahren. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
JoeLis Mitglied Application Engineer
Beiträge: 3 Registriert: 17.06.2016 DELL PRECISION TOWER 5810, Windows 10 Build 1809,E5-1620 v3 @3,50GHz, NVIDIA Quatro M4000, 32GB RAM, AutoCAD Architecture 2018
|
erstellt am: 11. Nov. 2019 13:32 <-- editieren / zitieren --> Unities abgeben: Nur für CADuceus
|