1、安装好VS2022、QT、OCC安装包后,在VS2022中创建一个项目,具体如下:
2、配置步骤1中创建的项目的属性,具体如下:
VC++目录>>>包含目录:
添加文件目录如上三个。
VC++目录>>>库目录:
添加文件目录如上两个。
依赖项内容:
TKBin.lib
TKBinL.lib
TKBinTObj.lib
TKBinXCAF.lib
TKBO.lib
TKBool.lib
TKBRep.lib
TKCAF.lib
TKCDF.lib
TKD3DHost.lib
TKD3DHostTest.lib
TKDCAF.lib
TKDFBrowser.lib
TKDraw.lib
TKernel.lib
TKExpress.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
TKMessageModel.lib
TKMessageView.lib
TKOffset.lib
TKOpenGl.lib
TKOpenGles.lib
TKOpenGlesTest.lib
TKOpenGlTest.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
TKXDE.lib
TKXDECascade.lib
TKXDEDRAW.lib
TKXDEIGES.lib
TKXDESTEP.lib
TKXMesh.lib
TKXml.lib
TKXmlL.lib
TKXmlTObj.lib
TKXmlXCAF.lib
TKXSBase.lib
TKXSDRAW.lib
注意:可用快捷方法获取上述列表名单,具体如下:
在以上目录下创建一个文本文件,并输入以上内容,保存后将后缀名改成.bat,双击运行该bat文件,就可在目录下生成一个lib.txt文件。里面包含了该目录下所有.lib文件的名称,具体如下:
接着在【链接器】>>>【输入】>>>【附加依赖项】中,添加上述获取的lib列表。
3、在系统环境变量中,添加所有的bin文件夹,具体如下:
上图中,第一个未完整显示的OCC目录如下:
E:\OpenCASCADE-7.7.0-vc14-64\opencascade-7.7.0\win64\vc14\bin
这里根据OCC版本不同,需要添加的也不同,主要宗旨就是尽可能将OCC中包含的bin文件夹包含进来,免得VS2022编译的时候报错。
注意:修改完系统环境变量后,需要重启电脑才生效。
4、添加如下代码
.h文件中:
#pragma once
#include <QtWidgets/QMainWindow>
#include "ui_TestOCC.h"
#include <Standard_Handle.hxx>
#include <V3d_Viewer.hxx>
#include <OpenGl_GraphicDriver.hxx>
#include <WNT_Window.hxx>
#include <V3d_View.hxx>
#include <AIS_InteractiveContext.hxx>
#include <BRepPrimAPI_MakeBox.hxx>
#include <TopoDs_Shape.hxx>
#include <AIS_Shape.hxx>
class TestOCC : public QMainWindow
{
Q_OBJECT
public:
TestOCC(QWidget *parent = nullptr);
~TestOCC();
protected:
//重写绘图事件
void paintEvent(QPaintEvent* event) override;
//返回窗口绘图引擎
QPaintEngine* paintEngine() const;
private:
Ui::TestOCCClass ui;
//定义查看器viewer 3D查看器
Handle(V3d_Viewer) viewer;
//视图
Handle(V3d_View) view;
//交互式上下文,管理一个或者多个viewer
Handle(AIS_InteractiveContext) context;
//window NT窗口
Handle(WNT_Window) window;
};
.cpp文件中:
#include "TestOCC.h"
TestOCC::TestOCC(QWidget *parent)
: QMainWindow(parent)
{
//ui.setupUi(this);
//提供X server的连接,在window和Mac中不起作用
Handle(Aspect_DisplayConnection) hAspect_DisplayConnect = new Aspect_DisplayConnection;
//创建3D接口定义图形驱动
Handle(OpenGl_GraphicDriver) driver = new OpenGl_GraphicDriver(hAspect_DisplayConnect);
//该类的方法允许编辑、询问连接该类的其他参数(如视图、光)
viewer = new V3d_Viewer(driver);
view = viewer->CreateView();
WId win_handle = winId();
//在已有的窗口上创建窗口
window = new WNT_Window((Aspect_Handle)win_handle);
view->SetWindow(window);
if (!window->IsMapped())
{
window->Map();//打开窗口
}
view->SetBackgroundColor(Quantity_NOC_BLACK);
view->MustBeResized();
viewer->SetDefaultLights();
setAttribute(Qt::WA_PaintOnScreen);
//交互式上下文
context = new AIS_InteractiveContext(viewer);
context->SetDisplayMode(AIS_Shaded, Standard_True);
TopoDS_Shape box = BRepPrimAPI_MakeBox(10, 10, 10);
Handle(AIS_Shape) abox = new AIS_Shape(box);
context->Display(abox, Standard_True);
view->FitAll();
}
TestOCC::~TestOCC()
{}
void TestOCC::paintEvent(QPaintEvent* event)
{
view->Redraw();
}
QPaintEngine* TestOCC::paintEngine() const
{
return 0;
}
5、运行效果
如上,完成第一个VS+QT+OCC项目!
注意:为保证代码顺利运行,在电脑上只能安装一个OCC版本,在系统环境变量中,只能有一个QT路径,一定要确保,否则显示不出效果。