Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de
  AutoCAD VBA
  Blöcke auf Layern auswählen

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
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
  
Von Digital Twins bis Hochleistungs-Computing: PNY präsentiert seine Zukunftstechnologien für die Industrie von morgen, eine Pressemitteilung
Autor Thema:  Blöcke auf Layern auswählen (710 mal gelesen)
Jowo76
Mitglied



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

Beiträge: 16
Registriert: 09.12.2008

AutoCad 2007, 2008, 2009

erstellt am: 29. Jul. 2009 09: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

Guten Morgen,

wieder wende ich mich an Euch.

Ich habe mehrere Layer (layer 1 bis layer x) auf denen Blöcke liegen.
Die Blöcke sind in diesem Fall teilweise mit und teilweise ohne Attribute.

Nun muss ich alle Blöcke, welche auf diesen Layern liegen aus der Zeichnung löschen.

Ich hatte mir das so vorgestellt und bin natürlich gegen die Wand gerannt:

Dim Sset As AcadSelectionSet
Dim obj As AcadBlockReference
Dim ftype As Integer
Dim fdata As Variant


ftype = 2
fdata = "Layer" & "*"


Set Sset = ThisDrawing.SelectionSets.Add("select")

Sset.Select acSelectionSetAll, , , ftype, fdata
For Each obj In Sset
    obj.Delete
Next

Sset.Delete

Bitte um Gedankenstoß in die richtige Richtung.

------------------
Jowo76

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


Ex-Mitglied

erstellt am: 29. Jul. 2009 09:50    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

fast richtig, aber der Filter muss ein Array sein, also richtig:

Code:
Dim ftype(0) As Integer
Dim fdata(0) As Variant

...
ftype(0) = 2
fdata(0) = "Layer*"


- alfred -

------------------
www.hollaus.at

Jowo76
Mitglied



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

Beiträge: 16
Registriert: 09.12.2008

AutoCad 2007, 2008, 2009

erstellt am: 29. Jul. 2009 09:53    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

Besten Dank

------------------
Jowo76

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

Jowo76
Mitglied



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

Beiträge: 16
Registriert: 09.12.2008

AutoCad 2007, 2008, 2009

erstellt am: 29. Jul. 2009 10:40    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

Noch eine Frage:

Die Blöcke werden jetzt gelöscht.

Wie muss ich die Filter definieren damit auch Regionen und 3d-Objekte auf diesen Layern gelöscht werden?

habs so versucht, aber die Kreise(Regionen) bleiben.

ftype(0) = -4
ftype(1) = -4
ftype(2) = 2
ftype(3) = 0
ftype(4) = -4
ftype(5) = -4

fdata(0) = "<AND"
fdata(1) = "<OR"
fdata(2) = "Layer*"
fdata(3) = "circle"
fdata(4) = "OR>"
fdata(5) = "AND>"

------------------
Jowo76

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


Ex-Mitglied

erstellt am: 29. Jul. 2009 10:41    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

BTW wenn Du nach Layernamen filtern willst, dann muss

ftype(0) = 8

sein, der DXFCode 2 steht für Namen wie Blockname o.ä.

- alfred -

------------------
www.hollaus.at


Ex-Mitglied

erstellt am: 29. Jul. 2009 11:09    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

also Deines lass ich mal aus.

Code:
Dim ftype(1) As Integer
Dim fdata(1) As Variant

...
ftype(0) = 8            'Layernamen-Filter
fdata(0) = "Layer*"
ftype(1) = 0            'Geometrietyp-Filter
fdata(1) = "REGION,CIRCLE,INSERT"


Du kannst im Filter, wie oben gezeigt, die Elementtypen (oder Layernamen) einfach mit Komma hintereinanderschreiben, das gleicht einer OR Bedingung.

Für 3D-Objekte kann ich Dir keine pauschale Antwort geben, denn deren gibt es viele und da gibt's nicht einen Objekttyp dafür, der alles 3D-artige umfasst.

- alfred -

------------------
www.hollaus.at

Jowo76
Mitglied



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

Beiträge: 16
Registriert: 09.12.2008

AutoCad 2007, 2008, 2009

erstellt am: 29. Jul. 2009 11:13    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

Danke danke danke

------------------
Jowo76

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

Jowo76
Mitglied



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

Beiträge: 16
Registriert: 09.12.2008

AutoCad 2007, 2008, 2009

erstellt am: 29. Jul. 2009 11:33    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 Alfred,

nun bekomme ich die Fehlermeldung Typen unverträglich.
Das Programm steigt bei der Zeile "For each obj in Sset .." aus.
Das selectionset im Überwachunsfenster hat aber 2840 Einträge(kommt ungefähr hin) und erkennt diese als Regionen und Kreise.


