找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 485|回复: 12

[已解决] xdrx-pickset-union函数的问题

[复制链接]

已领礼包: 199个

财富等级: 日进斗金

发表于 2020-6-23 14:49:51 | 显示全部楼层 |阅读模式
悬赏20D豆已解决
本帖最后由 dyjwyqz5221 于 2020-6-23 15:13 编辑

(defun c:jlq-bk-bh-cp(/ ss-bh)
       ;;;取出组名的最后生成的一个(适用于所有情况)
        (defun yqz::Entity:GroupName(e / ename)
                  (if (setq e-name (last (xdrx_object_reactor e)))
                        (xdrx_getpropertyvalue e-name "name")
                );;;if
        );;;defun
        (defun _pross(ss-bh / ss p1 p2)
                (xdrx-begin)
                (xdrx-sysvar-push '("cmdecho" 0 "osmode" 33 "pickstyle" 1));;;此处33代表1和32之和,即端点捕捉和交点捕捉
                (setq ss (ssadd))
                (mapcar
                        '(lambda(x / groupname)
                                (if (setq groupname (yqz::Entity:GroupName x))
                                        (setq ss (xdrx-pickset-union ss (xdrx-group->pickset groupname)))
                                );;;if
                        );;;lambda
                        (xdrx-pickset->ents ss-bh)
                );;;mapcar
                (xdrx-pickset-redraw ss)
                (setq p1 (getpoint "\n拾取基点<退出>: "))                                       
                (while (setq p2 (getpoint "\n插入点: "))
                        (xdrx-entity-copy ss p1 p2)
                );;;while
                (xdrx-pickset-redraw ss t)
                (xdrx-sysvar-pop)
                (xdrx-end)
                (princ)
        );;;defun
        (while (setq ss-bh (xdrx-ssget "\n框选剪力墙施工平面图:" ":L" '((0 . "text")(1 . "*BZ*"))))
                (_pross ss-bh)
        );;;while
        (princ)
);;;defun
上面这段程序在运行第一次时,没有问题,
但在运行第二次时(退出后重新开始该命令时),红色部分出问题了,
将上次命令运行的ss选择集加进去了。这是为何???

其他,参数的结果测试均正常。
一直用着非常正常的,现在出问题了。
因为拖动时,因为双屏幕及眼睛不好等误操作时,经常将拖动点放到屏幕外面,
造成cad死机,因此设计了这个不拖动的复制黏贴组的命令。

附:测试图




00001测试图_t3.rar

4.33 MB, 下载次数: 0, 下载积分: D豆 -1 , 活跃度 1

最佳答案

查看完整内容

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

已领礼包: 40个

财富等级: 招财进宝

发表于 2020-6-23 14:49:52 | 显示全部楼层
dyjwyqz5221 发表于 2020-6-24 09:21
测试之后,发现了一个问题。

用下面两段程序分别进行了测试

试下,生成选择集前

(xdrx-setvar "picksethome" <0-50>)
指定下存储位置不同的选择集用下不同的位置

点评

测试完毕,这样是可以的: (defun c:tt2(/ ss lst n) (setq ss (ssadd)) (setq n 0) (mapcar '(lambda(x / ss1) (setq groupname (yqz::Entity:GroupName x)) (xdrx-setvar "picksethome" (setq n  详情 回复 发表于 2020-6-24 12:07

评分

参与人数 1D豆 +5 收起 理由
dyjwyqz5221 + 5 热心帮忙奖!

查看全部评分

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

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2020-6-23 23:39:44 | 显示全部楼层
试下24日更新的API

点评

测试之后,发现了一个问题。 用下面两段程序分别进行了测试 测试图见附图: 多段线边框与编号一一对应成组,3组 (defun c:tt1(/ ss lst) (setq ss (ssadd)) (repeat 2 (setq ss1 (ssget)) (setq l  详情 回复 发表于 2020-6-24 09:21

评分

参与人数 1D豆 +5 收起 理由
dyjwyqz5221 + 5 热心帮忙奖!

查看全部评分

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2020-6-24 01:19:19 | 显示全部楼层
如果你不执行command命令,cmdecho系统变量不用设

点评

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

使用道具 举报

已领礼包: 199个

财富等级: 日进斗金

 楼主| 发表于 2020-6-24 09:02:35 | 显示全部楼层
newer 发表于 2020-6-24 01:19
如果你不执行command命令,cmdecho系统变量不用设

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

使用道具 举报

已领礼包: 199个

财富等级: 日进斗金

 楼主| 发表于 2020-6-24 09:21:46 | 显示全部楼层
XDSoft 发表于 2020-6-23 23:39
试下24日更新的API

测试之后,发现了一个问题。

用下面两段程序分别进行了测试
测试图见附图:
多段线边框与编号一一对应成组,3组

(defun c:tt1(/ ss lst)
        (setq ss (ssadd))
        (repeat 2
                (setq ss1 (ssget))
                (setq lst (cons (sslength ss1) lst))
                (setq ss (xdrx-pickset-union ss ss1))
        )
        (xdrx_prompt "\n合并的选择集ss图元数->" (sslength ss) " ,lst数目之和-> " (apply '+ lst))
        (princ)
);;;defun

(defun c:tt2(/ ss lst)
        (setq ss (ssadd))
        (mapcar
                '(lambda(x / ss1)
                        (setq groupname (yqz::Entity:GroupName x))
                        (setq ss1 (xdrx-group->pickset groupname))
                        (setq lst (cons (sslength ss1) lst))
                        (setq ss (xdrx-pickset-union ss ss1))
                )
                (xdrx-pickset->ents (ssget '((0 . "text")(1 . "*Z*"))))
        );;;mapcar
        (xdrx_prompt "\n合并的选择集ss图元数->" (sslength ss) " ,lst数目之和-> " (apply '+ lst))
        (princ)
);;;defun


;;;取出组名的最后生成的一个(适用于所有情况)
(defun yqz::Entity:GroupName(e / ename)
          (if (setq e-name (last (xdrx_object_reactor e)))
                (xdrx_getpropertyvalue e-name "name")
        );;;if
);;;defun


命令: TT1
选择对象: 指定对角点: 找到 2 个
选择对象:
选择对象: 指定对角点: 找到 4 个
选择对象:
合并的选择集ss图元数->6 ,lst数目之和-> 6
命令:
命令: TT2
选择对象: 指定对角点: 找到 3 个
选择对象:
合并的选择集ss图元数->2 ,lst数目之和-> 6

两者数目不相等了

说明:修改后的xdrx-pickset-union函数不适应于xdrx-group->picksets函数形成的选择集了?
原先这样是可以的来,望查找原因为盼。

00002.png

000002测试图_t3.rar

4.28 MB, 下载次数: 0, 下载积分: D豆 -1 , 活跃度 1

点评

试下,生成选择集前 用 (xdrx-setvar "picksethome" ) 指定下存储位置  详情 回复 发表于 2020-6-24 11:00
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 199个

财富等级: 日进斗金

 楼主| 发表于 2020-6-24 12:07:59 | 显示全部楼层
newer 发表于 2020-6-24 11:00
试下,生成选择集前

(xdrx-setvar "picksethome" )

测试完毕,这样是可以的:
(defun c:tt2(/ ss lst n)
        (setq ss (ssadd))
        (setq n 0)
        (mapcar
                '(lambda(x / ss1)
                        (setq groupname (yqz::Entity:GroupName x))
                        (xdrx-setvar "picksethome" (setq n (1+ n)))
                        (setq ss1 (xdrx-group->pickset groupname))
                        (setq lst (cons (sslength ss1) lst))
                        ;;;(xdrx-setvar "picksethome" (setq n (1+ n)));;;这句可不要
                        (setq ss (xdrx-pickset-union ss ss1))
                )
                (xdrx-pickset->ents (ssget '((0 . "text")(1 . "*Z*"))))
        );;;mapcar
        (xdrx_prompt "\n合并的选择集ss图元数->" (sslength ss) " ,lst数目之和-> " (apply '+ lst))
        (princ)
);;;defun


测试结果反馈:
1、在xdrx-group->pickset之前增加红色字体部分管用。
2、去掉红色部分,增加到黑色粗体文字这句,不管用。
3、红色、黑色粗体均保留也可以。


结论:仅在xdrx-group->pickset之前增加(xdrx-setvar "picksethome" (setq n (1+ n)))就可以了
看来之前虽然lst是6个,那是巧合。第一次用xdrx-group->pickset生成的的选择集,后面没变化。
还是房间号的问题。

点评

不用那么多,多了还超出最大房间号限制了 (xdrx-getvar "picksetmaxhomenum") 用两个房间号就可以,group给一个,union后,加入另一个 多个选择集操作的时候,就要注意变量房间号的问题。  详情 回复 发表于 2020-6-24 13:17
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2020-6-24 13:17:17 | 显示全部楼层
dyjwyqz5221 发表于 2020-6-24 12:07
测试完毕,这样是可以的:
(defun c:tt2(/ ss lst n)
        (setq ss (ssadd))

不用那么多,多了还超出最大房间号限制了
(xdrx-getvar "picksetmaxhomenum")

用两个房间号就可以,group给一个,union后,加入另一个

多个选择集操作的时候,就要注意变量房间号的问题。

点评

还有个新发现,这样用法就突破了选择集数目的限值了。非常好!! 其实我发的这个命令,能解决组拷贝的问题。 修改一下,发给大家,望共享。 [mw_shl_code=actionscript3,true](defun c:jlq-bk-bh-cp(/ ss-bh)  详情 回复 发表于 2020-6-24 16:02
测试了下,两个房间号的放置位置这两种均可以。后设置房间号: (defun c:tt1() (setq ss (ssadd)) (mapcar '(lambda(x / ss1) (setq ss1 (xdrx-group->pickset (yqz::Entity:GroupName x))) (xdrx-s  详情 回复 发表于 2020-6-24 15:23
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 199个

财富等级: 日进斗金

 楼主| 发表于 2020-6-24 15:23:06 | 显示全部楼层
newer 发表于 2020-6-24 13:17
不用那么多,多了还超出最大房间号限制了
(xdrx-getvar "picksetmaxhomenum")

测试了下,两个房间号的放置位置这两种均可以。后设置房间号:
(defun c:tt1()
        (setq ss (ssadd))
        (mapcar
                '(lambda(x / ss1)
                        (setq ss1 (xdrx-group->pickset (yqz::Entity:GroupName x)))
                        (xdrx-setvar "picksethome" 1)
                        (setq ss (xdrx-pickset-union ss ss1))
                        (xdrx-setvar "picksethome" 2)
                )
                (xdrx-pickset->ents (ssget '((0 . "text")(1 . "*Z*"))))
        )
        (xdrx-pickset-redraw ss)
)

提前设置房间号:
(defun c:tt2()
        (setq ss (ssadd))
        (mapcar
                '(lambda(x / ss1)
                        (xdrx-setvar "picksethome" 1)
                        (setq ss1 (xdrx-group->pickset (yqz::Entity:GroupName x)))
                        (xdrx-setvar "picksethome" 2)
                        (setq ss (xdrx-pickset-union ss ss1))
                )
                (xdrx-pickset->ents (ssget '((0 . "text")(1 . "*Z*"))))
        )
        (xdrx-pickset-redraw ss)
)

另:

用xdrx-pickset-getathome函数获取选择集的房间号来,没有用法,
(xdrx-pickset-getathome ss1)取不出房间号来,
怎么样用法?

点评

通过选择集获取房间号,没太多必要,因为之前用选择集肯定是要保存到变量名下的,通过变量名调用选择集  详情 回复 发表于 2020-6-24 17:29
(xdrx-getvar "picksethome") 获取当前的房间号  详情 回复 发表于 2020-6-24 17:27
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 199个

财富等级: 日进斗金

 楼主| 发表于 2020-6-24 16:02:17 | 显示全部楼层
本帖最后由 dyjwyqz5221 于 2020-6-27 20:51 编辑
newer 发表于 2020-6-24 13:17
不用那么多,多了还超出最大房间号限制了
(xdrx-getvar "picksetmaxhomenum")

还有个新发现,这样用法就突破了选择集数目的限值了。非常好!!
其实我发的这个命令,能解决组拷贝的问题,还能解决拖动拷贝时,插入点在屏幕外造成cad卡死的现象。
修改一下,发给大家,望共享。2020.06.27修改。
[Actionscript3] 纯文本查看 复制代码
(defun c:jlq-bk-bh-cp(/ ss-bh)
	(defun _pross(ss-bh / ss p1 p2) 
		(xdrx-begin)
		(xdrx-sysvar-push '("osmode" 33 "pickstyle" 1));;;此处33代表1和32之和,即端点捕捉和交点捕捉
		(setq ss (ssadd))
		(mapcar
			'(lambda(x / groupname ss1)
				(if (setq groupname (yqz::Entity:GroupName x))
					(progn
						(xdrx-setvar "picksethome" 1)
						(setq ss1 (xdrx-group->pickset groupname))
						(xdrx-setvar "picksethome" 2)
						(setq ss (xdrx-pickset-union ss ss1))
					);;;progn
				);;;if
			);;;lambda
			(xdrx-pickset->ents ss-bh)
		);;;mapcar
		(xdrx-pickset-redraw ss)
		(setq p1 (getpoint "\n拾取基点<退出>: "))					
		(while (setq p2 (getpoint "\n插入点: "))
			(xdrx-setvar "picksethome" 1)
			(xdrx_entity_copy ss p1 p2)
		);;;while
		(xdrx-pickset-redraw ss t)
		(xdrx-sysvar-pop)
		(xdrx-end)
		(princ)
	);;;defun
	(while (setq ss-bh (xdrx-ssget "\n框选剪力墙施工平面图:" ":L" '((0 . "text")(1 . "*BZ*"))))
		(_pross ss-bh)
	);;;while
	(princ)
)



点评

准确的说不是突破最大数目限制, 只是就用了两个选择集  详情 回复 发表于 2020-6-24 17:26
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2020-6-24 17:26:48 | 显示全部楼层
dyjwyqz5221 发表于 2020-6-24 16:02
还有个新发现,这样用法就突破了选择集数目的限值了。非常好!!
其实我发的这个命令,能解决组拷贝的问 ...

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2020-6-24 17:27:55 | 显示全部楼层
dyjwyqz5221 发表于 2020-6-24 15:23
测试了下,两个房间号的放置位置这两种均可以。后设置房间号:
(defun c:tt1()
        (setq ss (ssadd))

(xdrx-getvar "picksethome")
获取当前的房间号

评分

参与人数 1D豆 +5 收起 理由
dyjwyqz5221 + 5 热心帮忙奖!

查看全部评分

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2020-6-24 17:29:34 | 显示全部楼层
dyjwyqz5221 发表于 2020-6-24 15:23
测试了下,两个房间号的放置位置这两种均可以。后设置房间号:
(defun c:tt1()
        (setq ss (ssadd))

通过选择集获取房间号,没太多必要,已知选择集了,要房间号做什么呢?因为之前用选择集肯定是要保存到变量名下的,通过变量名调用选择集
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 00:48 , Processed in 0.416611 second(s), 57 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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