Hot News aus dem CAD.de-Newsletter:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Rund um AutoCAD
  Makro zum sauberen Bearbeiten einer externen DWG

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:   Makro zum sauberen Bearbeiten einer externen DWG (585 mal gelesen)
ibmk
Mitglied
Konstrukteur


Sehen Sie sich das Profil von ibmk an!   Senden Sie eine Private Message an ibmk  Schreiben Sie einen Gästebucheintrag für ibmk

Beiträge: 90
Registriert: 17.11.2016

WIN 10 Pro x64
i7-8750H
16 GB RAM
Quadro P1000
ACADA 2016

erstellt am: 09. Nov. 2018 15:01    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo zusammen,

wer kennt es nicht - man bekommt von extern oder einem Kollegen eine DWG und soll damit weiterarbeiten. Bevor ich irgendeinen Strich setze, klicke ich mich manuell durch die Einstellungen und setze folgende Werte, um neue (von mir erstellte) Objekte mit diesen zu erstellen:

Layer "0"
Linienfarbe "VonLayer"
Linientyp "VonLayer"
Linienstärke "VonLayer"
Linientypfaktor "1"
Alle Layer "eingeschaltet"
Alle Layer "getaut"
Alle Layer "entsperrt"

Manchmal dann auch noch die Transparenz aktiviert und Objektisolierung beendet - damit auch alle Objekte angezeigt werden. Dafür habe ich begonnen, ein Makro zu erstellen:

^C^C-layer;SE;0;EI;*;TA;*;EN;*;;

Linientypfaktor, Transparenz und Objektisolierung bekomme ich selbst noch integriert. Mein Problem ist jedoch, wie ich Linienfarbe, -typ und -stärke auf "VonLayer" bekomme. Kann hier jemand helfen?

Eine Frage noch - muss zwischen "^C^C" und "-layer" ein "_"? Wenn ja, wofür soll dieser sein?

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

cadffm
Moderator
良い精神




Sehen Sie sich das Profil von cadffm an!   Senden Sie eine Private Message an cadffm  Schreiben Sie einen Gästebucheintrag für cadffm

Beiträge: 19237
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 09. Nov. 2018 15:17    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für ibmk 10 Unities + Antwort hilfreich

EINMAL ÜBERARBEITET:

>"Mein Problem ist jedoch, wie ich Linienfarbe, -typ und -stärke auf "VonLayer" bekomme. Kann hier jemand helfen?"

Die Systemvariablen dafür sind CECOLOR CELTYPE und CELWEIGHT, siehe Hilfe F1
(die AKTUELL Einstellungen fangen häufig mit CE an, aus dem englischen wie alle Systemvariable = CURRENT...bzw CURRENT ENTITY vielelicht für das E)

Wie der richtige wert ist? Schau selbst nach: Stelle die gewünschten Werte wie gewohnt ein
und frage dann die Variablen ab.

>"Eine Frage noch - muss zwischen "^C^C" und "-layer" ein "_"? Wenn ja, wofür soll dieser sein?"

Der Unterstrich den du ab und an siehst hat im Grunde keine Funktion, dieser gehört zu dem Befehlsnamen oder der Befehlsoption!

In allen Sprachversionen hat man die lokalen Befehle/Optionen zur Verfügung,
aber man auch auch immer den internationalen Befehlsatz (und Optionen) zur Verfügung.
Internationale Befehle&Optionen sind wie folgt benannt: Der englische Befehle mit vorangestelltem Unterstrich.

Hast du die Vollversion? Dann kannst du auch Lisp in der Befehlszeile nutzen, für Befehle
gibt es eine Übersetzungsfunktion in Lisp, für Optionen leider nicht:

________________

Befehl: LINIE

Ersten Punkt angeben:
Nächsten Punkt angeben oder [Zurück]:
Nächsten Punkt angeben oder [Zurück]:

Befehl: (getcname "LINIE")
"_LINE"

Befehl: _LINE

Ersten Punkt angeben:
Nächsten Punkt angeben oder [Zurück]:
Nächsten Punkt angeben oder [Zurück]:

