前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >OpenCASCADE(一) VS2017+OpenCASCADE+MFC 下载配置安装运行单文档程序画个基本图形

OpenCASCADE(一) VS2017+OpenCASCADE+MFC 下载配置安装运行单文档程序画个基本图形

作者头像
徐飞机
发布2020-03-02 14:56:49
2.6K2
发布2020-03-02 14:56:49
举报

原文作者:aircraft

原文链接:https://cloud.tencent.com/developer/article/1592856

一.下载OpenCASCADE

官网下载是: http://www.opencascade.org/getocc/download/loadocc/

我的百度云已经下载好的是:

链接:https://pan.baidu.com/s/1D-fw8vspKTOZ8GmAGBSVGw

提取码:mzp3

下载后运行完毕就是这样:

二.VS2017 MFC单文档配置OpenCASCADE 环境

先将每个文件夹里的bin文件夹都添加到系统的环境变量里

然后在将bin文件夹内的dll文件全部复制一份放在C:\Windows\SysWOW64里(注意我这里是64位的)你们32就放32里

在VS2017中创建一个单文档MFC项目,我的命名是OCCmfc

然后在项目属性里:

 将你们自己路径下的!!包含目录,和库目录都添加上去(看图!!)

然后在连接器-》输入-》附加依赖项里添加下面这些Lib文件名:

代码语言:javascript
复制
TKBin.lib
TKBinL.lib
TKBinTObj.lib
TKBinXCAF.lib
TKBO.lib
TKBool.lib
TKBRep.lib
TKCAF.lib
TKCDF.lib
TKD3DHost.lib
TKDCAF.lib
TKDFBrowser.lib
TKDraw.lib
TKernel.lib
TKFeat.lib
TKFillet.lib
TKG2d.lib
TKG3d.lib
TKGeomAlgo.lib
TKGeomBase.lib
TKHLR.lib
TKIGES.lib
TKIVtk.lib
TKIVtkDraw.lib
TKLCAF.lib
TKMath.lib
TKMesh.lib
TKMeshVS.lib
TKOffset.lib
TKOpenGl.lib
TKPrim.lib
TKQADraw.lib
TKRWMesh.lib
TKService.lib
TKShapeView.lib
TKShHealing.lib
TKStd.lib
TKStdL.lib
TKSTEP.lib
TKSTEP209.lib
TKSTEPAttr.lib
TKSTEPBase.lib
TKSTL.lib
TKTInspector.lib
TKTInspectorAPI.lib
TKTObj.lib
TKTObjDRAW.lib
TKToolsDraw.lib
TKTopAlgo.lib
TKTopTest.lib
TKTreeModel.lib
TKV3d.lib
TKVCAF.lib
TKView.lib
TKViewerTest.lib
TKVInspector.lib
TKVRML.lib
TKXCAF.lib
TKXDEDRAW.lib
TKXDEIGES.lib
TKXDESTEP.lib
TKXMesh.lib
TKXml.lib
TKXmlL.lib
TKXmlTObj.lib
TKXmlXCAF.lib
TKXSBase.lib
TKXSDRAW.lib

然后打开项目后在stdafx.h中添加这些要用到的头文件:

