Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Layer aus alt mach neu

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
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  Layer aus alt mach neu (486 / mal gelesen)
nebuCADnezzar
Mitglied



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

Beiträge: 268
Registriert: 17.10.2007

AutoCAD 2019
Inventor 2019
64 bit Win 10
Intel I7 10610U 1.8 GHz
Quadro P520
32 GB Ram

erstellt am: 24. Mrz. 2023 15:50    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

So ich möchte mal wieder die Wollmilchsau haben... Folgende Datenlage:

Ich habe 100erte oder 1000ende Zeichnugnen welche die noch in alter Layerstruktur erstellt worden sind. Dafür haben wir n kleines Tool womit wir die Layer auf "neu" updaten können.

Nun hab ich aber ein Phase 2 Problem, viele, viele dieser Zeichungen sind gebundene ehmals Xref Layer, und beim binden wird der Layername angepasst auf aus welcher Datei dass mal kam.

"Stahl_verdeckt"
heist dann
"4156487-Stahl_verdeckt"

Und in so ner Datei können ganz viele ehemalig Xrefs sein, was heisst ich hab 10 verschiedene Layer die "xxxxxx-Stahl_verdeckt" heissen.

Da greift dann aber die Standard.dws über Laytrans nicht mehr weil ich da nur Layer "Stahl_verdeckt" zu "ST_hidden" machen kann. Ich müsste vorher alle "xxxxxx-Stahl_verdeckt" zusammenfasssen zum orginalen "Stahl_verdeckt" das könnte mit LAYZUSF funktionieren aber da ich ja die Layernamen nicht weiss sonder der präfix immer Variabel ist müsst ich suche nach "*Stahl_verdeckt" füge zusammen nach "Stahl_verdeckt"

Einer ne Idee wie ich den präfix veralgemeinere? Es sind nicht soo viele Layer könnte man Prorgammen.
Allenfalls geht das auch direkt über Stahl_verdeckt? So wi ich dass sehe sind die layernamen bei LAYERTRANS aber leider auch fix...

Gruss

PS: In Phase 3 soll natürlich ein Skript sich durch die Ordnerstruktur graben und alle auffindbaren dwg's updaten... :-)


Code:
(defun C:XXXLAYERS ()
(arxload "LAYTRANS.ARX")

(acet-laytrans "C:....-layers-old2new.dws" 7)

(prompt "\nAll Layers have been transfered.")

(princ)


------------------
Es ist kein Zeichen geistiger Gesundheit, gut angepasst an eine zutiefst kranke Gesellschaft zu sein.

Jiddu Krishnamurti

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

Alles

erstellt am: 24. Mrz. 2023 16:07    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 nebuCADnezzar 10 Unities + Antwort hilfreich

Hi,

>>", und beim binden wird der Layername angepasst auf aus welcher Datei dass mal kam."
Wenn man die Methode Binden statts Einfügen nutzt(e), dann ist das so, ja.

>>"Einer ne Idee wie ich den präfix veralgemeinere?"
Warum verallgemeinern? Das Programm kannst du nicht ändern und die Funktion funktioniert nunmal nicht mit Wildcards,
das ist also der Teil den DU erledigen musst.

Durchlaufe die Layertabelle.. dabei prüfst du dann pro Layer ob so ein Fall vorliegt.
Hier vereinfacht dargestellt für den alten Layernamen "STAHL":
(wcmatch (strcase "Layername" t) (strcat "*$#*$" (strcase "STAHL" t)))

>>" Es sind nicht soo viele Layer könnte man Prorgammen. "
Auf diese Weise ist die Anzahl irrelevant.

>>"Allenfalls geht das auch direkt über Stahl_verdeckt"?

>>" So wi ich dass sehe sind die layernamen bei LAYERTRANS aber leider auch fix..."
Das ist ja einfach die GUI-Version von deiner genutzten Lispfunktion, also Ja.
Daher musst du prüfen ob so ein Fall vorliegt, dann kennst du ja den vollständigen Layernamen den du dann angeben kannst.

Laytrans eignet sich daher nicht - der passende Befehl ist LAYMRG / LAYMISCH
Gruss

PS: Das betrifft ja nicht nur die Layer, das betrifft ALLE BENANNTEN Objekte in der Datei..
aber bleiben wir mal bei Layern: Du bist ja nicht der Einzige den das stört, nicht der Einzige der dies ändern will,
also gibt es natürlich schon so Tools die sowas machen. Wenn du also lieber suchst statts zu programmieren (was schneller gehen sollte),
dann suche danach - möglichst auf englisch, in Richtung:
Strip xref layer name
Laymrg wildcard
oder ähnlich.

Wenn du erst einmal auf 5 *stahl Layer einen erstellst hast, dann kannst du auch wieder Laytrans benutzen, wobei
das Ändern des Layers in deinem Code dann auch schnell(er) geschehen wäre.

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

nebuCADnezzar
Mitglied



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

Beiträge: 268
Registriert: 17.10.2007

AutoCAD 2019
Inventor 2019
64 bit Win 10
Intel I7 10610U 1.8 GHz
Quadro P520
32 GB Ram

erstellt am: 24. Mrz. 2023 17: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

Hi

Ich versuch ja schon erst das internet abzugrasen und tools zu finden bevor ich hier fragen stelle :-) Die Programmierkentnisse nehmen leider auch immer mehr ab, aber hab nicht mal was gefunden was ich zusammenkopiern hätte können...

