Randy
Since i work in Metric and need the clips in Mspace only i made some changes to your code, the in put is now in 2 points only for Start and Endpoint, the orientation is know then. so i can also go vertical, lets say pt1 is somewhere and pt2 = @0,0,-5000 (we are metric over here so 5000 = 16.4ft) will give me the steel for one level of the building.
;------------------------------------------------------------------
; original from CADaver with help from Mark Thomas
; modifications and viewport change function by ruul morawetz
; requires UNDO on
; v0.4 last edit 03/11/24
;------------------------------------------------------------------
(setq *dvsdeep* 12.0) ; default section depth
;------------------------------------------------------------------
(defun c:dvs ( / *error*)
(defun *error* (msg)
(cond
(msg (command)(command)(princ (strcat "\nError: " msg)))
(T nil)
)
(dvs:restore)
(if msg (command "_u"))
)
(defun dvs:save ( / n)
(setq *dvs* nil)
(command "_undo" "_begin")
(foreach n '("CMDECHO" "WORLDVIEW" "UCSFOLLOW" "EXPERT")
(setq *dvs* (cons (cons n (getvar n)) *dvs*))
)
)
(defun dvs:restore ()
(foreach n *dvs*
(setvar (car n) (cdr n))
)
(command "_undo" "_end")
)
(dvs:save)
(if (not *dvsdeep*) (setq *dvsdeep* 12.0))
(dvs:section)
(*error* nil)
(prin1)
)
;------------------------------------------------------------------
(defun dvs:section (/ pt1 pt2 ang Ndvsdeep)
(setvar "EXPERT" 5)
(setq curvp (getvar "cvport"))
(command "_ucs" "_s" "__TMP")
(command "_ucs" "_v")
(cond
((null (setq pt1 (getpoint "\nSelect Centerpoint of Section: "))))
((null (setq pt2 (getpoint pt1 "\nEnter Viewing Point 2 from Section: ")
ang (angle pt1 pt2 )
*dvsdeep* (distance pt1 pt2))))
(T
;(command "_.undo" "_begin") ; moved to calling function
(setq pt1 (trans pt1 1 0) pt2 (trans pt2 1 0))
; (command "_ucs" "_w") ; moved down
;;; (prompt "\n Select Viewport for Section Display (ENTER if necessary then) ")
;;; (dvs:rm:cvpc) ; vp-change function (possibly unreliable)
;;; ;(getstring) ; simple and works
;;;
;;; (setvar "WORLDVIEW" 1)
;;; (setvar "UCSFOLLOW" 0)
;;; (command "_ucs" "_w") ; moved here (only necessary after viewport change)
(command "_.dview" "" "_po" "_non" pt1 "_non" pt2 "_cl" "_f" (* *dvsdeep* 1) "")
;;; (command "_.zoom" "_e" "_.zoom" ".8x")
(setvar "cvport" curvp)
(command "_ucs" "_r" "__TMP" "_ucs" "_d" "__TMP")
)
)
)
;------------------------------------------------------------------
; ruul 03/11/11 - Crazy ViewPort Change
; adjust trigger if needed
; endless loop until clicked in another viewport
; if trigger isn't sufficient, enter also breaks the loop
(defun dvs:rm:cvpc ( / grrd weida p pold viewsize trigger)
(setq weida T viewsize (getvar "VIEWSIZE")
trigger (* viewsize 0.4)) ; adjust factor according to mouse speed etc
(while weida
(setq grrd (grread T )) ;(+ 1 2 4 8) 2
(cond
((= 5 (car grrd))
(setq p (cadr grrd))
(cond
((and pold (> (distance p pold) trigger))
(setq weida nil)
)
)
(setq pold p)
)
((= 2 (car grrd))(setq weida nil))
(T nil
)
)
)
)
;------------------------------------------------------------------
(princ "\nDVSection loaded. call with DVS. ")
;------------------------------------------------------------------
(prin1)
;------------------------------------------------------------------
Thanks a lot
Bernd