月度归档: 2018 年 3 月

  • Exporting a STEP file with named surfaces from PTC Creo

    从PTC Creo导出带有命名曲面的STEP文件

    在准备用于数值模拟的几何体时,通常需要标记模型中的各个表面。这些表面随后可用作入口,或者可以在结构模拟中施加载荷和压力。.

    STEP 格式支持命名实体。问题是:如何在 CAD 程序中设置名称?以及如何确保它们实际存储在 STEP 文件中?下文将针对 PTC Creo 软件解答这些问题。.

    为曲面指定名称

    选择“文件”>“准备”,然后选择“打开模型属性”,接着在模型属性对话框中选择“名称”:

      

    然后,您可以通过单击来选择人脸,并在对话框中输入姓名:

    PTC Creo assign name to face or surface

    导出 STEP 文件中的名称

    如果以默认设置导出STP文件,文件中的名称将不会被保存。您需要更改导出设置才能保留它们。.

    通过“文件”>“选项”打开设置对话框。然后转到“配置编辑器”。在此,您需要添加选项“intf_out_assign_names”并将其设置为“user_name”。.

    PTC Creo STEP export settings

    访问 ISCAD 中的命名实体

    现在可以通过已命名的名称访问这些面,例如在 ISCAD 中。导入 STEP 文件后,按 Ctrl-I 即可浏览其子实体(见下文)。这些已命名的面在层次结构中显示为“face_”:

    InsightCAE ISCAD import STP with named faces

  • Importing IGES File (*.IGS) from FreeShip to OpenCASCADE

    从 FreeShip 导入 IGES 文件 (*.IGS) 到 OpenCASCADE

    FreeShip软件是设计船体的一个方便的工具。.
    FreeShip的功能基本上仅限于船体的外部设计。对于其他所有方面,则需要一个真正的CAD系统。它有一个IGES导出功能用于传输。.
    还有一个后续版本:DelftShip。DelftShip 的免费版本已删除 IGES 导出功能,该功能仅在商业版本中可用。我没有此版本,因此无法对其进行测试。.
    我想在我司的工具 ISCAD 中使用几何体。它基于 OpenCASCADE。.
    FreeShip 2.6 中建模的船体几何形状如下所示:
    导出到 IGES 文件并不令人惊奇,并且创建了 40 个单独的面。.
    下一步是导入OpenCASCADE。但这里有一个问题。OpenCASCADE (v7.2.0) 报告:

    报告:40个未知实体。.

    已加载实体总数 41。.

    没有任何显示。尽管有报道称较早的版本可以导入(https://forum.freecadweb.org/viewtopic.php?t=1670),该导入在当前 OCC 版本以及不同旧版本的 Salome(和 OpenCASCADE)中均无法正常工作。另一方面,该导入在商业 CAD 软件 Creo 等中可以正常工作。.

    最后,一项研究表明 FreeShip 导出的文件仅包含类型为 128(样条曲面)的实体。此外,文件开头有一个颜色定义。在 128 曲面的参数块的末尾(参见例如. https://wiki.eclipse.org/IGES_file_Specification#Rational_B-Spline_Surface_.28Type_128.29) 是曲面的起点和终点参数(U 和 V 的最小值/最大值)。这些条目会被 FreeShip 忽略,而对于 OpenCASCADE 来说,这是一个错误。.

    一种解决方法是修补OpenCASCADE的IGES导入。相应的代码位于IGESGeom/IGESGeom_ToolBSplineSurface.cxx文件的第188行开始。我移除了错误消息并插入了默认参数限制:

      如果 (!PR.ReadReal(PR.Current(), aUmin) || !PR.ReadReal(PR.Current(), aVmin)){
        //Message_Msg Msg106("XSTEP_106");
        //PR.SendFail(Msg106);
        aUmin=0.0;
        aVmin=0.0;
      }
    
      如果 (!PR.ReadReal(PR.Current(), aUmax) || !PR.ReadReal(PR.Current(), aVmax)){
        //Message_Msg Msg107("XSTEP_107");
        //PR.SendFail(Msg107);
        aUmax=1.0;
        aVmax=1.0;
      }

    有了这些修改,导入就可以正常工作了: