| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY präsentiert die neue NVIDIA RTX A400 und die A1000 Grafikkarte, eine Pressemitteilung
|
Autor
|
Thema: Papierbereich-Ansichtsfenster Beschriftungsmaßstab ändern (1878 mal gelesen)
|
cadking Mitglied CAD-Zeichendiensleistung
Beiträge: 242 Registriert: 26.10.2004 Intel Quadcore i7,W7-64bit, Quadro FX 3800 MEP/ACA2018; MEP/ACA2018; MEP/ACA2021; MEP/ACA2021
|
erstellt am: 04. Sep. 2019 14:09 <-- editieren / zitieren --> Unities abgeben:
Hallo Lispler, ich habe Zeichnungen mit mehreren Layouts und bis zu 40 Beschriftungsmaßstäben die ich bereinigen möchte. Die Papierbereich-Ansichtsfenster (also das Layout selbst) haben verschieden Beschriftungsmaßstäbe (1:1000_1, 1:1000_2, 1:1000_3...), die alle das gleiche Verhältnis für den Maßstab haben. Ich möchte nun für alle (ssget "_X" '((0 . "VIEWPORT")(69 . 1))) den Beschriftungsmaßstab auf 1:1000 setzen. In der Entityliste der Papierbereich-Ansichtsfenster finde ich aber keinen DXF-Gruppen-Code für den Beschriftungsmaßstab bzw. für des Maßstabsverhältnis. In der Zeichnung kann ich mit (progn (setq oct (getvar "CTAB"))(foreach L (Layoutlist)(setvar "CTAB" L))(setvar "CTAB" oct)) (setq ss (ssget "_X" (list '(0 . "VIEWPORT") (cons 69 1)))))(sssetfirst ss ss) alle Papierbereich-Ansichtsfenster selektieren und dann in der Eigenschaftdialogbox den Beschriftungsmaßstab ändern. Aber wie kann ich das in einer Lisp realisieren? ------------------ Danke Stefan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Meldin Mitglied
Beiträge: 398 Registriert: 15.07.2011 ACA2020 Windows10
|
erstellt am: 07. Sep. 2019 09:30 <-- editieren / zitieren --> Unities abgeben: Nur für cadking
Schau mal ob dir so etwas hilft. Code: (foreach teil (layoutlist) (setvar "ctab" teil) (foreach teil (mapcar 'cadr (ssnamex (ssget "x" (list (cons 0 "VIEWPORT") (cons 410 (getvar "ctab")) (cons -4 "<NOT") (cons -4 "<OR") (cons 69 1) (cons 69 (getvar 'CVPORT)) (cons -4 "OR>") (cons -4 "NOT>") ) ) ) ) ;(setvar "CTAB" (cdr(assoc 410 (entget teil)))) (command "_.mspace") (setvar 'CVPORT (cdr (assoc 69 (entget teil)))) (setq ENTScale (entget (cdr (assoc 340 (entget (cdr (assoc 360 (entget (cdr (assoc 360 (entget teil)))) ) ) ) ) ) ) ) (setq ENTScale (subst (cons 300 "1:1000") (assoc 300 ENTScale) ENTScale) ) (setq ENTScale (subst (cons 140 1.0) (assoc 140 ENTScale) ENTScale)) (setq ENTScale (subst (cons 141 1000.0) (assoc 141 ENTScale) ENTScale) ) (entmod ENTScale) (command "_.pspace") ) )
------------------ Gruß Wolfgang Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadking Mitglied CAD-Zeichendiensleistung
Beiträge: 242 Registriert: 26.10.2004 Intel Quadcore i7,W7-64bit, Quadro FX 3800 MEP/ACA2018; MEP/ACA2018; MEP/ACA2021; MEP/ACA2021
|
erstellt am: 08. Sep. 2019 11:20 <-- editieren / zitieren --> Unities abgeben:
Hallo Meldin, dein Code hilft mir so nicht weiter. Er benennt mir die Maßstäbe der Papierbereich-Ansichtfenster lediglich um von 1:1000_1 -> 1:1000 1:1000_2 -> 1:1000 1:1000_3 -> 1:1000, sodaß ich dann 3x den Maßstab 1:1000 mit unterschiedlichen Maßstabsverhältnissen in der Maßstabsliste habe, was eigentlich gar nicht geht. aber wie ich an den assoc-Wert des Beschriftungsmaßstabs für das Papierbereich-Ansichtfenster komme, kann ich in deinem Code nicht erkennen. ------------------ Danke Stefan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Meldin Mitglied
Beiträge: 398 Registriert: 15.07.2011 ACA2020 Windows10
|
erstellt am: 08. Sep. 2019 19:29 <-- editieren / zitieren --> Unities abgeben: Nur für cadking
|
cadking Mitglied CAD-Zeichendiensleistung
Beiträge: 242 Registriert: 26.10.2004 Intel Quadcore i7,W7-64bit, Quadro FX 3800 MEP/ACA2018; MEP/ACA2018; MEP/ACA2021; MEP/ACA2021
|
erstellt am: 09. Sep. 2019 12:24 <-- editieren / zitieren --> Unities abgeben:
Hallo Meldin, ich habe deinen Code mal zerlegt und schrittweise getestet was da passiert. (foreach teil (mapcar 'cadr (ssnamex (ssget "_x" (list (cons 0 "VIEWPORT")(cons 69 1)) ) ) ) (setvar 'CVPORT (cdr (assoc 69 (entget teil)))) (print "Teil: ")(princ teil)(princ " - ")(princ (cdr (assoc 69 (entget teil))))(terpri) (setq ENTScale (entget (cdr (assoc 340 (entget (cdr (assoc 360 (entget (cdr (assoc 360 (entget teil)))))))))) ) (print "Teil: ")(princ "DICTIONARY")(princ " - ")(princ (entget (cdr (assoc 360 (entget teil)))))(terpri) (print "Teil: ")(princ "XRECORD")(princ " - ")(princ (entget (cdr (assoc 360 (entget (cdr (assoc 360 (entget teil))))))))(terpri) (print "Teil: ")(princ "SCALE")(princ " - ")(princ (entget (cdr (assoc 340 (entget (cdr (assoc 360 (entget (cdr (assoc 360 (entget teil)))))))))))(terpri) ) Dein Code ändert nicht den Beschriftungmaßstab des Papierbereich-Ansichtsfensters, sondern benennt den Maßstab in der Scaleliste um, sodass ich am Ende mehrfach den Maßstab in der Maßstabsliste habe. Ich möchte aber den Maßstab des Papierbereich-Ansichtsfensters nicht umbenennen, sondern einen bereits vorhandenen zuweisen. Da komme ich nicht weiter. ------------------ Danke Stefan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadking Mitglied CAD-Zeichendiensleistung
Beiträge: 242 Registriert: 26.10.2004 Intel Quadcore i7,W7-64bit, Quadro FX 3800 MEP/ACA2018; MEP/ACA2018; MEP/ACA2021; MEP/ACA2021
|
erstellt am: 09. Sep. 2019 13:04 <-- editieren / zitieren --> Unities abgeben:
Hallo Meldin ich habe das Problem lokalisiert. In deinem Code wechselst du mit (command "_.mspace") in ein "manuelles Ansichtsfenster", dem du dann einen Maßstab aus der Scaleliste zuweist. Du schließt explizit die Ansichtsfenster (69 . 1) aus, weil man in die nicht wechseln kann. Für meinen Fall funktioniert der Code so wohl nicht. Ich komme nicht weiter. ------------------ Danke Stefan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadking Mitglied CAD-Zeichendiensleistung
Beiträge: 242 Registriert: 26.10.2004 Intel Quadcore i7,W7-64bit, Quadro FX 3800 MEP/ACA2018; MEP/ACA2018; MEP/ACA2021; MEP/ACA2021
|
erstellt am: 09. Sep. 2019 13:37 <-- editieren / zitieren --> Unities abgeben:
Hallo Meldin, ich habe deinen ursprünglichen Code aus deiner ersten Antwort mal über eine Zeichnung mit 2 manuellen Ansichtsfenstern (AF1 -> Beschriftungsmaßstab 1:100) (AF2 -> Beschriftungsmaßstab 1:50) laufen lassen. Auch hier wird lediglich die Saleliste geändert. Ürsprünglicher Maßstab 1:100 wird umbenannt in 1:1000 Ürsprünglicher Maßstab 1:50 wird umbenannt in 1:1000 sodass ich am Ende 3 mal den Maßstab 1:1000 mit einem Maßstabsverhältnis von 1.0 in meiner Scaleliste habe, was eigentlich gar nicht geht. Die Maßstäbe 1:100 und 1:50 sind verschwunden. ------------------ Danke Stefan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Vino Mitglied
Beiträge: 229 Registriert: 24.05.2005 Windows 10 BricsCAD Pro V23
|
erstellt am: 10. Sep. 2019 07:41 <-- editieren / zitieren --> Unities abgeben: Nur für cadking
Hallo, Beschriftungsmaßstäbe sind nicht ganz so einfach zu händeln, wie man am Anfang meint. Zuerst brauchst du eine Liste der Maßstäbe. Die bekommst du mit:
Code:
(defun mslist () (foreach ms (dictsearch (namedobjdict) "ACAD_SCALELIST") (if (= 350 (car ms)) (setq msliste (append (list (cons (strcase (cdr (assoc 300 (entget (cdr ms))))) (cdr (assoc -1 (entget (cdr ms)))))) msliste) ) ) ) )
Daraus musst du dir das passende Element aussuchen. Das geht natürlich am schönsten mit einem kleinen Dialog. Dann gehst du deine Ansichtsfenster (z.B. mit dem Code oben) durch und ersetzt EINS VORHER (Also 360 -> 360) Den GK 340 durch den gewünschten ENAME aus der Liste oben. Damit sollte es dann klappen. Für mehr habe ich gerade keine Zeit. Vielleicht kommst du damit klar. Wenn nicht, kann ich's mir heute Abend oder die Nächsten Tage vielleicht nochmal anschauen. Gruß Stefan
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadking Mitglied CAD-Zeichendiensleistung
Beiträge: 242 Registriert: 26.10.2004 Intel Quadcore i7,W7-64bit, Quadro FX 3800 MEP/ACA2018; MEP/ACA2018; MEP/ACA2021; MEP/ACA2021
|
erstellt am: 10. Sep. 2019 17:32 <-- editieren / zitieren --> Unities abgeben:
Vielen Dank Vino, irgendwie komme ich nicht voran. Mein Code sieht wie folgt aus: ist erst mal nur für das Papierbereich-Ansichtsfenster im aktuellen Layout. (defun SetSysAFBesmastab ( / ) (setq msliste nil) (setq m1 nil) (foreach ms (dictsearch (namedobjdict) "ACAD_SCALELIST") (if (and (= 350 (car ms))(/= m1 "1:100")) (progn (setq msliste (append (list (cons (strcase (cdr (assoc 300 (entget (cdr ms))))) (cdr (assoc -1 (entget (cdr ms)))))) msliste)) (setq m1 (cdr (assoc 300 (entget (cdr ms))))) (print "m1: ")(princ m1)(terpri) );end progn );end if );end foreach (print "mlist: ")(princ msliste)(terpri) (setq mslistobjname (cdr (car msliste)));Objektname von m1 (setq akttab (getvar "CTAB")) ;(foreach teil (layoutlist)(setvar "ctab" teil) (foreach teil (mapcar 'cadr (ssnamex (ssget "_x" (list (cons 0 "VIEWPORT")(cons 69 1)(cons 410 (getvar "ctab"))) ) ) );end mapcar - holt Objektnamen aller Papierbereich-Ansichtsfenstern (setvar 'CVPORT (cdr (assoc 69 (entget teil)))) (setq ENTScale (entget (cdr (assoc 340 (entget (cdr (assoc 360 (entget (cdr (assoc 360 (entget teil))))))) ) ) ) ) (print "Teil: ")(princ "DICTIONARY")(princ " - ")(princ (entget (cdr (assoc 360 (entget teil)))))(terpri) (print "Teil: ")(princ "XRECORD")(princ " - ")(princ (entget (cdr (assoc 360 (entget (cdr (assoc 360 (entget teil))))))))(terpri) (setq xrecordlst (entget (cdr (assoc 360 (entget (cdr (assoc 360 (entget teil)))))))) (setq xrecordnam (cdr (car (entget (cdr (assoc 360 (entget (cdr (assoc 360 (entget teil)))))))))) (print "Teil: ")(princ "SCALE")(princ " - ")(princ (entget (cdr (assoc 340 (entget (cdr (assoc 360 (entget (cdr (assoc 360 (entget teil)))))))))))(terpri) (print "xrecordnam: ")(princ xrecordnam)(terpri) (princ ENTScale)(terpri) (setq xrecordlst (subst (cons 340 mslistobjname) (assoc 340 xrecordlst) xrecordlst)) (entmod xrecordlst) );end foreach ;end foreach - wechslet duch alle Layouts, damit alle Papierbereich-Ansichtfenster erfasst werden können );end defun ;---------- (SetSysAFBesmastab) beim ersten Aufruf der Funktion (SetSysAFBesmastab) "Teil: " XRECORD - ((-1 . <Objektname: 316f3af0> ) (0 . XRECORD) (5 . F2C7) (102 . {ACAD_REACTORS) (330 . <Objektname: 316f3ae0> ) (102 . }) (330 . <Objektname: 316f3ae0> ) (100 . AcDbXrecord) (280 . 1) (90 . 1) (340 . <Objektname: 22f7e820> )) wenn ich dann die Funktion ein zweites mal ausführe: "Teil: " XRECORD - ((-1 . <Objektname: 316f3af0> ) (0 . XRECORD) (5 . F2C7) (102 . {ACAD_REACTORS) (330 . <Objektname: 316f3ae0> ) (102 . }) (330 . <Objektname: 316f3ae0> ) (100 . AcDbXrecord) (280 . 1) (90 . 1) (340 . <Objektname: 22f7e820> ) (90 . 1) (340 . <Objektname: 316edc50> )) an die Entityliste vom XRECORD wird zusätzlich am Ende (90 . 1) (340 . <Objektname: 316edc50> ) angefügt statt die bestehende (340 . <Objektname: 22f7e820> ) durch (340 . <Objektname: 316edc50> ) zu ersetzen. Vielleicht hast du noch eine Idee wo der Fehler liegt, bzw. ob ich die richtige Entityliste (XRECORD)update. ------------------ Danke Stefan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Meldin Mitglied
Beiträge: 398 Registriert: 15.07.2011 ACA2020 Windows10
|
erstellt am: 11. Sep. 2019 12:30 <-- editieren / zitieren --> Unities abgeben: Nur für cadking
Habe das Gefühl man redet an einander vorbei. Warum oder was soll da herauskommen ? (foreach teil (mapcar 'cadr (ssnamex (ssget "_x" (list (cons 0 "VIEWPORT") (cons 69 1) (cons 410 (getvar "ctab")) ) ) ) ) Das layout z.B. xxx hat doch nur das layout xxx oder anders 69 . 1 = Papierbereich wieviele Papierbereiche hat denn dein Layout wenn jetzt die Antwort 1 ist warum steckt es dann in einer schleife. ???? aber ok wenn dass (command "_.mspace") (setvar 'CANNOSCALE "1:1000") (command "_.pspace") nicht dein Problem behebt verstehen ich dein vorhaben nicht Sorry dann bin ich hier raus ------------------ Gruß Wolfgang Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadking Mitglied CAD-Zeichendiensleistung
Beiträge: 242 Registriert: 26.10.2004 Intel Quadcore i7,W7-64bit, Quadro FX 3800 MEP/ACA2018; MEP/ACA2018; MEP/ACA2021; MEP/ACA2021
|
erstellt am: 11. Sep. 2019 14:27 <-- editieren / zitieren --> Unities abgeben:
Hallo Meldin, ich denke du verstehst nicht was ich will. Ich möchte den Beschriftungsmaßstab aller Papierbereich-Ansichtsfenster ändern. Jedes Layout in der Zeichnung hat genau 1 Papierbereich-Ansichtsfenster. An das Papierbereich-Ansichtsfenster kommt man mit dem Code: ;code anfang ;Holt Papierbereich-Ansichtsfenster im aktuellen Layout in den Auswahlsatz (defun GetSystemAnsichtsfensterAkt (/ ss) (setq ss (ssget "_X" (list '(0 . "VIEWPORT") (cons 69 1) (cons 410 (getvar "CTAB")))))(sssetfirst ss ss) ) (GetSystemAnsichtsfensterAkt) ;code ende Wenn sich das Papierbereich-Ansichtsfenster im Auswahlsatz befindet kann man in der Eigenschaft-Dialgbox den Bechriftungsmaßstab ändern. mit (command "_.mspace") wechselt man in ein "manuelles Ansichtsfenster", wovon es in jedem Layout mehrere geben kann (assoc 69 . <1) (setvar 'CANNOSCALE "1:1000") wird für Papierbereich-Ansichtsfenster (command "_.pspace") zurückgewiesen (schreibgeschützt) Ich hoffe du verstehst was ich meine. Vielen Dank für deine Bemühungen. ------------------ Danke Stefan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Vino Mitglied
Beiträge: 229 Registriert: 24.05.2005 Windows 10 BricsCAD Pro V23
|
erstellt am: 11. Sep. 2019 14:39 <-- editieren / zitieren --> Unities abgeben: Nur für cadking
Hallo, ohne mich mit deinem Code genauer zu beschäftigen... Mit
Code:
(defun c:afm ( / mst aflist) (foreach ms (dictsearch (namedobjdict) "ACAD_SCALELIST") (if (and (= 350 (car ms))(= (cdr (assoc 300 (entget (cdr ms)))) "1:1000")) (setq mst (cdr (assoc -1 (entget (cdr ms))))) ) ) (if mst (progn (if (setq aflist (ssget "X" '((0 . "VIEWPORT")))) (progn (setq n 0) (repeat (sslength aflist) (if (setq af (cdr (assoc 360 (setq elist (entget (ssname aflist n)))))) (progn (setq elist (entget (cdr (assoc 360 (entget af))))) (entmod (subst (cons 340 mst) (assoc 340 elist) elist)) ) ) (setq n (1+ n)) ) ) (princ "\nKeine Ansichtsfenster vorhanden!") ) ) (princ "\nKein Massstab \"1:1000\" definiert!") ) (princ) )
... werden die Beschriftungsmaßstäbe aller Ansichtsfenster auf 1:1000 gesetzt. Gruß Stefan
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadking Mitglied CAD-Zeichendiensleistung
Beiträge: 242 Registriert: 26.10.2004 Intel Quadcore i7,W7-64bit, Quadro FX 3800 MEP/ACA2018; MEP/ACA2018; MEP/ACA2021; MEP/ACA2021
|
erstellt am: 11. Sep. 2019 15:10 <-- editieren / zitieren --> Unities abgeben:
mit Verlaub, dein Code bewirkt in meiner Zeichnung gar nichts, denn (foreach ms (dictsearch (namedobjdict) "ACAD_SCALELIST") (if (and (= 350 (car ms))(= (cdr (assoc 300 (entget (cdr ms)))) "1:1000")) (setq mst (cdr (assoc -1 (entget (cdr ms))))) ) ) ergibt immer nil, obwohl der Bechriftungsmaßstab 1:1000 in meiner Maßstabsliste vorhanden ist. Zitat: Original erstellt von Vino: Hallo,ohne mich mit deinem Code genauer zu beschäftigen... Mit
Code:
(defun c:afm ( / mst aflist) (foreach ms (dictsearch (namedobjdict) "ACAD_SCALELIST") (if (and (= 350 (car ms))(= (cdr (assoc 300 (entget (cdr ms)))) "1:1000")) (setq mst (cdr (assoc -1 (entget (cdr ms))))) ) ) (if mst (progn (if (setq aflist (ssget "X" '((0 . "VIEWPORT")))) (progn (setq n 0) (repeat (sslength aflist) (if (setq af (cdr (assoc 360 (setq elist (entget (ssname aflist n)))))) (progn (setq elist (entget (cdr (assoc 360 (entget af))))) (entmod (subst (cons 340 mst) (assoc 340 elist) elist)) ) ) (setq n (1+ n)) ) ) (princ "\nKeine Ansichtsfenster vorhanden!") ) ) (princ "\nKein Massstab \"1:1000\" definiert!") ) (princ) )
... werden die Beschriftungsmaßstäbe aller Ansichtsfenster auf 1:1000 gesetzt. Gruß Stefan
------------------ Danke Stefan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Meldin Mitglied
Beiträge: 398 Registriert: 15.07.2011 ACA2020 Windows10
|
erstellt am: 12. Sep. 2019 09:01 <-- editieren / zitieren --> Unities abgeben: Nur für cadking
Also jetzt glaube ich dich verstanden zu haben. Hoffe ich. Hier die Anpassung für alle Layouts. hoffe das wars. Code: (progn (setvar "tilemode" 0) (setq LetztesAKcTab (getvar "ctab")) (setq AlleLayoutsAlt (layoutlist)) (command "Layout" "N" "") (setq AlleLayoutsNeu (layoutlist)) (setq NeuerstelltesLO (car (vl-remove-if '(lambda (Layoutname) (member Layoutname AlleLayoutsAlt) ) AlleLayoutsNeu ) ) ) (setvar "ctab" NeuerstelltesLO) (and (setq VP-Daten (assoc 360 (entget (cadar (ssnamex (ssget "X" (list (cons 0 "viewport") (cons 410 NeuerstelltesLO) (cons 69 1) ) ) ) ) ) ) ) (setq VP-Daten (assoc 360 (entget (cdr VP-Daten)))) (setq VP-Daten (entget (cdr (assoc 340 (entget (cdr VP-Daten)))))) (entmod (subst (cons 300 "1:1000") (assoc 300 VP-Daten) VP-Daten) ) ) (setvar "ctab" LetztesAKcTab) (command "Layout" "L" NeuerstelltesLO) )
------------------ Gruß Wolfgang Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadking Mitglied CAD-Zeichendiensleistung
Beiträge: 242 Registriert: 26.10.2004 Intel Quadcore i7,W7-64bit, Quadro FX 3800 MEP/ACA2018; MEP/ACA2018; MEP/ACA2021; MEP/ACA2021
|
erstellt am: 12. Sep. 2019 10:41 <-- editieren / zitieren --> Unities abgeben:
Hallo Meldin, zum genauen Verständnis was ich machen möchte habe ich die msVPakttausch-test.dwg im Anhang wenn du in der Befehlszeile (setq ss (ssget "_X" (list '(0 . "VIEWPORT") (cons 69 1) (cons 410 (getvar "CTAB")))))(sssetfirst ss ss) eingibst, wird das Papierbereich-Ansichtsfenster selektiert. In der Eigenschaften-Dialogbox siehst du den Beschriftungsmaßstab des Papierbereich-Ansichtsfensters im aktuellen Layout (1:100) Diesen Beschriftungsmaßstab möchte ich per Lisp ändern, dann ins nächste Layout wechseln und auch hier das Selbe machen. Ich hoffe jetzt ist klar was ich machen möchte. Dein letzter Code benennt mir wieder den Eintrag in der Scale-liste um (0 . SCALE) (300 . 1:100) nach (0 . SCALE) (300 . 1:1000) sodass ich dann 2x den Eintrag 1:1000 in der Scale-liste habe und 1:100 ist verschwunden. Das will ich nicht. ------------------ Danke Stefan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Meldin Mitglied
Beiträge: 398 Registriert: 15.07.2011 ACA2020 Windows10
|
erstellt am: 12. Sep. 2019 11:00 <-- editieren / zitieren --> Unities abgeben: Nur für cadking
|
Meldin Mitglied
Beiträge: 398 Registriert: 15.07.2011 ACA2020 Windows10
|
erstellt am: 12. Sep. 2019 11:11 <-- editieren / zitieren --> Unities abgeben: Nur für cadking
|
Meldin Mitglied
Beiträge: 398 Registriert: 15.07.2011 ACA2020 Windows10
|
erstellt am: 12. Sep. 2019 11:25 <-- editieren / zitieren --> Unities abgeben: Nur für cadking
So teste das mal! Code: (progn (setvar "tilemode" 0) (setq LetztesAKcTab (getvar "ctab")) (setq AlleLayoutsAlt (layoutlist)) (command "Layout" "N" "") (setq AlleLayoutsNeu (layoutlist)) (setq NeuerstelltesLO (car (vl-remove-if '(lambda (Layoutname) (member Layoutname AlleLayoutsAlt) ) AlleLayoutsNeu ) ) ) (mapcar '(lambda (Layoutname) (setvar 'ctab Layoutname) (and (setq VP-Daten (assoc 360 (entget (cadar (ssnamex (ssget "X" (list (cons 0 "viewport") (cons 410 Layoutname) (cons 69 1) ) ) ) ) ) ) ) (setq VP-Daten (assoc 360 (entget (cdr VP-Daten)))) (setq VP-Daten (entget (cdr (assoc 340 (entget (cdr VP-Daten))))) ) (entmod (subst (cons 300 "1:1000") (assoc 300 VP-Daten) VP-Daten) ) ) ) AlleLayoutsNeu ) (setvar "ctab" LetztesAKcTab) (command "Layout" "L" NeuerstelltesLO) )
------------------ Gruß Wolfgang Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadking Mitglied CAD-Zeichendiensleistung
Beiträge: 242 Registriert: 26.10.2004 Intel Quadcore i7,W7-64bit, Quadro FX 3800 MEP/ACA2018; MEP/ACA2018; MEP/ACA2021; MEP/ACA2021
|
erstellt am: 12. Sep. 2019 11:31 <-- editieren / zitieren --> Unities abgeben:
Danke für Dein Engagement. Ich muss in 1600 Dateien die Maßstabslisten bereinigen. Die Dateien enthalten zum Teil mehrere Layouts, bei denen der Beschriftungsmaßstab auf 1:1000_1, 1:1000_4 ... eingestellt wurde. Diese Maßstäbe lassen sich nicht aus der Maßstabsliste löschen. Darum habe ich eine Lisp, die alle Dateien öffnet, (die Maßstäbe der Pap-AF auf 1:100 setzen soll), dann alle Maßstäbe löscht und die benötigten Maßstäbe aus einer Vorlagezeichnug importiert. Ein Lösung für mein Problem würde mir sehr helfen. Ich muss die 1600 Dateien am Montag liefern. Zitat: Original erstellt von Meldin: Sorry der fehler lag bei mir ich schaue es mir nochmal an
------------------ Danke Stefan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadking Mitglied CAD-Zeichendiensleistung
Beiträge: 242 Registriert: 26.10.2004 Intel Quadcore i7,W7-64bit, Quadro FX 3800 MEP/ACA2018; MEP/ACA2018; MEP/ACA2021; MEP/ACA2021
|
erstellt am: 12. Sep. 2019 12:36 <-- editieren / zitieren --> Unities abgeben:
Hallo Meldin, nö, macht das gleiche wie der vorherige Code, 2x den Eintrag 1:1000 in der Scale-liste habe und 1:100 ist verschwunden. Der Fehler in deinem Code liegt bei (entmod (subst (cons 300 "1:1000") (assoc 300 VP-Daten) VP-Daten) ) Dadurch wird der ((-1 . <Objektname: 31dc9dd0> ) (0 . SCALE)(300 . 1:100) (140 . 1.0) (141 . 0.1) (290 . 0)) nach ((-1 . <Objektname: 31dc9dd0> ) (0 . SCALE)(300 . 1:1000) (140 . 1.0) (141 . 1.0) (290 . 0)) umbenannt und ist dann doppelt in der Scalelist ich denke man muss im (-1 . <Objektname: 31dc7bb0> ) (0 . XRECORD) des (-1 . <Objektname: 31dc7b90> ) (0 . VIEWPORT) den (-1 . <Objektname: 31dc9dd0> ) (0 . SCALE) austauschen. "Entityliste: " VIEWPORT - ((-1 . <Objektname: 31dc7b90> ) (0 . VIEWPORT) (5 . 629) (102 . {ACAD_XDICTIONARY) (360 . <Objektname: 31dc7ba0> ) (102 . }) (330 . <Objektname: 3487cdc0> ) (100 . AcDbEntity) (67 . 1) (410 . Layout1) (8 . 0) (100 . AcDbViewport) (10 145.341 101.812 0.0) (40 . 511.049) (41 . 211.687) (68 . 1) (69 . 1) (12 145.341 102.974 0.0) (13 0.0 0.0 0.0) (14 10.0 10.0 0.0) (15 10.0 10.0 0.0) (16 0.0 0.0 1.0) (17 0.0 0.0 0.0) (42 . 50.0) (43 . 0.0) (44 . 0.0) (45 . 205.889) (50 . 0.0) (51 . 0.0) (72 . 1000) (90 . 819232) (281 . 0) (71 . 1) (74 . 0) (110 0.0 0.0 0.0) (111 1.0 0.0 0.0) (112 0.0 1.0 0.0) (79 . 0) (146 . 0.0) (170 . 0) (61 . 5) (348 . <Objektname: 3487caf0> ) (292 . 1) (282 . 1) (141 . 0.0) (142 . 0.0) (63 . 250) (421 . 3355443)) "Entityliste: " DICTIONARY - ((-1 . <Objektname: 31dc7ba0> ) (0 . DICTIONARY) (330 . <Objektname: 31dc7b90> ) (5 . 62A) (100 . AcDbDictionary) (280 . 1) (281 . 1) (3 . ASDK_XREC_ANNOTATION_SCALE_INFO) (360 . <Objektname: 31dc7bb0> )) "Entityliste: " XRECORD - ((-1 . <Objektname: 31dc7bb0> ) (0 . XRECORD) (5 . 62B) (102 . {ACAD_REACTORS) (330 . <Objektname: 31dc7ba0> ) (102 . }) (330 . <Objektname: 31dc7ba0> ) (100 . AcDbXrecord) (280 . 1) (90 . 1) (340 . <Objektname: 31dc9dd0> )) "Entityliste: " SCALE - ((-1 . <Objektname: 31dc9dd0> ) (0 . SCALE) (5 . 405) (102 . {ACAD_REACTORS) (330 . <Objektname: 3487cc20> ) (102 . }) (330 . <Objektname: 3487cc20> ) (100 . AcDbScale) (70 . 0) (300 . 1:100) (140 . 1.0) (141 . 0.1) (290 . 0)) Ich habe mal meine Lisp angehängt. Die SUBST und Entmod am Ende sind geREMt. Zum Testen füge ich dir grREMten Zeilen in der Befehlszeile manuell ein. Bei meinem (entmode) wird im XRECORD der SCALE nicht ausgetauscht, sondern ein zusätzlicher (90 . 1) (340 . <Objektname: xxxx> ) mit dem gewünschten Maßstab angefügt. Das kann man erkennen, wenn nach dem ersten Durchlauf die geREMten Zeilen SUBST und ENTMOD manuell in der Befehlszeile eingefügt hat und dann die Lisp ein zweites mal startet und den XRECORD vom ersten Durchlauf mit dem XRECORD vom zweiten Durchlauf vergleicht. ------------------ Danke Stefan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Meldin Mitglied
Beiträge: 398 Registriert: 15.07.2011 ACA2020 Windows10
|
erstellt am: 12. Sep. 2019 13:07 <-- editieren / zitieren --> Unities abgeben: Nur für cadking
|
Vino Mitglied
Beiträge: 229 Registriert: 24.05.2005 Windows 10 BricsCAD Pro V23
|
erstellt am: 12. Sep. 2019 13:54 <-- editieren / zitieren --> Unities abgeben: Nur für cadking
Hallo noch ein letztes mal. was ich in deinem ersten Post überlesen hatte:
Zitat: Original erstellt von cadking: ...Die Papierbereich-Ansichtsfenster (also das Layout selbst) haben verschieden Beschriftungsmaßstäbe
Du willst den Maßstab des Layouts umstellen. Im Titel redest du von Ansichtsfenstern... Layouts sollten eigentlich gar keinen Beschriftungsmaßstab haben... Dennoch sollte es (wenn es in deinen Layouts wie in deiner TestDWG einen GK 360 gibt) mit meinem Code funktionieren. Unter BricsCAD läuft mein Code mit Ansichtsfenstern (und in deiner TestDWG auch mit Layouts!!!) jedenfalls einwandfrei. Ich bin hiermit raus. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Meldin Mitglied
Beiträge: 398 Registriert: 15.07.2011 ACA2020 Windows10
|
erstellt am: 12. Sep. 2019 15:40 <-- editieren / zitieren --> Unities abgeben: Nur für cadking
Also wenn was nicht klappt lässt es mir auch keine ruhe. Aber so get es. nur fehlt mir die Zeit um es um zuzetzen. Erstmal Code: (setq Maßstäbe (dictsearch (namedobjdict) "ACAD_SCALELIST")) (setq Maßstäbe (vl-remove-if-not '(lambda (x) (= (car X) 350)) Maßstäbe)) (foreach teil Maßstäbe (setq ENTScale (entget (cdr teil))) (setq ENTScale (subst (cons 290 0) (assoc 290 ENTScale) ENTScale ) ) (entmod ENTScale) ) (command "-MSTABLISTEBEARB" "Löschen" "*" "Beenden")
so jetzt kommt die frage doppelte Maßstäbe würdest du nach ändern von 290 nicht mehr haben oder kannst sie einfach umbenennnen. Wenn das nicht reicht: Dann als DXF speichern dann einlesen Maßstäbe suchen alt neu "1:?" 5 handent suchen und dann an der richigen stelle alt gegen neu tauschen. handisch hat alles geklappt! ------------------ Gruß Wolfgang Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadking Mitglied CAD-Zeichendiensleistung
Beiträge: 242 Registriert: 26.10.2004 Intel Quadcore i7,W7-64bit, Quadro FX 3800 MEP/ACA2018; MEP/ACA2018; MEP/ACA2021; MEP/ACA2021
|
erstellt am: 12. Sep. 2019 16:17 <-- editieren / zitieren --> Unities abgeben:
Hallo Vino, genau, ich möchte den Beschriftungsmaßstab vom Layout selbst umstellen (=Papierbereich-Ansichtsfenster), der übrigens immer einen Beschriftungsmaßstab hat. In Meiner AutoCAD MEP2018 Version ändert dein Code den Beschriftungsmaßstab des Layouts nicht. Zitat: Original erstellt von Vino: Hallo noch ein letztes mal.was ich in deinem ersten Post überlesen hatte: Du willst den Maßstab des Layouts umstellen. Im Titel redest du von Ansichtsfenstern... Layouts sollten eigentlich gar keinen Beschriftungsmaßstab haben...
Dennoch sollte es (wenn es in deinen Layouts wie in deiner TestDWG einen GK 360 gibt) mit meinem Code funktionieren. Unter BricsCAD läuft mein Code mit Ansichtsfenstern (und in deiner TestDWG auch mit Layouts!!!) jedenfalls einwandfrei. Ich bin hiermit raus.
------------------ Danke Stefan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadking Mitglied CAD-Zeichendiensleistung
Beiträge: 242 Registriert: 26.10.2004 Intel Quadcore i7,W7-64bit, Quadro FX 3800 MEP/ACA2018; MEP/ACA2018; MEP/ACA2021; MEP/ACA2021
|
erstellt am: 12. Sep. 2019 17:08 <-- editieren / zitieren --> Unities abgeben:
Hallo Meldin, bitte zum Verständnis, was bedeutet der GC 290? "ENTScale: " ((-1 . <Objektname: 32f9f640> ) (0 . SCALE) (5 . 1EC) (102 . {ACAD_REACTORS) (330 . <Objektname: 3de24c20> ) (102 . }) (330 . <Objektname: 3de24c20> ) (100 . AcDbScale) (70 . 0) (300 . 1:1) (140 . 1.0) (141 . 0.001) (290 . 0)) "ENTScale: " ((-1 . <Objektname: 32f9c570> ) (0 . SCALE) (5 . 3FF) (102 . {ACAD_REACTORS) (330 . <Objektname: 3de24c20> ) (102 . }) (330 . <Objektname: 3de24c20> ) (100 . AcDbScale) (70 . 0) (300 . 1:2) (140 . 1.0) (141 . 0.002) (290 . 0)) "ENTScale: " ((-1 . <Objektname: 32f9c580> ) (0 . SCALE) (5 . 400) (102 . {ACAD_REACTORS) (330 . <Objektname: 3de24c20> ) (102 . }) (330 . <Objektname: 3de24c20> ) (100 . AcDbScale) (70 . 0) (300 . 1:5) (140 . 1.0) (141 . 0.005) (290 . 0)) "ENTScale: " ((-1 . <Objektname: 32f9c590> ) (0 . SCALE) (5 . 401) (102 . {ACAD_REACTORS) (330 . <Objektname: 3de24c20> ) (102 . }) (330 . <Objektname: 3de24c20> ) (100 . AcDbScale) (70 . 0) (300 . 1:10) (140 . 1.0) (141 . 0.01) (290 . 0)) "ENTScale: " ((-1 . <Objektname: 32f9c5a0> ) (0 . SCALE) (5 . 402) (102 . {ACAD_REACTORS) (330 . <Objektname: 3de24c20> ) (102 . }) (330 . <Objektname: 3de24c20> ) (100 . AcDbScale) (70 . 0) (300 . 1:20) (140 . 1.0) (141 . 0.02) (290 . 0)) "ENTScale: " ((-1 . <Objektname: 32f9c5b0> ) (0 . SCALE) (5 . 403) (102 . {ACAD_REACTORS) (330 . <Objektname: 3de24c20> ) (102 . }) (330 . <Objektname: 3de24c20> ) (100 . AcDbScale) (70 . 0) (300 . 1:25) (140 . 1.0) (141 . 0.025) (290 . 0)) "ENTScale: " ((-1 . <Objektname: 32f9c5c0> ) (0 . SCALE) (5 . 404) (102 . {ACAD_REACTORS) (330 . <Objektname: 3de24c20> ) (102 . }) (330 . <Objektname: 3de24c20> ) (100 . AcDbScale) (70 . 0) (300 . 1:50) (140 . 1.0) (141 . 0.05) (290 . 0)) "ENTScale: " ((-1 . <Objektname: 32f9c5d0> ) (0 . SCALE) (5 . 405) (102 . {ACAD_REACTORS) (330 . <Objektname: 3de24c20> ) (102 . }) (330 . <Objektname: 3de24c20> ) (100 . AcDbScale) (70 . 0) (300 . 1:100) (140 . 1.0) (141 . 0.1) (290 . 0)) "ENTScale: " ((-1 . <Objektname: 32f9c5e0> ) (0 . SCALE) (5 . 406) (102 . {ACAD_REACTORS) (330 . <Objektname: 3de24c20> ) (102 . }) (330 . <Objektname: 3de24c20> ) (100 . AcDbScale) (70 . 0) (300 . 1:200) (140 . 1.0) (141 . 0.2) (290 . 0)) "ENTScale: " ((-1 . <Objektname: 32f9c5f0> ) (0 . SCALE) (5 . 407) (102 . {ACAD_REACTORS) (330 . <Objektname: 3de24c20> ) (102 . }) (330 . <Objektname: 3de24c20> ) (100 . AcDbScale) (70 . 0) (300 . 1:250) (140 . 1.0) (141 . 0.25) (290 . 0)) "ENTScale: " ((-1 . <Objektname: 32f9c600> ) (0 . SCALE) (5 . 408) (102 . {ACAD_REACTORS) (330 . <Objektname: 3de24c20> ) (102 . }) (330 . <Objektname: 3de24c20> ) (100 . AcDbScale) (70 . 0) (300 . 1:500) (140 . 1.0) (141 . 0.5) (290 . 0)) "ENTScale: " ((-1 . <Objektname: 32f9f630> ) (0 . SCALE) (5 . 1EB) (102 . {ACAD_REACTORS) (330 . <Objektname: 3de24c20> ) (102 . }) (330 . <Objektname: 3de24c20> ) (100 . AcDbScale) (70 . 0) (300 . 1:1000) (140 . 1.0) (141 . 1.0) (290 . 1)) und warum steht der GC 290 von 1:1000 auf 1 (290 . 1) und alle anderen auf (290 . 0)?
Zitat: Original erstellt von Meldin: Also wenn was nicht klappt lässt es mir auch keine ruhe. Aber so get es. nur fehlt mir die Zeit um es um zuzetzen. Erstmal
Code: (setq Maßstäbe (dictsearch (namedobjdict) "ACAD_SCALELIST")) (setq Maßstäbe (vl-remove-if-not '(lambda (x) (= (car X) 350)) Maßstäbe)) (foreach teil Maßstäbe (setq ENTScale (entget (cdr teil))) (setq ENTScale (subst (cons 290 0) (assoc 290 ENTScale) ENTScale ) ) (entmod ENTScale) ) (command "-MSTABLISTEBEARB" "Löschen" "*" "Beenden")
so jetzt kommt die frage doppelte Maßstäbe würdest du nach ändern von 290 nicht mehr haben oder kannst sie einfach umbenennnen. Wenn das nicht reicht: Dann als DXF speichern dann einlesen Maßstäbe suchen alt neu "1:?" 5 handent suchen und dann an der richigen stelle alt gegen neu tauschen. handisch hat alles geklappt!
------------------ Danke Stefan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Meldin Mitglied
Beiträge: 398 Registriert: 15.07.2011 ACA2020 Windows10
|
erstellt am: 12. Sep. 2019 17:14 <-- editieren / zitieren --> Unities abgeben: Nur für cadking
So wie ich das sehe ist das der der probleme mach ist der auf 0 kann man ihn löschen ansonsten werden neue angelegt mit _1 _2 _3 usw. so könntest du dein prob eventuell schon in den griff bekommen ich weis halt nur nicht wie deine weiteren zeichnungnen aufgebaut sind ------------------ Gruß Wolfgang Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Meldin Mitglied
Beiträge: 398 Registriert: 15.07.2011 ACA2020 Windows10
|
erstellt am: 12. Sep. 2019 20:33 <-- editieren / zitieren --> Unities abgeben: Nur für cadking
So die Sache hat mir jetzt den letzten nerv geraubt und ich denke hier ist die Lösung P.S. wenn man die Einheiten wechselt z.b. von Meter zu Millmeter kann es auch vorkommen das man doppelte maße mit unterstrich bekommt _1 _2 _3 usw. Bei der 290 ist es so das dieser Maßstab bei 1 die Zeichnungseinheit festlegt Millimeter, meter usw. Bau die noch ein paar abfragen zur sicherheit mehr ein hoffe es Läuft auch bei dir so wie es soll.
Code: (foreach teil (layoutlist) (progn (setvar "ctab" teil) (setvar "tilemode" 0) (setq VP-Layout (ssname (ssget "X" (list (cons 0 "viewport") (cons 410 teil) (cons 69 1) ) ) 0 ) ) (setq SucheMaßstab "1:500") (setq SucheMaßstabHandent nil) (if (and (setq Maßstäbe (dictsearch (namedobjdict) "ACAD_SCALELIST")) (setq Maßstäbe (vl-remove-if-not '(lambda (x) (= (car X) 350)) Maßstäbe) ) ) (progn (foreach teil Maßstäbe (if (= SucheMaßstab (cdr (assoc 300 (entget (cdr teil))))) (setq SucheMaßstabHandent (cdr (assoc 5 (entget (cdr teil)))) ) ) ) ) ) (setq VP-Layout-Object (vlax-ename->vla-object VP-Layout)) (setq VP-Layout-Dictionary (vla-GetExtensionDictionary VP-Layout-Object) ) (setq VP-Layout-XRecord (vl-catch-all-apply 'vla-item (list VP-Layout-Dictionary "ASDK_XREC_ANNOTATION_SCALE_INFO" ) ) ) (if (vl-catch-all-error-p VP-Layout-XRecord) (progn (setq VP-Layout-XRecord (vla-AddXrecord VP-Layout-Dictionary "ASDK_XREC_ANNOTATION_SCALE_INFO" ) ) (setq Datensafearray (vlax-make-variant (vlax-safearray-fill (vlax-make-safearray vlax-vbInteger '(0 . 1) ) '(90 340) ) ) ) (setq NeueVP-Werte (vlax-make-variant (vlax-safearray-fill (vlax-make-safearray vlax-vbVariant '(0 . 1)) (list 1 SucheMaßstabHandent) ) ) ) (vla-SetXrecordData VP-Layout-XRecord Datensafearray NeueVP-Werte ) ) (progn (vla-GetXrecordData VP-Layout-XRecord 'Datensafearray 'NeueVP-Werte ) (vlax-safearray-put-element NeueVP-Werte 1 SucheMaßstabHandent ) (vla-SetXrecordData VP-Layout-XRecord Datensafearray NeueVP-Werte ) ) ) ) (command "-MSTABLISTEBEARB" "Löschen" "*" "Beenden") )
------------------ Gruß Wolfgang [Diese Nachricht wurde von Meldin am 12. Sep. 2019 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadking Mitglied CAD-Zeichendiensleistung
Beiträge: 242 Registriert: 26.10.2004 Intel Quadcore i7,W7-64bit, Quadro FX 3800 MEP/ACA2018; MEP/ACA2018; MEP/ACA2021; MEP/ACA2021
|
erstellt am: 12. Sep. 2019 22:42 <-- editieren / zitieren --> Unities abgeben:
Also Meldin, Chapeau! Dein Code macht genau das, was ich brauche. Aber noch mal zum Verständis für die Lösung die ich versucht habe und die nicht funktioniert: ich habe die Entityliste des VP (69 . 1) "Entityliste: " VIEWPORT - ((-1 . <Objektname: 3188cb90> ) (0 . VIEWPORT) (5 . 629) (102 . {ACAD_XDICTIONARY) (360 . <Objektname: 3188cba0> ) (102 . }) (330 . <Objektname: 31888dc0> ) (100 . AcDbEntity) (67 . 1) (410 . Layout1) (8 . 0) (100 . AcDbViewport) (10 145.341 104.463 0.0) (40 . 511.049) (41 . 211.687) (68 . 1) (69 . 1) (12 145.341 107.114 0.0) (13 0.0 0.0 0.0) (14 10.0 10.0 0.0) (15 10.0 10.0 0.0) (16 0.0 0.0 1.0) (17 0.0 0.0 0.0) (42 . 50.0) (43 . 0.0) (44 . 0.0) (45 . 208.753) (50 . 0.0) (51 . 0.0) (72 . 1000) (90 . 819232) (281 . 0) (71 . 1) (74 . 0) (110 0.0 0.0 0.0) (111 1.0 0.0 0.0) (112 0.0 1.0 0.0) (79 . 0) (146 . 0.0) (170 . 0) (61 . 5) (348 . <Objektname: 31888af0> ) (292 . 1) (282 . 1) (141 . 0.0) (142 . 0.0) (63 . 250) (421 . 3355443)) In der Entityliste des VP ist in (360 . <Objektname: 3188cba0> ) der Objektname des DICTIONARY "Entityliste: " DICTIONARY - ((-1 . <Objektname: 3188cba0> ) (0 . DICTIONARY) (330 . <Objektname: 3188cb90> ) (5 . 62A) (100 . AcDbDictionary) (280 . 1) (281 . 1) (3 . ASDK_XREC_ANNOTATION_SCALE_INFO) (360 . <Objektname: 3188cbb0> )) In der Entityliste des DICTIONARY ist in (360 . <Objektname: 3188cbb0> ) der Objektname des XRECORD "Entityliste: " XRECORD - ((-1 . <Objektname: 3188cbb0> ) (0 . XRECORD) (5 . 62B) (102 . {ACAD_REACTORS) (330 . <Objektname: 3188cba0> ) (102 . }) (330 . <Objektname: 3188cba0> ) (100 . AcDbXrecord) (280 . 1) (90 . 1) (340 . <Objektname: 31887e30> )) In der Entityliste des XRECORD steht in (340 . <Objektname: 31887e30> ) der Objektname des dem VP zugewiesenen SCALE "Entityliste: " SCALEIST - ((-1 . <Objektname: 31887e30> ) (0 . SCALE) (5 . 1EB) (102 . {ACAD_REACTORS) (330 . <Objektname: 31888c20> ) (102 . }) (330 . <Objektname: 31888c20> ) (100 . AcDbScale) (70 . 0) (300 . 1:1000) (140 . 1.0) (141 . 1.0) (290 . 1)) Wenn ich nun den Objektnamen des zugewiesenen SCALE durch den Objektnamen des gewünschten SCALE mit (setq xrecordnewlst (subst (cons 340 objnameSCALEsoll) (assoc 340 objnameSCALEist) xrecordistlst) austausche und mit (entmod xrecordnewlst) die geänderte XRECORD-Liste zurückschreibe sollte es doch auch funktionieren. (setq xrecordnewlst (subst (cons 340 objnameSCALEsoll) (assoc 340 objnameSCALEist) xrecordistlst) und (entmod xrecordnewlst) tauscht aber die XRECORD-Liste nicht aus, sondern fügt am Ende der XRECORD-Liste ein weiteres (90 . 1) und der Objektnamen des gewünschten SCALE an, wie (append ... ------------------ Danke Stefan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Meldin Mitglied
Beiträge: 398 Registriert: 15.07.2011 ACA2020 Windows10
|
erstellt am: 13. Sep. 2019 08:32 <-- editieren / zitieren --> Unities abgeben: Nur für cadking
ich weis nicht ob du gestern noch so schnell warst, hatte aus meinem Code die 290 schleife raus geschmissen und oben nochmal kommentiert. es scheint so das bei gesetzten MAßstab der Eintrrag der Scale_Info zu durch autocad in den XREC gelöscht wird und das macht eine manipulation auf gewohntem wege unmöglich und der darin enthaltene 340 gc für den anno scale. Also wieder hinzufügen und mit gewünschten daten füllen. ------------------ Gruß Wolfgang Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |