Hi CAD.DE Gemeinde,
seit der Einführung von "benannten Plotstilen" in AutoCAD mache ich mir Gedanken darüber ob und wie und warum ich die nutzen könnte.
Bis ich einen Artikel in der "Augi-World" las.
Nach der Lektüre dieses Artikels und ein "wenig" rumprobiererei mit dem dort vorgestellten Konzept, habe ich komplett auf STB's umgestellt.
Die Vorteile sind meiner Meinung nach immens:
- Nur noch eine einzige Styletable
- deutlich flexiblere Layoutmöglichkeiten
- absolute Kontrolle darüber was denn nun wie gedruckt wird da es auf einen Blick im Layermanager zu sehen ist. Es wird nix mehr durch irgendeine Zuweisung einer CTB umgebogen.
- volle Nutzbarkeit von Truecolor
Ich pack' mal den Artikel und meine nach dem dort beschriebenen Konzept erzeugte STB als Anhang bei.
Außerdem folgt noch ein wenig Code.
Dieser ist entstanden nachdem mir der User Peter Tropf die Frage stellte wie man denn jetzt relativ schnell die Linienstärken variieren könne wenn man sonst einfach nur 'ne andere CTB genommen hat.
Die nachfolgenden Funktionen modifizieren die Linienstärkenwerte der Layer. Wenn man die auf eine Toolbar legt kann man ruck zuck Layer-Linienstärken erhöhen oder vermindern.
Code:
(vl-load-com)
;|
Funktionen zum Erhöhen bzw. Erniedrigen der Linienstärke
aller Layer einer Zeichnung
|;;; Erhöhung gemäß DIN um Wurzel2
(defun C:LAYLW+ ()
(DT:MULTIPLY-LW (sqrt 2))
(princ)
)
;; Erniedrigung ;-) gemäß DIN um 1 / Wurzel2
(defun C:LAYLW- ()
(DT:MULTIPLY-LW (/ 1 (sqrt 2)))
(princ)
)
;; Funktion fragt den zu verwendenden Multiplikator beim User ab
(defun C:LAYLW? (/ MULTIPLICATOR)
(if (setq MULTIPLICATOR
(getreal
"\nWert für Multiplikation der Layerlinienstärken eingeben: "
)
)
(DT:MULTIPLY-LW MULTIPLICATOR)
)
(princ)
)
;; Subroutine die das Manipulieren der Layer vornimmt
(defun DT:MULTIPLY-LW (MULTIPLICATOR / CLW)
(vlax-for ELEM (vla-get-layers
(vla-get-activedocument (vlax-get-acad-object))
)
(if (not (minusp (setq CLW (vla-get-lineweight ELEM))))
(vla-put-lineweight
ELEM
(ZV-CALCULATE-LINEWEIGHT
CLW
MULTIPLICATOR
)
)
)
)
)
;|
Funktion berechnet eine neue Linienstärke auf der Basis der in AutoCAD
zulässigen Parameter für die Eigenschaft "LINEWEIGHT".
Das Argument CURRENT-LINEWEIGHT wird mit dem Argument MULTIPLIKATOR
multipliziert und zu einem Integer konvertiert.
Danach wird berechnet an welcher der gültigen Integer LINEWEIGTH's
das Ergebnis der Multiplikation am nächsten dran ist. Dieser Wert wird dann zurückgegeben
Gemäß DIN ist für eine Erhöhung um eine Strichstärke als Multiplikator (SQRT 2) [Wurzel aus 2]
anzugeben. Für eine Verminderung der Kehrwert davon (/ 1 (SQRT 2))
|;
(defun ZV-CALCULATE-LINEWEIGHT
(CURRENT-LINEWEIGHT MULTIPLIKATOR / ACADPARA COLLST RESULT)
;; Nachfolgend die Liste der in Acad gültigen Werte für Lineweight
(setq ACADPARA '(0 5 9 13 15 18 20 25 30 35
40 50 53 60 70 80 90 100 106 120
140 158 200 211
)
)
(if (not MULTIPLIKATOR)
CURRENT-LINEWEIGHT
(if (not (member (type MULTIPLIKATOR) '(INT REAL)))
CURRENT-LINEWEIGHT
(progn
(setq RESULT (fix (* CURRENT-LINEWEIGHT MULTIPLIKATOR)))
;; Nimm das cdr vom car der resultierenden Liste
(cdar
;; Sortiere von klein nach groß...
(vl-sort
(mapcar
(function (lambda (Y)
;; Ziehe von den Acad-Werten jeweils
;; das Ergebnis der Multiplikation ab
;; Negative Ergebnisse werden zu absoluten Zahlen gemacht
(cons (abs (- Y RESULT)) Y)
)
)
ACADPARA
)
(function (lambda (Z W) (< (car Z) (car W))))
)
)
)
)
)
)
(princ "\nFunktionen zum Erhöhen bzw. Erniedrigen der Linienstärke aller Layer einer Zeichnung...")
(princ "\n\"Laylw+\" multipliziert mit Wurzel2, \"Laylw-\" dividiert durch Wurzel2, \"Laylw?\" fragt nach Multiplikator...")
(princ)
Viel Spaß damit ;-)
------------------
Ciao,
Marc
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP