| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Text trimmen (2099 mal gelesen)
|
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009
|
erstellt am: 28. Mai. 2012 07:59 <-- editieren / zitieren --> Unities abgeben:
|
Meldin Mitglied
Beiträge: 381 Registriert: 15.07.2011 ACA2020 Windows10
|
erstellt am: 28. Mai. 2012 08:36 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Hallo, ich denke mit (textbox elist) sollte sich da was zusammenstellen lassen. ------------------ Gruß Wolfgang Alias: Rabbit007 und Wolli1 die aus unerklärlichen Gründen aus dem System hier gelöscht wurden. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009
|
erstellt am: 28. Mai. 2012 09:21 <-- editieren / zitieren --> Unities abgeben:
Weiss nicht genau, was du meinst. Die Textzeile zu zerlegen und die einzelnen Wörter zu erzeugen stellt kein Problem dar. Ich weiss nur nicht wie ich die Position des Wortes ermitteln kann ? Code:
(defun c:strtrim (/ s n) (princ "\nTrimmt einen Text an den Leerzeichen") (defun convert ( str del / pos lst ) (while (setq pos (vl-string-search del str)) (setq lst (cons (substr str 1 pos) lst) str (substr str (+ pos 1 (strlen del))) ) ) (reverse (cons str lst)) ) (setq s (cdr (assoc 1 (setq obj (entget (car (entsel "\nWähle Text! ")))))) n (convert s " ") i 0) (while (repeat (length n) (setq txt (nth i n)) (command "text" (cdr (assoc 10 obj)) "0" txt) (setq i (1+ i) ) ) ) (princ) )
------------------ Gruss Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Meldin Mitglied
Beiträge: 381 Registriert: 15.07.2011 ACA2020 Windows10
|
erstellt am: 28. Mai. 2012 10:30 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Ich denke wenn du den Text auf das erst Wort kürzt und dann Textbox darauf anwendest kannst du so die einfüge koordinaten für das 2te Wort herausfinden und dann wieder auf das 2te Wort Textbox um so die Werte für das 3te Wort usw usw. ------------------ Gruß Wolfgang Alias: Rabbit007 und Wolli1 die aus unerklärlichen Gründen aus dem System hier gelöscht wurden. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009
|
erstellt am: 28. Mai. 2012 13:40 <-- editieren / zitieren --> Unities abgeben:
Danke Wolfgang! Ich konnte mir jetzt soweit helfen. Ich verstehe eigentlich gar nicht warum die Ursprungszeile gelöscht wird. Ich sage ja immer nur das ein Wort aus der Textzeile immer an das Vorgehende angesetzt werden soll. übrig bleibt das letzte Wort, welches auf dem Textursprung liegt und eigentlich gelöscht werden kann. Vielleicht kann das einer lösen Code:
(defun c:strtrim (/ ;;; obj ; gewähltes Textobjekt ;;; s ; Inhalt der Testzeile "1 2 3 4" ;;; n ; umgewandelte Textzeile "1" "2" "3" "4" ;;; txp ; Einfügepunkt vom Textobjekt ;;; txw ; Das jeweilige Wort aus der Textzeile ;;; txl ; die Länge des jeweiligen Wortes ) (princ "\nTrimmt einen Text an den Leerzeichen") (defun convert ( str del / pos lst ) (while (setq pos (vl-string-search del str)) (setq lst (cons (substr str 1 pos) lst) str (substr str (+ pos 1 (strlen del))) ) ) (reverse (cons str lst)) ) (setq s (cdr (assoc 1 (setq obj (entget (car (entsel "\nWähle Text! ")))))) n (convert s " ") txp (cdr (assoc 10 obj)) i 0) (while (repeat (length n) (setq txw (entmod (subst (cons 1 (nth i n)) (assoc 1 obj) obj))) (setq txl (caar (cdr (textbox (list (assoc 1 txw)))))) (command "_text" txp "0" (cdr (assoc 1 txw))) (setq txp (polar txp 0 (+ txl 2.15))) (setq i (1+ i)) ) ) (princ) )
------------------ Gruss Dirk [Diese Nachricht wurde von cadplayer am 28. Mai. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Meldin Mitglied
Beiträge: 381 Registriert: 15.07.2011 ACA2020 Windows10
|
erstellt am: 28. Mai. 2012 15:20 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Zitat: Ich verstehe eigentlich gar nicht warum die Ursprungszeile gelöscht wird. Ich sage ja immer nur das ein Wort aus der Textzeile immer an das Vorgehende angesetzt werden soll.
NeinCode: (setq txw (entmod (subst (cons 1 (nth i n)) (assoc 1 obj) obj)))
hier löschst du den gesamten text und erstzt ihn durch dein erstes Wort. Und hier Code: (command "_text" txp "2.5" "0" (cdr (assoc 1 txw)))
in der Zeile solltest du (fett Markiert) noch die Texthöhe eintragen oder aus dem vorherigen Text abfragen. ------------------ Gruß Wolfgang Alias: Rabbit007 und Wolli1 die aus unerklärlichen Gründen aus dem System hier gelöscht wurden. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009
|
erstellt am: 29. Mai. 2012 12:56 <-- editieren / zitieren --> Unities abgeben:
Hi Wofgang! Normal zu deiner zweiten Zeile, wenn ich die so wie deine Vorgabe in die Befehlszeile kopiere funktioniert das. Jedoch nicht i der Schleife (command "_text" "_s" txstyle txpoint txangle txwert) will so auch nicht gehen, in welcher Reihenfolge müssen denn die Texteigenschaften stehen, kriegs irgendwie nicht hin. ------------------ Gruss Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13508 Registriert: 30.11.2003 .
|
erstellt am: 29. Mai. 2012 15:24 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
|
Meldin Mitglied
Beiträge: 381 Registriert: 15.07.2011 ACA2020 Windows10
|
erstellt am: 29. Mai. 2012 15:52 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Mache es doch mal Schitt für Schritt in der Befehlszeile und geb mal _text ein dann wirst du sehen das der Befehl text alles für angaben benötigt und in welcher Reihnefolge. ------------------ Gruß Wolfgang Alias: Rabbit007 und Wolli1 die aus unerklärlichen Gründen aus dem System hier gelöscht wurden. [Diese Nachricht wurde von Meldin am 29. Mai. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
gmk Mitglied Dipl.-Ing.(FH) Vermessung
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: 31. Mai. 2012 11:14 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Zitat: Original erstellt von cadplayer: Hi Wofgang!Normal zu deiner zweiten Zeile, wenn ich die so wie deine Vorgabe in die Befehlszeile kopiere funktioniert das. Jedoch nicht i der Schleife (command "_text" "_s" txstyle txpoint txangle txwert) will so auch nicht gehen, in welcher Reihenfolge müssen denn die Texteigenschaften stehen, kriegs irgendwie nicht hin.
Servus Dirk1 Parameter in COMMAND "_Text" sind abhängig vom Textstil (->Texthöhe 0 oder Vorgabe). Mach ' den Text halt mit ENTMAKE, dann mußt dich um den Stil nicht kümmern. Ciao Georg ------------------ http://www.xxx-tausend.info Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009
|
erstellt am: 31. Mai. 2012 13:33 <-- editieren / zitieren --> Unities abgeben:
Servus Georg! Ich bin gerade darauf gekommen, wenn ich mit command den Text erzeuge, dann muss ich vorher den command _style ausführen
Code: (defun c:ttrim (/ obj ; gewähltes Textobjekt s ; Inhalt der Testzeile "1 2 3 4" n ; umgewandelte Textzeile "1" "2" "3" "4" txa ; Textwinkel txp ; Einfügepunkt vom Textobjekt txh ; Texthöhe txs ; Textstyle txw ; Das jeweilige Wort aus der Textzeile txl ; die Länge des jeweiligen Wortes ) (princ "\nTrimmt einen Text an den Leerzeichen") (defun convert ( str del / pos lst ) (while (setq pos (vl-string-search del str)) (setq lst (cons (substr str 1 pos) lst) str (substr str (+ pos 1 (strlen del))) ) ) (reverse (cons str lst)) ) (setq s (cdr (assoc 1 (setq obj (entget (car (entsel "\nWähle Text! ")))))) n (convert s " ") txa (* (cdr (assoc 50 obj)) (/ 180 pi)) txp (cdr (assoc 10 obj)) txs (cdr (assoc 7 obj)) txh (cdr (assoc 40 obj)) i 0 ) (command "_style" txs "" txh "" txa "" "" "") (while (repeat (length n) (setq txw (entmod (subst (cons 1 (nth i n)) (assoc 1 obj) obj))) (setq txl (caar (cdr (setq tb (textbox (list (assoc 1 txw))))))) (command "_text" txp txa (cdr (assoc 1 txw))) (setq txp (polar txp (* txa (/ pi 180)) (+ txl (* txh 0.85544)))) (setq i (1+ i)) ) (entdel (cdr (assoc -1 txw))) ) (princ) )
Mit entmake wird alles erzeugt, dennoch error: bad DXF group: (1)Und die Leerzeichen werden nicht korrekt dargestellt (proportional zur Texthöhe mit Faktor 0.852) Cadmium dein code funktioniert natürlich bestens - Danke, dennoch vielleicht sieht einer den Irrtum in meinem code
[CODE][ (defun c:ttrim (/ ;;; obj ; gewähltes Textobjekt ;;; s ; Inhalt der Testzeile "1 2 3 4" ;;; n ; umgewandelte Textzeile "1" "2" "3" "4" ;;; txa ; Textwinkel ;;; txp ; Einfügepunkt vom Textobjekt ;;; txh ; Texthöhe ;;; txs ; Textstyle ;;; txw ; Das jeweilige Wort aus der Textzeile ;;; txl ; die Länge des jeweiligen Wortes ) (princ "\nTrimmt einen Text an den Leerzeichen") (defun convert ( str del / pos lst ) (while (setq pos (vl-string-search del str)) (setq lst (cons (substr str 1 pos) lst) str (substr str (+ pos 1 (strlen del))) ) ) (reverse (cons str lst)) ) (setq s (cdr (assoc 1 (setq obj (entget (car (entsel "\nWähle Text! ")))))) n (convert s " ") txa (* (cdr (assoc 50 obj)) (/ 180 pi)) txp (cdr (assoc 10 obj)) txs (cdr (assoc 7 obj)) txh (cdr (assoc 40 obj)) i 0 ) (while (repeat (length n) (setq txw (entmod (subst (cons 1 (nth i n)) (assoc 1 obj) obj))) (setq txl (caar (cdr (setq tb (textbox (list (assoc 1 txw))))))) (entmake (list '(0 . "TEXT") (cons 1 (cdr (assoc 1 txw))) (cons 7 txs) (cons 8 (getvar "clayer")) (cons 10 txp) (cons 40 txh) (cons 50 (* txa (/ pi 180))) ) ) (setq txp (polar txp (* txa (/ pi 180)) (+ txl (* txh 0.852)))) (setq i (1+ i)) ) (entdel (cdr (assoc -1 txw))) ) (princ) ) /CODE]
------------------ Gruss Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13508 Registriert: 30.11.2003 .
|
erstellt am: 31. Mai. 2012 14:02 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
|
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009
|
erstellt am: 31. Mai. 2012 14:27 <-- editieren / zitieren --> Unities abgeben:
Sorry Ich verstehs nicht. In der var n steht bsp. das: ("TOTAL" "YTA" "" ":" "6707" "m2") Das Ausführen von (command "_text" txp txa "") führt zwangsläufig zum Abbruch, weil kein Leerzeichentext erzeugt werden kann. Mir fällt nix ein wie ich den Fall in meinen code einbauen kann ? ------------------ Gruss Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13508 Registriert: 30.11.2003 .
|
erstellt am: 31. Mai. 2012 14:48 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
|
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009
|
erstellt am: 31. Mai. 2012 15:01 <-- editieren / zitieren --> Unities abgeben:
|
gmk Mitglied Dipl.-Ing.(FH) Vermessung
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: 31. Mai. 2012 16:25 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
|
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009
|
erstellt am: 04. Jun. 2012 12:31 <-- editieren / zitieren --> Unities abgeben:
Bei mir kommt es häuftig, dass ich Texte habe in denen Zahlenwerte stehe für Berechnungen oder Zeilen umgeschrieben werden müssen. Da lässt es sich gut machen die Zeilen zu zerlegen in ein Einzelworte bzw. wieder neu verbinden. Dann dachte ich mir, wäre es auch eine gute übung zum Thema Zeichenverarbeitung. ------------------ Gruss Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |