本帖最后由 Kye 于 2015-3-26 16:44 编辑
在线段或圆弧上选取任一点,将线段或圆弧打断,用下面这个在2012中好用在2007中又不好用
;_断点
;;;http://cadtips.cadalyst.com/2d-operations/break-a-selected-point
(defun breakpt ( pt1 )
;(setq pt1 (getpoint"Select Braking Point: "))
(command"break" pt1 "@" "")
(princ)
)
所以想改用entmake新建两个圆弧或直线,删除原来圆弧及直线,直线解决了,但圆弧遇到了困难,反正弦函数角度范围(- 0.5pi +0.5pi),下面程序中如果选取点与圆弧起始点的圆心角大于0.5pi 也不清楚如何处理,生成新圆弧的设定条件调试很长时间,没搞定,请哪位大侠出手帮忙指点迷津,或者帮忙提供个新的不用break的断点程序,谢谢了
;_顶角就是要求的圆心角θ,设弦长为h,则sin(θ/2)=(h/2)÷r=h/2r,θ=2arcsin(h/2r).
;_e=(car (entsel))
;_(setq e (car (entsel)))
(defun mkArc (e sa ea)
(setq ed (entget e))
(setq ed (subst (cons 50 sa) ;_ed (entget e)
(assoc 50 ed)
ed
)
ed (subst (cons 51 ea)
(assoc 51 ed)
ed
)
)
(entmake ed)
)
(defun c:TT ()
;_取得组码值
(defun dxf (e i)
(cdr (assoc i (entget e)))
)
;_反正弦函数
;;; Arcsin(x)
;;; x valid in [-1,1]
;;; Return: Radian
;;; Standard Mathematics defined Arcsin on
;;; [-pi/2, pi/2]
(defun arcsin (x)
(cond
((= x 1.0) (/ pi 2.0))
((= x -1.0) (/ pi -2.0))
((and (> x -1.0) (< x 1.0))
(atan (/ x (sqrt (- 1.0 (* x x)))))
)
(T nil)
)
)
(setq ss (ssget '((0 . "arc"))))
(setq e (ssname ss 0 ) ed (entget e) )
(setq sa (dxf e 50)) ;_获取起始角度
(setq Ea (dxf e 51)) ;_获取终止角度
(setq r (dxf e 40 ));_获取圆弧半径
(setq cenpt (dxf e 10)) ;_获取圆弧圆心 e=(car (entsel))
(setq sp (polar cenpt sa r) ;_获取圆弧起始点
ep (polar cenpt Ea r) ;_获取圆弧终止点
)
(setq l (vlax-curve-getDistAtParam e (vlax-curve-getEndParam e)));_圆弧长度
(setq sita (/ l r));_圆心角
(setq getpt (getpoint "\n 选取点:"))
(setq h (distance sp getpt))
(setq x (/ h ( * 2 r)))
(setq ArcAng (* 2 (arcsin x)));_选取点与圆弧起始点的圆心角
(if ( < arcAng 0) (setq ArcAng (- (* pi 2) ArcAng)))
;(setq positionAng (- (angle ep sp) (angle cenpt sp)));_positionAng 方位角
;(if (< positionAng 0)
(if (equal (abs ( - sa ea)) sita 0.01)
(progn (setq temp (+ sa ArcAng))
(mkArc e sa temp)
(mkArc e temp Ea)
(entdel e)
)
(progn (setq temp (- sa ArcAng))
(mkArc e sa temp)
(mkArc e temp Ea)
(entdel e)
)
)
)