| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Text-Bearbeitung (BricsCAD) (2631 mal gelesen)
|
Vino Mitglied
Beiträge: 207 Registriert: 24.05.2005 Windows 10 BricsCAD V20-22
|
erstellt am: 07. Aug. 2012 09:09 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich bin kein Programmier-Profi, habs aber vor einiger Zeit geschafft, mir mit Hilfe von kleinen Code-Schnippseln und etwas Fummelei eine kleine Funktion zu schreiben. Die Aufgabe war folgende: Wir haben einen Aufsatz für ACAD, der einen Planrahmen zeichnet. Dabei werden automatisch 2 Texte mit erzeugt. Im einen wird die Plangröße (Länge * Höhe = Fläche) und im Anderen der Dateipfad ausgegeben. Da beim Kopieren der Datei oder beim Ändern der Plangröße (Strecken) diese Ausgaben nicht mehr korrekt waren, hab ich folgenden Code gebastelt: Code: (defun c: pg () (setq sblip (getvar "blipmode")) (setq scmde (getvar "cmdecho")) (setvar "blipmode" 0) (setvar "cmdecho" 0) (setq LU (getpoint "Links unten: ")) (setq RO (getpoint LU "Rechts oben: ")) (setq x_LU (car LU) y_LU (cadr LU)) (setq x_RO (car RO) y_RO (cadr RO)) (setq DX (/ (- x_RO x_LU) 1000.0)) (setq DY (/ (- y_RO y_LU) 1000.0)) (setq QM (* DX DY)) (setq TXT (strcat "Blattgröße: " (rtos DX 2 3) " x " (rtos DY 2 3) " = " (rtos QM 2 3) " m²")) (princ TXT) (entmod (list (cons 1 TXT) (assoc -1 (entget (car (entsel "Text wählen:")))) ) ) (if (> (getvar "acadver") "16.1") (entmod (list (cons 1 (strcat "Zeichnung: %<\\AcVar Filename \\f " (chr 34) "%fn7" (chr 34) ">% Plot: %<\\AcVar PlotDate \\f " (chr 34) "%c" (chr 34) ">% / %<\\AcVar Login \\f " (chr 34) "%c" (chr 34) ">%")) (assoc -1 (entget (car (entsel "Linken Text wählen:")))) ) ) (entmod (list (cons 1 (strcat "Zeichnung: "(getvar "dwgprefix")(getvar "dwgname"))) (assoc -1 (entget (car (entsel "Linken Text wählen:")))) ) ) ) (setvar "blipmode" sblip) (setvar "cmdecho" scmde) (Princ))
Nach Auswahl von 2 Eckpunkten und 2 Textobjekten wird der Inhalt des 1. Textobjekts mit der Flächenangabe und der des 2. Textobjekts mit Feldern hinterlegt, die den Dateipfad, Die Plotzeit und den Benutzer ausgeben. Für AutoCAD-Versionen <2006 (die keine Felder unterstützten) war noch eine kleine Überprüfung drin, und wurde nur reiner Text ohne Felder erzeugt. Und jetzt mein Problem: In AutoCAD (bis 2009) lief und läuft dieser Code einwandfrei und liefert auch das gewünschte Ergebnis. Jetzt wollen wir aber zumindest teilweise auf BricsCAD umsteigen und hier läuft dieser Code nicht. Nach Auswahl der Eckpunkte wird die Größe in der Befehlszeile noch korrekt ausgegeben, beim Auswählen des Textes wird dieser aber nicht geändert. Felder unterstützt BricsCAD in einzeiligen Texten leider (zum erstellen) scheinbar gar nicht. Wenn ich diese Funktion aber im AutoCAD ausführe, werden die Felder auch in BricsCAD richtig angezeigt. Woran kann das liegen? Hat jemand eine Idee? Gruß Stefan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Geos Mitglied Vermessungstechniker i.R.
Beiträge: 1017 Registriert: 21.09.2001 ACAD Map 2010, Win 7 Pro eigene Lisp's<P>HW: Core i7 860, 2.8 GHz 3.3 GB, NVIDIA GeForce GTS 250
|
erstellt am: 07. Aug. 2012 10:24 <-- editieren / zitieren --> Unities abgeben: Nur für Vino
Ich hab kein Bricscad, daher nur Vielleicht-Hinweise: Was Pfad/Dateiname betrifft könntest Du einen RTEXT - $(getvar, "dwgprefix")$(getvar, "dwgname") verwenden. Und statt
Code: (entmod (list (cons 1 TXT) (assoc -1 (entget (car (entsel "Text wählen:")))) ) )
würde ich
Code: (setq elist (entget (car (entsel "Text wählen:"))) (entmod (subst (cons 1 TXT) (assoc 1 elist) elist))
versuchen.
------------------ Schöne Grüße Ernst www.geopaint.at Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Vino Mitglied
Beiträge: 207 Registriert: 24.05.2005 Windows 10 BricsCAD V20-22
|
erstellt am: 07. Aug. 2012 11:22 <-- editieren / zitieren --> Unities abgeben:
Hallo Ernst, vielen Dank für die Tips. Dein 2. Hinweis war die Lösung für mein Hauptproblem. Damit klappt das Texte editieren jetzt. Die Sache mit Getvar klappt so auch, aber eben nur als statischer Text. Das hatte ich ja auch für AutoCAD <2006 schon in meiner ersten Funktion. Die Top-Lösung wäre halt, wenn der Dateiname, Plotdatum und Benutzer als Feld im Text wären, dann wäre das ganze nicht so Fehleranfällig (Verschieben der Datei). Allerdings befürchte ich, dass das mit BricsCAD nicht geht, da man hier auch manuell in einzeilige Texte keine Felder einbauen kann. Hoffnung hat mir nur gemacht, dass BricsCAD Felder in einzeiligen Texten korrekt anzeigt, wenn sie (mit AutoCAD) schon eingefügt sind. Ich poste hier nochmal meinen aktuellen Code, vielleicht hat ja jemand Verwendung dafür oder es fällt jemandem eine Lösung für das Feld-Problem ein... Vielleicht schafft es ja jemand, das Text-Objekt in einen Mtext umzuwandeln und dann Felder einzufügen??? Code: (defun c: pg () (setq sblip (getvar "blipmode")) (setq scmde (getvar "cmdecho")) (setvar "blipmode" 0) (setvar "cmdecho" 0) (setq LU (getpoint "Links unten: ")) (setq RO (getpoint LU "Rechts oben: ")) (setq x_LU (car LU) y_LU (cadr LU)) (setq x_RO (car RO) y_RO (cadr RO)) (setq DX (/ (- x_RO x_LU) 1000.0)) (setq DY (/ (- y_RO y_LU) 1000.0)) (setq QM (* DX DY)) (setq TXT (strcat "Blattgröße: " (rtos DX 2 3) " x " (rtos DY 2 3) " = " (rtos QM 2 3) " m²")) (princ TXT) (setq elist (entget (car (entsel "Text wählen:")))) (entmod (subst (cons 1 TXT) (assoc 1 elist) elist)) (setq elist (entget (car (entsel "Linken Text wählen:")))) (if (and (> (getvar "acadver") "16.1") (< (getvar "acadver") "18.0")) (entmod (subst (cons 1 (strcat "Zeichnung: %<\\AcVar Filename \\f " (chr 34) "%fn7" (chr 34) ">% Plot: %<\\AcVar PlotDate \\f " (chr 34) "%c" (chr 34) ">% / %<\\AcVar Login \\f " (chr 34) "%c" (chr 34) ">%")) (assoc 1 elist) elist)) (entmod (subst (cons 1 (strcat "Zeichnung: " (getvar "dwgprefix") (getvar "dwgname"))) (assoc 1 elist) elist)) ) (setvar "blipmode" sblip) (setvar "cmdecho" scmde) (Princ))
Dieser Code funktioniert in AutoCAD und BricsCAD. Felder Werden nur in AutoCAD ab R2006 eingefügt, sonst statischer Text. Da wir nur AutoCAD bis 2009 (Acadver=17.2) und BricsCAD 12 (Acadver=18.0) einsetzen ist die Versionswahl etwas vereinfacht... Müsste bei neueren ACAD-Versionen dann angepasst werden. Gruß Stefan [Diese Nachricht wurde von Vino am 07. Aug. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009
|
erstellt am: 07. Aug. 2012 12:21 <-- editieren / zitieren --> Unities abgeben: Nur für Vino
Zitat: (entmod (subst (cons 1 (strcat "Zeichnung: %<\\AcVar Filename \\f " (chr 34) "%fn7" (chr 34) ">% Plot: %<\\AcVar PlotDate \\f " (chr 34) "%c" (chr 34) ">% / %<\\AcVarLogin \\f " (chr 34) "%c" (chr 34) ">%")) (assoc 1 elist) elist))
was willst den mit der Zeile erreichen? ------------------ Gruss Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Vino Mitglied
Beiträge: 207 Registriert: 24.05.2005 Windows 10 BricsCAD V20-22
|
erstellt am: 07. Aug. 2012 15:43 <-- editieren / zitieren --> Unities abgeben:
|
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|