| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Layerstatus (792 mal gelesen)
|
Bernhard GSD Mitglied
Beiträge: 505 Registriert: 29.08.2002 AutoCAD 2020(Deu); Windows 10 PRO x64(Deu)
|
erstellt am: 03. Nov. 2021 09:26 <-- editieren / zitieren --> Unities abgeben:
Guten Tag! Ich möchte in Lisp eine bestimmte Eigenschaft von Layern (z.B. "Sperre") in einem Layerstatus speichern, um später wieder genau den vorherigen Stand dieser einen Eigenschaft wieder herstellen zu können, unabhängig davon, was inzwischen sonst an Layer umgestellt wurde. Jetzt ist das Problem, dass der zu bearbeitenden Layerstatus im Layer-Befehl nur mit einem Umschalter zwischen [Ja] und [Nein] möglich ist, ohne dass der Lisp-Befehl den aktuellen Status kennt. (es könnte ja sein, dass ich wo anders eine andere Eigenschaft benötige) Daher suche ich nach einem Weg, meinen gewünschten Status vorab zu definieren und dann im Layer-Befehl nur anzuwenden. Danke und schönen Tag noch! ------------------ Gruß aus Wien Bernhard Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Maier2018 Mitglied Schlaumaier
Beiträge: 25 Registriert: 15.01.2018 Autocad 2021
|
erstellt am: 03. Nov. 2021 10:00 <-- editieren / zitieren --> Unities abgeben: Nur für Bernhard GSD
|
cadffm Moderator 良い精神
Beiträge: 22171 Registriert: 03.06.2002 Alles
|
erstellt am: 03. Nov. 2021 10:01 <-- editieren / zitieren --> Unities abgeben: Nur für Bernhard GSD
Biite noch mal Ich sehe zwar grob wo die Reise hingeht und Layerstus ist eine der am besten Unterstützten features, aber dennoch frage ich vorher noch ienmal nach: >>"nur mit einem Umschalter zwischen [Ja] und [Nein] möglich ist" Ich habe wirklich null Ahnung was dieser Satz (der komplette natü+rlich ) sagen soll, kannst du das bitte noch einmal ausführlicher für Noobs erklären? >>", ohne dass der Lisp-Befehl den aktuellen Status kennt." ? Lost
>>" (es könnte ja sein, dass ich wo anders eine andere Eigenschaft benötige)" Das bezieht sich vermutlich nun darauf das du nicht alle Eigenschaften aller Layer wiederherstellen möchtest!? >>"Daher suche ich nach einem Weg, meinen gewünschten Status vorab zu definieren und dann im Layer-Befehl nur anzuwenden." Du möchtest also einen Layerstatus ganz normal "per Hand" in der AutoCAD-Benutzeroberflächer wiederherstellen, nun suchst du aber eine Möglichkeit *irgendwas* an dem Layerstatus zu manipulieren - per Lisp. Damit ich mir dein Ziel nicht zusammenreimen muss, vielleicht erklärst du es noch einmal etwas strukturierter oder technischer, oder vielleicht auch weniger technisch - keine Ahung (was man zwar ohnehin beim lsen macht, aber wir wollen ja nicht unnötig aneinander vorbei reden) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bernhard GSD Mitglied
Beiträge: 505 Registriert: 29.08.2002 AutoCAD 2020(Deu); Windows 10 PRO x64(Deu)
|
erstellt am: 03. Nov. 2021 10:32 <-- editieren / zitieren --> Unities abgeben:
Code: -LAYER Aktueller Layer: "M_M-9" Option eingeben [?/Machen/SEtzen/Neu/Umbenennen/EIN/AUs/FArbe/Ltyp/LStärke/TRansparenz/MATerial/Plot/Frieren/Tauen/SPerren/ENtsperren/STatus/Beschreibung/ABstimmen/Xref]: _StateOption eingeben [?/Speichern/Wiederherstellen/Bearbeiten/Name/Löschen/Importieren/Exportieren]: _Save Neuen Namen für Layerstatus eingeben: Name Status Ein Nein Gefroren Nein SPerre Ja Plot Nein neue AFs frieren Nein Farbe Nein linienTyp Nein Linienstärke Nein Transparenz Nein plotSTil Nein Zu ändernden Status eingeben [Ein/Gefroren/SPerre/Plot/neue AFs frieren/Farbe/linienTYp/Linienstärke/TRansparenz/plotSTil]:
Oder als Lisp: Code: (Command "_layer" "_state" "_save" "Name" "" "")
Ich möchte den Status wie oben voreinstellen. Durch "Zu ändernden Status eingeben" wird nur zwischen [Ja] und [Nein] hin- und hergeschalten, aber es ist so kein definierter Status herstellbar. Ich möchte nur den Status von "SPerre" sicheren (oder in anderen Fällen "Gefroren"). Den aktuellen Status kennt das Lisp-Programm ja nicht (?) Ziel ist es, den vorherigen Zustand gesperrter und nicht gesperrter Layer wiederherstellbar zu machen. Hier werden alle Layer, außer dem aktuellen gesperrt:
Code: (DEFUN c:ISO2() (SETQ #aktlay (GETVAR "CLAYER")) (COMMAND "_LAYER" "_Lock" "*" "_Unlock" #aktlay "") (PRINC) )
Hier sollte der vorherige Zustand wiederhergestellt werden, auch wenn vorher bereits Layer gesperrt waren und das auch bleiben sollen. Hier werden aber noch alle Layer entsperrt.
Code: (DEFUN c:uniso2() (COMMAND "_LAYER" "_Unlock" "*" "") (PRINC) )
Ich hoffe, so ist es jetzt verständlicher.
------------------ Gruß aus Wien Bernhard Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bernhard GSD Mitglied
Beiträge: 505 Registriert: 29.08.2002 AutoCAD 2020(Deu); Windows 10 PRO x64(Deu)
|
erstellt am: 03. Nov. 2021 10:38 <-- editieren / zitieren --> Unities abgeben:
Danke für deine Bemühungen. Leider geht das aber am Ziel vorbei, da es für beliebige Layer funktionieren soll. Natürlich könnte man alle benötigten Eigenschaften mit (entget (tblobjname "Layer" ".....")) auslesen und als dotted-pair in einer Liste speichern und wieder herstellen. Das könnte auch eine eigene Funktion erledigen. Aber ich hoffe, dass es für LAYERSTATUS eine einfachere Lösung gibt. ------------------ Gruß aus Wien Bernhard Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bernhard GSD Mitglied
Beiträge: 505 Registriert: 29.08.2002 AutoCAD 2020(Deu); Windows 10 PRO x64(Deu)
|
erstellt am: 03. Nov. 2021 10:59 <-- editieren / zitieren --> Unities abgeben:
Ich denke, ich habe den Lösungsansatz: (layerstate-save "Name" 4 nil) - dann die gewünschten Layer SPerren (layerstate-restore "Name" nil) Allerdings bleibt nach layerstate-restore das Fading hängen. Eventuell hilft es, vorher "LAYLOCKFADECTL" auf 0 zu setzen und dann wieder auf den vorherigen Wert. ------------------ Gruß aus Wien Bernhard
[Diese Nachricht wurde von Bernhard GSD am 03. Nov. 2021 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bernhard GSD Mitglied
Beiträge: 505 Registriert: 29.08.2002 AutoCAD 2020(Deu); Windows 10 PRO x64(Deu)
|
erstellt am: 03. Nov. 2021 11:15 <-- editieren / zitieren --> Unities abgeben:
So schaut der fertige Code aus: Es sollen nur Objekte auf dem aktuellen Layer verändert werden können. So bleibt es übersichtlich und trotzdem steuerbar. Beim zweiten "_unlock" werden Layer hinzugefügt, die nie gesperrt werden sollen. Code: (DEFUN c:iso2 () (SETQ #aktlay (GETVAR "CLAYER")) (LAYERSTATE-SAVE "laystateiso2" 4 nil) (COMMAND "_LAYER" "_Lock" "*" "_Unlock" #aktlay "_Unlock" "H_P29" "") (PRINC) )
Und zurück zum Ursprung. LAYLOCKFADECTL wird zwischenzeitlich auf 0 gesetzt, um ein hängenbleiben des Fadings zu verhindern.
Code: (DEFUN c:uniso2 (/ #laylockfadectl) (SETQ #laylockfadectl (GETVAR "LAYLOCKFADECTL")) (SETVAR "LAYLOCKFADECTL" 0) (LAYERSTATE-RESTORE "laystateiso2" nil) (SETVAR "LAYLOCKFADECTL" #laylockfadectl) (PRINC) )
------------------ Gruß aus Wien Bernhard [Diese Nachricht wurde von Bernhard GSD am 03. Nov. 2021 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22171 Registriert: 03.06.2002 Alles
|
erstellt am: 03. Nov. 2021 11:21 <-- editieren / zitieren --> Unities abgeben: Nur für Bernhard GSD
Du schreibst von so unterschiedlichen Dingen, da wird es echt schwer "jedem Satz zu folgen". Aber ich versuche es, wie immer. --- >>"Ich möchte den Status wie oben voreinstellen. Durch "Zu ändernden Status eingeben" wird nur zwischen [Ja] und [Nein] hin- und hergeschalten," Was sonst, es gibt ja nur Berücksichtigen? JA (oder Nein), was will man da anderes haben aus JA, oder Nein?
>>"aber es ist so kein definierter Status herstellbar." Das sind ja nunmal zwei verschiedene Sachen (wenn man die Voreinstlelung separat betrachten möchte) Einen Status definert man, also durch anlegen eines Layerstatus, sprich Speichern. Dazu kommt dann die Voreinstellung der Einstellungen für das Wiederherstellen. >>"Ich möchte nur den Status von "SPerre" sicheren (oder in anderen Fällen "Gefroren")." Ein Layerstatus beinhaltet immer alle Eigenschaften, das solltest du wissen wenn du Layerstus *egal wie* einsetzt. Was aber auch egal ist, denn man gibt ja beim Wiederherstrellen an WAS wiederherstellt werden soll. >>" Den aktuellen Status kennt das Lisp-Programm ja nicht (?) Was meinst du damit? Auch ohne das zu wissen lasse ich ein paar Kommentare fallen: - Mit Lisp sind dir alle aktuellen Eigenschaften aller Layer zugänglich, - Es ist nie ein Status aktuell, denn ein Status ist nicht mit den Layer verknüpft. AutoCAD hat aber eine Prüfung im Status-Dialog welche dir anzeigt ob die aktuellen Layereinstellen zufällig mit einem deiner Status übereinstimmt. Vielleicht meinst du die Voreinstellung für das Wiederherstellen eines Status? Ungeachtet dessen wie man an diese Information kommen kann, soll auch das egal sein, du legst einfach ALLES fest vor dem wiederherstellen. >>"Ziel ist es, den vorherigen Zustand gesperrter und nicht gesperrter Layer wiederherstellbar zu machen." Dann deaktiviere zum Wiederherstellen die anderen Eigenschaften und stelle den Status wieder her. --- Und ab jetzt der Wechsel von Anwender zu Lisp: Layerstatus ist ja eines der wenigen recht gut unterstützten features, das hast du auch bereits gefunden. Deiner letzten Antwort entnehme ich jetzt mal: Du hast nun was du wolltest!? Gut. >>" das Fading hängen." Ob hinterher hjin und später zutück, oder ob du einen anderen Weg zum "refresh findest", eigentlich egal. Schreib uns für welche Variante du dich dann entschieden hast.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bernhard GSD Mitglied
Beiträge: 505 Registriert: 29.08.2002 AutoCAD 2020(Deu); Windows 10 PRO x64(Deu)
|
erstellt am: 03. Nov. 2021 14:45 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von cadffm:
Was sonst, es gibt ja nur Berücksichtigen? JA (oder Nein), was will man da anderes haben aus JA, oder Nein?
Ja, eh. Aber ich hätte gerne gesagt, WAS ich will und nicht den Status von [Ja] nach [Nein] und von [Nein] auf [Ja] - Das ist für einen Programmablauf unbrauchbar.... Zitat:
Dazu kommt dann die Voreinstellung der Einstellungen für das Wiederherstellen.
Nein, bei der Befehlszeilenversion gibt es keine Optionen für das Wiederherstellen, nur für das Sichern - wenigstens bei ACAD2020. Zitat:
Und ab jetzt der Wechsel von Anwender zu Lisp: Layerstatus ist ja eines der wenigen recht gut unterstützten features, das hast du auch bereits gefunden. Deiner letzten Antwort entnehme ich jetzt mal: Du hast nun was du wolltest!? Gut.
Ja, diese Lösung mit Lisp ist eh die genialere. Man lernt auch bei Lisp immer wieder was Neues kennen. Zitat:
>>" das Fading hängen." Ob hinterher hjin und später zutück, oder ob du einen anderen Weg zum "refresh findest", eigentlich egal. Schreib uns für welche Variante du dich dann entschieden hast.
Vorerst bleibt die Variante wie in meinem Post oben. Aber eventuell stolpere ich ja mal über was Besseres. Aber immerhin: Es läuft wie geplant und erleichtert die Arbeit. Wie auch immer: Danke für deine Bemühungen mich zu unterstützen.
------------------ Gruß aus Wien Bernhard Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22171 Registriert: 03.06.2002 Alles
|
erstellt am: 03. Nov. 2021 15:38 <-- editieren / zitieren --> Unities abgeben: Nur für Bernhard GSD
["Dazu kommt dann die Voreinstellung der Einstellungen für das Wiederherstellen."] >>"Nein, bei der Befehlszeilenversion gibt es keine Optionen für das Wiederherstellen, nur für das Sichern - wenigstens bei ACAD2020." JA - ABER. Das ist ein und dasselbe! Dialogfeld wie auch Befehlszeile.. Wenn du in AutoCAD einen Layerstatus erstellst, dann sind alle Eigenschaften voreingestellt auf AKTIVIERT ( = sollen wiederhergestellt werden), im Nachgang kannst du die Häkchen entfernen.. und änderst dabei aber den gespeicherten Layerstatus. So ist das im Dialogfeld und genau so funktioniert es auch in der Befehlzeile. Sollte ich mich irren, vorab ein fettes SORRY - ist aus dem effeff schau es dir im Dialog an, schau es dir in der Befehlszeile an, sollte identisch laufen mit dem Unterschied dass du im Dialog auf einen Status klickst und in der Befehlszeile Bearbeiten<Statusname> wählen musst.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bernhard GSD Mitglied
Beiträge: 505 Registriert: 29.08.2002 AutoCAD 2020(Deu); Windows 10 PRO x64(Deu)
|
erstellt am: 03. Nov. 2021 16:05 <-- editieren / zitieren --> Unities abgeben:
Zitat:
So ist das im Dialogfeld und genau so funktioniert es auch in der Befehlzeile.
Im Dialogfeld ja, in der Befehlszeile komischerweise ist es anders. Aus der Hilfe zu -LAYER Zitat: Speichern Speichert den Status und die Eigenschaftseinstellungen der Layer in einer Zeichnung unter einem angegebenen Layerstatusnamen. Wenn Sie einen Layerstatus speichern, legen Sie fest, welche Layereinstellungen bei einer späteren Wiederherstellung des Layerstatus betroffen sind.Wiederherstellen Stellt den Status und die Eigenschaften aller Layer mit den zuvor gespeicherten Einstellungen wieder her. Dabei werden nur die Layerstatuswerte und Eigenschaften wiederhergestellt, die bei der letzten Speicherung des Layers festgelegt wurden.
Der Befehl LAYERSTATUS ist ja eigentlich auch nicht Teil des LAYEReigenschaften-Managers, sondern ein eigener Befehl, der aus dem ExpressTools Befehl LMAN hervorgegangen ist.
Übrigens auch mit Lisp (laystate-save name mask viewport) ist es so, dass beim Speichern mit mask die zu speichernden Eigenschaften bitcodiert definiert werden, während (layerstate-restore name viewport [restoreflags]) keine Möglichkeit zur Wahl der wiederherzustellenden Eigenschaften mehr bietet.
Übrigens wird der mit (laystate-save ... gespeicherte Status auch im LAYERSTATUS angezeigt, aber dort völlig falsch wiederhergestellt. ------------------ Gruß aus Wien Bernhard [Diese Nachricht wurde von Bernhard GSD am 03. Nov. 2021 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22171 Registriert: 03.06.2002 Alles
|
erstellt am: 03. Nov. 2021 17:12 <-- editieren / zitieren --> Unities abgeben: Nur für Bernhard GSD
Haargenau! Jetzt zitierst du sogar die Hilfe - die im Grunde das wiederspiegelt was ich auch sagte. Beim Anlegen/Speichern eines Status triffst du eine Vorauswahl für das Wiederherstellen. Im Dialog, wie auch über die Befehlszeile! Beim Wiederherstellen wird entsprechend der zuletzt gespeicherten Einstellung agiert. Im Dialog fällt einem kaum auf wie man durch Häkchen rein/raus den Layerstatus verändert/verändern kann, in der befehlszeile musst du halt explizit BEARBEITEN aufrufen dafür. Also ich sitze wieder am Rechner und sehe "dennoch" alles zum Dialog und zu -LAYER bestätigt was ich geschrieben haben. Lisp: Von Lispfunktionen habe ich dabei noch nicht geredet, denn sollte es dort anders sein, so würde ich es vor dem Antworten erst 1:1 testen müssen - das habe ich nicht im Kopf. Wobei mir aktuell bei dem Thema die Zeit fehlte es einfach mal nebenher "vorab" mit allem möglichen zu testen, wenn du aber mal konkrete Beispiel hast (DWG, LSP und Vorgangsbeschreibung, Erwartung vs. IST), dann gerne.
>>"während (layerstate-restore name viewport [restoreflags]) keine Möglichkeit zur Wahl der wiederherzustellenden Eigenschaften mehr bietet." Wie im Dialogfeld und wir im -LAYER Befehl auch! Im Knopf[Wiederherstellen] oder der Option "Wiederherstellen" in der Befehlzeile, gibt es keine weitern Einstellungen und Optionen. In beiden Fällen heißt es wie im Lisp: Wiederhergestellt wird was zuletzt eingestellt/gespeichert wurde.
>>"Übrigens wird der mit (laystate-save ... gespeicherte Status auch im LAYERSTATUS angezeigt," äähm, ja natüprlich? Ein Kreis erscheint auch auf dem Bildschirm, auch wenn du diesen per Lisp API erstellt hast, macht ja Sinn
>>" aber dort völlig falsch wiederhergestellt." Also an dieser Stelle, wenn ich nicht völlig daben liege, dann zeigt sich doch hier das du da irgendwie mit dem Thema noch auf Kriegsfuß stehst. Was um Gottes, Allah und alte Reifen Willen stimmt denn dan nicht, gar "völlig falsch" soll es sein. Beispiele?' DWG, Code -> Beschreibung Erwartung vs Ist. Ich schaue gerne nach, entweder lerne ich etwas, oder ich kann helfen, beides freut mich und daher lebe ich immer im WinWin Aus der Hüfte geschossen, da ich mich an nichts negatives erinnere, aber es ist auch lange her das ich meine (funktionierenden) Programme diesbezüglich erstellt habe und Lisp-Layerstatus muß man nach einer Handvoll Routinen eigentlich nicht mehr anpssen => Sonderfälle, so es diese gibt, geraten in Vergessenheit
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22171 Registriert: 03.06.2002 Alles
|
erstellt am: 03. Nov. 2021 17:17 <-- editieren / zitieren --> Unities abgeben: Nur für Bernhard GSD
Wenn es hier nur um die Anwendersicht ginge, dann würde ich ja darauf tippen diese Jemand stellt Layerstatus in Layouts wieder her und in diesem Fall führt das Ergebnis oft (und zum Teil verständlicherweise) zu Verwirrungen. Ist dann aber alles Erklärbar, auch wenn nicht alles gefällt wie es funktioniert. Du Bernhard kennst dich hingegen wohl aus und hast per Dialogfeld keine Probleme? Bleibt noch eine geringe Chance: Vielleicht wendest du die Lispfunktionen ggf, falsch an? Die Befehlszeile, welche identisch zum Dialog funktioniert (überzeuge mich vom Gegenteil), ist dir ja auch noch nicht so ganz grün? Freue mich schon darauf wie das ausgeht
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bernhard GSD Mitglied
Beiträge: 505 Registriert: 29.08.2002 AutoCAD 2020(Deu); Windows 10 PRO x64(Deu)
|
erstellt am: 04. Nov. 2021 08:56 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von cadffm: Beim Anlegen/Speichern eines Status triffst du eine Vorauswahl für das Wiederherstellen.
Ja, genau. Gleiches passiert beim Lisp-Befehl. Dass nur eine Vorauswahl für die Wiederherstellung getroffen wird, habe ich erst später erkannt. So wird jetzt ein Schuh draus. Wie auch immer: Das Lisp funktioniert und leistet gute Dienste. Eventuell kommt später noch eine Funktion dazu, die die Auswahl mehrerer Objekte (und damit Layer) ermöglicht. Zitat: Original erstellt von cadffm: Du Bernhard kennst dich hingegen wohl aus und hast per Dialogfeld keine Probleme?
Zwar keine Probleme, aber ich nutze das Dialogfeld so gut wie gar nicht. Meine Layereinstellungen laufen alle über Lisps. ------------------ Gruß aus Wien Bernhard [Diese Nachricht wurde von Bernhard GSD am 04. Nov. 2021 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|