Jump to content

Recommended Posts

Posted

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)
)

Posted

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]



Posted

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")
)

Posted

You only need to call VPON once in a session, then, everytime you invoke -vports, the layer will switch.

Posted

Just realize that so how would I get vpon to start when I start autocad so I can just type vp1

Posted

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.

Posted

Thanks Lee working find vp is now my hot key and changes to layer just fine

Posted
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 :)

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...