请问各位大神帮忙看一下这个编程哪里错了,cad运行总是说我的语法错误
(defun c:62()(setq ss (ssget '((0 . "line"))))
(setq pt_list nil)
(setq i 0)
(repeat (sslength ss)
(sub_test1(ssname ss i))
(setq i (1+ i))
)
(foreach pt pt_list (command "circle" pt 10))
(alert (strcat "共有<"(itoa (length pt_list))">交点在界面上!"))
(prin1)
)
;求取交点子程序
(defun sub_test1(#en)
(setq endata(entget #en))
(setq pt10 (cdr(assoc 10 endata)))
(setq pt11 (cdr(assoc 11 endata)))
(setq ssint (ssget "f"(list pt10 pt11)))
(setq ssint (ssdel #en ssint))
(if(>(sslength ssint )0)
(progn
(setq j 0)
(repeat (sslength ssint)
(setq ena (ssname ssint j))
(if (ssmemb ena ss))
(progn
(setq pta (cdr(assoc 10 (entget ena))))
(setq ptb (cdr(assoc 11 (entget ena))))
(setq intpt (inters pt10 pt11 pta ptb))
(setq intp1 (osnap intpt "int"))
(if (not(member intpt1 pt_list))(setq pt_list(cons intpt1 pt_list)))
)
)
(setq j(1+ j))
)
)
)
) 为什么不试试调试功能 放进去 VLIDE 最后一行多一个括号. ````````````````````````` (if (ssmemb ena ss))这一句中的if参数不够导致的 你这个求交点子程序有很多问题,首先if对应的()位置错误,还有最后求得的坐标根本不是交点坐标。你的交点点表若改为(setq pt_list (append pt_list (list (sub_test1 (ssname ss i)))))才可以,但前提是你的sub_test1 函数能用才行。我大概按你的子程序修正了几个括号,但生成的数量需减1,而且划圆的地方坐标不对。(defun c:62( / pt_list)
(setq ss (ssget '((0 . "line"))))
;;;(setq pt_list nil)
(setq i 0)
(repeat (sslength ss)
(setq pt_list (append pt_list (list (sub_test1 (ssname ss i)))))
(setq i (1+ i))
)
(foreach pt pt_list (command "circle" pt 10))
(alert (strcat "共有<"(itoa (length pt_list))">交点在界面上!"))
(prin1)
)
;求取交点子程序
(defun sub_test1(#en)
(setq endata(entget #en))
(setq pt10 (cdr(assoc 10 endata)))
(setq pt11 (cdr(assoc 11 endata)))
(setq ssint (ssget "f"(list pt10 pt11)))
(setq ssint (ssdel #en ssint))
(if(>(sslength ssint )0)
(progn
(setq j 0)
(repeat (sslength ssint)
(setq ena (ssname ssint j))
(if (ssmemb ena ss)
(progn
(setq pta (cdr(assoc 10 (entget ena))))
(setq ptb (cdr(assoc 11 (entget ena))))
(setq intpt (inters pt10 pt11 pta ptb))
(setq intp1 (osnap intpt "int"))
(if (not(member intpt1 pt_list))(setq pt_list(cons intpt1 pt_list)))
)
)
(setq j(1+ j))
)
)
)
) ;;终于搜遍明经搞定了
(defun c:62 (/ pt_list)
(setq ss (ssget '((0 . "line"))))
(setq sslst (interss ss))
(foreach pt sslst (command "circle" pt 10))
(alert
(strcat "共有<" (itoa (length sslst)) ">交点在界面上!")
)
(prin1)
)
;选择集求交点子程序
(defun interss (ss / n1 ssl aobj1 aobj2 n2 ipts pts)
(setq n10
ssl (sslength ss)
)
(while (< n1 (1- ssl))
(setq aobj1 (ssname ss n1)
aobj1 (vlax-ename->vla-object aobj1)
n2 (1+ n1)
)
(while (< n2 ssl)
(setq aobj2 (ssname ss n2)
aobj2 (vlax-ename->vla-object aobj2)
ipts(vla-intersectwith
aobj1
aobj2
0
)
ipts(vlax-variant-value ipts)
)
(if (> (vlax-safearray-get-u-bound ipts 1) 0) ;是否有交点
(progn
(setq ipts
(vlax-safearray->list ipts)
)
(while (> (length ipts) 0)
(setq pts (cons (list (car ipts)
(cadr ipts)
(caddr ipts)
)
pts
) ;此处可以在添加时判断是否有重合点
)
(setq ipts (cdddr ipts))
)
)
)
(setq n2 (1+ n2))
)
(setq n1 (1+ n1))
)
pts
) newbuser 发表于 2014-12-13 16:16 static/image/common/back.gif
谢谢, 鱼与熊掌 发表于 2014-12-13 15:36 static/image/common/back.gif
最后一行多一个括号. `````````````````````````
谢谢
页:
[1]