OpenCasCade官方开发文档翻译(9)–IGES 转换器

介绍

IGES 接口读取 IGES 文件并将其转换为 Open CASCADE Technology 模型。该接口能够翻译一个实体、一组实体或整个文件。在开始翻译之前,您可以设置一系列参数来管理翻译过程。如果您愿意,您还可以在翻译前检查文件的一致性。IGES 接口还将 OCCT 模型转换为 IGES 文件。

借助 XDE 工具IGESCAFControl_ReaderIGESCAFControl_Writer可以读取或写入其他类型的数据,例如颜色和名称。

注意

  • IGES 模型是已加载到内存中的 IGES 文件。
  • IGES 实体是 IGES 正常意义上的实体。
  • 根实体是任何给定类型的最高级别实体,例如类型 144 用于表面,类型 186 用于实体。根不被其他实体引用。

本手册主要说明如何将 IGES 文件转换为 Open CASCADE Technology ( OCCT ) 形状,反之亦然。它提供了有关转换的基本文档。

可以读取根据 IGES 标准版本(包括版本 5.3)生成的 IGES 文件。此接口生成的 IGES 文件符合 IGES 版本 5.3(初始图形交换规范,IGES 5.3。ANS US PRO/IPO-100-1996)。

本手册主要涉及两个 OCCT 类:

  • Reader 类,它加载 IGES 文件并将其内容转换为 OCCT 形状,
  • Writer 类,它将 OCCT 形状转换为 IGES 实体,然后将这些实体写入 IGES 文件。

文件翻译在编程模式下通过 C++ 调用执行,生成的 OCCT 对象是形状。

可以识别 IGES 5.3 版中的所有定义,但仅翻译 3D 几何实体。当处理器遇到未翻译的数据时,它会忽略它并写入一条消息来标识未处理的数据类型。此消息可以写入日志文件或屏幕输出。

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

阅读 IGES

程序

您可以按照以下步骤将 IGES 文件转换为 OCCT 形状:

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

涵盖的领域

可翻译的实体

可以翻译的 IGES 实体类型有:

  • 积分
  • 线条
  • 曲线
  • 表面
  • B-代表实体
  • 结构实体(组)。组中的每个实体都输出一个形状。可以有一组组。
  • 子图。子图中定义的每个实体都输出一个形状
  • 转换矩阵。

请注意,IGES 文件中的所有非毫米长度单位值都转换为毫米。

属性

使用 XDE 将 IGES 文件的目录条目部分中的实体属性(例如层、颜色和厚度)转换为 Open CASCADE 技术。

管理数据

IGES 文件全局部分中的管理数据(例如文件名、作者姓名、模型创建或上次修改的日期和时间)不会转换为 Open CASCADE 技术。但是,可以在 IGES 文件中查阅管理数据。

过程描述

加载 IGES 文件

在执行任何其他操作之前,您必须使用以下语法加载文件。

IGESControl_Reader reader;
IFSelect_ReturnStatus stat = reader. ReadFile(“filename.igs”);

加载操作仅将 IGES 文件加载到计算机内存中;它不翻译它。

检查 IGES 文件

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

Standard_Boolean ok = reader.Check(Standard_True);

如果没有找到失败消息,则返回变量“ok is True”;如果至少有一条失败消息,则返回“ok is False”。

reader. PrintCheckLoad (failsonly, mode);

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

Standard_Boolean failedonly = Standard_True 或 Standard_False ;

如果你给 True,你只会看到失败消息。如果您给出 False,您将看到失败和警告消息。

您对文件的分析可以是面向消息的,也可以是面向实体的。使用IFSelect_PrintCount mode = IFSelect_xxx选择您的偏好,其中xxx可以是以下任何一项:

  • ItemsByEntity给出每个 IGES 实体的所有消息的顺序列表。
  • CountByItem给出每条消息的 IGES 实体数量及其类型。
  • ShortByItem给出每条消息的 IGES 实体数量及其类型,并显示每条消息的前五个 IGES 实体的等级数。
  • ListByItem给出了 IGES 实体的数量及其类型和每条消息的等级数。
  • EntitiesByItem给出了 IGES 实体的数量及其类型、等级号和每条消息的目录条目号。
设置翻译参数

以下参数可用于将 IGES 文件转换为 OCCT 形状。如果您给出的值不在可能值的范围内,它将被忽略。

read.iges.bspline.continuity

管理 BSpline 曲线(IGES 实体 106、112 和 126)在转换为 Open CASCADE 技术后的连续性(Open CASCADE 技术要求模型中的曲线至少 C1 连续;IGES 没有这样的要求)。

  • 0:无变化;曲线按照 IGES 文件中的方式获取。可以产生 Open CASCADE Technology 的 C0 实体。
  • 1:如果 IGES BSpline、Spline 或 CopiousData 曲线是 C0 连续的,则将其分解为 C1 连续Geom_BSplineCurve的片段。
  • 2:此选项仅涉及 IGES 样条曲线。IGES 样条曲线被分解为 C2 连续性片段。如果 C2 不能保证,样条曲线将被分解成 C1 连续性的片段。

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

Standard_Integer ic = Interface_Static::IVal ( “read.iges.bspline.continuity” );

修改此值:

if (! Interface_Static::SetIVal ( “read.iges.bspline.continuity” ,2))
.. 错误 ..;

默认值为 1。

此参数不会更改用于构造 IGES BRep 实体的曲线的连续性。在这种情况下,该参数不会影响生成的 OCCT 曲线的连续性(它被忽略)。

读取精度模式

