先上  运行结果图》》

OpenCASCADE具有支持读取STEP的翻译器:

1.对于STEP:

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

2.OpenCASCADE允许在以下的领域使用 STEP:

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

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

仅几何、拓扑STEP实体(形状)和装配结构由基本转换器进行转换。无法在此级别转换的数据也从STEP文件加载,并且可以稍后进行转换。XDE STEP转换器,将名称、颜色、图层、验证属性和其他与形状和程序集关联的数据转换为XDE文档。
文件转换在编程模式下通过C++调用执行。

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

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

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

数据定义和检查的特定包;
驱动程序支持的物理访问;
驱动支持的Open Cascade或应用数据的转换(OCC-BREP和XDE ard基本提供);

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

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

它们的主要特点是:
按数据类型集模块化,可以分层以反映描述资源和应用程序协议的原始模块化;

作为C++类实现,提供对其成员的全面访问;
基本采用早期绑定,性能好,安装使用方便,支持非编译描述。
这提供了一种自然的方式来处理不受支持的协议,当它们共享通用定义时,例如几何图形,然后可以利用这些定义。作为已经支持的数据类型,通用框架为STEP的新用途奠定了良好的基础,无论是在数据定义(来自ISO或工业联盟的协议)上,还是在与应用数据的映射上。

4.接口方面:

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

STEP接口还将OCCT 模型转换为STEP文件。此接口生成的 STEP文件符合STEP AP 203或AP214(一致性等级2,模式的CD或DIS版本),具体取决于用户的选项。
基本接口读取和写入几何、拓扑 STEP 数据和装配结构。
该界面能够翻译一个实体、一组实体或整个文件。

其他类型的数据,如颜色、验证属性、层、GD&T(几何尺寸与公差)、名称和程序集结构,可以在XDE工具的帮助下读取或写入:STEPCAFControl_Reader和STEPCAFControl_Writer。
要在导出为STEP格式时选择转换模式,请使用STEPControl_STEPModelType.
有一组与翻译有关的参数,可以在翻译开始之前设置。

5.注意的事项:

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

介绍了这么多,回到上述STEP模型的实现,上述仅仅读取了STEP模型几何体的拓扑形状,没有其他类型的数据(比如颜色、层、几何尺寸和公差、程序集结构等等),用到了OCCT中的STEPControl_Reader 类,STEPControl_Reader生成一个TopoDS_Shape,这是一个定义几何体的拓扑形状,但没有任何名称、颜色、材质或任何其他可以指定给模型的属性。

头文件添加:

#include <STEPControl_Reader.hxx>

在****Doc.h中添加  ReadSTEP() 函数;

public:
void ReadSTEP();

函数的实现:

void COCCmfcMDIDoc::ReadSTEP()
{//读取STEP文件STEPControl_Reader aReader_Step;aReader_Step.ReadFile("model.step");//检查文件加载状态aReader_Step.PrintCheckLoad(Standard_False, IFSelect_ItemsByEntity);//加载step文件Standard_Integer NbRoots = aReader_Step.NbRootsForTransfer();// 获取可转移根的数量Standard_Integer num = aReader_Step.TransferRoots();//翻译所有可转换的根,并返回//成功翻译的次数//读取到TopoDS_Shape结构中TopoDS_Shape aShape = aReader_Step.OneShape();Handle(AIS_Shape) myAISSphere = new AIS_Shape(aShape);myAISContext->Display(myAISSphere, Standard_False);//myAISSphere->SetColor(Quantity_NOC_CYAN);//设置模型颜色
}

“model.step” 是我的Step测试文件名称

接着在*****View.h 的成员函数virtual void OnDraw(CDC* pDC) 中调用此函数:

void COCCmfcMDIView::OnDraw(CDC* /*pDC*/)
{COCCmfcMDIDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);if (!pDoc)return;// TODO: 在此处为本机数据添加绘制代码myView->MustBeResized();myView->Update();//pDoc->DrawSphere(2.0);  //画一个球//读取三维模型pDoc->ReadSTEP();fitAll();}

下面进行模型面的边界线的添加:

在ReadSTEP()代码后面继续添加 以设置边界线条

void COCCmfcMDIDoc::ReadSTEP()
{//读取STEP文件STEPControl_Reader aReader_Step;aReader_Step.ReadFile("model.step");//检查文件加载状态aReader_Step.PrintCheckLoad(Standard_False, IFSelect_ItemsByEntity);//加载step文件Standard_Integer NbRoots = aReader_Step.NbRootsForTransfer();// 获取可转移根的数量Standard_Integer num = aReader_Step.TransferRoots();//翻译所有可转换的根,并返回//成功翻译的次数//读取到TopoDS_Shape结构中TopoDS_Shape aShape = aReader_Step.OneShape();Handle(AIS_Shape) myAISSphere = new AIS_Shape(aShape);myAISContext->Display(myAISSphere, Standard_False);//myAISSphere->SetColor(Quantity_NOC_CYAN);//设置模型颜色//设置边界线条myAISContext->DefaultDrawer()->SetFaceBoundaryDraw(true);myAISContext->DefaultDrawer()->SetFaceBoundaryAspect(new Prs3d_LineAspect(Quantity_NOC_CYAN, Aspect_TOL_SOLID, 1.0));myAISContext->DefaultDrawer()->SetIsoOnTriangulation(true);    //(显示线框)
}

