Opencascade基础教程(2):在VS2013下搭建Opencascade环境

本文详细介绍了如何在VisualStudio2013中新建MFC项目,并配置Opencascade环境,包括添加头文件、库路径、设置调试环境和编写相关类的初始化代码,最终实现编译和运行一个基本的Occ环境。
摘要由CSDN通过智能技术生成

一、新建MFC项目

1.1、打开vs2013新建MFC项目,名称输入OCCDemo,点击确定,如图:

请添加图片描述

1.2、点击下一步请添加图片描述

1.3、选择office(F),请添加图片描述

1.4、点击下一步请添加图片描述

1.5、点击下一步请添加图片描述

1.6、点击下一步请添加图片描述

1.7、去掉“导航窗格”,点击下一步

请添加图片描述

1.8、点击下一步请添加图片描述

1.9、点击完成请添加图片描述

1.10、选择64位编译

请添加图片描述

1.11、编译完成运行如图

请添加图片描述

二、配置Opencascade环境

说明:配置occ主要需要一下参数:
Handle(OpenGl_GraphicDriver) m_GraphicDriver; //OpenGl图形驱动程序
Handle(XCAFApp_Application) m_OCCApp;//实现DECAF文档的应用程序
Handle(AIS_InteractiveContext) m_AISContext;//交互式上下文对象
Handle(V3d_Viewer) m_Viewer;//查看器
Handle(TDocStd_Document) m_OCCDoc;//occ文档类
Handle(V3d_View) m_View;//为Viewer应用程序定义应用程序对象View

2.1、配置occ头文件和库路径:

在这里插入图片描述
在这里插入图片描述

2.2、附加依赖库:

在这里插入图片描述
具体库如下:
TKBRep.lib;TKBool.lib;TKCAF.lib;TKCDF.lib;TKernel.lib;TKFeat.lib;TKFillet.lib;TKG2d.lib;TKG3d.lib;TKGeomAlgo.lib;TKGeomBase.lib;TKHLR.lib;TKMath.lib;TKOffset.lib;TKPrim.lib;TKService.lib;TKTopAlgo.lib;TKV3d.lib;TKXSBase.lib;TKBo.lib;TKMesh.lib;TKShHealing.lib;TKStep.lib;TKIGES.lib;TKMeshVS.lib;TKSTL.lib;TKVRML.lib;TKXDEDRAW.lib;TKXSDRAW.lib;TKOpenGL.lib;TKXCAF.lib;TKXDESTEP.lib;TKLCAF.lib;TKVCAF.lib;TKXDEIGES.lib;TKBin.lib;TKXml.lib

2.3、引入头文件,在 stdafx.h 添加常用头文件:

#include <AIS_InteractiveContext.hxx>
#include <AIS_InteractiveObject.hxx>
#include <AIS_Shape.hxx>
#include <AIS_SequenceOfInteractive.hxx>
#include <AIS_Trihedron.hxx>

#include <Aspect_Background.hxx>
#include <Aspect_TypeOfLine.hxx>
#include <Aspect_WidthOfLine.hxx>
#include <Bnd_Box2d.hxx>
#include <BndLib_Add2dCurve.hxx>
#include <BRep_Builder.hxx>
#include <BRep_Tool.hxx>


#include <BRepBuilderAPI.hxx>
#include <BRepAlgo.hxx>

