明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1192|回复: 7

[基础] 请问各位大神帮忙看一下这个编程哪里错了,cad运行总是说我的语法错误

[复制链接]
发表于 2014-12-12 16:15 | 显示全部楼层 |阅读模式
(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))
        )
)
)
)
发表于 2014-12-13 15:35 | 显示全部楼层
   为什么不试试调试功能     放进去 VLIDE
发表于 2014-12-13 15:36 | 显示全部楼层
最后一行多一个括号.     `````````````````````````
发表于 2014-12-13 15:40 | 显示全部楼层
  1. (if (ssmemb ena ss))
复制代码
这一句中的if参数不够导致的
发表于 2014-12-13 16:03 | 显示全部楼层
你这个求交点子程序有很多问题,首先if对应的()位置错误,还有最后求得的坐标根本不是交点坐标。你的交点点表若改为(setq pt_list (append pt_list (list (sub_test1 (ssname ss i)))))才可以,但前提是你的sub_test1 函数能用才行。我大概按你的子程序修正了几个括号,但生成的数量需减1,而且划圆的地方坐标不对。
  1. (defun c:62( / pt_list)
  2. (setq ss (ssget '((0 . "line"))))
  3. ;;;(setq pt_list nil)
  4. (setq i 0)
  5. (repeat (sslength ss)
  6. (setq pt_list (append pt_list (list (sub_test1 (ssname ss i)))))
  7. (setq i (1+ i))
  8. )
  9. (foreach pt pt_list (command "circle" pt 10))
  10. (alert (strcat "共有<"(itoa (length pt_list))">交点在界面上!"))
  11. (prin1)
  12. )
  13. ;求取交点子程序
  14. (defun sub_test1(#en)
  15.         (setq endata(entget #en))
  16.         (setq pt10 (cdr(assoc 10 endata)))
  17.         (setq pt11 (cdr(assoc 11 endata)))
  18.         (setq ssint (ssget "f"(list pt10 pt11)))
  19.         (setq ssint (ssdel #en ssint))
  20.         (if(>(sslength ssint )0)
  21.         (progn
  22.         (setq j 0)
  23.         (repeat (sslength ssint)
  24.                 (setq ena (ssname ssint j))
  25.                 (if (ssmemb ena ss)
  26.         (progn
  27.         (setq pta (cdr(assoc 10 (entget ena))))
  28.         (setq ptb (cdr(assoc 11 (entget ena))))
  29.         (setq intpt (inters pt10 pt11 pta ptb))
  30.         (setq intp1 (osnap intpt "int"))
  31.         (if (not(member intpt1 pt_list))(setq pt_list(cons intpt1 pt_list)))
  32.                 )
  33.                 )
  34.         (setq j(1+ j))
  35.         )
  36. )
  37. )
  38. )
发表于 2014-12-13 16:16 | 显示全部楼层
  1. ;;终于搜遍明经搞定了
  2. (defun c:62 (/ pt_list)
  3.   (setq ss (ssget '((0 . "line"))))
  4.   (setq sslst (interss ss))
  5.   (foreach pt sslst (command "circle" pt 10))
  6.   (alert
  7.     (strcat "共有<" (itoa (length sslst)) ">交点在界面上!")
  8.   )
  9.   (prin1)
  10. )
  11. ;选择集求交点子程序
  12. (defun interss (ss / n1 ssl aobj1 aobj2 n2 ipts pts)
  13.   (setq        n1  0
  14.         ssl (sslength ss)
  15.   )
  16.   (while (< n1 (1- ssl))
  17.     (setq aobj1        (ssname ss n1)
  18.           aobj1        (vlax-ename->vla-object aobj1)
  19.           n2        (1+ n1)
  20.     )
  21.     (while (< n2 ssl)
  22.       (setq aobj2 (ssname ss n2)
  23.             aobj2 (vlax-ename->vla-object aobj2)
  24.             ipts  (vla-intersectwith
  25.                     aobj1
  26.                     aobj2
  27.                     0
  28.                   )
  29.             ipts  (vlax-variant-value ipts)
  30.       )
  31.       (if (> (vlax-safearray-get-u-bound ipts 1) 0) ;是否有交点
  32.         (progn
  33.           (setq        ipts
  34.                  (vlax-safearray->list ipts)
  35.           )
  36.           (while (> (length ipts) 0)
  37.             (setq pts (cons (list (car ipts)
  38.                                   (cadr ipts)
  39.                                   (caddr ipts)
  40.                             )
  41.                             pts
  42.                       )                        ;此处可以在添加时判断是否有重合点
  43.             )
  44.             (setq ipts (cdddr ipts))
  45.           )
  46.         )
  47.       )
  48.       (setq n2 (1+ n2))
  49.     )
  50.     (setq n1 (1+ n1))
  51.   )
  52.   pts
  53. )
 楼主| 发表于 2014-12-15 09:27 | 显示全部楼层
newbuser 发表于 2014-12-13 16:16

谢谢,
 楼主| 发表于 2014-12-15 10:30 | 显示全部楼层
鱼与熊掌 发表于 2014-12-13 15:36
最后一行多一个括号.     `````````````````````````

谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-6-2 01:51 , Processed in 0.163501 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表