明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1032|回复: 8

广告:把块内标注_dimlinear _dimaligned移出块

[复制链接]
发表于 2024-5-30 15:57:28 | 显示全部楼层 |阅读模式
同一块,如果有多个,每个块标注太麻烦。但如果是镜向的,标注看起来是倒过来的,确实不爽。

根据老迈建议,把标注移出块
下面是主程序(只有主程序)
  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. ;;[功能]将块内标注在块外重新生成
  3. ;;只重生块内_dimlinear _dimaligned,其余标注删除
  4. ;;将块内(0 0)转到世界坐标系(MAT:TransNested '(0 0) (list e) 2 0)
  5. ;;第1步,找到块内标注,假如只有一个,并删除(vla-delete (vlax-ename->vla-object (car (nentsel))))
  6. ;;第2步,所有同名块列表
  7. ;;第3步,找到标注的三个点
  8. ;;第4步,分别把三个对各块转换,重新生成标注
  9. (defun C:RD (/ E EN NAME SS)
  10.   (vl-cmdf "._ucs" "");以简化程序
  11.   (while (setq ss (LM:ssget "\n >选择块<移出块内标注>:" '(((0 . "INSERT")))))
  12.     (setq e (ssname ss 0))
  13.     (setq en (entget e))
  14.     (setq name (cdr (assoc 2 en)))
  15.     (setq ss (ssget "X" (list '(0 . "INSERT") (cons 2 name))))
  16.     (_HH:RD ss name)
  17.   )
  18.   (princ"\n 重生块内_dimlinear _dimaligned,其余标注删除")
  19.   (princ)
  20. )
  21. (princ"\n 命令:RD,重生块内_dimlinear _dimaligned,其余标注删除")
  22. (princ)

  23. (defun _HH:RD (ss name / B1 B1DEL EN FLAG L P1 P2 P3 str1)
  24.   (setq b1 (TBLOBJNAME "block" name))
  25.   ;;第1步,找到块内标注,假如只有一个,并删除(vla-delete (vlax-ename->vla-object (car (nentsel))))
  26.   (setq Flag T)
  27.   (while (and Flag (setq b1 (entnext b1)))
  28.     (setq en (entget b1))
  29.     (setq name (cdr (assoc 0 en)))
  30.     (if  (wcmatch name "*DIMENSION")
  31.       (progn
  32.   (setq Flag nil)
  33.   (setq b1Del b1)
  34.       )
  35.     )
  36.   )
  37.   (if (not (wcmatch name "*DIMENSION"))
  38.     (alert "块内没有标注")
  39.     (progn
  40.       (setq name (cdr (assoc 2 en)))  ;块名
  41.       (setq b1 (TBLOBJNAME "block" name))
  42.       ;;第3步,找到标注的三个点
  43.       (setq Flag T)
  44.       (while (and Flag (setq b1 (entnext b1)))
  45.   (setq en (entget b1))
  46.   (if (= (cdr (assoc 0 en)) "MTEXT")
  47.     (progn
  48.       ;;非等比块要改为假尺寸
  49.       (setq str1 (cdr (assoc 1 en)))
  50.       (setq p1 (cdr (assoc 10 en)))
  51.       (setq b1 (entnext b1))
  52.       (setq en (entget b1));第1个"POINT"
  53.       (setq p2 (cdr (assoc 10 en)))
  54.       (setq b1 (entnext b1))
  55.       (setq en (entget b1));第2个"POINT"
  56.       (setq p3 (cdr (assoc 10 en)))
  57.       (setq Flag nil)
  58.     )
  59.   )
  60.       )
  61.     )
  62.   )
  63.   
  64.   (if (and (vl-consp p1) (vl-consp p2) (vl-consp p3))
  65.     (progn
  66.       ;;选择集转为vla列表
  67.       (setq L (LM:ss->vla ss))
  68.       (vla-delete (vlax-ename->vla-object b1Del));删除块内对象
  69.       (mapcar (function (lambda(x) (vla-update x))) L )
  70.       (_HH:RD:do p1 p2 p3 L str1)
  71.     )
  72.     (prompt "\n ......标注异常,没找到标注的3个定位点")
  73.   )
  74. )

本帖子中包含更多资源

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

x
发表于 2024-5-30 16:10:56 | 显示全部楼层
本帖最后由 你有种再说一遍 于 2024-5-30 16:14 编辑

建议不要做块,而是制作索引和选择集事件,通过事件获取索引,这样就能不修改显示驱动下实现这个功能.
简而言之自己实现了"组块"
那么怎么保存索引呢?制作一个bson,把索引保存进去,把dwg保存在末尾...
 楼主| 发表于 2024-5-30 16:15:30 | 显示全部楼层
你有种再说一遍 发表于 2024-5-30 16:10
建议不要做块,而是制作索引和选择集事件,通过事件获取索引,这样就能不修改显示驱动下实现这个功能.
简而言 ...

这种高级方法只有靠您了
发表于 2024-5-31 07:55:57 | 显示全部楼层
感谢黄大师的分享!
发表于 2024-5-31 11:08:29 | 显示全部楼层
这个程序非常的实用,可否麻烦黄大师整一个完整的Lsp或fas呢,让我们这些普通的不懂lsp也能用上,谢谢黄大师了
发表于 2024-5-31 12:09:11 | 显示全部楼层
黄工,下面这个删所有标主的程序能不能改成把所有标注移出块

http://bbs.mjtd.com/thread-188717-1-1.html
 楼主| 发表于 2024-5-31 13:02:06 | 显示全部楼层
panliang9 发表于 2024-5-31 12:09
黄工,下面这个删所有标主的程序能不能改成把所有标注移出块

http://bbs.mjtd.com/thread-188717-1-1.ht ...

删除容易,遍历块,再遍历块成员,发现是标注,删除就行了。
发表于 2024-5-31 13:49:58 | 显示全部楼层
我现在把所有标注移出块,都是先用下面这个程序把所有标注移到一个层上,然后锁死该层,再将所有块炸开,标注因为是在锁死层上,就移到外面了。


本帖子中包含更多资源

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

x
发表于 2024-6-1 17:18:19 | 显示全部楼层
找到一个工具只能一个一个的选,黄大师的能一次一道块外面,真的是非常厉害

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2024-11-25 05:33 , Processed in 0.167195 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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