明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2895|回复: 10

想取得所有(直接,间接)与指定线相交的线,但程序太慢

[复制链接]
发表于 2003-11-1 14:46:00 | 显示全部楼层 |阅读模式
我用ssget "x" 取得所有线,然后把所有与指定线相交的线放入一个序列,再依次取此序列中的值求与其相交的线并将其添加的序列中如此下去。
是不是可以用函数嵌套呀
我做了一个但速度太慢,因为图中线条太多,每个每个比较是否有交点(inters),我该怎么办?
发表于 2003-11-1 14:50:00 | 显示全部楼层
用IntersectWith方法,进行循环即可,不需要用函数嵌套
发表于 2003-11-1 15:18:00 | 显示全部楼层
不知道你怎样算快,怎样算慢,看看这个
(vl-load-com)
(defun HasInters (ax_ent_1 ax_ent_2 / ax_ent_1 ax_ent_2 intpoints)
  (setq intpoints (vla-intersectwith ax_ent_1 ax_ent_2 acextendboth))
  (setq intpoints (vlax-variant-value intpoints))
  (if (> (vlax-safearray-get-u-bound intpoints 1) 0)
    t
    nil
  )
)
(defun c:test( / ent ss ssnew i entNew)
  
  (setq ent (vlax-ename->vla-object (car (entsel "选择指定直线"))))
  (setq ss (ssget "X"))
  (setq ssNew (ssadd))
  (setq i 0)
  (setq time (getvar "date"))
  (repeat (sslength ss)
    (if (HasInters ent (vlax-ename->vla-object (setq entNew (ssname ss i))))
      (ssadd entNew ssNew)
    )
    (setq i (1+ i))
  )
  (princ (- (getvar "date") time))
  ssNew
)
 楼主| 发表于 2003-11-1 16:04:00 | 显示全部楼层

我要得效果像这样的(如红线所示)并且实际中的图中线条多的多,而且是3d的,再z方向上也有线条,我的意图是通过找到所有直接或间接相交的线并把他们改变颜色以方便观察,当点别的线时还原颜色。如a与b c d 有交点,b与f g有交点,d与h i有交点,把a b c d f g h i全部改变颜色。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2003-11-1 16:22:00 | 显示全部楼层
知道你的意思了,线较多的话应该会比较慢了,以前我用VC编一个类似于资源管理器的东西时,查找文件夹也是这样的,也用到了函数的嵌套调用,
可否看看你的程序?
 楼主| 发表于 2003-11-1 16:39:00 | 显示全部楼层
可以,但程序还没有完成。
我想用嵌套,但还不知道怎么嵌套,所以暂时用repeat循环代用。
这个决定向下查找的深度

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2003-11-3 21:16:00 | 显示全部楼层
meflying发表于2003-11-1 15:18:00不知道你怎样算快,怎样算慢,看看这个
(vl-load-com)
(defun HasInters (ax_ent_1 ax_ent_2 / ax_ent_1 ax_ent_2 intpoints)
   (setq intpoints (vla-intersectwith ax_ent_1 ax_ent_2


他的意思不是这样的.

他要的:假定a交b ,b交c,c交d....通过点a得到abcd....

既然都是直线,不妨用ssget "f"
得到的选集再进行判断是否相交.
然后再循环,别忘了把已经求过的去除,不然肯定死循环.
发表于 2003-11-4 07:55:00 | 显示全部楼层
aeo000000比我快一步說出關鍵點,
;;思路
;;利用下列特性替代尋找交點
;;(ssget "F" (list A11 A10) '((0 . "LINE")))
 楼主| 发表于 2003-11-5 13:34:00 | 显示全部楼层
龙斑竹
;;(ssget "F" (list A11 A10) '((0 . "LINE")))语句提示参数过多
用“f"应该输入点序列作为篱选的参数,你怎么用两个实体作参数,能详细解释一下吗?
发表于 2003-11-5 16:22:00 | 显示全部楼层
;取出LINE端点
(defun getentendpoint(ent)
  (setq att (entget ent))
  (setq A11 (cdr (assoc 11 ett)))
  (setq A10 (cdr (assoc 10 ett)))
)


A11 & A10 是線的端點
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-10-2 12:35 , Processed in 0.172326 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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