lead009 发表于 2010-12-25 16:10:03

一个求交点程式的问题

http://img254.imageshack.us/img254/1227/dfdf5454.jpg
Uploaded 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]
查看完整版本: 一个求交点程式的问题