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

先上  运行结果图》》

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);    //(显示线框)
}

至此完成,运行结果》》

  • 2
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值