Old lisp routine from David Harrington that worked with Non-Annotative drawings and would read the DimScale variable. But with Annotative setups, this routine won't work properly. Wondering if any of you can help me modify it to read the "cannoscale" variable now. Thanks
;;;Breakm Lsp
;;;
;;;
;;; by David Harrington
;;;
;;;
(defun c:breakm (/ ds pt1 pt2 ang bpt dist mpt mkpt mkang p1 p2 p3 p4
laycol $mark olay old_osmode olecho $error
)
(defun $error (msg)
(if (or (= msg "Function cancelled") (/= msg "quit / exit abort"))
(princ (strcat "Error: " msg))
)
;(setvar "clayer" olay) <------on error restore old layer
(setvar "osmode" old_osmode)
(setvar "cmdecho" olecho)
(setq *error* old_err)
(princ)
)
(setq olecho (getvar "cmdecho")
old_osmode (getvar "osmode")
)
(setvar "cmdecho" 0)
(setq old_err *error*
*error* $error
)
(prompt "\n BREAKM")
(setq old_osmode (getvar "osmode"))
(defun $mark (mkpt ang / mktmpt tmp)
(setq p1 (polar mkpt (+ ang pi) (* ds 0.05))
p2 (polar p1 (- ang 1.3258) (* ds 0.10307764))
p4 (setq mktmpt (polar mkpt ang (* ds 0.05)))
p3 (polar mktmpt (- (- ang pi) 1.3258) (* ds 0.10307764)))
(if (> (distance pt1 p1) (distance pt1 p4))
(setq p1 tmp
p1 p4
p4 tmp)
)
)
;(setq olay (getvar "clayer")) ;;<------Save current layer to variable
;(setvar "clayer" layername) ;<-----set new current layer name
(initget 1)
(setq ds (getvar "dimscale")
pt1 (getpoint "\nPick beginning point of break: "))
(initget 1)
(setq pt2 (getpoint pt1 "\nPick other end point: ")
ang (angle pt1 pt2)
pt1 (polar pt1 (+ ang pi) (* ds 0.1))
pt2 (polar pt2 ang (* ds 0.1))
)
(setvar "osmode" 0)
(setvar "osmode" OLD_OSMODE)
(setq mpt (polar pt1 ang (/ (distance pt1 pt2) 2.0)))
(setvar "osmode" 0)
(command ".pline" pt1 "w" "0" "0")
($mark mpt ang)
(command p1 p2 p3 p4 pt2 "")
(command ".redraw")
;(setvar "clayer" olay) <-------restore old current layer
(setvar "osmode" old_osmode)
(setvar "cmdecho" olecho)
(setq *error* old_err)
(princ)
)
Solved! Go to Solution.
Solved by alanjt_. Go to Solution.