求一批量检查圆弧与线段是否相切的外挂
求一批量检查圆弧与线段是否相切的外挂 ,不知道有没有什么好用的方法,小弟是小白,希望大家多多指教 下载学习学习 (defun test (LINE ARC / P1 P2 CEN INS)(setq LINE (entget LINE)
ARC(entget ARC)
P1 (cdr (assoc 10 LINE))
P2 (cdr (assoc 11 LINE))
CEN(cdr (assoc 10 ARC))
INS(inters P1 P2 CEN (polar CEN (+ (angle P1 P2) (/ PI 2)) 1) nil)
)
(equal (distance CEN INS) (cdr (assoc 40 ARC)) 1E-5)
)
;;;(test(car(entsel "\n选择直线: "))(car(entsel "\n选择圆弧: ")))
;;;判断圆弧或圆是否与线段相切
(defun if_tan (s1 s2 / pt_cen pta ptb Radius ptangle ptn jptx dist)
(setq pt_cen (cdr (assoc 10 (entget s1)))
Radius (cdr (assoc 40 (entget s1)))
pta (cdr (assoc 10 (entget s2)))
ptb (cdr (assoc 11 (entget s2)))
ptangle (angle pta ptb)
ptn (polar pt_cen (+ (* 0.5 pi) ptangle) 0.01)
jptx (inters pt_cen ptn pta ptb nil)
dist (distance pt_cen jptx)
)
(if (equal dist radius 1e-5);容差1e-5认为相等
T
nil
)
)
(defun c:iftan (/ ss ss_arc ss_line n m n1 m1 n2 m2 ss1)
(prompt "\n选择需要判断的线段、圆、圆弧")
(setq ss (ssget))
(setq ss_arc (ssadd))
(setq ss_line (ssadd))
(setq ss_c_l(ssadd))
(setq n (sslength ss))
(setq m 0)
(while (/= m n)
(setq ss1 (ssname ss m))
(if (= (cdr (assoc 0 (entget ss1))) "LINE")
(ssadd ss1 ss_line)
)
(if (or (= (cdr (assoc 0 (entget ss1))) "ARC")
(= (cdr (assoc 0 (entget ss1))) "CIRCLE")
)
(ssadd ss1 ss_arc)
)
(setq m (1+ m))
)
(setq n1 (sslength ss_arc))
(setq n2 (sslength ss_line))
(setq m1 0)
(while (/= m1 n1)
(setq ss1_arc (ssname ss_arc m1))
(setq m2 0)
(while (/= m2 n2)
(setq ss1_line (ssname ss_line m2))
(if (if_tan ss1_arc ss1_line)
(progn
(redraw ss1_arc 3)
(redraw ss1_line 3)
)
)
(setq m2 (1+ m2))
)
(setq m1 (1+ m1))
)
)
本帖最后由 caoyin 于 2011-7-9 07:02 编辑
楼上
(setq ss_arc (ssadd))
(setq ss_line (ssadd))
......
部分我觉得可以改成
(setq ss_arc (ssget "p" '((0 . "line"))))
(sssetfirst nil ss)
(setq ss_arc (ssget "i" '((0 . "arc,circle"))))
话又说回来,建这么多选集,反复遍历是不是划不来?何不用表貌似更快
非常感谢你们的帮忙,再问个小白的问题,那些代码怎么在CAD里面用,我不会用,能否教我下,好人做到底 使用时将其拖入cad窗口,用iftan命令运行,选择需要判断的圆弧和线,可窗选。凡是相切的都将高亮显示。
太谢谢您了,非常不错 本帖最后由 zuoq 于 2011-7-10 09:57 编辑
回复 zhynt 的帖子
首先非常感谢你这么热情的帮助我,今天试了下你做的那个代码,要是出现这种情况怎么检查是否相切呢?红色部分 有一边是相切的,另一边不是,使用您给我的那个软件也会显示是相切的,这种情况怎么办,有什么方法能修改下吗?小弟这里都是慢走丝加工,出现没有相切的情况会割坏模具板 这倒不是程序判断有误,而是下边的线段和左边的圆弧相切,所以高亮了,这样的情况你可以分开选择,一次选一组,相切就高亮,否则无变化。 回复 zhynt 的帖子
像您说的这样假如批量检测圆弧与直线是否相切就不能正确检测出来,您做的这个只要有一条直线与一个圆弧相切就会高亮显示,像我那做五金模具 ,冲头比较多,难道必须一条一条直线一个圆弧的检查吗?您能不能帮我想点办法修改下这个代码
页:
[1]
2