This is wordy due to my non concise coding style and inline comments, but hopefully Dan will find it illuminating ...
(defun c:foo ( / layername layerobj vportobj delta acadobj docobj )
;;
;; make / get the border layer
;;
(setq layerobj
(vla-add
(vla-get-layers
(setq docobj
(vla-get-activedocument
(setq acadobj
(vlax-get-acad-object)
)
)
)
)
(setq layername "Border")
)
)
;;
;; set the layer's properties as we see fit
;;
(foreach propertypair
'(
(Plottable . :vlax-false)
(Freeze . :vlax-false)
(LayerOn . :vlax-true)
(Lock . :vlax-false)
(Color . 251)
)
(vlax-put-property
layerobj
(car propertypair)
(cdr propertypair)
)
)
;;
;; switch to paperspace
;;
(vla-put-activespace docobj 0)
;;
;; switch to pspace
;;
(vla-put-mspace docobj :vlax-false)
;;
;; get the coords for the vport
;;
(initget 1)
(setq p1 (getpoint "\nSelect the first corner of the vport: "))
(initget 1)
(setq p2 (getcorner p1 "Now the other corner: "))
;;
;; make the viewport
;;
(setq vportobj
(vla-addpviewport
(vla-get-paperspace docobj)
(vlax-3d-point
(mapcar
'(lambda (i) (/ i 2.0))
(mapcar '+ p1 p2)
)
)
(car
(setq delta
(mapcar
'(lambda (a b) (abs (- a b)))
p1
p2
)
)
)
(cadr delta)
)
)
;;
;; change the vport's layer
;;
(vla-put-layer vportobj layername)
;;
;; make sure the vport is on
;;
(vla-display vportobj :vlax-true)
;;
;; switch to mspace
;;
(vla-put-mspace docobj :vlax-true)
;;
;; zoom extents to center the view
;;
(vla-zoomextents acadobj)
;;
;; now zoom relative to paperspace
;;
(vla-zoomscaled acadobj 0.5 acZoomScaledRelativePSpace)
;;
;; change back to pspace
;;
(vla-put-mspace docobj :vlax-false)
;;
;; shhhh
;;
(princ)
)