明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
123
返回列表 发新帖
楼主: mokson

如何用反应器取得块对象的名称?

[复制链接]
发表于 昨天 15:23 | 显示全部楼层
给个简单的例子.
  1. (defun GetA3Blocks (/ ss i ent blk_info minpt maxpt scale bbox_list)
  2.   ;;; 搜索图中所有名为"A3图框"的图块并返回包围盒信息
  3.   (setq bbox_list '())
  4.   (if (setq ss (ssget "_X" '((0 . "INSERT") (2 . "A3图框"))))
  5.     (progn
  6.       (setq i 0)
  7.       (repeat (sslength ss)
  8.         (setq ent (ssname ss i)
  9.               blk_info (entget ent))
  10.         (setq scale (cdr (assoc 41 blk_info)))  ; 获取X方向比例因子
  11.         (setq blk_obj (vlax-ename->vla-object ent))
  12.         (vla-getboundingbox blk_obj 'minpt 'maxpt)
  13.         (setq minpt (vlax-safearray->list minpt)
  14.               maxpt (vlax-safearray->list maxpt))
  15.         ; 添加到返回列表: (比例 ((左下点) (右上点)))
  16.         (setq bbox_list (cons (list scale (list minpt maxpt)) bbox_list))
  17.         (setq i (1+ i))
  18.       )
  19.     )
  20.   )
  21.   (reverse bbox_list)  ; 返回结果列表
  22. )

  23. (defun PointInBoundingBox (pt minpt maxpt)
  24.   ;;; 判断点是否在包围盒内
  25.   (and
  26.     (>= (car pt) (car minpt))
  27.     (>= (cadr pt) (cadr minpt))
  28.     (<= (car pt) (car maxpt))
  29.     (<= (cadr pt) (cadr maxpt))
  30.   )
  31. )

  32. (defun c:Dli ( / pt block_list found scale dimstyle oldDimStyle currDimStyle)
  33.   ;;; 主命令函数
  34.   (setq block_list (GetA3Blocks))  ; 获取所有A3图框信息
  35.   
  36.   (if (null block_list)
  37.     (princ "\n未找到A3图框!")
  38.     (progn
  39.       (setq pt (getpoint "\n请拾取标注点: "))
  40.       (if pt
  41.         (progn
  42.           ; 查找包含点的图框
  43.           (setq found nil)
  44.           (foreach block_info block_list
  45.             (setq minpt (caadr block_info)
  46.                   maxpt (cadadr block_info))
  47.             (if (PointInBoundingBox pt minpt maxpt)
  48.               (setq found block_info)
  49.             )
  50.           )
  51.          
  52.           (if found
  53.             (progn
  54.               (setq scale (car found)
  55.                     dimstyle (strcat "dim-" (itoa (fix scale))))
  56.               
  57.               ; 检查标注样式是否存在
  58.               (if (tblsearch "DIMSTYLE" dimstyle)
  59.                 (progn
  60.                   (setq doc(vla-get-activedocument (vlax-get-acad-object)))
  61.                   (setq oldDimStyle(vla-get-activeDimStyle doc))
  62.                   (setq currDimStyle(vla-item (vla-get-dimstyles doc) dimstyle))
  63.                   
  64.                   (vla-put-ActiveDimStyle doc currDimStyle)
  65.                   (princ (strcat "\n切换到标注样式: " dimstyle))
  66.                   
  67.                   ; 绘制标注
  68.                   (command "_.DIMLINEAR" pt pause pause)
  69.                   (vla-put-ActiveDimStyle doc oldDimStyle)
  70.                 )
  71.                 (princ (strcat "\n标注样式" dimstyle "不存在!"))
  72.               )
  73.             )
  74.             (princ "\n拾取点不在任何A3图框范围内!")
  75.           )
  76.         )
  77.         (princ "\n未拾取点!")
  78.       )
  79.     )
  80.   )
  81.   (princ)
  82. )

  83. (princ "\nDli命令已加载,输入Dli启动")
  84. (princ)
回复 支持 反对

使用道具 举报

 楼主| 发表于 昨天 17:47 | 显示全部楼层
edata 发表于 2025-7-25 15:23
给个简单的例子.

感谢你的实例,便好像不支持动态块的图框,获取不了动态块图框的名称
回复 支持 反对

使用道具 举报

发表于 昨天 18:00 | 显示全部楼层
可以参考, (ssget '((2 . "`*U*,图框"))),
https://www.cnblogs.com/edata/p/6797362.html
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-26 21:51 , Processed in 0.155009 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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