bradb Posted May 28, 2009 Posted May 28, 2009 I would like a hotkey to do viewports in paper space instead of typing -vports at cmd prompt I wrote this to make the cmd vps. Only problem is it does not switch to the "paper" layer I want it to draw the viewport on. Whats wrong with my code? It works but I have to start on paper layer instead of it switching for me. Can anyone tell me why or does anyone know of a hotkey that is already in autocad -vports is the only cmd line cmd that I know of. (defun c:vps () (setq LAY (getvar "clayer") OSM (getvar "osmode") ) (setvar "cmdecho" 0) (setvar "osmode" 55) (setvar "clayer" "PAPER") (command "-vports") (setvar "cmdecho" 1) (setvar "osmode" OSM) (setvar "clayer" LAY) ) Quote
Lee Mac Posted May 28, 2009 Posted May 28, 2009 You could use a reactor to set the layer for you every time you initiate the -vport command. Something like this: -- just load it, and type "VPON" to switch the reactor on, and "vpoff" to switch it off -- [b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] c:VPON [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] Vport: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] Vport: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]setLay[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]retLay[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]retLay[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]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] c:VPOFF [b][color=RED]([/color][/b][b][color=BLUE]/[/color][/b] VPort:Oldlay[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] Vport:React [b][color=RED]([/color][/b][b][color=BLUE]progn[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vlr-remove[/color][/b] vPort:React[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] vPort: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] [b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] SetLay [b][color=RED]([/color][/b]ReacT Args[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] VPort:OldLay [b][color=RED]([/color][/b][b][color=BLUE]getvar[/color][/b] [b][color=#ff00ff]"CLAYER"[/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]eq[/color][/b] [b][color=#ff00ff]"-VPORTS"[/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=BLUE]if[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]tblsearch[/color][/b] [b][color=#ff00ff]"LAYER"[/color][/b] [b][color=#ff00ff]"PAPER"[/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]"PAPER"[/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]vla-add[/color][/b] [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=#ff00ff]"PAPER"[/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]"PAPER"[/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]princ[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] RetLay [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]eq[/color][/b] [b][color=#ff00ff]"-VPORTS"[/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=BLUE]if[/color][/b] VPort:OldLay [b][color=RED]([/color][/b][b][color=BLUE]setvar[/color][/b] [b][color=#ff00ff]"CLAYER"[/color][/b] VPort:Oldlay[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] Quote
bradb Posted June 1, 2009 Author Posted June 1, 2009 Cool thanks Lee I add the vp1 to be command work as I hoped thanks again (defun VPON () (vl-load-com) (if (not Vport:React) (progn (setq Vport:React (vlr-command-reactor nil (list (cons :vlr-commandWillStart 'setLay) (cons :vlr-commandEnded 'retLay) (cons :vlr-commandCancelled 'retLay)))) (princ "\n<<-- REACTOR INITIATED -->>"))) (princ)) (defun c:VPOFF (/ VPort:Oldlay) (vl-load-com) (if Vport:React (progn (vlr-remove vPort:React) (setq vPort:React nil) (princ "\n<<-- REACTOR DEACTIVATED -->>"))) (princ)) (defun SetLay (ReacT Args) (setq VPort:OldLay (getvar "CLAYER")) (if (eq "-VPORTS" (car Args)) (if (tblsearch "LAYER" "PAPER") (setvar "CLAYER" "PAPER") (progn (vla-add (vla-get-layers (vla-get-ActiveDocument (vlax-get-acad-object))) "PAPER") (setvar "CLAYER" "PAPER")))) (princ)) (defun RetLay (ReacT Args) (if (eq "-VPORTS" (car Args)) (if VPort:OldLay (setvar "CLAYER" VPort:Oldlay))) (princ)) (defun c:vp1 () (vpon) (command "-vports") ) Quote
Lee Mac Posted June 1, 2009 Posted June 1, 2009 You only need to call VPON once in a session, then, everytime you invoke -vports, the layer will switch. Quote
bradb Posted June 1, 2009 Author Posted June 1, 2009 Just realize that so how would I get vpon to start when I start autocad so I can just type vp1 Quote
Lee Mac Posted June 1, 2009 Posted June 1, 2009 You could add something like this to the start-up suite or ACADDOC.lsp: (defun c:VPON () (vl-load-com) (if (not Vport:React) (progn (setq Vport:React (vlr-command-reactor nil (list (cons :vlr-commandWillStart 'setLay) (cons :vlr-commandEnded 'retLay) (cons :vlr-commandCancelled 'retLay)))) (princ "\n<<-- REACTOR INITIATED -->>"))) (princ)) [color=Red][b](c:vpon)[/b][/color] (defun c:VPOFF (/ VPort:Oldlay) (vl-load-com) (if Vport:React (progn (vlr-remove vPort:React) (setq vPort:React nil) (princ "\n<<-- REACTOR DEACTIVATED -->>"))) (princ)) (defun SetLay (ReacT Args) (setq VPort:OldLay (getvar "CLAYER")) (if (eq "-VPORTS" (car Args)) (if (tblsearch "LAYER" "PAPER") (setvar "CLAYER" "PAPER") (progn (vla-add (vla-get-layers (vla-get-ActiveDocument (vlax-get-acad-object))) "PAPER") (setvar "CLAYER" "PAPER")))) (princ)) (defun RetLay (ReacT Args) (if (eq "-VPORTS" (car Args)) (if VPort:OldLay (setvar "CLAYER" VPort:Oldlay))) (princ)) [b][color=Red] (defun c:vp1 () (command "-vports"))[/color][/b] The reactor will then load on every Drawing Session (and can be turned off with VPOFF), and typing "vp1" will invoked the vports command. Alternatively - Go to Tools > Customise > Edit Custom Files > Program Parameters (acad.pgp) and change maybe the VP alias to -VPORTS. Quote
bradb Posted June 1, 2009 Author Posted June 1, 2009 Thanks Lee working find vp is now my hot key and changes to layer just fine Quote
Lee Mac Posted June 1, 2009 Posted June 1, 2009 Thanks Lee working find vp is now my hot key and changes to layer just fine Awesome, glad it works how you want it to 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.