本帖最后由 csharp 于 2016-1-29 08:16 编辑

- (defun c:tt (/ multi ss l n en endata entype
- pc r pt1 pt2 pmt ag pt angs ange
- ang larc san ean man
- )
- ;;以下文件由用户选择
- (setvar "CMDECHO" 0)
- (setvar "osmode" (logior (getvar "osmode") 16384)) ;_取消捕捉,F3
- (setq multi (getvar 'dimlfac))
- ;;add 2002.5.15 can remove
- (if (setq ss (ssget '((0 . "arc"))))
- (progn
- (setq l 10
- n (sslength ss)
- )
- (repeat n
- (setq en (ssname ss (1- n))
- endata (entget en)
- )
- ;;(setq entype (cdr (assoc 0 endata)))
- (SETQ PC (cdr (ASSOC 10 endata))
- R (cdr (ASSOC 40 endata))
- san (cdr (assoc 50 endata)) ;_起点角度
- ean (cdr (assoc 51 endata)) ;_终点角度
- man (/ (+ san ean) 2) ;_中点角度
- pt1 (polar pc san r) ;_起点
- pt2 (polar pc ean r) ;_终点
- pt (polar pc man (+ r l)) ;_标注点
- ;;PT1 (polar pc (cdr (ASSOC 50 endata)) R)
- ;;PT2 (polar pc (cdr (ASSOC 51 endata)) R)
- ;;pmt (xyp-get-MidPoint pt1 pt2)
- ;;ag (angle pc pmt)
- ;;pt (polar pc ag (+ r l))
- )
- ;;(setq angs (assoc 50 endata))
- ;;(setq angs (cdr angs))
- ;;(setq ange (assoc 51 endata))
- ;;(setq ange (cdr ange))
- ;;(setq ang (- ange angs))
- (setq ang (- ean san)) ;_夹角
- (if (< ang 0)
- (setq ang (- (* 2 pi) (abs ang)))
- )
- (setq larc (* r ang)
- larc (* larc multi)
- ;;add 2002.2.20 can remove
- larc (rtos larc 2 1)
- )
- (command "dimangular" (list en pt1) "t" larc pt) ;_需要 (实体 点) 拾取方式
- (setq n (1- n))
- ;; (command "dimangular" en "t" larc pt)
- )
- )
- )
- (prin1)
- )
- ;;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
- ;; 两点之中点 (xyp-get-MidPoint p1 p2)
- ;;(defun xyp-get-MidPoint (p1 p2)
- ;; (mapcar '(lambda (x) (* x 0.5)) (mapcar '+ p1 p2))
- ;;)
进阶下这样写
- (defun c:tt (/ multi ss l n e sp ep len el san ean len pt)
- (vl-load-com)
- (if (setq ss (ssget '((0 . "arc"))))
- (progn
- (setvar "CMDECHO" 0)
- (setvar "osmode" (logior (getvar "osmode") 16384)) ;_取消捕捉,F3
- (setq l 10
- n (sslength ss)
- multi (getvar 'dimlfac)
- )
- (while (setq e (ssname ss (setq n (1- n))))
- (setq sp (vlax-curve-getstartpoint e)
- ep (vlax-curve-getendpoint e)
- el (entget e)
- san (cdr (assoc 50 el))
- ean (cdr (assoc 51 el))
- len (vlax-curve-getdistatparam e (vlax-curve-getendparam e))
- pc (cdr (assoc 10 (entget e))) ;_圆心
- pt (polar
- pc
- (angle pc
- (vlax-curve-getpointatparam e (/ (+ san ean) 2)) ;_中点
- )
- (+ (cdr (assoc 40 el)) l)
- )
- )
- (command "dimangular" (list en sp) "t" len pt) ;_需要 (实体 点) 拾取方式
- )
- )
- )
- (princ)
- )
|