Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Textstil (Attribute) ändern

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:  Textstil (Attribute) ändern (1928 mal gelesen)
Attilio
Mitglied
Technischer Zeichner


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

Beiträge: 150
Registriert: 18.02.2003

erstellt am: 23. Nov. 2006 16:40    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 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


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

Beiträge: 1734
Registriert: 11.10.2004

Window 10
ACAD 2021
CIVIL 2021
BricsCAD V14-V22
Intel(R) Core(TM)i5-8250U CPU @ 1.60GHz 1.80 GHz
16.0GB RAM
NVIDIA GeForce GTX 1050<P>

erstellt am: 23. Nov. 2006 18: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 Attilio 10 Unities + Antwort hilfreich

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


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

Beiträge: 150
Registriert: 18.02.2003

erstellt am: 24. Nov. 2006 10:08    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 Jörn,

es funktioniert wunderbar !
Vielen Dank für die schnelle Hilfe.

Ich liebe dieses Forum !!!

Gruss Attilio

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

Attilio
Mitglied
Technischer Zeichner


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

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 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 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


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

Beiträge: 1734
Registriert: 11.10.2004

Window 10
ACAD 2021
CIVIL 2021
BricsCAD V14-V22
Intel(R) Core(TM)i5-8250U CPU @ 1.60GHz 1.80 GHz
16.0GB RAM
NVIDIA GeForce GTX 1050<P>

erstellt am: 30. Nov. 2006 11:45    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 Attilio 10 Unities + Antwort hilfreich

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


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

Beiträge: 150
Registriert: 18.02.2003

erstellt am: 30. Nov. 2006 13:57    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 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


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

Beiträge: 1734
Registriert: 11.10.2004

Window 10
ACAD 2021
CIVIL 2021
BricsCAD V14-V22
Intel(R) Core(TM)i5-8250U CPU @ 1.60GHz 1.80 GHz
16.0GB RAM
NVIDIA GeForce GTX 1050<P>

erstellt am: 30. Nov. 2006 16:09    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 Attilio 10 Unities + Antwort hilfreich

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


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

Beiträge: 150
Registriert: 18.02.2003

erstellt am: 01. Dez. 2006 13:49    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 Jörn !

Es funktioniert wunderbar.
Vielen Dank !

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