LAYMRG / LAYZUSF hab ich ja auch gefunden, scheint das Mittel der Wahl hab ich auch rumgetestet. Was eigentlich an dem Befehl fehlt ist eben ne *Suchfunktion, ich will nicht auswählen/klicken. Gehe hin und nimm alle Layer wo irgendwo "Stahl_verdeckt" drinnsteht und führ die zusammen in einen "Stahl_verdeckt". Wie jede Suchfunktion *Stahl_verdeckt* aber dass lässt sich so nicht eingeben 

Is auch nich so wildcard ich weiss alle Grundlayernamen die ich suchen will! Wie gesagt dass wären nur n paar.

Hab hier noch was gefunden, der findet schonmal alle und ich kann was ranpappen, aber ich will ja alle mit dem gefundenen String zusammenführen...

https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/lisp-for-changing-layer-names/td-p/862171

Naja nächste Woche ist auch noch n Tag :-)

------------------
Es ist kein Zeichen geistiger Gesundheit, gut angepasst an eine zutiefst kranke Gesellschaft zu sein.

Jiddu Krishnamurti

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

Alles

erstellt am: 24. Mrz. 2023 17:41    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 nebuCADnezzar 10 Unities + Antwort hilfreich

[QUOTE]Original erstellt von nebuCADnezzar:
>>"Ich versuch ja schon erst das internet abzugrasen und tools zu finden bevor ich hier fragen stelle"
Aber spätestens jetzt nach meiner Silbertablet-Suchanfragen-Unterstützung sollte es  doch funktionieren..

>>"Was eigentlich an dem Befehl fehlt ist eben ne *Suchfunktion"
Daher: Deine Aufgabe und IMHO bekommst du das auch hin, den Kernpunkt habe ich je schon geschrieben,
fehlt also nur noch der Walk durch die Layertabelle und die command-Anweisung für LAYMRG

(while (setq a (tblnext "LAYER" (not a)))
(foreach lay '("STAHL" "EIS" "ROT")
  (if (mein WCMATCH-Beispiel einbauen um (cdr(assoc 2 a)) mit LAY zu vergleichen)
      (command "_.LAYMRG" "_n" (cdr(assoc 2 a)) "" "_n" LAY "_y")
    )
  )
)


>>"Is auch nich so wildcard ich weiss alle Grundlayernamen die ich suchen will!"

