OCC:第一个程序,对话框中显示一个BOX

1. OCC库的获取

  1. 从github上获取 git@github.com:tpaviot/oce.git,自己编译
  2. 官网获取二进制包(获取下来的只有release 版本的,而且VS版本不一定适合自己)
  3. 官网源码,然后自己编译(稍微折腾点,建议按步骤1的方法,github上整理好的,用CMake直接编译,很方便)
  4. 本人编译好的,vs2013的win32及x64版本
    occ-vs2013-x64-debug-release
    occ-vs2013-win32-debug-release

2. MFC对话框程序,使用OCC显示BOX

  1. 头文件OCC相关代码
cpp 复制代码
#include "V3d_Viewer.hxx"
#include "AIS_InteractiveContext.hxx"

// COccDialogDemoDlg dialog
class COccDialogDemoDlg : public CDialogEx
{
	//其余代码,略
	//...
private:
	Handle(V3d_Viewer) m_pOccViewer;
	Handle(V3d_View) m_pOccView;
	Handle(AIS_InteractiveContext) m_pOccAISContext;
}
  1. Cpp文件OCC相关代码
cpp 复制代码
BOOL COccDialogDemoDlg::OnInitDialog()
{
	CDialogEx::OnInitDialog();

	//其他代码,略
	//....

	try
	{
		//使用OpenGL来显示
		Handle(Aspect_DisplayConnection) aDisplayConnection;
		Handle(OpenGl_GraphicDriver) aGraphicDriver = new OpenGl_GraphicDriver(aDisplayConnection);

		//创建3D视图器
		TCollection_ExtendedString myViewerName("MyOccViewer");
		m_pOccViewer = new V3d_Viewer(aGraphicDriver, myViewerName.ToExtString());

		// set parameters for V3d_Viewer
		// defines default lights -
		// positional-light 0.3 0.0 0.0
		// directional-light V3d_XnegYposZpos
		// directional-light V3d_XnegYneg
		// ambient-light
		//设置默认灯光并开启灯光
		m_pOccViewer->SetDefaultLights();
		// activates all the lights defined in this viewer
		m_pOccViewer->SetLightOn();
		// set background color to black
		m_pOccViewer->SetDefaultBackgroundColor(Quantity_NOC_BLACK);

		//创建3d视图
		Handle(WNT_Window) aWNTWindow = new WNT_Window(GetSafeHwnd());
		m_pOccView = m_pOccViewer->CreateView();
		m_pOccView->SetWindow(aWNTWindow);

		//创建交互上下文
		m_pOccAISContext = new AIS_InteractiveContext(m_pOccViewer);

		//显示一个box
		TopoDS_Shape aShape = BRepPrimAPI_MakeBox(100, 200, 300);
		Handle(AIS_Shape) anAISShape = new AIS_Shape(aShape);
		m_pOccAISContext->Display(anAISShape);
	}
	catch (Standard_Failure const& anException)
	{
		Standard_SStream aSStream;
		aSStream << "An exception was caught: " << anException.GetMessageString() << ends;
		CString aMsg(aSStream.str().c_str());
		AfxMessageBox(aMsg);
	}
	catch (...)
	{
		AfxMessageBox(_T("unkonwn exception"));
	}

	return TRUE;  // return TRUE  unless you set the focus to a control
}

void COccDialogDemoDlg::OnPaint()
{
	if (m_pOccView)
	{
		m_pOccView->Redraw();
	}
}
  1. 依赖的occ库
cpp 复制代码
TKPrimd.lib
TKV3dd.lib
TKerneld.lib
TKBRepd.lib
TKMathd.lib
TKOpenGld.lib
TKTopAlgod.lib
TKServiced.lib

3. 运行截图

4. 额外说明

因为OCC使用OpenGL显示用到了着色器,根据OCC抛出异常提示可知,需要指示OCC程序找到着色器相关文件,最简单的是设置环境变量CSF_ShadersDirectory或CASROOT,详细可参看代码,如下部分截图。

要成功运行以上程序,必须设置好任意一个环境变量,本地测试可以直接修改系统变量,本人的做法是用个批处理文件启动vs,在启动前设置好CSF_ShadersDirectory,后续通过vs运行的程序,就自动继承了次环境变量了,如下:

bash 复制代码
@echo off
set CSF_ShadersDirectory=E:\OCCTest\Third-Party\OCE-0.18\share\oce\src\Shaders
"D:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\devenv.exe" 

其中OCE-0.18\share\oce\src\Shaders为occ开发库中的目录

相关推荐
IC拓荒者25 天前
数字IC后端设计实现之分段长clock tree经典案例
occ·时钟产生电路·ic后端培训·时钟树综合·clock tree·innovus零基础·分段长clock tree
一点灯3 个月前
opencascade源码学习之HLRAlgo包 -HLRAlgo
occ·opencascade
CodingCos5 个月前
【SOC 芯片设计 DFT 学习专栏 -- DFT OCC 与 ATPG的介绍】
occ·atpg·fast scan·dft occ
VinciYan6 个月前
编译Open Cascade(OCC)并使用C#进行开发
c#·开源软件·cad·occ·open cascade·三维cad
Hanson856 个月前
OCC介绍及框架分析
occ·cad平台·几何建模内核
丰色木夕6 个月前
Ubuntu22.04下源码编译安装pythonocc-7.8
occ·occt·pythonocc
wuchen10048 个月前
OpenCASCADE(OCC)读入含中文汉字标签的内容后乱码的解决方法
occ·opencascade·标签乱码
欧特克_Glodon9 个月前
OpenCASCADE开发指南:专栏内容介绍及目录
c++·三维建模·occ·opencascade·几何内核