cghdy 发表于 2022-2-25 13:45:57

特殊图块vla-getboundingbox无法识别出其边框

软件生成的dxf,通过insert导入CAD,为一块图元,检查该图元参数正常。
尝试了很多包围盒、外边界的插件,都无效,发现用的都是vla-getboundingbox函数,
(vla-getboundingbox (vlax-ename->vla-object (car (entsel))) 'minpoint 'maxpoint)
该函数无法识别,会提示“Automation 错误。 范围无效”。
后来发现一个arx写的程序,可以识别,且速度极快,详附图。
如何通过lisp识别,请高手指点。

菜卷鱼 发表于 2022-2-28 09:28:13

本帖最后由 菜卷鱼 于 2022-2-28 09:29 编辑

我是先删掉那些取不到边界范围的图元
(defun vl-remove-if-Boundless (vobj / aobj ADOC BLKS BLKN)
(and
    (= (vla-get-ObjectName vobj) "AcDbBlockReference")
    (setq blkn (vla-get-Name vobj))
    (setq aobj (vlax-get-acad-object))
    (setq adoc (vla-get-ActiveDocument aobj))
    (setq blks (vla-get-blocks adoc))
    (vl-catch-all-apply
      '(lambda ()
         (vlax-for vbj (vla-item blks blkn)
          ; (wipe vbj)
         (and      (vl-catch-all-error-p
                  (vl-catch-all-apply
                  'vla-getboundingbox
                  (list vbj 'entpl 'entpr)
                  )
                )
                (if (= (vla-get-ObjectName vbj) "AcDbBlockReference")
                  (vl-remove-if-Boundless vbj)
                  (progn (vla-delete vbj) (mapcar 'princ (list"\n::remove[" vbj "]")))
                )
         )
         )
       )
    )
)
vobj
)

cghdy 发表于 2022-2-25 14:30:49

原因找到了,是这个块有未显示的标注。
进块再退出使标注显示,就可以用vla-getboundingbox函数了。
但是为什么这个标注无法直接显示还未弄明白,或许是从dxf格式参入的原因。

cghdy 发表于 2022-2-28 16:56:30

菜卷鱼 发表于 2022-2-28 09:28
我是先删掉那些取不到边界范围的图元

真的可以了,谢谢大佬的代码
页: [1]
查看完整版本: 特殊图块vla-getboundingbox无法识别出其边框