本帖最后由 csharp 于 2014-7-6 11:06 编辑
点弧线段直接变直线,点直线段拉伸为弧线(模拟高版本的变弧线段)
没有加错误处理,中断后命令行输入 (xdrx_pointmonitor) 中断点监视
 - (defun c:tt (/ e ent p pam seg tf bp sp ep pmid an1 _pi2 p3 )
- (defun CallBack (dynpt / d mpind1 p4 pcen van)
- (setq d (xdrx_point_dist2line dynpt sp ep))
- (cond
- ((minusp d)
- (setq pmid1 (xdrx_line_midp sp dynpt)
- p4 (polar pmid1 (+ (angle sp dynpt) _pi2) 1.)
- pcen (inters pmid p3 pmid1 p4 nil)
- van (xdrx_vector_angle (mapcar '- sp pcen) (mapcar '- ep pcen))
- )
- (xdrx_polyline_setbulgeat
- ent
- seg
- (- (xdrx_math_tan (/ van 4.)))
- )
- )
- ((> d 0.)
- (setq pmid1 (xdrx_line_midp sp dynpt)
- p4 (polar pmid1 (+ (angle sp dynpt) _pi2) 1.)
- pcen (inters pmid p3 pmid1 p4 nil)
- van (xdrx_vector_angle (mapcar '- sp pcen) (mapcar '- ep pcen))
- )
- (xdrx_polyline_setbulgeat
- ent
- seg
- (xdrx_math_tan (/ van 4.))
- )
- )
- ((zerop d)
- (xdrx_polyline_setbulgeat ent seg 0.)
- )
- (t)
- )
- )
- (if (setq e (xdrx_entsel "\nPick Polyline: " '((0 . "*Polyline"))))
- (progn
- (setq ent (car e)
- p (apply 'vlax-curve-getclosestpointto e)
- pam (vlax-curve-getparamatpoint ent p)
- seg (fix pam)
- tf (xdrx_polyline_segtype ent seg)
- )
- (if (= tf "kArc")
- (xdrx_polyline_setbulgeat ent seg 0.)
- (progn
- (setq bp (vlax-curve-getpointatparam ent (+ seg 0.5))
- _pi2 (* pi 0.5)
- )
- (mapcar 'set '(sp ep) (xdrx_polyline_getlinesegat ent seg))
- (setq an1 (angle sp ep)
- pmid (xdrx_line_midp sp ep)
- p3 (polar pmid (+ an1 _pi2) 1.)
- )
- (xdrx_pointmonitor "CallBack" ent)
- (getpoint bp)
- (xdrx_pointmonitor)
- )
- )
- )
- )
- (princ)
- )
|