Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Rund um AutoCAD
  Lisp oder Script Textstil ä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
Autor Thema:   Lisp oder Script Textstil ändern (408 mal gelesen)
redfire
Mitglied



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

Beiträge: 21
Registriert: 05.03.2008

AutoCAD 2020, MicroStation V8i

erstellt am: 12. Aug. 2020 14:38    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 zusammen

Ich versuche ein Script oder Lisp zu erstellen, das mir die Arbeit ein wenig vereinfacht. Leider sind meine Recherchen dazu nicht wirklich erfolgreich gewesen, vielleicht kann mir jemand beim Einstieg ein wenig unterstützen?  und kennt eine gute Website wo man die LSP-Programmierung ausführlich dokumentiert ist.

Ich versuche allen Text und Mtexten auf einem bestimmten Layer "Layer1" einen bestehenden Textstil "Arial25" zuzuweisen


- Layer 1 --> Arial25
- Layer 2 --> Arial18
usw.

Leider bin ich nur zur Deklaration der Funktion gekommen

(defun C:TestFunction ()
??????
); end function

Für eure Unterstützung bedanke ich mich im voraus

------------------
Gruss
redfire

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

cadwomen
Ehrenmitglied V.I.P. h.c.
Mädchen für fast alles


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

Beiträge: 2747
Registriert: 26.08.2002

ACAD R11 - 2018.1.2
(Plant3D)
AVIS
ACAD LT 2013- 2020
ZWCAD 2015 Versuch "nun ja"
[s]History P3D 2012/(13) SP und Hotfix([/s]<P>
Windows 10 / 64 Bit
Xeon CPU 3.5GHz
16GB Ram
NVIDIA Quadro P2000
3x Dell TV100 88P Monitore

erstellt am: 12. Aug. 2020 15:16    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 redfire 10 Unities + Antwort hilfreich

Hy redfire,

einmalig oder dauernd ?

ich würde Filter oder _.QSELECT dazu nehmen und gut.

cu cw

------------------
Also ich finde Unities gut ... und andere sicher auch
------------------------------------------------
cadwomen™
Plant ist nur die Spitze des Berges der da treibt ?

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: 19970
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 12. Aug. 2020 16:15    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 redfire 10 Unities + Antwort hilfreich

Dieser Post vom 14.02.20, 11:05
http://forum.cad.de/foren/ubb/Forum145/HTML/004727.shtml#000004

Um alle Text und MText Objekte zu erreichen, nicht nur die im Modellbereich
(setq satz (ssget "_X" '((0 . "TEXT,MTEXT") (410 . "Model"))))
ersetzen durch
(setq satz (ssget "_X" '((0 . "TEXT,MTEXT"))))

Um die Auswahl einzuschränken auf einen Layer "Layer1" würde es dann so aussehn:
(setq satz (ssget "_X" '((0 . "TEXT,MTEXT") (8 . "Layer1"))))

Da bastelst du dann noch deine "Deklaration der Funktion" dazu,
welche im Fall von defun c: den Aufruf als AutoCAD-Befehl ermöglicht,
fertig.

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

spider_dd
Mitglied



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

Beiträge: 1035
Registriert: 27.11.2003

Win 10Pro
Intel(R) Core(TM) i7-7700
NVIDIA Quadro P1000
ACAD, Civil-3D 2018

erstellt am: 13. Aug. 2020 08:22    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 redfire 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von redfire:
...  und kennt eine gute Website wo man die LSP-Programmierung ausführlich dokumentiert ist.

Zum Beispiel hier und hier.

HTH
Gruß
Thomas

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

redfire
Mitglied



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

Beiträge: 21
Registriert: 05.03.2008

AutoCAD 2020, MicroStation V8i

erstellt am: 13. Aug. 2020 16:05    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

Dankeeuch allen für die Unterstützung und die praktischen Links

Hat soweit funktioniert. Aktuell habe ich für alle zu bearbeiteten Layer einen If Block kopiert. Macht glaube ich aber wenig Sinn. Bei meinen weiteren Recherchen bin ich auf die Schleife while gestossen und das arbeiten mit Listen. Hat jemand einen Tipp wie ich den Code entsprechend umbauen müsste?

Liste:
      Layer1; Arial25
      Layer2; Arial18
      Layer3; Arial25
      ....


Code:
(defun C:Planaufbereitung ()

(if (= (type
(setq satz (ssget "_X" '((0 . "TEXT,MTEXT") (8 . "Layer1"))))
      )
      'PICKSET
    )
  (mapcar '(lambda (ent_name)
    (vla-put-StyleName
      (vlax-ename->vla-object ent_name)
      "Arial25"
    )
  )
  (vl-remove-if-not
    '(lambda (dummy) (= (type dummy) 'ENAME))
    (mapcar 'cadr (ssnamex satz))
  )
  )
)

(princ "Texte vom Layer \"Layer1\" angepasst\n")


(if (= (type
(setq satz (ssget "_X" '((0 . "TEXT,MTEXT") (8 . "Layer2"))))
      )
      'PICKSET
    )
  (mapcar '(lambda (ent_name)
    (vla-put-StyleName
      (vlax-ename->vla-object ent_name)
      "Arial18"
    )
  )
  (vl-remove-if-not
    '(lambda (dummy) (= (type dummy) 'ENAME))
    (mapcar 'cadr (ssnamex satz))
  )
  )
)

(princ "Texte vom Layer \"Layer2\" angepasst\n")
(princ)
); end function


Besten Dank!

------------------
Gruss
redfire

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: 19970
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 13. Aug. 2020 17: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 Nur für redfire 10 Unities + Antwort hilfreich


While hat eigenlich eine andere Bestimmung, du möchtest ja nicht solange etwas machen bis sich eine
Bedingung ändert, sondern ganz stumpf eine Liste abarbeiten, daher würde ich es hier nicht einsetzen.

Aber FOREACH sehr gut.

Code:

(defun C:Planaufbereitung ( / satz)

(foreach DATA '(("Layer1" . "Arial25") ("Layer2" . "Arial18"))
(if (setq satz (ssget "_X" (list '(0 . "TEXT,MTEXT") (cons 8 (car DATA)))))
    (mapcar '(lambda (ent_name)
    (vla-put-StyleName
      (vlax-ename->vla-object ent_name)
      (cdr DATA)
    )
  )
(vl-remove-if-not
          '(lambda (dummy) (= (type dummy) 'ENAME))
  (mapcar 'cadr (ssnamex satz))
)
    )
)
)

(princ "\ndone.")
(princ)
); end function


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

redfire
Mitglied



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

Beiträge: 21
Registriert: 05.03.2008

AutoCAD 2020, MicroStation V8i

erstellt am: 13. Aug. 2020 21: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

Danke für den Tipp mit der Foreach schleife, funktioniert soweit eigentlich auch.
Leider ist mir nun noch aufgefallen, dass  mit vla-put-StyleName
nur mit dem Textstil die Schriftart angepasst wird, nicht aber die  entsprechenden Einstellungen aus dem Textstil übernommen werden (wie Höhe Beschriftung Ja Breitenfaktor, Neigungswinkel). Vermutlich braucht es dazu noch weiter Definitionen? Oder habe ich da was falsch verstanden?

------------------
Gruss
redfire

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: 19970
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 13. Aug. 2020 22:32    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 redfire 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von redfire:
Leider ist mir nun noch aufgefallen, dass  mit vla-put-StyleName nur mit dem Textstil die Schriftart angepasst wird,
nicht aber die  entsprechenden Einstellungen aus dem Textstil übernommen werden (wie Höhe Beschriftung Ja Breitenfaktor, Neigungswinkel).

Das stimmt (fast) zum Glück auffallend, du weist einen anderen Textstil zu, mehr nicht.
Alles was vom Textstil referenziert wird spiegelt sich dann in deinem Textobjekt wieder (Schriftart,Auf dem Kopf, Rückwärts(,Senkrecht)),
die anderen Dinge nicht, diese dienen nur als Vorgabewert für neue Objekte(Beschriftung,Höhe,Breite,Neigung).

Vermutlich braucht es dazu noch weiter Definitionen? Oder habe ich da was falsch verstanden?
Das was du geändert haben möchtest, das musst du ändern, von alleine passiert(wieder: zum Glück) nichts.



Gewünschte Daten ermitteln, dann das Objekt entsprechend ändern, wie du es bereits zuvor mit dem Textstil gemacht hast.

Herzlich willkommen in der Programmierung, da wird einem dann schnell klar was
EigAnpass, Option MTEXT, alles für einen macht. Oder gar eine Text-Wert Änderung
in der Eigenschaften-Palette, dort wird ebenso nicht unbedingt nur der entsprechende Wert
einer Eigenschaft eines Objektes geändert, sondern ein komplettes Programm startet da
welches teilweise sehr viele Schritte dem Nutzer abnimmt (ob der das gerade will oder nicht).
Im Fall von TEXT Objekten ändert die Eigenschaften-Palette beim ändern des Stils ALLE
im Stil festgelegten Eigenschaften auf den entsprechenden Vorgabewert im Stil.

Wenn du einsteigst in das Thema und Lisp spezifische Fragen hast, hier gibt es auch ein Lisp Forum
  

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

redfire
Mitglied



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

Beiträge: 21
Registriert: 05.03.2008

AutoCAD 2020, MicroStation V8i

erstellt am: 14. Aug. 2020 07:46    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 cadffm für deine Unterstützung. Ich werde mich noch ein wenig in das Thema einlesen und hoffe ich finde die Lösung. Allenfalls werde ich mich im Lisp Forum nochmals melden.

------------------
Gruss
redfire

[Diese Nachricht wurde von redfire am 14. Aug. 2020 editiert.]

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

Meldin
Mitglied



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

Beiträge: 333
Registriert: 15.07.2011

AC2018
Windows10

erstellt am: 14. Aug. 2020 08: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 redfire 10 Unities + Antwort hilfreich

Hallo
du müssest die komplette Formatierung der MTexte entfernen.
Teste das mal in deiner mapcar funktion.
Code:
(if (= (getpropertyvalue ent_name "LocalizedName" "MText"))
      (setpropertyvalue ent_name "Contents"(getpropertyvalue ent_name "Text")
      )
  )

------------------
Gruß Wolfgang

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: 19970
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 14. Aug. 2020 08:44    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 redfire 10 Unities + Antwort hilfreich

*editiert*

@Meldin
Gibt's ja nur für MText und soweit ist er doch noch lange nicht,
zudem würde das entfernen zu einem "falschen" Ergebnis führen,
denn das Entfernen interner Formatierungen macht kein Befehl/Funktion in ACAD
wenn es um einen Textstil wechsel geht (zum Glück)

@redfine
Die Lösung, konzeptionell, habe ich dir ja geschrieben - für die Umsetzung ohne copy&paste
drücke ich dir die Daumen.

AutoLisp Anfang:

In der Hilfe oder im Stil selbst ermitteln wo/welche Eigenschaften des Stils gespeichert sind
http://help.autodesk.com/view/ACD/2021/DEU/?guid=GUID-EF68AF7C-13EF-45A1-8175-ED6CE66C8FC9

In der Hilfe oder am Objekt selbst ermitteln  wo/welche Eigenschaft für a) TEXT und b) MText gespeichert werden
http://help.autodesk.com/view/ACD/2021/DEU/?guid=GUID-7D07C886-FD1D-4A0C-A7AB-B4D21F18E484

(if (or
      (and
         (tblobjname "STYLE" "Arial18")
         (setq ARIAL18 (entget ARIAL18 '("AcadAnnotative")))
      )
      <Stil "arial18" erstellen wenn nicht existent>
    )
    (progn
        jetzt kannst du mit (cdr(assoc <Gruppencode> ARIAL18)) auf die Daten im Stil zugreifen
        40,41,50(in Rad) und falls -3 vorhanden ist, dann hast du Beschriftung aktiviert und
        ob der Spaß am Layout ausgerichtet werden soll siehst du in der -3 Liste
    )
)

  

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

Manuel486
Mitglied
Technischer Zeichner Elektro


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

Beiträge: 62
Registriert: 31.01.2020

Windows 10 Pro - 64-Bit -
Lenovo Thinkstation P520 -
Intel Xeon W-2255 CPU @ 3.70 GHz 10 Kerne -
2x32GB DDR4 RAM @ 2933 MHz -
Samsung MZVLB512HAJQ-000L7 SSD 500GB -
Seagate ST1000DM003 HDD 1000GB -
NVIDIA Quadro P2200 5GB -
AutoCAD MEP 2019 - Revit 2018+2019+2020

erstellt am: 14. Aug. 2020 10:33    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 redfire 10 Unities + Antwort hilfreich


Text-anpassen.zip

 
Hallo.

Ich habe es so gelöst, siehe Zip-Datei.
Habe die chtext.lsp hier aus dem Forum.
Die Scripte sind von mir, in Co-Produktion mit CADFFM 
In dem Script ist immer eine Erklärung was gemacht wird.
Ich habe es Teilweise auf deine Bedürfnisse angepasst.
Ist aber eigentlich alles selbsterklärend.

MFG
Manuel

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

redfire
Mitglied



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

Beiträge: 21
Registriert: 05.03.2008

AutoCAD 2020, MicroStation V8i

erstellt am: 15. Aug. 2020 10:07    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 Manuel,

Danke für dein Beispiel mit der Lisp-Script Kombi. Ist auch ein interessanter Ansatz. Meine Lisp Funktion schaue ich als persönliche Challenge an. Mit Deiner Lösung aber zumindest ein alternative falls ich scheitere 

------------------
Gruss
redfire

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



Technischer Zeichner, Produktdesigner, CAD-Konstrukteur / Fachkraft oder Techniker (m/w/d) mit Berufserfahrung im Bereich CAD-Konstruktionen für den Bereich Hydraulik / Betankungstechnik

Die Leidenschaft Neues zu erfinden und Bestehendes zu verbessern ist seit mehr als 70 Jahren Teil unserer DNA. Heute sind wir technologisch führend in den Märkten Betankungstechnik und Verpackungsmaschinen. Um diesem Anspruch auch in den nächsten Jahren gerecht zu werden, bietet Alfons Haar talentierten Technikern und technikbegeisterten Ingenieuren die ideale ?Spielwiese?....

Anzeige ansehenTechnischer Zeichner, Bauzeichner
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: 19970
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 17. Aug. 2020 13:39    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 redfire 10 Unities + Antwort hilfreich

Meldin hat hier eine Variante angesprochen
welche dir die ganze Arbeit mit der Übertragung
abnehmen kann.

Schau dir an wie man setpropertyvalue getpropertyvalue verwendet.
DumpAllProperties hilft dir die Eigenschaften Namen zu ermitteln.

Gruß an Meldin

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)2020 CAD.de | Impressum | Datenschutz