#include <BRepTools.hxx>
#include <Standard_DefineHandle.hxx> 
#include <DsgPrs_LengthPresentation.hxx>
#include <GCE2d_MakeSegment.hxx>
#include <GCPnts_TangentialDeflection.hxx>
#include <Geom_Axis2Placement.hxx>
#include <Geom_CartesianPoint.hxx>
#include <Geom_Line.hxx>
#include <Geom_Surface.hxx>
#include <Geom2d_BezierCurve.hxx>
#include <Geom2d_BSplineCurve.hxx>
#include <Geom2d_Curve.hxx>
#include <Geom2d_TrimmedCurve.hxx>
#include <Geom2dAdaptor_Curve.hxx>
#include <GeomAbs_CurveType.hxx>
#include <GeomAdaptor_Curve.hxx>
#include <GeomTools_Curve2dSet.hxx>
#include <gp_Ax2d.hxx>
#include <gp_Circ2d.hxx>
#include <gp_Dir2d.hxx>
#include <gp_Lin2d.hxx>
#include <gp_Pnt2d.hxx>
#include <gp_Vec.hxx>
#include <gp_Vec2d.hxx>
#include <Graphic3d_NameOfMaterial.hxx>
#include <MMgt_TShared.hxx>
#include <OSD_Environment.hxx>
#include <Precision.hxx>
#include <Prs3d_Drawer.hxx>
#include <Prs3d_IsoAspect.hxx>
#include <Prs3d_LineAspect.hxx>
//#include <Prs3d_Projector.hxx>
#include <Prs3d_Text.hxx>
#include <Quantity_Factor.hxx>
#include <Quantity_Length.hxx>
#include <Quantity_NameOfColor.hxx>
#include <Quantity_PhysicalQuantity.hxx>
#include <Quantity_PlaneAngle.hxx>
#include <Quantity_TypeOfColor.hxx>
#include <SelectMgr_EntityOwner.hxx>
#include <SelectMgr_SelectableObject.hxx>
#include <SelectMgr_Selection.hxx>
#include <SelectMgr_SelectionManager.hxx>
#include <Standard_Boolean.hxx>
#include <Standard_CString.hxx>
#include <Standard_ErrorHandler.hxx>
#include <Standard_Integer.hxx>
#include <Standard_IStream.hxx>
#include <Standard_Macro.hxx>
#include <Standard_NotImplemented.hxx>
#include <Standard_OStream.hxx>
#include <Standard_Real.hxx>
#include <StdPrs_Curve.hxx>
#include <StdPrs_Point.hxx>
#include <StdPrs_PoleCurve.hxx>
#include <TCollection_AsciiString.hxx>
#include <TColgp_Array1OfPnt2d.hxx>
#include <TColgp_HArray1OfPnt2d.hxx>
#include <TCollection_AsciiString.hxx>
#include <TColStd_HSequenceOfTransient.hxx>
#include <TColStd_MapIteratorOfMapOfTransient.hxx>
#include <TColStd_MapOfTransient.hxx>
#include <TopExp_Explorer.hxx>
#include <TopoDS.hxx>
#include <TopoDS_Compound.hxx>
#include <TopoDS_ListIteratorOfListOfShape.hxx>
#include <TopoDS_Shape.hxx>
#include <TopoDS_Solid.hxx>
#include <TopoDS_Vertex.hxx>
#include <TopExp.hxx>
#include <TopTools_ListIteratorOfListOfShape.hxx>
#include <TopTools_HSequenceOfShape.hxx>
#include <UnitsAPI.hxx>
#include <V3d_View.hxx>
#include <V3d_Viewer.hxx>
#include <WNT_Window.hxx>
#include <BRepPrimAPI_MakeBox.hxx>
#include <BRepPrimAPI_MakeCylinder.hxx>

// OCAF
#include <TDocStd_Document.hxx>
#include <TPrsStd_AISViewer.hxx>
#include <TDF_Label.hxx>
#include <TDF_Reference.hxx>
#include <TDF_ChildIterator.hxx>
#include <TNaming_NamedShape.hxx>
#include <TNaming_Builder.hxx>
#include <TDataStd_Real.hxx>
#include <TFunction_Logbook.hxx>
#include <TPrsStd_AISPresentation.hxx>
#include <TDataStd_Name.hxx>
#include <TFunction_DriverTable.hxx>
#include <TFunction_Function.hxx>
#include <TDataStd_Integer.hxx>

2.4、配置调试环境:(如果不在这里配置dll路径,需要把涉及到的所有dll复制到debug或release目录下)

