Hot News aus dem CAD.de-Newsletter:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Rund um AutoCAD
  Linientyp in Layerdefinition ändern

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:   Linientyp in Layerdefinition ändern (777 mal gelesen)
Musicus
Mitglied
Staatl. gepr. Techniker


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

Beiträge: 660
Registriert: 26.07.2005

AutoCAD 2018
Linear Building 18
Linear CAD Solutions 18
C.A.T.S.
Windows 10 64bit

erstellt am: 12. Dez. 2016 09:54    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 Forum,

folgendes Problem:
Ich bekomme Dateien aus Microstation, die ihre eigenen Linientypen mitbringen. Diese möchte ich gerne durch ACAD-Linientypen ersetzen.
Die Eigenschaften sind immer VONLAYER, ich brauche also "nur" den Layern in der Definition den neuen Linientyp zuweisen.

Jetzt das Problem: Die Linientypen sind immer dieselben, die Layer aber nicht. Händisch ist das nicht weiter schwer, ich suche aber eine Lösung, mit der das automatisiert gelöst werden kann. Mit -layer brauche ich ja den konkreten Layernamen, und an der Stelle gehen mir die Ideen aus.

Vielen Dank schon mal für Denkanstöße,
Musicus

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

csfalk
Mitglied
IT-Admin / CAD


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

Beiträge: 112
Registriert: 14.06.2012

erstellt am: 12. Dez. 2016 10:05    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 Musicus 10 Unities + Antwort hilfreich

Hallo,
warum machst Du das nicht über die Layersteuerung. Befehl "LA" ?
LG Christian

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

Musicus
Mitglied
Staatl. gepr. Techniker


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

Beiträge: 660
Registriert: 26.07.2005

AutoCAD 2018
Linear Building 18
Linear CAD Solutions 18
C.A.T.S.
Windows 10 64bit

erstellt am: 12. Dez. 2016 10:16    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 Christian,

das habe ich schon geschrieben, wenn ich über die Layersteuerung gehe (-layer), muss ich den konkreten Layernamen eingeben. Da die in jedem Plan anders sein können, komme ich an der Stelle nicht weiter.

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

CADmium
Moderator
Maschinenbaukonstrukteur




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

Beiträge: 13436
Registriert: 30.11.2003

Hinweis: Meine Mitarbeit auf CAD.DE ist fakultativ, unentgeltlich und beruht nur auf einem ausgeprägtem Helfersyndrom.

erstellt am: 12. Dez. 2016 10:56    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 Musicus 10 Unities + Antwort hilfreich

Probiers mal hiermit

