edata
发表于 2025-7-25 15:23:05
给个简单的例子.
(defun GetA3Blocks (/ ss i ent blk_info minpt maxpt scale bbox_list)
;;; 搜索图中所有名为"A3图框"的图块并返回包围盒信息
(setq bbox_list '())
(if (setq ss (ssget "_X" '((0 . "INSERT") (2 . "A3图框"))))
(progn
(setq i 0)
(repeat (sslength ss)
(setq ent (ssname ss i)
blk_info (entget ent))
(setq scale (cdr (assoc 41 blk_info))); 获取X方向比例因子
(setq blk_obj (vlax-ename->vla-object ent))
(vla-getboundingbox blk_obj 'minpt 'maxpt)
(setq minpt (vlax-safearray->list minpt)
maxpt (vlax-safearray->list maxpt))
; 添加到返回列表: (比例 ((左下点) (右上点)))
(setq bbox_list (cons (list scale (list minpt maxpt)) bbox_list))
(setq i (1+ i))
)
)
)
(reverse bbox_list); 返回结果列表
)
(defun PointInBoundingBox (pt minpt maxpt)
;;; 判断点是否在包围盒内
(and
(>= (car pt) (car minpt))
(>= (cadr pt) (cadr minpt))
(<= (car pt) (car maxpt))
(<= (cadr pt) (cadr maxpt))
)
)
(defun c:Dli ( / pt block_list found scale dimstyle oldDimStyle currDimStyle)
;;; 主命令函数
(setq block_list (GetA3Blocks)); 获取所有A3图框信息
(if (null block_list)
(princ "\n未找到A3图框!")
(progn
(setq pt (getpoint "\n请拾取标注点: "))
(if pt
(progn
; 查找包含点的图框
(setq found nil)
(foreach block_info block_list
(setq minpt (caadr block_info)
maxpt (cadadr block_info))
(if (PointInBoundingBox pt minpt maxpt)
(setq found block_info)
)
)
(if found
(progn
(setq scale (car found)
dimstyle (strcat "dim-" (itoa (fix scale))))
; 检查标注样式是否存在
(if (tblsearch "DIMSTYLE" dimstyle)
(progn
(setq doc(vla-get-activedocument (vlax-get-acad-object)))
(setq oldDimStyle(vla-get-activeDimStyle doc))
(setq currDimStyle(vla-item (vla-get-dimstyles doc) dimstyle))
(vla-put-ActiveDimStyle doc currDimStyle)
(princ (strcat "\n切换到标注样式: " dimstyle))
; 绘制标注
(command "_.DIMLINEAR" pt pause pause)
(vla-put-ActiveDimStyle doc oldDimStyle)
)
(princ (strcat "\n标注样式" dimstyle "不存在!"))
)
)
(princ "\n拾取点不在任何A3图框范围内!")
)
)
(princ "\n未拾取点!")
)
)
)
(princ)
)
(princ "\nDli命令已加载,输入Dli启动")
(princ)
mokson
发表于 2025-7-25 17:47:16
edata 发表于 2025-7-25 15:23
给个简单的例子.
感谢你的实例,便好像不支持动态块的图框,获取不了动态块图框的名称
edata
发表于 2025-7-25 18:00:51
可以参考, (ssget '((2 . "`*U*,图框"))),
https://www.cnblogs.com/edata/p/6797362.html