读取精度值。

  • File (0) 在 IGES 文件头中读取精度值(默认)。
  • 用户 (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,但可以是任何正数(非空)值。

该值采用 IGES 文件头中定义的测量单位。

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

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

修改此参数:

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

默认值为 0.0001。

赋予此参数的值是应用于TopoDS_Vertex、TopoDS_EdgeTopoDS_Face实体的目标值。处理器尽最大努力达到它。在某些情况下,您提供的价值可能不会在处理结束时附加到所有相关实体。IGES 到 OCCT 的转换不会提高原始 IGES 文件中几何图形的质量。这意味着您输入的值可能无法达到 IGES 文件中给定的几何质量。

用于计算的公差值是通过将read.precision.val的值与从文件单位到毫米的传输系数的值相乘来计算的。

读取.maxprecision.mode

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

  • Preferred(0)最大容差被用作限制,但有时可以超过(目前,仅用于边缘的 3D 曲线与其 pcurves 和该边缘的顶点的偏差)以确保形状有效性;
  • Forced(1)最大容差用作严格限制,即不能超过,如果发生这种情况,将修整容差以适应最大允许值。

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

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

修改此参数:

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

默认值为首选 (0)

读取.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。

读取.stdsameparameter.mode

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

  • 0 (Off) – BRepLib ::SameParameter未被调用,
  • 1 (On) – BRepLib ::SameParameter被调用。
    BRepLib ::SameParameter通过ShapeFix_Edge ::SameParameter使用。它确保生成的边具有最低容差,采用未从 IGES 文件修改或由BRepLib ::SameParameter 修改的 pcurve
    使用以下命令读取此参数:

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

    修改此参数:

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

    默认值为 0(关闭)。

读取.surfacecurve.mode

在具有 2D 和 3D 表示的实体中,如果 2D/3D 不一致,则优先计算曲线。

在这里,我们讨论的是实体类型 141(边界)、142(CurveOnSurface)和 508(循环)。这些实体表示位于表面上的轮廓,该轮廓被转换为由 TopoDS_Edges形成的TopoDS_Wire。每个TopoDS_Edge都必须具有参考曲面的 3D 曲线和 2D 曲线。

处理器还决定重新计算 3D 或 2D 曲线,即使两条曲线都已成功转换并且看起来是正确的,以防它们之间存在不一致。如果满足以下任一条件,则处理器认为存在不一致:

  • 2D 曲线中的子曲线数量与 3D 曲线中的子曲线数量不同。这可能是由于 IGES 文件中给定的子曲线数量不同,也可能是由于在平移过程中分割了曲线。
  • 3D 或 2D 曲线是在同一点开始和结束的圆弧(实体类型 100)(请注意,根据 IGES 标准,这种情况是不正确的)。

参数read.surfacecurve.mode定义了哪条曲线(3D 或 2D)用于重新计算另一条曲线:

  • Default(0)使用实体的参数数据部分中的首选项标志值。标志值是:
    • 0:无偏好,
    • 1:对 142 个实体使用 2D,对 141 个实体使用 3D,
    • 2:对 142 个实体使用 3D,对 141 个实体使用 2D,
    • 3:两种表示方式同等优先。
  • 2DUse_Preferred (2) : 2D 用于重建 3D 以防它们不一致,
  • 2DUse_Forced (-2) : 2D 总是用于重建 3D(即使文件中存在 3D),
  • 3DUse_Preferred (3) : 3D 用于重建 2D 以防它们不一致,
  • 3DUse_Forced (-3) : 3D 总是用于重建 2D(即使文件中存在 2D),

如果未定义首选项(如果read.surfacecurve.mode的值为Default并且实体的 Parameter Data 部分中的首选项标志的值为 0 或 3),则执行附加分析。

在两种情况下,3D 表示优于 2D:

  • 如果文件中的 3D 和 2D 轮廓具有不同数量的曲线,
  • 如果 2D 曲线是在同一点开始和结束的圆弧(实体类型 100),而 3D 曲线则不是。

在任何其他情况下,2D 表示优于 3D。

如果文件中不存在 3D 或 2D 轮廓或无法转换,则从另一个轮廓重新计算。如果 2D 和 3D 轮廓的平移均失败,则不会平移整条曲线(类型 141 或 142)。如果此曲线用于修剪面,则面将在不进行此修剪的情况下进行平移,并具有自然限制。

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

Standard_Integer ic = 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。

read.iges.bspline.approxd1.mode

此参数已过时(在实际实践中很少使用)。如果设置为 True,它会影响从 IGES 转换 1 次 bspline 曲线:这些曲线(在几何上是折线)被重复的点分割,并且转换器尝试将获得的每个部分转换为具有更高连续性的 bspline .

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

Standard_Real bam = Interface_Static::CVal ( “read.iges.bspline.approxd1.mode” );

修改此参数:

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

默认值为关闭。

read.iges.resource.name 和 read.iges.sequence

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

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

如果您定义环境变量CSF_IGESDefaults,IGES 翻译器将使用该文件,该变量应指向资源文件所在的目录。请注意,如果更改参数read.iges.resource.name,则应相应更改资源文件的名称和环境变量的名称。该变量应包含资源文件的路径。

默认值:

  • read.iges.resource.name – IGES,
  • read.iges.sequence – FromIGES。
xstep.cascade.unit

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

默认值为 MM。

选择实体

可以通过调用IGESControl_Reader::GiveList方法来形成实体列表。

Handle(TColStd_HSequenceOfTransient) list = reader. GiveList();

可以使用几个预定义的运算符来选择特定类型的实体列表。要进行选择,请使用方法IGESControl_Reader::GiveList并将选择类型用引号括起来作为参数。您还可以进行累积选择。例如,您将使用以下语法:

  1. 请求文件中的面:
    faces = Reader.GiveList( “iges-faces” );
  2. 请求文件中的可见根:
    visibles = Reader.GiveList(iges-visible-roots);
  3. 请求可见的面孔:
    visfac = Reader.GiveList(iges-visible-roots,faces);

    使用签名,您可以动态定义选择,通过标准过滤字符串。当您使用 GiveList 方法请求选择时,您可以提供预定义的选择或通过签名进行选择。您可以使用预定义的签名和括号中的标准通过签名进行选择,如下例所示。给出的语法彼此等价。

    faces = Reader.GiveList(“xst- type (SurfaceOfRevolution)”);
    faces = Reader.GiveList(“iges- type (120)”);

    您还可以寻找:

    • 您的签名返回的值与您的标准完全匹配
      faces = Reader.GiveList(“xst- type (=SurfaceOfRevolution)”);
    • 您的签名返回的值不包含您的标准
      faces = Reader.GiveList(“xst- type (!SurfaceOfRevolution)”);
    • 您的签名返回的值与您的标准不完全匹配。
      faces = Reader.GiveList(“xst- type (!=SurfaceOfRevolution)”);
可以使用的预定义运算符列表:
  • xst-model-all – 选择所有实体。
  • xst-model-roots – 选择所有根。
  • xst-transferrable-all – 选择所有可翻译的实体。
  • xst-transferrable-roots – 选择所有可翻译的根(默认)。
  • xst-sharing +  – 选择共享至少一个由 选择的实体的所有实体。
  • xst-shared +  – 选择由 选择的至少一个实体共享的所有实体。
  • iges-visible-roots – 选择所有可见的根,无论是否可翻译。
  • iges-visible-transf-roots – 选择所有可见和可翻译的根。
  • iges-blanked-roots – 选择所有空白根,无论是否可翻译。
  • iges-blanked-transf-roots – 选择所有空白和可翻译的根。
  • iges-status-independent – 选择 IGES 从属状态 = 0 的实体。
  • iges-bypass-group – 选择所有根实体。如果根实体是组(402/7 或 402/9),则选择组中的实体。
  • iges-bypass-subfigure – 选择所有根实体。如果根实体是子图定义(308),则选择子图定义中的实体。
  • iges-bypass-group-subfigure – 选择所有根实体。如果根实体是组(402/7 或 402/9)或子图定义(308),则选择组和子图定义中的实体。
  • iges-curves-3d – 选择 3D 曲线,无论它们是否为根(例如,曲面上的 3D 曲线)。
  • iges-basic-geom – 选择 3D 曲线和未修剪的曲面。
  • iges-faces – 选择面支撑面(修剪或不修剪)。
  • iges-surfaces – 选择不支持面的表面(即具有自然边界)。
  • iges-basic-curves-3d – 选择与 iges-curves-3d 相同的实体。复合曲线被分解成它们的组件并选择组件。
执行 IGES 文件翻译

根据您要翻译的内容进行翻译:

  1. 将由其等级标识的实体翻译为:
    Standard_Boolean ok = reader.Transfer (rank);
  2. 将由其句柄标识的实体转换为:
    Standard_Boolean ok = reader. TransferEntity (ent);
  3. 在一个操作中翻译实体列表:
    Standard_Integer nbtrans = reader. TransferList (list);
    reader.IsDone();

    其中nbtrans返回列表中产生形状的项目数,reader.IsDone()指示是否至少翻译了一个实体。

  4. 逐个实体翻译实体列表:
    Standard_Integer i,nb = list-Length();
    for (i = 1; i <= nb; i ++) {
    Handle( Standard_Transient) ent = list-Value(i);
    Standard_Boolean OK = reader. TransferEntity (ent);
    }
  5. 使用以下命令翻译整个文件(所有实体或仅可见实体):
    Standard_Boolean onlyvisible = Standard_True or Standard_False;
    reader. TransferRoots(onlyvisible)
获取翻译结果

每个成功的平移操作都会输出一个形状。一系列的翻译给出了一系列的形状。
每次调用TransferEntity、TransferTransferlist时,它们的结果都会累积并且 NbShapes 会增加。您可以清除两次翻译操作之间的结果(清除功能),如果您不这样做,下一次翻译的结果将被添加到累积中。TransferRoots操作在开始之前会自动清除所有现有结果。

Standard_Integer nbs = reader. NbShapes();

返回结果中记录的形状数。

TopoDS_Shape shape = reader. Shape(num);

返回结果num,其中num是 1 和NbShapes之间的整数。

TopoDS_Shape shape = reader. Shape();

返回翻译操作中的第一个结果。

TopoDS_Shape shape = reader. OneShape();

以单一形状返回所有结果,即:

  • 如果没有结果,则为空形状,
  • 在单个结果的情况下,特定于该结果的形状,
  • 如果有多个结果,则列出结果的化合物。
    reader.Clear();

    删除现有结果。

    reader. PrintTransferInfo (failsonly, mode);

    显示在上一次调用TransferTransferRoots期间出现的消息。

如果failedonlyIFSelect_FailOnly,则只输出失败消息,如果为IFSelect_FailAndWarn,则输出所有消息。参数“mode”可以有IFSelect_xxx值,其中xxx可以是:

  • GeneralCount – 提供有关传输的一般统计信息(翻译的 IGES 实体的数量、失败和警告的数量等)
  • CountByItem – 给出每条消息的 IGES 实体数量及其类型。
  • ListByItem – 给出 IGES 实体的数量及其类型和每条消息的 DE 编号。
  • ResultCount – 给出每种类型产生的 OCCT 形状的数量。
  • 映射– 给出 IGES 文件的根与每个 IGES 和 OCCT 类型生成的 OCCT 形状之间的映射。

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

请注意,下表中未给出的 IGES 实体类型不可翻译。

积分
IGES 实体类型 级联形状 注释
116: Point TopoDS_Vertex
曲线

形成 2D 面边界的曲线被转换为Geom2D_Curves(Geom2D 圆等)。

IGES 实体类型 级联形状 注释
100:Circular Arc TopoDS_Edge 几何支持是Geom_CircleGeom_TrimmedCurve(如果弧不是闭合的)。
102:Composite Curve 拓扑DS_Wire 生成的形状始终是由一组 TopoDS_Edges 构建TopoDS_Wire。每个TopoDS_Edge通过一个共同的TopoDS_Vertex连接到前面和后面的边。
104:Conic Arc TopoDS_Edge 几何支持取决于 IGES 实体的形式是 0 ( Geom_Circle )、1 ( Geom_Ellipse )、2 ( Geom_Hyperbola ) 还是 3 ( Geom_Parabola )。如果圆弧未闭合,则输出 Geom_TrimmedCurve 。
106:Copious Data TopoDS_Edge或TopoDS_Wire IGES 实体 Copious Data(类型 106,形式 1-3)被转换为 IGES 实体 Linear Path (106/11-13) 和 Simple Closed Planar Curve (106/63)。应用于 11,12 或 63 以外的形式的向量将被忽略。Geom_BSplineCurve 几何支持)具有 C0 连续性。如果 Copious Data 有向量 (DataType = 3),它们将被忽略。
110:Line TopoDS_Edge 支撑曲线是Geom_TrimmedCurve,其基础曲线是Geom_Line
112:Parametric Spline Curve TopoDS_Edge或TopoDS_Wire 几何支持是 Geom_BsplineCurve。
126: BSpline Curve TopoDS_Edge或TopoDS_Wire
130:Offset Curve TopoDS_Edge或TopoDS_Wire 生成的形状是TopoDS_EdgeTopoDS_Wire(取决于基础曲线的平移),其几何支持是从基础 Geom_Curve 构建Geom_OffsetCurve。限制:IGES 偏移类型值必须为 1。
141:Boundary 拓扑DS_Wire 与曲面上的曲线相同的行为(见下文)。在BoundedSurface IGES 实体中转换非参考边界 IGES实体会输出一个TopoDS_Edge或一个带有Geom_CurveTopoDS_Wire
142:Curve On Surface 拓扑DS_Wire 每个TopoDS_Edge由 3D 曲线和参考曲面的 2D 曲线定义。

