| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Makro: Kreis auf bestimmten Layer aktuellen beibehalten (2008 / mal gelesen)
|
mugg Mitglied
Beiträge: 120 Registriert: 01.04.2011 AEC Collection
|
erstellt am: 13. Aug. 2018 17:31 <-- editieren / zitieren --> Unities abgeben:
Hallo Ich habe hier ein ganz einfaches Makro: ^C^C-LAYER;Thaw;Layer1;Make;Layer1;;CIRCLE; Was jetzt wenn der Kreis nur auf Layer1 gezeichnet werden soll aber der aktuell eingestellte Layer aktuell bleiben soll? Also ich habe den Layer 0 aktuell > Makro Kreis auf Layer1 > aktueller Layer soll 0 bleiben Ich sehe das Problem, weis aber nicht wie beheben Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 21533 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 13. Aug. 2018 18:07 <-- editieren / zitieren --> Unities abgeben: Nur für mugg
Der beste Weg: Erstelle den Kreis ganz normal auf aktuellem Layer, im Anschluß nutze den Befehl ÄNDERN oder EIGÄNDR um den Layer des letzten Objektes zu ändern (Objektwahl LETZTES) Dafür wäre es hut im Makro den aktuellen Layer zu entsperren um sicher zu gehen dass der Layer des Objektes geändert werden kann. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ingo Struck Mitglied Holztechniker
Beiträge: 459 Registriert: 08.01.2010 Intel Core i7-3770 16 GB RAM AMD FirePro V3900 (FireGL V) Windows 7 Pro SP1 AutoCAD 2017 SP1 - deutsch
|
erstellt am: 14. Aug. 2018 09:53 <-- editieren / zitieren --> Unities abgeben: Nur für mugg
Hallo mugg, Schau Dir mal folgendes Makro an: "^C^C-layer;ma;Text;;^C^C_mtext;\\layerp;" Wenn vor dem Start des Makros der Layer "Schraffur" aktuell ist, wird durch das Makro der Layer "Text" erstellt oder auf diesen gewechselt, wenn er schon vorhanden ist. Dann wird hierauf der Text erstellt und anschließend der vorherige Layerstatus wiederhergestellt. Dies geschieht durch den Befehl "layerp". Da die letzte Änderung des Layerstatus der Wechsel vom Layer "Schraffur" auf den Layer "Text" war, wird wieder auf den Layer "Schraffur" zurück gewechselt. Im Deutschen lautet der Befehl "layerv". mfg, Ingo
------------------ "Umwege erhöhen die Ortskenntnisse!" Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mugg Mitglied
Beiträge: 120 Registriert: 01.04.2011 AEC Collection
|
erstellt am: 14. Aug. 2018 14:31 <-- editieren / zitieren --> Unities abgeben:
Danke für die Antworten. @Ingo Dein Makro funktioniert bei mir. Wenn ich aber die letzte Zeile Code an dem bestehenden Befehl anhänge, passiert aber nichts sprich der Layer wird nicht zurückgewechselt. ^C^C-LAYER;Thaw;Layer1;Make;Layer1;;XLINE;\\layerp; Wieso passiert das? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 21533 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 14. Aug. 2018 14:54 <-- editieren / zitieren --> Unities abgeben: Nur für mugg
Du hast deinen Befehl XLINE auch noch nicht beendet, dein Makro crashed also spätestens dort (den vorderen Teil habe ich mit nicht angesehen). Zudem: LayerP würde ich nicht verwenden, der kann dir ganz schön die Sache versauen für den Fall das dein Layer ("LAyer1" im Beispiel) bereits aktuell war vor dem Makrostart. Wann immer es also möglich ist würde ich CHPROP order CHANGE den Vorzug geben. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
runkelruebe Moderator Straßen- / Tiefbau
Beiträge: 8075 Registriert: 09.03.2006 Kinder, kauft Kämme! Es kommen lausige Zeiten.
|
erstellt am: 14. Aug. 2018 15:04 <-- editieren / zitieren --> Unities abgeben: Nur für mugg
Man kann in der Befehlszeile lesen, an welcher Stelle ACAD ins Stolpern gerät: Code: Befehl: -LAYERAktueller Layer: "C-Wasserflächen" Option eingeben [?/Erzeugen/SEtzen/Neu/Umbenennen/EIN/AUs/FArbe/Ltyp/LStärke/TRansparenz/MATerial/Plot/Frieren/Tauen/SPerren/ENtsperren/STatus/Beschreibung/ABstimmen/Xref]: _Thaw Namensliste der Layer für auftauen eingeben: Layer1 Option eingeben [?/Erzeugen/SEtzen/Neu/Umbenennen/EIN/AUs/FArbe/Ltyp/LStärke/TRansparenz/MATerial/Plot/Frieren/Tauen/SPerren/ENtsperren/STatus/Beschreibung/ABstimmen/Xref]: _Make Namen für neuen Layer eingeben (wird aktueller Layer) <C-Wasserflächen>: Layer1 Option eingeben [?/Erzeugen/SEtzen/Neu/Umbenennen/EIN/AUs/FArbe/Ltyp/LStärke/TRansparenz/MATerial/Plot/Frieren/Tauen/SPerren/ENtsperren/STatus/Beschreibung/ABstimmen/Xref]: Befehl: _XLINE Einen Punkt angeben oder [HOr/Ver/Win/HAlb/Abstand]: Durch Punkt angeben: Durch Punkt angeben: _layerp Ungültiger Punkt.
Dir fehlt also das Beenden des XLINE-Befehls. Lösung: Aus ^C^C-LAYER;_Thaw;Layer1;_Make;Layer1;;_XLINE;\\_layerp; wird ^C^C-LAYER;_Thaw;Layer1;_Make;Layer1;;_XLINE;\\;_layerp;
Ich würde übrigens einen Layer immer erst MACHEN, bevor ich ihn TAUE, aber das "Keine übereinstimmenden Layernamen gefunden" stört wohl nur die Schöngeister Das war Mist, sorry! Wenn Layer1 zwar vorhanden, aber gefroren ist, kann ich ihn nicht aktuell setzen. Dann lieber gestörter Schöngeist!
PS: es wäre schön, wenn Du die internationalisierte Fassung verwendest, also mit _ vor dem englischen Befehl, dann müssen die freundlichen Helferlein das nicht immer umbauen. Die meisten hier bei CAD.de arbeiten mit deutschen Versionen PPS: Sowas kann man auch mit Werkzeugpaletten erledigen. >> klick << (nur ein Beispiel von vielen hier im Brett) ------------------ Gruß, runkelruebe Herr Kann-ich-nich wohnt in der Will-ich-nich-Straße... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mugg Mitglied
Beiträge: 120 Registriert: 01.04.2011 AEC Collection
|
erstellt am: 14. Aug. 2018 15:57 <-- editieren / zitieren --> Unities abgeben:
@cadffm Zitat: Zudem: LayerP würde ich nicht verwenden, der kann dir ganz schön die Sache versauen für den Fall das dein Layer ("LAyer1" im Beispiel) bereits aktuell war vor dem Makrostart. Wann immer es also möglich ist würde ich CHPROP order CHANGE den Vorzug geben.
Kannst Du ein Beispiel machen? @runkelruebe
Zitat: PS: es wäre schön, wenn Du die internationalisierte Fassung verwendest, also mit _ vor dem englischen Befehl, dann müssen die freundlichen Helferlein das nicht immer umbauen. Die meisten hier bei CAD.de arbeiten mit deutschen Versionen
Ich versuche es Meine Überlegung war nur 1 Code zu schreiben, welche für Englisch und Deutsch funktioniert. Eventuell muss man das gar nicht?!? Weis ich nicht. Zitat: [PPS: Sowas kann man auch mit Werkzeugpaletten erledigen. >> klick << (nur ein Beispiel von vielen hier im Brett)
Ich möchte die Befehle im Ribbon verfügbar machen. Die Verwaltung wäre zwar einfacher in den Werkzeugpaletten. Wie machst Du das wenn du die Befehle im Ribbon und in den Werkzeugpaletten verfügbar machen willst? Da gibt es eine Doppelspurigkeit, nicht? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
runkelruebe Moderator Straßen- / Tiefbau
Beiträge: 8075 Registriert: 09.03.2006 Kinder, kauft Kämme! Es kommen lausige Zeiten.
|
erstellt am: 14. Aug. 2018 16:33 <-- editieren / zitieren --> Unities abgeben: Nur für mugg
Deswegen ja den _ davor, den können ALLE Sprachversionen verstehen. Läßt Du den weg, funktioniert Dein Makro nur in der englischen Version. Ich denke, >> das << ist nicht ganz das, was Du möchtest, oder? Man kann (die muffigen) Werkzeugkästen >> in Ribbons umwandeln <<, Paletten IMHO nicht, die sind zu anders. Billigbeispiel für _change: Code: ^C^C_.line;\\;_change;_last;;_properties;_layer;0;;
ergibt:
Code: Befehl: _.lineErsten Punkt angeben: Nächsten Punkt angeben oder [Zurück]: Nächsten Punkt angeben oder [Zurück]: Befehl: _change Objekte wählen: _last 1 gefunden Objekte wählen: Modifikationspunkt angeben oder [EIgenschaften]: _properties Zu ändernde Eigenschaft eingeben [Farbe/ERhebung/LAyer/LTYp/LTFaktor/LStärke/Objekthöhe/TRansparenz/Material/Beschriftung]: _layer Neuen Layernamen eingeben <Text>: 0 Zu ändernde Eigenschaft eingeben [Farbe/ERhebung/LAyer/LTYp/LTFaktor/LStärke/Objekthöhe/TRansparenz/Material/Beschriftung]:
HTH ------------------ Gruß, runkelruebe Herr Kann-ich-nich wohnt in der Will-ich-nich-Straße... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 21533 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 14. Aug. 2018 16:44 <-- editieren / zitieren --> Unities abgeben: Nur für mugg
los gehts. Zitat: Kannst Du ein Beispiel machen?
Erstelle mal Layer1 und Layer2, der Layer1 ist aktuell. Jetzt ändere die Farbe des Layer2. Starte Befehl _-LAYER, _make, Layer1 im Anschluß starte Befehl _LAYERP und prüfe die Farbe des Layer2. Das betrifft alle Layereigenschaften PLUS die Variable CLAYER (als den "vorherigen Layer")
Zitat: "Meine Überlegung war nur 1 Code zu schreiben, welche für Englisch und Deutsch funktioniert. Eventuell muss man das gar nicht?!?"
Man sollte es, denn irgendein Empänger oder man selbst einmal mit anderer Sprachversion steht sonst blöd da. Wie man das macht hat runkelrübe bereits erwähnt, ich ergänze noch mit: Befehle kann man in der Vollversion leicht übersetzten in der Befehlszeile: (getcname "Linie") oder auch anders herum (getcname "_LINE") In LT (und der Vollversion) kann man leicht die Sprachversion der Hilfe umstellen (oben rechts), Starte Befehl Linie, drücke F1 (Hilfe zum Befehl Linie erscheint im besten Fall), dann auf englsich umstellen, voila. Für Optionen geht es leider nicht immer so einfach, die häufigsten engl. Optionstitel hat man schnell drauf, aber nicht alle für jeden Befehl. Da verweise ich mal auf die tolle Seite www.cadmaro.de und die dort vorhandene deutsch/englisch Referenz. Ich ergänze an dieser Stelle mal mit einer Kommentierung anhand des einen Makro-Beispieles von oben: Zitat: Gerne darf man sich auf deutsch oder International einigen, zumindest innerhalb eines Menümacros wäre das ja nett.^C^C-layer;ma;Text;;^C^Cmtext;\\layerv; Wenn der Befehl -LAYER beendet wurde, dann braucht man auch nicht wie wild auf der [ESC]-Taste herumhacken, weder per Hand noch mit einem Makro,also entferne ich mal die völlig überflüssigen zwei ESC-Anweisungen. ^C^C-layer;ma;Text;;mtext;\\layerv; und weil "International" eindeutig die bessere Wahl ist, nun doch international und mit Original-Befehlen um sicher zu sein wie die Befehle ablaufen, dabei schreibe ich die Optionen ebenfalls auf, dies bietet die größte Chance für die längste Lebensdauer. (der volle Name einer Option im englischen=International ändert sich am seltensten) ^C^C_.-LAYER;_make;Text;;_.MTEXT;\\_.LAYERP; Jetzt sieht es aus wie geleckt. Aber warum hatte CADffm es SO nicht vorgeschlagen WEIL Layerp nicht so einfach berechenbar ist (in einer Datei welche nicht komplett automatisiert entstanden ist) Stelle doch vor dem ausführen des Makro mal den bereits vorhandenen Layer "TEXT" aktuell, dann ändere die Farbe des Layer0 und führe dein Makro aus.
Nicht gerade das was man erwartet oder möchte, oder? Kurz: Änderungen in den Layereigenschaften werden nur als Änderungen für Layerp gewertet wenn es sich wirklich um eine Änderung handelte. Den aktuellen Layer von Layer TEXT auf Layer Text setzen ist keine Änderung, daher bleibt die davor zuletzt getätigte "echte" Änderung im Speicher für Layerp und diese wird dann zurückgesetzt. Also ein anderer Layer wird aktuell, oder "nicht plotbar" wird gesetzt oder was auch immer zuletzt geändert wurde. EIN SCHEIXX IST DAS und vor allem gut zu wissen wenn man Makros erstellt.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ingo Struck Mitglied Holztechniker
Beiträge: 459 Registriert: 08.01.2010 Intel Core i7-3770 16 GB RAM AMD FirePro V3900 (FireGL V) Windows 7 Pro SP1 AutoCAD 2017 SP1 - deutsch
|
erstellt am: 15. Aug. 2018 11:28 <-- editieren / zitieren --> Unities abgeben: Nur für mugg
Hallo zusammen, oben hatte ich folgendes Makro vorgeschlagen: "^C^C-layer;ma;Text;;^C^C_mtext;\\layerp;". In Bezug auf cadffm und runkelruebe kann man zunächst zusammenfassend 4 Dinge anmerken, welche bei der Erstellung von Makros beachtet werden sollten: > Keine überflüssigen Aktionen, in diesem Fall das doppelte Escape in der Mitte des Makros (^C^C) > Verwendung des internationalen, also englischen ausgeschriebenen Befehls mit anführendem Tiefstrich (_) > Verwendung des Originalbefehls, also mit anführendem Punkt (.) zwischen Tiefstrich und Befehl > Verwendung der internationalen, also englischen ausgeschriebenen Optionen in Befehlen mit anführendem Tiefstrich (und ohne Punkt). Nach diesen Konventionen sieht das Makro so aus: "^C^C_.-layer;_make;Text;;_.mtext;\\_.layerp;" Nun besteht jedoch noch das Problem, dass das Makro sich unerwünscht verhält, wenn der Layer, auf den gewechselt werden soll, in diesem Fall der Layer "Text", schon aktuell ist. Siehe hierzu die Erläuterung von cadffm. Besser ist hier der o. g. Vorschlag mit dem Befehl "ändern" und der Option "letzte" bei der Objektwahl : "^C^C_.mtext;\\_.change;_last;;_properties;_layer;Text;;". Diesen Befehl hatte ich bisher noch nicht im Blick. Ebenso funktioniert der Befehl "eigändr": "^C^C_.mtext;\\_.chprop;_last;;_properties;_layer;Text;;". Auch der Vorschlag mit den Werkzeugpaletten ist interessant. mfg, Ingo ------------------ "Umwege erhöhen die Ortskenntnisse!" Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mugg Mitglied
Beiträge: 120 Registriert: 01.04.2011 AEC Collection
|
erstellt am: 16. Aug. 2018 08:49 <-- editieren / zitieren --> Unities abgeben:
Ok. Ich habe nun dem Beispiel den Befehl tauen vorgehängt. Das funktioniert auch. ^C^C_.-layer;_thaw;Text;_make;Text;;_.mtext;\\_.layerp; Problem 1 Wenn der Layer Text gefroren ist und der Befehl wird ausgeführt, so wird der Layer Text nach dem Befehl wieder gefroren > unsichtbar. Was muss ich nun anhängen damit der Layer danach getaut bleibt? Die Funktion tauen am Anfang muss aber bleiben. Problem 2 Wenn ich MTEXT durch XLINE ersetze, kann ich zwar die Hilfslinie erstellen aber es wird nicht auf den vorherigen Layer zurückgewechselt Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
runkelruebe Moderator Straßen- / Tiefbau
Beiträge: 8075 Registriert: 09.03.2006 Kinder, kauft Kämme! Es kommen lausige Zeiten.
|
erstellt am: 16. Aug. 2018 09:04 <-- editieren / zitieren --> Unities abgeben: Nur für mugg
|
cadffm Moderator 良い精神
Beiträge: 21533 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 16. Aug. 2018 09:24 <-- editieren / zitieren --> Unities abgeben: Nur für mugg
Problem 1 "Wenn der Layer Text gefroren ist und der Befehl wird ausgeführt, so wird der Layer Text nach dem Befehl wieder gefroren > unsichtbar."Siehe Antwort#4, woraufhin du in Antwort#6 nach einem Beispiel fragtest, was ich mit Antwort#8 versuchte deutlich zu machen. Problem 2 "Wenn ich MTEXT durch XLINE ersetze, kann ich zwar die Hilfslinie erstellen aber es wird nicht auf den vorherigen Layer zurückgewechselt" Siehe ebenfalls Antwort#4 Zitat: Original erstellt von mugg:
Nehme die mehr Zeit beim erstellen eines Makros und beim lesen (und verstehen) der kostenlos dargebotenen Unterstützung! Hier helfen viele immer sehr gerne, aber wenn Grips und Zeit investiert und dann offenbar ignoriert wird macht es wenig Spaß 1 - Wie funktioniert Layerp? Lese den ganzen Thread noch einmal und teste selbst wie der Befehl LayerP funktioniert, schau dir dann die bisher erwähnten Alternativen an. In ganz besonderen Fällen, oder wenn man sich mühe machen möchte, dann könnte man ein ein richtig "professionelles" Makro erstellen, dabei würde man DIESEL nutzen um die 'Layer Vorher' Aufgabe zu lösen. 2 - XLine Makro, habe ich bereits angesprochen. Das Makro ist nicht korrekt, also Gehe die Schritte noch einmal durch. Dabei ist es ausreichend ab der Eingabe _XLINE<enter> den Ablauf zu testen, dann siehst du direkt das deine Eingabe LAYERP deplatziert ist. Und Nein, auch wenn ich alles überspringen könnte, die Antwort bleibt dabei und du selbst solltest den angesprochenen Dingen nachgehen. Man lernt so mehr und besser, nur hilft es dann auch bei zukünftigen Aufgaben. Mit Hilfestellungen in Foren spart man sich teilweise schon Jahre der Erfahrung, aber man kann sich auch nicht alles in ein paar Wochen anlesen, ist einfach so - deswegen gehe ich auch weiter nicht auf DIESEL ein, denn erst mal sollte die Verwendung von ganz normalen Befehlseingaben funktionieren, ansonsten kämpft man zeitgleich an zwei Fronten, was nicht hilfreich ist.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 21533 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 16. Aug. 2018 09:37 <-- editieren / zitieren --> Unities abgeben: Nur für mugg
Zitat: Original erstellt von cadffm: ..und teste selbst wie der Befehl LayerP funktioniert, schau dir dann die bisher erwähnten Alternativen an.
Eigentlich ungern, aber ("XLine auf bestimmtem Layer" und "irgendwie vorheriger Layer") ist ein besonders kniffliger Fall.Wenn du mit allem durch bist und wahrscheinlich noch keine entgültige Lösung dafür erarbeiten konntest, dann melde dich noch einmal. Gebe dann bitte direkt an ob du eine Xline, eine bestimmte Anzahl oder eine unbestimmte Anzahl von XLine benötigst. Mögliche gewünschte Optionen kann ich dann hingegen von deinem dann aktuellen Makro ablesen wenn du dies postest.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
C4DP4P57 Mitglied Technischer Zeichner
Beiträge: 150 Registriert: 06.05.2009 Win 10 Windows 10 Enterprise 64Bit Intel(R) Core(TM) i7-7700 CPU @ 3.60GHz 32 GB RAM NVIDIA Quadro P1000 AutoCAD 2019.1.2 64Bit
|
erstellt am: 16. Aug. 2018 17:06 <-- editieren / zitieren --> Unities abgeben: Nur für mugg
Hallo, vielleicht wäre die LISP ja eine Alternative, sofern du die Vollversion nutzt. http://www.lee-mac.com/layerdirector.html Du müsstest nur den Part (Fett) in dem LISP entsprechend deiner Bedürfnisse anpassen oder ergänzen.
Code: layerdirector:Data '( ;;-----------------------------------------------------------------------------------------------------------------------------------------------------;; ;; Command Pattern | Layer Name | Description | Colour | Linetype | Lineweight | Plot | Plot Style ;; ;;-----------------------------------------------------------------------------------------------------------------------------------------------------;; ;; [string] | [string] | [string] | 0 < int <256 | [string] | -3 = Default | 1 = Will Plot | [string] ;; ;; | | Use "" for none | | | 0 <= int <= 211 | 0 = Won't Plot | Use nil for CTB ;; ;;-----------------------------------------------------------------------------------------------------------------------------------------------------;;("[DM]TEXT,TEXT" "TEXT" "Text Layer" 2 "Continuous" -3 1 nil ) ("DIM*,*LEADER" "DIMENSIONS" "Dimension Layer" 3 "Continuous" -3 1 nil ) ("*VPORT*" "DEFPOINTS" "" 7 "Continuous" -3 0 nil ) ("XLINE" "XLINE" "Construction Lines" 12 "HIDDEN" 0 0 nil ) ;;-----------------------------------------------------------------------------------------------------------------------------------------------------;;
Gruß Jörg ------------------ Wer immer tut, was er schon kann, bleibt immer das, was er schon ist. [Diese Nachricht wurde von C4DP4P57 am 16. Aug. 2018 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |