Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  nach Blocksichtbarkeit filtern

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:  nach Blocksichtbarkeit filtern (2875 mal gelesen)
Steff179
Mitglied
Geomatiker


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

Beiträge: 266
Registriert: 09.08.2007

AutoCAD 2014

erstellt am: 06. Mai. 2011 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

Hallo zusammen
Ich habe mich ja mit dem Sichtbarkeitsstatus von Blöcken herumgeplagt.
Das ist dabei herausgekommen.
Ich hoffe es ist leserlich und das ich keine bösen Fehler eingebaut habe.

Gruss Steff

Code:

(defun c:FILTER-SICHTBARKEIT
      ( / Blocksichtbarkeit Kill-Doppelte ss i sss auswahllist a auswahl)

  ; Gibt also Ergebniss nil oder den Sichtbarkeitsparameter zurück
  ; ent = Elementname
  (defun Blocksichtbarkeit ( ent / i sarray sarray-ele Ergebniss)
    (if
      (and
        (= (cdr (assoc 0 (entget ent))) "INSERT")
        (vla-get-IsDynamicBlock (vlax-ename->vla-object ent))
      )     
      (progn
        (setq sarray
          (vlax-variant-value
            (vla-getdynamicblockproperties(vlax-ename->vla-object ent)))
        )
        (setq i (vlax-safearray-get-l-bound sarray 1))
        (while (<= i (vlax-safearray-get-u-bound sarray 1))
          (setq sarray-ele (vlax-safearray-get-element sarray i))
          (if (= (vla-get-PropertyName sarray-ele) "Sichtbarkeit")
            (setq ergebniss (vlax-variant-value (vla-get-value sarray-ele)))
          );end if
          (setq i (1+ i))
        );end while
      );end progn
    );end if
    ergebniss
  );end defun


  ; löscht doppelte Listenelemente und gibt die Liste sortiert zurück
  ; Liste = einfache Liste bsp. (1 2 3 4 5) ("A" "B" "C")
  (defun Kill-Doppelte (Liste / NeueListe)
    (foreach x Liste
      (if (not(member x NeueListe))
        (setq NeueListe (cons x NeueListe))
      )
    )
    (vl-sort (reverse NeueListe) (function (lambda (e1 e2)(< e1 e2))))
  );end defun

  (setq ss (ssget '((0 . "Insert")))
        i 0
        sss (ssadd)
  )

  ;Erstellt eine Auswahlliste mit allen Sichtbarkeitsstatus
  (if ss
    (repeat (sslength ss)
      (if (Blocksichtbarkeit (ssname ss i))
        (setq Auswahllist (cons (Blocksichtbarkeit (ssname ss i)) Auswahllist))
      );end if
      (setq i (1+ i))
    );end repeat
    (setq Auswahllist (Kill-Doppelte Auswahllist))
  );end if
  ;----------------------------------------

 
  (if (And Auswahllist ss)
    (progn
      ;Erstellt einen Filterstring für initget
      (setq a "" i 1)
      (repeat (length auswahllist)
        (setq a (strcat (itoa i) " " a))
        (setq i (1+ i))
      ) 
      ;----------------------------------------

      ;Fordert zur auswahl des zu Filternden Sichtbarkeitsstatus auf
      (setq i 1)
      (foreach x Auswahllist (princ (strcat "\n" (itoa i) ". " x))(setq i (1+ i)))
      (initget 1 a)
      (setq auswahl (getkword "\nBitte die Auswahl (Position) eingeben: "))
      ;----------------------------------------


      ;Filtert alle im Auswahlset enthaltenen Objekte mit dem
      ;Ausgewählten Sichtbarkeitsstatus
      (setq i 0)
      (repeat (sslength ss)
        (setq ent (ssname ss i))
        (if (= (Blocksichtbarkeit ent) (nth (- (atoi auswahl) 1) Auswahllist))
          (setq sss (ssadd ent sss))
        );end if
        (setq i (1+ i))
      );end repeat
      (sssetfirst sss sss)
      ;----------------------------------------

    );end progn
    (princ "\nKeine Blöcke mit Sichtbarkeitsparameter gefunden!")
  );end if
  (princ)
);end defun


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: 1356
Registriert: 11.01.2006

WIN 10
ACAD 2022

erstellt am: 06. Mai. 2011 16: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 Steff179 10 Unities + Antwort hilfreich

Ich würde die Auswahlliste "bereinigen" also doppelte rausschmeißen. Stell dir mal vor jemand wählt 2000 Objekte und nur zwei haben eine andere Sichtbarkeit  .
Die Idee find ich aber gut. Ich hab ja auch schon eine Filterfunktion gebaut

http://ww3.cad.de/foren/ubb/Forum54/HTML/015389.shtml#000038

die greift aber nur auf die Daten eines Objektes zu um den Filter zu erstellen.
Aber eine "Schnellauswahl" mit Attributinhalten, EEDs, Parameterwerten,... das macht sicher Spass.
Ich glaub da meldet sich der Basteltrieb bei mir 

Schönes Wochenende

------------------
Geht nicht, gibts nicht

Gruß
Andreas

http://kraus-cad.de

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

Steff179
Mitglied
Geomatiker


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

Beiträge: 266
Registriert: 09.08.2007

AutoCAD 2014

erstellt am: 09. Mai. 2011 15: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

Hallo Andreas

UUUUPPPPSSSS
Sollte natürlich schon nicht so sein das die Auswahl so lang ist 
Hab irgendwie ein "progn" rauseditiert :s
Darum hats die Zeile
"(setq Auswahllist (Kill-Doppelte Auswahllist))"
übersprungen.

Danke für die Anmerkung.

Gruss Steff

Code:

(defun c:FILTER-SICHTBARKEIT
      ( / Blocksichtbarkeit Kill-Doppelte ss i sss auswahllist a auswahl)

  ; Gibt also Ergebniss nil oder den Sichtbarkeitsparameter zurück
  ; ent = Elementname
  (defun Blocksichtbarkeit ( ent / i sarray sarray-ele Ergebniss)
    (if
      (and
        (= (cdr (assoc 0 (entget ent))) "INSERT")
        (vla-get-IsDynamicBlock (vlax-ename->vla-object ent))
      )   
      (progn
        (setq sarray
          (vlax-variant-value
            (vla-getdynamicblockproperties(vlax-ename->vla-object ent)))
        )
        (setq i (vlax-safearray-get-l-bound sarray 1))
        (while (<= i (vlax-safearray-get-u-bound sarray 1))
          (setq sarray-ele (vlax-safearray-get-element sarray i))
          (if (= (vla-get-PropertyName sarray-ele) "Sichtbarkeit")
            (setq ergebniss (vlax-variant-value (vla-get-value sarray-ele)))
          );end if
          (setq i (1+ i))
        );end while
      );end progn
    );end if
    ergebniss
  );end defun


  ; löscht doppelte Listenelemente und gibt die Liste sortiert zurück
  ; Liste = einfache Liste bsp. (1 2 3 4 5) ("A" "B" "C")
  (defun Kill-Doppelte (Liste / NeueListe)
    (foreach x Liste
      (if (not(member x NeueListe))
        (setq NeueListe (cons x NeueListe))
      )
    )
    (vl-sort (reverse NeueListe) (function (lambda (e1 e2)(< e1 e2))))
  );end defun

  (setq ss (ssget '((0 . "Insert")))
        i 0
        sss (ssadd)
  )

  ;Erstellt eine Auswahlliste mit allen Sichtbarkeitsstatus
  (if ss
    (progn
      (repeat (sslength ss)
        (if (Blocksichtbarkeit (ssname ss i))
          (setq Auswahllist (cons (Blocksichtbarkeit (ssname ss i))
                            Auswahllist))
        );end if
        (setq i (1+ i))
      );end repeat
      (setq Auswahllist (Kill-Doppelte Auswahllist))
    );end progn
  );end if
  ;----------------------------------------


  (if (And Auswahllist ss)
    (progn
      ;Erstellt einen Filterstring für initget
      (setq a "" i 1)
      (repeat (length auswahllist)
        (setq a (strcat (itoa i) " " a))
        (setq i (1+ i))
      )
      ;----------------------------------------

      ;Fordert zur auswahl des zu Filternden Sichtbarkeitsstatus auf
      (setq i 1)
      (foreach x Auswahllist (princ (strcat "\n" (itoa i) ". " x))(setq i (1+ i)))
      (initget 1 a)
      (setq auswahl (getkword "\nBitte die Auswahl (Position) eingeben: "))
      ;----------------------------------------


      ;Filtert alle im Auswahlset enthaltenen Objekte mit dem
      ;Ausgewählten Sichtbarkeitsstatus
      (setq i 0)
      (repeat (sslength ss)
        (setq ent (ssname ss i))
        (if (= (Blocksichtbarkeit ent) (nth (- (atoi auswahl) 1) Auswahllist))
          (setq sss (ssadd ent sss))
        );end if
        (setq i (1+ i))
      );end repeat
      (sssetfirst sss sss)
      ;----------------------------------------

    );end progn
    (princ "\nKeine Blöcke mit Sichtbarkeitsparameter gefunden!")
  );end if
  (princ)
);end defun


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

Britt
Mitglied
 


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

Beiträge: 154
Registriert: 21.03.2002

erstellt am: 12. Jan. 2012 11: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 Nur für Steff179 10 Unities + Antwort hilfreich

Hallo Steff,

vielen Dank für Dein Programm und die viele gesparte Zeit 

Viele Grüße
Britt

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

Balrok
Mitglied
Technischer Zeichner


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

Beiträge: 428
Registriert: 02.06.2005

Win10, 64Bit
AutoCad 2023
AutoCad Architectur 2023
LiNear 2019
EPLAN P8 2022

erstellt am: 27. Apr. 2016 10: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 Steff179 10 Unities + Antwort hilfreich

Hallo,

ich möchte das Thema nochmal aufgreifen.
Bei mir gibt es die Meldung nach der Auswahl des Blockes
"Keine Blöcke mit Sichtbarkeitsparameter gefunden!", obwohl die Blöcke
definitiv Sichtbarkeitsparameter haben. 

Was mache ich falsch???

Grüße
Balrok

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

Alles

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

Der Code ist an dieser Stelle leider wenig allgemeingültig gehalten
und geht von einem Parameternamen "Sichtbarkeit" aus, anstatt zu ermitteln
wie DEIN Sichtbarkeitsparameter benannt ist.

Nur zum testen, aber nicht zwingend als Lösung zu empfehlen:
Ändere im Code mal "Sichtbarkeit" auf "wohersollenwirwissenwiedudeineParameterbenennst",
lade den Code neu und teste..

Wobei "wohersollenwirwissenwiedudeineParameterbenennst" vermutlich "Sichtbarkeit1" sein wird in deinem Fall.

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

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

Balrok
Mitglied
Technischer Zeichner


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

Beiträge: 428
Registriert: 02.06.2005

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

Ok, danke schon mal!

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

Bernd P
Ehrenmitglied V.I.P. h.c.
cook-general



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

Beiträge: 3358
Registriert: 07.06.2001

W10-64bit, AMD Ryzen 7 3700X,32GB RAM, Sapphire Pulse Radeon RX 570 8G G5, Canon TX-3000 MFP, Maus Cherry MW4500, Sub:Infrastructure Design Suite, Office 365

erstellt am: 28. Apr. 2016 09:15    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 Steff179 10 Unities + Antwort hilfreich

Servus, einfach das "Sichtbarkeit" auf den Standard "Sichtbarkeit1" ändern..... (schreib das auch nie um)

------------------
<----- Bitte Systeminfo eintragen, warum siehst du hier.
Wünsche:
Tabllen (XLS,ODS) FDO nativ einbinden,  FDO-WMTS, richtige Ebenen für Layer, Erweiterter Attribut-Editor "auffrischen", dyn. Xrefs, mehrere modell Bereiche, Halo4Texte, verschränkte Attribute, Linientypen überarbeiten (doppellinien) , XREF>VISRETAIN pro XREF
Fehler:
FDORasterdaten im Layout Richtigen Maßstab verwenden, funktionierende updates u. erweiterungen inkl. installationsroutinen, Fehler zwischen Normal MAP Civil beheben

Schöne Grüsse aus der Steiermark  Bernd P.

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