由 IGES 实体 106、112 和 126 平移产生的 OCCT 形状类型(TopDS_EdgesTopoDS_Wires)取决于 IGES 文件中曲线的连续性和read.iges.bspline.continuity平移参数的值。

表面

表面的平移输出TopoDS_FaceTopoDS_Shell
如果输出TopoDS_Face,则其几何支持为Geom_Surface,其外部和内部边界(如果有)为TopoDS_Wires

IGES 实体类型 级联形状 注释
108:Plane TopoDS_Face TopoDS_Face的几何支持是Geom_Plane,其 TopoDS_Wire 的方向取决于它是外部TopoDS_Wire还是孔。
114:Parametric Spline Surface TopoDS_Face TopoDS_Face的几何支持是Geom_BSplineSurface
118:Ruled Surface TopoDS_Face或TopoDS_Shell 如果轮廓曲线变为TopoDS_Edges ,则直纹曲面的平移输出一个TopoDS_Face ,如果轮廓曲线变为TopoDS_Wires,则输出一个TopoDS_Shell限制:当这两个TopoDS_Wire朝向不同的方向 时,无法完成此平移。
120:Surface Of Revolution TopoDS_Face或TopoDS_Shell 旋转表面的平移输出:如果母线变为TopoDS_Edge则为 TopoDS_Face ;如果母线变为 TopoDS_Wire,则为TopoDS_Shell。几何支持可能是:Geom_CylindricalSurface、Geom_ConicalSurface、Geom_SphericalSurface、Geom_ToroidalSurfaceGeom_SurfaceOfRevolution取决于 CASCADE 计算的结果(基于母线类型)。
122:Tabulated Cylinder TopoDS_Face或TopoDS_Shell 如果 base 变为TopoDS_Edge ,则转换输出TopoDS_Face ;如果base变为TopoDS_Wire,则转换输出TopoDS_Shell。几何支持可能是Geom_Plane、 Geom_Cylindrical SurfaceGeom_SurfaceOfLinearExtrusion取决于 CASCADE 计算的结果(基于母线类型)。Geom_Surface几何支持受母线的限制 
128: BSpline Surface TopoDS_Face TopoDS_Face的几何支持是Geom_BsplineSurface
140:Offset Surface TopoDS_Face Offset Surface 的平移输出一个TopoDS_Face,其几何支持是Geom_OffsetSurface。限制:对于 OCCT 算法,原始表面必须是 C1 连续的,以便可以创建Geom_OffsetSurface 。如果基面不是 C1 连续的,它的平移输出一个TopoDS_Shell,并且只有TopoDS_Shell中的第一个TopoDS_Face是偏移的。
143:Bounded Surface TopoDS_Face或TopoDS_Shell 如果基础表面输出一个TopoDS_Shell(具有多个TopoDS_Face),则不平移 IGES 边界。限制:如果边界曲线定义了孔,则不会创建自然边界。如果轮廓的方向是错误的,它不会被纠正。
144:Trimmed Surface TopoDS_Face或TopoDS_Shell 对于界面处理的需要,基面必须是面。只有单面的贝壳才会被处理。轮廓(根据 IGES 142: Curve On Surface 实体的定义正确定向的线)被添加到已创建的面上。如果轮廓的方向是错误的,它会被纠正。
190:Plane Surface TopoDS_Face 这种类型的 IGES 实体只能在 BRep 实体中使用,以代替 IGES 108 类型的实体。面的几何支撑是Geom_Plane
边界表示实体实体
IGES 实体类型 级联形状 注释
186:ManifoldSolid TopoDS_Solid
514:Shell TopoDS_Shell
510:Face TopoDS_Face 这是 BRep 结构中可以指定为翻译起点的最低 IGES 实体。
508:Loop 拓扑DS_Wire
504:Edge List
502:Vertex List
结构实体
IGES 实体类型 级联形状 注释
402/1:关联性实例:带有反向指针的组 TopoDS_Compound
402/7:关联性实例:没有反向指针的组 TopoDS_Compound
402/9:关联性实例:单亲 TopoDS_Face SingleParent实体的翻译仅针对具有实体 108/1 和 108/-1 的 402 表格 9 执行。TopoDS_Face的几何支持是带边界的Geom_Plane:父平面定义外边界;子平面定义内部边界。
子图
IGES 实体类型 级联形状 注释
308:子图定义 TopoDS_Compound 此 IGES 实体仅在没有奇异子图实例实体时才被翻译。
408:奇异子图实例 TopoDS_Compound 此形状以子图定义复合作为其原点,并通过其平移向量和比例因子在空间中定位。
变换矩阵
IGES 实体类型 级联形状 注释
124:转换矩阵 Geom_Transformation 这个实体永远不会单独翻译。它必须包含在另一个实体的定义中。

留言

显示有关处理器正常功能(传输、加载等)的消息。
您必须声明一个包含文件:

#include \

您可以选择以下消息选项:

IDT_SetLevel ( level);

level 修改消息的级别:

  • 0:没有消息
  • 1:显示引发和失败消息,以及有关文件访问的消息,
  • 2:同时显示警告。
    IDT_SetFile(“tracefile.log”);

    在文件中打印消息,

    IDT_SetStandard();

    恢复屏幕输出。

公差管理

读取 IGES 期间用于公差的值

在将 IGES 转移到 Open CASCADE 技术期间,几个参数被用作不同算法的公差和精度。其中一些是使用特定函数从其他计算而来的。

3D(空间)公差
  • 封装方法Precision ::Confusion等于 10 -7用作点之间的最小距离,这些点被认为是不同的。
  • IGES 文件中的分辨率在 IGES 文件的 Global 部分中定义。它在传输过程中用作精度的基本值。
  • 当参数read.precision.mode设置为 1(“用户”)时,可以使用用户定义的变量read.precision.val代替文件中的分辨率。
  • IGESToBRep_CurveAndSurface类的EpsGeom字段是平移 IGES 对象的基本精度。它是为IGESToBRep_CurveAndSurface类及其派生类的每个对象设置的。它通过文件中的分辨率值或read.precision.val的值为传输根初始化,具体取决于read.precision.mode参数的值。它通过调用IGESToBRep_CurvAndSurface::GetEpsGeom方法返回。由于该值属于 IGES 文件的测量单位,因此通常乘以系数UnitFactor(由方法IGESToBRep_CurvAndSurface::GetUnitFactor返回) 将其转换为 Open CASCADE Technology 单位。
  • IGESToBRep_CurveAndSurface类的字段MaxTol用作某些算法的最大容差。目前,它被计算为 1 和GetEpsGeom * GetUnitFactor之间的最大值。该字段由IGEToBRep_CurvAndSurface::GetMaxTol方法返回。
2D(参数)公差
  • 封装方法Precision ::PConfusion等于0.01*Precision::Confusion,即 10 -9。它用于比较曲线的参数边界。
  • IGESToBRep_CurveAndSurface类的字段EpsCoeff是用于平移 IGES 对象的参数精度。它是为IGESToBRep_CurveAndSurface类及其派生类的每个对象设置的。目前,它始终具有默认值 10 -6。它通过调用IGESToBRep_CurvAndSurface::GetEpsCoeff方法返回。该值用于平移 2d 对象(例如,参数曲线)。
  • GeomAdaptor_Surface或BRepAdaptor_Surface类的UResolution (tolerance3d)VResolution(tolerance3d)方法返回从 3D 公差计算的曲面参数空间中的公差。当 U 和 V 参数方向都使用一个公差值时,使用UResolutionVResolution的最大值或最小值。
  • GeomAdaptor_CurveBRepAdaptor_Curve类的方法Resolution(tolerance3d)返回从 3d 公差计算的曲线参数空间中的公差。
零维公差
  • IGESToBRep_CurveAndSurface 类的字段EpsilonIGESToBRep_CurveAndSurface类的每个对象设置,并通过调用GetEpsilon方法返回。它用于比较角度和转换变换矩阵。在大多数情况下,它会在使用前重置为固定值 (10 -5 – 10 -3 )。默认值为 10 -4
平移对象时的初始公差设置

传输从一个被视为根的实体(IGES 文件中的实际根或用户选择的实体)开始。执行传输的函数(即IGESToBRep_Actor::TransferIGESToBRep_Reader::Transfer)创建一个IGESToBRep_CurveAndSurface类型的对象,用于平移几何。

该对象包含三个容差:Epsilon、EpsGeomEpsCoeff

参数Epsilon默认设置为值 10 -4。在大多数情况下,当它在包IGESToBRep中使用时,它会重置为固定值,10 -5或 10 -4或 10 -3。它在比较角度和变换矩阵时用作精度,并且对结果形状的公差没有影响。

参数EpsGeom在创建IGESToBRep_CurveAndSurface对象后立即设置为分辨率值,取自 IGES 文件的 Global 部分,或取自XSTEP.readprecision.val参数,具体取决于XSTEP.readprecision.mode的值。

参数EpsCoeff默认设置为 10 -6且未更改。

在形状传输过程中,将创建IGEToBRep_CurveAndSurface类型的新对象用于平移子形状。它们都具有与根对象相同的容差。

转移过程
翻译成几何

几何实体由IGESToBRep_BasicCurveIGESToBRep_BasicSurface类转换。这些类的方法将 IGES 文件的曲线和曲面转换为 Open CASCADE Technology 几何对象Geom_Curve、Geom_Surface和Geom_Transformation 。

由于这些对象不是 BRep 对象,因此它们没有公差。因此,公差参数在这些类别中仅用作精度:检测特定情况(例如,区分圆、椭圆、抛物线和双曲线)和检测不良情况(例如重合点)。

精度参数的使用体现在以下类中:

  • IGESToBRep_BasicCurve – 所有参数和点都与精度EpsGeom进行比较。所有转换( IGESToBRep_BasicCurve::TransferTransformation除外)都以设置为 10 -3的精度Epsilon实现(在IGESToBRep_BasicCurve::TransferTransformation中使用值 10 -5)。
  • IGESToBRep_BasicCurve::TransferBSplineCurve – BSplineCurve的所有权重都假定大于Precision::PConfusion(否则曲线不平移)。
  • IGESToBRep_BasicSurface – 所有参数和点都与精度EpsGeom进行比较。所有转换都以精度Epsilon完成,该精度设置为 10 -3
  • IGESToBRep_BasicSurface::TransferBSplineSurface – BSplineSurface的所有权重都假定大于Precision::PConfusion(否则不平移曲面)。
转换成拓扑

表示为拓扑形状和几何对象的 IGES 实体通过使用IGESToBRep_TopoCurve、IGESToBRep_TopoSurface、IGESToBRep_BRepEntityShapeFix_Wire类转换为 OCCT 形状。

IGESToBRep_BRepEntity类用于传输 BRep 实体(IGES 版本为 5.1 或更高版本),而前两个类用于转换 5.1 之前的 IGES 版本中定义的几何和拓扑。来自IGESToBRep_BRepEntity的方法调用来自IGESToBRep_TopoCurveIGESToBRep_TopoSurface的方法,而那些调用来自IGESToBRep_BasicCurveIGESToBRep_BasicSurface的方法将 IGES 几何转换为 OCCT 几何。

尽管 IGES 文件在 Global Section 中只包含一个公差参数,但 OCCT 形状的公差不同。通常,根据形状之间的局部距离(相邻边的顶点之间的距离、边的 3D 曲线及其参数曲线的偏差等)来更新容差,并且可能小于或大于文件中的精度。

以下类显示了创建形状时使用的默认公差以及在传输过程中如何更新它们。

IGESToBRep_TopoCurve类

如果实体具有对IGESData_ToolLocation::ConvertLocation的转换调用,且Epsilon值设置为 10 -4 ,则所有方法都负责从 IGES 曲线实体(TransferCompositeCurve、Transfer2dCompositeCurve、TransferCurveOnFace、TransferBoundaryOnFace、TransferOffsetCurve、TransferTopoBasicCurve)传输曲线。

  • IGESToBRep_TopoCurve::TransferPoint – 顶点由具有容差EpsGeom*UnitFactor的 Point 实体构成。
  • IGESToBRep_TopoCurve::Transfer2dPoint – 顶点由具有容差EpsCoeff的 Point 实体构成。
  • IGESToBRep_TopoCurve::TransferCompositeCurveGeneral – 从其他方法获取形状(边或线)并将它们添加到生成的线中。导线的两个相邻边缘可以连接到最大公差MaxTol
  • IGESToBRep_TopoCurve::TransferCurveOnFaceIGESToBRep_TopoCurve::TransferBoundaryOnFace从曲面上曲线的 3D 和 2D 表示构建连线。连线的边线和顶点的公差不能大于MaxTol。值EpsGeom*UnitFactor被传递到ShapeFix_Wire::SetPrecisionMaxTol被传递到ShapeFix_Wire::MaxTolerance。要了解这些参数如何影响产生的公差变化,请参阅类ShapeFix_Wire
  • IGESToBRep_TopoCurve::TransferTopoBasicCurveIGESToBRep_TopoCurve::Transfer2dTopoBasicCurve – 从基本 IGES 曲线( BSplineCurve、CopiousData、Line等)转换而来的边(或线,如果曲线具有 C0 连续性)的边界顶点是使用容差EpsGeom*构建的UnitFactor,边缘公差为Precision::Confusion。如果一条曲线被分成几条边,这些相邻边的公共顶点具有容差Precision::Confusion
IGESToBRep_TopoSurface类

此类创建的所有面都具有容差Precision::Confusion

IGESToBRep_BRepEntity类
  • IGESToBRep_BRepEntity::TransferVertex – 来自VertexList实体的顶点以容差EpsGeom*UnitFactor 构造
  • IGESToBRep_BRepEntity::TransferEdge – 来自EdgeList实体的边以容差Precision::Confusion构造。
  • IGESToBRep_BRepEntity::TransferLoop – 此函数的工作方式类似于IGESToBRep_TopoCurve::TransferCurveOnFaceIGESToBRep_TopoCurve::TransferBoundaryOnFace
  • IGESToBRep_BRepEntity::TransferFace – 人IGES 实体的面是用公差Precision::Confusion构造的。
形状治疗课程

在执行简单的映射后, IGESToBRep_Actor::Transfer()调用了形状修复算法(类ShapeFix_Shape)。形状修复算法对生成的 OCCT 形状进行校正。ShapeFix_Wire 类可以增加形状的容差。此类在IGESToBRep_BRepEntity::TransferLoopIGESToBRep_TopoCurve::TransferBoundaryOnFaceIGESToBRep_TopoCurve::TransferCurveOnFace中用于校正导线。调用此类的方法后应用于边或顶点的最大可能容差是MaxTolerance(由方法ShapeFix_Wire::MaxTolerance()设置)。

代码架构

下图说明了读取 IGES 时的调用结构。突出显示的类产生 OCCT 几何。

OpenCasCade官方开发文档翻译(9)–IGES 转换器_第1张图片

读取 IGES 中的调用结构

例子

#include “IGESControl_Reader.hxx”
#include “TColStd_HSequenceOfTransient.hxx”
#include “TopoDS_Shape.hxx”
{
IGESControl_Reader myIgesReader;
Standard_Integer nIgesFaces,nTransFaces;
myIgesReader. ReadFile (“MyFile.igs”);
//loads file MyFile.igs
Handle(TColStd_HSequenceOfTransient) myList = myIgesReader. GiveList(“iges-faces”);
//selects all IGES faces in the file and puts them into a list called //MyList,
nIgesFaces = myList-Length();
nTransFaces = myIgesReader. TransferList(myList);
//translates MyList,
cout<< “IGES Faces: “<” Transferred:”<
TopoDS_Shape sh = myIgesReader. OneShape();
//and obtains the results in an OCCT shape.
}

编写 IGES

程序

您可以通过以下步骤将 OCCT 形状转换为 IGES 实体:

  1. 初始化进程。
  2. 设置翻译参数,
  3. 执行模型翻译,
  4. 编写输出 IGES 文件。

您可以在写入文件之前翻译多个形状。每个形状都是 IGES 模型中的根实体。

涵盖的领域

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

  • 几何,
  • 拓扑。

过程描述

初始化进程

选择要用于写入输出文件的单位和模式,如下所示:

  • IGESControl_Controller::Init执行标准初始化。如果发生错误,则返回 False。
  • IGESControl_Writer写入器使用默认单位(毫米)和默认写入模式(面)。
  • IGESControl_Writer writer (UNIT)使用面写模式和 IGES 接受的任何单位。
  • IGESControl_Writer writer (UNIT,modecr)使用单位(IGES 接受)和您选择的写入模式。
    • 0:面孔,
    • 1:BRep 结果是一个IGESControl_Writer对象。
设置翻译参数

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

  • write.iges.brep.mode:允许选择写入模式:
    • “Faces” (0):OCCT TopoDS_Faces将被转换为 IGES 144(修剪曲面)实体,不会将 BRep 实体写入 IGES 文件,
    • “BRep”(1):OCCT TopoDS_Faces将被翻译成 IGES 510 (Face) 实体,IGES 文件将包含 BRep 实体。
      使用以下命令读取此参数:

      Standard_Integer byvalue = Interface_Static::IVal ( “write.iges.brep.mode” );

      修改此参数:

      Interface_Static::SetIVal ( “write.iges.brep.mode” , 1);

      默认值为“面孔”(0)。

  • write.convertsurface.mode在 BRep 模式下写入 IGES 时,此参数指示是否将基本曲面(圆柱、圆锥、球面和环形)转换为相应的 IGES 5.3 实体(如果参数值的值为 On),或者写为旋转曲面(默认情况下)。
  • write.iges.unit:允许选择单位。Open CASCADE Technology 的默认单位是“MM”(毫米)。您可以选择将文件写入 IGES 接受的任何单元。
    • 使用Standard_String byvalue = Interface_Static::CVal (“write.iges.unit”)读取此参数;
    • 用Interface_Static::SetCVal (“write.iges.unit”, “INCH”)修改这个参数;
  • write.iges.header.author:给出文件作者的名字。默认值为用户的系统名称。
    • 使用Standard_String byvalue = Interface_Static::CVal (“write.iges.header.author”)读取此参数;
    • 用Interface_Static::SetCVal (“write.iges.header.author”, “name”)修改这个值;
  • write.iges.header.company:给出发送公司的名称。默认值为“”(空)。
    • 使用Standard_String byvalue = Interface_Static::CVal (“write.iges.header.company”)读取此参数;
    • 用Interface_Static::SetCVal (“write.iges.header.company”, “Open CASCADE”)修改这个值;
  • write.iges.header.product:给出发送产品的名称。默认值为“CAS.CADE IGES 处理器 Vx.x”,其中xx表示 Open CASCADE Technology 的当前版本。
    • 使用Standard_String byvalue = Interface_Static::CVal (“write.iges.header.product”)读取此参数;
    • 用Interface_Static::SetCVal (“write.iges.header.product”, “product name”)修改这个值;
  • write.iges.header.receiver: ——给出接收公司的名称。默认值为“”(空)。
    • 使用Standard_String byvalue = Interface_Static::CVal (“write.iges.header.receiver”)读取此参数;
    • 用Interface_Static::SetCVal (“write.iges.header.receiver”, “receiver name”)修改这个值;
  • write.precision.mode:指定将分辨率值写入 IGES 文件的模式。
    • “最小” (-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)) 修改此参数.. error ..
  • write.precision.val:是用户精度值。当write.precision.mode参数值为 1时,该参数给出 IGES 文件的分辨率值。默认等于 0.0001,但可以取任何实数正(非空)值。

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

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

修改此参数:

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

默认值为 0.0001。

write.iges.resource.name

write.iges.sequence

与对应的 read.iges.* 参数相同。请注意,写入的默认序列包含DirectFaces运算符,它将基于左侧轴(在 CASCADE 中有效)的基本曲面转换为右侧轴(仅在 IGES 中有效)。

默认值 :

write.iges.resource.name – IGES,
write.iges.sequence – ToIGES.
执行 Open CASCADE Technology 形状转换

您可以在一项或多项操作中执行翻译。以下是转换拓扑和几何对象的方法:

Standard_Boolean ok = writer.AddShape ( TopoDS_Shape );

如果翻译正确执行, ok为 True,如果至少有一个实体未翻译,则为 False。

Standard_Boolean ok = writer.AddGeom (geom);

其中geomHandle(Geom_Curve)Handle(Geom_Surface)
如果翻译正确执行, ok为 True,如果至少有一个实体的几何不在允许的类型中,则为 False。

编写 IGES 文件

编写 IGES 文件:

Standard_Boolean ok = writer.Write( “filename.igs” );

给出文件名。

Standard_Boolean ok = writer.Write (S);

其中SStandard_OStream
ok如果操作正确执行,则为 True,如果发生错误(例如,如果处理器无法创建文件)则为 False。

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

翻译的对象取决于您选择的写入模式。如果您选择面模式,所有形状都会被平移,但拓扑实体的级别会变低(几何级别)。如果您选择 BRep 模式,拓扑 OCCT 形状将成为拓扑 IGES 实体。

曲线
级联形状 IGES 实体类型 注释
Geom_BsplineCurve 126: BSpline Curve
Geom_BezierCurve 126: BSpline Curve
Geom_TrimmedCurve All types of translatable IGES curves 实体输出的类型取决于基曲线的类型。如果曲线没有被修剪,限制点将由 CASCADE RealLast 值定义。
Geom_Circle 100: Circular Arc or 126: BSpline Curve 如果Geom_Circle关闭 ,则输出 BSpline Curve
Geom_Ellipse 104: Conic Arc or 126: BSpline Curve 圆锥弧的形式为 1。如果Geom_Ellipse闭合,则输出 BSpline Curve。
Geom_Hyperbola 104: Conic Arc 表格 2
Geom_Parabola 104: Conic Arc 表格 3
Geom_Line 110: Line
Geom_OffsetCurve 130: Offset Curve
表面
级联形状 IGES 实体类型 注释
Geom_BSplineSurface 128: BSpline Surface
Geom_BezierSurface 128: BSpline Surface
Geom_RectangularTrimmedSurface All types of translatable IGES surfaces. 实体输出的类型取决于基面的类型。如果曲面未修剪且具有无限边/边,则 IGES 中边的坐标将限制为 CASCADE RealLast值。
Geom_Plane 128: BSpline Surface or 190: Plane Surface 如果您在面模式下工作,则会输出一个 BSpline 曲面(U 和 V 的度数为 1)。如果您在 BRep 模式下工作,则会输出一个平面曲面。
Geom_CylindricalSurface 120: Surface Of Revolution
Geom_ConicalSurface 120: Surface Of Revolution
Geom_SphericalSurface 120: Surface Of Revolution
Geom_ToroidalSurface 120: Surface Of Revolution
Geom_SurfaceOfLinearExtrusion 122: Tabulated Cylinder
Geom_SurfaceOfRevolution 120: Surface Of Revolution
Geom_OffsetSurface 140: Offset Surface
拓扑实体——人脸模式下的平移
级联形状 IGES 实体类型 注释
Single TopoDS_Vertex 116: 3D Point
TopoDS_Vertex in a TopoDS_Edge No equivalent 不转移。
TopoDS_Edge All types of translatable IGES curves 输出 IGES 曲线将是对应于 Open CASCADE Technology 定义的曲线。
Single TopoDS_Wire 102: Composite Curve TopoDS_Wire中的每个TopoDS_Edge 都会产生一条曲线。
TopoDS_Wire in a TopoDS_Face 142: Curve On Surface 如果两条曲线(3D 和 pcurve)都被定义并根据导线中是否存在一条或多条边而产生一条简单曲线或一条复合曲线,则它们都会被转移。注意:如果基础曲面是平面 (108),则仅使用 3D 曲线。
TopoDS_Face 144: Trimmed Surface
TopoDS_Shell 402: Form 1 Group or no equivalent 仅当TopoDS_Shell包含多个TopoDS_Face时,才会创建组。IGES 组包含修剪曲面。
TopoDS_Solid 402: Form 1 Group or no equivalent 仅当TopoDS_Solid包含多个TopoDS_Shell时,才会创建组。每个TopoDS_Shell创建一个 IGES 实体。
TopoDS_CompSolid 402: Form 1 Group or no equivalent 仅当TopoDS_CompSolid包含多个TopoDS_Solid时,才会创建组。每个TopoDS_Solid创建一个 IGES 实体。
TopoDS_Compound 402: Form 1 Group or no equivalent 仅当TopoDS_Compound包含多个项目时,才会创建组。每个TopoDS_ShapeTopoDS_Compound中创建一个 IGES 实体。如果TopoDS_Compound嵌套到另一个TopoDS_Compound中,则它不会被映射。
拓扑实体 – BRep 模式下的翻译
级联形状 IGES 实体类型 注释
Single TopoDS_Vertex No equivalent 不转移。
TopoDS_Vertex in a TopoDS_Edge One item in a 502: VertexList
TopoDS_Edge No equivalent 不是这样转移的。该实体作为 Loop 实体的一部分。
TopoDS_Edge in a TopoDS_Wire One item in a 504: EdgeList
TopoDS_Wire 508: Loop
TopoDS_Face 510: Face 如果面的几何支撑是一个平面,它将被转换为一个 190 实体PlaneSurface
TopoDS_Shell 514: Shell
TopoDS_Solid 186: Manifold Solid
TopoDS_CompSolid 402 Form1 Group or no equivalent 仅当TopoDS_Compound包含多个项目时,才会创建组。为TopoDS_CompSolid中的每个TopoDS_Solid创建一个 IGES 流形实体。
TopoDS_Compound 402 Form1 Group or no equivalent 仅当TopoDS_Compound包含多个项目时,才会创建组。每个TopoDS_ShapeTopoDS_Compound中创建一个 IGES 实体。如果TopoDS_Compound嵌套到另一个TopoDS_Compound 中,则它不会被映射。

公差管理

在 IGES 文件中设置分辨率

在 IGES 文件中设置分辨率有多种可能性。它们由 write.precision.mode 参数控制;此参数的值与设置的分辨率之间的依赖关系在段落设置转换参数中进行了描述。

如果参数write.precision.mode的值为 -1、0 或 1,则根据要转换的形状内的子形状的公差计算分辨率。在这个计算中,只有TopoDS_EdgesTopoDS_Vertices的公差参与,因为它们反映了形状的准确性。TopoDS_Faces在计算中被忽略,因为它们的公差可能会影响计算得到的分辨率,而 IGES 分辨率主要涉及点和曲线而不是曲面。

代码架构

通话图表

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

OpenCasCade官方开发文档翻译(9)–IGES 转换器_第2张图片

编写IGES的类结构

例子

#include < IGESControl_Controller.hxx >
#include < IGESControl_Writer.hxx >
#include < TopoDS_Shape.hxx >
Standard_Integer main()
{
IGESControl_Controller::Init ();
IGESControl_Writer ICW (;MM;, 0);
//创建一个写入器对象,用于以毫米为单位的人脸模式写入
TopoDS_Shape sh;
ICW.AddShape (sh);
//将形状 sh 添加到 IGES 模型
ICW.ComputeModel();
Standard_Boolean OK = ICW.Write (;MyFile.igs;);
//将模型写入文件 MyFile.igs
}

使用 XSTEPDRAW

XSTEPDRAW UL 旨在创建可执行文件,以在 DRAW 环境中以交互方式测试 XSTEP 接口。它提供了一组特定于数据交换任务的额外 DRAW 命令,允许加载和写入数据文件以及分析生成的数据结构和形状。

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

设置接口参数

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

Draw> param [ [< value>]]

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

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

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

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

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

读取 IGES 文件

有关在读取 IGES 文件中使用的参数的说明,请参阅设置转换参数。

这些参数由命令param设置:

描述 姓名 价值观
输入实体的 精度 读取精度模式 0 或 1
read.precision.val 真实的
B样条的连续性 读取.iges.bspline.continuity 0-2
曲面曲线 读取.surfacecurve.mode 2、3 或 0

可以只将 IGES 文件加载到内存中(即用文件中的数据填充模型),也可以读取它(即加载所有实体并将其转换为 OCCT 形状)。

加载由命令完成

Draw> xload

加载文件后,可以调查加载数据的结构。要了解如何操作,请参阅Analyzing the transfered。

IGES 文件的读取由命令完成

Draw> igesbrep []

如果文件已经由xloadigesbrep命令加载,则此处可以使用点代替文件名。在这种情况下,只会将 IGES 实体转换为 OCCT 形状。

命令igesbrep将交互地要求用户选择一组要转换的实体:

ñ 模式 描述
0 结尾 完成转换并退出 igesbrep
1 可见根 仅转换可见根
2 所有根 转换所有根
3 一个实体 用用户提供的数字转换实体
4 选择 仅转换选择中包含的实体

在加载选定的一组实体后,将询问用户应如何将加载的实体转换为 OCCT 形状(例如,每个根一个形状或所有实体一个形状)。也可以将加载的形状保存在文件中,并取消加载。

igesbrep命令的第二个参数定义了加载形状的名称。如果创建了多个形状,它们将获得索引名称。例如,如果最后一个参数是 ‘s’,它们将是s_1, … s_N。

指定模型中选定实体的范围,默认为xst-transferrable-roots。可以指定星号“*”代替iges-visible-transf-roots。有关选择的可能值,参阅选择实体部分。

可以使用以下命令代替igesbrep :

Draw> trimport

它将每个选定实体的翻译结果输出为一个形状,或

Draw> trimpcomp

它将所有选定实体的转换结果输出为一个形状(多个实体的TopoDS_Compound)。

可以指定星号“*”而不是selection,它表示xst-transferrable-roots

