热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:OpenCASCADEVS2017+OpenCASCADE+MFC下载配置安装运行单文档程序画个基本图形

篇首语:本文由编程笔记#小编为大家整理,主要介绍了OpenCASCADEVS2017+OpenCASCADE+MFC下载配置安装运行单文档程序画个基本图形相关的知识,希望对你有一定的参考价

篇首语:本文由编程笔记#小编为大家整理,主要介绍了OpenCASCADE VS2017+OpenCASCADE+MFC 下载配置安装运行单文档程序画个基本图形相关的知识,希望对你有一定的参考价值。



原文作者:aircraft

原文链接:https://www.cnblogs.com/DOMLX/p/12368154.html

 

 

一.下载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

然后在项目属性里:

 

 

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

 我的包含目录是: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

 

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

 

 

 


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

如果你们版本跟我的不一样 那么可以在cmd里打开到这个文件夹然后输入命令  dir /b>libName.txt

然后打开这个文件,复制lib的名字就行了

 

然后打开项目后在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

 

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


Handle(Graphic3d_GraphicDriver) m_GraphicDriver;
Handle(Graphic3d_GraphicDriver) GetGraphicDriver() {
return m_GraphicDriver; }

 

 

 和头文件

#include
#include

 

在OCCmfc.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.)");
}

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


#ifdef _DEBUG
#define new DEBUG_NEW
#endif

这几行代码注释就行了

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


Handle(AIS_InteractiveContext) myAISContext;
Handle(V3d_Viewer) myViewer;
Handle(V3d_Viewer) GetViewer(
void) {return myViewer;}

 

 

 

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


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定义类里添加:


Handle(V3d_View) myView;

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


virtual void OnInitialUpdate();

 

 

 

 

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


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()函数中添加:


myView->MustBeResized();
myView
->Update();

 

编译运行:

 

 

三.绘制图形

  在OCCmfcDoc.h中添加


void DrawSphere(double Radius);

 

 

 

 

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

 


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中添加:


void FitAll() { if (!myView.IsNull()) myView->FitAll(); myView->ZFitAll(); };

 

 

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


pDoc->DrawSphere(6);

 

 

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

 

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

 

 

 

 

 

若有兴趣交流分享技术,可关注本人公众号,里面会不定期的分享各种编程教程,和共享源码,诸如研究分享关于c/c++,python,前端,后端,opencv,halcon,opengl,机器学习深度学习之类有关于基础编程,图像处理和机器视觉开发的知识

 

 



推荐阅读
  • 使用nodejs爬取b站番剧数据,计算最佳追番推荐
    本文介绍了如何使用nodejs爬取b站番剧数据,并通过计算得出最佳追番推荐。通过调用相关接口获取番剧数据和评分数据,以及使用相应的算法进行计算。该方法可以帮助用户找到适合自己的番剧进行观看。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 本文详细介绍了GetModuleFileName函数的用法,该函数可以用于获取当前模块所在的路径,方便进行文件操作和读取配置信息。文章通过示例代码和详细的解释,帮助读者理解和使用该函数。同时,还提供了相关的API函数声明和说明。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 如何去除Win7快捷方式的箭头
    本文介绍了如何去除Win7快捷方式的箭头的方法,通过生成一个透明的ico图标并将其命名为Empty.ico,将图标复制到windows目录下,并导入注册表,即可去除箭头。这样做可以改善默认快捷方式的外观,提升桌面整洁度。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • 本文介绍了在使用Python中的aiohttp模块模拟服务器时出现的连接失败问题,并提供了相应的解决方法。文章中详细说明了出错的代码以及相关的软件版本和环境信息,同时也提到了相关的警告信息和函数的替代方案。通过阅读本文,读者可以了解到如何解决Python连接服务器失败的问题,并对aiohttp模块有更深入的了解。 ... [详细]
  • 本文详细介绍了MySQL表分区的创建、增加和删除方法,包括查看分区数据量和全库数据量的方法。欢迎大家阅读并给予点评。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 20211101CleverTap参与度和分析工具功能平台学习/实践
    1.应用场景主要用于学习CleverTap的使用,该平台主要用于客户保留与参与平台.为客户提供价值.这里接触到的原因,是目前公司用到该平台的服务~2.学习操作 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
author-avatar
宛如画中人需_308
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有