aber dein "*MEINLAYER" ist und bleibt ein Wildcard-Vergleich.

>>"Hab hier noch was gefunden,"
Das habe ich mir nicht angesehen und kommentiere es daher auch nicht, aber sicher kannst du davon etwas gebrauchen/anpassen,
schneller wirst du aber sicher glücklich mit einem Programm was sich bereits explizit mit den gebundenen Xref-Layerrnamen beschäftigt,
Programme welche man mit meinen Suchbegriffen leicht findet. Strip xref layer name

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

nebuCADnezzar
Mitglied



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

Beiträge: 268
Registriert: 17.10.2007

AutoCAD 2019
Inventor 2019
64 bit Win 10
Intel I7 10610U 1.8 GHz
Quadro P520
32 GB Ram

erstellt am: 27. Mrz. 2023 13:35    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

Hi

Danke für den Hinweis, hab nochmal nach Strip xref layer name gesucht und bin fündig worden (komischer weise hab ich dass am Freitag noch nicht gefunden...)

Dass Ding ist sogar noch besser, dass geht Blöcke etc auch umbenennen! Daran hat ich noch gar nicht gedacht!

Du überschätz meine cooding fähigkeiten  ich brauchs immer seltner, nimmt leider wirklich rapide ab... glaub nicht dass ich deine Hilfsschipsel zusammne gebacken bekomment hätte 


