Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Gruppen ohne Verschachtelung

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:  Gruppen ohne Verschachtelung (979 / mal gelesen)
MARTINLE
Mitglied
Tischler


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

Beiträge: 485
Registriert: 18.10.2007

AUTOCAD 2016,
MS Windows7, 64-bit

erstellt am: 04. Mai. 2016 06:18    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 und Guten Morgen,

Gruppen sind eine wunderbare Sache wenn man einige Dinge versucht zu vermeiden. Eins ist das verschachteln von Gruppen.
Es ist schnell passiert und schon sind die Gruppen verschachtelt und nur mehr schwer zu kontrollieren.
Damit das nicht passiert hab ich mit eurer Hilfe dieses "Lisp" zusammengestellt.
Es funktioniert sehr gut bis auf eine Kleinigkeit.
Wenn ein oder mehrere Layer in der Zeichnung noch nicht vorhanden sind, dann kommt diese Meldung in der Befehlszeile:
---Unbekannter Befehl "GRUHIZU"---
Wenn aber mindestens je ein Layer pro vordefinierter Gruppe in der Zeichnung vorhanden ist dann läuft es ohne "Mucken" schön durch.
Was muß ich ändern damit es die Meldung in der Befehlszeile nicht mehr bring?
Bitte um Hilfe.

Hier das Lisp noch kurz erklärt:

--Es bestehen in der neuen Zeichnung bereits 5 leere Gruppen.
--Nun wird die Zeichnung nach Layern mit Namen "*Sockel*" usw. durchsucht und wenn vorhanden geprüft ob dieser Layer bereits in einer
  Gruppe vorhanden ist. Wenn ja wird er von der Zuordnung ausgeschlossen.
  So wird die Zeichnung nach den gewünschten Layern durchsucht und abgearbeitet.
--Am Ende schaut es so aus, dass alle gewünschten Layer in den vorgesehenen Gruppen vorhanden sind und keiner mit einer andern Gruppe verschachtelt ist.
  Damit kann man die Gruppen viel leichter "unter Kontrolle" halten.
Danke!

lg. Martin

