明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2180|回复: 7

[LISP]求助-交点统计

[复制链接]
发表于 2003-11-7 11:40:00 | 显示全部楼层 |阅读模式
如何能自动统计出一个范围里所有线的交点个数呢,尤其是线很多的情况下
急需。thank
发表于 2003-11-7 13:28:00 | 显示全部楼层
求出了所有交点,不是是否有些多余

  1. (defun GetInterPoint (ent1 ent2 / ax_ent_1 ax_ent_2 intpoints points i)
  2.   (setq ax_ent_1 (vlax-ename->vla-object ent1)
  3.         ax_ent_2 (vlax-ename->vla-object ent2)
  4.   )
  5.   (setq intpoints (vla-intersectwith ax_ent_1 ax_ent_2 acextendnone))
  6.   (setq intpoints (vlax-variant-value intpoints))
  7.   (setq i 0)
  8.   (if (> (vlax-safearray-get-u-bound intpoints 1) 0)
  9.     (repeat (/ (+ 1
  10.               (- (vlax-safearray-get-u-bound intpoints 1)
  11.                  (vlax-safearray-get-l-bound intpoints 1)
  12.               )
  13.            )
  14.            3
  15.         )
  16.       (setq points (append points (list (list
  17.                       (vlax-safearray-get-element intpoints i)
  18.                       (vlax-safearray-get-element intpoints (+ i 1))
  19.                       (vlax-safearray-get-element intpoints (+ i 2))
  20.                     )))
  21.       )
  22.       (setq i (+ 3 i))
  23.     )
  24.   )
  25.   points
  26. )

  27. (defun c:main( / ss n i j ent1 ent2 points)
  28.   (setq ss (ssget))
  29.   (if ss
  30.     (setq n (sslength ss))
  31.   )
  32.   (setq i 0 j 0)
  33.   (while (< i n)
  34.     (setq j (1+ i))
  35.     (setq ent1 (ssname ss i))
  36.     (while (< j n)
  37.       (setq ent2 (ssname ss j))
  38.       (setq points (append points (getinterpoint ent1 ent2)))
  39.       (setq j (1+ j))
  40.     )
  41.     (setq i (1+ i))
  42.   )
  43.   (Princ points)
  44.   (princ (strcat "\n共有交点" (itoa (length points)) "个"))
  45.   (princ)
  46. )
 楼主| 发表于 2003-11-7 15:22:00 | 显示全部楼层
谢谢提供程序,不过在试用的时候好象出了点问题,算不出来
Command: main

Select objects: Other corner: 6 found

Select objects:
error: null function
(VLAX-ENAME->VLA-OBJECT ENT1)
(SETQ AX_ENT_1 (VLAX-ENAME->VLA-OBJECT ENT1) AX_ENT_2 (VLAX-ENAME->VLA-OBJECT
ENT2))
(GETINTERPOINT ENT1 ENT2)
(APPEND POINTS (GETINTERPOINT ENT1 ENT2))
(SETQ POINTS (APPEND POINTS (GETINTERPOINT ENT1 ENT2)))
(WHILE (< J N) (SETQ ENT2 (SSNAME SS J)) (SETQ POINTS (APPEND POINTS
(GETINTERPOINT ENT1 ENT2))) (SETQ J (1+ J)))
(WHILE (< I N) (SETQ J (1+ I)) (SETQ ENT1 (SSNAME SS I)) (WHILE (< J N) (SETQ
ENT2 (SSNAME SS J)) (SETQ POINTS (APPEND POINTS (GETINTERPOINT ENT1 ENT2)))
(SETQ J (1+ J))) (SETQ I (1+ I)))
(C:MAIN)
*Cancel*
不知道该如何解决,希望帮助 thank
发表于 2003-11-7 15:25:00 | 显示全部楼层
先运行(vl-load-com)
发表于 2003-11-7 15:32:00 | 显示全部楼层
henai发表于2003-11-7 15:22:00谢谢提供程序,不过在试用的时候好象出了点问题,算不出来
Command: main

Select objects: Other corner: 6 found

Select objects:
error: null function
(VLAX-ENAME->VLA-OBJE



你的好象是R14吧,这个程序用不了,说说你的线都是什么类型,如果都是LINE或PLINE的话还好办
 楼主| 发表于 2003-11-7 16:20:00 | 显示全部楼层
都是line,只是想知道有多少个交点,这样可以知道要布多少管
另外问一下 刚才的2002下还能用呀?
 楼主| 发表于 2003-11-7 16:28:00 | 显示全部楼层
2002下可以用使用,thank
发表于 2003-11-7 17:15:00 | 显示全部楼层
R14可用程序


  1. (defun Getinterpoints(ent1 ent2 / e1 e2 pt1 pt2 pt3 pt4)
  2.   (setq e1 (entget ent1))
  3.   (setq e2 (entget ent2))
  4.   (setq pt1 (cdr (assoc 10 e1)))
  5.   (setq pt2 (cdr (assoc 11 e1)))
  6.   (setq pt3 (cdr (assoc 10 e2)))
  7.   (setq pt4 (cdr (assoc 11 e2)))
  8.   (inters pt1 pt2 pt3 pt4)
  9. )

  10. (defun c:main( / ss n i j ent1 ent2 points point)
  11.   (setq ss (ssget '((0 . "line"))))
  12.   (if ss
  13.     (setq n (sslength ss))
  14.   )
  15.   (setq i 0 j 0)
  16.   (while (< i n)
  17.     (setq j (1+ i))
  18.     (setq ent1 (ssname ss i))
  19.     (while (< j n)
  20.       (setq ent2 (ssname ss j))
  21.       (if (setq point (getinterpoints ent1 ent2))
  22.         (setq points (append points (list point)))
  23.       )
  24.       (setq j (1+ j))
  25.     )
  26.     (setq i (1+ i))
  27.   )
  28.   (Princ points)
  29.   (princ (strcat "\n共有交点" (itoa (length points)) "个"))
  30.   (princ)
  31. )

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

本版积分规则

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

GMT+8, 2024-11-27 04:17 , Processed in 0.186161 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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