明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 328|回复: 4

[讨论] DBX怎么查询到块中实体,然后删除操作,主要是获取块中实体

[复制链接]
发表于 2023-11-28 21:07 | 显示全部楼层 |阅读模式
DBX怎么查询到块中实体,然后删除操作,主要是获取块中实体
发表于 2023-11-29 11:30 | 显示全部楼层
本帖最后由 vitalgg 于 2023-11-29 17:16 编辑

  1. ;; 加载@lisp函数库
  2. (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))))

  3. ;; 修改以下配置信息===================================
  4. (setq framename "图框块名") ;; 你的图框块名
  5. (setq signs '("签名1" "签名2")) ; 手写签名块的名称
  6. ;;  ==================================================

  7. ;; 功能:清空DBX对象中属性块的属性值
  8. (defun dbx-clean-att (dwg-file / blk-obj blk3)
  9.   ;; 打开外部dwg的DBX对象. 假定文件为 D:/abc.dwg
  10.   (setq dwg-file (findfile dwg-file))
  11.   (dbx:open dwg-file)
  12.   ;;取dbx中的模型空间中的实体
  13.   (setq dbx-ms(vla-get-modelspace *DBX*))
  14.   ;; 取dbx块集中的第4个块定义对象(前几个是model-space paper-space之类的)
  15.   (setq n 0)
  16.   (repeat (vla-get-count dbx-ms)
  17.           (setq obj% (vla-item dbx-ms n))
  18.           (print (vla-get-objectname obj%))
  19.           (cond
  20.             ;; 将图框块中的设计、校对的属性值清空
  21.             ((and (= (vla-get-objectname obj%) "AcDbBlockReference")
  22.                   (= (vla-get-HasAttributes obj%) :vlax-true)
  23.                   (= (vla-get-effectivename obj%) framename)
  24.                   )
  25.              ;;清空属性值
  26.              (block:set-attributes obj% '(("设计" . "")("校对" . ""))))
  27.             ;; 删除签名块
  28.             ((and (= (vla-get-objectname obj%) "AcDbBlockReference")
  29.                   (member (vla-get-effectivename obj%)
  30.                           signs
  31.                           ))
  32.              (vla-delete obj%)
  33.              ))
  34.           (setq n (1+ n)))
  35.   (setq tmp-file (strcat dwg-file ".b.dwg"))
  36.   (vla-saveas *DBX* tmp-file)
  37.   ;;(vla-save *DBX*) ;; 新版本DBX不支持直接写入
  38.   (dbx:release)
  39.   (if (and (findfile tmp-file)
  40.            (>  (vl-file-size tmp-file) 0))
  41.       (progn
  42.         (vl-file-delete dwg-file)
  43.         (vl-file-rename tmp-file dwg-file))
  44.       ))
 楼主| 发表于 2023-11-29 12:54 | 显示全部楼层

测试dwg有2个相同的属性块,还问下(setq dbx-blks(vla-get-blocks  *DBX*))的话,我用vla-get-Name,只得到一个块名,
如果用ModelSpace可以得到2个,,因为是属性块,我想。所以我觉得应该ModelSpace,得到2个,然后再用(setq blk3 (vla-item dbx-blks 3))来对块处理,求大佬指点
发表于 2023-11-29 13:26 | 显示全部楼层
本帖最后由 vitalgg 于 2023-11-29 14:32 编辑

你要的是块参照blockreference对象 ,而不是块block对象

*DBX* 对应的就是Docment. 只是没有界面,可操作的对角为 浅绿色和浅蓝色部分。





本帖子中包含更多资源

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

x
 楼主| 发表于 2023-11-30 07:38 | 显示全部楼层
感谢大佬。折腾几天,对于大佬给的图我也不懂,我总结下理解,ms相当于ssget,getblocks相当于块编辑,这样就可以对应着理解,操作了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-4-28 22:26 , Processed in 0.223090 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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