(defun C:gruhizu (/ ITEM OBJ MEMBERS AWS)
;prüft ob objecte bereits in Gruppen vorhanden sind, wenn ja schließt sie aus
  (vl-load-com)
  (vlax-for ITEM (vla-get-groups
  (vla-get-activedocument (vlax-get-acad-object))
)
    (if (> (vla-get-count ITEM) 0)
      (vlax-for OBJ ITEM
(if (not (member OBJ MEMBERS))
  (setq MEMBERS (cons OBJ MEMBERS))
)
      )
    )
  )
  (setq MEMBERS (mapcar 'vlax-vla-object->ename MEMBERS))
; Layer zu Gruppe
  (command "_groupedit"
  "N"
  "Sockel"
  "h"
  (if (setq AWS (ssget "_x" '((0 . "*") (8 . "*Sockel*"))))
    (progn
      (mapcar '(lambda (X)
  (if (ssmemb X AWS)
    (ssdel X AWS)
  )
)
      MEMBERS
      )
      AWS
    )
  )

  ""
  )
  (princ)
; Layer zu Gruppe
  (command "_groupedit"
  "N"
  "Täfelung"
  "h"
  (if (setq AWS (ssget "_x" '((0 . "*") (8 . "*Täfelung*"))))
    (progn
      (mapcar '(lambda (X)
  (if (ssmemb X AWS)
    (ssdel X AWS)
  )
)
      MEMBERS
      )
      AWS
    )
  )

  ""
  )
  (princ)
;Layer zu Gruppe
  (command
    "_groupedit"
    "N"
    "Abdeckplatte"
    "h"
    (if (setq AWS (ssget "_x" '((0 . "*") (8 . "*Abdeckplatte*"))))
      (progn
(mapcar '(lambda (X)
  (if (ssmemb X AWS)
    (ssdel X AWS)
  )
)
MEMBERS
)
AWS
      )
    )

    ""
  )
  (princ)
;Layer zu Gruppe
  (command "_groupedit"
  "N"
  "Gesims"
  "h"
  (if (setq AWS (ssget "_x" '((0 . "*") (8 . "*Gesims*"))))
    (progn
      (mapcar '(lambda (X)
  (if (ssmemb X AWS)
    (ssdel X AWS)
  )
)
      MEMBERS
      )
      AWS
    )
  )

  ""
  )
  (princ)
;Layer zu Gruppe
  (command "_groupedit"
  "N"
  "Wand"
  "h"
  (if (setq AWS (ssget "_x" '((0 . "*") (8 . "*Wand*"))))
    (progn
      (mapcar '(lambda (X)
  (if (ssmemb X AWS)
    (ssdel X AWS)
  )
)
      MEMBERS
      )
      AWS
    )
  )

  ""
  )
  (princ)
;Layer zu Gruppe
  (command "_groupedit"
  "N"
  "Wand"
  "h"
  (if (setq AWS (ssget "_x" '((0 . "*") (8 . "*Install*"))))
    (progn
      (mapcar '(lambda (X)
  (if (ssmemb X AWS)
    (ssdel X AWS)
  )
)
      MEMBERS
      )
      AWS
    )
  )
  ""
  )
  (princ)
)

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

joern bosse
Ehrenmitglied
Dipl.-Ing. Vermessung


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

Beiträge: 1734
Registriert: 11.10.2004

Window 10
ACAD 2021
CIVIL 2021
BricsCAD V14-V22
Intel(R) Core(TM)i5-8250U CPU @ 1.60GHz 1.80 GHz
16.0GB RAM
NVIDIA GeForce GTX 1050<P>

erstellt am: 04. Mai. 2016 07: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 MARTINLE 10 Unities + Antwort hilfreich

Hallo Martin,
ich habe es nur überflogen.
Ist es nicht besser, erst den AWS zu bilden, und nur wenn dieser auch vorhanden ist wird der Command-Befehl "_.groupedit" aufgerufen?

(if (setq AWS (ssget "_x" '((0 . "*") (8 . "*Install*"))))
    (command "_groupedit"....


Weil, wenn Du folgende Zeile ausprobierst, und bei (ssget) keine Objekte auswählst, dann wird der Command-Befehl nicht ordentlich abgeschlossen:
(command "_groupedit" "N" "Wand" "h" (ssget) "")

------------------
viele Grüße

Jörn
http://www.bosse-engineering.com

Liniensignaturen Youtube

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

MARTINLE
Mitglied
Tischler


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

Beiträge: 485
Registriert: 18.10.2007

AUTOCAD 2016,
MS Windows7, 64-bit

erstellt am: 04. Mai. 2016 07:30    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 Jörn,
ja du hast recht.
Nur wie geht das? Kannst du mir da helfen?

lg.Martin

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

joern bosse
Ehrenmitglied
Dipl.-Ing. Vermessung


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

Beiträge: 1734
Registriert: 11.10.2004

Window 10
ACAD 2021
CIVIL 2021
BricsCAD V14-V22
Intel(R) Core(TM)i5-8250U CPU @ 1.60GHz 1.80 GHz
16.0GB RAM
NVIDIA GeForce GTX 1050<P>

erstellt am: 04. Mai. 2016 07:57    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 MARTINLE 10 Unities + Antwort hilfreich

Hallo Martin,
ich würde eine einzelne Funktion erzeugen, die für den AWS zuständig ist, und dann einfach mit if Abfragen


Folgende Code kannst Du immer mit dem jeweiligen Layerfilter verwenden

Code:

;Layer zu Gruppe

  (if (setq aws(gruhizu:aws "*Wand*" MEMBERS))
    (command "_groupedit"
      "N"
      "Wand"
      "h"
      aws
      ""
      ))
  (princ)



Mit dieser Funtion wird der AWS gebildet, wenn kein AWS, dann nil als Rückgabe

Code:

;;;Auswahlsatz erzeugen
(defun gruhizu:aws (layerFilter MEMBERS / aws)
  (if (setq AWS (ssget "_x"
                      (list '(0 . "*")
                            (cons 8 . layerFilter))))
    (progn
      (mapcar '(lambda (X)
                (if (ssmemb X AWS)
                  (ssdel X AWS)
                  )
                )
        MEMBERS
        )
      AWS
    )
  )
  )


Vielleicht hilft es ja, viel Spaß beim ausprobieren.

------------------
viele Grüße

Jörn
http://www.bosse-engineering.com

Liniensignaturen Youtube

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

MARTINLE
Mitglied
Tischler


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

Beiträge: 485
Registriert: 18.10.2007

AUTOCAD 2016,
MS Windows7, 64-bit

erstellt am: 04. Mai. 2016 08:27    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 Jörn,
Danke für die Hilfe!

Bekomme folgende Fehlermeldung beim Laden:

Fehlerhafte Syntax für Funktionsaufruf: (CONS 8 . LAYERFILTER)

Hab versucht das Lisp für einen Layer so zu erstellen:

(defun C bjtogroup (/ ITEM OBJ MEMBERS AWS)
;prüft ob objecte bereits in Gruppen vorhanden sind, wenn ja schließt sie aus
  (vl-load-com)
  (vlax-for ITEM (vla-get-groups
  (vla-get-activedocument (vlax-get-acad-object))
)
    (if (> (vla-get-count ITEM) 0)
      (vlax-for OBJ ITEM
(if (not (member OBJ MEMBERS))
  (setq MEMBERS (cons OBJ MEMBERS))
)
      )
    )
  )
  (setq MEMBERS (mapcar 'vlax-vla-object->ename MEMBERS))
  ;;;Auswahlsatz erzeugen
  ;Mit dieser Funtion wird der AWS gebildet, wenn kein AWS, dann nil als Rückgabe
(defun gruhizu:aws (LayerFilter MEMBERS / aws)
  (if (setq AWS (ssget "_x"
                      (list '(0 . "*")
                            (cons 8 . LayerFilter))))
    (progn
      (mapcar '(lambda (X)
                (if (ssmemb X AWS)
                  (ssdel X AWS)
                  )
                )
        MEMBERS
        )
      AWS
    )
  )
  )
;Layer zu Gruppe
  (if (setq aws(gruhizu:aws "*Wand*" MEMBERS))
    (command "_groupedit"
      "N"
      "Wand"
      "h"
      aws
      ""
      ))
  (princ)
)

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

joern bosse
Ehrenmitglied
Dipl.-Ing. Vermessung


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

Beiträge: 1734
Registriert: 11.10.2004

Window 10
ACAD 2021
CIVIL 2021
BricsCAD V14-V22
Intel(R) Core(TM)i5-8250U CPU @ 1.60GHz 1.80 GHz
16.0GB RAM
NVIDIA GeForce GTX 1050<P>

erstellt am: 04. Mai. 2016 08:30    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 MARTINLE 10 Unities + Antwort hilfreich

Hallo Martin,
hatte es nicht ausprobiert: der Punkt muss weg.
(cons 8 . LayerFilter) =>  (cons 8 LayerFilter)

------------------
viele Grüße

Jörn
http://www.bosse-engineering.com

Liniensignaturen Youtube

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

MARTINLE
Mitglied
Tischler


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

Beiträge: 485
Registriert: 18.10.2007

AUTOCAD 2016,
MS Windows7, 64-bit

erstellt am: 04. Mai. 2016 08: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

Hallo Jörn,

läuft wie geschmiert!!!
Einfach toll!
Danke für deine Zeit und Hilfe
Liebe Grüße
Martin      

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