Befehl: (getcname "_LINE")
"LINIE"

Befehl: (getcname "LINIE")
"_LINE"


Internationale Schreibweise ist natürlich zu bevorzugen, denn die läuft überall.

Ohne Unterstrich gibt es den Befehl LINE im deutschen Acad nicht, der Unterstrich gehört also sozusagen zum Befehlsnamen,
zumindest bereitet er Acad darauf vor den nachfolgenden Befehl als englischen = internationalen zu verstehen.

Befehl: LINE
Unbekannter Befehl "LINE". Drücken Sie F1-Taste für Hilfe.


PS: ein PUNKT vor dem Befehlsnamen, ob lokal oder international, der erzwingt den Aufrauf des originalen Befehls,
daher sehr sinnvoll in Makros etc. einen Punkt vor den Befehlsnamen zu schreiben, denn eine Applikation könnte
ja den Befehl LINIE umdefinieren und dein Makro würde dann diesen Befehl "Linie" aufrufen und nicht den originalen
Befehl den du eigentlich möchtest im Makro.

.LINIE
._LINE
_.LINE <= Geht auch, das zeigt dass der Unterstrich nicht wirklich zum Befehlsnamen gehört, sondern mehr ein Steuercode ist.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

ibmk
Mitglied
Konstrukteur


Sehen Sie sich das Profil von ibmk an!   Senden Sie eine Private Message an ibmk  Schreiben Sie einen Gästebucheintrag für ibmk

Beiträge: 90
Registriert: 17.11.2016

WIN 10 Pro x64
i7-8750H
16 GB RAM
Quadro P1000
ACADA 2016

erstellt am: 09. Nov. 2018 16:00    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Wow super, vielen Dank! Habe eben gesehen, dass es unter "status" noch mehr Werte gibt, die man zurücksetzen könnte. Da muss ich mich am Wochenende nochmal in Ruhe hinsetzen und ausprobieren, wird dann etwas länger der Befehl 

Ja, ich habe die Vollversion. Für Lisp hatte ich bis jetzt jedoch noch keine Nerven beziehungsweise Zeit. Bei Makros kann ich wenigstens noch nachvollziehen, was ich mache (zumindest mit diesen einfachen Sachen).

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

cadffm
Moderator
良い精神




Sehen Sie sich das Profil von cadffm an!   Senden Sie eine Private Message an cadffm  Schreiben Sie einen Gästebucheintrag für cadffm

Beiträge: 19237
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 09. Nov. 2018 16:14    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für ibmk 10 Unities + Antwort hilfreich

Der Standard Einstieg für einen "normalen Anwender" in Lisp ist oftmals:
1. Erstellen von Menumakros und Scripte.scr
2. feststellen: Eine Objektwahl wie es FILTER oder SAUSWAHL ermöglicht, gibt es nich tfür die Befehlszeile.
  Dann freut sich der Vollversion-Besitzer über SSX, natürlich nur wenn man die Expresstools installiert hat.
3. Die Lispfunktion SSGET entdecken, die Objektwahlfunktion in Lisp..
  Die Filter (was soll gewählt werden) leiten sich aus den DXF-Werten für ein Objekt ab, gleiches gilt auch für SSX.
  siehe HILFE: Abschnitt DXF ENTITIES
 
  Dazu kommt Lispfunktion SSGET um sich etwas zu merken und IF um anhand von einem Kriterien etwas zu machen,
  es zu lassen oder was anderes auszuführen.  Das Makro oder Script wird dann oft durch die Lispfunktion COMMAND ersetzt,
  damit sendet man Eingaben in die Befehlszeile (also wie mit Makro und Script auch)