在 IGES 转换过程中,会创建 IGES 实体和 OCCT 形状之间的对应关系图。以下命令可用:

  • Draw > tpent # – 提供有关给定 IGES 实体的翻译结果的信息;
  • Draw > tpdraw # – 创建一个对应于 IGES 实体的 OCCT 形状;
  • Draw > fromshape  – 提供对应于 OCCT 形状的 IGES 实体的编号;
  • Draw > tpclear – 清除 IGES 实体和 OCCT 形状之间的对应关系图。

分析传输的数据

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

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

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

绘制 > 数据 <符号>

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

象征 输出
G 打印文件头中包含的信息(开始和全局部分)
c 或 f 运行加载数据完整性的检查程序并打印结果统计信息(f 仅适用于失败,而 c 具有失败和警告消息)
与 c 或 f 相同,带有失败或警告实体的列表
米或升 与 t 相同,但也打印每个实体的状态
列出模型的所有实体及其编号、类型、有效性状态等。
r 与 e 相同,但仅列出根实体

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

特殊对象类型 手术
选择过滤器 允许选择加载模型的实体子集
计数器 计算模型数据的统计数据

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

绘制 > 列表项

在以下命令中,如果指定了多个参数,则每个后续选择的结果将应用于前一个选择的结果。

绘制 > givelist []

打印由选择参数定义的加载实体列表。

绘制 > givecount []

打印由选择参数定义的许多加载实体。

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

  • Draw > count [ …] – 每种类型仅打印与参数定义的标准匹配的实体数量。
  • Draw > sumcount [ …] – 打印符合参数定义的标准的所有类型的实体总数以及对应于一种类型的最大数量。
  • Draw > listcount [ …] – 打印符合参数定义的标准的每种类型的实体列表。

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

柜台 手术
xst 类型 计算每种 OCCT 类型的实体数量
iges类型 计算每种 IGES 类型和形式的实体数量
iges 级别 计算有多少实体位于不同的 IGES 级别

命令:

绘制 > listtypes

给出在最后加载的文件中遇到的实体类型的列表(每种类型有多个 IGES 实体). 该列表不能针对所有实体显示,而是针对其中的一个子集显示。该子集由可选的选择参数定义。

IGES 文件中的实体按后续顺序编号。实体可以通过其编号 (#) 或标签来识别。标签是字母“D”,其后是 IGES 文件目录条目部分中包含该实体数据的第一行的索引。可以根据数字“D(2*# -1)”计算标签。例如,实体#6 具有标签 D11。

  • Draw > elab # – 为具有已知数字的实体提供标签;
  • Draw > enum # – 为具有给定标签的实体打印一个数字;
  • Draw > entity #  – 给出一个 IGES 实体的内容;
  • Draw > estat # – 提供给定实体引用的实体列表和引用它的实体列表。
估计读取 IGES 的结果

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

绘制 > tpstat [*|?]<符号> [<选择>]

提供上次传输的所有统计信息,包括从 IGES 映射到 OCCT 类型的传输实体列表,以及失败和警告消息。参数定义将打印哪些信息:

  • G – 一般统计数据(结果和消息列表)
  • C – 所有警告和失败消息的计数
  • C – 所有警告和失败消息的列表
  • F – 所有失败消息的计数
  • F – 所有失败消息的列表
  • N – 所有转移根的列表
  • S – 相同,具有源实体类型和结果类型
  • B – 相同,带有消息
  • T – 几何类型的根数
  • R – 拓扑类型的根数
  • l – 相同,具有源实体的类型

参数nsbtr之前的符号 ‘*’使其适用于所有实体(不仅适用于根)。标志 ‘?’ 在nsbt之前,将信息范围限制为无效实体。

可选参数可以使用选定的实体子集限制命令的操作。要获得帮助,请不带参数运行此命令。

例如,要获得 IGES 面的平移比率,您可以使用。

绘制 :> tpstat *l iges-faces

同一命令的第二个版本是 TPSTAT(不是大写)。

绘制 :> TPSTAT <符号>

符号可以是以下值:

  • g – 一般统计数据(结果和消息列表)
  • c – 所有警告和失败消息的计数
  • C – 所有警告和失败消息的列表
  • r – 每种类型产生的 OCCT 形状的计数
  • s – IGES 根和生成的 OCCT 形状的映射

有时,IGES 面的修剪轮廓(即实体 141 对应 143,实体 142 对应 144)可能会在平移过程中由于失败而丢失。

丢失修剪的数量和对应的 IGES 实体可以通过以下命令获得:

绘制 > tplosttrim []

它输出失去修剪的人脸的等级和 DE 数量,以及每种类型(143、144、510)的数量及其总数。如果一张脸失去了几个修剪,它只会输出一次。

可选参数可以是TrimmedSurface、BoundedSurfaceFace以指定 IGES 面的唯一类型。

例如,要获得未修剪的 144 个实体,请使用命令

绘制 > tplosttrim TrimmedSurface

要获取有关 OCCT 形状内容的信息,请使用命令

绘制 > statshape

它输出一个形状中每种形状(顶点、边、线等)的数量和一些几何数据(C0曲面、曲线、间接曲面等的数量)。

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

要分析形状的内部有效性,请使用命令

绘制 > checkbrep

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

将包含没有无效子形状的原始形状。

要获取有关子形状公差的信息,请使用命令

绘制 > 公差 [ [] []]

它为每种具有公差的子形状输出最大、平均值和最小值的公差,或者它可以输出整个形状的所有子形状的公差。

当指定minmax参数时,此命令输出名称为的形状及其总数,公差在[min, max]范围内。

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

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

编写 IGES 文件

有关在读取 IGES 文件中使用的参数的说明,请参阅设置转换参数。参数由命令param设置:

描述 姓名 价值观
作者 XSTEP.iges.header.author 细绳
公司 XSTEP.iges.header.company 细绳
接收者 XSTEP.iges.header.receiver 细绳
形状的写入模式 XSTEP.iges.writebrep.mode 0/面或 1/BRep
测量单位 XSTEP.iges.unit 1-11(或字符串值)

可以在一个文件中写入多个形状。要开始写入新文件,请输入命令

Draw> 新模型

此命令清除InterfaceModel以使其为空。

Draw绘制 > brepiges []

将指定的形状转换为 IGES 实体并将它们放入InterfaceModel

Draw> writeall

允许将准备好的模型写入名为filename.igs的文件。

读取和写入 IGES

从 IGES 读取

加载 IGES 文件

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

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

加载文件只记忆,但不翻译数据。

检查加载的 IGES 文件

此步骤不是强制性的。参见上面检查 IGES 文件的描述。

设置转换为 XDE 的参数

参见上面设置翻译参数的描述。

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

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

将 IGES 文件转换为 XDE

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

Standard_Boolean ok = reader.Transfer(doc);

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

写入 IGES

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

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

设置从 XDE 到 IGES 的转换参数

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

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

将 XDE 文档翻译成 IGES

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

IFSelect_ReturnStatus aRetSt = aWriter.Transfer(doc);

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

编写一个 IGES 文件

编写一个 IGES 文件:

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

或者

IFSelect_ReturnStatus statw = writer.WriteFile (S);

其中 S 是 OStream。

展开阅读全文
© 版权声明
THE END

你可能感兴趣的:(opencascade,opencascade,c++,算法)