Hot News aus dem CAD.de-Newsletter:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Papierbereich-Ansichtsfenster Beschriftungsmaßstab ändern

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
Autor Thema:   Papierbereich-Ansichtsfenster Beschriftungsmaßstab ändern (407 mal gelesen)
cadking
Mitglied
CAD-Zeichendiensleistung


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

Beiträge: 186
Registriert: 26.10.2004

Intel Quadcore i7,W7-64bit, Quadro FX 3800
MEP2012; MEP2015; MEP2018; Architectural Office 2009; Accurender

erstellt am: 04. Sep. 2019 14:09    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

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



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

Beiträge: 290
Registriert: 15.07.2011

AC2016
Windows10

erstellt am: 07. Sep. 2019 09:30    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 cadking 10 Unities + Antwort hilfreich

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


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

Beiträge: 186
Registriert: 26.10.2004

Intel Quadcore i7,W7-64bit, Quadro FX 3800
MEP2012; MEP2015; MEP2018; Architectural Office 2009; Accurender

erstellt am: 08. Sep. 2019 11:20    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

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



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

Beiträge: 290
Registriert: 15.07.2011

AC2016
Windows10

erstellt am: 08. Sep. 2019 19:29    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 cadking 10 Unities + Antwort hilfreich

Doch den siehst du doch 360 360 340

------------------
Gruß Wolfgang

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

cadking
Mitglied
CAD-Zeichendiensleistung


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

Beiträge: 186
Registriert: 26.10.2004

Intel Quadcore i7,W7-64bit, Quadro FX 3800
MEP2012; MEP2015; MEP2018; Architectural Office 2009; Accurender

erstellt am: 09. Sep. 2019 12:24    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

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


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

Beiträge: 186
Registriert: 26.10.2004

Intel Quadcore i7,W7-64bit, Quadro FX 3800
MEP2012; MEP2015; MEP2018; Architectural Office 2009; Accurender

erstellt am: 09. Sep. 2019 13:04    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

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


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

Beiträge: 186
Registriert: 26.10.2004

Intel Quadcore i7,W7-64bit, Quadro FX 3800
MEP2012; MEP2015; MEP2018; Architectural Office 2009; Accurender

erstellt am: 09. Sep. 2019 13:37    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

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



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

Beiträge: 142
Registriert: 24.05.2005

Windows 10
BricsCAD V19

erstellt am: 10. Sep. 2019 07:41    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 cadking 10 Unities + Antwort hilfreich

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


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

Beiträge: 186
Registriert: 26.10.2004

Intel Quadcore i7,W7-64bit, Quadro FX 3800
MEP2012; MEP2015; MEP2018; Architectural Office 2009; Accurender

erstellt am: 10. Sep. 2019 17:32    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

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



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

Beiträge: 290
Registriert: 15.07.2011

AC2016
Windows10

erstellt am: 11. Sep. 2019 12:30    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 cadking 10 Unities + Antwort hilfreich

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


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

Beiträge: 186
Registriert: 26.10.2004

Intel Quadcore i7,W7-64bit, Quadro FX 3800
MEP2012; MEP2015; MEP2018; Architectural Office 2009; Accurender

erstellt am: 11. Sep. 2019 14:27    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

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



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

Beiträge: 142
Registriert: 24.05.2005

Windows 10
BricsCAD V19

erstellt am: 11. Sep. 2019 14:39    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 cadking 10 Unities + Antwort hilfreich

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


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

Beiträge: 186
Registriert: 26.10.2004

Intel Quadcore i7,W7-64bit, Quadro FX 3800
MEP2012; MEP2015; MEP2018; Architectural Office 2009; Accurender

erstellt am: 11. Sep. 2019 15:10    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

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



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

Beiträge: 290
Registriert: 15.07.2011

AC2016
Windows10

erstellt am: 12. Sep. 2019 09:01    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 cadking 10 Unities + Antwort hilfreich

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


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

Beiträge: 186
Registriert: 26.10.2004

