Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Texthöhe ändern in Abhängigkeit von der Ausgangshöhe

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:  Texthöhe ändern in Abhängigkeit von der Ausgangshöhe (1922 mal gelesen)
Musicus
Mitglied
Staatl. gepr. Techniker


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

Beiträge: 685
Registriert: 26.07.2005

AutoCAD 2018
Linear, CATS
Windows 10

erstellt am: 22. Feb. 2012 11:52    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 Forum,

wahrscheinlich ist es mal wieder ganz einfach, aber ich krieg's nicht hin.

Problem: Ich habe in einer Zeichnung Texte mit verschiedenen Texthöhen, die in Abhändigkeit vom Ausgangswert geändert werden sollen (250 auf 125, 750 auf 550, 500 auf 350, 300 auf 150).

Das hab ich schon (erstmal nur für eine Texthöhe):

Code:

(defun c:THOEHE ( / AWS OBJ)
(setq AWS (ssget "X" '((0 . "*TEXT")(40 . 250)))
)
(setq OBJ(entget AWS)
)
(if (assoc 40 OBJ)
(setq OBJ (subst (cons 40 125)(assoc 40 OBJ)OBJ))
);end if
)

AutoCAD quittiert das mit:

Code:

Befehl: THOEHE
; Fehler: Fehlerhafter Argumenttyp: lentityp <Selection set: 70>

Kann mir jemand auf die Sprünge helfen?

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

cadffm
Moderator
良い精神




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

Beiträge: 21533
Registriert: 03.06.2002

Alles

erstellt am: 22. Feb. 2012 12:10    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 Musicus 10 Unities + Antwort hilfreich

shit, ich habe mein eigenes Posting hier versaut, jetzt gibt es nur noch eine Kurzform dazu:

Acad(entget) erwartet einen Objektnamen, du gibst aber einen Auswahlsatz(ssget) oder auch nichts - die Fehlerquelle würde es auch noch geben.

(setq n 0)
(repeat (sslength (setq AWS (ssget "_X" '((40 . 250)))))
;=====================================
  (setq OBJ (entget(ssname AWS n)))
; irgendwasmachenmitdemObjekt
;=====================================
  (setq n (1+ n))
)
Die drei Dinge, repeat sslength ssname sind sehr gut dokumentiert in der VLisp-Hilfe.

[Diese Nachricht wurde von cadffm am 22. Feb. 2012 editiert.]

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

CADmium
Moderator
Maschinenbaukonstrukteur




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

Beiträge: 13508
Registriert: 30.11.2003

.

erstellt am: 22. Feb. 2012 12:25    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 Musicus 10 Unities + Antwort hilfreich

(defun c:THOEHE ( / AWS SUBSTLIST)
(setq SUBSTLIST '((250  125)(750  550)(500  350)(300  150)))
(if(setq AWS (ssget "X" '((0 . "*TEXT"))))
  (mapcar
    '(lambda(X / OBJ OBJDATA TH NEWTH)
      (if(and(setq OBJ(cadr X))
              (setq OBJDATA(entget OBJ))
              (setq TH(cdr(assoc 40 OBJDATA)))
              (setq NEWTH(cadr(assoc TH SUBSTLIST)))
          )
        (entmod (subst(cons 40 NEWTH)(assoc 40 OBJDATA)OBJDATA))
      )
    )                             
    (ssnamex AWS) 
  )
)
)

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

Musicus
Mitglied
Staatl. gepr. Techniker


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

Beiträge: 685
Registriert: 26.07.2005

AutoCAD 2018
Linear, CATS
Windows 10

erstellt am: 22. Feb. 2012 12:26    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

Danke für eure schnellen Antworten.

cadffm, den Ansatz habe ich verstanden und werde damit noch weiter rumspielen.

Cadmium, das scheint ja alles auf einmal zu erschlagen, wenns funktioniert, werde ich das erstmal so weiterverwenden, aber zum Verstehen muss ich mehr Zeit investieren.

Sind auf jeden Fall zwei Ansätze, die ich mal noch für mich auseinander pflücken werde (Verstehen = mein Interesse, Funktionieren = Firmeninteresse).

[Diese Nachricht wurde von Musicus am 22. Feb. 2012 editiert.]

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

cadffm
Moderator
良い精神




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

Beiträge: 21533
Registriert: 03.06.2002

Alles

erstellt am: 22. Feb. 2012 12:29    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 Musicus 10 Unities + Antwort hilfreich

Laut deiner Beschreibung willst du mehrere Texte mit verschiedenen Höhen bearbeiten und das kann
man in einer Routine erledigen - siehe CADmium, der hat das sehr schön umgesetzt als Beispiel.

------------------
CAD.de System-Angaben  -  CAD on demand  -  User:FAQ(Acad)

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

Musicus
Mitglied
Staatl. gepr. Techniker


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

Beiträge: 685
Registriert: 26.07.2005

AutoCAD 2018
Linear, CATS
Windows 10

erstellt am: 22. Feb. 2012 13:12    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

Einen Teilerfolg habe ich erreicht. Cadmiums Code funktioniert einwandfrei, danke dafür.

Dann habe ich mit ssname, sslength und repeat was versucht mit leicht veränderter Aufgabenstellung (es kam der Wunsch, auch noch die Textbreite auf 0.8 zu setzen (dürfte bei Mtexten nicht gehen).
Funktioniert auch, allerdings nur einmal, wenn ich das richtig verstanden habe, sollte repeat so oft wiederholen, wie sslength vorgibt, was wiederum die Anzahl der Objekte im Auswahlsatz wiedergibt. Ich habe in meiner Testdatei 4 Texte, es wird aber nur einer geändert.

Code:
(defun c:TBREITE ( / AWS OBJ)
(setq n 0)
(repeat (sslength (setq AWS (ssget "_X" '((0 . "TEXT")))))
(setq OBJ (entget (ssname AWS n)))
(setq n (1+ n))
)
(if (assoc 41 OBJ) (setq OBJ (subst (cons 41 0.8) (assoc 41 OBJ) OBJ))
)
(entmod OBJ)
)

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

cadffm
Moderator
良い精神




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

Beiträge: 21533
Registriert: 03.06.2002

Alles

erstellt am: 22. Feb. 2012 13:25    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 Musicus 10 Unities + Antwort hilfreich

Da ich hier keine Editor erklären möchte (bei dem ich selbst der schlechteste Anwender bin):

lasse den Code doch mal so ablaufen:

Code:
(defun c:TBREITE ( / AWS OBJ)
(setq n 0)
(repeat (sslength (setq AWS (ssget "_X" '((0 . "TEXT")))))
              (setq OBJ (entget (ssname AWS n)))
(setq n (1+ n))
                (alert(strcat "Schleife für OBJ Nr." (rtos n 2 0)))
)
(if (assoc 41 OBJ) (setq OBJ (subst (cons 41 0.8) (assoc 41 OBJ) OBJ))
)
        (alert "vor Entmod von der aktuellen 'OBJ'Liste ")
(entmod OBJ)
        (alert "nach Entmod von der aktuellen 'OBJ'Liste ")
)

------------------
CAD.de System-Angaben  -  CAD on demand  -  User:FAQ(Acad)

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

neurosis
Mitglied
dipl.ing.


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

Beiträge: 222
Registriert: 22.08.2006

erstellt am: 22. Feb. 2012 13:58    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 Musicus 10 Unities + Antwort hilfreich

so sollte es funktionieren (ein paar klammern neu gesetzt):

Code:
(repeat (sslength (setq AWS (ssget "_X" '((0 . "TEXT")))))
  (setq OBJ (entget (ssname AWS n)))
  (setq n (1+ n))
  (if (assoc 41 OBJ)
    (progn
      (setq OBJ (subst (cons 41 0.8) (assoc 41 OBJ) OBJ)))
      (entmod OBJ)
    )
  )
)

gruss
marco

------------------
Marco Heuer
www.arc-aachen.de
Airport Office

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

Musicus
Mitglied
Staatl. gepr. Techniker


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

Beiträge: 685
Registriert: 26.07.2005

AutoCAD 2018
Linear, CATS
Windows 10

erstellt am: 22. Feb. 2012 14:54    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

Danke Marco, hab's verstanden und es funktioniert jetzt!

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

neo4matrix
Mitglied



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

Beiträge: 136
Registriert: 15.01.2008

erstellt am: 27. Okt. 2017 17:18    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 Musicus 10 Unities + Antwort hilfreich

Hi Leute

Das LISP von CADmium könnte ich gut gebrauchen, allerdings möchte ich alle Texte, welche kleiner als 1.5 sind auf 1.5 ändern:


Zitat:
Original erstellt von CADmium:
(defun c:THOEHE ( / AWS SUBSTLIST)
(setq SUBSTLIST '((250  125)(750  550)(500  350)(300  150)))
(if(setq AWS (ssget "X" '((0 . "*TEXT"))))
   (mapcar
     '(lambda(X / OBJ OBJDATA TH NEWTH)
       (if(and(setq OBJ(cadr X))
              (setq OBJDATA(entget OBJ))
              (setq TH(cdr(assoc 40 OBJDATA)))
              (setq NEWTH(cadr(assoc TH SUBSTLIST)))
          )
         (entmod (subst(cons 40 NEWTH)(assoc 40 OBJDATA)OBJDATA))
       )
     )                             
     (ssnamex AWS) 
   )
)
)



So hab ich die zweite Zeile verändert:

Code:
(setq SUBSTLIST '((<1.5  1.5)))

Leider funktioniert das nicht :-(

wie sollte das richtig lauten?
Besten Dank für alle Inputs.

------------------
Welcome to the Real

[Diese Nachricht wurde von neo4matrix am 27. Okt. 2017 editiert.]

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: 27. Okt. 2017 17:27    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 Musicus 10 Unities + Antwort hilfreich

Hallo Neo,
nur schnell getippt, ausprobieren mußt Du selber (erst alle Texte wählen, und nur wenn in GC 40 kleiner 1.5, dann auf 1.5 setzen mit ENTMOD)

Code:

(defun c:THOEHE ( / AWS)

(if(setq AWS (ssget "X" '((0 . "*TEXT"))))
  (mapcar
    '(lambda(X / OBJ OBJDATA TH NEWTH)
      (if(and(setq OBJ(cadr X))
              (setq OBJDATA(entget OBJ))
              (setq TH(cdr(assoc 40 OBJDATA)))
              (< TH 1.5)
             
          )
        (entmod (subst(cons 40 1.5)(assoc 40 OBJDATA)OBJDATA))
      )
    )                           
    (ssnamex AWS)
  )
)
)



------------------
viele Grüße

Jörn
http://www.bosse-engineering.com

Liniensignaturen Youtube

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

neo4matrix
Mitglied



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

Beiträge: 136
Registriert: 15.01.2008

erstellt am: 27. Okt. 2017 17:30    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 Musicus 10 Unities + Antwort hilfreich

Läuft perfekt! Besten Dank!

------------------
Welcome to the Real

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