PATH=C:\OpenCASCADE-7.4.0-vc14-64\ffmpeg-3.3.4-64\bin;C:\OpenCASCADE-7.4.0-vc14-64\opencascade-7.4.0\win64\vc12\bind;C:\OpenCASCADE-7.4.0-vc14-64\freeimage-3.17.0-vc14-64\bin;C:\OpenCASCADE-7.4.0-vc14-64\tcltk-86-64\bin;C:\OpenCASCADE-7.4.0-vc14-64\tbb_2017.0.100\bin\intel64\vc12;C:\OpenCASCADE-7.4.0-vc14-64\freetype-2.5.5-vc14-64\bin;%PATH%
在这里插入图片描述

三、编写occ环境代码:

在当前项目搜索 “#define new DEBUG_NEW” ,全部注释掉

#ifdef _DEBUG
//#define new DEBUG_NEW
#endif

3.1 在COCCDemoApp类的头文件里面添加

Handle(OpenGl_GraphicDriver) m_GraphicDriver; //OpenGl图形驱动程序
Handle(XCAFApp_Application) m_OCCApp;//实现DECAF文档的应用程序
#include <OpenGl_GraphicDriver.hxx>
#include <XCAFApp_Application.hxx>

// COCCDemoApp:
// 有关此类的实现,请参阅 OCCDemo.cpp
//

class COCCDemoApp : public CWinAppEx
{
public:
	COCCDemoApp();

protected:
	Handle(OpenGl_GraphicDriver) m_GraphicDriver;
	Handle(XCAFApp_Application) m_OCCApp;

public:
	//图形驱动
	Handle(OpenGl_GraphicDriver) GetGraphicDriver(){ return m_GraphicDriver; }
	Handle(XCAFApp_Application) GetOCCApp(){ return m_OCCApp; }

// 重写
public:
	virtual BOOL InitInstance();
	virtual int ExitInstance();

// 实现
	UINT  m_nAppLook;
	virtual void PreLoadState();
	virtual void LoadCustomState();
	virtual void SaveCustomState();

	afx_msg void OnAppAbout();
	DECLARE_MESSAGE_MAP()
};

3.2 初始化m_OCCApp,在COCCDemoApp::COCCDemoApp()添加初始化代码:

	// TODO:  在此处添加构造代码,
	// 将所有重要的初始化放置在 InitInstance 中
	m_OCCApp = XCAFApp_Application::GetApplication();
	BinDrivers::DefineFormat(m_OCCApp);
	XmlDrivers::DefineFormat(m_OCCApp);
	try
	{
		//单位转换工具
		//它们为各种量和相应物理单位的处理提供统一机制。这种机制能够检查单位的兼容性,以及在两种不同的单位间进行数值转换等
		UnitsAPI::SetLocalSystem(UnitsAPI_MDTV);
	}
	catch (Standard_Failure)
	{
		AfxMessageBox(_T("单位转换工具初始化错误!"));
	}

3.3 初始化m_GraphicDriver,在BOOL COCCDemoApp::InitInstance()添加初始代码:

	try
	{
		Handle(Aspect_DisplayConnection) aDisplayConnection;
		m_GraphicDriver = new OpenGl_GraphicDriver(aDisplayConnection);
	}
	catch (Standard_Failure)
	{
		AfxMessageBox(_T("(初始化Opencascade图形变量时发生错误.)"));
		return FALSE;
	}
	// 如果一个运行在 Windows XP 上的应用程序清单指定要
	// 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式,
	//则需要 InitCommonControlsEx()。  否则,将无法创建窗口。

3.4 在COCCDemoDoc类头文件添加代码:

Handle(AIS_InteractiveContext) m_AISContext;//交互式上下文对象
Handle(V3d_Viewer) m_Viewer;//查看器
Handle(TDocStd_Document) m_OCCDoc;//occ文档类
class COCCDemoDoc : public CDocument
{
protected: // 仅从序列化创建
	COCCDemoDoc();
	DECLARE_DYNCREATE(COCCDemoDoc)

// 特性
public:

// 操作
public:

	//查看器
	Handle(V3d_Viewer) GetViewer(){ return m_Viewer; }
	//上下文
	Handle(AIS_InteractiveContext) GetAISContext(){	return m_AISContext;}
	//ocaf 文档
	Handle(TDocStd_Document) GetOCCDoc(){ return m_OCCDoc; }
	void SetOCCDoc(const Handle(TDocStd_Document)& doc);
protected:

	Handle(AIS_InteractiveContext) m_AISContext;
	Handle(V3d_Viewer) m_Viewer;
	Handle(TDocStd_Document) m_OCCDoc;
// 重写
public:
	virtual BOOL OnNewDocument();
	virtual void Serialize(CArchive& ar);
#ifdef SHARED_HANDLERS
	virtual void InitializeSearchContent();
	virtual void OnDrawThumbnail(CDC& dc, LPRECT lprcBounds);
#endif // SHARED_HANDLERS

// 实现
public:
	virtual ~COCCDemoDoc();
#ifdef _DEBUG
	virtual void AssertValid() const;
	virtual void Dump(CDumpContext& dc) const;
#endif

protected:

// 生成的消息映射函数
protected:
	DECLARE_MESSAGE_MAP()

#ifdef SHARED_HANDLERS
	// 用于为搜索处理程序设置搜索内容的 Helper 函数
	void SetSearchContent(const CString& value);
#endif // SHARED_HANDLERS
};

3.5初始化m_Viewer和m_AISContext,在COCCDemoDoc::COCCDemoDoc()添加初始化代码:

COCCDemoDoc::COCCDemoDoc()
{
	// TODO:  在此添加一次性构造代码
	Handle(Graphic3d_GraphicDriver) theGraphicDriver = ((COCCDemoApp*)AfxGetApp())->GetGraphicDriver();
	m_Viewer = new V3d_Viewer(theGraphicDriver);
	m_AISContext = new AIS_InteractiveContext(m_Viewer);

}

3.6 在COCCDemoView类头文件添加代码:

Handle(V3d_View) m_View;//为Viewer应用程序定义应用程序对象View

class COCCDemoView : public CView
{
protected: // 仅从序列化创建
	COCCDemoView();
	DECLARE_DYNCREATE(COCCDemoView)

// 特性
public:
	COCCDemoDoc* GetDocument() const;

	// 操作
public:
	const Handle(V3d_View)& GetView() { return m_View; }
protected:
	//为Viewer应用程序定义应用程序对象View
	Handle(V3d_View) m_View;
// 重写
public:
	virtual void OnDraw(CDC* pDC);  // 重写以绘制该视图
	virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
protected:
	virtual BOOL OnPreparePrinting(CPrintInfo* pInfo);
	virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo);
	virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo);

// 实现
public:
	virtual ~COCCDemoView();
#ifdef _DEBUG
	virtual void AssertValid() const;
	virtual void Dump(CDumpContext& dc) const;
#endif

protected:

// 生成的消息映射函数
protected:
	afx_msg void OnFilePrintPreview();
	afx_msg void OnRButtonUp(UINT nFlags, CPoint point);
	afx_msg void OnContextMenu(CWnd* pWnd, CPoint point);
	DECLARE_MESSAGE_MAP()
};

3.7 将Handle(V3d_View) m_View与WNT_Window 关联:利用类导向,在COCCDemoView类里面添加虚函数OnInitialUpdate(),并添加代码,如图

在这里插入图片描述


void COCCDemoView::OnInitialUpdate()
{
	CView::OnInitialUpdate();

	m_View = GetDocument()->GetViewer()->CreateView();

	Handle(WNT_Window) aWNTWindow = new WNT_Window(GetSafeHwnd());
	m_View->SetWindow(aWNTWindow);

	if (!aWNTWindow->IsMapped())
		aWNTWindow->Map();

}

3.8 在COCCDemoView::OnDraw里面添加重绘代码:

// COCCDemoView 绘制
void COCCDemoView::OnDraw(CDC* /*pDC*/)
{
	COCCDemoDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	if (!pDoc)
		return;

	const Handle(V3d_View)& aView = GetView();

	if (!aView.IsNull())
	{
		aView->MustBeResized();
		aView->Update();
	}
}

四、编译运行,如图。一个基本的occ环境就搭建完成了。

在这里插入图片描述

链接: 源代码下载地址

  • 13
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值