Again, incomplete code; multiple variables are set outside of this scope & sub-functions are not included.
That said, you just need a selection set of Viewport entities, right?
If so, change this:
Code:
(defun getVPscale (/ ent ents data numVP cvhgt cvsize vpMult) ;get the scale of the viewport
(cond
((= shtSize "B")
(setq ents (ssget "_c" '(0 0) '(16.3762 10.25) '((0 . "VIEWPORT"))))
)
((= shtSize "C")
(if (ssget "_c" '(0 0) '(23.6 17.6))
(progn
(vlax-for x
(setq ss (vla-get-activeselectionset (vla-get-activedocument (vlax-get-acad-object))))
(if (= "AcDbViewport" (vla-get-objectname x))
(setq vpScale "EDIT")
)
)
(vla-delete ss)
)
)
)
)
;; <snip>
To this:
Code:
(defun getVPscale (/ ent ents data numVP cvhgt cvsize vpMult) ;get the scale of the viewport
(cond
((= shtSize "B")
(setq ents (_GetViewports '(0 0) '(16.3762 10.25)))
)
((= shtSize "C")
(setq ents (_GetViewports '(0 0) '(23.6 17.6)))
)
)
;; <snip>
Here's the _GetViewports sub-function:
Code:
(vl-load-com)
(defun _GetViewports (pt1 pt2 / *error* ss vps ents)
;; Example:
;; (_GetViewports '(0 0) '(23.6 17.6))
(defun *error* (msg)
(if ss (vla-delete ss))
(cond ((not msg)) ; Normal exit
((member msg '("Function cancelled" "quit / exit abort"))) ; <esc> or (quit)
((princ (strcat "\n** Error: " msg " ** "))) ; Fatal error, display it
)
ents
)
(if (ssget "_c" pt1 pt2)
(progn
(vlax-for x (setq ss
(vla-get-activeselectionset
(vla-get-activedocument (vlax-get-acad-object))
)
)
(if (= "AcDbViewport" (vla-get-objectname x))
(setq vps (cons (vlax-vla-object->ename x) vps))
)
)
(if vps
(progn
(setq ents (ssadd))
(foreach vp vps
(setq ents (ssadd vp ents))
)
)
)
)
)
(*error* nil)
)