Intel Quadcore i7,W7-64bit, Quadro FX 3800
MEP2012; MEP2015; MEP2018; Architectural Office 2009; Accurender

erstellt am: 12. Sep. 2019 10:41    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


msVPakttausch-test.dwg

 
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



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

Beiträge: 290
Registriert: 15.07.2011

AC2016
Windows10

erstellt am: 12. Sep. 2019 11:00    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 cadking 10 Unities + Antwort hilfreich

teste meinen code nochmal bei mir ist das nicht so

------------------
Gruß Wolfgang 

[Diese Nachricht wurde von Meldin am 12. Sep. 2019 editiert.]

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

Meldin
Mitglied



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

Beiträge: 290
Registriert: 15.07.2011

AC2016
Windows10

erstellt am: 12. Sep. 2019 11:11    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 cadking 10 Unities + Antwort hilfreich

Sorry der fehler lag bei mir ich schaue es mir nochmal an

------------------
Gruß Wolfgang

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

Meldin
Mitglied



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

Beiträge: 290
Registriert: 15.07.2011

AC2016
Windows10

erstellt am: 12. Sep. 2019 11:25    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 cadking 10 Unities + Antwort hilfreich

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


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

Beiträge: 186
Registriert: 26.10.2004

Intel Quadcore i7,W7-64bit, Quadro FX 3800
MEP2012; MEP2015; MEP2018; Architectural Office 2009; Accurender

erstellt am: 12. Sep. 2019 11:31    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

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


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

Beiträge: 186
Registriert: 26.10.2004

Intel Quadcore i7,W7-64bit, Quadro FX 3800
MEP2012; MEP2015; MEP2018; Architectural Office 2009; Accurender

erstellt am: 12. Sep. 2019 12:36    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


msVPakttausch.lsp

 
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



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

Beiträge: 290
Registriert: 15.07.2011

AC2016
Windows10

erstellt am: 12. Sep. 2019 13:07    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 cadking 10 Unities + Antwort hilfreich

Also ich habe keine Ahnung mehr wie du das mit LISP anpassen kannst. Für mich scheint es als ob da ein drittprogramm die Änderung verursacht.

------------------
Gruß Wolfgang

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

Vino
Mitglied



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

Beiträge: 142
Registriert: 24.05.2005

Windows 10
BricsCAD V19

erstellt am: 12. Sep. 2019 13:54    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 cadking 10 Unities + Antwort hilfreich

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



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

Beiträge: 290
Registriert: 15.07.2011

AC2016
Windows10

erstellt am: 12. Sep. 2019 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 cadking 10 Unities + Antwort hilfreich

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


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

Beiträge: 186
Registriert: 26.10.2004

Intel Quadcore i7,W7-64bit, Quadro FX 3800
MEP2012; MEP2015; MEP2018; Architectural Office 2009; Accurender

erstellt am: 12. Sep. 2019 16:17    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

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


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

Beiträge: 186
Registriert: 26.10.2004

Intel Quadcore i7,W7-64bit, Quadro FX 3800
MEP2012; MEP2015; MEP2018; Architectural Office 2009; Accurender

erstellt am: 12. Sep. 2019 17:08    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

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



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

Beiträge: 290
Registriert: 15.07.2011

AC2016
Windows10

erstellt am: 12. Sep. 2019 17:14    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 cadking 10 Unities + Antwort hilfreich

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



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

Beiträge: 290
Registriert: 15.07.2011

AC2016
Windows10

erstellt am: 12. Sep. 2019 20:33    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 cadking 10 Unities + Antwort hilfreich

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


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

Beiträge: 186
Registriert: 26.10.2004

Intel Quadcore i7,W7-64bit, Quadro FX 3800
MEP2012; MEP2015; MEP2018; Architectural Office 2009; Accurender

erstellt am: 12. Sep. 2019 22:42    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

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



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

Beiträge: 290
Registriert: 15.07.2011

AC2016
Windows10

erstellt am: 13. Sep. 2019 08:32    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 cadking 10 Unities + Antwort hilfreich

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

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)2019 CAD.de | Impressum | Datenschutz