| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Text in Attribut kopieren (2385 mal gelesen)
|
MDTiger Mitglied
Beiträge: 4 Registriert: 27.07.2009
|
erstellt am: 27. Jul. 2009 16:23 <-- editieren / zitieren --> Unities abgeben:
Hallo Zusammen, Ich habe folgendes Problem: ich möchte Texte in meinen Zeichnungen (Schemas) direkt in bestimmte Attribute meiner Blöcke kopieren. Ich habe folgende Lisp-Routine, mit der ich Texte in ein beliebiges Attribut (mit Inhalt vorausgesetzt) kopieren kann. (defun C:TXT2ATT ( / ele ele_list txt_inhalt) ;Inhalt von Text in Attribut eines anderen Blocks kopieren (setq ele (nentsel "\nWelchen Text kopieren ?")) (if ele (progn (setq ele_list (entget (car ele))) (if (= (cdr (assoc 0 ele_list)) "TEXT") (progn (setq txt_inhalt (cdr (assoc 1 ele_list))) (setq ele (nentsel "\nIn welches Attribut kopieren ?")) (if ele (progn (setq ele_list (entget (car ele))) (if (= (cdr (assoc 0 ele_list)) "ATTRIB") (progn (entmod (subst (cons 1 txt_inhalt) (assoc 1 ele_list) ele_list)) (entupd (car ele)) (princ) ) (princ "\nKein Attribut gewählt !") ) ) (princ "\nKein Attribut gewählt !") ) ) (princ "\nKein Text gewählt !") ) ) (princ "\nKein Element gewählt !") ) ) Diese Routine hätte ich gerne so geändert, das ich den Text in das Attribut "Dimension" kopieren kann ohne das ich das Attribut vorher mit Inhalt füllen muß, so das es wählbar ist. Leider sind meine Fähigkeiten was Lisp Programmierung angeht noch in den Kinderschuhen. Vielen Dank für eure hilfe. Gruß MDTiger
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Geos Mitglied Vermessungstechniker i.R.
Beiträge: 1017 Registriert: 21.09.2001 ACAD Map 2010, Win 7 Pro eigene Lisp's<P>HW: Core i7 860, 2.8 GHz 3.3 GB, NVIDIA GeForce GTS 250
|
erstellt am: 27. Jul. 2009 19:20 <-- editieren / zitieren --> Unities abgeben: Nur für MDTiger
Zitat: ...(nentsel "\nIn welches Attribut kopieren ?"))...
Stattdessen kannst Du mit (entsel) die Blockreferenz wählen und dann mit (entnext) die Attribute durchgehen. Auf diese Art kannst Du auch leere Attribute ("") füllen. ------------------ Schöne Grüße Ernst www.geopaint.at Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Oliver M Mitglied Dipl.-Ing.
Beiträge: 50 Registriert: 01.07.2002 Win2000, AcadMap 2008, WS-Landcad 2008 AMD Athlon 64x2 4600+, 2 GB RAM Nvidia GeForce 7600 GS
|
erstellt am: 11. Aug. 2009 12:54 <-- editieren / zitieren --> Unities abgeben: Nur für MDTiger
|
Dorfy Mitglied Double-Dipl.-Ing. Bleistiftanspitzer
Beiträge: 900 Registriert: 21.07.2006 AutoCad2007, ProE, HiCad
|
erstellt am: 11. Aug. 2009 13:34 <-- editieren / zitieren --> Unities abgeben: Nur für MDTiger
hi, mit netsel könnte es so gehen (setq vlaObj(vlax-ename->vla-object(car (nentsel)))) (vl-catch-all-apply 'vla-put-TextString(list vlaObj "blabla_dein_string_blabla")) Aber Ernst sein Weg ist wohl besser aber auch etwas komplizierter ------------------ Mfg Heiko Elefantenjagd in Afrika "... LISP-Programmierer bauen einen Irrgarten aus Klammern und hoffen, dass sich der Elefant darin verirrt..." (www.uni-leipzig.de/~rotheh/elefant.htm) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Oliver M Mitglied Dipl.-Ing.
Beiträge: 50 Registriert: 01.07.2002 Win2000, AcadMap 2008, WS-Landcad 2008 AMD Athlon 64x2 4600+, 2 GB RAM Nvidia GeForce 7600 GS
|
erstellt am: 11. Aug. 2009 14:01 <-- editieren / zitieren --> Unities abgeben: Nur für MDTiger
Hi Dorfy, also wenn ich dich richtig verstehe, soll ich die Zeile 10: " (setq ele (nentsel "\nIn welches Attribut kopieren ?"))" ersetzten durch die zwei Zeilen: "(setq vlaObj(vlax-ename->vla-object(car (nentsel)))) (vl-catch-all-apply 'vla-put-TextString(list vlaObj "blabla_dein_string_blabla"))" ? Diese vla-Befehle sind mir fremd, meine Lisp-Kurs ist doch schon eine ganze Weile her, stelle ich fest (ca. 5 Jahre). Könntest Du das bitte etwas ausführlicher schreiben? Danke! Oliver
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dorfy Mitglied Double-Dipl.-Ing. Bleistiftanspitzer
Beiträge: 900 Registriert: 21.07.2006 AutoCad2007, ProE, HiCad
|
erstellt am: 11. Aug. 2009 14:18 <-- editieren / zitieren --> Unities abgeben: Nur für MDTiger
Hi, hmm so einfach ist es nicht, sorry hatte ein wenig lisp-kenntnisse vorausgesetzt... kopier mal die Zeilen in deine Eingabeaufforderung...(Attribut wählen nicht vergessen) (war halt nur ein Denkansatz) ------------------ Mfg Heiko Elefantenjagd in Afrika "... LISP-Programmierer bauen einen Irrgarten aus Klammern und hoffen, dass sich der Elefant darin verirrt..." (www.uni-leipzig.de/~rotheh/elefant.htm) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dorfy Mitglied Double-Dipl.-Ing. Bleistiftanspitzer
Beiträge: 900 Registriert: 21.07.2006 AutoCad2007, ProE, HiCad
|
erstellt am: 11. Aug. 2009 15:35 <-- editieren / zitieren --> Unities abgeben: Nur für MDTiger
Versuch mal... (defun C:TXT2ATT_Dimension (/ ele ele_list txt_inhalt bl atts tagname) ;;Inhalt von Text in Attribut eines anderen Blocks kopieren (setq ele (nentsel "\nWelchen Text kopieren ?")) (if ele (progn (setq ele_list (entget (car ele))) (if (= (cdr (assoc 0 ele_list)) "TEXT") (progn (setq txt_inhalt (cdr (assoc 1 ele_list))) (setq ele (entsel "\nWohin kopieren ?")) (if ele ;;;;;;;;;;;;;;;;;;;;;;;;;;;; (progn (setq bl (vlax-ename->vla-object (car ele)) tagname "Dimension" ;;<---- ) (if (and (= (vla-get-hasattributes bl) :vlax-true) (safearray-value (setq atts (vlax-variant-value (vla-getattributes bl) ) ) ) ) (foreach tag (vlax-safearray->list atts) (if (= (strcase tagname) (strcase (vla-get-tagstring tag)) ) (vla-put-TextString tag txt_inhalt) ) ) (vla-update bl) ) ) ;;;;;;;;;;;;;;;;;;;;;;;;; (princ "\nKein Attribut gewählt !") ) ) (princ "\nKein Text gewählt !") ) ) (princ "\nKein Element gewählt !") ) (princ) ) ------------------ Mfg Heiko Elefantenjagd in Afrika "... LISP-Programmierer bauen einen Irrgarten aus Klammern und hoffen, dass sich der Elefant darin verirrt..." (www.uni-leipzig.de/~rotheh/elefant.htm) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Oliver M Mitglied Dipl.-Ing.
Beiträge: 50 Registriert: 01.07.2002 Win2000, AcadMap 2008, WS-Landcad 2008 AMD Athlon 64x2 4600+, 2 GB RAM Nvidia GeForce 7600 GS
|
erstellt am: 11. Aug. 2009 16:09 <-- editieren / zitieren --> Unities abgeben: Nur für MDTiger
Hallo Heiko, entschuldige die späte Antwort - hier geht einiges durcheinander... Ein besonders großes DANKE für diese Lösung; was du so alles kannst (so aus dem Ärmel geschüttelt...)! Ich habe mit Hilfe der Geotools an die Stelle jeden Textes zusätzlich einen Block setzen können. In diesen habe ich dann mit Hilfe deiner Routine den Textwert in das Attribut schreiben können. Damit hatte ich dann das, wonach ich gesucht hatte, auch wenn ich für jede Fläche den Block einzeln "anpacken" muss (Den Namen des Attributes in der Lisp konnte ich ja ohne Probleme ändern; oder eben im Block - auch das wäre gegangen) 10Us4u Außerdem hat mir ein hiesiger ehemaliger Kollege noch einen Tip für eine zweite Lösung gegeben. a.n. hat das auch sehr schön in meinem eigenen Thema "Text zu Attribut" zusammengefasst. Also nochmal Danke an alle, die sich mit mir Gedanken gemacht haben. Weiterhin fröhliches Lispeln Oliver Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MDTiger Mitglied
Beiträge: 4 Registriert: 27.07.2009
|
erstellt am: 11. Aug. 2009 16:57 <-- editieren / zitieren --> Unities abgeben:
|