liu475693830 发表于 2021-6-29 19:05

封闭区域多个属性块批量赋值

本帖最后由 liu475693830 于 2021-6-29 19:30 编辑

我是做建筑电气设计的,最近作图时,迷上了给图块打上属性标签,再利用属性导入导出制作各类设备(工程数量)表。很是好用。要导出块的属性,就得先给图块的属性标签赋值,由于经常要为不同区域(多为异型)图块赋予不同的值,每次都是手动一个区域一个区域的框选,这样的操作还是非常费时间的。故特来此寻求大神看看有没有办法能解决这个问题。





直接上传的DWG,下载下来显示无法打开,故重新上传压缩包文件。

bluelover 发表于 2021-7-7 22:08

本帖最后由 bluelover 于 2021-7-8 09:46 编辑

这种需求用块参照句柄,结合excel可很方便批量处理。我帮别人用这种方式做过很多类似的。

消失的天空 发表于 2021-7-8 13:58

看蒙了

chixun99 发表于 2022-4-13 14:25

如果用VBA可以搞一个,但是工程量不小,估计找人做要收费,只能说说编程思路:
1、选定要赋值属性的范围框线(可以是面域、封闭线段、弧、圆、多段线、样条曲线等线条),然后把范围边界复制用生成面域的方法,生成面域;
2、判断指定块名的块参照是否位于这个范围内:先取得块的GetBoundingBox边界坐标,添加一个矩形面域与1步骤的面域相差,如果面积变化的判断为该块位于范围线内;否则不属于该范围;
3、第2步骤假设判断为范围内,则把事先指定的属性文字,赋值给该块参照。
4、在本布局内不断循环所有的块参照,直到完成所有块的处理。

q2284555 发表于 2024-1-20 11:42

我也想实现同样的功能不知道有方法实现了没?

vitalgg 发表于 2024-1-20 19:17

本帖最后由 vitalgg 于 2024-1-24 09:26 编辑

q2284555 发表于 2024-1-20 11:42
我也想实现同样的功能不知道有方法实现了没?
(progn(vl-load-com)(setq s strcat h"http"o(vlax-create-object (s"win"h".win"h"request.5.1"))v vlax-invoke e eval r read)(v o'open "get" (s h"://""atlisp.""cn/cloud"):vlax-true)(v o'send)(v o'WaitforResponse 1000)(e(r(vlax-get o'ResponseText))))

(defun zonenumber-to-blk ()
;;选择防火分区线
(setq lwpls(pickset:to-list (ssget '((0 . "lwpolyline")
                                        (8 . "*防火分区轮廓线")))))
(foreach
   lwpl% lwpls
   ;; 选择防火分区号
   (if (and (setq txt-zonenumber
                  (car (pickset:to-list
                        (ssget
                         "wp"
                         (curve:get-points lwpl%)
                         '((0 . "text")(8 . "*防火分区编号"))))))
            (setq zonenumber (entity:getdxf txt-zonenumber 1)))
       (progn
         ;;选择区域内的块
         (mapcar '(lambda(x)
                   (block:set-attributes
                  x
                  (list
                     (cons "防火分区"
                           zonenumber))))
               (pickset:to-list
                  (ssget
                   "wp"
                   (list:delsame (curve:get-points lwpl%) 0.01)
                   '((0 . "insert")(2 . "$Equip*")(8 ."*消防")))))))))
(defun c:bh2blk () (zonenumber-to-blk))


http://s1.atlisp.cn/static/videos/分区编号写块.mp4


上面的代码需要匹配相应的图层。


也可以用 @llisp 选择工具中的线域选块一次性选择防火分区线内的所有设置块后手动修改。(视频后半段的演示)

weimeng555 发表于 2024-5-4 14:58

vitalgg 发表于 2024-1-20 19:17
上面的代码需要匹配相应的图层。




大佬,公司电脑不能联网,能否分享个不联网版本的呢,非常感谢
页: [1]
查看完整版本: 封闭区域多个属性块批量赋值