我需要打开并读取 Autocad 文件的内容,其中包含建筑物墙壁、窗户等的信息,然后读取这些信息并对其进行分类。由于这些 Autocad 文件各不相同,我需要有经验的人来告诉我如何确定例如是否有窗口。此外,能够提取墙壁内部、外部等的信息将非常有用……
1 回答
首先,您需要从 Autodesk 下载 ObjectArx 包。安装它并创建一个新的 Autocad 插件。
我知道有两种工作方式:
使用 Arx 或互操作。我只对互操作有经验,但 Arx 的工作方式完全相同。(我选择了 Interop,因为它使用与 Autocad 的 VBA 相同的 ActiveX 库。因此,您可以使用 Interop 执行的任何操作都可以使用 VBA 执行)
找到一些向导来为 Autocad 插件创建项目模板。
然后参考Autodesk.Autocad.Interop
图书馆。
在插件中,您可以从Autodesk.AutoCAD.ApplicationServices.Application
.
要使用应用程序的互操作版本,请获取Autodesk.AutoCAD.ApplicationServices.Application.AcadApplication
asAcadApplication
类型。
从应用程序中,您可以获取Documents
集合以及ActiveDocument
.
从文档中,您可以获得ModelSpace
和PaperSpace
。
从那些你可以得到Item
s 的,它们是 s 类型的AcadEntity
。
AcadEntity 是图形中出现的所有 Autocad 对象的基本类型。所以所有的墙壁和窗户都是由一组AcadEntity
物体组成的。
但AcadEntity
可以有派生类型,例如AcadLine
(lines)、AcadLWPolyline
(polylines 2d with elevation)AcadCircle
等。
现在,您必须知道图纸中的窗户和墙壁是如何制作的才能找到它们。如果它们是块,那将非常容易。只需在模型空间或图纸空间(或任何 AutoCAD 块,因为图纸空间和模型空间被视为块)AcadEntity
中选择所有AcadBlockReference
.
每个AcadBlockReference
代表在图形中插入一个块并包含它的参数。
但是如果墙壁和窗户是用线条手工制作的,那么您将不得不稳定一些规则来搜索它们,例如将AcadLine
每个对象进行比较以测试它们是否平行并且距离小于墙壁可以具有的最大厚度.
这些规则将非常适合您的案例以及图纸的制作方式。