| |
| 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, eine Pressemitteilung
|
Autor
|
Thema: renameblock.lsp (839 mal gelesen)
|
stolti Mitglied technischer zeichner
Beiträge: 373 Registriert: 05.09.2007 auto_cad 2008 athena 2008 DELL Precision PWS390 Intel Core2 CPU 6600 2gb RAM 2.40 GHz
|
erstellt am: 05. Jun. 2008 21:17 <-- editieren / zitieren --> Unities abgeben:
hallo leute. ich hab hier von herrn cadmium freundlicherweise eine tolle lisp bekommen. (defun C:LAYOUTRENAME (/ ITEM LAYOUTLISTE) (vl-load-com) (setq NAME (cadr(fnsplitl(getvar"dwgname")))) (vlax-for item(vla-get-layouts (vla-get-activedocument(vlax-get-acad-object)) ) (setq LAYOUTLISTE(cons(list ITEM (vla-get-name ITEM) (vla-get-taborder ITEM) ) LAYOUTLISTE ) ) ) (setq NR 0) (foreach LAYOUT (cdr(vl-sort LAYOUTLISTE '(lambda(X1 X2)(<(caddr X1) (caddr X2))))) (if(not(vl-catch-all-error-p (vl-catch-all-apply 'vla-put-name(list (car LAYOUT)(strcat NAME "-"(itoa NR))) ) ) ) (setq NR(1+ NR)) ) ) ) ich möchte allerdings das teil so modifizieren, dass er mir die layouts nicht durchnummeriert, sondern durchbuchstabiert, d.h. a,b,c als suffix verwendet. ich hab das jeztt mit hilfe ausm autocadforum mal probiert. (defun C:LAYOUTRENAME (/ ITEM LAYOUTLISTE) (vl-load-com) (setq NAME (cadr(fnsplitl(getvar"dwgname")))) (vlax-for item(vla-get-layouts (vla-get-activedocument(vlax-get-acad-object)) ) (setq LAYOUTLISTE(cons(list ITEM (vla-get-name ITEM) (vla-get-taborder ITEM) ) LAYOUTLISTE ) ) ) (setq NR (chr97)) (foreach LAYOUT (cdr(vl-sort LAYOUTLISTE '(lambda(X1 X2)(<(caddr X1) (caddr X2))))) (if(not(vl-catch-all-error-p (vl-catch-all-apply 'vla-put-name(list (car LAYOUT)(strcat NAME "-"(itoa NR))) ) ) ) (setq NR(1+ NR)) ) ) ) das mit dem chr 97 klappt auch toll. allerdings weiß ich jetzt nicht mehr weiter, wie ich ihm unten bei (setqu NR(1+ NR) dads so verklickere, dass er mir quasi bei (chr 97) auf (chr 98) hochzählt. kann mir da mal jemand tipps geben? ich bin blutiger anfänger und wills lernen. aber alleine bin ich aufgeschmissen. DANKE schonmal. stolti Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 05. Jun. 2008 21:27 <-- editieren / zitieren --> Unities abgeben: Nur für stolti
das mit der NR lass mal so.. änder lieber 'vla-put-name(list (car LAYOUT)(strcat NAME "-"(chr (+ 96 NR)))) also:
(defun C:LAYOUTRENAME (/ ITEM LAYOUTLISTE) (vl-load-com) (setq NAME (cadr(fnsplitl(getvar"dwgname")))) (vlax-for item(vla-get-layouts (vla-get-activedocument(vlax-get-acad-object)) ) (setq LAYOUTLISTE(cons(list ITEM (vla-get-name ITEM) (vla-get-taborder ITEM) ) LAYOUTLISTE ) ) ) (setq NR 0) (foreach LAYOUT (cdr(vl-sort LAYOUTLISTE '(lambda(X1 X2)(<(caddr X1) (caddr X2))))) (if(not(vl-catch-all-error-p (vl-catch-all-apply 'vla-put-name(list (car LAYOUT)(strcat NAME "-"(chr (+ 96 NR)))) ) ) ) (setq NR(1+ NR)) ) ) )
------------------ - 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 |
wronzky Ehrenmitglied V.I.P. h.c. CAD-Dienstleistungen für Architekten
Beiträge: 2154 Registriert: 02.05.2005 CAD: AutoCAD 2.6 bis 2014 ADT 2005 - 2014 Arcibem System: Windows 2000, XP, NO VISTA Internet-Startseite: http://www.archi.de
|
erstellt am: 05. Jun. 2008 21:30 <-- editieren / zitieren --> Unities abgeben: Nur für stolti
Hallo Tobias, also (chr 97) macht nichts anderes als aus dem ASCII-Code 97 den zugehörigen Buchstaben zu kreieren. Anstelle der festen Zahl 97 kann aber auch eine Variable stehen. Wenn Du also mit "a" anfangen willst, dann setzt Du als Startnummer 97: (setq NR 97) - statt (setq NR 0), und verwendest diese dann als ASCII-Code: (chr NR)(itoa NR) wandelt die Ganzzahl NR in einen Text (= String) um. Das brauchst Du dann nicht mehr, da (chr ...) ja schon einen Text liefert. Also schreibst Du anstelle (itoa NR) (chr NR). Hoffe, Du kommst damit schon weiter, Grüsse, Henning [EDIT]Und schon wieder...[/EDIT] ------------------ Henning Jesse VoxelManufaktur Computer-Dienstleistungen für Architekten und Ingenieure http://www.voxelman.de [Diese Nachricht wurde von wronzky am 05. Jun. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
stolti Mitglied technischer zeichner
Beiträge: 373 Registriert: 05.09.2007 auto_cad 2008 athena 2008 DELL Precision PWS390 Intel Core2 CPU 6600 2gb RAM 2.40 GHz
|
erstellt am: 05. Jun. 2008 23:16 <-- editieren / zitieren --> Unities abgeben:
soweit klingt das ganze logisch. soweit ich das jetzt "beurteilen" kann. wenn ich die lisp aber reinlade und den befehl starte kommt: nil (not in line, das weiß ich sogar. ). da muss noch viel wasser die donau runterfließen, bis das mit mir was wird. ... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
stolti Mitglied technischer zeichner
Beiträge: 373 Registriert: 05.09.2007 auto_cad 2008 athena 2008 DELL Precision PWS390 Intel Core2 CPU 6600 2gb RAM 2.40 GHz
|
erstellt am: 05. Jun. 2008 23:17 <-- editieren / zitieren --> Unities abgeben:
|
wronzky Ehrenmitglied V.I.P. h.c. CAD-Dienstleistungen für Architekten
Beiträge: 2154 Registriert: 02.05.2005 CAD: AutoCAD 2.6 bis 2014 ADT 2005 - 2014 Arcibem System: Windows 2000, XP, NO VISTA Internet-Startseite: http://www.archi.de
|
erstellt am: 05. Jun. 2008 23:34 <-- editieren / zitieren --> Unities abgeben: Nur für stolti
hm... Sieht Dein code denn jetzt so aus: Code: (defun C:LAYOUTRENAME (/ ITEM LAYOUTLISTE) (vl-load-com) (setq NAME (cadr(fnsplitl(getvar"dwgname")))) (vlax-for item(vla-get-layouts (vla-get-activedocument(vlax-get-acad-object)) ) (setq LAYOUTLISTE(cons(list ITEM (vla-get-name ITEM) (vla-get-taborder ITEM) ) LAYOUTLISTE ) ) ) (setq NR 97) (foreach LAYOUT (cdr(vl-sort LAYOUTLISTE '(lambda(X1 X2)(<(caddr X1) (caddr X2))))) (if(not(vl-catch-all-error-p (vl-catch-all-apply 'vla-put-name(list (car LAYOUT)(strcat NAME "-"(chr NR))) ) ) ) (setq NR(1+ NR)) ) ) )
Grüsse Henning (PS: auf den Thread-Namen hab' ich jetzt gar nicht geachtet ) ------------------ Henning Jesse VoxelManufaktur Computer-Dienstleistungen für Architekten und Ingenieure http://www.voxelman.de [Diese Nachricht wurde von wronzky am 05. Jun. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
stolti Mitglied technischer zeichner
Beiträge: 373 Registriert: 05.09.2007 auto_cad 2008 athena 2008 DELL Precision PWS390 Intel Core2 CPU 6600 2gb RAM 2.40 GHz
|
erstellt am: 06. Jun. 2008 22:22 <-- editieren / zitieren --> Unities abgeben:
hallo. vielen vielen dank. funktioniert super. ich hab das sogar so kürzen können, dass mir der auf wunsch nur das erste layout benennt. und dann quasi eine funktion für numerische und literale nummerierung. wahnsinn. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |