| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY WIRD VON NVIDIA ZUM HÄNDLER DES JAHRES GEWÄHLT, eine Pressemitteilung
|
Autor
|
Thema: Schnellauswahl Befehle (1001 / mal gelesen)
|
AlexSe77 Mitglied Schreinermeister
Beiträge: 4 Registriert: 25.06.2021 Autocad 2019
|
erstellt am: 25. Jun. 2021 06:48 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich habe vor kurzem festgestellt das wir in unseren Zeichnungen sehr viel nicht sichtbare Objekte liegen haben die die Zeichnungen sehr groß werden lassen. Stellenweise sind das mehrere Hunderttausend pro Zeichnung oft auch in Blöcken verknüpft. Kommen vermutlich von aufgelösten variablen Blöcken. Es sind zwei Polylinien mit einer Fläche von einmal 108 und einmal 124950. Ich versuche die jetzt alle nach und nach zu löschen muss aber natürlich die Werte in der Schnellauswahl immer neu einstellen. Da ich in fast jeden Block in der Zeichnung gehen muss ist das sehr zeitaufwändig. Meine Frage wäre nun ob ich einen Befehl auf einen Button legen kann mit dem ich das auf einen klick erledigen kann. Also: Schnellauswahl starten - Polylinie wählen - Fläche 108 - Polylinie wählen - Fläche 124950 und löschen. Geht bestimmt, aber leider reichen meine Kenntnisse dazu nicht aus. Wäre toll wenn mir hier jemand helfen kann. Vielen Dank schon mal! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 Hinweis: Meine Mitarbeit auf CAD.DE ist fakultativ, unentgeltlich und beruht nur auf einem ausgeprägtem Helfersyndrom.
|
erstellt am: 25. Jun. 2021 07:21 <-- editieren / zitieren --> Unities abgeben: Nur für AlexSe77
Falls sich die Polylinien nicht selbst schneiden, sollte sa kleine Lisp helfen : (defun C:PL108DELETE(/ BLOCK ITEM A ANZ) (vl-load-com) (setq ANZ 0) (vlax-for BLOCK (vla-get-blocks(vla-get-activedocument(vlax-get-acad-object))) (vlax-for ITEM BLOCK (if(member(strcase(vla-get-objectname ITEM))'("ACDB2DPOLYLINE""ACDBPOLYLINE")) (if(and(not(vl-catch-all-error-p (setq A(vl-catch-all-apply 'vlax-curve-getArea (list ITEM))) ) ) (numberp A) (or(equal A 108 0.1) (equal A 124950 0.1) ) (not(vl-catch-all-error-p(vl-catch-all-apply 'vla-delete (list ITEM)))) ) (setq ANZ (1+ ANZ)) ) ) ) ) (prompt (strcat"\n" (itoa ANZ) " Polylinien mit Fläche 108 bzw 124950 gelöscht\n")) ) Betrefs Laden und ausführen ... <<KLICK>> ------------------ Also ich finde Unities gut ... und andere sicher auch --------------------------------------- - Thomas - "Bei 99% aller Probleme 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 |
AlexSe77 Mitglied Schreinermeister
Beiträge: 4 Registriert: 25.06.2021 Autocad 2019
|
erstellt am: 25. Jun. 2021 10:32 <-- editieren / zitieren --> Unities abgeben:
Hallo CADmium, das ging ja schnell. Vielen Dank schon mal für deine schnelle Hilfe! Habe das ganze geladen und es funktioniert. Allerdings löscht es mehr als ich durch die Schnellauswahl auswählen würde. Bin jetzt in einen Block gegangen, habe den Befehl ausgeführt und er löscht mir 29471 Elemente. Es sind aber immer gleich viele von beiden Elementen. 29471 kann ich aber nicht durch 2 Teilen. Wenn ich durch die Schnellauswahl die Teile in dem Block markiere sind es nur 8652. Hast du eine Idee welche Elemente er da noch markiert und löscht? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 Hinweis: Meine Mitarbeit auf CAD.DE ist fakultativ, unentgeltlich und beruht nur auf einem ausgeprägtem Helfersyndrom.
|
erstellt am: 25. Jun. 2021 10:48 <-- editieren / zitieren --> Unities abgeben: Nur für AlexSe77
|
AlexSe77 Mitglied Schreinermeister
Beiträge: 4 Registriert: 25.06.2021 Autocad 2019
|
erstellt am: 25. Jun. 2021 10:58 <-- editieren / zitieren --> Unities abgeben:
Ok, das löscht dann also auch Elemente die noch als Block den man noch braucht in der Zeichnung sind von dem die nicht sichtbaren Elemente abstammen. Die haben natürlich die gleich Größe. Das ist dann aber zu viel. Ich möchte ja nur die Elemente löschen die nicht sichtbar da sind und nicht in einen Block eingebunden sind den ich noch brauche. Kann man nicht nur den Schnellauswahl Befehl so programmieren das ich folgendes machen kann: Ich gehe in einen Block - rufe den Befehl auf - er markiert mir Polylinien mit Flächen mit 108 und 124950 - ich lösche die Elemente und gehe aus dem Block wieder raus. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 Hinweis: Meine Mitarbeit auf CAD.DE ist fakultativ, unentgeltlich und beruht nur auf einem ausgeprägtem Helfersyndrom.
|
erstellt am: 25. Jun. 2021 11:20 <-- editieren / zitieren --> Unities abgeben: Nur für AlexSe77
(defun C:PL108DELETE(/ B BLOCK ITEM A ANZ) (vl-load-com) (if(and(or(setq B(car(entsel "\nBlockreferenz wählen : "))) (prompt"\nNix gewählt") ) (or(=(cdr(assoc 0(entget B)))"INSERT") (prompt"\nKeine Blockreferenz gewählt") ) (setq B(vlax-ename->vla-object B)) (setq B(vla-get-name B)) (not(vl-catch-all-error-p (setq BLOCK(vl-catch-all-apply 'vla-item (list (vla-get-blocks (vla-get-activedocument(vlax-get-acad-object)) ) B ) ) ) ) ) ) (progn (setq ANZ 0) (vlax-for ITEM BLOCK (if(member(strcase(vla-get-objectname ITEM))'("ACDB2DPOLYLINE""ACDBPOLYLINE")) (if(and(not(vl-catch-all-error-p (setq A(vl-catch-all-apply 'vlax-curve-getArea (list ITEM))) ) ) (numberp A) (or(equal A 108 0.1) (equal A 124950 0.1) ) (not(vl-catch-all-error-p(vl-catch-all-apply 'vla-delete (list ITEM)))) ) (setq ANZ (1+ ANZ)) ) ) ) (prompt (strcat"\n" (itoa ANZ) " Polylinien mit Fläche 108 bzw 124950 gelöscht\n")) ) ) ) ------------------ Also ich finde Unities gut ... und andere sicher auch --------------------------------------- - Thomas - "Bei 99% aller Probleme 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 |
AlexSe77 Mitglied Schreinermeister
Beiträge: 4 Registriert: 25.06.2021 Autocad 2019
|
erstellt am: 28. Jun. 2021 10:15 <-- editieren / zitieren --> Unities abgeben:
Hallo CADmium, das funktioniert sehr gut, vielen Dank für deine schnelle Hilfe! Wie bekomme ich das ganze jetzt noch am besten auf einen Button zum anklicken? Das bekomme ich gerade nicht hin. Der Befehl erscheint zwar in der Befehlszeile wenn ich den Button anklicke aber er sagt unbekannter Befehl. Wenn ich es so eingebe dann geht es.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Manuel486 Mitglied Technischer Zeichner Elektro
Beiträge: 212 Registriert: 31.01.2020
|
erstellt am: 28. Jun. 2021 14:00 <-- editieren / zitieren --> Unities abgeben: Nur für AlexSe77
|
xem Mitglied Zeichner
Beiträge: 854 Registriert: 07.08.2008 Software: AutoCAD 2022 - 64bit Windows 10 Pro - 64bit PDFCreator 1.0.2 - 32bit Ghostscript 9.0 - 64bit PDF-XChange Viewer - 64bit GIMP 2.6.8 - 64bit MS Office 2013 - 32bit Opera 12 - 32bit MacroX - 32bit 7-zip - 64bit ----------------------- Hardware: Intel i5 680 3,6GHz @ 4GHz 8GB RAM 1333MHz nVidia GTX 460 1024MB Intel SSD 2.5 80GB X25-M Samsung SyncMaster 245B+ Iiyama ProLite E1900s Logitech mx518 Logitech G11 Roccat Sense Glacier Blue
|
erstellt am: 28. Jun. 2021 15:18 <-- editieren / zitieren --> Unities abgeben: Nur für AlexSe77
Hallo, ich nutze folgende LISP um (alle) unsichtbare Objekte zu löschen. Code:
(defun c:Delinv ( / as) ; lokale Variable ;unsichtbare Objekte löschen (setq as (ssget "_X" (list'(60 . 1)))) (if as(command "_erase" as "")) (setq as nil) ; as wird freigeben (princ) )
Code:
(defun c:Delinvb (/ acdoc ss i sset nme Blockdefinition) ;unsichtbare Objekte in Blöcken löschen (vl-load-com) (setq acdoc (vla-get-activedocument (vlax-get-acad-object) ) ) (if (setq ss (ssget "_:L" '((0 . "INSERT")))) (repeat (setq i (sslength ss)) (setq sset (ssname ss (setq i (1- i)))) (setq nme (cdr (assoc 2 (entget sset)))) (setq Blockdefinition (vla-item (vla-get-blocks acdoc) nme)) (if (and (eq :vlax-false (vla-get-isxref Blockdefinition)) (eq :vlax-false (vla-get-islayout Blockdefinition)) ) (vlax-for x Blockdefinition (if(=(vla-get-Visible x) :vlax-false) (vla-delete x) ) ) ) ) (princ) ) (vla-regen acdoc acAllViewports) (princ) )
------------------ Error in Layer 8 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |