Hot News aus dem CAD.de-Newsletter:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Rund um AutoCAD
  Objekt in Blöcken suchen und löschen

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:   Objekt in Blöcken suchen und löschen (3195 mal gelesen)
CADuceus
Mitglied
BIM/CAD Administrator


Sehen Sie sich das Profil von CADuceus an!   Senden Sie eine Private Message an CADuceus  Schreiben Sie einen Gästebucheintrag für CADuceus

Beiträge: 351
Registriert: 20.01.2005

Elektro- & Gebäudetechnik
Revit 2017/2019 (D/EN)
AutoCAD 2019
Win10 64bit / Chrome
Intel® Core™ i7-8550U 1.99GHz / 16GB
Radeon RX 540
HP DesignJet T795

erstellt am: 13. Apr. 2011 14:04    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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



Sehen Sie sich das Profil von KlaK an!   Senden Sie eine Private Message an KlaK  Schreiben Sie einen Gästebucheintrag für KlaK

Beiträge: 2135
Registriert: 02.05.2006

AutoCAD LandDesktop R2 bis 2004
Civil 3D 2005 - 2019
Bricscad V11-V19 pro
Plateia, Canalis
Visual Basic

erstellt am: 13. Apr. 2011 14:23    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für CADuceus 10 Unities + Antwort hilfreich

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




Sehen Sie sich das Profil von CADmium an!   Senden Sie eine Private Message an CADmium  Schreiben Sie einen Gästebucheintrag für CADmium

Beiträge: 13421
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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für CADuceus 10 Unities + Antwort hilfreich

Das umschreiben und statt nur auf Objektname zutesten

...(if(=(strcase(vla-get-objectname  ITEM))(strcase OBJECTNAME)) ... auch die anderen eigenschaften entsprechend mit aufnehmen.

------------------
  - 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

CADuceus
Mitglied
BIM/CAD Administrator


Sehen Sie sich das Profil von CADuceus an!   Senden Sie eine Private Message an CADuceus  Schreiben Sie einen Gästebucheintrag für CADuceus

Beiträge: 351
Registriert: 20.01.2005

Elektro- & Gebäudetechnik
Revit 2017/2019 (D/EN)
AutoCAD 2019
Win10 64bit / Chrome
Intel® Core™ i7-8550U 1.99GHz / 16GB
Radeon RX 540
HP DesignJet T795

erstellt am: 13. Apr. 2011 15:43    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von Andreas Kraus an!   Senden Sie eine Private Message an Andreas Kraus  Schreiben Sie einen Gästebucheintrag für Andreas Kraus

Beiträge: 1152
Registriert: 11.01.2006

Win 10
ACAD 2019

erstellt am: 13. Apr. 2011 16:11    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für CADuceus 10 Unities + Antwort hilfreich

(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




Sehen Sie sich das Profil von CADmium an!   Senden Sie eine Private Message an CADmium  Schreiben Sie einen Gästebucheintrag für CADmium

Beiträge: 13421
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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für CADuceus 10 Unities + Antwort hilfreich

Ganz speziell :

(defun C:MyDELALL( / BLOCK ) 
  (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(and(=(strcase(vla-get-objectname  ITEM))"ACDBPOLYLINE")
               (equal (vla-get-length ITEM) 0.485 0.000001)
               (=(strcase(vla-get-layer ITEM))"0")
               (equal(vla-get-ConstantWidth ITEM)0.012  0.000001)
           )
          (vl-catch-all-error-p(vl-catch-all-apply'vla-delete(list ITEM)))
        )
      ) 
    )
  ) 
  (vla-regen(vla-get-activedocument (vlax-get-acad-object)) acAllViewports)
)


damit kannste dann deine Werte sicherlich alleine anpassen.

------------------
      - 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

CADuceus
Mitglied
BIM/CAD Administrator


Sehen Sie sich das Profil von CADuceus an!   Senden Sie eine Private Message an CADuceus  Schreiben Sie einen Gästebucheintrag für CADuceus

Beiträge: 351
Registriert: 20.01.2005

Elektro- & Gebäudetechnik
Revit 2017/2019 (D/EN)
AutoCAD 2019
Win10 64bit / Chrome
Intel® Core™ i7-8550U 1.99GHz / 16GB
Radeon RX 540
HP DesignJet T795

erstellt am: 14. Apr. 2011 15:00    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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




Sehen Sie sich das Profil von CADmium an!   Senden Sie eine Private Message an CADmium  Schreiben Sie einen Gästebucheintrag für CADmium

Beiträge: 13421
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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für CADuceus 10 Unities + Antwort hilfreich

na ok

(defun C:MyDELALL( / BLOCK )
  (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(and(member(strcase(vla-get-objectname  ITEM))'("ACDBPOLYLINE" "ACDB2DPOLYLINE"))
              (equal(distance(vlax-curve-getClosestPointTo ITEM '(0 0 0))'(0 0 0)) 0 0.000000001)
          )
          (vl-catch-all-error-p(vl-catch-all-apply'vla-delete(list ITEM)))
        )
      )
    )
  )
  (vla-regen(vla-get-activedocument (vlax-get-acad-object)) acAllViewports)
)

löscht alle Polylinien in einem Block, die durch den Blockbasispunkt gehen

------------------
  - 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

CADuceus
Mitglied
BIM/CAD Administrator


Sehen Sie sich das Profil von CADuceus an!   Senden Sie eine Private Message an CADuceus  Schreiben Sie einen Gästebucheintrag für CADuceus

Beiträge: 351
Registriert: 20.01.2005

Elektro- & Gebäudetechnik
Revit 2017/2019 (D/EN)
AutoCAD 2019
Win10 64bit / Chrome
Intel® Core™ i7-8550U 1.99GHz / 16GB
Radeon RX 540
HP DesignJet T795

erstellt am: 15. Apr. 2011 13:22    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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

Sehen Sie sich das Profil von JoeLis an!   Senden Sie eine Private Message an JoeLis  Schreiben Sie einen Gästebucheintrag für JoeLis

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für CADuceus 10 Unities + Antwort hilfreich

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
BIM/CAD Administrator


Sehen Sie sich das Profil von CADuceus an!   Senden Sie eine Private Message an CADuceus  Schreiben Sie einen Gästebucheintrag für CADuceus

Beiträge: 351
Registriert: 20.01.2005

Elektro- & Gebäudetechnik
Revit 2017/2019 (D/EN)
AutoCAD 2019
Win10 64bit / Chrome
Intel® Core™ i7-8550U 1.99GHz / 16GB
Radeon RX 540
HP DesignJet T795

erstellt am: 11. Nov. 2019 11:45    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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

Sehen Sie sich das Profil von JoeLis an!   Senden Sie eine Private Message an JoeLis  Schreiben Sie einen Gästebucheintrag für JoeLis

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für CADuceus 10 Unities + Antwort hilfreich

Herzlichen Dank,
funktioniert super, leider habe ich überhaupt keine Ahnung vom Programmieren, deshalb die Frage.
Vielen Dank jedenfalls.
Gruß
Jörg

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2019 CAD.de | Impressum | Datenschutz