至此完成,运行结果》》

OpenCASCADE(OCC)读取 STEP 模型文件并在MFC中显示相关推荐

  1. 解决windows文件在linux系统中显示乱码的问题

    解决windows文件在linux系统中显示乱码的问题 参考文章: (1)解决windows文件在linux系统中显示乱码的问题 (2)https://www.cnblogs.com/liyanpin ...

  2. 初探OSG+Opencascade在qt上的实践值获取模型颜色并在OSG中显示

    很久没有正式写过一篇博客,之前因为工作原因,致使个人项目一直停滞,在出差回来后,决定利用晚上的空闲时间重新对之前的知识进行梳理和补充,前版本中实现了如何利用opencascade读取stp模型,并显示 ...

  3. python读取ansi编码文件,如何在Python中同时读取ANSI和Unicode txt文件?

    我是python新手,遇到了一个奇怪的问题: 当一个目录中有50个txt文件时,我希望读取每个.txt文件并将其内容保存在一个唯一的变量中,例如:**file = open(fcf[i], 'r') ...

  4. scala读取数据从文件或者其他url中

    scala读取数据:主要使用source单例对象进行读取,在使用source单例对象前需要先导包,import scala.io.Source 1.1 按行读取:以行为单位进行对象读取,来读取数据源中 ...

  5. solidworks导出urdf文件并在ROS中显示

    01 solidworks导出urdf文件 官网下载插件:http://wiki.ros.org/sw_urdf_exporter 然后到github上下载插件,虽然我是solidworks2022, ...

  6. mac中python怎么打开中文txt文件-mac在matplotlib中显示中文的操作方法

    Matplotlib 是一个 Python 的 2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形 . 通过 Matplotlib,开发者可以仅需要几行代码,便可以生成绘图,直方 ...

  7. c语言中读取内存的文件,c++从内存中读取文件内容,内容写到内存 实现文件的内存共享代码实例...

    使用c++代码进行内存共享操作,内存共享可以通过key value的形式来保存内存,后面可以使用key值来直接读取内存,效率会很高/ 函数说明: shmget(key_t key, size_t si ...

  8. 利用 Livox-SDK 解析 lvx 文件并在 CloudCompare 中显示

    利用 Livox-SDK 开发的程序,很早就完成了,今天把它们整理出来分享出来给大家. 解析 lvx 文件 exe 下载地址:lvx 批量转 las.这是一个解析 lvx 文件的轻量级的控制台程序.支 ...

  9. Linux显示txt文件,如何在Linux中显示文本文件中的某些行?

    sed -n '10000000,10000020p' filename 你可能能够加快这一点: sed -n '10000000,10000020p; 10000021q' filename 在这些 ...

最新文章

  1. mysql 集群 备份_mysql cluster集群备份还原
  2. 1.编写程序,打印基本ASCII码表(可印刷32到126)。
  3. Icon class生成器(Python)
  4. 创维linux进入工厂模式,创维电视怎么进入工厂模式?
  5. 高等数学下-赵立军-北京大学出版社-题解-练习10.4
  6. PDM系统服务器管理,基于PDM的异地协同设计系统
  7. typora 分割线_实战 | 五分钟,使用Typora+PicGo提升百倍写作效率
  8. PyTorch 1.8版本!正式支持AMD GPU
  9. 使用Visual Studio OnlineSQL Server数据库源控制:Git
  10. 改变灰度图像直方图的均值和标准差
  11. 库存出现负数 mysql_前台支付商品成功后,sku表库存,购买数量会重复执行减操作好几次了,导致库存为负数...
  12. Android Studio出现Error:No service of type Factory available in ProjectScopeServices.
  13. c语言办公用品管理系统,恒达办公用品管理系统
  14. 解决AD13不能复制原理图的问题
  15. 手机QQ聊天记录备份
  16. .net 必看书籍1
  17. git reset --soft命令的使用
  18. python遇到错误跳过_python 如何跳过异常继续执行
  19. 送给大一新生的一些话
  20. 德尔塔病毒劲敌!杨晓明团队发现单抗有效,临床申报正在推进,研究已登Nature子刊...

热门文章

  1. 电脑与移动设备的USB网络热点恋爱方法
  2. linux实验mkdir命令,linux基础命令(1)mkdir命令
  3. 【个人笔记】嵌入式多种通讯方式总结
  4. 疯狂java讲义第五章课后习题答案
  5. MyBatis环境搭建
  6. php taglib.php,thinkphp5 taglib自定义标签教程
  7. windows7和Linux双系统,使用MBRFIX删除Linux
  8. Unity(二十一) 关于Logitech罗技G29开发
  9. o365不能登录的问题
  10. Android app 性能测试以及专项测试