| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY WIRD VON NVIDIA ZUM HÄNDLER DES JAHRES GEWÄHLT, eine Pressemitteilung
|
Autor
|
Thema: Systemvariablen in Bemaßungsstilen ändern (3548 mal gelesen)
|
Musicus Mitglied Staatl. gepr. Techniker
Beiträge: 688 Registriert: 26.07.2005 AutoCAD 2018 Linear, CATS Windows 10
|
erstellt am: 19. Nov. 2009 15:48 <-- editieren / zitieren --> Unities abgeben:
Hallo Forum, zugegeben, es ist schon eine Weile her, dass ich mich zuletzt mit LISP auseinander gesetzt habe und ich habe jetzt auch nicht das ganze Forum hier per Suchfunktion umgekrempelt, ich setze jetzt einfach mal in euch, dass ihr mir etwas auf die Sprünge helft bzw. auf den richtigen Weg bringt. Folgende Problemstellung: Ich habe eine Zeichnung mit unbekannter Anzahl Bemaßungsstilen mit unbekannten Namen. Ich will diese Bemaßungsstile jetzt ändern, konkret will ich die Farbzuweisung für Linien und Texte (und evtl. die Textausrichtung) anpassen. Sollte eigentlich mal ein einfaches Script werden, habe aber schnell gemerkt, dass das nicht geht. Wenn ich die Systemvariablen einfach eintippe und ändere, wirkt sich das ja nur auf den aktuellen Stil aus (und erzeugt eine Stilüberschreibung). Ich müsste mich also manuell durch die Stile hangeln, und genau das will ich ja umgehen. Mein Ansatz: Ich lese in den Entities die Namen der vorhandenen Bemaßungsstile aus und mache ne Liste draus. Diese werte ich dann aus, so dass immer ein Stil "zum Bearbeiten" ausgewählt wird, überschreibe dort die entsprechenden Systemvariablen; das Ganze, bis die Liste durch ist. Dann noch nen Befehlsaufruf drumrum, damit ich das Ganze dann wieder per Script aufrufen kann. (Ins Script kommt noch bissel was anderes rein.) Ich finde, zum Wiedereinstieg und Auffrischen meiner sehr rudimentären LISP-Kenntnisse ist das doch ne schöne, nicht allzu schwere Aufgabe. Meine Stolpersteine: - Wie ist der DXF-Gruppencode für den Bemaßungsstilnamen? Da bin ich noch nicht so recht fündig geworden (und irgendwie stehe ich damit etwas auf Kriegsfuß). - Wenn ich nach der Listenauswertung einen Namen isoliert habe, wie stelle ich wieder einen Bezug zum Stil her? - Kann ich die Systemvariablen eigentlich direkt in den Code eingeben, wie ich das im AutoCAD auch mache oder muss ich da anders ran? - Muss ich vor dem Ändern der Variablen den Bemaßungsstil aktuell setzen (was ja Stilüberschreibungen zur Folge hat) oder kann ich direkt am Bemaßungsstil drehen, ohne irgendwas aktuell setzen zu müssen? Wahrscheinlich ist das für die Profis unter euch alles total einfach, wäre schön, wenn ihr mir den Weg weisen könntet, dass ich das mal mit Lerneffekt für mich als Erfolgergebnis verbuchen kann.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
marc.scherer Ehrenmitglied V.I.P. h.c. CAD-Administrator
Beiträge: 2494 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: 19. Nov. 2009 15:59 <-- editieren / zitieren --> Unities abgeben: Nur für Musicus
Wenn Du die Liste der Bemassungsstilnamen hast, dann für jeden Namen über "command" Funktionen: Stil aktuell setzen Zu ändernde Bem-Variablen nacheinander eingeben (erzeugt Stilüberschreibungen) Aktuellen Stil speichern (schreibt alle Stilüberschreibungen in Stil)
That's all ------------------ Ciao, Marc Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
marc.scherer Ehrenmitglied V.I.P. h.c. CAD-Administrator
Beiträge: 2494 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: 19. Nov. 2009 16:01 <-- editieren / zitieren --> Unities abgeben: Nur für Musicus
...Ach so, Alternativ kannst Du natürlich auch direkt am Stil drehen. Wenn Du den VL-Lisp Kram kennst und die VLIDE benutzt ist das auch recht schnell zusammengeklöppelt. ------------------ Ciao, Marc Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Wolfgang S Mitglied CADaver
Beiträge: 270 Registriert: 06.03.2006 AC 2009, C3D 2009, AC 2010, C3D 2010, AC 2011, C3D 2011, RVT 2010, RVT 2011, ASD 2011 und alles darunter bis R14 + Win XP, Win XP64, Win 7/64
|
erstellt am: 19. Nov. 2009 16:05 <-- editieren / zitieren --> Unities abgeben: Nur für Musicus
Servus Musicus! Da hast Du Dir kein einfaches Thema zum Wiedereinstieg ausgesucht! prinzipielle Kurzinfo: - Stile sind als Table zu finden, (tblsearch "DIMSTYLE" "Annotation") gibt Dir z.B. einige Infos über den Bemstil "Annotation" aus. Um an die Entityliste zu kommen musst Du anders vorgehen: (entget (tblobjname "DIMSTYLE" "Annotation")) dort findest Du dann einige bekannte DXF-Codes die auch in der ACAD-Hilfe angegeben sind. Meinen letzten Tests zufolge sind nicht alle neuen Einstellungen sauber zu setzen bzw. zu erreichen. So kannst Du BemStile für "Radialbemassung" "Durchmesserbemassung" etc. nicht als BemStil aktuell setzen. Eine Änderung dieser Stile mit der Methode "aktuell setzen - Ändern - Speichern" fällt somit aus. Über sie Tables kommst Du dann an die Stile die dann z.B. "Annotation#3" heißen Achtung!
Ein sauberes Aktualisieren der Bemstile mit den neuen Einstellungen konnte ich nur mit der Methode "aktuell setzen - Ändern - Speichern" erreichen. Das Ändern der GCs in der Table hatte nicht den gewünschten Erfolg. Es wurden dabei zwar die Einstellungen (ab der nächsten neuen Bemassung) geändert, die alten blieben aber unberührt. vielleicht gibts ja jetzt jemanden der mitliest der das alles schon mal gelöst hat, da bin ich selbst auch gespannt. Als Einstieg sind die Informationen mal da, ich hoff Du kommst so wieder ein bisschen rein in das Thema lg Wolfgang S
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Musicus Mitglied Staatl. gepr. Techniker
Beiträge: 688 Registriert: 26.07.2005 AutoCAD 2018 Linear, CATS Windows 10
|
erstellt am: 19. Nov. 2009 16:32 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von marc.scherer: Wenn Du die Liste der Bemassungsstilnamen hast, dann für jeden Namen über "command" Funktionen:
Stil aktuell setzen Zu ändernde Bem-Variablen nacheinander eingeben (erzeugt Stilüberschreibungen) Aktuellen Stil speichern (schreibt alle Stilüberschreibungen in Stil)
That's all
Das klingt doch mal nach nem Plan. An den Punkt mit dem Speichern hatte ich gar nicht gedacht. Zitat: Original erstellt von marc.scherer: ...Ach so, Alternativ kannst Du natürlich auch direkt am Stil drehen. Wenn Du den VL-Lisp Kram kennst und die VLIDE benutzt ist das auch recht schnell zusammengeklöppelt.
OK, das lass ich dann mal ... wie gesagt, meine Kenntnisse sind noch sehr rudimentär (bin im Kochbuch bis Seite 68 gekommen, hab ich mal als Ersatz für dumm rumsitzen angefangen, seitdem hielt sich die Langeweile im Büro aber sehr in Grenzen bzw. es gab durch Softwareumstieg genug wichtigeres zu lernen). Habe die VLIDE vorhin mal nem Kollegen gezeigt, der Interesse an dem Thema hat, da war ich schon fast entsetzt, wieviel man doch vergisst, wenn man es nicht anwendet.
Zitat: Original erstellt von Wolfgang S: Servus Musicus!Da hast Du Dir kein einfaches Thema zum Wiedereinstieg ausgesucht! prinzipielle Kurzinfo: - Stile sind als Table zu finden, (tblsearch "DIMSTYLE" "Annotation") gibt Dir z.B. einige Infos über den Bemstil "Annotation" aus. Um an die Entityliste zu kommen musst Du anders vorgehen: (entget (tblobjname "DIMSTYLE" "Annotation")) dort findest Du dann einige bekannte DXF-Codes die auch in der ACAD-Hilfe angegeben sind. Meinen letzten Tests zufolge sind nicht alle neuen Einstellungen sauber zu setzen bzw. zu erreichen. So kannst Du BemStile für "Radialbemassung" "Durchmesserbemassung" etc. nicht als BemStil aktuell setzen. Eine Änderung dieser Stile mit der Methode "aktuell setzen - Ändern - Speichern" fällt somit aus. Über sie Tables kommst Du dann an die Stile die dann z.B. "Annotation#3" heißen Achtung!
Ein sauberes Aktualisieren der Bemstile mit den neuen Einstellungen konnte ich nur mit der Methode "aktuell setzen - Ändern - Speichern" erreichen. Das Ändern der GCs in der Table hatte nicht den gewünschten Erfolg. Es wurden dabei zwar die Einstellungen (ab der nächsten neuen Bemassung) geändert, die alten blieben aber unberührt. vielleicht gibts ja jetzt jemanden der mitliest der das alles schon mal gelöst hat, da bin ich selbst auch gespannt. Als Einstieg sind die Informationen mal da, ich hoff Du kommst so wieder ein bisschen rein in das Thema lg Wolfgang S
Findest du? Ich finde es jedenfalls vom Ansatz her bedeutend einfacher mal meine Blockgeschichte beim letzten Mal ... (läuft bis heute nicht richtig, is mir mittlerweile aber auch egal, die Firma hat mir den Einsatz ja doch nicht gedankt) Da es sich um Architektenpläne handelt, sind Radial- und Durchmesserbemaßungen eher selten drin, und wenn doch, dann muss man da halt doch mal händisch ran. Die würde ich erstmal vernachlässigen. Ansonsten klingt das jetzt erstmal so, als ob mein ursprünglicher Ansatz so nicht funktioniert. Ich schau mal, was ich mit (tblsearch "DIMSTYLE" "Annotation") und (entget (tblobjname "DIMSTYLE" "Annotation")) in Erfahrung bringen kann und was es mit Table auf sich hat. Danke schon mal soweit.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Musicus Mitglied Staatl. gepr. Techniker
Beiträge: 688 Registriert: 26.07.2005 AutoCAD 2018 Linear, CATS Windows 10
|
erstellt am: 24. Nov. 2009 13:10 <-- editieren / zitieren --> Unities abgeben:
So, hier mein erster Versuch, kann da evtl. mal jemand drüber schauen, ob das alles so funktioniert? (irgendwie übernimmt es meine Tabulatoren nicht, hoffe es ist trotzdem lesbar)
Code: (defun c:UPDATE_BEMSTIL (BEMSTILLISTE / STILDEF STILNAME STIL OJEKTDATEN) (if (= (type BEMSTILLISTE) 'LIST) (progn (setq STILNAME (car BEMSTILLISTE)) (setq BEMSTILLISTE (cdr BEMSTILLISTE)) (if (setq STILDEF (tblsearch "DIMSTYLE" STILNAME)) (progn (setq STIL (cdr(assoc -2 STILDEF))) (while STIL (setq STILNAME (cdr(assoc 2 (entget STIL)))) (if (not (member STILNAME BEMSTILLISTE)) (if (not BEMSTILLISTE) (setq BEMSTILLISTE (append BEMSTILLISTE (list STILNAME))) (setq BEMSTILLISTE (list STILNAME)) ) ) ) ) (setq OBJEKTDATEN (entget STIL)) (if (assoc 176 OBJEKTDATEN) (setq OBJEKTDATEN (subst (cons 176 256)(assoc OBJEKTDATEN)OBJEKTDATEN));DIMCLRD ) (if (assoc 177 OBJEKTDATEN) (setq OBJEKTDATEN (subst (cons 177 256)(assoc OBJEKTDATEN)OBJEKTDATEN));DIMCLRE ) (if (assoc 178 OBJEKTDATEN) (setq OBJEKTDATEN (subst (cons 178 256)(assoc OBJEKTDATEN)OBJEKTDATEN));DIMCLRT ) (entmod OBJEKTDATEN) ) (setq BEMSTILLISTE nil) ) BEMSTILLISTE )
Danke schon mal! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 24. Nov. 2009 13:35 <-- editieren / zitieren --> Unities abgeben: Nur für Musicus
|
Musicus Mitglied Staatl. gepr. Techniker
Beiträge: 688 Registriert: 26.07.2005 AutoCAD 2018 Linear, CATS Windows 10
|
erstellt am: 24. Nov. 2009 14:21 <-- editieren / zitieren --> Unities abgeben:
Tut's auch nicht: ; Fehler: Falsch formatierte Liste in Eingabe Bin nur noch nicht dahinter gestiegen, warum. bei (assoc -2) bin ich mir auch nicht sicher, habe einen ähnlichen Code für Blöcke hergenommen und versucht, den umzumünzen auf Bemaßungsstile, bei (assoc -2) hab ich lange rumgerätselt, was mir das bringt, bin aber auch zu keiner besseren Lösung gekommen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Musicus Mitglied Staatl. gepr. Techniker
Beiträge: 688 Registriert: 26.07.2005 AutoCAD 2018 Linear, CATS Windows 10
|
erstellt am: 25. Nov. 2009 12:31 <-- editieren / zitieren --> Unities abgeben:
Hab noch mal alles übern Haufen geworfen (naja fast) und neu angesetzt, aber irgendwie will es immer noch nicht. Ich bekomme bei der Prüfung immernoch die Meldung ; Fehler: Falsch formatierte Liste in Eingabe Helft mir mal auf die Sprünge, wo es klemmt. Danke schon mal. Hier der Code:
Code: (defun c:UPDATE_BEMSTIL ( / STILDEF STILNAME BEMSTILLISTE) (setq BEMSTILLISTE ()) (while (setq STILDEF (tblnext "DIMSTYLE")) (setq STILNAME (cdr(assoc 2 (entget STILDEF)))) (if (member STILNAME BEMSTILLISTE) BEMSTILLISTE (setq BEMSTILLISTE (append BEMSTILLISTE (list STILNAME))) );end if );end while (BEMSTIL (list (cdr (assoc 2 STILNAME)))) (defun BEMSTIL (BEMSTILLISTE / STILNAME STIL OBJEKTDATEN) (setq STILNAME (car BEMSTILLISTE)) (setq BEMSTILLISTE (cdr BEMSTILLISTE)) (setq STIL (tblobjname "DIMSTYLE" STILNAME)) (setq OBJEKTDATEN (entget STIL)) (if (assoc 176 OBJEKTDATEN) (setq OBJEKTDATEN (subst (cons 176 256)(assoc OBJEKTDATEN) OBJEKTDATEN)) );end if (if (assoc 177 OBJEKTDATEN) (setq OBJEKTDATEN (subst (cons 177 256)(assoc OBJEKTDATEN) OBJEKTDATEN)) );end if (if (assoc 178 OBJEKTDATEN) (setq OBJEKTDATEN (subst (cons 178 256)(assoc OBJEKTDATEN) OBJEKTDATEN)) );end if (entmod OBJEKTDATEN) );end defun
(warum das die Formatierung jedesmal zerschießt, bleibt mir ein Geheimnis, hier sieht alles schick aus)Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 25. Nov. 2009 12:46 <-- editieren / zitieren --> Unities abgeben: Nur für Musicus
|
gerd3012 Mitglied Planung Haustechnik
Beiträge: 111 Registriert: 24.07.2002
|
erstellt am: 25. Nov. 2009 13:21 <-- editieren / zitieren --> Unities abgeben: Nur für Musicus
Hallo, ich habe das für mich so gelöst: (defun c:dim_fa (/ dim_sty dim_nam) (setq dim_sty (tblnext "dimstyle" T)) (while dim_sty (setq dim_nam (dxf 2 dim_sty)) (command "-bemstil" "Ho" dim_nam) (setvar "dimclrd" 256) ;->Maßlinien, Pfeilspitzen, Führungslinien (setvar "dimclre" 256) ;-> Hilfslinien für Bemaßungen (setvar "dimclrt" 256) ;-> Maßtexte (setvar "dimltype" "VONLAYER") ;-> Linientyp für Bemaßungslinien (setvar "DIMLTEX1" "VONLAYER") ;-> Linientyp für Hilfslinie 1 (setvar "DIMLTEX2" "VONLAYER") ;-> Linientyp für Hilfslinie 2 (command "-bemstil" "Si" dim_nam "J") (setq dim_sty (tblnext "dimstyle")) ) ) Ist natürlich jederzeit optimierbar!! bis dann gerd
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Musicus Mitglied Staatl. gepr. Techniker
Beiträge: 688 Registriert: 26.07.2005 AutoCAD 2018 Linear, CATS Windows 10
|
erstellt am: 25. Nov. 2009 13:27 <-- editieren / zitieren --> Unities abgeben:
Gutes Argument. Wo ich jetzt drüber nachdenke, eigentlich auch logisch. Ich hab das mit den Rückgabewerten irgendwie noch nicht so verinnerlicht. Nochmal der erste Teil geändert (was aber nix an der Funktionalität geändert hat):
Code: (setq BEMSTILLISTE ()) (while (setq STILDEF (tblnext "DIMSTYLE"));soll meine Vergleichsbedingung sein, ob Bemaßungsstile vorhanden sind ;damit auch alle berücksichtigt werden (setq STILNAME (cdr(assoc 2 (entget (tblnext "DIMSTYLE")))));jetzt greift es aufs Element zu, funktioniert das so? (if (member STILNAME BEMSTILLISTE) BEMSTILLISTE (setq BEMSTILLISTE (append BEMSTILLISTE (list STILNAME))) );end if );end while (BEMSTIL (list (cdr (assoc 2 STILNAME))))
Habt bitte etwas Nachsicht mit mir, wenn ich nicht sofort hinter die Geheimnisse von LISP steige, ich brauche da meistens nen geduldigen Erklärbär, damit ich durchsteige. Und Programmieren jeglicher Art gehörte bisher auch nicht zu meinem "Funktionsumfang". Aber der Ergeiz ist da ... [Diese Nachricht wurde von Musicus am 25. Nov. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 25. Nov. 2009 13:36 <-- editieren / zitieren --> Unities abgeben: Nur für Musicus
|
Musicus Mitglied Staatl. gepr. Techniker
Beiträge: 688 Registriert: 26.07.2005 AutoCAD 2018 Linear, CATS Windows 10
|
erstellt am: 25. Nov. 2009 14:28 <-- editieren / zitieren --> Unities abgeben:
Ich hab meinen Hauptfehler gefunden Das erste defun hatte keine schließende Klammer. Mit der Zeile von CADmium habe ich jetzt schon mal einen fehlerfreien Code. Danke an Gerd für deinen Code, habe mir in Anlehnung damit mal noch ne Alternativvariante gestrickt (auch keine Fehlermeldung bei der Prüfung). Jetzt das Problem: Gerds Code läuft nicht, da kommt nur die Meldung ; Fehler: Zu viele Argumente Meine Codevarianten in Anlehnung an Gerds läuft soweit erstmal, auch die Aktuellsetzung der Bemaßungsstile funktioniert, nur die Werte werden nicht geändert. Meine erste Variante bringt nur die Meldung ; Fehler: Fehlerhafter Argumenttyp: stringp nil Noch die Codes: mein neuer:
Code: (defun c:UPDATE_DIMSTIL ( / STILDEF STILNAME OBJEKTDATEN) (setq STILDEF (tblnext "DIMSTYLE" T)) (while STILDEF (setq STILNAME (cdr(assoc 2 (tblnext "DIMSTYLE")))) (command "-bemstil" "ho" STILNAME) (setq OBJEKTDATEN (entget (tblobjname "DIMSTYLE" STILNAME))) (if (assoc 176 OBJEKTDATEN) (setq OBJEKTDATEN (subst (cons 176 256)(assoc 176 OBJEKTDATEN) OBJEKTDATEN)) );end if (if (assoc 177 OBJEKTDATEN) (setq OBJEKTDATEN (subst (cons 177 256)(assoc 177 OBJEKTDATEN) OBJEKTDATEN)) );end if (if (assoc 178 OBJEKTDATEN) (setq OBJEKTDATEN (subst (cons 178 256)(assoc 178 OBJEKTDATEN) OBJEKTDATEN)) );end if (entmod OBJEKTDATEN) (command "-bemstil" "si" STILNAME "j") (setq STILNAME (tblnext "DIMSTYLE")) );end while );end defun
mein alter:
Code: (defun c:UPDATE_BEMSTIL ( / STILDEF STILNAME BEMSTILLISTE) (setq BEMSTILLISTE ()) (while (setq STILNAME (cdr(assoc 2 (tblnext "DIMSTYLE")))) (if (member STILNAME BEMSTILLISTE) BEMSTILLISTE (setq BEMSTILLISTE (append BEMSTILLISTE (list STILNAME))) );end if );end while (BEMSTIL (list (cdr (assoc 2 STILNAME)))) );end defun(defun BEMSTIL (BEMSTILLISTE / STILNAME STIL OBJEKTDATEN) (setq STILNAME (car BEMSTILLISTE)) (setq BEMSTILLISTE (cdr BEMSTILLISTE)) (setq STIL (tblobjname "DIMSTYLE" STILNAME)) (setq OBJEKTDATEN (entget STIL)) (if (assoc 176 OBJEKTDATEN) (setq OBJEKTDATEN (subst (cons 176 256)(assoc 176 OBJEKTDATEN) OBJEKTDATEN)) );end if (if (assoc 177 OBJEKTDATEN) (setq OBJEKTDATEN (subst (cons 177 256)(assoc 177 OBJEKTDATEN) OBJEKTDATEN)) );end if (if (assoc 178 OBJEKTDATEN) (setq OBJEKTDATEN (subst (cons 178 256)(assoc 178 OBJEKTDATEN) OBJEKTDATEN)) );end if (entmod OBJEKTDATEN) );end defun
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 25. Nov. 2009 14:46 <-- editieren / zitieren --> Unities abgeben: Nur für Musicus
na damit kann man so langsam arbeiten .. Zur neueren Version: (setq STILNAME (cdr(assoc 2 (tblnext "DIMSTYLE")))) austauschen gegen (setq STILNAME (cdr(assoc 2 STILDEF)))
(command "-bemstil" "si" STILNAME "j") austauschen gegen (command "-bemstil" "ho" STILNAME) (setq STILNAME (tblnext "DIMSTYLE")) austauschen gegen (setq STILDEF (tblnext "DIMSTYLE")) Nachtrag Nur mal nebenbei: Dein Code berücksichtigt nicht die Füllfarbe des (MT)Textes - falls das nur vergessen wurde.. Und: So wie der Code dann aussieht muß man 2-3 Dinge noch erwähnen/beachten: Dein aktueller BemStil wird geändert - daher sollte man evtl. an den Anfang ein (setq cDimST (getvar"DIMSTYLE")) und vor der letzten Klammer ein (command "-BEMSTIL "ho" cDimSt) setzen. Viel wichtiger: Falls in der Datei "gewollte" Stilüberschreibungen existieren, dann werden diese durch den Code zunichte gemacht. ------------------ die alte SUCHfunktion.. - System-Angaben - User:FAQ(Adesk) [Diese Nachricht wurde von cadffm am 25. Nov. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Musicus Mitglied Staatl. gepr. Techniker
Beiträge: 688 Registriert: 26.07.2005 AutoCAD 2018 Linear, CATS Windows 10
|
erstellt am: 25. Nov. 2009 14:56 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von cadffm: na damit kann man so langsam arbeiten ..
Das tat jetzt gut! Zitat: Zur neueren Version: (setq STILNAME (cdr(assoc 2 (tblnext "DIMSTYLE")))) austauschen gegen (setq STILNAME (cdr(assoc 2 STILDEF)))
(command "-bemstil" "si" STILNAME "j") austauschen gegen (command "-bemstil" "ho" STILNAME) (setq STILNAME (tblnext "DIMSTYLE")) austauschen gegen (setq STILDEF (tblnext "DIMSTYLE"))
Also ersteres und letzteres verstehe ich ja, aber das zweite nicht. Mit (command "-bemstil" "si" STILNAME "j") sichere ich ja den Bemaßungsstil, damit es keine Stilüberschreibungen gibt. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 25. Nov. 2009 15:00 <-- editieren / zitieren --> Unities abgeben: Nur für Musicus
du vermischt 2 Ansätze und hast so einene Denkfehler: 1. du kannst SYSTEMVARIABLEN ändern, diese erzeugen auf dem aktuellen bemstil eine Stilüberschreibung, durch sichern auf den UrsprungsBemStil übernimmst du dann diese Einstellungen. Genau das macht dein Code ja aber nicht 2. du kannst mit Lisp direkt den BemStil ändern - fertig Genau DAS machst du ! Das setzen des Stiles (setzen, nicht sichern) ist im Moment eigentlich nur für das löschen von Stilüberschreibungen da.. ------------------ die alte SUCHfunktion.. - System-Angaben - User:FAQ(Adesk) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Musicus Mitglied Staatl. gepr. Techniker
Beiträge: 688 Registriert: 26.07.2005 AutoCAD 2018 Linear, CATS Windows 10
|
erstellt am: 25. Nov. 2009 15:12 <-- editieren / zitieren --> Unities abgeben:
Okay, danke für die Aufklärung. Hab hier richtig was gelernt heute. Es funktioniert jetzt soweit, dass es die Stile umdefiniert. Die in der Zeichnung vorhandenen Bemaßungen ändert es aber erst, wenn ich den Stil nochmal anwende. Ist ja mit (command "-bemstil" "apply") machbar, aber dafür muss ich einen Auswahlsatz angeben. Mit -sauswahl geht's nicht (gibt's nicht). Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dorfy Mitglied Double-Dipl.-Ing. Bleistiftanspitzer
Beiträge: 900 Registriert: 21.07.2006 AutoCad2007, ProE, HiCad
|
erstellt am: 25. Nov. 2009 15:16 <-- editieren / zitieren --> Unities abgeben: Nur für Musicus
(ssget "_X") ------------------ Mfg Heiko Elefantenjagd in Afrika "... LISP-Programmierer bauen einen Irrgarten aus Klammern und hoffen, dass sich der Elefant darin verirrt..." (www.uni-leipzig.de/~rotheh/elefant.htm) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Steff179 Mitglied Geomatiker
Beiträge: 266 Registriert: 09.08.2007 AutoCAD 2014
|
erstellt am: 25. Nov. 2009 15:17 <-- editieren / zitieren --> Unities abgeben: Nur für Musicus
|
Musicus Mitglied Staatl. gepr. Techniker
Beiträge: 688 Registriert: 26.07.2005 AutoCAD 2018 Linear, CATS Windows 10
|
erstellt am: 25. Nov. 2009 15:19 <-- editieren / zitieren --> Unities abgeben:
Werden sie auch, deshalb will ich ja vorher alle auswählen, die schon den Bemaßungsstil haben und nur auf diese apply anwenden. (ssget "_X") hab ich schon mal gehört ... ich werd mich mal belesen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 25. Nov. 2009 15:23 <-- editieren / zitieren --> Unities abgeben: Nur für Musicus
|
Musicus Mitglied Staatl. gepr. Techniker
Beiträge: 688 Registriert: 26.07.2005 AutoCAD 2018 Linear, CATS Windows 10
|
erstellt am: 25. Nov. 2009 15:44 <-- editieren / zitieren --> Unities abgeben:
(command "-bemstil" "a") (ssget "X" '((0 . "DIMENSION")(-4 . "=")(2 . STILNAME))) funktioniert aber nicht, weil ich die realtionalen Operatoren nicht mit Zeichenketten verwenden kann. (Steht so im Handbuch.) STILNAME ist ja die Variable, die den Namen vom Bemaßungsstil enthält, wie bekomm ich die jetzt in den Filter? [Diese Nachricht wurde von Musicus am 25. Nov. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 25. Nov. 2009 15:56 <-- editieren / zitieren --> Unities abgeben: Nur für Musicus
|
Musicus Mitglied Staatl. gepr. Techniker
Beiträge: 688 Registriert: 26.07.2005 AutoCAD 2018 Linear, CATS Windows 10
|
erstellt am: 25. Nov. 2009 16:18 <-- editieren / zitieren --> Unities abgeben:
Hehe, kommt noch, wenn ich fertig bin. Brauchte nur zur Unterscheidung alter und neuer Code fix nen Namen, ist nur ne Arbeitsbezeichnung. (cons 3 STILNAME) musst mir mal erklären Steht die 3 nicht für DIMPOST (Prä-/Suffix)? Und cons fügt doch was in ne Liste ein, eigentlich will ich den Wert der Variablen STILNAME ja nicht verändern. [Diese Nachricht wurde von Musicus am 25. Nov. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 25. Nov. 2009 16:27 <-- editieren / zitieren --> Unities abgeben: Nur für Musicus
|
Musicus Mitglied Staatl. gepr. Techniker
Beiträge: 688 Registriert: 26.07.2005 AutoCAD 2018 Linear, CATS Windows 10
|
erstellt am: 25. Nov. 2009 16:31 <-- editieren / zitieren --> Unities abgeben:
|
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 25. Nov. 2009 16:38 <-- editieren / zitieren --> Unities abgeben: Nur für Musicus
|
Musicus Mitglied Staatl. gepr. Techniker
Beiträge: 688 Registriert: 26.07.2005 AutoCAD 2018 Linear, CATS Windows 10
|
erstellt am: 25. Nov. 2009 16:46 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von cadffm: Bei mir funktioniert es, daher wirst du entweder einen Fehler eingebaut haben (Position im Code zB.)oder aber du erwartest evtl. was anderes als du "programmiert" hast !
Ha, das war's! Hab's verschoben, jetzt geht's Jetzt bin ich richtig zufrieden mit der Welt, mein erstes selbstgeschriebenes Programm (okay, mit VIEL Hilfe), das auch noch tut, was ich möchte UND ich auch noch weiß, warum! Vielen Dank an alle Mitdenker, besonders cadffm, für die Hilfe und Anregungen. [Diese Nachricht wurde von Musicus am 25. Nov. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 25. Nov. 2009 19:06 <-- editieren / zitieren --> Unities abgeben: Nur für Musicus
Weil du für die Aktualisierung der vorhandenen Bemaßungsobjekten einen AutoCAD-Befehl nutzt (Command ist ja nichts anderes wie eine Tastatureingabe in die Befehlszeile und "BEM" der Befehl - wirkt sich das Ganze Aktualisieren natürlich nur auf Objekte im aktuellen Bereich aus ! (ssget "_X" wählt zwar auch in allen anderen Layouts/Modellbereich Objekte aus, "BEM" wirft die Objekte aber wieder aus dem Bearbeitungssatz raus. Das sollte nun aber die letzte (ungefragte) Info sein dazu denke ich ------------------ die alte SUCHfunktion.. - System-Angaben - User:FAQ(Adesk) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 25. Nov. 2009 20:18 <-- editieren / zitieren --> Unities abgeben: Nur für Musicus
Zitat: Original erstellt von cadffm: Weil du für die Aktualisierung der vorhandenen Bemaßungsobjekten einen AutoCAD-Befehl nutzt (Command ist ja nichts anderes wie eine Tastatureingabe in die Befehlszeile und "BEM" der Befehl - wirkt sich das Ganze Aktualisieren natürlich nur auf Objekte im aktuellen Bereich aus ! (ssget "_X" wählt zwar auch in allen anderen Layouts/Modellbereich Objekte aus, "BEM" wirft die Objekte aber wieder aus dem Bearbeitungssatz raus. Das sollte nun aber die letzte (ungefragte) Info sein dazu denke ich
na dann (if (setq AWS (ssget"_X" (list '(0 . "*DIMENSION*")(cons 3 STILNAME)(cons 410 (getvar "CTAB"))))) (command "BEM" "update" AWS "" "exit") )
------------------ - 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 |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 26. Nov. 2009 08:11 <-- editieren / zitieren --> Unities abgeben: Nur für Musicus
|
gerd3012 Mitglied Planung Haustechnik
Beiträge: 111 Registriert: 24.07.2002
|
erstellt am: 26. Nov. 2009 09:28 <-- editieren / zitieren --> Unities abgeben: Nur für Musicus
Hallo, da habt ihr ja doch noch eine Lösung erarbeitet. Die Fehlermeldung aus meinem Code resultiert aus der 4.Zeile -> (setq dim_nam (dxf 2 dim_sty)) muss allgemeingültig heissen : -> (setq dim_nam (cdr (assoc 2 dim_sty))) Damit sollte dann auch mein Code funktionieren. Gruß gerd Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 26. Nov. 2009 10:15 <-- editieren / zitieren --> Unities abgeben: Nur für Musicus
|
gerd3012 Mitglied Planung Haustechnik
Beiträge: 111 Registriert: 24.07.2002
|
erstellt am: 27. Nov. 2009 12:47 <-- editieren / zitieren --> Unities abgeben: Nur für Musicus
Hallo, ja, genau sone Funktion habe ich. Darum ja die Ergänzung zur Allgemeingültigkeit (cdr (assoc 2 ... Habe ich bei meinem ersten Posting glatt übersehen. Die kleine Arbeitserleichterung sitzt halt schon so drin... Gruß gerd
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |