Makro Ansichtsfenster frieren mit Leerzeichen / AutoCAD Mechanical
CadK 23. Jan. 2020, 11:27

Hallo,

ich habe vor ein Makro zu schreiben, das Layer + Xref Layer in einem Ansichtsfenster frieren soll.

Klappt auch alles, nur wenn im Layer Name ein Leerzeichen auftaucht dann funktioniert dies nicht.
Habe schon versucht das Leerzeichen mit "" zu ersetzen, was leider nicht zum erfolgt führt.

z.B. Name der Layer:
Layer_1
Layer 2

Da der Name des zweiter Layer mit einen Leerzeichen versehen ist, klappt es leider nicht.
Den Namen des Layers zu ändern ist keine Option, da Kundenvorgabe.

Jemand eine Lösung wie ich in das Makro ein Leerzeichen definiere?

CADmium 23. Jan. 2020, 11:36

wie sieht denn dein Makro aus ?

(command "-layer" "_f" "LAYER 1" "")  ??

CadK 23. Jan. 2020, 11:43

^C^Cexpert;0;aflayer;tau;*;AK;^C^Caflayer;fri;*Layer_1*;*Layer 2*;;;

CADmium 23. Jan. 2020, 12:35

Layername in Anführungszeichen setzen
oder
command verwenden

(setvar "expert" 0)(command "aflayer" "tau" "*" "AK")(command "aflayer" "fri" "Layer_1" "Layer 2" "")

oder so ähnlich

cadffm 23. Jan. 2020, 13:03

Bei dem Problem mit dem Leerzeichen bist du überhaupt noch nicht angekommen,
aber vermutlich siehst du das nicht mit Expert=0.

1. Verwende nicht Expert=0
  Das kann man, wenn man es für sinnvoll erachtet, am Ende hinzufügen wenn alles fertig ist oder halt sofort - wenn man ein Überflieger ist.
  Zum erarbeiten eines Makros, immer alle Meldungen an Menuecho, Expert usw. sonst siehst du womöglich nicht was passiert beim eintippen
  und durchgehen der Eingaben[F2]

2. Wenn du die Rückgabe nicht unterdrückst, das Makro ausführst, siehst du das Problem beim übergeben den zweiten Layernamens,
  Acad fragt dich an der Stelle überhaupt nicht nach einem Namen sondern nach einem Ansichtsfenster auf das
  es angewendet werden soll.
  Problem: Semikolon statt Komma verwendet und Semikolon ist ein ENTER (welches die Objektwahl bzw Abfrage der Layernamen beendet).

3. Leerzeichen im Makro wie CADmium schreibt, muß dem Programm mitteilen das man gerade einen Textstring übermitteln will,
  also kommt die Angabe des/der Layernamen in Anführungszeichen, dann klappts auch mit dem Leerzeichen.
   
  ^C^Caflayer;tau;*;AK;^C^Caflayer;fri;"*Layer_1*,*Layer 2*";;;


Bis hier ist deine Frage geklärt, kostenlos oben drauf kommt:
Warum brichst du den ersten aflayer Befehl ab? ^C
Wenn der Befehl abgebrochen wurde dann ist auch kein anderer aktiv, warum sendest du noch einmal "abbrechen"=ESC? ^C
Nach erfolgreichem Abbrechen wird der selbe Befehl gestartet der soeben mühsam abgebrochen wurde, gibt es da einen Sinn dahinter?

  ^C^C^Caflayer;tauen;*;aktuell;frieren;"*Layer_1*,*Layer 2*";aktuell;;

EndLevel: DIESEL IF
AFLAYER hat einen anderen Ablauf wenn man im Modellbereich ist, das Makro sollte das berücksichtigen.
Systemvariable TILEMODE und auch CVPORT kann da hilfreich sein.