Hab dies getestet, dass funktioniert netter weise einfach, mit einer einschränkung, wenn der xref namensteil vor dem $ eine Zahl ist (alse z.B. 736.858 dann meldet der code Layer: 736.858$0$PL_CONT was not renamed. Alle anderen Layer wurden aber abgeändert und wenn/falls ich den code richtig verstanden hab kopiert er sich den strin nach dem zweiten $. Und dem string sollte es ja egal sein ob ne Zahl oder Buchstabe ist?
Siehst du dass auf den ersten Blick?

https://autocadtips1.com/2011/10/13/autolisp-remove-binding-prefixes-from-xrefs/

Code:
(defun c:RBP(/ ActDoc Name NewName)

; RemoveBindPrefixes

; Renames layers, blocks, dimension styles, text styles, user coordinate systems, and views

; by taking out the bind as bind prefix

; Example Drawing1$0$Layer1 -> Layer1

(vl-load-com)

(defun RemoveBindPrefix (String / Pos LastPos)

(if (setq Pos (vl-string-search "$" String))

(progn

(setq LastPos Pos)

(while (setq Pos (vl-string-search "$" String (1+ Pos)))

(setq LastPos Pos)

)

(substr String (+ 2 LastPos))

)

String

)

)

------------------
Es ist kein Zeichen geistiger Gesundheit, gut angepasst an eine zutiefst kranke Gesellschaft zu sein.

Jiddu Krishnamurti

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

nebuCADnezzar
Mitglied



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

Beiträge: 268
Registriert: 17.10.2007

AutoCAD 2019
Inventor 2019
64 bit Win 10
Intel I7 10610U 1.8 GHz
Quadro P520
32 GB Ram

erstellt am: 27. Mrz. 2023 13:41    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

ERLEIGT

Hab noch was gefunden was funktioniert 

https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/removing-layer-prefix-created-by-binding-xref/td-p/2349414

------------------
Es ist kein Zeichen geistiger Gesundheit, gut angepasst an eine zutiefst kranke Gesellschaft zu sein.

Jiddu Krishnamurti

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

cadwomen
Ehrenmitglied V.I.P. h.c.
Mädchen für fast alles


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

Beiträge: 2973
Registriert: 26.08.2002

ACAD R11 - 2018.1.2
(Plant3D)
AVIS
ACAD LT 2013- 2020
ZWCAD 2015 Versuch "nun ja"
[s]History P3D 2012/(13) SP und Hotfix([/s]<P>
Windows 10 / 64 Bit
Xeon CPU 3.5GHz
16GB Ram
NVIDIA Quadro P2000
3x Dell TV100 88P Monitore

erstellt am: 27. Mrz. 2023 14:03    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 nebuCADnezzar 10 Unities + Antwort hilfreich

gelinkt

Link ADSK Lösung für das Thema

cu cw

------------------
Also ich finde Unities gut ... und andere sicher auch
------------------------------------------------
cadwomen™
Plant ist nur die Spitze des Berges der da treibt ?

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

nebuCADnezzar
Mitglied



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

Beiträge: 268
Registriert: 17.10.2007

AutoCAD 2019
Inventor 2019
64 bit Win 10
Intel I7 10610U 1.8 GHz
Quadro P520
32 GB Ram

erstellt am: 27. Mrz. 2023 16:34    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

Hatte mich zu früh gefreut. Leider funktionieren beide Ansätze nicht ganz... der einte vereinigt Layer nicht wenn schon bestehend und der andere macht nen neuen Layer_2 (oder auch _3 _4 _5 _6 je nach dem wiviele male der selbe Layer in verschiedenen XREFS vorkommt).

Bin noch am Suchen wie ich dass abfange...

Einmal ne grosse Liste machen und alles abfangen :-)

Code:
(command "LAYZUSF" "N" "LAYER_2" "" "N" "LAYER" "J")
(command "LAYZUSF" "N" "LAYER_3" "" "N" "LAYER" "J")
(command "LAYZUSF" "N" "LAYER_4" "" "N" "LAYER" "J")

------------------
Es ist kein Zeichen geistiger Gesundheit, gut angepasst an eine zutiefst kranke Gesellschaft zu sein.

Jiddu Krishnamurti

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

Alles

erstellt am: 27. Mrz. 2023 17:21    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 nebuCADnezzar 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von nebuCADnezzar:
Du überschätz meine cooding fähigkeiten 

Okay, dann nehme es als Kompliment 


Aus dem RBP kannst du doch genau das Gewünschte basteln.
1. Lassen wir mal alles außer der Layer-Geschichte WEG, also Zeile " (vlax-for Obj (vla-get-Blocks ActDoc)" und Nachfolgendes auskommentieren
2. Es wird getestet (pro Layer) ob der Layernamen auch nach Bearbeitung durch die Funktion RemoveBindPrefix noch immer identisch ist (er wurde nicht verändert)
  oder nicht (dann hat die Funktion den Layernamen wohl gekürzt).

Eine gute Basis für dein vorhaben,
auch wenn die Funktion RemoveBindPrefix nach meinem Geschmack etwas zu einfach zu Werke geht, auch wenn mein wcmatch-Vergleich
weiterhin nur ein (zu) simples Beispiel zeigt - für den Fall es sind Sonderzeichen im Einsatz.


Original:
  (vlax-for Obj (vla-get-Layers ActDoc)
    (setq Name (vla-get-Name Obj))
    (if (/= (setq NewName (RemoveBindPrefix Name)) Name)
      (if (vl-catch-all-error-p
            (vl-catch-all-apply 'vla-put-Name (list Obj NewName))
            ) ;_ end of vl-catch-all-error-p
        (prompt (strcat "\n Layer: " Name " was not renamed."))
        ) ;_ end of if
      ) ;_ end of if
    ) ;_ end of vlax-for


Geändert:
; Nicht schön, nicht sicher, aber als Hilfestellung..

  (vlax-for Obj (vla-get-Layers ActDoc)
    (setq Name (vla-get-Name Obj))
    (if (/= (setq NewName (RemoveBindPrefix Name)) Name)
      (if (vl-catch-all-error-p
            (vl-catch-all-apply 'vla-put-Name (list Obj NewName))
            ) ;_ end of vl-catch-all-error-p
            (command "_.LAYMRG" "_n" Name "" "_n" NewName "_y")
        ) ;_ end of if
      ) ;_ end of if
    ) ;_ end of vlax-for

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