一个求交点程式的问题
http://img254.imageshack.us/img254/1227/dfdf5454.jpgUploaded with ImageShack.us
底下有一个部份
(setq p0(inters p10 p11 pa pb))
(setq pt(osnap p0 "int"))
(if(= (member pt ptlist) nil)
(setq ptlist(cons pt ptlist))
要是这段程式没有红色那一段,那么if判断式就会判断不出ptlsit中是不是已经有了pt的点,最后的结果就是重复判断同一点。红色两一段的作用是什么p0不是就已经把交点给求出来了吗?
如下图。
http://img89.imageshack.us/img89/967/wrongf.jpg
Uploaded with ImageShack.us
(defun C:262();;求框選交點
(setq ss(ssget '((0 . "line"))))
(setq ptlist '() )
(setq i 0)
(repeat(sslength ss)
(setq en(ssname ss i))
(setq j 0)
(setq p10(cdr(assoc 10 (entget en))))
(setq p11(cdr(assoc 11 (entget en))))
(setq ss_2(ssget "F"(list p10 p11)))
(setq ss_2(ssdel en ss_2))
(repeat (sslength ss_2)
(setq en_x(ssname ss_2 j))
(if(ssmemb en_x ss)
(progn
(setq pa(cdr(assoc 10 (entget en_x))))
(setq pb(cdr(assoc 11 (entget en_x))))
(setq p0(inters p10 p11 pa pb))
(setq pt(osnap p0 "int"))
(if(= (member pt ptlist) nil)
(setq ptlist(cons pt ptlist))
);if
);p
);if
(setq j(+ j 1))
);r
(setq i(+ i 1))
);r
(foreach pt ptlist(command"circle" pt 10))
(alert(strcat "交點共" (itoa (length ptlist)) "個"))
(prin1)
)
页:
[1]