找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1009|回复: 10

[求助] 沿线图块统计

[复制链接]

已领礼包: 1个

财富等级: 恭喜发财

发表于 2017-8-5 21:28:28 | 显示全部楼层 |阅读模式
悬赏20D豆未解决
这个图上的块连成了一条回路 现在要点选该回路中的某个图块 然后自动按照块名统计出该回路中各种快的数量 这些块在同一个图层 线是多段线 我想的是 这些块做一个集合 多段线做一个集合 两个集合相互之间进行遍历 写一个程序 递归调用 判断条件是是否有交点 用vla-IntersectWith 有没有大佬帮忙看下啊 出不来


[Actionscript3] 纯文本查看 复制代码
(defun c:tt()	
	(setq p_block(car (entsel "选定某个回路上的图块: ")))
	(setq ss_result_block nil ss_result_block(ssadd p_block))
	(setq pl_ss(ssget "x" '((8 . "T-消防线路")(0 . "LWPOLYLINE"))))
	(setq bl_ss(ssget "x" '((8 . "T-消防设备")(0 . "insert"))))
	(setq i 0)
	(while (< i (sslength pl_ss))
		(progn
			(if (vla-IntersectWith (vlax-ename->vla-object (ssname pl_ss i))(vlax-ename->vla-object p_block) acExtendNone)
				(progn
					(child_pro pl_ss bl_ss p_block (ssname pl_ss i) 0)
				)
			)
			(setq i(1+ i))
		)
	)
)
(defun child_pro(pl_ss bl_ss father_obj child_obj child_flag_ss / ss i)
	;child_flag_ss 1 pl_ss
	;child_flag_ss 0 bl_ss
	(if (= child_flag_ss 0)
		(progn
			(setq child_flag_ss 1)
			(setq ss bl_ss)
			;(setq ss (ssget "x" '((8 . "T-消防设备")(0 . "insert"))))
		)
		(progn
			(setq child_flag_ss 0)
			(setq ss pl_ss)
			;(setq ss(ssget "x" '((8 . "T-消防线路")(0 . "LWPOLYLINE"))))
		)
	)
	(setq i 0)
	(while (< i (sslength ss))
		(progn		
			(if (vla-IntersectWith (vlax-ename->vla-object child_obj) (vlax-ename->vla-object (ssname ss i)) acExtendNone)
				(progn			
				(if (equal (ssname ss i ) father_obj)
				  (progn)
						(progn
							(if (= 0 child_flag_ss)
								(progn
									(ssadd child_obj ss_result_block)
								)
								(progn
									(ssadd (ssname ss i) ss_result_block)
								)
							)
							(child_pro pl_ss bl_ss child_obj (ssname ss i) child_flag_ss)
						)
					)
				)
			)
			(setq i (1+ i ))
		)
	)
)

123123123.png
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-8-5 21:36:06 | 显示全部楼层
上传个测试用的DWG压缩文件。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

 楼主| 发表于 2017-8-5 22:01:32 | 显示全部楼层

好的 已经上传了 麻烦看下吧

test.rar

141.38 KB, 下载次数: 7, 下载积分: D豆 -1 , 活跃度 1

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

 楼主| 发表于 2017-8-5 22:44:50 | 显示全部楼层
已经解决了
  1. (if (vla-IntersectWith (vlax-ename->vla-object (ssname pl_ss i))(vlax-ename->vla-object p_block) acExtendNone)
复制代码
这里是错的 (if (safearray-value (variant-value (vla-IntersectWith (vlax-ename->vla-object (ssname pl_ss i))(vlax-ename->vla-object p_block) acExtendNone)))改下就好了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

发表于 2017-8-5 22:57:05 | 显示全部楼层
一行行看吧

第三行


(setq ss_result_block nil ss_result_block(ssadd p_block))

ssadd前,应该先建立个空选择集

改成:

(setq ss_result_block (ssadd)
        ss_result_block (ssadd p_block)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 1304个

财富等级: 财源广进

发表于 2017-8-6 00:56:55 | 显示全部楼层
厉害啊!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 9052个

财富等级: 富甲天下

发表于 2017-8-6 07:57:15 | 显示全部楼层
感谢分享!!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2017-8-6 11:42:33 | 显示全部楼层
绘图过程中尽量不要断开回路线,这样方便统计,出图的时候用一个命令来断开那些线

不断开的线只要搜索块的插入点在线的节点上,这样效率高还可以自动统计
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-8-6 12:17:40 | 显示全部楼层
推荐,给块做遮罩,用块去遮罩下面的线,下面的线别断开。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

 楼主| 发表于 2017-8-10 10:03:39 | 显示全部楼层

不错 可以试试
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 5060个

财富等级: 富甲天下

发表于 2017-8-15 14:11:53 | 显示全部楼层
死机,事实证明这种算法是非常严重的错误,图小都这样了,大一点的图慢死了。

命令: tt 选定某个回路上的图块: 出现硬错误 ***
已达内部堆栈限制 (模拟)"\n*** INTERNAL ERROR: VL namespace mismatch\n"" type Y to reset:
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-12-23 00:20 , Processed in 0.450247 second(s), 50 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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