| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| Von der Idee zum Prototyp: Effiziente Prozesse im Rapid Prototyping, ein Webinar am 25.10.2024
|
Autor
|
Thema: Mehrere Layer mit Button schalten (3709 mal gelesen)
|
Kodat Mitglied Architekt
Beiträge: 310 Registriert: 27.01.2004
|
erstellt am: 23. Feb. 2005 15:10 <-- editieren / zitieren --> Unities abgeben:
Hallo. Wir haben eine feste Layerstruktur. Jetzt möchte ich ein paar Button erzeugen wo man bestimmte Layer z.B. Layer mit dem Suffix A_DU*** anschalten kann. Zum Ausschalten möchte ich den gleichen Button verwenden. Gibt es dazu einen Grundbefehl in den man eine Datei einbinden kann wo mehrere Layer aufgeführt sind die geschaltet werden. Diese Datei möchte ich beliebig erweitern können. Mit dieser Funktion kann ich bestimmte Layerbereiche bequem dazu - oder abschalten. Wenn es da etwas gäbe... super Ich hoffe ich habe alles verständlich ausgedrückt. Gruß Carsten ------------------ Vielen Dank für jeden Hinweis. Carsten Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 Hinweis: Meine Mitarbeit auf CAD.DE ist fakultativ, unentgeltlich und beruht nur auf einem ausgeprägtem Helfersyndrom.
|
erstellt am: 23. Feb. 2005 15:15 <-- editieren / zitieren --> Unities abgeben: Nur für Kodat
|
Kodat Mitglied Architekt
Beiträge: 310 Registriert: 27.01.2004
|
erstellt am: 24. Feb. 2005 09:49 <-- editieren / zitieren --> Unities abgeben:
Hallo CADmium. Habe es gelesen. Funzt auch. Ich hab den Button belegt zum Ausschalten der Layer. Ich möchte aber die Layer ( Alle mit z.B. A_GRS*) mit einem Knopf einschalten und dann ausschalten. So kann ich mir mehrere Button mit den Gruppen belegen. Wie geht das denn ? Kannst Du deas Lisp abändern so das ich mir die Gruppen selber anpaassen kann? Wäre toll. ------------------ Vielen Dank für jeden Hinweis. Carsten Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Ehrenmitglied V.I.P. h.c. CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools
|
erstellt am: 24. Feb. 2005 09:57 <-- editieren / zitieren --> Unities abgeben: Nur für Kodat
Hallo Carsten, du brauchst dafür eigentlich gar kein Lisp. Du kannst doch einfach ^C^C-layer;se;"0";a;A_GRS*;; auf einen Button legen. Das kann man auch noch auf einschalten usw ändern. Bei Fragen ... Grüße Holger CAD on demand GmbH AUGCE - Manager Deutschland Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Kodat Mitglied Architekt
Beiträge: 310 Registriert: 27.01.2004
|
erstellt am: 24. Feb. 2005 10:45 <-- editieren / zitieren --> Unities abgeben:
HAllo Holger. Das habe ich ja auch hinbekommen. Wie aber geht es mit nur einem Button der wechselweise die Gruppe an oder ausschaltet. Dann kann ich mehrere Gruppen jewils nur mit einem Knopf steuern. Wäre für unsere Layerstruktur optimal Carsten ------------------ Vielen Dank für jeden Hinweis. Carsten Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 Hinweis: Meine Mitarbeit auf CAD.DE ist fakultativ, unentgeltlich und beruht nur auf einem ausgeprägtem Helfersyndrom.
|
erstellt am: 24. Feb. 2005 11:46 <-- editieren / zitieren --> Unities abgeben: Nur für Kodat
Probier das: (defun DT:LAYER-ON-OFF (LAYERS / NAME STATUS) (vl-load-com) (if (and(=(type LAYERS) 'LIST) (setq LAYERS (vl-remove-if-not '(lambda(x) x) (mapcar '(lambda(X)(if(=(type X)'STR)(strcase X) nil)) LAYERS) ) ) ) (vlax-for LAYER (vla-get-layers(vla-get-activedocument(vlax-get-acad-object))) (setq NAME(strcase (vla-get-name LAYER))) (if (member 'T (mapcar'(lambda(x) (wcmatch NAME X)) LAYERS ) ) (progn (or STATUS (setq STATUS(vla-get-layeron LAYER))) (if (= STATUS :vlax-true) (vla-put-layeron LAYER :vlax-false) (vla-put-layeron LAYER :vlax-true) ) ) ) ) ) ) Möglichkeiten für Knöppchen wären z.B. ^C^C(DT:LAYER-ON-OFF '("AM_0" "AM_7")) ^C^C(DT:LAYER-ON-OFF '("AM*")) ^C^C(DT:LAYER-ON-OFF '("0")) ^C^C(DT:LAYER-ON-OFF '("A_DU***"))
------------------ - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Kodat Mitglied Architekt
Beiträge: 310 Registriert: 27.01.2004
|
erstellt am: 24. Feb. 2005 12:30 <-- editieren / zitieren --> Unities abgeben:
@CADmium Wahnsinn dass klappt. Es taucht nur noch das Layerfenster auf , das bestätige ich mit ok und dann sind die Layer aus oder an. Meldung im Acad Fenster : Befehl: (DT:LAYER-ON-OFF '("A_GRS_***")) nil Kann du das noch abstellen. Den Aufruf hab ich so eingetragen wie du angegeben hast. Ich bin begeistert. Carsten
------------------ Vielen Dank für jeden Hinweis. Carsten Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 Hinweis: Meine Mitarbeit auf CAD.DE ist fakultativ, unentgeltlich und beruht nur auf einem ausgeprägtem Helfersyndrom.
|
erstellt am: 24. Feb. 2005 12:50 <-- editieren / zitieren --> Unities abgeben: Nur für Kodat
hmm .. mit Layerfenster kann ich nichts feststelen.. kommt bei mir nicht, zur Not dann mit Initdia-Aufruf , ob's was bringt: keine Ahnung: (defun DT:LAYER-ON-OFF (LAYERS / NAME STATUS) (vl-load-com) (if (and(=(type LAYERS) 'LIST) (setq LAYERS (vl-remove-if-not '(lambda(x) x) (mapcar '(lambda(X)(if(=(type X)'STR)(strcase X) nil)) LAYERS) ) ) ) (vlax-for LAYER (vla-get-layers(vla-get-activedocument(vlax-get-acad-object))) (setq NAME(strcase (vla-get-name LAYER))) (if (member 'T (mapcar'(lambda(x) (wcmatch NAME X)) LAYERS ) ) (progn (or STATUS (setq STATUS(vla-get-layeron LAYER))) (initdia 0) (if (= STATUS :vlax-true) (vla-put-layeron LAYER :vlax-false) (vla-put-layeron LAYER :vlax-true) ) ) ) ) ) ) ------------------ - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Kodat Mitglied Architekt
Beiträge: 310 Registriert: 27.01.2004
|
erstellt am: 24. Feb. 2005 13:53 <-- editieren / zitieren --> Unities abgeben:
Nee, das geht immer noch auf. Hab 2000i . Vielleicht liegts daran. Kann ich nicht im Werkzeugkasten etwas ergänzen. Einfach ein -Befehl für das ok Drücken auf dem Layer Fenster. ------------------ Vielen Dank für jeden Hinweis. Carsten Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Kodat Mitglied Architekt
Beiträge: 310 Registriert: 27.01.2004 Intel CoreI 5/750 8GB Ram , W7Prof. 64bit Nvidia Quadro 2000 AC 2012 / RAC 2012.sp2
|
erstellt am: 24. Feb. 2005 15:05 <-- editieren / zitieren --> Unities abgeben:
Hallo CADmium. Ich nochmal. Also nach einer Weile tritt folgendes auf. Das Layerfenster taucht nun nicht mehr auf. Dafür kann ich im Acad-Befehlfenster sehen das von meiner Applikation befehle wiederholt werden. Wie hängt das denn jetzt zusammen. Hier der Fensterablauf in AC: -------------------------------------------- Befehl: Befehl: Befehl: (DT:LAYER-ON-OFF '("A_GRS_***")) nil Befehl: IEZ_PLOPMA speedikon A: Wand identifizieren check: k:\5167_aik_st_augustin\5167_aik_st_augustin.spd\std\mcr\deu\bin\opn 0 check: M:\speedikon\Standard\std\main\mcr\deu\bin\opn 0 check: M:\speedikon\Standard\mcr\deu\bin\opn 1 check: M:\speedikon\Standard\mcr\deu\bin\opn 1 check: C:\Programme\IEZ\speedikon A\System\std\mcr\deu\bin\opn 1 check: C:\Programme\IEZ\speedikon A\System\std\mcr\deu\bin\opn 1 *Abbruch* Befehl: Befehl: Befehl: (DT:LAYER-ON-OFF '("A_GRS_***")) nil Befehl: *Abbruch* ---------------------------------------- Wir haben ArchitekturAufsatz " Speedikon A " Gruß Carsten ------------------ Vielen Dank für jeden Hinweis. Carsten Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Kodat Mitglied Architekt
Beiträge: 310 Registriert: 27.01.2004
|
erstellt am: 25. Feb. 2005 09:38 <-- editieren / zitieren --> Unities abgeben:
Hallo cadmium. Jetzt habe ich es eine Weile getestet mit mehreren Neustarten. ANscheinend gibt es jetzt keine Probs mehr. Alles geht. Die Units gehen an Dich, super super.. Wenn ich das auch mal könnte mit den Lisp Befehlen etc.. Gruß Carsten ------------------ Vielen Dank für jeden Hinweis. Carsten Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 Hinweis: Meine Mitarbeit auf CAD.DE ist fakultativ, unentgeltlich und beruht nur auf einem ausgeprägtem Helfersyndrom.
|
erstellt am: 25. Feb. 2005 09:51 <-- editieren / zitieren --> Unities abgeben: Nur für Kodat
Zitat: Original erstellt von Kodat: Wenn ich das auch mal könnte mit den Lisp Befehlen etc..
Was hindert dich daran, es zu lernen ? Du siehst ja, das kann manchmal recht hilfreich sein...und langfristig haste dadurch den damit verbundenen Aufwand wieder drin ------------------ - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cad4fun Ehrenmitglied
Beiträge: 1846 Registriert: 06.12.2004 privat ACAD 2013 und 2017 deutsch, Windows 7 64Bit HP Elite 7500 Series MT,Intel Cote i5-3470 CPU 3,20Ghz,16GB RAM ATI FirePro V (FireGL V) Graphics Adapter Treiberversion: 15.201.1151.1008
|
erstellt am: 22. Apr. 2005 13:01 <-- editieren / zitieren --> Unities abgeben: Nur für Kodat
hallo Cadmium ich bekomme die Meldung (DT:LAYER-ON-OFF '("*HAT***" "SOL*")) ; error: no function definition: DT:LAYER-ON-OFF und natürlich nicht das gewünschte ergebnis. Was mache ich falsch? Wäre Spitzentool, wenn's funkt. lG Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 Hinweis: Meine Mitarbeit auf CAD.DE ist fakultativ, unentgeltlich und beruht nur auf einem ausgeprägtem Helfersyndrom.
|
erstellt am: 22. Apr. 2005 13:07 <-- editieren / zitieren --> Unities abgeben: Nur für Kodat
|
cad4fun Ehrenmitglied
Beiträge: 1846 Registriert: 06.12.2004 privat ACAD 2013 und 2017 deutsch, Windows 7 64Bit HP Elite 7500 Series MT,Intel Cote i5-3470 CPU 3,20Ghz,16GB RAM ATI FirePro V (FireGL V) Graphics Adapter Treiberversion: 15.201.1151.1008
|
erstellt am: 22. Apr. 2005 13:17 <-- editieren / zitieren --> Unities abgeben: Nur für Kodat
ich habe es sicher geladen, da ich auch zuerst dachte, es wird nicht mitgeladen beim Start. Daher habe ich es dann nochmals nachgeladen und habe es auch jetzt nochmals so gemacht-> Ergebnis _appload LAY**** successfully___usw.). Ergebnis wie vor. Frage: warum verwendest Du defun DT: und nicht C: Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 Hinweis: Meine Mitarbeit auf CAD.DE ist fakultativ, unentgeltlich und beruht nur auf einem ausgeprägtem Helfersyndrom.
|
erstellt am: 22. Apr. 2005 13:32 <-- editieren / zitieren --> Unities abgeben: Nur für Kodat
DT: is ne Kennung .. kann auch ÄtschBätsch+#:Tool davorschreiben , hat nix mit C: zu tun! nur wenn (defun C:TOOLNAME( /..)..) ist es als ACAD-Kommando verfügbar! Da kann ich aber keine Paramter, wie in diesem Fall notwendigerweise die LAYER-LISTE, übergeben. du mußt das Teil nach dem LADEN in der Befehlszeile oder auf 'n Button schon mit (DT:LAYER-ON-OFF '("A*" "B*")) aufrufen !! ------------------ - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AutoCADify Mitglied Information Technology
Beiträge: 13 Registriert: 24.03.2017 Windows 8 GTX GPU AutoCAD 16/17 C3D 16/17
|
erstellt am: 03. Jul. 2017 16:00 <-- editieren / zitieren --> Unities abgeben: Nur für Kodat
ACHTUNG! Sie antworten auf einen Beitrag der älter als 1 Jahr ist!
Zitat: Original erstellt von CADmium: Probier das: (defun DT:LAYER-ON-OFF (LAYERS / NAME STATUS) (vl-load-com) (if (and(=(type LAYERS) 'LIST) (setq LAYERS (vl-remove-if-not '(lambda(x) x) (mapcar '(lambda(X)(if(=(type X)'STR)(strcase X) nil)) LAYERS) ) ) ) (vlax-for LAYER (vla-get-layers(vla-get-activedocument(vlax-get-acad-object))) (setq NAME(strcase (vla-get-name LAYER))) (if (member 'T (mapcar'(lambda(x) (wcmatch NAME X)) LAYERS ) ) (progn (or STATUS (setq STATUS(vla-get-layeron LAYER))) (if (= STATUS :vlax-true) (vla-put-layeron LAYER :vlax-false) (vla-put-layeron LAYER :vlax-true) ) ) ) ) ) )Möglichkeiten für Knöppchen wären z.B. ^C^C(DT:LAYER-ON-OFF '("AM_0" "AM_7")) ^C^C(DT:LAYER-ON-OFF '("AM*")) ^C^C(DT:LAYER-ON-OFF '("0")) ^C^C(DT:LAYER-ON-OFF '("A_DU***"))
Bezug auf diese Lisp: Hallo Cadmium, nicht erschrecken, ich habe so ziemlich das selbe anliegen im Moment. Ist zwar ein paar Jährchen her, aber vielleicht kannst du mir ja weiterhelfen? Wäre dir sehr dankbar! LG AutoCADify ------------------ Nichts ist unmöglich - AutoCAD Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 Hinweis: Meine Mitarbeit auf CAD.DE ist fakultativ, unentgeltlich und beruht nur auf einem ausgeprägtem Helfersyndrom.
|
erstellt am: 03. Jul. 2017 21:54 <-- editieren / zitieren --> Unities abgeben: Nur für Kodat
|
AutoCADify Mitglied Information Technology
Beiträge: 13 Registriert: 24.03.2017 Windows 8 GTX GPU AutoCAD 16/17 C3D 16/17
|
erstellt am: 04. Jul. 2017 08:55 <-- editieren / zitieren --> Unities abgeben: Nur für Kodat
Ich habe deine Lisp ausprobiert und jetzt weist mir C3D auf, dass ich zu wenige Argumente habe. Woran kann das liegen? BTW. ist es auch möglich per E-Mail zu kommunizieren? Gruß
------------------ Nichts ist unmöglich - AutoCAD Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 Hinweis: Meine Mitarbeit auf CAD.DE ist fakultativ, unentgeltlich und beruht nur auf einem ausgeprägtem Helfersyndrom.
|
erstellt am: 04. Jul. 2017 09:19 <-- editieren / zitieren --> Unities abgeben: Nur für Kodat
|
AutoCADify Mitglied Information Technology
Beiträge: 13 Registriert: 24.03.2017 Windows 8 GTX GPU AutoCAD 16/17 C3D 16/17
|
erstellt am: 04. Jul. 2017 12:39 <-- editieren / zitieren --> Unities abgeben: Nur für Kodat
Ich habe jetzt mal die Zeile umgeschrieben und bekomme diese Fehlermeldung: ; Fehler: no function definition: DT:LAYER-ON-OFF Hier nochmal das ganze Skript: (defun C:LEWLYR()(DT:LAYER-ON-OFF '("AM_0" "AM_7"))) (vl-load-com) (if (and(=(type LAYERS) 'LIST) (setq LAYERS (vl-remove-if-not '(lambda(x) x) (mapcar '(lambda(X)(if(=(type X)'STR)(strcase X) nil)) LAYERS) ) ) ) (vlax-for LAYER (vla-get-layers(vla-get-activedocument(vlax-get-acad-object))) (setq NAME(strcase (vla-get-name LAYER))) (if (member 'T (mapcar'(lambda(x) (wcmatch NAME X)) LAYERS ) ) (progn (or STATUS (setq STATUS(vla-get-layeron LAYER))) (initdia 0) (if (= STATUS :vlax-true) (vla-put-layeron LAYER :vlax-false) (vla-put-layeron LAYER :vlax-true) ) ) ) ) ) ) ------------------ Nichts ist unmöglich - AutoCAD Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 04. Jul. 2017 14:20 <-- editieren / zitieren --> Unities abgeben: Nur für Kodat
Die Frage ist: Warum schreibst du die (funktionierenden) Zeilen um (die dann ggf nicht mehr funktionieren können)? ; Fehler: no function definition: DT:LAYER-ON-OFF Bedeutet: Es ist keine Funktion "DT:LAYER-ON-OFF" definiert (also nicht geladen) ------------------ CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADblue Mitglied
Beiträge: 117 Registriert: 20.07.2011 acad2016 + civil 3d
|
erstellt am: 05. Jul. 2017 14:21 <-- editieren / zitieren --> Unities abgeben: Nur für Kodat
ich denke CADify wollte auf sowas hier raus Code:
(defun C:LEWLYR() (defun DT:LAYER-ON-OFF (LAYERS / NAME STATUS) (vl-load-com) (if (and(=(type LAYERS) 'LIST) (setq LAYERS (vl-remove-if-not '(lambda(x) x) (mapcar '(lambda(X)(if(=(type X)'STR)(strcase X) nil)) LAYERS) ) ) ) (vlax-for LAYER (vla-get-layers(vla-get-activedocument(vlax-get-acad-object))) (setq NAME(strcase (vla-get-name LAYER))) (if (member 'T (mapcar'(lambda(x) (wcmatch NAME X)) LAYERS ) ) (progn (or STATUS (setq STATUS(vla-get-layeron LAYER))) (if (= STATUS :vlax-true) (vla-put-layeron LAYER :vlax-false) (vla-put-layeron LAYER :vlax-true) ) ) ) ) ) ) (DT:LAYER-ON-OFF '("AM_0" "AM_7")) )
mfg blue Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |