OpenCasCade官方开发文档翻译(10)–STEP 转换器

介绍

STEP越来越广泛地用于各种软件之间的数据交换,涉及到CAD、PDM、Analysis等……STEP远不止是一个“交换标准”:它提供了一种技术和一套方法来描述数据以模块化和可升级的方式进行交换。关于 OCCT,这主要适用于 CAD 数据,但不限于此,也可以处理针对特定应用的其他类型的数据。

图片[1]-OpenCasCade官方开发文档翻译(10)–STEP 转换器-卡核

从 STEP 导入的图像

Open Cascade 允许其用户在以下领域使用 STEP:

  • 按照最先进的定义和规则交换技术应用的数据;
  • 根据特定需求或一般业务用途的演变扩展案例覆盖范围;
  • 应用程序数据架构方面的专业知识,从 STEP 定义中获取经验并简化映射到它们的过程,以实现与外部世界更好的互操作性。

本手册旨在提供有关 Open CASCADE Technology ( OCCT ) STEP 处理器的技术文档,并帮助 Open CASCADE Technology 用户使用 STEP 处理器(读取和写入 STEP 文件)。

只有几何的、拓扑的 STEP 实体(形状)和装配结构由第 2 节到第 6 节中描述的基本翻译器翻译。无法在此级别翻译的数据也从 STEP 文件加载,以后可以翻译。XDE STEP 转换器(参见第 7 节读取和写入 XDE)将名称、颜色、层、验证属性和其他与形状和组件相关的数据转换为 XDE 文档。

文件翻译是在编程模式下通过 C++ 调用执行的。

形状修复工具包提供工具来修复翻译形状中可能遇到的各种问题,并使它们在 Open CASCADE 中有效。Shape Healing 使用相同的 API 平滑地连接到 STEP 转换器,只是 API 包的名称发生了变化。

为了在 DRAW Test Harness 中测试 STEP 组件, TKXSDRAW插件提供了一组用于读写 STEP 文件和分析相关数据的命令。

开放级联技术中的 STEP 交换

除了易于最终使用的上层 API 之外,STEP 交换功能进入 Open Cascade 交换的通用框架,适用于 STEP:

  • 数据定义和检查的特定包;
  • 驱动程序支持的物理访问(嵌入第 21 部分文件访问);
  • 与驱动程序支持的 Open Cascade 或应用数据的转换(OCC-BREP 和 XDE ard 基本提供);
  • 用于分析、过滤等的工具……包括 DRAW 命令。

这些模块与 Open Cascade 的其他交换模块(如 Shape Healing)共享通用架构和功能。此外,内置的查看器和转换器(作为Netscape插件、Internet Explorer ..)基于相同的技术。

此外,Open Cascade 提供了处理使用 STEP 描述的模型的工具:反映 EXPRESS 描述,读取、写入和检查数据,分析整个模型……它们的主要特点是:

  • 通过数据类型集的模块化,可以将其分层以反映描述资源和应用程序协议的原始模块化;
  • 作为 C++ 类实现,提供对其成员的全面访问;
  • 基本采用早期绑定,性能好,安装使用方便,支持非编译描述。

当它们共享通用定义时,这提供了一种自然的方式来处理不受支持的协议,例如几何,然后可以利用这些定义。作为已经支持的数据类型,通用框架为 STEP 的新用途提供了良好的基础,无论是在数据定义(来自 ISO 或来自工业联盟的协议)还是在与应用数据的映射方面。

步骤接口

STEP 接口读取根据 STEP 应用程序协议 214(一致性等级 2,CD 和 DIS 版本的模式)生成的 STEP 文件,并将它们转换为 Open CASCADE Technology 模型。还支持 STEP 应用程序协议 203 和 AP242 的某些部分。

STEP 接口还将 OCCT 模型转换为 STEP 文件。此接口生成的 STEP 文件符合 STEP AP 203 或 AP 214(一致性等级 2,模式的 CD 或 DIS 版本),具体取决于用户的选项。

基本接口读取和写入几何、拓扑 STEP 数据和装配结构。

该接口能够翻译一个实体、一组实体或整个文件。

其他类型的数据,例如颜色、验证属性、层、GD&T、名称和程序集结构,可以在 XDE 工具的帮助下读取或写入:STEPCAFControl_ReaderSTEPCAFControl_Writer

要在导出为 STEP 格式时选择翻译模式,请使用STEPControl_STEPModelType

有一组与翻译有关的参数,可以在翻译开始之前设置。

注意

  • STEP 模型是已加载到内存中的 STEP 文件;
  • 除非另有明确说明,否则所有对形状的引用均表示 OCCT 形状;
  • 根实体是任何给定类型的最高级别实体,即不被任何其他实体引用的实体。

阅读步骤

程序

您可以通过以下步骤将 STEP 文件转换为 OCCT 形状:

  1. 加载文件,
  2. 检查文件一致性,
  3. 设置翻译参数,
  4. 执行翻译,
  5. 获取结果。

涵盖的领域

组件

ProSTEP圆桌会议协议日志(1998 年 7 月版)第 21 项定义了实现装配结构表示的两种替代方案:使用mapped_item 实体和使用representation_relationship_with_transformation实体。这两种替代表示在阅读时都会被识别和处理。在写作时,总是采用第二种选择。

组件的处理在两个单独的级别中实现:首先,STEP 组件结构被转换为 OCCT 形状,其次,表示组件的 OCCT 形状被转换为用于表示组件的任何数据结构(例如,OCAF)。

本文档的第一部分描述了实现第一级翻译的基本 STEP 翻译器,即翻译到 OCCT Shapes。在这个层面上,代表 STEP 文件中装配结构的无环图映射到Open CASCADE 技术中嵌套的TopoDS_Compounds结构。(子)装配体成为包含形状的(子)复合体,这些形状是平移该(子)装配体的组件的结果。组件组件的共享保留为复合中子形状的开放 CASCADE 技术共享。

在 STEP 文件中附加到装配组件的属性信息(例如产品的名称和描述、颜色、层等)可以在形状本身的转换后通过解析 STEP 模型(加载到内存中)进行转换。STEPConstruct包中的几个工具提供了读取样式(颜色)、验证属性、产品信息等的功能。XDE STEP 翻译器提供了第二级翻译(转换为 XDE 数据结构)的实现。

形状表示

长度单位、平面角度单位和不确定性值取自shape_representation实体。此数据用于翻译过程。

可识别的 STEP 表示实体的类型有:

  • advanced_brep_shape_representation
  • faceted_brep_shape_representation
  • 歧管表面形状表示
  • 几何有界线框形状表示
  • 几何有界表面形状表示
  • 混合表示(shape_representation 包含不同类型的模型)
  • tessellated_shape_representation

拓扑实体

可以翻译的STEP拓扑实体类型有:

几何实体

可转换的 STEP 几何实体类型有:

  • 积分
  • 矢量图
  • 方向
  • 曲线
  • 表面
  • 三角测量

有关详细信息,请参阅 2.4 将 STEP 实体映射到 Open CASCADE Technology 形状。

过程描述

加载 STEP 文件

在执行任何其他操作之前,您必须使用以下命令加载文件:

STEPControl_Reader阅读器;
IFSelect_ReturnStatus stat = 读者。读取文件(“文件名.stp ” );

加载文件只会记住数据,不会翻译它。

检查 STEP 文件

此步骤不是强制性的。检查加载的文件:

读者。PrintCheckLoad(仅失败,模式);

如果存在无效或不完整的 STEP 实体,则会显示错误消息,为您提供有关错误原因的信息。

如果failedonly为真,则仅显示失败消息。如果failedonly为 false,则显示所有消息。您对文件的分析可以是面向消息的,也可以是面向实体的。选择您的偏好:

其中 xxx 可以是以下之一:

  • ItemsByEntity – 给出每个 STEP 实体的所有消息的顺序列表,
  • CountByItem – 给出每条消息的 STEP 实体数量及其类型
  • ListByItem – 给出 STEP 实体的数量及其类型和每条消息的排名号

设置翻译参数

以下参数可用于将 STEP 文件转换为 OCCT 形状。

如果您给出的值不在可能值的范围内,它将被简单地忽略。

读取精度模式

定义在转换过程中将使用哪个精度值(有关精度和公差的详细信息,请参见下面的第 2.5 节)。

  • 文件 (0) – 精度值设置为 STEP 文件中的不确定性测量和单位中的长度测量。
  • User (1) – 精度值是read.precision.val参数的值。

使用以下命令读取此参数:

Standard_Integer ic = Interface_Static::IVal ( “read.precision.mode” );

修改此参数:

if (! Interface_Static::SetIVal ( “read.precision.mode” ,1))
.. 错误 ..

默认值为文件 (0)。

read.precision.val:

用户定义的精度值。当 read.precision.mode 参数值为 1 时,此参数给出形状构造的精度。默认为 0.0001,但可以是任何正数(非空)值。

该值是处理器中容差的基本值。该值以毫米为单位,与 STEP 文件中定义的长度单位无关。

使用以下命令读取此参数:

Standard_Real rp = Interface_Static::RVal ( “read.precision.val” );

修改此参数:

if (! Interface_Static::SetRVal ( “read.precision.val” ,0.01))
.. 错误 ..

默认情况下,此值为 0.0001。

赋予此参数的值是 ShapeHealing 算法和处理器的基本值。它尽最大努力达到它。在某些情况下,您提供的价值可能不会在处理结束时附加到所有相关实体。STEP 到 OpenCASCADE 的转换不会提高原始 STEP 文件中几何图形的质量。这意味着您输入的值可能无法附加到 STEP 文件中具有给定几何质量的所有形状。

读取.maxprecision.val

定义形状的最大允许公差(以内部单位,在 xstep.cascade.unit 中指定)。它应该不小于处理器中设置的公差的基本值(来自文件的不确定性或read.precision.val)。实际上,read.maxprecision.val和基本容差之间的最大值用于定义最大允许容差。

使用以下命令读取此参数:

Standard_Real rp = Interface_Static::RVal ( “read.maxprecision.val” );

修改此参数:

if (! Interface_Static::SetRVal ( “read.maxprecision.val” ,0.1))
.. 错误 ..

默认值为 1。请注意,即使用户明确定义的最大容差也可能不足以确保形状的有效性(如果实际几何图形质量较差)。因此,为用户提供了一个附加参数,允许他选择:要么他更喜欢确保形状有效性,要么他严格设置最大公差的值。在第一种情况下,公差可能没有上限,在第二种情况下,形状可能无效。

读取.maxprecision.mode:

定义应用最大允许容差的模式。它的可能值是:

  • 0(首选)- 使用最大公差作为限制,但有时可以超过(目前,仅用于 3D 曲线和边的 pcurves 以及此类边的顶点的偏差)以确保形状有效性,
  • 1(强制)– 最大公差用作刚性限制,即任何公差都不能超过它,如果是这种情况,公差会被最大公差修整。

使用以下命令读取此参数:

Standard_Integer ic = Interface_Static::IVal ( “read.maxprecision.mode” );

修改此参数:

if (! Interface_Static::SetIVal ( “read.maxprecision.mode” ,1))
.. 错误 ..

默认值为 0(“首选”)。

读取.stdsameparameter.mode

定义BRepLib::SameParameter的使用。它的可能值是:

使用以下命令读取此参数:

Standard_Integer mv = Interface_Static::IVal ( “read.stdsameparameter.mode” );

修改此参数:

if (! Interface_Static::SetIVal ( “read.stdsameparameter.mode” ,1))
.. 错误 ..;

默认值为 0 (;Off;)。

读取.surfacecurve.mode:

在具有 2D 和 3D 表示的实体中计算曲线的偏好。TopoDS_Face中的每个TopoDS_Edge必须具有参考曲面的 3D 和 2D 曲线。

如果实体的 2D 和 3D 表示都存在,则这些曲线的计算取决于以下参数值:

  • Default (0):无偏好,两条曲线均采用(默认值),
  • 3DUse_Preferred (3) : 3D 曲线用于重建 2D 曲线。

使用以下命令读取此参数:

Standard_Integer rp = Interface_Static::IVal ( “read.surfacecurve.mode” );

修改此参数:

if (! Interface_Static::SetIVal ( “read.surfacecurve.mode” ,3))
.. 错误 ..

默认值为 (0)。

读取.encoderegularity.angle

此参数用于调用BRepLib::EncodeRegularity()函数,该函数在翻译过程结束时为从 IGES 或 STEP 文件中读取的形状调用。当该边被两个面共享时,此函数设置外壳中边的规则标志。该标志显示了这两个面在该边缘处连接的连续性。
使用以下命令读取此参数:

Standard_Real era = Interface_Static::RVal ( “read.encoderegularity.angle” );

修改此参数:

if (! Interface_Static::SetRVal ( “read.encoderegularity.angle” ,0.1))
.. 错误 ..;

默认值为 0.01。

step.angleunit.mode

此参数已过时(过去,对于角度单位编码错误的 STEP 文件需要此参数)。它指示在读取 STEP 文件时应使用的角度单位:文件中的单位(默认),或强制弧度或度数。

默认值为文件

read.step.resource.name 和 read.step.sequence

这两个参数为形状处理定义资源文件的名称和操作符序列的名称(在该文件中定义),由 STEP 转换器自动执行。形状处理是一个用户可配置的步骤,它在翻译后执行,包括将一组运算符应用于生成的形状。这是一个非常强大的工具,允许自定义形状并使其适应接收应用程序的需求。默认情况下,该序列由单个运算符ShapeFix 组成——这就是从 STEP 转换器调用 Shape Healing 的方式。

通过路径CASROOT%/src/XSTEPResource/STEP在 Open CASCADE Technology 源中找到 STEP 资源文件的示例(定义与默认应用的序列相对应的参数,即如果找不到资源文件)。

为了让 STEP 翻译器使用该文件,您必须定义CSF_STEPDefaults环境变量,它应该指向资源文件所在的目录。请注意,如果您更改参数read.step.resource.name,您将相应更改资源文件的名称和环境变量。

默认值:

  • read.step.resource.name – 步骤,
  • read.step.sequence – FromSTEP。

xstep.cascade.unit

此参数定义从 IGES 或 STEP 转换为 CASCADE 时应将形状转换为的单位。通常是MM;只有那些以 MM 以外的单位在内部工作的应用程序才应使用此参数。

默认值为 MM。

read.step.product.mode:

定义用于选择顶级 STEP 实体进行翻译和识别装配结构的方法

  • 1 (ON) – PRODUCT_DEFINITION实体被视为顶级实体;装配结构由NEXT_ASSEMBLY_USAGE_OCCURRENCE实体识别。这是读取符合 AP 214、AP203 或 AP 209 的有效 STEP 文件的常规模式。
  • 0 (OFF) – SHAPE_DEFINITION_REPRESENTATION实体被视为顶级实体;程序集被CONTEXT_DEPENDENT_SHAPE_REPRESENTATION实体识别。这是兼容模式,可用于读取旧版 STEP 转换器生成的遗留 STEP 文件,并且产品信息不正确或不完整。

使用以下命令读取此参数:

Standard_Integer ic = Interface_Static::IVal ( “read.step.product.mode” );

修改此参数:

if (! Interface_Static::SetIVal ( “read.step.product.mode” ,1))
.. 错误 ..

默认值为 1(开)。

请注意,仅当read.step.product.mode为 ON 时,以下参数才有效。

read.step.product.context:

读取 AP 209 STEP 文件时,允许仅选择“设计”或“分析”或两种类型的产品进行翻译

  • 1 (all) – 翻译所有产品;
  • 2(设计)- 仅翻译PRODUCT_DEFINITION_CONTEXT字段life_cycle_stage设置为“设计”的产品;
  • 3(分析)- 仅翻译与字段life_cycle_stage设置为“分析”的PRODUCT_DEFINITION_CONTEXT实体关联的产品。

请注意,在 AP 203 和 AP214 文件中,所有产品都应标记为“设计”,因此如果将此模式设置为“分析”,则不会读取任何内容。

使用以下命令读取此参数:

Standard_Integer ic = Interface_Static::IVal ( “read.step.product.context” );

修改此参数:

if (! Interface_Static::SetIVal (;read.step.product.context;,1))
.. 错误 ..

默认值为 1(全部)。

读.step.shape.repr:

指定产品形状的首选表示类型,以防 STEP 文件包含单个产品的多个表示(即多个 PRODUCT_DEFINITION_SHAPE 实体)

  • 1 (All) – 翻译所有表示(如果多于一个,放入复合词)。
  • 2 (ABSR) – 首选 ADVANCED_BREP_SHAPE_REPRESENTATION
  • 3 (MSSR) – 首选 MANIFOLD_SURFACE_SHAPE_REPRESENTATION
  • 4 (GBSSR) – 首选 GEOMETRICLY_BOUNDED_SURFACE_SHAPE_REPRESENTATION
  • 5 (FBSR) – 首选 FACETTED_BREP_SHAPE_REPRESENTATION
  • 6 (EBWSR) – 首选 EDGE_BASED_WIREFRAME_SHAPE_REPRESENTATION
  • 7 (GBWSR) – 首选 GEOMETRICLY_BOUNDED_WREFRAME_SHAPE_REPRESENTATION

当此选项不等于 1 时,对于具有多个表现形式的产品,将翻译具有最接近此列表中选定的表现形式的表现形式。

使用以下命令读取此参数:

Standard_Integer ic = Interface_Static::IVal ( “read.step.shape.repr” );

修改此参数:

if (! Interface_Static::SetIVal ( “read.step.shape.repr” ,1))
.. 错误 ..

默认值为 1(全部)。

read.step.assembly.level:

指定应为在 STEP 文件中找到的产品读取哪些数据:

  • 1(全部)- 翻译装配结构和所有相关形状。如果形状和子组件都与同一产品相关联,则所有这些都将被读取并放入单个复合物中。请注意,这种情况令人困惑,因为 STEP 标准没有明确定义此类配置的语义(无论此形状是组件的替代表示还是对其的补充),因此在这种情况下会发出警告。
  • 2(装配)- 仅翻译与零件相关的装配结构和形状(不与子装配相关)。
  • 3(结构)——只翻译没有形状的装配结构(空化合物的结构)。在需要对装配零件进行专门处理的应用中,此模式可用作中间步骤。
  • 4(形状)- 仅翻译与产品相关的形状,忽略装配结构(如果有)。这对于仅翻译与特定产品关联的形状很有用,作为装配模式的补充。

使用以下命令读取此参数:

Standard_Integer ic = Interface_Static::IVal ( “read.step.assembly.level” );

修改此参数:

if (! Interface_Static::SetIVal ( “read.step.assembly.level” ,1))
.. 错误 ..

默认值为 1(全部)。

read.step.shape.relationship:

定义是否应翻译通过SHAPE_REPRESENTATIONSHIP_RELATION与产品的主要SHAPE_DEFINITION_REPRESENTATION实体关联的形状。这种关联从 1998 年开始用于 AP 203 文件中的混合模型(即形状由不同类型的表示组成的模型)的表示,但也可以用于将辅助数据与产品关联。该参数允许避免此类辅助数据的转换。

  • 1 (ON) – 翻译
  • 0 (OFF) – 不翻译

使用以下命令读取此参数:

Standard_Integer ic = Interface_Static::IVal ( “read.step.shape.relationship” );

修改此参数:

if (! Interface_Static::SetIVal (;read.step.shape.relationship;,1))
.. 错误 ..

默认值为 1(开)。

read.step.shape.aspect:

定义是否应翻译通过SHAPE_ASPECT与产品的PRODUCT_DEFINITION_SHAPE实体关联的形状。这种关联在 1998 年以前的 AP 203 文件中用于混合模型(即形状由不同类型的表示组成的模型)的表示,但也用于将辅助信息与零件的子形状关联起来。尽管 STEP 转换器尝试正确识别此类情况,但此参数可能有助于避免无条件地转换通过SHAPE_ASPECT实体关联的形状。

  • 1 (ON) – 翻译
  • 0 (OFF) – 不翻译

使用以下命令读取此参数:

Standard_Integer ic = Interface_Static::IVal ( “read.step.shape.aspect” );

修改此参数:

if (! Interface_Static::SetIVal (;read.step.shape.aspect;,1))
.. 错误 ..

默认值为 1(开)。

read.step.constructivegeom.relationship:

布尔标志调节“CONSTRUCTIVE_GEOMETRY_REPRESENTATION_RELATIONSHIP”实体的翻译,该实体定义“CONSTRUCTIVE_GEOMETRY_REPRESENTATION”中包含的构造几何实体相对于形状(产品)的主要表示的位置。

默认情况下,该标志设置为 0 (OFF),因此不会翻译这些实体。如果您需要转换与零件关联的构造几何实体,请将此标志设置为 1 (ON):

if (! Interface_Static::SetIVal ( “read.step.constructivegeom.relationship” , 1)) { .. error .. }

“CONSTRUCTIVE_GEOMETRY_REPRESENTATION”实体被翻译成两个无限平面的复合体,其位置是相应“AXIS_PLACEMENT”实体翻译的结果。请注意,翻译后的数据应进行适当的解释。

对于“CONSTRUCTIVE_GEOMETRY_REPRESENTATION_RELATIONSHIP”实体或它所引用的两个“AXIS2_PLACEMENT_3D”实体中的每一个,都可以获得翻译结果。如下:

// 翻译文件并解析 STEP 模型以找到相关的轴实体
Handle( StepGeom_Axis2Placement3d ) aSTEPAxis = …;
Handle( Transfer_Binder ) aBinder = aReader-> WS ()->TransferReader()->TransientProcess()->Find(aSTEPAxis);
Handle( TransferBRep_ShapeBinder ) aShBinder =Handle( TransferBRep_ShapeBinder )::DownCast(aBinder);
if (!aShBinder.IsNull())
{
TopoDS_Face aFace = TopoDS::Face (aShBinder->Result());
if (!aFace . IsNull ())
{
Handle( Geom_Plane ) aSurf =Handle( Geom_Plane )::DownCast ( BRep_Tool ::Surface (aFace));
if (!aSurf.IsNull())
{
gp_Ax3 anAxis = aSurf->Placement();
// 使用轴放置数据
}
}
}

read.step.tessellated:

调节定义镶嵌几何的实体的翻译的布尔标志:

  • TESSELLATED_SHAPE_REPRESENTATION
  • TESSELLATED_SHELL
  • TESSELLATED_SOLID
  • TRIANGULATED_FACE
  • COMPLEX_TRIANGULATED_FACE

使用 STEP 链接将镶嵌几何图形作为Poly_Triangulation类型的对象附加到形状。

  • 0(关)——不翻译
  • 1(开)——翻译
  • 2 (OnNoBRep) – 镶嵌对于没有 BRep 表示的实体只读

使用以下命令读取此参数:

Standard_Integer ic = Interface_Static::IVal ( “read.step.tessellated” );

修改此参数:

if (! Interface_Static::SetIVal ( “read.step.tessellated” ,1))
.. 错误 ..

默认值为 0(开)。

执行 STEP 文件翻译

根据您要翻译的内容进行翻译。您可以选择根实体(全部或按根数选择),或在 STEP 文件中按其编号选择任何实体。有一组有限的实体类型可用作翻译的起始实体。只有以下实体被确认为可转让:

  • 产品定义
  • next_assembly_usage_occurrence
  • shape_definition_representation
  • shape_representation 的子类型(仅当引用的表示是可转移的)
  • 歧管固体brep
  • brep_with_voids
  • faceted_brep
  • faceted_brep_and_brep_with_voids
  • shell_based_surface_model
  • 几何集和几何曲线集
  • 映射项
  • face_surface 的子类型(包括 advanced_face)
  • shape_representation_relationship 的子类型
  • context_dependent_shape_representation
  • tessellated_shape_representation
  • tessellated_shell
  • tessellated_solid
  • 三角面
  • complex_triangulated_face

以下方法用于翻译:

  • Standard_Boolean ok = reader.TransferRoot(rank) – 翻译由其等级标识的根实体;
  • Standard_Boolean ok = reader.TransferOne(rank) – 翻译由其等级标识的实体;
  • Standard_Integer num = reader.TransferList(list) – 在一次操作中翻译实体列表(此方法返回成功翻译的数量);
  • Standard_Integer NbRoots = reader.NbRootsForTransfer()Standard_Integer num = reader.TransferRoots() – 翻译所有可转移的根。

获取翻译结果

每个成功的平移操作都会输出一个形状。一系列的翻译给出了一组形状。

每次调用TransferOne()、TransferRoot()TransferList()时,它们的结果都会累加,结果计数器也会增加。您可以使用以下命令清除结果:

读者。清除形状();

在两次翻译操作之间,如果不这样做,下一次翻译的结果将被添加到累积中。

TransferRoots()操作在开始之前会自动清除所有现有结果。

  • Standard_Integer num = reader.NbShapes() – 获取结果中记录的形状数量;
  • TopoDS_Shape shape = reader.Shape(rank) – 获取由其排名标识的结果,其中 rank 是 1 到 NbShapes 之间的整数;
  • TopoDS_Shape shape = reader.Shape() – 获取第一个平移结果;
  • TopoDS_Shape shape = reader.OneShape() – 以单一形状获取所有结果,即:
    • 如果没有结果,则为空形状,
    • 在单个结果的情况下,特定于该结果的形状,
    • 如果有多个结果,则列出结果的化合物。
清除结果的累积

如果多个单独的翻译相互跟随,则结果会给出一个可以使用reader.ClearShapes()清除的列表,这会擦除现有结果。

检查翻译是否正确执行

每次调用TransferTransferRoots()时,都可以借助以下工具显示相关消息:

读者。PrintCheckTransfer(仅失败,模式);

此检查仅涉及TransferTransferRoots()的最后一次调用。

选择 STEP 实体进行翻译

选择可能性

有三种选择的可能性。您可以选择:

  • 整个文件,
  • 实体列表,
  • 一个实体。
整个文件

传输整个文件意味着传输所有根实体。加载文件时可以评估根数:

Standard_Integer NbRoots = 阅读器。NbRootsForTransfer ();
Standard_Integer num = 读者。传输根();
实体清单

可以通过调用STEP214Control_Reader::GiveList来形成实体列表(这是父类的方法)。

这是一个如何翻译列表的简单示例:

句柄(TColStd_HSequenceOfTransient) 列表 = 阅读器。给列表();

结果是TColStd_HSequenceOfTransient。您可以逐个实体或一次全部翻译列表实体。逐个实体操作可让您检查每个已翻译的单个实体。

在一次操作中翻译整个列表
Standard_Integer nbtrans = 阅读器。TransferList(列表);

nbtrans给出列表中产生形状的项目数。

按实体翻译列表实体:
Standard_Integer i,nb = list->Length();
对于(i = 1; i <= nb; i ++) {
句柄( Standard_Transient ) ent = list->Value(i);
Standard_Boolean OK = 阅读器。转移实体(ent);
}

选择

有许多可以使用的预定义运算符。他们是:

  • step214-placed-items – 选择所有 mapped_items 或 context_depended_shape_representations。
  • step214-shape-def-repr – 选择所有 shape_definition_representations。
  • step214-shape-repr – 选择所有 shape_representations。
  • step214-type(<entity_type>) – 选择给定类型的所有实体
  • step214-faces – 选择所有 faces_surface、advanced_face 实体和表面实体或任何子类型,如果这些实体不被任何面实体共享或由 geometry_set 实体共享。
  • step214-derived(<entity_type>) – 选择给定类型或任何子类型的实体。
  • step214-GS-curves – 如果这些实体由 geometry_set 实体共享,则选择除composite_curve 之外的所有曲线实体或任何子类型。
  • step214-assembly – 选择装配结构中涉及的所有 mapped_items 或 context_depended_shape_representations。
  • xst-model-all – 选择所有实体。
  • xst-model-roots – 选择所有根。
  • xst-shared + <selection> – 选择至少一个通过选择选择的实体共享的所有实体。
  • xst-sharing + <selection> – 选择共享至少一个通过选择选择的实体的所有实体。
  • xst-transferrable-all – 选择所有可转让实体。
  • xst-transferrable-roots – 选择所有可翻译的根。也可以使用累积列表。
单个实体

您可以通过其等级或句柄来选择一个实体(一个实体的句柄可以通过调用StepData_StepModel::Entity函数获得)。

按等级选择

使用StepData_StepModel::NextNumberForLabel方法通过以下方法查找其排名:

StepData_StepModel 模型 = reader.StepModel();
rank = model->NextNumberForLabe(label, 0, Standard_False);

翻译由其等级指定的实体:

Standard_Boolean ok = reader.Transfer (rank);
直接选择实体

ent是实体。参数是Handle(Standard_Transient)

Standard_Boolean ok = 阅读器。转移实体(ent);

将 STEP 实体映射到 Open CASCADE Technology 形状

本段中给出的表格显示了 STEP 实体到 OCCT 对象的映射。本段仅描述拓扑和几何 STEP 实体和定义装配结构的实体。有关 STEP 实体的完整列表,请参阅附录 A。

装配结构表示实体

并非所有在 STEP 文件中定义装配结构的实体都被转换为 OCCT 形状,但它们用于识别装配及其组件之间的关系。由于基于实体之间直接引用的实体的“自然”依赖关系图不包括从程序集到其组件的引用,因此除了前者之外还引入了这些依赖关系。这是基于对描述组件结构的以下实体的分析而做出的。

STEP实体类型 级联形状 注释
产品定义 装配体的TopoDS_Compound,对应于组件的组件类型的 CASCADE 形状, 每个组件或组件都有自己的product_definition当read.step.product.mode为 ON 时,它用作翻译的起点。
产品定义形状   该实体提供product_definition和相应shape_definition_representation之间的链接,或next_assembly_usage_occurence和相应context_dependent_shape_representation之间的链接。
shape_definition_representation 装配体的TopoDS_Compound,对应于组件的组件类型的 CASCADE 形状。 每个组件或组件都有自己的shape_definition_representation。依赖关系图以这样一种方式进行修改,即组件的所有组件的 shape_definition_representations 都由组件的shape_definition_representation引用
next_assembly_usage_occurence   该实体定义了组件与其组件之间的关系。它用于引入(在依赖关系图中)组件的shape_definition_representation 与其所有组件的 shape_definition_representationscontext_dependent_shape_representations之间的链接。
映射项 TopoDS_Shape 该实体定义了装配组件到装配的shape_representation的映射。转换的结果是从组件转换的 CASCADE 形状,由mapped_item定义的转换应用到该形状。
context_dependent_shape_representation TopoDS_Shape 此实体与next_assembly_usage_occurence实体相关联,并定义组件在装配中的位置。修改依赖关系图,以便每个context_dependent_shape_representation由相应程序集的 shape_definition_representation 引用。
shape_representation_relationship_with_transformation   该实体与context_dependent_shape_representation相关联,并定义了应用到组件所需的转换,以便将其定位在组件中的位置。
item_defined_transformation   此实体定义shape_representation_relationship_with_transformationmapped_item实体 使用的转换运算符
cartesian_transformation_operator   此实体定义shape_representation_relationship_with_transformationmapped_item实体 使用的转换运算符

楷模

STEP实体类型 级联形状 注释
实体模型    
brep_with_voids TopoDS_Solid  
faceted_brep TopoDS_Solid  
歧管固体brep TopoDS_Solid  
表面模型    
shell_based_surface_model TopoDS_Compound shell_based_surface_model被翻译成一个或多个TopoDS_Shell分组在一个TopoDS_Compound
几何集 TopoDS_Compound TopoDS_Compound仅包含TopoDS_Faces TopoDS_Wires TopoDS_Edges和/或TopoDS_Vertices
线框模型    
几何曲线集 TopoDS_Compound TopoDS_Compound仅包含TopoDS_Wires TopoDS_Edges和/或TopoDS_Vertices

拓扑实体

拓扑 STEP实体类型 级联形状 注释
顶点 顶点点 TopoDS_Vertex  
边缘 导向边 TopoDS_Edge  
  edge_curve TopoDS_Edge  
循环 face_bound 拓扑DS_Wire  
  face_outer_bound 拓扑DS_Wire  
  edge_loop 拓扑DS_Wire  
  多环 拓扑DS_Wire 在Geom_Line的支持下,poly_loop的每一段都被翻译成TopoDS_Edge
  顶点循环 拓扑DS_Wire 生成的 TopoDS_Wire仅包含一个退化的 TopoDS_Edge
面孔 face_surface TopoDS_Face  
  高级面 TopoDS_Face  
贝壳 connected_face_set TopoDS_Shell  
  oriented_closed_shell TopoDS_Shell  
  闭壳 TopoDS_Shell  
  open_shell TopoDS_Shell  

几何实体

3D STEP 实体从Geom包转换为几何对象,而 2D 实体从Geom2d包转换为对象。

几何学 STEP实体类型 级联对象 注释
积分 笛卡尔点 Geom_CartesianPoint , Geom2d_CartesianPoint  
方向 方向 Geom_Direction , Geom2d_Direction  
矢量图 向量 Geom_VectorWithMagnitude , Geom2d_VectorWithMagnitude  
展示位置 axis1_placement Geom_Axis1Placement  
  axis2_placement_2d Geom2d_AxisPlacement  
  axis2_placement_3d Geom_Axis2Placement  
曲线 圆圈 Geom_Circle , Geom2d_Circle , Geom2d_BSplineCurve 圆在参考旋转曲面(球面、圆锥面等)时 被翻译成Geom2d_BSplineCurve
  椭圆 Geom_Ellipse , Geom2d_Ellipse , Geom2d_BSplineCurve Ellipse在参考旋转曲面(球面、圆锥面等)时 被转换为Geom2d_BSplineCurve
  双曲线 Geom_Hyperbola , Geom2d_Hyperbola  
  线 Geom_Line , Geom2d_Line  
  抛物线 Geom_Parabola , Geom2d_Parabola  
  曲线 Geom2d_Curve 边缘曲线
  曲线副本 Geom_CurveGeom2d_Curve 取决于基曲线的类型
  offset_curve_3d Geom_OffsetCurve  
  修剪曲线 Geom_TrimmedCurveGeom2d_BSplineCurve 只有通过参数修剪的 trimmed_curves 被翻译。所有trimmed_curves都转换为Geom2d_BSplineCurve
  b_spline_curve Geom_BSplineCurveGeom2d_BSplineCurve  
  b_spline_curve_with_knots Geom_BSplineCurveGeom2d_BSplineCurve  
  贝塞尔曲线 Geom_BSplineCurveGeom2d_BSplineCurve  
  理性b样条曲线 Geom_BSplineCurveGeom2d_BSplineCurve  
  统一曲线 Geom_BSplineCurveGeom2d_BSplineCurve  
  准统一曲线 Geom_BSplineCurveGeom2d_BSplineCurve  
  曲面曲线 TopoDS_Edge surface_curve定义边缘及其 pcurve 的几何支持。
  接缝曲线 TopoDS_Edge 与surface_curve相同
  复合曲线段 TopoDS_Edge 作为复合曲线的一部分
  复合曲线 拓扑DS_Wire  
  复合曲线上表面 拓扑DS_Wire  
  边界曲线 拓扑DS_Wire  
表面 b_spline_surface Geom_BsplineSurface  
  b_spline_surface_with_knots Geom_BsplineSurface  
  bezier_surface Geom_BSplineSurface  
  圆锥面 Geom_ConicalSurface  
  圆柱面 Geom_CylindricalSurface  
  offset_surface Geom_OffsetSurface  
  表面副本 Geom_Surface 取决于基面的类型
  飞机 Geom_Plane  
  rational_b_spline_surface Geom_BSplineSurface  
  矩形修剪表面 Geom_RectangularTrimmedSurface  
  球面 Geom_SphericalSurface  
  surface_of_linear_extrusion Geom_SurfaceOfLinearExtrusion  
  surface_of_revolution Geom_SurfaceOfRevolution  
  toroidal_surface Geom_ToroidalSurface  
  degenerate_toroidal_surface Geom_ToroidalSurface  
  均匀表面 Geom_BSplineSurface  
  准均匀表面 Geom_BSplineSurface  
  矩形复合表面 TopoDS_Compound 包含TopoDS_Faces
  curve_bounded_surface TopoDS_Face  
镶嵌 tessellated_shell TopoDS_Shell  
  tessellated_solid TopoDS_Solid  
  三角面 TopoDS_Face 包含Poly_Triangulation
  complex_triangulated_face TopoDS_Face 包含Poly_Triangulation

公差管理

读取 STEP 期间用于公差的值

在 STEP 到 OCCT 的转换过程中,几个参数被用作不同算法的公差和精度。其中一些是使用特定函数从其他公差计算得出的。

3D(空间)公差

  • 封装方法Precision::Confusion()值为 10-7。它被用作点之间的最小距离,这些点被认为是不同的。
  • 不确定性参数附加到 STEP 文件中的每个 shape_representation 实体,并在不确定性_measure_with_unit 中定义为length_measure。它被用作翻译过程中精度的基本值。
  • 当参数read.precision.mode为 1(用户)时,使用用户定义的变量read.precision.val代替 STEP 文件中的不确定性。

2D(参数)公差

  • 封装方法Precision ::PConfusion()的值为0.01*Precision::Confusion()。它用于比较曲线的参数边界。
  • GeomAdaptor_Surface或BRepAdaptor_Surface类的UResolutionVResolution (tolerance3d)方法返回根据 3d 公差计算的曲面参数空间中的公差。当 U 和 V 参数方向都使用一个公差值时,使用UResolutionVResolution的最大值或最小值。
  • 方法GeomAdaptor_CurveBRepAdaptor_Curve类的分辨率 (tolerance3d)返回从 3d 容差计算的曲线参数空间中的容差。

平移对象时的初始公差设置

在 STEP 处理器中,公差的基本值在STEPControl_ActorRead::Transfer()方法中设置为 STEP 文件中 shape_representation 中的不确定性值(如果参数read.precision.mode为 0),或者设置为参数读取的值。 precision.val(如果read.precision.mode为 1 或不确定性未附加到 STEP 文件中的当前实体)。

翻译从一个翻译为根的实体开始。STEPControl_ActorRead::Transfer(),执行转换的函数创建一个类型为StepToTopoDS_Builder的对象,该对象旨在转换拓扑。

此对象获取等于read.precision.val或 shape_representation 的不确定性的初始容差值。在实体的翻译过程中,类型StepToTopoDS_Translate … 的新对象被创建用于翻译子实体。它们都使用与StepToTopoDS_Builder对象相同的公差。

转移过程

转移过程中形状公差的演变

让我们在将 STEP 实体转换为 OCCT 形状期间跟踪公差的演变。

如果起始 STEP 实体是 geometry_curve_set,则所有边和顶点都是用Precision::Confusion()构造的。

如果起始 STEP 实体不是 geometry_curve_set,则结果形状的子形状具有以下公差:

因此,子形状的最终公差显示形状的真实局部几何形状(相邻边的顶点之间的距离、边的 3D 曲线及其参数曲线的偏差等),并且可能小于或大于基本值STEP 处理器中的公差。

翻译成几何

几何实体由StepToGeom_Make 类转换…这些类的方法将 STEP 几何实体转换为 OCCT 几何对象。由于这些对象不是 BRep 对象,因此它们没有公差。公差仅用作检测不良情况(例如点重合)的精度。

转换成拓扑

通过使用StepToTopoDS包中的类将 STEP 拓扑实体转换为 OCCT 形状。

尽管在 STEP 文件中,不确定性值分配给 shape_representation 实体,并且该值应用于此 shape_representation 中的所有实体,但 OCCT 形状的生成具有不同的容差。通常,根据形状的局部几何形状(相邻边的顶点之间的距离、边的 3D 曲线及其参数曲线的偏差等)来更新容差,并且可能小于或大于分配给的不确定性值实体。

创建形状时使用以下默认公差以及在转换过程中如何更新它们。

在 ShapeHealing 组件中修复生成的形状

ShapeFix_Wire::FixSelfIntersection()

此方法旨在检测和修复导线中的自相交边缘和相邻边缘的相交。它通过在交点处切割边缘和/或通过增加顶点的容差(以便顶点包含交点)来修复自相交。通过此方法可以设置的最大容差作为参数传输,当前为read.maxprecision.value

当找到一条边的自相交时,通过以下两种方法之一对其进行修复:

  • 增加最靠近自交点的边的顶点的容差,使其既包括其自己的旧位置又包括交点
  • 切掉 pcurve 上的自相交环并构建新的 pcurve。这可以增加边缘的公差。

选择产生较小公差的方法。

当检测到两个相邻边缘的交点时,在该点切割边缘。增加这些边的公共顶点的容差,以便同时包含交点和旧位置。

这种方法可以将顶点的容差增加到read.maxprecision.value的值。

ShapeFix_Wire::FixLacking()

此方法旨在检测相邻边的 pcurves 之间的间隙(根据相应顶点的容差计算表面 UVResolution 的精度),并通过增加顶点的容差或插入新的退化边(直在参数空间中)。

如果可以通过将顶点的公差增加到小于公差初始值的值来补偿间隙,则增加顶点的公差。否则,如果顶点放置在退化点中,则插入退化边。

ShapeFix_Wire::FixConnected()

此方法旨在强制导线中的两个相邻边共享同一个顶点。这种方法可以增加顶点的容差。容差的最大值是read.maxprecision.value

代码架构

下图说明了读取 STEP 的调用结构。突出显示的类旨在翻译几何

图片[2]-OpenCasCade官方开发文档翻译(10)–STEP 转换器-卡核

读取 STEP 中的调用结构

例子

#include <TopoDS_Shape.hxx>
#include <BRepTools.hxx>
 
{
reader.ReadFile(“MyFile.stp”);
 
// Loads file MyFile.stp
 
// gets the number of transferable roots
cout;Number of roots in STEP file: ; NbRootsendl;
 
Standard_Integer NbTrans = reader.TransferRoots();
// translates all transferable roots, and returns the number of //successful translations
cout;STEP roots transferred: ; NbTransendl;
cout;Number of resulting shapes is: ;reader.NbShapes()endl;
 
TopoDS_Shape result = reader.OneShape();
// obtain the results of translation in one OCCT shape
 
. . .
 
}

写作步骤

程序

您可以通过以下步骤将 OCCT 形状转换为 STEP 实体:1.初始化过程,2.设置转换参数,3.执行形状转换,4.编写输出文件。

您可以在写入文件之前翻译多个形状。所有这些翻译在 STEP 文件中输出一个单独的 shape_representation 实体。

提供用户定义的选项(参数write.step.schema)来定义用于输出 STEP 文件的模式版本(AP214 CD 或 DIS,或 AP203)。

涵盖的领域

编写几何和拓扑

有两个可以翻译的 OCCT 对象系列:

  • 几何物体,
  • 拓扑形状。

编写汇编结构

在嵌套复合结构中组织的形状可以转换为简单的复合形状,也可以转换为装配结构,具体取决于参数write.step.assembly,如下所述。

放置在生成的 STEP 文件中的装配结构对应于 ProSTEP 协议日志(第 21 项)中描述的结构,作为第二种选择(通过表示关系/项目定义转换的装配结构)。为了表示一个程序集,它使用了representation_relationship_with_transformation类型的实体。用于定位装配组件的转换运算符由item_defined_transformation实体表示。如果模式write.step.assembly设置为值ONAuto ,则由嵌套化合物组成的 OCC 形状将被写入组件,否则将被写入单独的实体。

另请参阅将 OCCT 形状映射到 STEP 实体

过程描述

初始化进程

在执行任何其他操作之前,您必须创建一个 writer 对象:

设置翻译参数

以下参数用于 OCCT 到 STEP 的转换。

写入精度模式

写入精度值。

  • Least (-1) :不确定性值设置为 OCCT 形状的最小容差
  • 平均 (0) :不确定性值设置为 OCCT 形状的平均公差。
  • 最大 (1) :不确定性值设置为 OCCT 形状的最大容差
  • 会话(2):不确定性值是 write.precision.val 参数的值。

使用以下命令读取此参数:

Standard_Integer ic = Interface_Static::IVal (“write.precision.mode”); 修改此参数:

if (! Interface_Static::SetIVal ( “write.precision.mode” ,1))
.. 错误 ..

默认值为 0。

write.precision.val

用户定义的精度值。当 write.precision.mode 参数值为 1 时,此参数给出了从 OCCT 形状构造的 STEP 实体的不确定性。

  • 0.0001:默认
  • 任何真正的正(非空)值。

该值作为不确定性存储在 STEP 文件中的 shape_representation 中。

使用以下命令读取此参数:

Standard_Real rp = Interface_Static::RVal ( “write.precision.val” );

修改此参数:

if (! Interface_Static::SetRVal ( “write.precision.val” ,0.01))
.. 错误 ..

默认值为 0.0001。

write.step.assembly

编写汇编模式。

  • 0(关闭):(默认)写入没有程序集的 STEP 文件。
  • 1(开):以 STEP 程序集的形式写入所有形状。
  • 2(自动):以 STEP 组件的形式写入具有(可能嵌套的)TopoDS_Compounds结构的形状,写入单个形状而没有组件结构。

使用以下命令读取此参数:

Standard_Integer rp = Interface_Static::IVal ( “write.step.assembly” );

修改此参数:

if (! Interface_Static::SetIVal ( “write.step.assembly” ,1))
.. 错误 ..

默认值为 0。

write.step.schema

定义用于输出 STEP 文件的模式版本:

  • 1 或AP214CD(默认):AP214,CD 版本(1996 年 11 月 26 日),
  • 2 或AP214DIS:AP214,DIS 版本(1998 年 9 月 15 日)。
  • 3 或AP203:AP203,可能带有模块化扩展(取决于写入文件的数据)。
  • 4 或AP214IS:AP214,IS 版本(2002 年发布)
  • 5 或AP242DIS:AP242,DIS 版本。

使用以下命令读取此参数:

TCollection_AsciiString schema = Interface_Static::CVal ( “write.step.schema” );

修改此参数:

if (! Interface_Static::SetCVal ( “write.step.schema” , “DIS” ))
.. 错误 ..

默认值为 1 (;CD;)。为使参数write.step.schema生效,更改此参数后应调用方法STEPControl_Writer::Model(Standard_True) (DRAW 中对应的命令为newmodel)。

write.step.product.name

定义将用于写入 STEP 文件的 PRODUCT 实体的字段“名称”的文本字符串。

默认值:OCCT STEP 转换器(当前 OCCT 版本号)。

write.surfacecurve.mode

此参数指示是否应将参数曲线(曲面参数空间中的曲线)写入 STEP 文件。可以将此参数设置为 Off 以最小化生成的 STEP 文件的大小。

  • Off (0) : 写入没有 pcurves 的 STEP 文件。这种模式会减小生成的 STEP 文件的大小。
  • On (1) :(默认)将 pcurves 写入 STEP 文件

使用以下命令读取此参数:

Standard_Integer wp = Interface_Static::IVal ( “write.surfacecurve.mode” );

修改此参数:

if (! Interface_Static::SetIVal ( “write.surfacecurve.mode” ,1))
.. 错误 ..

默认值为开。

write.step.unit

定义应该写入 STEP 文件的单位。如果设置为 MM 以外的单位,则模型将在转换过程中转换为这些单位。

默认值为 MM。

write.step.resource.name 和 write.step.sequence

这两个参数为形状处理定义资源文件的名称和操作符序列的名称(在该文件中定义),在将形状转换为 STEP 文件之前由 STEP 转换器自动执行。形状处理是一个用户可配置的步骤,在翻译之前执行,包括将一组运算符应用于生成的形状。这是一个非常强大的工具,允许自定义形状并使其适应接收应用程序的需求。默认情况下,该序列由两个运算符组成:SplitCommonVertex 和 DirectFaces,它们将一些在 Open CASCADE 技术中有效但在 STEP 中无效的几何和拓扑结构转换为符合 STEP 格式的等效定义。

有关使用资源文件的更多详细信息,请参阅上面对参数 read.step.resource.name 的描述。

默认值:

  • read.step.resource.name – 步骤,
  • read.step.sequence – ToSTEP。

write.step.vertex.mode

该参数表示打开了哪个自由顶点写入模式。

  • 0(一个复合):(默认)所有自由顶点合并为一个复合并以一个形状定义表示导出(顶点名称和样式丢失)。
  • 1 (Single Vertex) : 以自己的SHAPE DEFINITION REPRESENTATION 导出的每个顶点(顶点名称和样式不会丢失,但STEP 文件的大小会增加)。

使用以下命令读取此参数:

Standard_Integer ic = Interface_Static::IVal ( “write.step.vertex.mode” );

修改此参数:

if (! Interface_Static::SetIVal ( “write.step.vertex.mode” ,1))
.. 错误 ..

默认值为 0。

write.step.tessellated:

调节定义镶嵌几何的实体的写入的布尔标志:

  • TESSELLATED_SHAPE_REPRESENTATION
  • TESSELLATED_SHELL
  • TESSELLATED_SOLID
  • TRIANGULATED_FACE

镶嵌几何被视为来自活动TopoDS_Face三角剖分的Poly_Triangulation类型的对象。

  • 0(关)——不写
  • 1(开)——写
  • 2 (OnNoBRep) – 镶嵌仅针对没有 BRep 表示的实体编写

使用以下命令读取此参数:

Standard_Integer ic = Interface_Static::IVal ( “write.step.tessellated” );

修改此参数:

if (! Interface_Static::SetIVal ( “write.step.tessellated” ,1))
.. 错误 ..

默认值为 2 (OnNoBep)。

执行 Open CASCADE Technology 形状转换

可以使用以下模型之一 (shape_representations) 将 OCCT 形状转换为 STEP:

  • 歧管固体布雷普(advanced_brep_shape_representation)
  • brep_with_voids (advanced_brep_shape_representation)
  • faceted_brep (faceted_brep_shape_representation)
  • shell_based_surface_model (manifold_surface_shape_representation)
  • 几何曲线集(geometrically_bounded_wireframe_shape_representation)

枚举STEPControl_StepModelType旨在定义特定的传输模型。允许使用以下枚举值:

  • STEPControl_AsIs Translator 根据 CASCADE 形状的类型自动选择结果表示,以将其转换为最高可能的模型;
  • STEPControl_ManifoldSolidBrep结果实体是manifold_solid_brep 或 brep_with_voids
  • STEPControl_FacetedBrep结果实体是faceted_brepfaceted_brep_and_brep_with_voids请注意,只能写入具有线性边缘的平面形状;
  • STEPControl_ShellBasedSurfaceModel结果实体是shell_based_surface_model
  • STEPControl_GeometricCurveSet结果实体是geometry_curve_set

以下列表显示了可以在哪种模式下翻译哪些形状:

如果TopoDS_Compound包含除表中提及的类型之外的任何其他类型,则这些子形状将被忽略。

如果 OCCT 形状无法根据其模式进行平移,则平移结果无效。

STEP214Control_StepModelTope模式= STEP214Control_ManifoldSolidBrep;
IFSelect_ReturnStatus stat = writer。转移(形状,模式);

编写 STEP 文件

使用以下命令编写 STEP 文件:

IFSelect_ReturnStatus stat = writer.Write(“filename.stp”);

给出文件名。

将 Open CASCADE Technology 形状映射到 STEP 实体

本段仅描述具有相应 OCCT 对象和装配结构映射的 STEP 实体。有关 STEP 实体的完整列表,请参阅附录 A。

装配结构和产品信息

如果参数write.step.assembly为 1 或 2 ,则将装配结构写入 STEP 文件。每个TopoDS_Compound都作为装配写入,该复合的子形状是装配的组件。嵌套化合物的结构被转换为嵌套组件的结构。共享子形状被转换为组件的共享组件。不是复合的形状会根据它们的类型转换为 shape_representation 的子类型(详情请参阅下一子章节)。

一组描述一般产品信息的 STEP 实体与描述产品几何、拓扑和装配结构的实体一起写入 STEP 文件。这些实体中的大多数都附加到作为 shape_representation 子类型的实体上,但其中一些实体仅在每个 STEP 文件中创建一个。

下表描述了 STEP 实体,这些实体是在将装配结构和产品信息写入 STEP 文件时创建的,并显示了这些实体的创建数量。请注意,其中一些实体的外观取决于模式的版本(AP214、CD、DIS 或 IS,或 AP203)。

级联形状 STEP实体 注释
  application_protocol_definition 每个 STEP 文件一个,定义使用的应用程序协议(取决于架构版本)
  应用程序上下文 每个 STEP 文件一个,定义生成文件的应用程序(AP214 或 AP203)
TopoDS_Compound shape_representation 描述程序集的空shape_representation。该组件的组件被编写为 shape_representation 的子类型,并使用next_assembly_usage_occurence实体包含在组件中。
TopoDS_Shape shape_representation 的子类型 根据形状类型,请参阅下表了解映射详细信息
  next_assembly_usage_occurence 通过引用相应的product_definitions来描述组件中组件的实例。如果同一组件多次包含在装配中(例如,具有不同的位置),则会创建多个next_assembly_usage_occurence
  context_dependent_shape_representation 描述部件在装配体中的放置。一个context_dependent_shape_representation对应于每个next_assembly_usage_occurence实体。
  shape_representation_relationship_with_transformation context_dependent_shape_representation一起描述了组件中组件的位置。
  item_defined_transformation 定义用于在装配中定位组件的转换。由shape_representation_relationship_with_transformation 引用
  shape_definition_representation 每个shape_representation一个。
  产品定义形状 每个shape_definition_representationcontext_dependent_shape_representation一个
  产品定义 定义一个产品,每个shape_definition_representation一个
  product_definition_formation 每个product_definition一个。STEP 文件中的所有product_definition_formations都有唯一的名称。
  产品 每个product_definition_formation一个。STEP 文件中的所有产品都有唯一的名称。
  product_type (CD) 或 product_related_product_category (DIS,IS) 每个产品一个
  Mechanical_context (CD) 或 product_context (DIS,IS) 每个产品一个。
  product_definition_context 每个product_definition一个。

拓扑形状

级联形状 STEP实体 注释
TopoDS_Compound 几何曲线集 如果写入模式为STEP214Control_GeometricCurveSet ,则仅平移TopoDS_Compound中找到的边缘的 3D 曲线及其所有 子形状
  歧管固体brep 如果写入模式为STEP214Control_AsIs并且TopoDS_Compound仅包含TopoDS_Solids
  shell_based_surface_model 如果写入模式为STEP214Control_AsIs并且TopoDS_CompoundTopoDS_SolidsTopoDS_ShellsTopoDS_Faces组成。
  几何曲线集 如果写入模式为STEP214Control_AsIs并且TopoDS_Compound包含TopoDS_Wires、TopoDS_Edges、TopoDS_Vertices。如果写入模式不是STEP214Control_AsIsSTEP214Control_GeometricCurveSet,则根据此表转换 TopoDS_Solids、TopoDS_ShellsTopoDS_Faces 。
TopoDS_Solid 歧管固体brep 如果写入模式为STEP214Control_AsIsSTEP214Control_ManifoldSolidBrep并且 CASCADE TopoDS_Solid没有空隙。
  faceted_brep 如果写入模式是STEP214Control_FacetedBrep
  brep_with_voids 如果写入模式为STEP214Control_AsIsSTEP214Control_ManifoldSolidBrep且 CASCADE TopoDS_Solid有空洞。
  shell_based_surface_model 如果写入模式为STEP214Control_ShellBasedSurfaceModel
  几何曲线集 如果写入模式为STEP214Control_GeometricCurveSet。仅平移边缘的 3D 曲线。
TopoDS_Solid中的TopoDS_Shell 闭壳 如果TopoDS_Shell是封闭壳。
TopoDS_Shell 歧管固体brep 如果写入模式为STEP214Control_ManifoldSolidBrep
  shell_based_surface_model 如果写入模式为STEP214Control_AsIsSTEP214Control_ShellBasedSurfaceModel
  几何曲线集 如果写入模式为STEP214Control_GeometricCurveSet。仅平移边缘的 3D 曲线。
TopoDS_Face 高级面  
TopoDS_Face中的TopoDS_Wire face_bound 如果写入模式是faceted_brep,则生成的face_bound包含poly_loop ,如果不是,则包含edge_loop
拓扑DS_Wire 几何曲线集 如果写入模式为STEP214Control_GeometricCurveSet。仅平移边缘的 3D 曲线。
TopoDS_Edge 导向边  
TopoDS_Vertex 顶点点  

几何对象

几何学 级联对象 STEP实体 注释
积分 Geom_CartesianPoint , Geom2d_CartesianPoint 笛卡尔点  
  TColgp_Array1OfPnt,TColgp_Array1OfPnt2d 折线  
展示位置 Geom_Axis1Placement , Geom2d_AxisPlacement axis1_placement  
  Geom_Axis2Placement axis2_placement_3d  
方向 Geom_Direction , Geom2d_Direction 方向  
矢量图 Geom_Vector , Geom2d_Vector 向量  
曲线 Geom_Circle 圆圈  
  Geom2d_Circle 圆,rational_b_spline_curve  
  Geom_Ellipse 椭圆  
  Geom2d_Ellipse 椭圆,rational_b_spline_curve  
  Geom_Hyperbola , Geom2d_Hyperbola 双曲线  
  Geom_Parabola , Geom2d_Parabola 抛物线  
  Geom_BSplineCurve b_spline_curve_with_knots 或rational_b_spline_curve 如果Geom_BSplineCurve是有理 BSpline, 则产生rational_b_spline_curve
  Geom2d_BSplineCurve b_spline_curve_with_knots 或rational_b_spline_curve 如果Geom2d_BSplineCurve是有理 BSpline, 则产生rational_b_spline_curve
  Geom_BezierCurve b_spline_curve_with_knots  
  Geom_LineGeom2d_Line 线  
表面 Geom_Plane 飞机  
  Geom_OffsetSurface offset_surface  
  Geom_ConicalSurface 圆锥面  
  Geom_CylindricalSurface 圆柱面  
  Geom_OffsetSurface offset_surface  
  Geom_RectangularTrimmedSurface 矩形修剪表面  
  Geom_SphericalSurface 球面  
  Geom_SurfaceOfLinear Extrusion surface_of_linear_extrusion  
  Geom_SurfaceOf 革命 surface_of_revolution  
  Geom_ToroidalSurface toroidal_surface 或 degenerate_toroidal_surface 如果小半径大于大半径,则产生 degenerate_toroidal_surface
  Geom_BezierSurface b_spline_surface_with_knots  
  Geom_BsplineSurface b_spline_surface_with_knots 或rational_b_spline_surface 如果Geom_BSplineSurface是有理 Bspline ,则生成rational_b_spline_surface
三角测量 Poly_Triangulation triangulated_face是为面主动三角剖分生成的  

公差管理

编写 STEP 文件时,不确定性有四个可能的值:

  • 用户定义的不确定性值
  • 子形状公差的最小值
  • 子形状公差的平均值
  • 子形状公差的最大值

选择的不确定性值是将写入 STEP 文件的最终值。请参阅参数write.precision.mode

代码架构

通话图表

下图说明了编写 STEP 的调用结构。突出显示的类旨在翻译几何图形。

图片[3]-OpenCasCade官方开发文档翻译(10)–STEP 转换器-卡核

以书面形式调用STEP的结构

例子

#include <STEPControl.hxx>
#include <TopoDS_Shape.hxx>
#include <BRepTools.hxx>
#include <BRep_Builder.hxx>
 
{
TopoDS_Solid source;
. . .
 
writer.Transfer(source, STEPControl_ManifoldSolidBrep);
 
// Translates TopoDS_Shape into manifold_solid_brep entity
writer.Write(;Output.stp;);
// writes the resulting entity in the STEP file
 
}

物理STEP文件读写

STEP Read 和 Write 类的体系结构

一般原则

要从 STEP 文件加载数据并转换此数据,必须在 EXPRESS 模式和类结构之间创建对应关系。组织这种通信有两种可能性:所谓的早期绑定和后期绑定。

  • 后期绑定意味着处理器处理模式的描述。处理器构建实体字典,并且可以识别和读取模式中描述的任何实体。要基于后期绑定改变处理器的行为和范围,改变模式的描述就足够了。但是,这种绑定有一些缺点(例如读取过程的速度慢)。
  • 在早期绑定的情况下,类的结构是在特定的自动工具的帮助下或手动创建的。如果处理器发现在此模式中未找到的实体,它将被简单地忽略。处理器调用适当类的构造函数及其读取方法。要在处理器范围内添加新类型,需要创建一个对应于新实体的类。

STEP 处理器基于早期绑定原则。这意味着每个 EXPRESS 类型的特定类是在 EXPRESS 模式中的自动工具的帮助下创建的。每个 EXPRESS 类型有两个类。第一个类(命名为表示类)表示内存中的 STEP 实体。第二个(RW 类)旨在执行表示类的初始化并将数据输出到要写入 STEP 文件的中间结构。

复杂实体

EXPRESS 模式允许多重继承。建立在多重继承基础上的实体称为复杂实体。EXPRESS 启用可以从任何 EXPRESS 类型继承的任何类型的复杂实体。以早期绑定的方式,不可能为任何可能的复杂类型创建 C++ 类。因此,只有广泛存在的复杂实体具有相应的表示类和预先手动创建的 RW 类。

物理文件读取

物理文件读取包括以下步骤: 1.加载 STEP 文件并对其内容进行语法分析 2.将 STEP 实体映射到字符串数组 3.创建表示 STEP 实体的空 OCCT 对象 4.初始化 OCCT 对象 5.构建引用图形

加载 STEP 文件并对其内容进行句法分析

在第一阶段,STEP 文件被语法检查并作为字符串序列加载到内存中。

根据step.lexstep.yacc文件中定义的规则执行语法检查。文件step.lexstep.yacc位于 StepFile nocdlpack 开发单元中。这些文件描述了 STEP 数据结构的文本编码(更多信息参见 ISO 10303 第 21 部分)。step.lex文件描述了 STEP 文件的词法结构它描述了标识符、数字、分隔符等。step.yacc文件描述了文件的句法结构,例如实体、参数和标题。

这些文件仅创建一次,仅在标准 ISO 10303-21 更改时才需要更新。

将 STEP 实体映射到字符串数组

对于由其等级编号指定的每个实体,存储其标识符、STEP 类型和参数的数组被填充。

创建代表 STEP 实体的空 Open CASCADE Technology 对象

对于每个 STEP 实体,都会创建一个表示该实体的空 OCCT 对象。创建并填写实体等级与OCCT对象之间的对应关系图。如果 STEP 处理器无法识别 STEP 实体,则创建StepData_UndefinedEntity对象。

初始化 Open CASCADE Technology 对象

每个 OCCT 对象(包括StepData_UndefinedEntity)在适当的 RW 类的帮助下由其参数初始化。如果一个实体有另一个实体作为其参数,则代表后一个实体的对象将立即初始化。所有初始化的对象都放入一个特殊的映射中,以避免重复初始化。

构建图表

最后一个阶段是构建实体之间的引用图。对于每个实体,其 RW 类用于查找该实体引用的实体。反向引用建立在直接引用的基础上。除了在 STEP 实体中定义的显式引用之外,还为表示装配结构的实体(从装配到其组件的链接)创建了一些附加(隐式)引用。

如何在 STEP 处理器范围内添加新实体

如果需要通过 STEP 处理器读取和翻译新实体,则应增强 Reader 和 Actor 范围。请注意,对于简单类型和复杂类型,为添加新类型要执行的一些操作是不同的。应采取以下步骤:

  • 创建一个代表新实体的类。这可以是Stepxxx_NewEntity类,其中 xxx 可以是以下之一:
    • 基本的
    • 几何
    • 形状
    • 视觉的
    • 代表
    • AP214
    • AP203
    • AP242

STEP 实体的每个字段都应由此类的相应字段表示。该类应具有初始化、设置和获取字段的方法,并且还应具有默认构造函数。

  • 使用默认构造函数和方法ReadStep()WriteStep()创建RWStepxxx_RWNewEntity类,如果实体引用其他实体,则使用Share()方法。
  • 更新文件StepAP214_Protocol.cxx。在构造函数StepAP214_Protocol::StepAP214_Protocol()中,将新类型添加到已注册类型的映射中,并将唯一整数标识符与此类型相关联。
  • 更新文件RWStepAP214_ReadWriteModule.cxx。更改应如下所示:
  • 更新文件RWStepAP214_GeneralModule.cxx。将新的 C++ 案例运算符添加到函数NewVoid()FillSharedCase()中,并在方法CategoryNumber()中添加一行定义新类型的类别。
  • 增强STEPControl_ActorRead(方法Recognize()Transfer())或转换某些实体的类,以将新实体转换为 OCCT 形状。

物理文件写入

物理文件写入包括以下步骤:

  1. 构建参考图。当从 STEP 文件加载或在翻译器的帮助下从 OCCT 形状创建的 STEP 模型与相应的参考图一起可用时,物理写入就开始了。在此步骤中,可以重新计算参考图。
  2. 将数据从模型传输到字符串序列。对于模型中的每个表示实体,都会调用相应的 RW 类。RW 类将包含在表示类中的数据写入中间数据结构。提到的结构是内存中的字符串序列。
  3. 将字符串序列写入文件。字符串序列被写入文件。这是物理 STEP 写入的最后阶段。

如何在 STEP 文件中添加要写入的新实体。

如果需要通过 STEP 处理器编写 OCCT 形状并将其转换为新实体,则应增强 Writer 和 Actor 范围。

有关向 STEP 处理器添加新实体类型应采取的步骤描述,请参阅物理文件读取。然后,增强STEPControl_ActorWrite类,即方法Recognize()Transfer()或TopoDSToStep的其他类,以将 OCCT 形状转换为新的 STEP 实体。

使用绘图

DRAW STEP 命令概述

TKXSDRAW工具包提供了用于在 DRAW 环境中交互式测试 XSTEP 接口的命令。它提供了一组额外的特定于数据交换任务的 DRAW 命令,允许加载和写入数据文件以及分析生成的数据结构和形状。

本节分为五个部分。其中两个处理读取和写入 STEP 文件,并且特定于 STEP 处理器。第一部分和第四部分描述了一些用于设置参数和分析数据的通用工具。它们中的大多数都独立于被测试的规范。此外,还提供了一个提到的 DRAW 命令表。

在命令描述中,方括号([])用于表示可选参数。尖括号 (<>) 和尖括号 (#) 中给出的参数将替换为适当的值。如果可能有多个专有变体,则使用垂直破折号 (|)。

设置接口参数

XSTEP 资源文件中定义了一组用于导入和导出 STEP 数据的参数。在XSDRAW中,可以使用命令查看或更改这些参数

绘制:>参数[<parameter_name> [< value >]]

不带参数的命令参数给出了所有参数及其值的列表。当指定参数parameter_name时,将打印有关此参数的信息(当前值和简短描述)。

第三个参数用于设置给定参数的新值。立即打印设置结果。

在所有接口操作期间,进程的协议(失败和警告消息,加载的实体到 OCCT 形状的映射等)可以输出到跟踪文件。DRAW 会话中定义了两个参数:跟踪级别(从 0 到 9 的整数值,默认为 0)和跟踪文件(默认为标准输出)。

命令 xtrace 旨在查看和更改这些参数:

  • Draw :> xtrace – 打印当前设置(例如:’Level=1 – Standard Output’);
  • Draw :> xtrace # – 将跟踪级别设置为值 #;
  • Draw :> xtrace tracefile.log – 将跟踪文件设置为tracefile.log
  • Draw:> xtrace。– 将所有消息定向到标准输出。

读取 STEP 文件

有关读取 STEP 文件时使用的参数的说明,请参阅设置转换参数部分。

为了读取 STEP 文件,定义了以下参数(见上文,命令 *param*):

描述 姓名 价值观 意义
输入实体的 精度 读取精度模式 0 或 1 如果为 0(文件),则输入 STEP 文件的精度将用于加载的形状;如果为 1(会话),则以下参数将用作精度值。
  read.precision.val 真实的 精度值(如果前一个参数为 1,则使用)
曲面曲线 读取.surfacecurve.mode 0 或 3 定义表示曲面曲线的优选方式(2d 或 3d 表示)。如果为 0,则无偏好。
最大公差 读取.maxprecision.mode 0 或 1 如果为 1,则使用最大公差作为刚性限制 如果为 0,则使用最大公差作为限制,但某些算法可能会超过此限制。
  读取.maxprecision.val 真实的 最大精度值

可以仅将 STEP 文件加载到内存中(即用文件中的数据填充InterfaceModel),也可以读取它(即加载所有实体并将其转换为 OCCT 形状)。加载由命令完成

Draw:> xload <文件名>

加载文件后,可以调查加载数据的结构。要了解您是如何做到的,请查看分析小节的开头。读取 STEP 文件由命令完成

Draw:> stepread <file_name> <result_shape_name> [selection]

如果文件已由 xload 或 stepread 加载,则此处可以使用点代替文件名。可选选择(有关选择的描述,请参见下文)指定要翻译的一组实体。如果给出星号“*”,则翻译所有可转移的词根。如果未给出选择,则提示用户以交互方式定义传输范围:

ñ 模式 描述
0 结尾 完成传输并退出 stepread
1 秩为 1 的根 转移第一个根
2 以等级为根 由其等级指定的转移根
3 一个实体 使用用户提供的号码转移实体
4 选择 仅传输选择中包含的实体
  • root 是 STEP 文件中未被其他实体引用的实体 stepread 命令的第二个参数定义加载的形状的名称。

在 STEP 转换过程中,会创建 STEP 实体和 OCCT 形状之间的对应关系图。

要获取有关给定 STEP 实体的翻译结果的信息,请使用命令

绘制:> tpent #*。

要创建对应于 STEP 实体的 OCCT 形状,请使用命令

绘制:> tpdraw #*。

要获取与 OCCT 形状对应的 STEP 实体的编号,请使用命令

绘制:> fromshape <shape_name>。

要清除 STEP 实体和 OCCT 形状之间的对应关系图,请使用命令

绘制:> tpclear。

分析传输的数据

数据导入的分析过程可以分为两个阶段:

  1. 检查文件内容,
  2. 估计翻译结果(转换和验证的比率)。

检查文件内容

可以使用命令获取加载数据的一般统计信息

此命令打印的信息取决于指定的符号:

  • g – 打印文件头中包含的信息;
  • cf – 打印在加载 STEP 文件期间生成的消息(当执行加载数据完整性检查的过程时)和结果统计信息(f 仅适用于失败,而 c 具有失败和警告消息);
  • t – 与cf相同,带有失败或警告实体的列表;
  • ml – 与t相同,但也打印每个实体的状态;
  • e – 列出模型的所有实体及其编号、类型、有效性状态等;
  • R – 与 e 相同,但仅列出根实体。

有一组特殊对象,可用于对加载的模型进行操作。它们可以是以下类型:

  • 选择过滤器——允许选择加载模型的实体子集;
  • Counter – 计算模型数据的一些统计数据。

可以在 DRAW 中通过命令打印当前会话中定义的这些对象的列表

绘制:> 列表项。

命令

抽奖:> givelist <selection_name>

打印由<selection>参数定义的加载实体子集的列表:

  • xst-model-模型的所有实体;
  • xst-model-roots所有根;
  • xst-pointed(交互式)指向实体(未在 DRAW 中使用);
  • xst-transferrable-all所有可转让(已识别)的实体;
  • xst-transferrable-roots可转移根。

命令listtypes给出了实体类型的列表,这些实体类型是在最后加载的文件中遇到的(每种类型都有许多 STEP 实体)。

该列表不能针对所有实体显示,而是针对其中的一部分显示。该子集由可选的选择参数定义(有关 STEP 的可能值列表,请参见上表)。

两个命令用于计算模型中实体的统计信息:

Draw:> count <counter> [<selection>]
Draw:> listcount <counter> [<selection>]

前者只打印实体的数量,而后者也给出了它们的列表。

可选的选择参数(如果指定)定义要考虑的实体子集。第一个参数应该是当前定义的计数器之一:

  • xst-types – 计算每种 OCCT 类型的实体数量
  • step214-types – 计算每个 STEP 类型的实体数量

STEP 文件中的实体按后续顺序编号。一个实体可以通过其编号或标签来识别。标签是字母 # 后跟排名。

  • Draw :> elab #为一个已知数字的实体输出一个标签。
  • Draw :> enum #为具有给定标签的实体打印一个数字。
  • Draw :> entity # <level_of_information>输出一个 STEP 实体的内容。
  • Draw : estat #输出给定实体引用的实体列表和引用它的实体列表。
  • 绘制:dumpassembly将 STEP 程序集打印为树。

将打印涉及到装配结构中的产品名称、next_assembly_usage_occurence、shape_definition_representation、context_dependent_shape_representationmapped_item 实体的信息。

估计阅读STEP的结果

以下所有命令只有在数据转换为 OCCT 形状后才可用(即在命令 214read 之后)。

Command Draw :> tpstat [*|?]<symbol> [<selection>]用于获取上次传输的所有统计信息,包括从 STEP 映射到 OCCT 类型的传输实体列表,以及失败和警告消息. 参数<symbol>定义将打印哪些信息:

  • g – 一般统计信息(结果和消息列表)
  • c – 所有警告和失败消息的计数
  • C – 所有警告和失败消息的列表
  • f – 所有失败消息的计数
  • F – 所有失败消息的列表
  • n – 所有转移根的列表
  • s – 相同,具有源实体的类型和结果的类型
  • b – 相同,带有消息
  • t – 几何类型的根数
  • r – 拓扑类型的根数
  • l – 相同,与源实体的类型相同

参数n、s、b、t、r之前的符号 *使其适用于所有实体(不仅适用于根)。

标志 ?在n, s, b, t之前,将信息范围限制为无效实体。

可选参数<selection>可以将命令的操作限制为选择,而不是所有实体。

要获得帮助,请不带参数运行此命令。

Draw :> tpstat *1命令给出不同类型实体翻译结果的统计信息(考虑检查消息)并计算汇总翻译比率。

要获取有关 OCCT 形状内容的信息,请使用命令Draw :> statshape <shape_name>。它输出形状中每种形状(顶点、边、线等)的数量和一些几何数据(C0曲面、曲线、间接曲面等的数量)。

面数作为引用数返回。要获得单个实例的数量,可以使用标准命令(来自 TTOPOLOGY 可执行文件)nbshapes。

要分析形状的内部有效性,请使用命令Draw :> checkbrep <shape_name> <expurged_shape_name>。它检查形状几何和拓扑结构是否存在不一致的不同情况,例如自相交的线或修剪轮廓的错误方向。如果发现错误,它将使用名称expurged_subshape_name _#复制形状的错误部分并生成适当的消息。如果可能,此命令还会尝试查找生成 OCCT 形状的 STEP 实体。

<expurged_shape_name>将包含没有无效子形状的原始形状。要获取有关形状公差的信息,请使用命令Draw :> tolerance <shape_name> [<min> [<max>] [<symbol>]]。它为每种具有公差的子形状和整个形状输出公差的最大值、平均值和最小值。

当指定 min 和 max 参数时,此命令保存具有 [min, max] 范围内的公差的形状,名称为 shape_name_… 并给出它们的总数。

<Symbol>用于指定要分析的子形状的种类:

  • v – 对于顶点,
  • e – 对于边缘,
  • f – 对于面,
  • c – 用于壳和面。

编写 STEP 文件

为了将形状写入 STEP 文件,定义了以下参数(见上文,命令 *param*):

描述 姓名 价值观 意义
结果实体的不确定性 写入精度模式 -1、0、1 或 2 如果为 -1,则不确定性值设置为 CASCADE 子形状的最小容差。如果为 0,则不确定性值设置为 CASCADE 子形状的平均公差。如果为 1,则不确定性值设置为 CASCADE 子形状的最大容差。如果为 2,则不确定性值设置为 write.precision.val
不确定性的价值 Write.precision.val 真实的 不确定性值(如果先前的参数为 2,则使用)。

可以在一个文件中写入多个形状。要开始编写新文件,请输入命令Draw :> newmodel。实际上,命令newmodel会清除InterfaceModel以清空它,下一个命令会将指定的形状转换为 STEP 实体并将它们添加到InterfaceModel

绘制:> stepwrite <mode> <shape_name> [<file_name>]

以下模式可用:

  • a – “原样” – 根据形状的类型和几何形状自动选择模式;
  • m –歧管固体brep或brep_with_voids
  • f – faceted_brep
  • w –几何曲线集
  • s – shell_based_surface_model

翻译成功后,如果没有指定file_name参数,程序会询问您是否在文件中写入 STEP 模型:

执行状态:1
模式(0结束,1 文件):

有必要调用命令newmodel来执行下一个 OCCT 形状的新转换。

读取和写入 STEP

STEPCAFControl包( TKXDESTEP工具包)提供了读取和写入 STEP 文件的工具(请参阅 XDE 用户指南)。

除了基本翻译器中实现的形状翻译外,它还提供以下功能:

  • STEP 程序集,由基本翻译器读取为 OCCT 组合,被翻译为 XDE 程序集;
  • 产品名称被翻译并分配给 XDE 中的装配组件和实例;
  • 识别和翻译 STEP 外部参考(如果外部文档是 STEP 文件);
  • 翻译分配给零件或子零件的颜色、层、材料和验证属性;
  • STEP 几何尺寸和公差被翻译;
  • STEP 保存的视图被翻译。

从 STEP 读取

加载一个 STEP 文件

在执行任何其他操作之前,您必须加载一个 STEP 文件:

STEPCAFControl_Reader reader(XSDRAW::Session(), Standard_False);
IFSelect_ReturnStatus stat = reader.ReadFile(“filename.stp”);

加载文件只会记住数据,不会翻译它。

检查加载的 STEP 文件

此步骤不是强制性的。请参阅检查 STEP 文件一节中对此步骤的描述。

设置转换为 XDE 的参数

请参阅设置翻译参数部分中对此步骤的描述。

此外,可以为属性的 XDE 转换设置以下参数:

  • 颜色传输参数:
    reader.SetColorMode(mode);
    // 模式可以是 Standard_True 或 Standard_False
  • 名称传输参数:
    reader.SetNameMode(mode);
    // 模式可以是 Standard_True 或 Standard_False

将 STEP 文件转换为 XDE

以下函数执行整个文档的翻译:

Standard_Boolean ok = reader.Transfer(doc);

其中doc是一个变量,其中包含输出文档的句柄,并且应该具有类型Handle(TDocStd_Document)

从 STEP 读取的属性

颜色

颜色是根据模型样式和组织第 4 节和第 5 节的推荐做法实施的。

从 STEP 文件中导入以下属性:

  • 与装配体、实体、壳、面/曲面、线框、边/曲线和顶点/点相关联的颜色;
  • 关于隐形的信息。

推荐实践中提到了以下属性,但 OCCT 不处理:

  • 用不同的颜色对表面的不同侧面进行造型;
  • 表面的透明度和反射率;
  • 曲线样式;
  • 点标记。

图层

图层是按照模型样式和组织第 6 节的推荐做法实现的。所有图层都被导入,但不可见样式被跳过。

材料

材料是根据材料识别和密度第 4 节的推荐做法实施的。OCCT 转换器以形状表示形式处理附着在实体上的材料。为每种材料导入名称、描述和密度(名称和值)。

验证属性

验证属性根据AP214 的几何和装配验证属性第 4 节的推荐做法实施。OCCT 为实体、壳和几何集处理几种类型的几何验证属性:

  • 区域;
  • 体积;
  • 质心。

几何尺寸和公差

OCCT导入的一般STEP实体类型如下表:

STEP实体 OCCT 属性
Dimensional_Size XCAFDoc_Dimension
Dimensional_Location XCAFDoc_Dimension
Dimensional_Size_With_Path XCAFDoc_Dimension
Dimensional_Location_With_Path XCAFDoc_Dimension
Angular_Size XCAFDoc_Dimension
Angular_Location XCAFDoc_Dimension
Geometric_Tolerance 和子类型 XCAFDoc_GeometricTolerance
基准 XCAFDoc_Data
日期特征 XCAFDoc_Data
基准_目标 XCAFDoc_Data

GD&T 的处理是按照AP242产品制造表示和表示的推荐做法实现的。一般限制是 OCCT STEP Reader 导入仅分配给形状(面、边、顶点等)或来自一般形状模型的形状组的 GD&T,即任何构造几何都不会转换为参考形状。

方面

尺寸根据后一文件的第 5 节实施。除了参考形状之外,阅读器还从 STEP 文件中导入一些辅助几何图形以构建尺寸线:连接点和线方向(如果存在)。

可以从 STEP 文件中导入以下 5.2 和 5.3 节中描述的值和修饰符:

  • 限定词(最小值、最大值和平均值);
  • 加/减界限;
  • 取值范围;
  • 公差等级;
  • 文本注释,附加到尺寸值;
  • 尺寸修饰符类型 2(表 8);
  • 小数位数。

日期

基准根据第 6.5 和 6.6.1-6.6.2 节实施。每个基准可以有一个或多个基准特征(来自模型的形状,基准链接到该形状)和基准目标(辅助几何:点、线、矩形、圆或区域)。

公差

公差根据第 6.7-6.9 节实施,但有一些限制。

进口公差类型:

  • 简单公差(见表 10);
  • 带修饰符的容差(第 6.9.3 节);
  • 具有最大值的公差(第 6.9.5 节);
  • 基准公差(第 6.9.7 节(简单基准和带修饰符的基准)和第 6.9.8 节(普通基准));
  • 上述类型的叠加。

不是所有的公差带都可以通过 OCCT STEP Reader 导入,只有带有相关符号的公差带来自表 11、投影公差带(第 6.9.2.2 节)和跳动带定义。

演示文稿

GD&T(Dimension、Tolerance、Datum Feature 或 Datum Target)的每个语义表示都可以有一个表示;OCCT 对其的处理按照第 7.3、8 和 9.1-9.2 节执行。演示文稿有几种类型:

  • 图形表示(折线或镶嵌线框) – 部分在 OCCT 中实现;
  • Minimal Presentation(位置和方向) – 在 OCCT 中作为图形演示的一部分实施;
  • 基于字符的演示(带有字体、曲线样式等信息的 3D 文本)- 不由 OCCT 处理。

请注意,任何推荐实践中都没有描述单独的最小表示和基于字符的表示,因此对于如何将此类信息保存在 STEP 文件中没有达成一致意见。

OCCT STEP Reader 仅导入注释平面、轮廓/描边多段线和镶嵌线框,即所有样式信息(颜色、曲线样式等)和填充字符都被遗漏。

OCCT STEP Reader 还处理直接链接到形状的注释(第 9.3.1 节),这些演示文稿的处理受到与演示文稿处理相同的限制,链接到 GD&T 语义。

几何尺寸和公差 AP214

AP214 也处理简单​​类型的 GD&T(尺寸、公差和没有表示或任何类型修饰符的基准)。但是,根据产品制造表示和表示的推荐做法,此实施已过时。

保存的视图

保存的视图是根据产品制造的表示和表示的推荐做法第 9.4.1-9.4.4 节实施的。对于每个保存的视图 OCCT STEP Reader 将检索以下属性:

  • 一组显示的形状表示;
  • 一组显示的 PMI 演示文稿;
  • 投影点;
  • 观察方向;
  • 视窗向上方向;
  • 视图窗口的水平尺寸;
  • 视图窗口的垂直尺寸;
  • 缩放系数;
  • 剪裁平面(平面组合的单个平面);
  • 前后平面剪裁。

写入 STEP

从 XDE 到 STEP 的转换可以如下初始化:

STEPCAFControl_Writer aWriter( XSDRAW::Session (),Standard_False);

设置从 XDE 到 STEP 的转换参数

可以为将属性转换为 STEP 设置以下参数:

  • 对于转移颜色:
    aWriter.SetColorMode(模式);
    // 模式可以是 Standard_True 或 Standard_False
  • 转移姓名:
    aWriter.SetNameMode(模式);
    // 模式可以是 Standard_True 或 Standard_False

将 XDE 文档翻译成 STEP

您可以通过调用函数来执行文档的翻译:

IFSelect_ReturnStatus aRetSt = aWriter.Transfer(doc);

其中doc是一个变量,其中包含用于传输的输入文档的句柄,并且应该具有类型Handle(TDocStd_Document)

写一个STEP文件

编写一个 STEP 文件:

IFSelect_ReturnStatus statw = aWriter.WriteFile( “filename.stp” );

或者

IFSelect_ReturnStatus statw = writer.WriteFile (S);

其中SOStream

写入 STEP 的属性

颜色

以下属性导出到 STEP 文件:

  • 与装配体、实体、壳、面/曲面、线框、边/曲线相关联的颜色;
  • 有关可见性的信息。

限制:

  • 默认不导出点的颜色和可见性信息,需要使用write.step.vertex.mode参数;
  • 所有颜色始终应用于表面的两侧;
  • 所有曲线都以“连续”曲线样式导出。

图层

所有图层都被导出,但不可见样式只能连接到形状。

材料

对于带有材料的实体,将材料导出为 STEP 文件(名称、描述和密度(名称和值))。

验证属性

附加到形状的几何验证属性(例如体积、面积和质心)导出到 STEP 文件。

几何尺寸和公差

所有可以从 STEP 导入的实体也可以导出。请参阅从 STEP 读取部分中的相同项目以查找更多信息。

注意:OCCT默认使用AP214,所以GD&T导出AP242需要手动设置:

Interface_Static::SetCVal ( “write.step.schema” , “AP242DIS” ));

或者

Interface_Static::SetIVal ( “write.step.schema” , 5));

保存的视图

OCCT 不会导出保存的视图。

© 版权声明
THE END
喜欢就支持一下吧
点赞2.1W+ 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容