直线和圆的交点打断
本帖最后由 chpmould 于 2011-5-8 10:05 编辑请教:
lisp如何实现先求出直线和圆的交点,然后打断圆...效果如下图片
按TR 然后双挤右键或是空格键,点击不要的线条,效果就出来了 本帖最后由 chpmould 于 2011-5-8 10:06 编辑
陈貌 发表于 2011-5-7 23:26 http://space.mjtd.com/static/image/common/back.gif
按TR 然后双挤右键或是空格键,点击不要的线条,效果就出来了
我是想求直线和圆的交点,然后按交点打断... 回复 chpmould 的帖子
(defun c:tt (/ cir curve pl pts el sta enda cp p1 p2)
(while (and
(setq cir (car (entsel "\n选择圆:")))
(setq curve (car (entsel "\n选择分割曲线:")))
) ;_ and
(setq pl (vlax-invoke
(vlax-ename->vla-object cir)
'IntersectWith
(vlax-ename->vla-object curve)
acExtendNone
) ;_ vlax-invoke
) ;_ setq
(while pl
(setq pts (append pts (list (list (car pl) (cadr pl) (caddr pl))))
pl (cdr (cdr (cdr pl)))
) ;_ setq
) ;_ while
(if (> (length pts) 1)
(progn
(setq el (entget cir)
cp (cdr (assoc 10 el))
p1 (car pts)
p2 (last pts)
sta(angle cp p1)
enda (angle cp p2)
el (vl-remove-if
'(lambda (x) (or (= -1 (car x)) (= 0 (car x))))
el
) ;_ vl-remove-if
el (append
(list '(0 . "ARC"))
el
(list '(100 . "AcDbArc") (cons 50 sta) (cons 51 enda))
) ;_ append
) ;_ setq
(entmake el)
(entdel cir)
) ;_ progn
) ;_ if
) ;_ while
) ;_ defun
Gu_xl 发表于 2011-5-8 17:44 static/image/common/back.gif
回复 chpmould 的帖子
版主,我测试了一下,有时打不断,有时侯打断的位置不对。。。 回复 chpmould 的帖子
还需要判断分割曲线的走向,顺时针或逆时针!圆弧的方向始终是逆时针,本程序仅仅只是按曲线逆时针走向来计算的!判断曲线逆时针、顺时针你在论坛搜一下,有很多示例代码! 本帖最后由 chpmould 于 2011-5-9 17:40 编辑
Gu_xl 发表于 2011-5-8 20:52 http://bbs.mjtd.com/static/image/common/back.gif
回复 chpmould 的帖子
还需要判断分割曲线的走向,顺时针或逆时针!圆弧的方向始终是逆时针,本程序仅仅只 ...
谢谢!
不知版主是否有求直线和圆交点的函数例子,我主要是想学习下如何求直线和圆交点 回复 chpmould 的帖子
两条曲线求交点在4楼的代码中已经给出来了!没有看懂代码吗?求交点使用函数'IntersectWith
,代码中pts就是交点的点表! Gu_xl 发表于 2011-5-10 00:22 static/image/common/back.gif
回复 chpmould 的帖子
两条曲线求交点在4楼的代码中已经给出来了!没有看懂代码吗?求交点使用函数'Inters ...
很少用VL,还没有完全看明白,我再去看函数手册研究一下你的代码。。。 谢谢楼主分享
页:
[1]