Die 3d-Objekte sind Zylinder (erstellt mit .AddExtrudedSolid).

Bitte nochmals um Deine Hilfe

------------------
Jowo76

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


Ex-Mitglied

erstellt am: 29. Jul. 2009 11:43    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

wie hast Du denn 'obj' deklariert?

Wenn Du nicht weisst, wie AutoCAD die Elemente intern nennt bzw, die Namen, die Du bei Geometrietyp im Filter eintragen musst, dann kannst Du in der Befehlszeile eingeben:

(entget (car (entsel)))

...damit bekommst Du die Lisp-Schreibweise der Elemente und kannst nachsehen, nach welchen Eigenschaften Du filtern kannst.

Weitere Gefahr mit 'For ... Each' im Zusammenhang mit Löschen ==> Du hast ein Buch vor Dir liegen, Du reisst die Seite 1 raus und gibst dann 'den Befehl' auf die nächste Seite zu blättern ==> da kann jetzt sein:

a) Du verlangst von einer Seite, die nicht mehr existiert, die Seitennummer, damit Du weisst, welches die nächste ist

b) Du landest auf Seite 3 (und bist komfortabel die Seite 2 übersprungen)

Also bei Löschen immer kritisch sein und ev. anders herum aufzäumen:

Code:
Dim i as Integer
For i = tSSet.Count -1 To 0 Step -1
   tSSet(i).Delete
Next

...ist zwar eine Spur langsamer, aber damit zerstörst Du keine internen Pointer!


- alfred -

------------------
www.hollaus.at

[Diese Nachricht wurde von a.n. am 29. Jul. 2009 editiert.]

Jowo76
Mitglied



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

Beiträge: 16
Registriert: 09.12.2008

AutoCad 2007, 2008, 2009

erstellt am: 29. Jul. 2009 11:48    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

Werd ich dann gleich mal testen, danke einstmal.
Ich glaube mit einem Bier als Danke wird es sich schon nicht mehr ausgehen 

------------------
Jowo76

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

Jowo76
Mitglied



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

Beiträge: 16
Registriert: 09.12.2008

AutoCad 2007, 2008, 2009

erstellt am: 29. Jul. 2009 13:06    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

Und nochmal bin ich hier.

Es funktioniert nun alles .. bis auf die Zylinder, die sind hartnäckig und bleiben am Papier.

Diese werden als "3DSOLID" bezeichnet. (hab ich dann mit "(cdr(assoc 0(entget(entlast))))" ermittelt dein Code wollte nicht)


Hier nochmal mein Code ... vielleicht hilft das:

Dim Sset As AcadSelectionSet
Dim ftype(0 To 2) As Integer
Dim fdata(0 To 2) As Variant

ftype(0) = 8
ftype(1) = 0
ftype(2) = 100 'Ich habe hier keine Ahnung welcher Wert hier richtig ist

fdata(0) = "Layer*"
fdata(1) = "REGION,CIRCLE,INSERT"
fdata(2) = "3DSOLID"

Set Sset = ThisDrawing.SelectionSets.Add("select")

Sset.Select acSelectionSetAll, , , ftype, fdata

Dim i As Integer
For i = Sset.Count - 1 To 0 Step -1
    Sset(i).Delete
Next

Sset.Delete
ThisDrawing.Regen acActiveViewport

------------------
Jowo76

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


Ex-Mitglied

erstellt am: 29. Jul. 2009 13:12    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi, 
Zitat:
dein Code wollte nicht
...Danke für den Hinweis, aber es war nur eine Klammer am Ende zu wenig (hab's auch schon korrigiert).
Zitat:

fdata(0) = "Layer*"
fdata(1) = "REGION,CIRCLE,INSERT"
fdata(2) = "3DSOLID"
==> damit machst Du aus ODER ein UND ==> selektiere Elemente die 'region' (oder 'circle' oder 'insert') UND gleichzeitig '3DSOLID' sind, dass das nicht geht, ist klar.

Also:

Zitat:
fdata(0) = "Layer*"
fdata(1) = "REGION,CIRCLE,INSERT,3DSOLID"
...und oben die Arraygrenzen entsprechend auf (0 to 1) korrigieren.

- alfred -

------------------
www.hollaus.at

Jowo76
Mitglied



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

Beiträge: 16
Registriert: 09.12.2008

AutoCad 2007, 2008, 2009

erstellt am: 29. Jul. 2009 13:17    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

Sorry, mein Fehler.

Vielen Dank

------------------
Jowo76

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)2025 CAD.de | Impressum | Datenschutz