[返回博客](/cn/blog) # .dwg 中 3D 模型如何存储 第三部分

Alexander Spivakov 八月 17, 2018 [\#b-rep](/cn/blog/tag/b-rep) [\#getting started](/cn/blog/tag/getting-started)

<a class="a2a_button_facebook"></a><a class="a2a_button_twitter"></a><a class="a2a_button_linkedin"></a>

#### 借助 ODA SDK 修改 3D 模型

在上一篇文章中，我解释了使用构造实体几何 (CSG) 描述 3D 实体在修改实体形状方面存在显著困难。然而，由于设计是一个迭代过程，修改的需求随之产生。模型修订的原因有很多：新的计算、原型测试结果、客户反馈、设计改进等等。事实上，即使是过渡到不同的制造方法也可能需要改变零件的形状。因此，建模器和 CAD 应用程序应该允许轻松地修改实体形状。

CSG 中结构化几何的弱点在于它需要考虑布尔运算所有原始操作数的所有属性之间的相互依赖性——或者至少是其中一些。这是一项特殊的任务，有商业产品可供使用。（它们被称为参数化内核，但通常用于解决不同的设计问题。）此外，您可能还需要考虑原始实体参数与集合本身之间的相互依赖性。

#### 圆角、倒角和薄壁实体

对平行六面体的角进行圆角操作是一个例子，其中许多实体的参数必须以一致的方式进行更改。

![figure8](/files/inline-images/Figure8_0.png)圆角可以被视为局部操作，因为实体的修改发生在选定边的附近。用于创建倒角和薄壁实体的操作也可以被视为局部操作。倒角操作类似于圆角操作，不同之处在于与边相邻的面之间的表面不是切向配合，而是以指定的角度配合。

![figure9](/files/inline-images/Figure9.png)创建薄壁体的操作不是基于边，而是基于面。一个面从壳体中移除，其余的面按指定的距离偏移。然后，偏移的面根据其偏移距离“粘合”到面上。

![figure10](/files/inline-images/Figure10.jpg)ODA SDK 提供了以下用于局部修改的方法：

```
OdResult filletEdges( const OdArray<OdDbSubentId>& edgeSubentIds,
                      const OdGeDoubleArray&         radius, 
                      const OdGeDoubleArray&         startSetback, 
                      const OdGeDoubleArray&         endSetback);
OdResult chamferEdges(const OdArray<OdDbSubentId>& edgeSubentIds,
                      const OdDbSubentId&            baseFaceSubentId, 
                      double                         baseDist, 
                      double                         otherDist);
OdResult shellBody(const OdArray<OdDbSubentId>& faceSubentIds, 
                   double                         offsetDistance);

```

请注意，这只是几何建模操作的不完整列表。

#### 在 ODA SDK 中实现几何建模操作

建模本身不是 ODA 平台的主要目的；它旨在处理 .dwg 文件。因此，ODA 平台仅包含用于创建基本体的功能。所有其他操作必须来自第三方，并通过称为“适配器”的模块附加到平台。

在3D实体建模中，适配器的作用是从文件中获取SAT流，创建源实体，执行带指定参数的操作，然后生成结果的SAT流。

直到最近，ODA SDK中的3D建模操作只能通过达索系统空间公司的ACIS几何内核来执行。开放设计联盟支持一个将ODA SDK与ACIS内核连接起来的模块，但ACIS建模器本身必须由每个ODA成员独立授权。

ACIS的替代方案是使用C3D Labs的建模模块，该模块可以直接从ODA获得许可，只需在成员门户中点击一下即可——您无需与C3D Labs签署协议，也没有版税——只需支付年费。C3D Modeler for ODA SDK的功能比原始的C3D Toolkit有所减少，但对于开发人员的大多数任务来说已经足够，我们随时准备根据客户需求增加其功能。

由于SAT格式并非C3D几何内核的原生格式（与ACIS不同），因此必须与建模器一起使用转换器。幸运的是，输入数据和建模结果的转换过程对ODA SDK用户是隐藏的，因此将C3D Modeler连接到ODA模块足以使非平凡的建模操作可用。此外，完整的C3D Toolkit库可以从开放设计联盟的服务器下载，您可以通过个人ODA账户一键请求许可证密钥。C3D Labs认为，这种通过ODASDK访问3D建模的集成程序优于单独授权ACIS内核。

#### 实际示例

选择几个实际示例的目的是重现任何CAD系统中模型构建的历史。然而，我遇到了两个困难。

首先，我需要找到一个足够老的模型，它是在没有使用ODA API中不存在的构建操作的情况下制作的。或者，至少，操作尽可能少。可以合理地预期，发布新版本产品的CAD开发人员将提供示例文件，包括展示新特性和功能的文件。在这方面，我遇到的最引人注目的例子与“到对象”的拉伸有关。

第二个困难纯粹是技术性的：如何在构建过程中清晰地说明每个操作的“之前”和“之后”状态？我必须克服的主要矛盾是模型的方向和比例不是标准的，但它们在每次操作前后必须保持一致。同时，为了选择布尔运算的操作数，或者例如边，我需要缩放或旋转模型。这可能会夸大复杂性，而这种复杂性仅仅是因为对ODA平台测试应用程序的功能理解不完整而产生的。

尽管如此，我还是为两个演示和示例实现了模型构建的历史记录。

![figure11](/files/inline-images/Figure11.png)除了建模操作本身，还实现了搜索拓扑对象并获取其几何体的功能，用于模型的构建。随着测试系统的发展和实际应用范围的扩大，该功能得到了进一步改进。

## 今天就开始行动

**免费试用 ODA 软件 60 天。  
无风险，无需信用卡。**

[免费试用](https://www.opendesign.com/cn/free-trial)
