找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 126|回复: 0

将块内标注在块外重新生成

[复制链接]

主题

0

回帖

0

积分

管理员

积分
0
发表于 2024-5-30 16:41:29 | 显示全部楼层 |阅读模式
  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. )
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|膜结构网

GMT+8, 2024-12-28 02:14 , Processed in 0.145420 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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