ibach 发表于 2022-7-6 07:05:07

如何使用blo缩放到块

需要以某种方式精确定位dwg模型空间中的块。
我需要找到的块在模型空间中是单独的,但一些也包含在其他块中。我需要遍历所有块及其嵌套项,以找到具有相同名称的块的所有实例。
 
把它们一个一个地放大就好了。

ibach 发表于 2022-7-6 07:30:03

我是个白痴。。。。
 
BEDIT,在问题块中画大标记保存编辑并查看绘图。。。
 
如果图形中没有块,请使用superpurge或其他方法将其删除。。。
 
补遗
添加标记时,请小心使用了可见性功能的动态块,使其在所有状态下都可见。

BIGAL 发表于 2022-7-6 07:36:28

您可以使用ssget一个唯一的块名,然后缩放到每个块。这是一个非常简单的代码,我会选择1个块来获得名称。如果您想再次发布示例代码。

ibach 发表于 2022-7-6 07:57:29

当然,我喜欢这个例子。
我不擅长编程。

Tharwat 发表于 2022-7-6 08:08:53

试试这个。。。
 

(defun c:Test (/ *error* name ss i obj lft rgt)
(vl-load-com)
;;; Tharwat 13. jan. 2013 ;;;
(defun *error* (x) (princ "\n *Cancel*"))
(if (and (/= (setq name (getstring t "\n Specify Block name :")) "")
          (/= name nil)
          (setq ss (ssget "_x" (list '(0 . "INSERT") (cons 410 (getvar 'ctab)) (cons 2 name))))
   )
   (progn (repeat (setq i (sslength ss))
            (setq obj (vlax-ename->vla-object (ssname ss (setq i (1- i)))))
            (vla-getboundingbox obj 'l 'r)
            (setq mid (mapcar (function (lambda (q p) (/ (+ q p) 2.)))
                              (setq lft (vlax-safearray->list l))
                              (setq rgt (vlax-safearray->list r))
                      )
            )
            (vla-ZoomCenter
            (vlax-get-acad-object)
            (vlax-3d-point mid)
            (distance lft (list (car rgt) (cadr lft)))
            )
            (if (eq "" (getstring "\n Press enter to continue or space bar:"))
            (princ)
            )
          )
          (alert "*** DONE ***")
   )
   (princ)
)
(princ)
)

页: [1]
查看完整版本: 如何使用blo缩放到块