rmr jam Posted August 20, 2009 Posted August 20, 2009 I am trying to edit my revcloud button to change the current layer and color, then run the revcloud function, then set the layer to 0 and color to green. When the revcloud closes, the macro stops and no other functions are initiated. Is there a way to do this? Here is the macro I am using. ^C^C-LAYER;M;revcloud;;-COLOR;CYAN;REVCLOUD;-layer;s;0;;-color;green;; The revcloud command calls the revcloud.arx function. Quote
chelsea1307 Posted August 20, 2009 Posted August 20, 2009 I think you need to set the layer and color first nvm re read it and you do set them first saw revcloud thought it was command not layer Quote
Lee Mac Posted August 20, 2009 Posted August 20, 2009 How about using a simple command reactor? Quote
rmr jam Posted August 20, 2009 Author Posted August 20, 2009 Sorry Lee Mac, I dont know what a command reactor is. Quote
Lee Mac Posted August 20, 2009 Posted August 20, 2009 A reactor is a Visual LISP function that will "react" from certain events and perform an operation depending on the call-back data supplied to it. I shall provide an example for you Lee Quote
Lee Mac Posted August 20, 2009 Posted August 20, 2009 Ok, I have created this program which should help you: [b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] c:RevON [b][color=RED]([/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]if[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]not[/color][/b] *rev-reac*[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] *rev-reac* [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]rStart[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]REnd[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]REnd[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] [b][color=#ff00ff]"REVCLOUD"[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vla-put-color[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vla-add[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] *lay [b][color=RED]([/color][/b][b][color=BLUE]vla-get-layers[/color][/b] [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=#ff00ff]"REVCLOUD"[/color][/b][b][color=RED])[/color][/b] [b][color=Blue]acCyan[/color][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vla-put-color[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vla-item[/color][/b] *lay [b][color=#ff00ff]"0"[/color][/b][b][color=RED])[/color][/b] [b][color=Blue]acGreen[/color][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=BLUE]princ[/color][/b] [b][color=#ff00ff]"\n<<-- Reactor Already Running! -->>"[/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] rStart [b][color=RED]([/color][/b]Reac 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]eq[/color][/b] [b][color=#ff00ff]"REVCLOUD"[/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=BLUE]setvar[/color][/b] [b][color=#ff00ff]"CLAYER"[/color][/b] [b][color=#ff00ff]"REVCLOUD"[/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] rEnd [b][color=RED]([/color][/b]Reac 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]eq[/color][/b] [b][color=#ff00ff]"REVCLOUD"[/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=BLUE]setvar[/color][/b] [b][color=#ff00ff]"CLAYER"[/color][/b] [b][color=#ff00ff]"0"[/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:RevOFF [b][color=RED]([/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]if[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]and[/color][/b] *rev-reac* [b][color=RED]([/color][/b][b][color=BLUE]vlr-added-p[/color][/b] *rev-reac*[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]vlr-remove[/color][/b] *rev-reac*[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] *lay [b][color=BLUE]nil[/color][/b] *rev-reac* [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=BLUE]princ[/color][/b] [b][color=#ff00ff]"\n<<-- Reactor Is Not Activated -->>"[/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] Instructions on how to use a Reactor: Load the above load as you would a normal LISP program. To activate the reactor, type REVON at the command line. You only need to do this once per drawing session - the reactor will run in the background. Use the revcloud as you would normally, (using the standard ACAD button/command). To deactivate the reactor, type REVOFF at the command line. Quote
rmr jam Posted August 20, 2009 Author Posted August 20, 2009 Thank you for your help. I loaded the lisp and ran it. It does work for the layer, but the color does not change. I was hoping for something simpler here, I guess there is no way to do this without lisp? Quote
Lee Mac Posted August 20, 2009 Posted August 20, 2009 Thank you for your help. I loaded the lisp and ran it. It does work for the layer, but the color does not change. I was hoping for something simpler here, I guess there is no way to do this without lisp? The colour does not change? What colour is not changing? Quote
rmr jam Posted August 20, 2009 Author Posted August 20, 2009 It draws the revcloud in whichever color is current prior to starting the revcloud command. If I make the current color bylayer, it will draw the cloud in bylayer color(the layer color is set to cyan). But if my color is set to anything else, that is what it draws the cloud in. Quote
Lee Mac Posted August 20, 2009 Posted August 20, 2009 I see, I didn't realise you were veering away from the BYLAYER... but, oh well, this will accout for that. (defun c:RevON ( ) (vl-load-com) (if (not *rev-reac*) (progn (setq *rev-reac* (vlr-command-reactor nil (list (cons :vlr-commandWillStart 'rStart) (cons :vlr-commandCancelled 'REnd) (cons :vlr-commandEnded 'REnd)))) (if (not (tblsearch "LAYER" "REVCLOUD")) (vla-put-color (vla-add (setq *lay (vla-get-layers (vla-get-ActiveDocument (vlax-get-acad-object)))) "REVCLOUD") acCyan)) (princ "\n<<-- Reactor Initiated -->>")) (princ "\n<<-- Reactor Already Running! -->>")) (princ)) (defun rStart (Reac Args) (if (eq "REVCLOUD" (strcase (car Args))) (progn (setvar "CECOLOR" "BYLAYER") (setvar "CLAYER" "REVCLOUD"))) (princ)) (defun rEnd (Reac Args) (if (eq "REVCLOUD" (strcase (car Args))) (progn (setvar "CECOLOR" "GREEN") (setvar "CLAYER" "0"))) (princ)) (defun c:RevOFF ( ) (vl-load-com) (if (and *rev-reac* (vlr-added-p *rev-reac*)) (progn (vlr-remove *rev-reac*) (setq *lay nil *rev-reac* nil) (princ "\n<<-- Reactor Deactivated -->>")) (princ "\n<<-- Reactor Is Not Activated -->>")) (princ)) As for getting something simpler, a reactor a much simpler than trying to fudge some macro. Quote
rmr jam Posted August 20, 2009 Author Posted August 20, 2009 Thank you very much that works perfectly. I only wish I understood what was going on in the lisp so that I could learn from this. For now, though, I'm very happy to just have a solution. I have done a lot of menu customization with macros and script files, but I just dont understand the language/commands used in lisp. Quote
Lee Mac Posted August 20, 2009 Posted August 20, 2009 Not a problem - I much prefer LISP to macros/menu customisation - LISP offers a much "cleaner" solution, and not to mention more stable. If you want to learn more about the methods I have used see here: http://www.afralisp.net/vl/reactors1.htm Or for starting to learn LISP in general, these threads offer some good links: http://www.cadtutor.net/forum/showthread.php?t=38760 http://www.cadtutor.net/forum/showthread.php?t=38734 Lee Quote
Recommended Posts
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.