Jump to content

Recommended Posts

Posted

Hey.

Been having a play with the customisation of commands etc. and have developed a macro that will change the working layer to another essentially for dimensions, then set the dimension style to that of another upon selecting and finally produce a dimension, effectively creating a uniform dimension to its predecessor and finally switching back to the previous layer. All works fine, UNTIL the designated layer destined for the said dimension becomes non existent in the drawing of which then AutoCAD asks what to do instead. Obviously it would make sense to engineer the code for new a layer to be created etc. which would be fine, but my question is; when a problem such as this arises, and it becomes possible that the macro may need to satisfy one of two branches, what sort of coding would be involved in order to overcome such instances? Im guessing there are other ways around it, such as always requesting the layer be created under a specific name regardless of whether it exists or not and therefore succeding that way, but there must be a better way? Here's what I have come up with so far, feel free to criticize heavily.

^C^C-layer;_s;"CSP_DIMS";;-dimstyle;R;;\_dimaligned;\\\_layerp

 

Cheers guys!

Posted

I would use a reactor to perform this sort of task, reacting from all the dimension commands.

Posted
I would use a reactor to perform this sort of task, reacting from all the dimension commands.

 

Hmmm. Any chance of indulging me with some info on this? Even a link or something would do. Im kinda new to it and F1 in CAD is not being friendly today ;[

Posted
Hmmm. Any chance of indulging me with some info on this? Even a link or something would do. Im kinda new to it and F1 in CAD is not being friendly today ;[

 

Sorry, am just preparing something for you :)

Posted

Ok, something like this:

 

(defun c:ReON ()
 (vl-load-com)
 (if (not *Dim:React*)
   (progn
     (setq *Dim:React*
       (vlr-command-reactor nil
         (list
           (cons :vlr-CommandWillStart 'StrtComm)
           (cons :vlr-CommandEnded      'EndComm)
           (cons :vlr-CommandCancelled  'CanComm))))
     (if (not (tblsearch "LAYER" "CSP_DIMS"))
       (vla-add
         (vla-get-layers
           (vla-get-ActiveDocument
             (vlax-get-acad-object))) "CSP_DIMS"))
     (princ "\n<<- Reactor Initiated ->>")))
 (princ))

(defun StrtComm (React Args / *doc)
 (setq old#lay (getvar "CLAYER"))
 (if (wcmatch (strcase (car Args)) "DIM*")
   (setvar "CLAYER" "CSP_DIMS")))

(defun EndComm (React Args)
 (if (and old#lay
       (wcmatch (strcase (car Args)) "DIM*"))      
   (setvar "CLAYER" old#lay)))

(defun CanComm (React Args)
 (if (and old#lay
       (wcmatch (strcase (car Args)) "DIM*"))      
   (setvar "CLAYER" old#lay))) 

(defun c:ReOFF (/ old#lay)
 (if *Dim:React*
   (progn
     (vlr-remove *Dim:React*)
     (setq *Dim:React* nil)
     (princ "\n<<- Reactor Deactivated ->>")))
 (princ))

 

Instructions:

 

  • Type ReON to activate the reactor. Only needs to be called once per drawing session.
  • Draw some dimensions.
  • If you want to deactivate the reactor, type ReOFF.

Posted

Or, to incorporate the dimstyle also:

 

(defun c:ReON ( )
 (vl-load-com)
 (setq *doc
   (vla-get-ActiveDocument
     (vlax-get-acad-object)))
 (if (not *Dim:React*)
   (progn
     (setq *Dim:React*
       (vlr-command-reactor nil
         (list
           (cons :vlr-CommandWillStart 'StrtComm)
           (cons :vlr-CommandEnded      'EndComm)
           (cons :vlr-CommandCancelled  'CanComm))))
     (if (not (tblsearch "LAYER" "CSP_DIMS"))
       (vla-add
         (vla-get-layers *doc) "CSP_DIMS"))
     (if (not (tblsearch "DIMSTYLE" "Tester"))
       (vla-add
         (vla-get-Dimstyles *doc) "Tester"))
     (princ "\n<<- Reactor Initiated ->>")))
 (princ))

(defun StrtComm (React Args)
 (setq old#lay (getvar "CLAYER"))
 (if (wcmatch (strcase (car Args)) "DIM*")
   (progn
     (vl-catch-all-apply
       (function
         (lambda ( )
           (vla-put-ActiveDimstyle *doc
             (vla-item
               (vla-get-Dimstyles *doc) "Tester")))))
     (setvar "CLAYER" "CSP_DIMS"))))

(defun EndComm (React Args)
 (if (and old#lay
       (wcmatch (strcase (car Args)) "DIM*"))      
   (setvar "CLAYER" old#lay)))

(defun CanComm (React Args)
 (if (and old#lay
       (wcmatch (strcase (car Args)) "DIM*"))      
   (setvar "CLAYER" old#lay))) 

(defun c:ReOFF (/ old#lay *doc)
 (if *Dim:React*
   (progn
     (vlr-remove *Dim:React*)
     (setq *Dim:React* nil)
     (princ "\n<<- Reactor Deactivated ->>")))
 (princ))

Posted
Or, to incorporate the dimstyle also:

 

(defun c:ReON ( )
 (vl-load-com)
 (setq *doc
   (vla-get-ActiveDocument
     (vlax-get-acad-object)))
 (if (not *Dim:React*)
   (progn
     (setq *Dim:React*
       (vlr-command-reactor nil
         (list
           (cons :vlr-CommandWillStart 'StrtComm)
           (cons :vlr-CommandEnded      'EndComm)
           (cons :vlr-CommandCancelled  'CanComm))))
     (if (not (tblsearch "LAYER" "CSP_DIMS"))
       (vla-add
         (vla-get-layers *doc) "CSP_DIMS"))
     (if (not (tblsearch "DIMSTYLE" "Tester"))
       (vla-add
         (vla-get-Dimstyles *doc) "Tester"))
     (princ "\n<<- Reactor Initiated ->>")))
 (princ))

(defun StrtComm (React Args)
 (setq old#lay (getvar "CLAYER"))
 (if (wcmatch (strcase (car Args)) "DIM*")
   (progn
     (vl-catch-all-apply
       (function
         (lambda ( )
           (vla-put-ActiveDimstyle *doc
             (vla-item
               (vla-get-Dimstyles *doc) "Tester")))))
     (setvar "CLAYER" "CSP_DIMS"))))

(defun EndComm (React Args)
 (if (and old#lay
       (wcmatch (strcase (car Args)) "DIM*"))      
   (setvar "CLAYER" old#lay)))

(defun CanComm (React Args)
 (if (and old#lay
       (wcmatch (strcase (car Args)) "DIM*"))      
   (setvar "CLAYER" old#lay))) 

(defun c:ReOFF (/ old#lay *doc)
 (if *Dim:React*
   (progn
     (vlr-remove *Dim:React*)
     (setq *Dim:React* nil)
     (princ "\n<<- Reactor Deactivated ->>")))
 (princ))

 

 

 

Wow, 'nuff text! I went ahead and dropped the code above into my acaddoc.pgp file, and sure enough it works like a charm. What I now question is, as an alternative to manually invoking a "REON" command, could I incorporate it into my dimension button so it initiates "REON" every time I click the button so that I don’t have to remember to run it (and of course switch it off again after), of might this be unfavourable due to potential errors occurring further down the line? Also, although your reply has indeed solved my dimensioning dilemmas, I would like to know more of the coding you are using to attain such results. Clearly it is a more powerful method compared to the simplistic one I am using, and I would appreciate it to no end if you could possibly advise some further reading into this subject. Thanks a bunch for what you have given me so far!

Posted

You only need to invoke reON once at the start of the drawing session, and the reactor will work until either reOFF is invoked, or the drawing is closed.

 

You could put the code into your ACADDOC.lsp file, and include another line:

 

(c:reON)

So that the reactor is initiated every time you open a drawing.

 

For information on reactors, I think AfraLISP has some info:

 

http://www.afralisp.net/vl/reactors1.htm

 

But also check the Visual LISP Editor (VLIDE) help files.

 

Lee

Posted

Great! Thanks a bunch for this, another trick in the bag :D

Posted

Not a problem,

 

One final version - this will reset the old dimension style after the command has executed:

 

[b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] c:ReON [b][color=RED]([/color][/b] [b][color=RED])[/color][/b]

 [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] *dim_lay* [b][color=#ff00ff]"CSP_DIMS"[/color][/b]  [i][color=#990099];; <<-- Change these[/color][/i]
       *dim_sty* [b][color=#ff00ff]"Tester"[/color][/b]
 [b][color=RED])[/color][/b]
 
 [b][color=RED]([/color][/b][b][color=BLUE]vl-load-com[/color][/b][b][color=RED])[/color][/b]
 [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] *doc
   [b][color=RED]([/color][/b][b][color=BLUE]vla-get-ActiveDocument[/color][/b]
     [b][color=RED]([/color][/b][b][color=BLUE]vlax-get-acad-object[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
 [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]not[/color][/b] *Dim:React*[b][color=RED])[/color][/b]
   [b][color=RED]([/color][/b][b][color=BLUE]progn[/color][/b]
     [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] *Dim:React*
       [b][color=RED]([/color][/b][b][color=BLUE]vlr-command-reactor[/color][/b] [b][color=BLUE]nil[/color][/b]
         [b][color=RED]([/color][/b][b][color=BLUE]list[/color][/b]
           [b][color=RED]([/color][/b][b][color=BLUE]cons[/color][/b] [color=Blue][b]:vlr-CommandWillStart[/b][/color] [b][color=DARKRED]'[/color][/b]StrtComm[b][color=RED])[/color][/b]
           [b][color=RED]([/color][/b][b][color=BLUE]cons[/color][/b] [b][color=Blue]:vlr-CommandEnded [/color][/b]     [b][color=DARKRED]'[/color][/b]EndComm[b][color=RED])[/color][/b]
           [b][color=RED]([/color][/b][b][color=BLUE]cons[/color][/b] [b][color=Blue]:vlr-CommandCancelled[/color][/b]  [b][color=DARKRED]'[/color][/b]CanComm[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
     [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]not[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]tblsearch[/color][/b] [b][color=#ff00ff]"LAYER"[/color][/b] *dim_lay*[b][color=RED])[/color][/b][b][color=RED])[/color][/b]
       [b][color=RED]([/color][/b][b][color=BLUE]vla-add[/color][/b]
         [b][color=RED]([/color][/b][b][color=BLUE]vla-get-layers[/color][/b] *doc[b][color=RED])[/color][/b] *dim_lay*[b][color=RED])[/color][/b][b][color=RED])[/color][/b]
     [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]not[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]tblsearch[/color][/b] [b][color=#ff00ff]"DIMSTYLE"[/color][/b] *dim_sty*[b][color=RED])[/color][/b][b][color=RED])[/color][/b]
       [b][color=RED]([/color][/b][b][color=BLUE]vla-add[/color][/b]
         [b][color=RED]([/color][/b][b][color=BLUE]vla-get-Dimstyles[/color][/b] *doc[b][color=RED])[/color][/b] *dim_sty*[b][color=RED])[/color][/b][b][color=RED])[/color][/b]
     [b][color=RED]([/color][/b][b][color=BLUE]princ[/color][/b] [b][color=#ff00ff]"\n<<- Reactor Initiated ->>"[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
 [b][color=RED]([/color][/b][b][color=BLUE]princ[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]

[b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] StrtComm [b][color=RED]([/color][/b]React Args[b][color=RED])[/color][/b]
 [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] old#lay [b][color=RED]([/color][/b][b][color=BLUE]getvar[/color][/b] [b][color=#ff00ff]"CLAYER"[/color][/b][b][color=RED])[/color][/b] old#sty [b][color=RED]([/color][/b][b][color=BLUE]getvar[/color][/b] [b][color=#ff00ff]"DIMSTYLE"[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
 [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]or[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]wcmatch[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]strcase[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]car[/color][/b] Args[b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=#ff00ff]"*DIM*"[/color][/b][b][color=RED])[/color][/b]
         [b][color=RED]([/color][/b][b][color=BLUE]eq[/color][/b] [b][color=#ff00ff]"QLEADER"[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]strcase[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]car[/color][/b] Args[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
   [b][color=RED]([/color][/b][b][color=BLUE]progn[/color][/b]
     [b][color=RED]([/color][/b][b][color=BLUE]vl-catch-all-apply[/color][/b]
       [b][color=RED]([/color][/b][b][color=BLUE]function[/color][/b]
         [b][color=RED]([/color][/b][b][color=BLUE]lambda[/color][/b] [b][color=RED]([/color][/b] [b][color=RED])[/color][/b]
           [b][color=RED]([/color][/b][b][color=BLUE]vla-put-ActiveDimstyle[/color][/b] *doc
             [b][color=RED]([/color][/b][b][color=BLUE]vla-item[/color][/b]
               [b][color=RED]([/color][/b][b][color=BLUE]vla-get-Dimstyles[/color][/b] *doc[b][color=RED])[/color][/b] *dim_sty*[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
     [b][color=RED]([/color][/b][b][color=BLUE]setvar[/color][/b] [b][color=#ff00ff]"CLAYER"[/color][/b] *dim_lay*[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]

[b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] EndComm [b][color=RED]([/color][/b]React Args[b][color=RED])[/color][/b]
 [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]and[/color][/b] old#lay old#sty
       [b][color=RED]([/color][/b][b][color=BLUE]wcmatch[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]strcase[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]car[/color][/b] Args[b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=#ff00ff]"DIM*"[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
   [b][color=RED]([/color][/b][b][color=BLUE]progn[/color][/b]
     [b][color=RED]([/color][/b][b][color=BLUE]vl-catch-all-apply[/color][/b]
       [b][color=RED]([/color][/b][b][color=BLUE]function[/color][/b]
         [b][color=RED]([/color][/b][b][color=BLUE]lambda[/color][/b] [b][color=RED]([/color][/b] [b][color=RED])[/color][/b]
           [b][color=RED]([/color][/b][b][color=BLUE]vla-put-ActiveDimstyle[/color][/b] *doc
             [b][color=RED]([/color][/b][b][color=BLUE]vla-item[/color][/b]
               [b][color=RED]([/color][/b][b][color=BLUE]vla-get-Dimstyles[/color][/b] *doc[b][color=RED])[/color][/b] old#sty[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
     [b][color=RED]([/color][/b][b][color=BLUE]setvar[/color][/b] [b][color=#ff00ff]"CLAYER"[/color][/b] old#lay[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
 [b][color=RED]([/color][/b][b][color=BLUE]princ[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]

[b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] CanComm [b][color=RED]([/color][/b]React Args[b][color=RED])[/color][/b]
 [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]and[/color][/b] old#lay old#sty
       [b][color=RED]([/color][/b][b][color=BLUE]wcmatch[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]strcase[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]car[/color][/b] Args[b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=#ff00ff]"DIM*"[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
   [b][color=RED]([/color][/b][b][color=BLUE]progn[/color][/b]
     [b][color=RED]([/color][/b][b][color=BLUE]vl-catch-all-apply[/color][/b]
       [b][color=RED]([/color][/b][b][color=BLUE]function[/color][/b]
         [b][color=RED]([/color][/b][b][color=BLUE]lambda[/color][/b] [b][color=RED]([/color][/b] [b][color=RED])[/color][/b]
           [b][color=RED]([/color][/b][b][color=BLUE]vla-put-ActiveDimstyle[/color][/b] *doc
             [b][color=RED]([/color][/b][b][color=BLUE]vla-item[/color][/b]
               [b][color=RED]([/color][/b][b][color=BLUE]vla-get-Dimstyles[/color][/b] *doc[b][color=RED])[/color][/b] old#sty[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
     [b][color=RED]([/color][/b][b][color=BLUE]setvar[/color][/b] [b][color=#ff00ff]"CLAYER"[/color][/b] old#lay[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
 [b][color=RED]([/color][/b][b][color=BLUE]princ[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]

[b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] c:ReOFF [b][color=RED]([/color][/b][b][color=BLUE]/[/color][/b] old#lay old#sty *doc *dim_lay* *dim_sty*[b][color=RED])[/color][/b]
 [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] *Dim:React*
   [b][color=RED]([/color][/b][b][color=BLUE]progn[/color][/b]
     [b][color=RED]([/color][/b][b][color=BLUE]vlr-remove[/color][/b] *Dim:React*[b][color=RED])[/color][/b]
     [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] *Dim:React* [b][color=BLUE]nil[/color][/b][b][color=RED])[/color][/b]
     [b][color=RED]([/color][/b][b][color=BLUE]princ[/color][/b] [b][color=#ff00ff]"\n<<- Reactor Deactivated ->>"[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
 [b][color=RED]([/color][/b][b][color=BLUE]princ[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]

The Dimension layer and style can be changed at the top :)

 

Lee

Posted

great little app here. :)

 

would it be possible to code in multiple dimension styles?

 

if I wanted to use it for 3 different dim styles and on different layers how would I go about doing that?

Posted

Hi briankstan,

 

Thanks :) I'm glad you like them.

 

I'm sure I could modify this to suit your various dimension styles/layers.

 

I shall make it clear where you can modify things.

 

Lee

 

EDIT: just to clarify, how would you want it to deal with the different layer/style combinations? How would the program know which to set?

Posted
Hi briankstan,

 

Thanks :) I'm glad you like them.

 

I'm sure I could modify this to suit your various dimension styles/layers.

 

I shall make it clear where you can modify things.

 

Lee

 

EDIT: just to clarify, how would you want it to deal with the different layer/style combinations? How would the program know which to set?

 

I really wouldn't just mind, turning them on as needed. say I type Reon, then it asks me for 1,2 or 3 etc. then I can select the one I want at any given time. Is it possible to do that in one lisp?

Posted

Ok Brian, I think I understand what you are getting at.

 

Try this:

 

(defun c:ReON (/ tmp)

 (or *nth (setq *nth 0))

 (setq *dim_table* '(

                     ;;<<--  Adjustments  -->>

                     ;;  Layers    .   Styles

                     ("DIM_LAYER1" . "DIM_STYL1")
                     ("DIM_LAYER2" . "DIM_STYL2")
                     ("DIM_LAYER3" . "DIM_STYL3")

                     ;;<<------------------->>

 ))(vl-load-com)
 (setq *doc
   (vla-get-ActiveDocument
     (vlax-get-acad-object)))
 (if (not *Dim:React*)
   (progn
     (setq *Dim:React*
       (vlr-command-reactor nil
         (list
           (cons :vlr-CommandWillStart  'StrComm)
           (cons :vlr-CommandEnded      'EndComm)
           (cons :vlr-CommandCancelled  'CanComm))))
     (foreach x *dim_table*
       (if (not (tblsearch "LAYER" (car x)))
         (vla-add
           (vla-get-layers *doc) (car x)))
       (if (not (tblsearch "DIMSTYLE" (cdr x)))
         (vla-add
           (vla-get-Dimstyles *doc) (cdr x))))
     (princ "\n<<- Reactor Initiated ->>")))
 (initget (+ 2 4))
 (or (not
       (setq tmp
         (getint
           (strcat "\nSpecify Config [1-"
             (itoa (length *dim_table*)) "] <"
             (itoa (1+ *nth)) "> : "))))
     (setq *nth (1- tmp)))
 (princ))

(defun StrComm (React Args / pos)
 (setq old#lay (getvar "CLAYER") old#sty (getvar "DIMSTYLE"))
 (if (or (wcmatch (strcase (car Args)) "*DIM*")
         (eq "QLEADER" (strcase (car Args))))
   (progn
     (setq pos (nth *nth *dim_table*))
     (vl-catch-all-apply
       (function
         (lambda ( )
           (vla-put-ActiveDimstyle *doc
             (vla-item
               (vla-get-Dimstyles *doc) (cdr pos))))))
     (setvar "CLAYER" (car pos))))
 (princ))

(defun EndComm (React Args)
 (if (and old#lay old#sty
       (wcmatch (strcase (car Args)) "DIM*"))
   (progn
     (vl-catch-all-apply
       (function
         (lambda ( )
           (vla-put-ActiveDimstyle *doc
             (vla-item
               (vla-get-Dimstyles *doc) old#sty)))))
     (setvar "CLAYER" old#lay)))
 (princ))

(defun CanComm (React Args)
 (if (and old#lay old#sty
       (wcmatch (strcase (car Args)) "DIM*"))
   (progn
     (vl-catch-all-apply
       (function
         (lambda ( )
           (vla-put-ActiveDimstyle *doc
             (vla-item
               (vla-get-Dimstyles *doc) old#sty)))))
     (setvar "CLAYER" old#lay)))
 (princ))

(defun c:ReOFF (/ old#lay old#sty *doc *nth *dim_table*)
 (if *Dim:React*
   (progn
     (vlr-remove *Dim:React*)
     (setq *Dim:React* nil)
     (princ "\n<<- Reactor Deactivated ->>")))
 (princ))

Populate the table at the top.

 

To change the config mid-session, just type ReOn again - this will not affect the Reactor, but will affect the layer and style choice.

 

When you want to completely deactivate the Reactor, type reOff.

Posted

that worked just as I wanted it to. is there a way to fill in what style they would be?

 

1. 1" scale

2. 1 1/2" scale

3. full scale

Posted
that worked just as I wanted it to. is there a way to fill in what style they would be?

 

1. 1" scale

2. 1 1/2" scale

3. full scale

 

You mean at the option selection, show what the style name is?

Posted
You mean at the option selection, show what the style name is?

 

correct :)

Posted

Perhaps?

 

(defun c:ReON (/ tmp str i)

 (or *nth (setq *nth 0))

 (setq *dim_table* '(

                     ;;<<--  Adjustments  -->>

                     ;;  Layers    .   Styles

                     ("DIM_LAYER1" . "DIM_STYL1")
                     ("DIM_LAYER2" . "DIM_STYL2")
                     ("DIM_LAYER3" . "DIM_STYL3")

                     ;;<<------------------->>

 ))(vl-load-com)
 (setq *doc
   (vla-get-ActiveDocument
     (vlax-get-acad-object)))
 (if (not *Dim:React*)
   (progn
     (setq *Dim:React*
       (vlr-command-reactor nil
         (list
           (cons :vlr-CommandWillStart  'StrComm)
           (cons :vlr-CommandEnded      'EndComm)
           (cons :vlr-CommandCancelled  'CanComm))))
     (foreach x *dim_table*
       (if (not (tblsearch "LAYER" (car x)))
         (vla-add
           (vla-get-layers *doc) (car x)))
       (if (not (tblsearch "DIMSTYLE" (cdr x)))
         (vla-add
           (vla-get-Dimstyles *doc) (cdr x))))
     (princ "\n<<- Reactor Initiated ->>")))
 (setq i 1 str (strcat (itoa i) (chr 46) (cdar *dim_table*)))
 (foreach x (cdr *dim_table*)
   (setq i (1+ i) str (strcat str (chr 32) (itoa i) (chr 46) (cdr x))))
 (initget (+ 2 4))
 (or (not
       (setq tmp
         (getint
           (strcat "\nSpecify Config: " str "  <"
             (itoa (1+ *nth)) "> : "))))
     (setq *nth (1- tmp)))
 (princ))

(defun StrComm (React Args / pos)
 (setq old#lay (getvar "CLAYER") old#sty (getvar "DIMSTYLE"))
 (if (or (wcmatch (strcase (car Args)) "*DIM*")
         (eq "QLEADER" (strcase (car Args))))
   (progn
     (setq pos (nth *nth *dim_table*))
     (vl-catch-all-apply
       (function
         (lambda ( )
           (vla-put-ActiveDimstyle *doc
             (vla-item
               (vla-get-Dimstyles *doc) (cdr pos))))))
     (setvar "CLAYER" (car pos))))
 (princ))

(defun EndComm (React Args)
 (if (and old#lay old#sty
       (wcmatch (strcase (car Args)) "DIM*"))
   (progn
     (vl-catch-all-apply
       (function
         (lambda ( )
           (vla-put-ActiveDimstyle *doc
             (vla-item
               (vla-get-Dimstyles *doc) old#sty)))))
     (setvar "CLAYER" old#lay)))
 (princ))

(defun CanComm (React Args)
 (if (and old#lay old#sty
       (wcmatch (strcase (car Args)) "DIM*"))
   (progn
     (vl-catch-all-apply
       (function
         (lambda ( )
           (vla-put-ActiveDimstyle *doc
             (vla-item
               (vla-get-Dimstyles *doc) old#sty)))))
     (setvar "CLAYER" old#lay)))
 (princ))

(defun c:ReOFF (/ old#lay old#sty *doc *nth *dim_table*)
 (if *Dim:React*
   (progn
     (vlr-remove *Dim:React*)
     (setq *Dim:React* nil)
     (princ "\n<<- Reactor Deactivated ->>")))
 (princ))

Posted
that did it. Thank you very much.:)

 

I'm happy that you like it :)

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...