(defun LTCHANGE ( LTYPES / LT NEWLT ITEM)
  (vl-load-com)
  (if(and(=(type LTYPES)'LIST)
(vl-every '(lambda(X)(and(=(type X)'LIST)(=(type(car X))'STR)(=(type(cadr X))'STR)))LTYPES)
    )      
    (vlax-for ITEM (vla-get-layers(vla-get-activedocument(vlax-get-acad-object)))
      (setq LT (vla-get-linetype ITEM))
      (if(setq NEWLT(cadr(assoc (strcase LT)(mapcar '(lambda(X)(list(strcase(car X)) (cadr X))) LTYPES))))
(not(vl-catch-all-error-p(vl-catch-all-apply  'vla-put-linetype (list ITEM NEWLT))))
      )
    )
  ) 
)


Aufruf
(LTCHANGE '(("Alter_LT1" "Neuer_LT1") (("Alter_LT2" "Neuer_LT2") (("Alter_LT3" "Neuer_LT3")))
z.B:
(LTCHANGE '(("AM_DIN_G_W050" "HIDDEN") ("AM_ISO02W050" "CENTER")("Linie" "Continuous")))

------------------
Also ich finde Unities gut ... und andere sicher auch
---------------------------------------
  - 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

Musicus
Mitglied
Staatl. gepr. Techniker


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

Beiträge: 660
Registriert: 26.07.2005

AutoCAD 2018
Linear Building 18
Linear CAD Solutions 18
C.A.T.S.
Windows 10 64bit

erstellt am: 12. Dez. 2016 11:23    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 Thomas,

ich bin begeistert! Vielen Dank!

Gruß,
Musicus

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

Manuel486
Mitglied
Technischer Zeichner Elektro


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

Beiträge: 25
Registriert: 31.01.2020

Windows 10 - 64-Bit - 16GB RAM - Intel Xeon CPU E5-2620 v2 @ 2.10 GHz
AutoCAD MEP 2019 - Revit 2019

erstellt am: 23. Mrz. 2020 09:22    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 Musicus 10 Unities + Antwort hilfreich

ACHTUNG! Sie antworten auf einen Beitrag der älter als 1 Jahr ist!


Zitat:
Original erstellt von CADmium:
Probiers mal hiermit

(defun LTCHANGE ( LTYPES / LT NEWLT ITEM)
  (vl-load-com)
  (if(and(=(type LTYPES)'LIST)
(vl-every '(lambda(X)(and(=(type X)'LIST)(=(type(car X))'STR)(=(type(cadr X))'STR)))LTYPES)
     )      
    (vlax-for ITEM (vla-get-layers(vla-get-activedocument(vlax-get-acad-object)))
      (setq LT (vla-get-linetype ITEM))
      (if(setq NEWLT(cadr(assoc (strcase LT)(mapcar '(lambda(X)(list(strcase(car X)) (cadr X))) LTYPES))))
(not(vl-catch-all-error-p(vl-catch-all-apply  'vla-put-linetype (list ITEM NEWLT))))
      )
    )
  ) 
)


Aufruf
(LTCHANGE '(("Alter_LT1" "Neuer_LT1") (("Alter_LT2" "Neuer_LT2") (("Alter_LT3" "Neuer_LT3")))
z.B:
(LTCHANGE '(("AM_DIN_G_W050" "HIDDEN") ("AM_ISO02W050" "CENTER")("Linie" "Continuous")))


Ich habe jetzt eine LISP erstellt.

Befehl: LTCHANGE
Zu wenig Argumente
Befehl:

Das kommt dabei raus...
Was mache ich denn falsch?

Und mit dem Aufruf Befehl verstehe ich nicht.
Muss ich das in die LISP integrieren oder ist das ein extra Befehl.

Der Beitrag ist ja schon etwas älter, hoffe mir kann jemand helfen zu verstehen, was ich falsch mache.

MFG
Manuel

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: 19766
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 23. Mrz. 2020 09:30    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 Musicus 10 Unities + Antwort hilfreich

Die Beschreibung des "Aufruf" zeigt dir im Detail wie du die Funktion nutzten kann.

Da steht nicht
LTCHANGE

sondern
(LTCHANGE '(("Alter_LT1" "Neuer_LT1")("Alter_LT2" "Neuer_LT2")("Alter_LT3" "Neuer_LT3"))) ; Zeile editiert

Weiteres Beispiel
(LTCHANGE '(("AUSGEZOGEN" "Continuous")))


Aber Achtung: Man kann nur Linientypen zuweisen wenn die auch existieren!
Also muß dein Lisp/Script whatever zunächst alle benötigten Linientyp-Definitionen laden
falls diese noch nicht in der DWG vorhanden sind.
  

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

Manuel486
Mitglied
Technischer Zeichner Elektro


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

Beiträge: 25
Registriert: 31.01.2020

Windows 10 - 64-Bit - 16GB RAM - Intel Xeon CPU E5-2620 v2 @ 2.10 GHz
AutoCAD MEP 2019 - Revit 2019

erstellt am: 23. Mrz. 2020 10:08    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 Musicus 10 Unities + Antwort hilfreich

Ich verstehe immer noch nicht ob ich den "Aufruf" in die LISP packen muss oder extra.

Allen Linientypen sind geladen.

Nur nochmal zum Verständnis, was habe ich gemacht:
Ich habe LTCHANGE.lsp erstellt,
mit folgendem Inhalt:
(defun LTCHANGE ( LTYPES / LT NEWLT ITEM)
  (vl-load-com)
  (if(and(=(type LTYPES)'LIST)
(vl-every '(lambda(X)(and(=(type X)'LIST)(=(type(car X))'STR)(=(type(cadr X))'STR)))LTYPES)
    )     
    (vlax-for ITEM (vla-get-layers(vla-get-activedocument(vlax-get-acad-object)))
      (setq LT (vla-get-linetype ITEM))
      (if(setq NEWLT(cadr(assoc (strcase LT)(mapcar '(lambda(X)(list(strcase(car X)) (cadr X))) LTYPES))))
(not(vl-catch-all-error-p(vl-catch-all-apply  'vla-put-linetype (list ITEM NEWLT))))
      )
    )
  )
)
Ich lade diese LISP.
Ich erstelle ein Werkzeug das
(LTCHANGE '(("DGN Style 1" "VERDECKT2") (("DGN Style 2" "VERDECKT2") (("DGN Style 4" "STRICHPUNKT2") (("DGN Style 6" "GETRENNT2") (("DGN Style 7" "MITTE2")))
als Befehlsstring ausführt.

Ergebnis:
Befehl: (LTCHANGE '(("DGN Style 1" "VERDECKT2") (("DGN Style 2" "VERDECKT2") (("DGN Style 4" "STRICHPUNKT2") (("DGN Style 6" "GETRENNT2") (("DGN Style 7" "MITTE2"))))
('((_> *Abbruch*
Funktion abgebrochen

Das kommt dabei raus wenn ich den "Aufruf" ausführe.

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: 19766
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 23. Mrz. 2020 10:38    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 Musicus 10 Unities + Antwort hilfreich

1. Jetzt wolltest du es richtig anwenden, sehr gut.

2. Ach Mist, CADmium hatte einen Tipfehler im ersten Beispiel, das hatte ich dann noch einmal ungeprüft zitiert.
   Sein und mein zweites Beispiel sind aber korrekt - Das hast du natürlich nicht erkannt.
   Dumm gelaufen, aber warf dich jetzt nur eine Stunde nach hinten.

3. Die übergebene Liste muß so aussehen:
   (LTCHANGE '( ("ALT1" "NEU1") ))
   (LTCHANGE '( ("ALT1" "NEU1")("ALT2" "NEU2") ))
   (LTCHANGE '( ("ALT1" "NEU1")("ALT2" "NEU2")("ALT3" "NEU3") ))

    Siehst du den Aufbau?

Dann mal los:
(LTCHANGE '(("DGN Style 1" "VERDECKT2")("DGN Style 2" "VERDECKT2")("DGN Style 4" "STRICHPUNKT2")("DGN Style 6" "GETRENNT2")("DGN Style 7" "MITTE2")))

 

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

Manuel486
Mitglied
Technischer Zeichner Elektro


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

Beiträge: 25
Registriert: 31.01.2020

Windows 10 - 64-Bit - 16GB RAM - Intel Xeon CPU E5-2620 v2 @ 2.10 GHz
AutoCAD MEP 2019 - Revit 2019

erstellt am: 24. Mrz. 2020 09: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 Musicus 10 Unities + Antwort hilfreich

Vielen dank, jetzt funktioniert es. 

Das schöne an dieser Methode ist das er einfach weiter läuft auch wenn ein Linientyp mal doch nicht mehr in der Zeichnung ist.

Jetzt gibt es noch Linientypen die nicht auf "VON LAYER" stehen, sondern direkt einen Linientyp zugewiesen haben.

Ich habe das dann so gelöst. (Ich weis, ist nicht gern gesehen mit dem Befehlsstring)

^C^C(sssetfirst nil (ssget "_X" '((6 . "DGN Style 1")(410 . "Model"))));_CHANGE;EIgenschaften;LTYp;VERDECKT2;;(sssetfirst nil (ssget "_X" '((6 . "DGN Style 2")(410 . "Model"))));_CHANGE;EIgenschaften;LTYp;VERDECKT2;;(sssetfirst nil (ssget "_X" '((6 . "DGN Style 4")(410 . "Model"))));_CHANGE;EIgenschaften;LTYp;STRICHPUNKT2;;(sssetfirst nil (ssget "_X" '((6 . "DGN Style 6")(410 . "Model"))));_CHANGE;EIgenschaften;LTYp;GETRENNT2;;(sssetfirst nil (ssget "_X" '((6 . "VERDECKT")(410 . "Model"))));_CHANGE;EIgenschaften;LTYp;VERDECKT2;;(sssetfirst nil (ssget "_X" '((6 . "AM_DIN_F_W050x2")(410 . "Model"))));_CHANGE;EIgenschaften;LTYp;Continuous;;(sssetfirst nil (ssget "_X" '((6 . "DASHDOT")(410 . "Model"))));_CHANGE;EIgenschaften;LTYp;STRICHPUNKT2;;(sssetfirst nil (ssget "_X" '((6 . "IMPORT")(410 . "Model"))));_CHANGE;EIgenschaften;LTYp;Continuous;;

Wenn jetzt aber hier z.B. DGN Style 4 nicht in der Zeichnung ist, bricht er den Befehl dort ab...

Gibts da ne Lösung?

MFG
Manuel

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: 19766
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 24. Mrz. 2020 21:26    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 Musicus 10 Unities + Antwort hilfreich

Ich sehe schon, weder die erste noch die jetzige Sache beschreiben die eigentliche Aufgabe!

Daher ist es oft dennoch gut *alles* zu erzählen,
auch wenn man selbst schonen einen Gedanken dazu hat.


Richtige Frage/Aufgabenbeschreibung wäre wohl vermutlich gewesen:
Ich möchte Linientypen austauschen/mischen,
das ganze soll automatisiert ablaufen und
Alle Vorkommen Linientyp"X" durch Linientyp"Y" ersetzen.

Aktuell hast du die Lösung für Linientypen in Layern
und eine Lösung für Objekt-zugewiesene Linientypen.
Dies funktioniert aber nicht wenn nicht mind ein Objekt i. Aktuellen Bereich vorhanden ist (andere Bereiche bearbeitet der Befehl Change nicht)
und auch nur wenn diese Unverschachtelt vorliegen, also kein Atteibut, kein Blockinhalt.

Man würde so allgemeingültige Tools finden, aber ich helfe mal nur in der aktuellen Frage:

1. Nicht gern gesehen in Makros und Scripten?
Wenn es nicht anders geht, why not.

2. Soo lang würde ich aber doch fast eher ein Script empfehlen.

3.(if (ssget "_X" (list '(6 . "DGN 7")(cons 410 (getvar 'CTAB))))(command "_.chprop" "_p" "" "_LTYPE" "Continuous" ""))

Oder so ähnlich.
WENN du was gefunden hast,
dann führe den Befehl aus..

Hilft das schon, oder brauchst du es genauer?

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)2020 CAD.de | Impressum | Datenschutz