| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| Request a special discount on NVIDIA RTX 5000 Ada Generation GPU !, eine Pressemitteilung
|
Autor
|
Thema: Textstil (Attribute) ändern (2012 mal gelesen)
|
Attilio Mitglied Technischer Zeichner
Beiträge: 150 Registriert: 18.02.2003
|
erstellt am: 23. Nov. 2006 16:40 <-- editieren / zitieren --> Unities abgeben:
Hallo CAD-Gemeinde. Ich habe mal wieder ein kleines Problem. Und zwar möchte ich mehreren Attributen via Knopfdruck einen anderen Textstil zukommen lassen. Normalerweise ist dafür das Programm ATTEIG bestens geeignet, doch leider nimmt dieses keine Rücksicht auf "angehängte Attribute" - also die Attribute die von einer Fremdapplikation nachträglich an den Block gehangen wurden. Im Forum bin ich auf folgenden Beitrag gestossen, der mir schon weiter geholfen hat : http://ww3.cad.de/foren/ubb/Forum54/HTML/001847.shtml Das Lisp von StephanJP (txtstil.lsp) funktioniert soweit, nur ist es bei 2000 Blöcken "lästig", jeden Block einzeln auszuwählen. So nun zu meiner Frage : Kann mir da jemand ne Schleife reinbasteln, so dass ich am Anfang alle meine zu ändernden Blöcke auswählen kann ??? Oder habt ihr ne andere Vorgehensweise ? Hier mal der Code aus der LISP-Datei : (defun C:TS () (defun dxf (X) (cdr (assoc X el))) (setq ben (entsel)) (setq en (car (nentselp (cadr ben)))) (setq ben (car ben)) (while en (setq el (entget en)) (while (not (wcmatch (dxf 0) "ATTRIB,ATTDEF,TEXT")) (prompt "\nFalsches Element gewählt... Neu wählen: ") (setq ben (entsel)) (setq en (car (nentselp (cadr ben)))) (setq ben (car ben)) ) (setq th (getstring (strcat "\nneuer Textstil <" (dxf 7) ">: "))) (if (not (tblsearch "STYLE" th)) (progn (prompt ("\nTextstil nicht vorhanden. Erst laden!")) (exit) ) ) (setq el (subst (cons 7 th) (assoc 7 el) el)) (entmod el) (entupd ben) (setq en nil) (setq ben (entsel)) (setq en (car (nentselp (cadr ben)))) (setq ben (car ben)) ) )
Ich hoffe ich könnt mir helfen. Gruss Attilio Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
Beiträge: 1763 Registriert: 11.10.2004 Window 11 ACAD 2021 CIVIL 2021 BricsCAD ab V14 11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz 2.80 GHz 32.0GB RAM NVIDIA GeForce MX450<P>
|
erstellt am: 23. Nov. 2006 18:21 <-- editieren / zitieren --> Unities abgeben: Nur für Attilio
Hallo Attilo, nur auf die schnelle und ungetestet, damit solltest Du global für die Attribute von auszuwählenden Blöcken einen anderen Textstil zuweisen können. Code:
(defun c:att_ts ( / ) (princ "\nBlöcke auswählen") (if (setq aws (ssget (list (cons 0 "INSERT")))) (progn (setq ts(getstring "\nneuer Textstil: ")) (if (not (tblsearch "STYLE" ts)) (progn (alert "falscher Textstil") (exit))) (setq n 0) (princ (strcat "\n("(itoa n)"/" (itoa (sslength aws))")")) (repeat (sslength aws) (setq ent (ssname aws n)) (while (and(setq ent (entnext ent))(/=(cdr(assoc 0 (entget ent)))"SEQEND")) (if (=(cdr(assoc 0 (entget ent)))"ATTRIB") (entmod (subst (cons 7 ts)(assoc 7 (entget ent))(entget ent))))) (entupd (ssname aws n)) (setq n (+ n 1)) (princ (strcat "\r("(itoa n)"/" (itoa (sslength aws))")")) )) (alert "keine Auswahl")))
------------------ viele Grüße Jörn Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Attilio Mitglied Technischer Zeichner
Beiträge: 150 Registriert: 18.02.2003
|
erstellt am: 24. Nov. 2006 10:08 <-- editieren / zitieren --> Unities abgeben:
|
Attilio Mitglied Technischer Zeichner
Beiträge: 150 Registriert: 18.02.2003 ACAD2012 MEP, ACAD2015 MEP Revit 2015 Windows 7, 64 bit
|
erstellt am: 30. Nov. 2006 09:59 <-- editieren / zitieren --> Unities abgeben:
Hallo nochmal, wie´s nunmal so ist, jetzt hab ich das Problem nicht nur mit dem Textstil, sondern auch mit der Texthöhe (und evtl. auch mit der Textbreite). Ich habe mir das LISP angeschaut und hatte gedacht, dass ich das einfach abändern kann. Leider bin ich da nicht so fit, aber ich denke dass die Zeile... (entmod (subst (cons 7 ts)(assoc 7 (entget ent))(entget ent))))) ...die entscheidende ist, da hier wohl der neue Wert an das Objekt übergeben wird. "TS" ist ja die Benutzereingabe, würde sich hier also weiterverwenden lassen. Dazu müsste oben noch die Überprüfung der Eingabe abgeändert werden, aber in was ? Es muss ja nur überprüft werden, ob die Eingabe eine Zahl ist. ??? (if (not (tblsearch "STYLE" ts)) Könnt Ihr mir da auf die Sprünge helfen ? Ich bräuchte die Info´s für die Texthöhe und Textbreite. Und bitte nicht meckern wenn meine Vermutungen totaler Käse sind... :-)
Gruss Attilio
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
Beiträge: 1763 Registriert: 11.10.2004 Window 11 ACAD 2021 CIVIL 2021 BricsCAD ab V14 11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz 2.80 GHz 32.0GB RAM NVIDIA GeForce MX450<P>
|
erstellt am: 30. Nov. 2006 11:45 <-- editieren / zitieren --> Unities abgeben: Nur für Attilio
Hallo Attilo, wenn Du die Textbreite und Höhe noch ändern willst, dann mußst Du diese als Datentyp "REAL" abfragen: (setq TH (getreal "\nTexthöhe eingeben:")) (setq TB (getreal "\nTextbreite eingeben:")) TS ist nur der Variablenname für den eingegebenen Textstil. In der folgenden Zeile wird dieser Textstil dem Gruppencode 7 des Attributes zugewiesen. (entmod (subst (cons 7 TS)(assoc 7 (entget ent))(entget ent))) Für die Texthöhe mußt Du den Gruppencode 40 verwenden, für die Textbreite den Gruppencode 41. (entmod (subst (cons 40 TH)(assoc 40 (entget ent))(entget ent))) (entmod (subst (cons 41 TB)(assoc 41 (entget ent))(entget ent))) Vielleicht kommst Du damit ja schon weiter. ------------------ viele Grüße Jörn Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Attilio Mitglied Technischer Zeichner
Beiträge: 150 Registriert: 18.02.2003
|
erstellt am: 30. Nov. 2006 13:57 <-- editieren / zitieren --> Unities abgeben:
Hallo Jörn, vielen Dank für die Info ! Es hat mir weitergeholfen, ich kann nun auch die Textbreite und Texthöhe verändern. Schön wäre noch die Möglichkeit, die zu ändernden Attribute auswählen zu können, da er ja alle Attribute anpasst. Das ist in meinem Fall aber nicht unbedingt nötig. Vielen Dank nochmal !!! Hier mal für alle Mitleidenden den Code : Texthöhe ändern : (defun c:att_th ( / ) (princ "\nBlöcke auswählen") (if (setq aws (ssget (list (cons 0 "INSERT")))) (progn (setq TH (getreal "\nTexthöhe eingeben:")) (setq n 0) (princ (strcat "\n("(itoa n)"/" (itoa (sslength aws))")")) (repeat (sslength aws) (setq ent (ssname aws n)) (while (and(setq ent (entnext ent))(/=(cdr(assoc 0 (entget ent)))"SEQEND")) (if (=(cdr(assoc 0 (entget ent)))"ATTRIB") (entmod (subst (cons 40 TH)(assoc 40 (entget ent))(entget ent))))) (entupd (ssname aws n)) (setq n (+ n 1)) (princ (strcat "\r("(itoa n)"/" (itoa (sslength aws))")")) )) (alert "keine Auswahl"))) ______________________________________________________________________ Textbreite ändern : (defun c:att_tb ( / ) (princ "\nBlöcke auswählen") (if (setq aws (ssget (list (cons 0 "INSERT")))) (progn (setq TH (getreal "\nTextbreite eingeben:")) (setq n 0) (princ (strcat "\n("(itoa n)"/" (itoa (sslength aws))")")) (repeat (sslength aws) (setq ent (ssname aws n)) (while (and(setq ent (entnext ent))(/=(cdr(assoc 0 (entget ent)))"SEQEND")) (if (=(cdr(assoc 0 (entget ent)))"ATTRIB") (entmod (subst (cons 41 TH)(assoc 41 (entget ent))(entget ent))))) (entupd (ssname aws n)) (setq n (+ n 1)) (princ (strcat "\r("(itoa n)"/" (itoa (sslength aws))")")) )) (alert "keine Auswahl")))
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
Beiträge: 1763 Registriert: 11.10.2004 Window 11 ACAD 2021 CIVIL 2021 BricsCAD ab V14 11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz 2.80 GHz 32.0GB RAM NVIDIA GeForce MX450<P>
|
erstellt am: 30. Nov. 2006 16:09 <-- editieren / zitieren --> Unities abgeben: Nur für Attilio
Hallo Attilo, wenn Du nur für ein bestimmtes Attribut die Änderungen haben willst, dann könnte man dieses über den Attributsnamen machen. Angenommen das Attribut, welches verändert werden soll heißt "PNR": Code:
(defun c:att_tb ( / ) (princ "\nBlöcke auswählen") (if (setq aws (ssget (list (cons 0 "INSERT")))) (progn (setq TH (getreal "\nTextbreite eingeben:")) (setq n 0) (princ (strcat "\n("(itoa n)"/" (itoa (sslength aws))")")) (repeat (sslength aws) (setq ent (ssname aws n)) (while (and(setq ent (entnext ent))(/=(cdr(assoc 0 (entget ent)))"SEQEND")) (if (and(=(cdr(assoc 0 (entget ent)))"ATTRIB") (=(cdr (assoc 2 (entget ent)))"PNR")) (entmod (subst (cons 41 TH)(assoc 41 (entget ent))(entget ent))))) (entupd (ssname aws n)) (setq n (+ n 1)) (princ (strcat "\r("(itoa n)"/" (itoa (sslength aws))")")) )) (alert "keine Auswahl")))
Bei dem Attributsnamen ist auf Groß- und Kleinschreibung zu achten. ------------------ viele Grüße Jörn Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Attilio Mitglied Technischer Zeichner
Beiträge: 150 Registriert: 18.02.2003
|
erstellt am: 01. Dez. 2006 13:49 <-- editieren / zitieren --> Unities abgeben:
|