Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Rund um AutoCAD
  unsichtbare Blöcke 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
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  unsichtbare Blöcke löschen (2390 mal gelesen)
xem
Mitglied
Zeichner


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

Beiträge: 847
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: 04. Apr. 2016 09:51    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,

ich habe in einer Zeichnung viele Blöcke in Blöcke in Blöcke in Blöcke ...
Wenn ich jetzt alle Blöcke über die Schnellauswahl fange und nacheinander auflöse, kommen aus dem Nichts neue Objekte.
Das sind Blöcke die unsichtbar sind und nur über die Schnellauswahl zu fangen.

>Hier< habe ich ein LISP gefunden mit dem diese Blöcke sichtbar werden.

Jetzt wollte ich den Code nutzen um gleich die unsichtbaren Blöcke zu löschen, nur weiß ich nicht an welcher Stelle ich den Befehl zum löschen einfügen soll.

Versucht habe ich es mal so:

Code:
(defun c:showall( / ss i)
  (setq ss (ssget "_x" ))
  (setq i 0)
  (while (< i (sslength ss))
    (setq eLst (entget (ssname ss i)))
    (if (null (assoc 60 eLst))
(entmod (cons '(60 . 0) eLst))
      (entmod (subst '(60 . 0) (assoc 60 eLst) eLst))
    )
(if ss(command "_erase" ss ""))
;    (setq i (1+ i))
  )
)

nur dann hängt sich AutoCAD auf. Ich schätze mal das AutoCAD sich in der Schleife einen "Wolf rennt".
Wie kann ich ohne Schleife die unsichtbaren Blöcke in einer Variablen sammeln und dann löschen?

Danke

------------------
Error in Layer 8

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

cadffm
Moderator
良い精神




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

Beiträge: 21533
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 04. Apr. 2016 10: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 Nur für xem 10 Unities + Antwort hilfreich

..denn sie wissen nicht was sie tun

Bevor du etwas löscht, wäre es sinnig zu wissen was du löscht.
Das Lisp schaltet Objekte EIN die über eine bestimmte Funktionalität ausgeschaltet/unsichtbar wurden.
(deine Zeilen funktionieren im übrigen nicht bzw. unendlich weil du den Zähler auskommentiert hast: ;    (setq i (1+ i))
entferne das Semikolon und das Lisp wird auch ein Ende finden.

Das einschalten kann man sich natürlich sparen wenn man die Objekte sowieso löschen möchte,
nur wie gesagt, rate ich davon ab so eine Funktion "blindlinks" zu nutzen.

Im übrigen kannst du auch die Original-Version benutzen und auf den Auswahlsatz zugreifen:
Standardobjektauswahl-Option VORHER

Das Lisp greift jedoch nur auf TopLevel-Elemente zu, also auf alles was du anpicken kannst,
Block in Block oder Linien in Block etc. erreichst du so ohnehin nicht.
(es können alle möglichen Objekte betreffen, nicht bloß Blockreferenzen)

Lasse dein Vorhaben gut sein, nutze den Code im Original und auf den Auswahlsatz kannst du
ganz normal mit "Vorher" zugreifen.
Tip: Pickadd auf 2 stellen und mit WAHL VORHER die Objekte markieren - zum optischen Check.
Alternativ: Im Code am Schluß, vor der letzten Klammer <des Originalcodes> ein (sssetfirst nil ss) ergänzen.

------------------
CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD

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

xem
Mitglied
Zeichner


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

Beiträge: 847
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: 04. Apr. 2016 10:20    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 cadffm,

Pickadd ist auf 2.
Nur wählt er mir nicht die geänderten Blöcke aus, sondern alle Objekte in der Zeichnung.
Sowohl mit (sssetfirst nil ss) als auch mit WAHL VORHER.
Ich schätze mal weil der Code alle Objekte überprüft.

------------------
Error in Layer 8

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

cadffm
Moderator
良い精神




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

Beiträge: 21533
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 04. Apr. 2016 10:35    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 xem 10 Unities + Antwort hilfreich

Sorry, da hatte ich mich dann wohl versehen.
Wenn die Objektwahl gleich auf die unsichtbaren eingeschränkt wird, dann passt es.
(ssget "_X" '((60 . 1)))

------------------
CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD

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

xem
Mitglied
Zeichner


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

Beiträge: 847
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: 04. Apr. 2016 10:42    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!

so funktioniert es:

Code:

(defun c:Deliblk ( / as)
(setq as (ssget "_X" '((60 . 1))))
(if as(command "_erase" as ""))
(setq as nil)
(princ)
)

------------------
Error in Layer 8

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

cadffm
Moderator
良い精神




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

Beiträge: 21533
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 04. Apr. 2016 10: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 Nur für xem 10 Unities + Antwort hilfreich

grrrrrrrrrrrr 


------------------
CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD

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

xem
Mitglied
Zeichner


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

Beiträge: 847
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: 04. Apr. 2016 11:38    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

Ich habe mal versucht eine Abfrage einzubauen:
Code:

(defun c:Deliblk( / ss i as)
  (setq ss (ssget "_x" ))
  (setq as (ssget "_X" '((60 . 1))))
  (setq i 0)
  (while (< i (sslength ss))
    (setq eLst (entget (ssname ss i)))
    (if (null (assoc 60 eLst))
    (entmod (cons '(60 . 0) eLst))
      (entmod (subst '(60 . 0) (assoc 60 eLst) eLst))
    )
    (setq i (1+ i))
  )
(if as(command "wahl" as))
(initget "JA NEIN")
(setq au (getkword "\nLöschen? [JA/NEIN] <JA>: "))
(if (= au "JA") (if as(command "_erase" as "")))
(if (= au "NEIN") (princ))
)

Es werden die Blöcke auch markiert und ich werde gefragt ob ich löschen möchte, nur wird dann nichts gelöscht. 

------------------
Error in Layer 8

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

cadffm
Moderator
良い精神




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

Beiträge: 21533
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 04. Apr. 2016 11:56    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 xem 10 Unities + Antwort hilfreich

Code:

(defun c:Deliblk( / ss i as)
  ; wenn es in der nächsten Zeile überschreiben wird = überflüssig (setq as (ssget "_X"))
  (setq as (ssget "_X" '((60 . 1))))
  (setq i 0)
  (while (< i (sslength ss)) ; den Auswahlsatz "ss" wird es in diesem Code NIE geben, also auch kein While laufen
    (setq eLst (entget (ssname ss i)))
    (if (null (assoc 60 eLst))
        (entmod (cons '(60 . 0) eLst)); wenn (null (assoc 60 eLst)) wahr ist, brauchst du auch nichts ändern = überflüssig
        (entmod (subst '(60 . 0) (assoc 60 eLst) eLst))
    )
    (setq i (1+ i))
  )
(if as(command "wahl" as)) ; warum beendest du die Objektwahl nicht erst mal?
(initget "JA NEIN"); Objektwahl noch immer nicht beendet, also ein Durcheinander wo einzelne Kommentare nicht lohnen
(setq au (getkword "\nLöschen? [JA/NEIN] <JA>: "))
(if (= au "JA") (if as(command "_erase" as "")))
(if (= au "NEIN") (princ))
)


mal anders (und durch drücken von [ENTF] kann man die Objekte DES AKTUELLEN BEREICHES auch löschen. (Programm überarbeitet aber alle Bereiche/Layouts - nur wirkt da [ENTF] halt nicht)

Code:

(defun c:CHKgc60 (/ aws)
  (if (setq aws (ssget "_X" '((60 . 1))))
      (progn
        (foreach item (mapcar 'cadr (ssnamex AWS))
           (entmod(subst '(60 . 0)'(60 . 1)(entget item)))
        )
        (command "_.ZOOM" "_extents")
        (sssetfirst nil aws)
        (princ (strcat "\n"(rtos (sslength aws) 2 0) " Objekte sichtbar geschaltet"))
      )
  )
(princ)
)

------------------
CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD

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

xem
Mitglied
Zeichner


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

Beiträge: 847
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: 29. Apr. 2016 09:51    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,

Das ein Blöcke unsichtbar ist, steckt ja in "(60 . 1)".
Kommt man an diese Eigenschaft auch ohne LISP zum ein/aus schalten?

------------------
Error in Layer 8

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



Technischer Zeichner (m/w/d) in Voll-/Teilzeit

Die KÖGL GmbH mit Sitz in Bubesheim bei Günzburg ist ein familiengeführtes Unternehmen, welches heute von drei Generationen geleitet wird. Wir zählen mit unseren über 185 Mitarbeitern zu den Marktführenden Spezialisten in der Herstellung u. Entwicklung von Betriebs-, Lager- u. Fahrzeugeinrichtungen.

Seit der Unternehmensgründung im Jahre 1964 verzeichnet KÖGL kontinuierliches Wachstum. In all diesen Jahren hat das Unternehmen die Struktur eines typischen Familienbetriebs beibehalten....

Anzeige ansehenTechnischer Zeichner, Bauzeichner
cadffm
Moderator
良い精神




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

Beiträge: 21533
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 29. Apr. 2016 10:39    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 xem 10 Unities + Antwort hilfreich

Wenn ich mich recht erinnere kommt es darauf an mit welcher Software man unterwegs ist,
in AutoCAD imho Nein, nur mit Programmierung oder Bearbeitung im DXF-Format.

Aber es kann durchaus sein das Vertikalprodukte diese Möglichkeit nutzen,
ACA zB. hat AECHIDEOBJECTS, vielleicht nutzt dieser Befehl den DXF-60,
mir ist es nicht bekannt, will nur zeigen das es nicht so ganz einfach zu beantworten geht mit der allgemeinne Anfrage.

------------------
CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD

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