| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY wird von NVIDIA zum Händler des Jahres gewählt – zum dritten Mal in Folge, eine Pressemitteilung
|
Autor
|
Thema: Leere Gruppen erstellen (753 / mal gelesen)
|
MARTINLE Mitglied Tischler
Beiträge: 485 Registriert: 18.10.2007 AUTOCAD 2016, MS Windows7, 64-bit
|
erstellt am: 14. Apr. 2016 16:13 <-- editieren / zitieren --> Unities abgeben:
Hallo! Mit dieser Funktion http://forum.cad.de/foren/ubb/Forum145/HTML/003779.shtml#000002 von Bernd kann ich leere Gruppen löschen. Ich suche ein Lisp, das mir einige leere Gruppen erstellt. Wenn einige oder alle diese Gruppennamen schon bestehen soll nicht passieren. Soweit ich es verfolgen kann kann man Gruppen nur mit Objekten erstellen. Ich müsste aber zuerst leer Gruppen erstellen. Damit beim späteren hinzufügen diese Gruppen schon bestehen. Wenn eine Gruppe fehlt, ergibt das folgende Lisp eine Fehlermeldung. Bitte um Hilfe! lg. Martin Nachfolgend das Lisp zum zuordnen: (defun C:Gruppenzuordnung(/ A B C D E F) (setq A (ssget "_x" '((0 . "*")(8 . "*Sockel*")))) (sssetfirst nil nil) (command "_groupedit" "N" "Sockel" "H" A "") (setq B (ssget "_x" '((0 . "*")(8 . "*Täfelung*")))) (sssetfirst nil nil) (command "_groupedit" "N" "Täfelung" "H" B "") (setq C (ssget "_x" '((0 . "*")(8 . "*Abdeckplatte*")))) (sssetfirst nil nil) (command "_groupedit" "N" "Abdeckplatte" "H" C "") (setq D (ssget "_x" '((0 . "*")(8 . "*Gesims*")))) (sssetfirst nil nil) (command "_groupedit" "N" "Gesims" "H" D "") (setq E (ssget "_x" '((0 . "*")(8 . "*Wand*")))) (sssetfirst nil nil) (command "_groupedit" "N" "Wand" "H" E "") (setq F (ssget "_x" '((0 . "*")(8 . "*Install*")))) (sssetfirst nil nil) (command "_groupedit" "N" "Wand" "H" F "") (princ) )
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 14. Apr. 2016 18:06 <-- editieren / zitieren --> Unities abgeben: Nur für MARTINLE
du solltest zu dem IF nutzen (if (setq a (ssget....)) ; wenn Auswahlsatz gebildet / Objekte gefunden (command "_groupedit" "N" (GRP "Täfelung") "H" A "") ; dann mache das hier [ANGEPASST!!!] ) (defun GRP (GroupName) (vl-load-com) (and (or acadobj (setq acadobj (vlax-get-acad-object))) (or doc (setq doc (vla-get-activedocument acadobj))) (if (vl-catch-all-error-p (vl-catch-all-apply 'vla-item (list (vla-item (vla-get-dictionaries doc) "ACAD_GROUP") GroupName ) ) ) (vla-add (vla-item (vla-get-dictionaries doc) "ACAD_GROUP") GroupName) ) ) ) [Edit: Ein copy&Paste Fehler hatte sich eingeschlichen] Ich habe einfach Codefragmnete aus dem Link genommen, nicht professionell, sollte dir aber weiterhelfen. ------------------ CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MARTINLE Mitglied Tischler
Beiträge: 485 Registriert: 18.10.2007 AUTOCAD 2016, MS Windows7, 64-bit
|
erstellt am: 15. Apr. 2016 06:00 <-- editieren / zitieren --> Unities abgeben:
Guten Morgen Cadffm Danke für deine Hilfe! Hab versucht dies umzusetzen. Es bringt mir aber folgenden Fehler: Befehl: GRUPPENZUORDNUNG1 _groupedit Gruppe auswählen oder [Name]: N Gruppennamen eingeben oder [?]: ; Fehler: Fehlerhafter Argumentwert: AutoCAD-Befehl: T Es wird auch nur die erste Gruppe angelegt. Nachfolgende nochmal mein überarbeiteter Code: (defun GRP (GroupName) (vl-load-com) (and (or acadobj (setq acadobj (vlax-get-acad-object))) (or doc (setq doc (vla-get-activedocument acadobj))) (if (vl-catch-all-error-p (vl-catch-all-apply 'vla-item (list (vla-item (vla-get-dictionaries doc) "ACAD_GROUP") GroupName ) ) ) (vla-add (vla-item (vla-get-dictionaries doc) "ACAD_GROUP") GroupName ) ) ) ) (defun C:Gruppenzuordnung1 (/ a b c d e f) (if (setq a (ssget "_x" '((0 . "*") (8 . "*Sockel*")))) ; wenn Auswahlsatz gebildet / Objekte gefunden (command "_groupedit" "N" (GRP "Sockel") "H" a "") ; dann mache das hier [ANGEPASST!!!] ) (if (setq b (ssget "_x" '((0 . "*") (8 . "*Täfelung*")))) ; wenn Auswahlsatz gebildet / Objekte gefunden (command "_groupedit" "N" (GRP "Täfelung") "H" b "") ; dann mache das hier [ANGEPASST!!!] ) (if (setq c (ssget "_x" '((0 . "*") (8 . "*Abdeckplatte*")))) ; wenn Auswahlsatz gebildet / Objekte gefunden (command "_groupedit" "N" (GRP "Abdeckplatte") "H" c "") ; dann mache das hier [ANGEPASST!!!] ) (if (setq d (ssget "_x" '((0 . "*") (8 . "*Gesims*")))) ; wenn Auswahlsatz gebildet / Objekte gefunden (command "_groupedit" "N" (GRP "Gesims") "H" d "") ; dann mache das hier [ANGEPASST!!!] ) (if (setq e (ssget "_x" '((0 . "*") (8 . "*Wand*")))) ; wenn Auswahlsatz gebildet / Objekte gefunden (command "_groupedit" "N" (GRP "Wand") "H" e "") ; dann mache das hier [ANGEPASST!!!] ) (if (setq f (ssget "_x" '((0 . "*") (8 . "*Install*")))) ; wenn Auswahlsatz gebildet / Objekte gefunden (command "_groupedit" "N" (GRP "Wand") "H" f "") ; dann mache das hier [ANGEPASST!!!] ) ) LG Martin
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 15. Apr. 2016 06:34 <-- editieren / zitieren --> Unities abgeben: Nur für MARTINLE
|
MARTINLE Mitglied Tischler
Beiträge: 485 Registriert: 18.10.2007 AUTOCAD 2016, MS Windows7, 64-bit
|
erstellt am: 15. Apr. 2016 06:38 <-- editieren / zitieren --> Unities abgeben:
|
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 15. Apr. 2016 07:23 <-- editieren / zitieren --> Unities abgeben: Nur für MARTINLE
Wenn du (GRP "Martinle") eingibst, was gibt Acad dann Zurück? Und wenn die Gruppe Martinle schon existiert und du (GRP "Martinle") ingibst, was gibt Acad dann zurück? Du brauchst in beiden Fällen den Gruppenname als Textstring zurück, denn du benutzt es ja an einer Stelle (command "_groupedit" ...) bei der ein Gruppenname erwartet wird. Ergänze in GRP vor der letzten Klammer um: GroupName damit wird als letztes der Variablenwert ausgewertet und der ist ja dein Gruppenname. ------------------ CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MARTINLE Mitglied Tischler
Beiträge: 485 Registriert: 18.10.2007 AUTOCAD 2016, MS Windows7, 64-bit
|
erstellt am: 15. Apr. 2016 07:31 <-- editieren / zitieren --> Unities abgeben:
Hallo Cadffm, Daaaaanke! Das wars! Dass ich da nicht selbst draufgekommen bin! Das ist höhere Intelligenz für mich. Ich kann dir zwar viel über Holz erzählen aber über Lisp kann ich nur zuhören bzw. mitlesen. Da bin ich einfach nur ein Laie! Danke für deine tolle Hilfe! Schönen Tag noch! lg. Martin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |