找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1112|回复: 8

[编程申请] 批量选择属性块,所选块中标记为“楼层”对应的值统一改为输入的值

[复制链接]
发表于 2018-3-18 19:52:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
本帖最后由 迷失的传说 于 2018-3-19 01:21 编辑

各位请求一个LISP:
附图中鼠标框选几栋楼(属性块),lisp命令自动筛选所选块中某个相同标记(例如标记为“楼层”)的内容,把该标记对应的值统一改为输入的内容(例如楼层统一改为26)?
附件带有CAD文件,请各位朋友指点,谢谢!

途中每栋楼各为独立的属性块

途中每栋楼各为独立的属性块

每个属性块定义几个属性值

每个属性块定义几个属性值

修改后的结果全改为26F

修改后的结果全改为26F

11.rar

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

CAD文件

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

已领礼包: 20个

财富等级: 恭喜发财

发表于 2018-3-18 20:24:30 | 显示全部楼层
截图,前后对比和上传DWG
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-18 22:10:43 | 显示全部楼层

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

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

发表于 2018-3-18 22:41:59 | 显示全部楼层
拾取修改属性统一值.gif

所有块都修改,是不是通用性不好? 还有什么需要?

下面程序拾取哪个属性修改哪个标记。

  1. (defun c:tt ()
  2.   (if (and (setq e (nentsel "\n拾取修改的属性<退出>:"))
  3.            (setq e (car e))
  4.            (= (car (xdrx_object_classname e)) "ATTRIB")
  5.            (setq val (getstring "\n修改为<退出>:"))
  6.       )
  7.     (progn (setq blk         (xdrx_object_owner e)
  8.                  atts         (xdrx_getpropertyvalue blk "AttributeEntities")
  9.                  no         (vl-position e atts)
  10.                  blkname (car (xdrx_getpropertyvalue blk "BlockTableRecord"))
  11.            )
  12.            (setq ss (ssget "x" (list '(0 . "INSERT") (cons 2 blkname))))
  13.            (mapcar '(lambda (x)
  14.                       (setq att
  15.                              (nth no (xdrx_getpropertyvalue x "AttributeEntities"))
  16.                       )
  17.                       (xdrx_setpropertyvalue att "textstring" val)
  18.                     )
  19.                    (xdrx_pickset->ents ss)
  20.            )
  21.            (xdrx_prompt "\n修改了 " (sslength ss) " 个属性值到:" val)
  22.     )
  23.   )
  24.   (princ)
  25. )



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

使用道具 举报

 楼主| 发表于 2018-3-18 23:46:43 | 显示全部楼层
本帖最后由 迷失的传说 于 2018-3-19 00:58 编辑

规划建筑强排设计时需要频繁反复的批量修改楼层高度的属性值,选择修改时也经常变换选择若干个楼栋,而不是改所有楼栋,所以要求可以框选需要的若干个属性块来修改值,希望能够框选块而不是一个一个选择属性文字,这样工作效率会提高,命令可以在所选择的块中自动筛选标记为“楼层”的属性,然后再改具体楼层数。还有是否可以只用lisp自带函数写。
感谢您的热心帮助!

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

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

发表于 2018-3-19 00:28:06 | 显示全部楼层
本帖最后由 Lisphk 于 2018-3-19 00:32 编辑

你可以只安装XDRX API,不用安装晓东工具箱。
XDRX API 是函数库,你不能指望帮你的人都把底层函数都重给你写,那样帮你的人就更少了,谁的时间都宝贵。
使用XDRX API就是能快速的编程。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

发表于 2018-3-21 23:51:36 | 显示全部楼层
还是给你写一个吧


  1. (defun c:t1( / att atts j len newval obj ss str)
  2.         (setq str "楼层")
  3.         (if (and
  4.                   (setq ss(ssget '((0 . "insert"))))
  5.               (setq newVal(getstring (strcat "\n请输入新的 " str " 值:" )))
  6.               (/= newval "")
  7.         )
  8.         (progn
  9.                 (command "undo" "group")
  10.                         (setq j 0 len(sslength ss))
  11.                         (while (< j len)
  12.                                 (setq obj(vlax-ename->vla-object (ssname ss j)))
  13.                                 (if (setq atts (vlax-invoke Obj "GetAttributes"))
  14.                                   (progn
  15.                                    (mapcar '(lambda (Att)
  16.                                        (if (and (= str (vla-get-TagString Att)) (vlax-write-enabled-p att))
  17.                                             (vla-put-TextString Att newVal)
  18.                                        )
  19.                                      ) atts
  20.                                    )
  21.                                    (vla-update Obj)
  22.                                  ))
  23.                                  (setq j(1+ j))
  24.                                  (vlax-release-object obj)
  25.                         )               
  26.                         (command "undo" "end")
  27.     ) )
  28.     (princ)
  29. )



改 楼层,命令名为 t1


你可以把程序 里面的 "楼层"两个字 改成 "户型"   , t1改成 t2 重新存成 lsp, 就是改 户型 命令
以此类推


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

使用道具 举报

发表于 2018-10-20 15:35:09 | 显示全部楼层
看了楼主的程序,写的很好,但这个还是先用选择集过滤选中块,后边的执行的功能类似find命令的功能。这样如果属性块特别多的话,运算量还是很大。
有没有办法用过滤器直接选择例如"tagstring为楼层,textstring为17F"的属性块,然后这个选择集的长度就不大了。然后再用循环修改textstring的内容。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 183个

财富等级: 日进斗金

发表于 2018-11-6 19:53:32 | 显示全部楼层
。。。。。
用“选择易”或天正的“对象选择”选好对象后,打开特性面板(CTRL+1),修改后直接回车
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 13:40 , Processed in 0.194885 second(s), 48 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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