Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  _text mit zeilenumbruch

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:  _text mit zeilenumbruch (2071 mal gelesen)
gmk
Mitglied
Dipl.-Ing.(FH) Vermessung


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

Beiträge: 667
Registriert: 23.10.2002

Autocad 2004, WS CadCompass, Normica V2000, WinXP Prof., AMD Athlon 64 X2, 2GB, NVIDIA GeForce 7600GS, HP1055CM

erstellt am: 15. Feb. 2006 10: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

hi!


(COMMAND "_-style" "romans" "romans.shx" 0.5 "0.8" "0" "N" "N" "N") 
(COMMAND "_text" '(0 0) 0 "1" "2" "3" "")

ich möchte gerne den zeilenumbruch aus acad "_text" verwenden, bekomme aber eine fehlermeldung ab dem zweiten string.

Unbekannter Befehl "2". Drücken Sie F1-Taste für Hilfe.
Unbekannter Befehl "3". Drücken Sie F1-Taste für Hilfe.

wie kann ich das mit "_text" umgehen und wie bekomme ich die weiteren
strings in eine schleife, etwa so:

(COMMAND "_-style" "romans" "romans.shx" 0.5 "0.8" "0" "N" "N" "N") 
(COMMAND "_text" '(0 0) 0 "1")
(WHILE ....
  (COMMAND (GETSTRING))
  ....
)
(COMMAND "")

ciao georg

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

marc.scherer
Ehrenmitglied V.I.P. h.c.
CAD-Administrator



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

Beiträge: 2490
Registriert: 02.11.2001

Windows 10 64bit
AutoCAD Architecture 2018/2019 (deu/eng)
AEC-Collection 2019 (Revit und Zeugs)
Wenn sich's nicht vermeiden läßt:
D-A-CH Erweiterung (mies implementierter Schrott)

erstellt am: 15. Feb. 2006 12: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 Nur für gmk 10 Unities + Antwort hilfreich

Hi,
ja, ja der Text Befehl ist in Lisp etwas störrisch.
Ich hab' mir mal so geholfen:
Code:

(defun DT:COMMAND-MLINE-TEXT
       (LST-STRINGS LST-COORDINATE REAL-HEIGHT REAL-ANGLE / FIRST REST)
  (setq FIRST (car LST-STRINGS)
        REST  (cdr LST-STRINGS)
  )
  (if FIRST
    (progn
      (command "_.text" LST-COORDINATE REAL-HEIGHT REAL-ANGLE FIRST)
      (foreach STR REST
        (command "_.text" "" STR)
      )
    )
  )
)

Aufruf z.B. so:
(DT:COMMAND-MLINE-TEXT '("Firstline") (getpoint "\nStartpunkt für Text: ") (getdist "\nTexthöhe: ") "100g")

oder so

(DT:COMMAND-MLINE-TEXT '("Firstline" "Secondline" "Thirdline") '(0 0) 40 90)

Könnte man noch was einbauen, was für den aktuellen Stil eine eventuell festgelegte Texthöhe abfragt und das command entsprchend ändert... Aber das ist Dein Part ;-)

------------------
Ciao,
Marc

[Diese Nachricht wurde von marc.scherer am 15. Feb. 2006 editiert.]

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

Paulchen
Mitglied
Bauing./SW-Entwickler


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

Beiträge: 1227
Registriert: 19.08.2004

erstellt am: 15. Feb. 2006 13: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 Nur für gmk 10 Unities + Antwort hilfreich

Tach!

Zitat:
wie kann ich das mit "_text" umgehen...

Ein weiterer Vorschlag - wenn auch längst nicht so elegant wie die Lösung von marc.scherer...

Code:
(defun test ()
  (command "_text" '(0 0 0) 0 "1")
  (command "_text" "" "2")
  (command "_text" "" "3")
  (princ)
)

Aufruf über (test). So wird das Problem der Fehlermeldung zumindest umgangen. Allerdings erzeugt lisp für jede neue Zeile ein neues Textelement; hat Vor- und Nachteile, je nachdem, was Du vorhast.

Zitat:
...und wie bekomme ich die weiteren
strings in eine schleife, etwa so:

Kleines Beispiel:

Code:
(defun test2 (/ string)
  (command "_text" '(0 0 0) 0 "1")
  (while (setq string (getstring T "\nMehr Text: "))
    (command "_text" "" string)
  )
  (princ)
)

Aufruf über (test2), muß mit [Esc] abgebrochen werden, der Feinschliff fehlt natürlich noch 

Freddy

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

gmk
Mitglied
Dipl.-Ing.(FH) Vermessung


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

Beiträge: 667
Registriert: 23.10.2002

Autocad 2004, WS CadCompass, Normica V2000, WinXP Prof., AMD Athlon 64 X2, 2GB, NVIDIA GeForce 7600GS, HP1055CM

erstellt am: 15. Feb. 2006 14:06    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

hi marc und freddy!

danke für eure hilfe. funzt mit beiden lösungen.
jetzt hab' ich nur noch das problem, dass jeder einzeltext auf einem extra layer sein soll, aber ich denke das wird nicht mehr mit dem zeilenumbruch funktionieren.

ciao georg

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

Paulchen
Mitglied
Bauing./SW-Entwickler


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

Beiträge: 1227
Registriert: 19.08.2004

erstellt am: 15. Feb. 2006 14:51    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 gmk 10 Unities + Antwort hilfreich

Nöö, mit meinem Vorschlag bekomme ich´s auf die Schnelle nicht hin. Sieh Dir aber mal folgendes an (als Eingabe in der Befehlszeile):

Befehl: _.-layer

mit "-" als Aufruf ohne Dialogbox, die Eingabe erfolgt über die Tastatur, der Ablauf erklärt sich von selbst, läßt sich auch in lisp einbauen.

Leider kann man die while-schleife aus o.g. "Routine" nicht weiter ergänzen, da AutoCAD auf den VOR der Schleife liegenden Befehl zurückgreift. Ich denke, prinzipiell ist das machbar, nur schaffe ich es nicht so "nebenbei". Viel Spaß beim Knabbern!

Freddy

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

marc.scherer
Ehrenmitglied V.I.P. h.c.
CAD-Administrator



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

Beiträge: 2490
Registriert: 02.11.2001

Windows 10 64bit
AutoCAD Architecture 2018/2019 (deu/eng)
AEC-Collection 2019 (Revit und Zeugs)
Wenn sich's nicht vermeiden läßt:
D-A-CH Erweiterung (mies implementierter Schrott)

erstellt am: 15. Feb. 2006 15: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 Nur für gmk 10 Unities + Antwort hilfreich

Hi,
auch kein Problem.
Nimm mal meine modifizierte Version.
Die gibt Dir 'ne Liste der erzeugten Zeilen zurück.
Diese Liste kannst Du dann ja an ein Proggie übergeben, die Dir die Zeilen auf entsprechende Layer verteilt...
Code:

;|
Funktion erzeugt via command eine oder mehrere Zeilen DText.
Argumente:
LST-STRINGS = Eine Liste aus Strings. Jedes Element wird eine Textzeile.
LST-COORDINATE = Koordinate für erste Textzeile
REAL-HEIGHT = Texthöhe der Textzeilen.
  Hat der aktuelle Textstil eine feste Höhe, so wird die temporär
  deaktiviert und wieder zurückgesetzt.
REAL-ANGLE = Winkel für den Text. Es geht auch so etwas wie 90d.
  Eben das was über die Befehlszeile auch eingegeben werden kann.

Rückgabe:
Liste von Textobjekten in der Reihenfolge der Zeilen:
z.B. (<Objektname: 7eae7120> <Objektname: 7eae7128> <Objektname: 7eae7130> )

Beispielaufrufe:
(DT:COMMAND-MLINE-TEXT
  '("Firstline")
  (getpoint "\nStartpunkt für Text: ")
  (getdist "\nTexthöhe: ")
  "100g"
)

(DT:COMMAND-MLINE-TEXT
  '("Firstline" "Secondline" "Thirdline")
  '(0 0)
  40
  90
)

(setq OBJ (DT:COMMAND-MLINE-TEXT
            '("Firstline" "Secondline" "Thirdline")
            '(0 0)
            200
            "100g"
          )
)
|;
(defun DT:COMMAND-MLINE-TEXT
      (LST-STRINGS LST-COORDINATE REAL-HEIGHT REAL-ANGLE / FIRST REST PRESETHEIGHT RETVAL)
  (setq FIRST (car LST-STRINGS)
        REST  (cdr LST-STRINGS)
  )
  (if FIRST
    (progn
      ;; Hat der Textstil eine festeingestellte Höhe?
      (if (not (zerop (setq PRESETHEIGHT
                            (cdr
                              (assoc 40 (tblsearch "Style" (getvar "textstyle")))
                            )
                      )
              )
          )
        ;; Dann Textstilhöhe variabel setzen...
        (DT:TEXTSTYLE-HEIGHT-PRESET (getvar "textstyle") 0.0)
      )
      ;; Und schon kann man die Höhe angeben ;-)
      (command "_.text" LST-COORDINATE REAL-HEIGHT REAL-ANGLE FIRST)
      (setq retval (cons (entlast) retval))
      (foreach STR REST
        (command "_.text" "" STR)
        (setq retval (cons (entlast) retval))
      )
      ;; Jetzt nur noch die Vorgabetexthöhe zurücksetzen...
      (if (not (zerop PRESETHEIGHT))
        (DT:TEXTSTYLE-HEIGHT-PRESET (getvar "textstyle") PRESETHEIGHT)
      )
    )
  )
  (reverse retval)
)


;|
Funktion setzt die Vorgabehöhe eines Textstils auf einen als Argument
zu übergebenden Wert. Ist das Argument 0, ist keine Texthöhe festgelegt.

Argumente:
STR-TEXTSTYLE = Name des Textstile
REAL-PRESET = Real oder Integer Zahl

Rückgabe:
Die Entitylist wie von entmod zurückgegeben, wenn erfolgreich.
Sonst nil

Beispielaufrufe:
(DT:TEXTSTYLE-HEIGHT-PRESET (getvar "textstyle") 0.0)

(DT:TEXTSTYLE-HEIGHT-PRESET "simplex" 50)
|;
(defun DT:TEXTSTYLE-HEIGHT-PRESET (STR-TEXTSTYLE REAL-PRESET / RETVAL STYLE)
  (if (setq STYLE (tblobjname "Style" STR-TEXTSTYLE))
    (setq
      STYLE (entget STYLE)
      RETVAL (entmod
              (subst (cons 40 REAL-PRESET) (assoc 40 STYLE) STYLE)
            )
    )
  )
  RETVAL
)


...

------------------
Ciao,
Marc

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

Paulchen
Mitglied
Bauing./SW-Entwickler


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

Beiträge: 1227
Registriert: 19.08.2004

erstellt am: 15. Feb. 2006 17:47    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 gmk 10 Unities + Antwort hilfreich

Hallo ihr!

@Mark: Feine Sache, kann man brauchen!

Allerdings viel mir als Anfänger eine - wieder mal - banalere Lösung ein, die vielleicht auch andere Einsteiger brauchen können. Meine Überlegung war, da gmk ja mehrere Texte untereinander setzen will, ab der zweiten Zeile mit einem simplen "@" und dem gewünschten Abstand zu arbeiten. Natürlich ließe sich auch hier der Abstand in Abhängigkeit von der Texthöhe definieren...

Code:
(defun test2 (/ string)
  (command "_text" pause 0 "1")
  (while (setq string (getstring T "\nMehr Text: "))
    (command "_.-layer" "m" string "")
    (command "_text" "@0,-1.5,0" 0 string)
  )
  (princ)
)

Ich habe hier mal den senkrechten Abstand (y-Richtung) als 1,5-fache Texthöhe angesetzt, da gmk mit Höhe=1 arbeitet.

Vorteil: Nun liegen die Textblöcke auf eigenen, gleichnamigen Layern und die while-Schleife kann durch den erneuten Aufruf von "_text" mit relativen Koordinaten beliebig oft durchlaufen werden.

Nachteil: Ein völliger Rohbau, unflexibel bei Winkeländerungen, unkomfortabel bei anderen Texthöhen, da man jedes Mal in der Routine den Abstand anpassen muß, etc.

Aber da hat Marc bereits was Ordentliches geliefert! Vielleicht helfen meine Ergüsse weiter...

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