为了好玩。。。
- (defun c:ArcDim (/ *error* AT:CycleThroughSS p1 ent p2 ss d1 d2)
- ;; label Arc with Dimension between two picked points
- ;; Alan J. Thompson, 11.14.11
- (vl-load-com)
- (defun *error* (msg)
- (and ent (redraw ent 4))
- (and *AcadDoc* (vla-endundomark *AcadDoc*))
- (if (and msg (not (wcmatch (strcase msg) "*BREAK*,*CANCEL*,*QUIT*,")))
- (princ (strcat "\nError: " msg))
- )
- )
- (defun AT:CycleThroughSS (ss / l i e)
- ;; Cycle through a selection set to choose one
- ;; ss - selection set
- ;; Alan J. Thompson, 03.30.11
- (if (eq (type ss) 'PICKSET)
- (if (eq (setq l (sslength ss)) 1)
- (ssname ss 0)
- (progn (princ "\n<Tab> to cycle through entities: ")
- (redraw (setq e (ssname ss (setq i 0))) 3)
- (while (eq (cadr (grread nil 10)) 9)
- (mapcar 'redraw (list e (setq e (ssname ss (setq i (rem (1+ i) l))))) '(4 3))
- )
- (redraw e 4)
- e
- )
- )
- )
- )
- (vla-startundomark
- (cond (*AcadDoc*)
- ((setq *AcadDoc* (vla-get-activedocument (vlax-get-acad-object))))
- )
- )
- (cond ((not vla-addDimArc) (alert "AutoCAD version not supported!"))
- ((not (setq p1 (getpoint "\nSpecify fist point on arc: "))))
- ((not (setq ent (AT:CycleThroughSS (ssget "_C" p1 p1 '((0 . "ARC"))))))
- (alert "Point must be on arc!")
- )
- ((redraw ent 3))
- ((not (setq p2 (getpoint p1 "\nSpecify other point on arc: "))))
- ((not (and (setq ss (ssget "_C" p2 p2 '((0 . "ARC"))))
- (vl-some '(lambda (e) (equal ent (cadr e))) (ssnamex ss))
- )
- )
- (alert "Point must be on arc!")
- )
- ((vlax-invoke
- (vlax-get *AcadDoc*
- (if (eq (getvar 'CVPORT) 1)
- 'Paperspace
- 'Modelspace
- )
- )
- 'addDimArc
- (cdr (assoc 10 (entget ent)))
- (trans p1 1 0)
- (trans p2 1 0)
- (vlax-curve-getPointAtDist
- ent
- (+ (min (setq d1 (vlax-curve-getDistAtPoint ent (trans p1 1 ent)))
- (setq d2 (vlax-curve-getDistAtPoint ent (trans p2 1 ent)))
- )
- (/ (abs (- d1 d2)) 2.)
- )
- )
- )
- )
- )
- (*error* nil)
- (princ)
- )
我知道李会因为我用vlax曲线*函数来找到中点而大惊小怪,但我记不起数学,而且我有懒惰的习惯。 |