| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY wird von NVIDIA zum Händler des Jahres gewählt – zum dritten Mal in Folge, eine Pressemitteilung
|
Autor
|
Thema: Layerlisten, Textbearbeitung (1101 mal gelesen)
|
Werner-Maahs.de Mitglied CAD-Dozent + Konstrukteur + Autor
Beiträge: 626 Registriert: 04.05.2005 Win XP AC 2005/6 Manchmal AC 2011
|
erstellt am: 19. Jun. 2013 15:46 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich stehe mal wieder auf', Schlauch. Das Problem: Layerliste aus AutoCAD erzeugen, so verarbeiten, dass ich diese mit Ebenen in MegaCAD nutzen kann. Ich habe ein Lisp-Datei, die mir eine veränderte Layerliste erzeugt, diese auch in eine Datei schreibt. Nun will ich diese Datei aber in einer veränderten Form haben. Bisher habe ich: Code: 0 XY_Layer1_3D XY_Layer2_2D YZ_Layer3_3D YZ_Layer4_3D ...
umgesetzt für MegaCad zu
Code: 00001: 0 00002: XY_Layer1_3D 00003: XY_Layer2_2D 00004: YZ_Layer3_3D 00005: YZ_Layer4_3D ...
Bis dahin ist noch alles in Ordnung. Das entspricht der MegaCAD-Umsetzung. Nun will ich die Datei so sortieren, dass z.B. der Layer '00100:' '00100: XY_3D'genannt wird und alle vorhandenen Layer die in AutoCAD XY_?????_3D genannt werden dahinter angeordnet werden. Beispiel des Endzustandes:
Code: 00001: 0 00003: XY_Layer2_2D ??? ??? 00100: XY_3D | 00002: XY_Layer1_3D 00101: YZ_3D | 00004: YZ_Layer3_3D | 00005: YZ_Layer4_3D ...
Das mit dem senkrechtem Strich bekomme ich sicherlich hin. Darüber habe ich mir noch keine Gedanken gemacht. Allein die Sortierung gibt mir Rätzel auf. Kann mir dabei jemand helfen? ------------------ strukturiertes Zeichnen mit Werner-Maahs Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andreas Kraus Mitglied Elektrotechniker
Beiträge: 1455 Registriert: 11.01.2006 WIN 10 ACAD 2022 BricsCAD V23
|
erstellt am: 20. Jun. 2013 09:06 <-- editieren / zitieren --> Unities abgeben: Nur für Werner-Maahs.de
So vielleicht: Code: (setq laylist '("00001: 0" "00002: XY_Layer1_3D" "00003: XY_Layer2_2D" "00004: YZ_Layer3_3D" "00005: YZ_Layer4_3D" "00100: XY_3D" "00101: YZ_3D" ) )(setq gruppenlayer_list (vl-sort (vl-remove-if-not '(lambda (name) (equal (substr name (- (strlen name) 4)) (strcat (substr name 8 3) (substr name (1- (strlen name)) 2) ) ) ) laylist ) '< ) ) (setq unterlayer_list (vl-sort (vl-remove-if '(lambda (name) (equal (substr name (- (strlen name) 4)) (strcat (substr name 8 3) (substr name (1- (strlen name)) 2) ) ) ) laylist ) '< ) ) (apply 'append (mapcar '(lambda (grp) (cons grp (mapcar '(lambda (name) (strcat "| " name)) (vl-remove-if-not '(lambda (name) (equal (substr grp (- (strlen grp) 4)) (strcat (substr name 8 3) (substr name (1- (strlen name)) 2) ) ) ) unterlayer_list ) ) ) ) gruppenlayer_list ) )
Dann noch die Layer berücksichtigen die keiner Gruppe zugeordnet werden konnten und dann sollte das gehen.
Lässt sich auch noch schöner proggen und etwas zusammenfassen aber erst mal so als Idee. ------------------ Geht nicht, gibts nicht Gruß Andreas http://kraus-cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Werner-Maahs.de Mitglied CAD-Dozent + Konstrukteur + Autor
Beiträge: 626 Registriert: 04.05.2005 Win XP AC 2005/6 Manchmal AC 2011
|
erstellt am: 20. Jun. 2013 18:36 <-- editieren / zitieren --> Unities abgeben:
Danke für Deine Antwort. Ich denke, ich werde nach eindeutigen Zeichenkette suchen und die jeweiligen Listenteile zunächst in eine getrennte Liste schreiben. Alle nicht gesuchten Elemente werden dabei in einer weiteren Liste geschrieben. Die gesuchten Zeichenketten sind z.B 'XY_' 'YZ_' '_3D'. Die Zeichen können auch mitten im Text auftauchen, also an einer nicht zu definierenden Stelle. Mein Problem ist das herausfinden, welche Listenteile diese Zeichen beinhalten. Wie die Listen bisher aufgebaut sind ist auch aus der anhängenden Lisp-Datei zu sehen. Wäre schön wenn mir geholfen werden kann. ------------------ strukturiertes Zeichnen mit Werner-Maahs Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
reltro Mitglied student
Beiträge: 125 Registriert: 08.11.2009 Acad 2012 - VBA,Lisp Revit 2012 3dsMax 2012 Rhino 5 - GH,Pyhton 3,rhino.Common<P>Win 7 - i7 4x3.2GHz - 8Gb DDR3
|
erstellt am: 21. Jun. 2013 08:57 <-- editieren / zitieren --> Unities abgeben: Nur für Werner-Maahs.de
Hallo Werner... demnach ist dein einzigstes Problem hearuszufinden ob ein String einen Suchstring beinhaltet? WIe wärs mit:
Code:
(vl-string-search "SuchString" "durchsuchterString");;gibt die Position wo der SuchString gefunden wurde zurück., oder nil wenn nicht enthalten... ;;zB. (vl-string-search "XY_" "XY_Layer1_3D") ;;-> 0 (vl-string-search "XY_" "Layer1_XY_3D") ;;-> 7 (vl-string-search "YZ_" "XY_Layer1_3D") ;;-> nil
Mit ein wenig 'if oder 'cond gewürzt, glaube ich lässt sich daraus in deinem Fall relativ einfach eine (Layer)Hierarchie aufbauen... lg Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 21. Jun. 2013 09:12 <-- editieren / zitieren --> Unities abgeben: Nur für Werner-Maahs.de
|
Werner-Maahs.de Mitglied CAD-Dozent + Konstrukteur + Autor
Beiträge: 626 Registriert: 04.05.2005 Win XP AC 2005/6 Manchmal AC 2011
|
erstellt am: 21. Jun. 2013 09:35 <-- editieren / zitieren --> Unities abgeben:
|