乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 153|回复: 9

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

[复制链接]

6

主题

23

帖子

3

银币

初来乍到

Rank: 1

铜币
47
发表于 2003-11-1 14:46:00 | 显示全部楼层 |阅读模式
我用ssget "x" 取得所有线,然后把所有与指定线相交的线放入一个序列,再依次取此序列中的值求与其相交的线并将其添加的序列中如此下去。
是不是可以用函数嵌套呀
我做了一个但速度太慢,因为图中线条太多,每个每个比较是否有交点(inters),我该怎么办?
回复

使用道具 举报

36

主题

201

帖子

8

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
345
发表于 2003-11-1 14:50:00 | 显示全部楼层
用IntersectWith方法,进行循环即可,不需要用函数嵌套
回复

使用道具 举报

26

主题

3072

帖子

10

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3177
发表于 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
)
回复

使用道具 举报

6

主题

23

帖子

3

银币

初来乍到

Rank: 1

铜币
47
发表于 2003-11-1 16:04:00 | 显示全部楼层
请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:p2rda5la4a2.dwg 
下载次数:0  文件大小:45.11 KB  售价:2银币 [记录]
下载权限: 不限 以上或 Vip会员   [开通Vip]   [签到领银币]  [免费赚银币]


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

使用道具 举报

26

主题

3072

帖子

10

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3177
发表于 2003-11-1 16:22:00 | 显示全部楼层
知道你的意思了,线较多的话应该会比较慢了,以前我用VC编一个类似于资源管理器的东西时,查找文件夹也是这样的,也用到了函数的嵌套调用,
可否看看你的程序?
回复

使用道具 举报

6

主题

23

帖子

3

银币

初来乍到

Rank: 1

铜币
47
发表于 2003-11-1 16:39:00 | 显示全部楼层
可以,但程序还没有完成。
我想用嵌套,但还不知道怎么嵌套,所以暂时用repeat循环代用。
这个决定向下查找的深度
请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:0fvigbvkmhu.lsp 
下载次数:0  文件大小:2.78 KB  售价:2银币 [记录]
下载权限: 不限 以上或 Vip会员   [开通Vip]   [签到领银币]  [免费赚银币]

回复

使用道具 举报

5

主题

66

帖子

8

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
86
发表于 2003-11-3 21:16:00 | 显示全部楼层

他的意思不是这样的.
他要的:假定a交b ,b交c,c交d....通过点a得到abcd....
既然都是直线,不妨用ssget "f"
得到的选集再进行判断是否相交.
然后再循环,别忘了把已经求过的去除,不然肯定死循环.
回复

使用道具 举报

29

主题

1152

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1268
发表于 2003-11-4 07:55:00 | 显示全部楼层
aeo000000比我快一步說出關鍵點,
;;思路
;;利用下列特性替代尋找交點
;;(ssget "F" (list A11 A10) '((0 . "LINE")))
回复

使用道具 举报

6

主题

23

帖子

3

银币

初来乍到

Rank: 1

铜币
47
发表于 2003-11-5 13:34:00 | 显示全部楼层
龙斑竹
;;(ssget "F" (list A11 A10) '((0 . "LINE")))语句提示参数过多
用“f"应该输入点序列作为篱选的参数,你怎么用两个实体作参数,能详细解释一下吗?
回复

使用道具 举报

29

主题

1152

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1268
发表于 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 是線的端點
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-7-6 13:14 , Processed in 1.039424 second(s), 78 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表