最近导师要求开学前学习一下这个库,说实话一开始看着一头包,完全一头雾水,不过最终安下来了,总体来说一定要胆大心细!
1.下载opencascade和VS2017,安装包(百度云)贴在下面:
opencascade链接:https://pan.baidu.com/s/1UbhkF5Na5420gIsUb4VP1Q
提取码:cqr7
下载好以后就是这样:
VS2017链接:https://pan.baidu.com/s/1l9DejZhBaCPdFOgHEvkJWw
提取码:e6wi
VS安装教程百度一堆,主要要注意的就是安装过程中要把ALT,MFC勾选上,如下:
2.配置系统环境变量
把下载好的opencascade里每个文件夹的bin目录都放到环境变量的PATH里,尤其注意tbb开头的文件夹中,路径要具体到bin目录下的版本号目录里,我分享的安装包版本号是vc14,可以参考我下面的截图:
然后在将bin文件夹内的dll文件全部复制一份放在C:\Windows\SysWOW64里(注意我这里是64位的),一定要一个一个文件夹找,tbb开头的就存vc14里的8个dll就行了,其他版本不用存。
3.打开VS2017
文件->新建->项目->MFC应用(随便选个存储路径)->确定->应用程序类型选择单文档->完成
4.接下来配置一下VS2017的项目属性
点击上方菜单栏的项目->最下方项目属性->VC++目录->修改一下包含目录和库目录(我的opencascade存在E盘,如果存在其他地方可以对应改一下路径)
我的包含目录是:E:\OpenCASCADE-7.4.0-vc14-64\opencascade-7.4.0\inc
我的库目录是:E:\OpenCASCADE-7.4.0-vc14-64\opencascade-7.4.0\win64\vc14\lib
接下来打开cmd,进入库目录E:\OpenCASCADE-7.4.0-vc14-64\opencascade-7.4.0\win64\vc14\lib,在此输入命令dir /b>libName.txt,把弹出来的所有lib文件名复制
点项目属性里的连接器->输入->附加依赖项,把上面复制的粘贴到这里(如果第一行粘贴上libName.lib,记得删除)
5.修改项目文件内容
打开头文件中的pch.h(或者叫stdafx.h,这是一个预编译源文件)
把下面内容复制到头文件
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
然后在项目名.h文件的类里添加:
Handle(Graphic3d_GraphicDriver) m_GraphicDriver;
Handle(Graphic3d_GraphicDriver) GetGraphicDriver() { return m_GraphicDriver; }
和头文件
#include
#include
在项目名.cpp的构造函数里加上:
try {
Handle(Aspect_DisplayConnection) aDisplayConnection;
m_GraphicDriver = new OpenGl_GraphicDriver(aDisplayConnection);
}
catch (Standard_Failure) {
AfxMessageBox(L"(Error Ocured in Initializing the Opencascade graphic variable.)");
}
接着在项目名Doc.h文件类里添加:
Handle(AIS_InteractiveContext) myAISContext;
Handle(V3d_Viewer) myViewer;
Handle(V3d_Viewer) GetViewer(void) {return myViewer;}
接着去实现文档项目名Doc.cpp中类的构造函数中添加:
Handle(Graphic3d_GraphicDriver) theGraphicDriver = ((C项目名App*)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);
然后去去项目名View.h定义类里添加:
Handle(V3d_View) myView;
和添加要重写的这个函数:
virtual void OnInitialUpdate();
并在实现中声明这个方法(如果已经有了就不用新建了):
void FitAll() { if (!myView.IsNull()) myView->FitAll(); myView->ZFitAll(); };
然后去项目名View.cpp文件里添加下面这个实现函数(随便添加在哪里):
void C项目名View::OnInitialUpdate()
{
CView::OnInitialUpdate();
myView = GetDocument()->GetViewer()->CreateView();
myView->SetShadingModel(V3d_GOURAUD);
Handle(Graphic3d_GraphicDriver) theGraphicDriver = ((C项目名App*)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()函数中添加:
myView->MustBeResized();
myView->Update();
参考来源:OpenCASCADE(一) VS2017+OpenCASCADE+MFC +win10下载配置安装运行单文档程序画个基本图形 - aircraft - 博客园
以下几种易错情况可以注意一下:
1.运行按钮左边的x86如果没改成x64会报错
2.VS的项目属性有时候会恢复初始化状态,如果莫名报错可以检查一下项目属性是不是没修改成功
3.没有与参数列表匹配的“XXX”重载实例/没有重载函数接收3个参数
这是因为opencascade对new进行了重载,我们将每个new报错文件顶部的:
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
这几行代码注释就行了
3.最近我引用了opencascade的Demo,其中让我修改了符号设置,在工具-》选项-》调试-》符号里勾选了Microsoft符号服务器,这种情况下运行上文的项目会一直卡在启动项目,要记得取消勾选。