代码语言:javascript
复制
#include <BRepTools.hxx>  
#include <Standard_DefineHandle.hxx>  
#include <DsgPrs_LengthPresentation.hxx>  
#include <GCPnts_TangentialDeflection.hxx>  
#include <Geom_Axis2Placement.hxx>  
#include <Geom_CartesianPoint.hxx>  
#include <Geom_Line.hxx>  
#include <Geom_Surface.hxx>  
#include <BRepAdaptor_Surface.hxx>  
#include <GeomAbs_CurveType.hxx>  
#include <GeomAdaptor_Curve.hxx>  
#include <GeomTools_Curve2dSet.hxx>  
#include <gp_Vec.hxx>  
#include <Graphic3d_NameOfMaterial.hxx>  
#include <MMgt_TShared.hxx>  
#include <OSD_Environment.hxx>  
#include <Precision.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 <SelectMgr_ListOfFilter.hxx>  
#include <SelectMgr_Filter.hxx>  
#include <StdSelect_EdgeFilter.hxx>  
#include <StdSelect_ShapeTypeFilter.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_Shape.hxx>  
#include <TopoDS_Solid.hxx>  
#include <TopoDS_Vertex.hxx>  
#include <TopExp.hxx>  
#include <TopTools_HSequenceOfShape.hxx>  
#include <UnitsAPI.hxx>  
#include <V3d_View.hxx>  
#include <V3d_Viewer.hxx>  
#include <WNT_Window.hxx>  
#include <Prs3d_PointAspect.hxx>  
#include <AIS_Point.hxx>  
#include <AIS_InteractiveContext.hxx>
#include <AIS_Shape.hxx>
#include <BRep_Tool.hxx>  
#include <BRepAlgoAPI_Fuse.hxx>  
#include <BRepBuilderAPI_MakeEdge.hxx>  
#include <BRepBuilderAPI_MakeFace.hxx>  
#include <BRepBuilderAPI_MakeWire.hxx>  
#include <BRepBuilderAPI_MakeVertex.hxx>  
#include <BRepBuilderAPI_Transform.hxx>  
#include <BRepPrimAPI_MakeCone.hxx>  
#include <BRepPrimAPI_MakeRevol.hxx>  
#include <BRepFilletAPI_MakeFillet.hxx>  
#include <BRepBuilderAPI_Copy.hxx>  
#include <BRepBuilderAPI_MakePolygon.hxx>  
#include <BRepLib.hxx>  
#include <BRepOffsetAPI_MakeThickSolid.hxx>  
#include <BRepOffsetAPI_ThruSections.hxx>  
#include <BRepPrimAPI_MakeCylinder.hxx>  
#include <BRepPrimAPI_MakePrism.hxx>  
#include <BRepPrimAPI_MakeTorus.hxx>  
#include <BRepAlgoAPI_Section.hxx>  
#include <BRepPrimAPI_MakeSphere.hxx>  
#include <BRepFeat_SplitShape.hxx>  
#include <TColgp_HArray1OfPnt.hxx>  
#include <GeomAPI_Interpolate.hxx>  
#include <GC_MakeArcOfCircle.hxx>  
#include <GC_MakeSegment.hxx>  
#include <GC_MakeCircle.hxx>  
#include <GCE2d_MakeSegment.hxx>  
#include <gp.hxx>  
#include <gp_Ax1.hxx>  
#include <gp_Ax2.hxx>  
#include <gp_Ax2d.hxx>  
#include <gp_Dir.hxx>  
#include <gp_Dir2d.hxx>  
#include <gp_Pnt.hxx>  
#include <gp_Pnt2d.hxx>  
#include <gp_Trsf.hxx>  
#include <gp_Vec.hxx>  
#include <Geom_CylindricalSurface.hxx>  
#include <Geom_Plane.hxx>  
#include <Geom_Surface.hxx>  
#include <Geom_TrimmedCurve.hxx>  
#include <Geom2d_Ellipse.hxx>  
#include <Geom2d_TrimmedCurve.hxx>  
#include <TopExp_Explorer.hxx>  
#include <TopoDS.hxx>  
#include <TopoDS_Edge.hxx>  
#include <TopoDS_Face.hxx>  
#include <TopoDS_Wire.hxx>  
#include <TopoDS_Shape.hxx>  
#include <TopoDS_Compound.hxx>  
#include <GCPnts_AbscissaPoint.hxx>  
#include <BRepAdaptor_Curve.hxx>  
#include <GeomLib.hxx>  
#include <GeomConvert_CompCurveToBSplineCurve.hxx>  
#include <TopTools_ListOfShape.hxx>  
#include <TopTools_ListIteratorOfListOfShape.hxx>  
#include <TopTools_DataMapOfShapeInteger.hxx>  
#include <TopTools_DataMapOfShapeReal.hxx>  
#include <TopTools_IndexedDataMapOfShapeAddress.hxx>  
#include <V3d_PositionalLight.hxx>  
#include <V3d_DirectionalLight.hxx>  
#include <V3d_AmbientLight.hxx>  
#include <IGESControl_Controller.hxx>  
#include <IGESControl_Writer.hxx>  
#include <Interface_Static.hxx>  
#include <OpenGl_GraphicDriver.hxx>  
#include <Graphic3d_GraphicDriver.hxx>  

然后在OCCmfc.h文件的类里添加:

代码语言:javascript
复制
Handle(Graphic3d_GraphicDriver) m_GraphicDriver;
Handle(Graphic3d_GraphicDriver) GetGraphicDriver() { return m_GraphicDriver; }

在OCCmfc.cpp的构造函数里加上:

代码语言:javascript
复制
try {
        Handle(Aspect_DisplayConnection) aDisplayConnection;
        m_GraphicDriver = new OpenGl_GraphicDriver(aDisplayConnection);
    }
    catch (Standard_Failure) {
        AfxMessageBox(L"(Error Ocured in Initializing the Opencascade graphic variable.)");
    }

注意!!!如果new字符报错,那么是因为opencascade对new进行了重载,我们将每个new报错文件顶部的:

代码语言:javascript
复制
#ifdef _DEBUG 
#define new DEBUG_NEW 
#endif

这几行代码注释就行了

接着在OCCmfcDoc.h文件类里添加:

代码语言:javascript
复制
Handle(AIS_InteractiveContext) myAISContext;  
Handle(V3d_Viewer) myViewer;  
Handle(V3d_Viewer) GetViewer(void) {return myViewer;}

接着去实现文档OCCmfcDoc.cpp中类的构造函数中添加:

代码语言:javascript
复制
Handle(Graphic3d_GraphicDriver) theGraphicDriver = ((CmOCCTApp*)AfxGetApp())->GetGraphicDriver();

    myViewer = new V3d_Viewer(theGraphicDriver);
    myViewer->SetDefaultLights();
    myViewer->SetLightOn();

    myAISContext = new AIS_InteractiveContext(myViewer);

    myAISContext->SetDisplayMode(AIS_Shaded,true);
    myAISContext->SetAutomaticHilight(Standard_False);

然后去去OCCmfcView.h定义类里添加:

代码语言:javascript
复制
Handle(V3d_View) myView;  

和添加要重写的这个函数:

代码语言:javascript
复制
virtual void OnInitialUpdate();  

然后去OCCmfcView.cpp文件里添加下面这个实现函数(随便添加在哪里):

代码语言:javascript
复制
void COCCmfcView::OnInitialUpdate()

{

    CView::OnInitialUpdate();



    myView = GetDocument()->GetViewer()->CreateView();
    myView->SetShadingModel(V3d_GOURAUD);
    Handle(Graphic3d_GraphicDriver) theGraphicDriver = ((COCCmfcApp*)AfxGetApp())->GetGraphicDriver();
    Aspect_Handle aWindowHandle = (Aspect_Handle)GetSafeHwnd();
    Handle(WNT_Window) aWntWindow = new WNT_Window(GetSafeHwnd());
    myView->SetWindow(aWntWindow);
    if (!aWntWindow->IsMapped()) {
        aWntWindow->Map();
    }
    Standard_Integer w = 100;
    Standard_Integer h = 100;
    aWntWindow->Size(w, h);
    ::PostMessage(GetSafeHwnd(), WM_SIZE, SIZE_RESTORED, w + h * 65536);
    myView->FitAll();

    myView->ZBufferTriedronSetup(Quantity_NOC_RED, Quantity_NOC_GREEN, Quantity_NOC_BLUE1, 0.8, 0.05, 12);
    myView->TriedronDisplay(Aspect_TOTP_LEFT_LOWER, Quantity_NOC_WHITE, 0.2, V3d_ZBUFFER);
}

然后在这个文件中的OnDraw()函数中添加:

代码语言:javascript
复制
myView->MustBeResized();  
myView->Update();  

编译运行:

三.绘制图形

在OCCmfcDoc.h中添加

代码语言:javascript
复制
 void DrawSphere(double Radius);

在OCCmfcDoc.cpp中添加函数(随便放哪):

代码语言:javascript
复制
void COCCmfcDoc::DrawSphere(double Radius) 
{
    BRepPrimAPI_MakeSphere mkSphere(Radius);
    TopoDS_Shape Sphere = mkSphere.Shape();
    Handle(AIS_Shape) myAISSphere = new AIS_Shape(Sphere);
    myAISContext->Display(myAISSphere, Standard_False);
    CMDIFrameWnd *pFrame = (CMDIFrameWnd*)AfxGetApp()->m_pMainWnd;
    CMDIChildWnd *pChild = (CMDIChildWnd *)pFrame->GetActiveFrame();
    COCCmfcView *pView = (COCCmfcView *)pChild->GetActiveView();
    pView->FitAll();
}

然后在OCCmfcView.h中添加:

代码语言:javascript
复制
void FitAll() { if (!myView.IsNull()) myView->FitAll();  myView->ZFitAll(); };

最后在OCCmfcView.cpp文件里的OnDraw()函数里添加:

代码语言:javascript
复制
pDoc->DrawSphere(6);

然后运行如下所示 画了一个图形出来:

完整代码项目可以关注公众号发送添加小编微信发送文章标题获取。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-02-26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档