sniper1111 发表于 4 天前

dbx填充求助

想写一个,不打开CAD文件就能填充的程序,东拼西凑但是没有成功,请各位老师帮忙指导一下。不胜感激

(defun c:tt ()
        (setq *DOC* (vlax-create-object (strcat "ObjectDBX.AxDbDocument." (substr (getvar "ACADVER") 1 2) )))
        (vla-open *DOC* "D:\\222.dwg")
        (setq gMspace (vla-get-modelSpace (vla-get-activeDocument *DOC*)))
        (setq HatchObj (vla-AddHatch gMspace acHatchPatternTypePredefined "SOLID" :vlax-true))
        (vlax-for dbx (vla-get-modelspace *DOC*)
                (if (= (vla-Get-ObjectName dbx) "AcDbPolyline")
                        (vlax-safearray-fill
                                (vlax-make-safearray
                                        vlax-vbobject
                                        (cons 0 (1- (length (list obj))))
                                )
                                (list obj)
                        )
                )
        )
        (vla-saveas *DOC* "D:\\222.dwg")
        (vlax-release-object *DOC*)
        (princ)
)

qifeifei 发表于 4 天前

本帖最后由 qifeifei 于 2025-12-8 21:13 编辑


推荐下载版本4进行研究
示意图是版本4的;只能达到演示效果
其他的自行修复把;https://i.imgs.ovh/2025/12/08/CQz7sH.gif

kozmosovia 发表于 4 天前

(defun c:tt ()
(setq        *DOC* (vlax-create-object
                (strcat        "ObjectDBX.AxDbDocument."
                        (substr (getvar "ACADVER") 1 2)
                )
              )
)
(vla-open *DOC* "D:\\222.dwg")
(setq gMspace (vla-get-modelSpace (vla-get-activeDocument *DOC*)))
(setq        HatchObj (vla-AddHatch
                   gMspace
                   acHatchPatternTypePredefined
                   "SOLID"
                   :vlax-true
               )
)
(vlax-for dbx        (vla-get-modelspace *DOC*)
    (if        (= (vla-Get-ObjectName dbx) "AcDbPolyline")
      (vla-AppendOuterLoop
        HatchObj
        (vlax-safearray-fill
          (vlax-make-safearray vlax-vbobject (cons 0 0))
          (list dbx)
        )
      )
    )
)
(vla-saveas *DOC* "D:\\222.dwg")
(vlax-release-object *DOC*)
(princ)
)

sniper1111 发表于 3 天前

qifeifei 发表于 2025-12-8 10:42
推荐下载版本4进行研究
示意图是版本4的;只能达到演示效果
其他的自行修复把;
大师通过您的代码,我对dbx有了深刻的认识,代码我也有了比以前更深刻的立即,只是还有一事不明,为什么我这边截图的位置(vla-AppendOuterLoop HatchObj (vlax-make-variant extLoop))无法运行。E:\Desktop\64f300bd-dca9-45f9-a7d6-81fa91661538.png

qifeifei 发表于 4 天前

可以搞个演示吗 看不懂呢

sniper1111 发表于 4 天前

qifeifei 发表于 2025-12-8 10:17
可以搞个演示吗 看不懂呢

在新建的cad中运行命令,222.dwg内的矩形就会填充上,初步想达到这个效果。

kozmosovia 发表于 4 天前

创建填充后,还需要给填充绑定边界
https://help.autodesk.com/view/O ... A-9E1D-A0E8220F69F4

更简单的方式是在当前doc创建(可以用command),Copyobjects进DBX,再删除

sniper1111 发表于 4 天前

qifeifei 发表于 2025-12-8 10:42
是这样的吗

不是 ,意思是不打开cad文件就能把dwg文件里面的图形填充上。

sniper1111 发表于 4 天前

kozmosovia 发表于 2025-12-8 11:08
创建填充后,还需要给填充绑定边界
https://help.autodesk.com/view/O ... A-9E1D-A0E8220F69F4



思路明白了,但是不会操作,也不是我想的效果,感谢大师。

sniper1111 发表于 4 天前

qifeifei 发表于 2025-12-8 10:42
是这样的吗

其实用来填充竖向构件参照文件用的,这样我就可以批量填充竖向构件文件了

liuhe 发表于 4 天前

modelSpace不对,应该是在dbx的模型空间,而不是激活文档的模型空间
页: [1] 2 3
查看完整版本: dbx填充求助