Code:
(if (setq MERKE (ssget "_X" (list '(0 . "LINE")'(8 . "MEINLAYER")(cons 410 (getvar 'CTAB)))))
    (command "EIGÄNDR" MERKE "" "FARBE" "1" "")
    (alert "Keine LINIEN auf LAyer 'MEINLAYER' gefunden")
)

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

ibmk
Mitglied
Konstrukteur


Sehen Sie sich das Profil von ibmk an!   Senden Sie eine Private Message an ibmk  Schreiben Sie einen Gästebucheintrag für ibmk

Beiträge: 90
Registriert: 17.11.2016

WIN 10 Pro x64
i7-8750H
16 GB RAM
Quadro P1000
ACADA 2016

erstellt am: 11. Nov. 2018 16:09    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Also nochmal vielen Dank cadffm! Habe eben alle (für mich) wichtigen Werte eingetragen und so schaut der Makro aus:

^C^Ccecolor;vonlayer;clayer;0;celtype;vonlayer;celtscale;1;celweight;-1;cetransparency;vonlayer;thickness;0;^C^Cinsbase;0,0,0;elevation;0;^C^C-layer;EI;*;TA;*;EN;*;^C^Ctransparencydisplay;1;^C^Cunisolateobjects;^C^C

Habe vorher alle Einstellungen geändert und nach dem Klick auf den Button kontrolliert - es funktioniert! Kann hier irgendetwas schief laufen oder Probleme verursachen?

Hast du noch eine Idee, welcher Wert eingetragen werden könnte? Ich denke, ich habe alle relevanten Variablen erfasst.

[Diese Nachricht wurde von ibmk am 11. Nov. 2018 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

cadffm
Moderator
良い精神




Sehen Sie sich das Profil von cadffm an!   Senden Sie eine Private Message an cadffm  Schreiben Sie einen Gästebucheintrag für cadffm

Beiträge: 19237
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 12. Nov. 2018 09:52    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für ibmk 10 Unities + Antwort hilfreich

Du beendest den LAYER Befehl nicht ordentlich und brichst diesen ab, obendrein sind viele komplett unnütze ESC=ABbruch darin.
Probleme bei dem Makro und dessen Anwendung sehe ich keine, bis auf den "aktuellen Layer".


Ein Layer kann nur dann aktuell gesetzt werden wenn dieser getaut ist, also müßte vor deinem CLAYER sichergestellt werden: Layer0 ist getaut.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

ibmk
Mitglied
Konstrukteur


Sehen Sie sich das Profil von ibmk an!   Senden Sie eine Private Message an ibmk  Schreiben Sie einen Gästebucheintrag für ibmk

Beiträge: 90
Registriert: 17.11.2016

WIN 10 Pro x64
i7-8750H
16 GB RAM
Quadro P1000
ACADA 2016

erstellt am: 12. Nov. 2018 10:49    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Ich habe nochmal eine Änderung vorgenommen:

^C^C-layer;EI;*;TA;*;EN;*;;cecolor;vonlayer;clayer;0;celtype;vonlayer;celtscale;1;celweight;-1;cetransparency;vonlayer;thickness;0;insbase;0,0,0;elevation;0;transparencydisplay;1;unisolateobjects;

Zum ordentlichen beenden des Befehls -layer habe ich nach der letzten Eingabe ein weiteres Semikolon ergänzt - das hat gefehlt, richtig? Die überflüssigen ^C^C habe ich entfernt. Außerdem habe ich die Reihenfolge der abzuarbeitenden Befehle / Variablen geändert, sodass zuerst alle Layer eingeschaltet, getaut und entsperrt werden und somit sichergestellt ist, dass der gewünschte Layer (in meinem Fall 0) eingestellt werden kann. So sollte ein Schuh draus werden!

Danke für deine Tipps!

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

cadffm
Moderator
良い精神




Sehen Sie sich das Profil von cadffm an!   Senden Sie eine Private Message an cadffm  Schreiben Sie einen Gästebucheintrag für cadffm

Beiträge: 19237
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 12. Nov. 2018 12:00    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für ibmk 10 Unities + Antwort hilfreich

"ein weiteres Semikolon ergänzt - das hat gefehlt, richtig? Die überflüssigen ^C^C habe ich entfernt."
Ja genau.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2019 CAD.de | Impressum | Datenschutz