TheSwamp
Code Red => AutoLISP (Vanilla / Visual) => Topic started by: GDF on April 20, 2018, 08:56:15 AM
-
I have no luck finding a reactor for changing the dimscale setting based upon switching between the ctab setvar change. Don't know enough to roll my own...
Here is one modified example that I can not get to work:
;;;Reactor to set Dimscale when switching spaces LPS/wizman 2009-02
(defun setscale (event parameter)
(if (eq (car parameter) "Ctab")
(if (eq (getvar "ctab") "Model")
(progn
(if (not ARCH#SCLX)(setq ARCH#SCLX 1))
(setvar "Dimscale" ARCH#SCLX)
(setvar "ltscale" (* (getvar "Dimscale") 0.7))
(setvar "modemacro" (strcat " "[ " (rtos ARCH#SCLX 2 0) " ]" " Lts: [ 0.7 ]"))
)
(progn
(setvar "dimscale" 1)
(setvar "ltscale" (* (getvar "Dimscale") 0.7))
(setvar "modemacro" (strcat " "Sc: 1'' = 1'-0'' [ 1 ]" " Lts: [ 0.7 ]"))
)
)
)
)
-
Now I'm trying to get this to work:
(if (not ARCH#SCLX)(setq ARCH#SCLX 1))
(if (not ARCH#LOGO)(setq ARCH#LOGO "Arch Program")
;;;LeeMac
;;;http://www.theswamp.org/index.php?action=post;quote=586162;topic=53969.0;last_msg=586168
(defun layerstate-callback ( rtr arg / las )
(if
(setq las
(cdr
(assoc (strcase (car arg))
'(
("A0-0 COVER" . "A0-0 COVER")
("A1-0 SITE" . "A1-0 SITE")
("A1-1 DRIVE-THRU" . "A1-1 DRIVE-THRU")
("A2-0 PHOTO" . "A2-0 PHOTO")
("A3-0 FLOOR" . "A3-0 FLOOR")
("A3-1 CEILING" . "A3-1 CEILING")
("A3-2 BASEMENT" . "A3-2 BASEMENT")
("A4-0 EXT ELEVS" . "A4-0 EXT ELEVS")
("K2-0 KITCHEN" . "K2-0 KITCHEN")
("K2-1 KITCH ELEVS" . "K2-1 KITCH ELEVS")
("Z1-0 FIELD NOTES" . "Z1-0 FIELD NOTES")
)
)
)
)
(progn
(if (= "BRICSCAD" (strcase (getvar 'product)))
(vl-layerstates-restore (getvar "ctab") 6 NIL 0)
(layerstate-restore las nil 255)
)
(vla-zoomextents (vlax-get-acad-object))
(vla-regen (layerstate-doc) acallviewports)
(cond
((= (getvar "ctab") "Model")
(progn
(setvar "Dimscale" ARCH#SCLX)
(setvar "ltscale" (* (getvar "Dimscale") 0.7))
(setvar "modemacro" (strcat ARCH#LOGO " <PMdesign> Sc: [ " (rtos ARCH#SCLX 2 0) " ] Lts: [ " (rtos (* ARCH#SCLX 0.33) 2 0) " ]"))
)
)
((/= (getvar "ctab") "Model")
(progn
(setvar "dimscale" 1)
(setvar "ltscale" (* (getvar "Dimscale") 0.7))
(setvar "modemacro" (strcat ARCH#LOGO " <PMdesign> Sc: [ 1 ] Lts: [ 0.7 ]"))
)
)
)
)
)
(princ)
)
( (lambda ( )
(vl-load-com)
(foreach rtr (cdar (vlr-reactors :vlr-miscellaneous-reactor))
(if (= "layerstate-reactor" (vlr-data rtr))
(vlr-remove rtr)
)
)
(vlr-set-notification
(vlr-miscellaneous-reactor "layerstate-reactor" '((:vlr-layoutswitched . layerstate-callback)))
'active-document-only
)
(eval (list 'defun 'layerstate-doc nil (vla-get-activedocument (vlax-get-acad-object))))
(princ)
)
)
(princ "\n*** ----- LayerState Reactor Loaded ------ ***")
(princ)
-
So how do I get the reactor to fire when switching to "Model" tab?
This only works for layouts...
(cond
((= (getvar "ctab") "Model")
(progn
(setvar "Dimscale" ARCH#SCLX)
(setvar "ltscale" (* (getvar "Dimscale") 0.7))
(setvar "modemacro" (strcat ARCH#LOGO " <PMdesign> Sc: [ " (rtos ARCH#SCLX 2 0) " ] Lts: [ " (rtos (* ARCH#SCLX 0.33) 2 0) " ]"))
)
)
((/= (getvar "ctab") "Model")
(progn
(setvar "dimscale" 1)
(setvar "ltscale" (* (getvar "Dimscale") 0.7))
(setvar "modemacro" (strcat ARCH#LOGO " <PMdesign> Sc: [ 1 ] Lts: [ 0.7 ]"))
)
)
)
-
Got this to work as a separate reactor: (removed it from the first one)
;;Changes LTSCALE when switching between model & paper space
(defun ChangedLayout (reactor layout /)
(cond
((= (getvar "ctab") "Model")
(progn
(setvar "Dimscale" ARCH#SCLX)
(setvar "ltscale" (* (getvar "Dimscale") 0.7))
(setvar "modemacro" (strcat ARCH#LOGO " <PMdesign> Sc: [ " (rtos ARCH#SCLX 2 0) " ] Lts: [ " (rtos (* ARCH#SCLX 0.7) 2 0) " ]"))
)
)
((/= (getvar "ctab") "Model")
(progn
(setvar "dimscale" 1)
(setvar "ltscale" (* (getvar "Dimscale") 0.7))
(setvar "modemacro" (strcat ARCH#LOGO " <PMdesign> Sc: [ 1 ] Lts: [ 0.7 ]"))
)
)
)
)
(if
(not *LayoutLTS*)
(setq *LayoutLTS* (VLR-Miscellaneous-Reactor nil
'((:VLR-layoutSwitched . ChangedLayout))
)
)
)