验证occ和vtk整合工作的demo
在编译occ通过过后,我需要验证occ是否能够正常结合vtk进行开发工作
使用CMake进行环境变量设置:
CMakeList.txt
PROJECT (IGESReader)#VTK Part:
FIND_PACKAGE(VTK)
IF (VTK_FOUND)INCLUDE(${VTK_USE_FILE})
ELSE(VTK_FOUND)MESSAGE(FATAL_ERROR"Cannot build without VTK. Please set VTK_DIR.")
ENDIF (VTK_FOUND)#OpenCascade Part:
INCLUDE_DIRECTORIES(C:\OpenCASCADE6.5.1\ros\inc
)LINK_LIBRARIES(vtkCommonvtkGraphicsvtkRenderingvtkIOC:\OpenCASCADE6.5.1\ros\win32\vc8\libd\TKIGES.libC:\OpenCASCADE6.5.1\ros\win32\vc8\libd\TKernel.libC:\OpenCASCADE6.5.1\ros\win32\vc8\libd\TKBRep.libC:\OpenCASCADE6.5.1\ros\win32\vc8\libd\TKMath.libC:\OpenCASCADE6.5.1\ros\win32\vc8\libd\TKGeomBase.libC:\OpenCASCADE6.5.1\ros\win32\vc8\libd\TKGeomAlgo.libC:\OpenCASCADE6.5.1\ros\win32\vc8\libd\TKG3d.libC:\OpenCASCADE6.5.1\ros\win32\vc8\libd\TKG2d.libC:\OpenCASCADE6.5.1\ros\win32\vc8\libd\TKTopAlgo.libC:\OpenCASCADE6.5.1\ros\win32\vc8\libd\TKXSBase.libC:\OpenCASCADE6.5.1\ros\win32\vc8\libd\TKMesh.lib
)ADD_EXECUTABLE(IGESReader example.cxx)
添加一个example.cxx
// sampleExample.cpp : Defines the entry point for the console application.
//
// OpenCascade library.
#include <gp_Circ.hxx>
#include <gp_Elips.hxx>
#include <gp_Sphere.hxx>#include <Poly_Polygon3D.hxx>
#include <Poly_Triangulation.hxx>#include <TopoDS_Edge.hxx>
#include <TopoDS_Face.hxx>#include <BRep_Tool.hxx>
#include <BRepMesh.hxx>
#include <BRepBuilderAPI_MakeEdge.hxx>
#include <BRepBuilderAPI_MakeFace.hxx>//vtk lib
#include <vtkSmartPointer.h>
#include <vtkPoints.h>
#include <vtkPolyData.h>
#include <vtkCellArray.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkRenderWindow.h>
#include <vtkRenderer.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkProperty.h>
#include <vtkTriangle.h>/*
* @breif Descret the shape: face.
* For Face will be discreted to triangles; (BRepMesh_FastDiscret)
* To get the triangles of the face, use BRep_Tool::Triangulation(Face, L);
*/
void BuildMesh(vtkRenderer* render, const TopoDS_Face& face, double deflection = 0.1)
{TopLoc_Location location;BRepMesh::Mesh(face, deflection);Handle_Poly_Triangulation triFace = BRep_Tool::Triangulation(face, location);Standard_Integer nTriangles = triFace->NbTriangles();gp_Pnt vertex1;gp_Pnt vertex2;gp_Pnt vertex3;Standard_Integer nVertexIndex1 = 0;Standard_Integer nVertexIndex2 = 0;Standard_Integer nVertexIndex3 = 0;TColgp_Array1OfPnt nodes(1, triFace->NbNodes());Poly_Array1OfTriangle triangles(1, triFace->NbTriangles());nodes = triFace->Nodes();triangles = triFace->Triangles(); vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();vtkSmartPointer<vtkCellArray> cells = vtkSmartPointer<vtkCellArray>::New();vtkSmartPointer<vtkPolyData> polyData = vtkSmartPointer<vtkPolyData>::New();points->Allocate(nTriangles * 3);cells->Allocate(nTriangles);int id = 0;for (Standard_Integer i = 1; i <= nTriangles; i++){Poly_Triangle aTriangle = triangles.Value(i);aTriangle.Get(nVertexIndex1, nVertexIndex2, nVertexIndex3);vertex1 = nodes.Value(nVertexIndex1).Transformed(location.Transformation());vertex2 = nodes.Value(nVertexIndex2).Transformed(location.Transformation());vertex3 = nodes.Value(nVertexIndex3).Transformed(location.Transformation());points->InsertNextPoint(vertex1.X(), vertex1.Y(), vertex1.Z());points->InsertNextPoint(vertex2.X(), vertex2.Y(), vertex2.Z());points->InsertNextPoint(vertex3.X(), vertex3.Y(), vertex3.Z());vtkSmartPointer<vtkTriangle> triangle = vtkSmartPointer<vtkTriangle>::New();triangle->GetPointIds()->SetId(0,id * 3);triangle->GetPointIds()->SetId(1,id * 3 + 1);triangle->GetPointIds()->SetId(2,id *3 + 2);// Add the triangle to a cell arraycells->InsertNextCell(triangle);id++;}polyData->SetPoints(points);polyData->SetPolys(cells);vtkSmartPointer<vtkPolyDataMapper> sourceMapper = vtkSmartPointer<vtkPolyDataMapper>::New();sourceMapper->SetInput(polyData);vtkSmartPointer<vtkActor> sourceActor = vtkSmartPointer<vtkActor>::New();sourceActor->SetMapper(sourceMapper);sourceActor->GetProperty()->SetColor(1,0,0);render->AddActor(sourceActor);}void BuildScene(vtkRenderer* render)
{gp_Ax2 axis;// 1. Test sphere face while deflection is default 0.1.axis.SetLocation(gp_Pnt(26.0, 0.0, 0.0));TopoDS_Face sphereFace1 = BRepBuilderAPI_MakeFace(gp_Sphere(axis, 8.0));BuildMesh(render, sphereFace1);// 2. Test sphere face while deflection is 2.0.axis.SetLocation(gp_Pnt(26.0, 18.0, 0.0));TopoDS_Face sphereFace2 = BRepBuilderAPI_MakeFace(gp_Sphere(axis, 8.0));BuildMesh(render,sphereFace2, 2.0);// 3. Test sphere face while deflection is 0.001.axis.SetLocation(gp_Pnt(26.0, -18.0, 0.0));TopoDS_Face sphereFace3 = BRepBuilderAPI_MakeFace(gp_Sphere(axis, 8.0));BuildMesh(render, sphereFace3, 0.001);
}int main(int argc, char *argv[])
{// Create a renderer, render window, and interactorvtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New();renderWindow->AddRenderer(renderer);vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New();renderWindowInteractor->SetRenderWindow(renderWindow);//build meshBuildScene(renderer);renderer->SetBackground(1,1,1);// Render and interactrenderWindow->Render();renderWindowInteractor->Start();return 0;
}
你可能在编译的过程当中,遇到缺少dll文件,这个说明 你并没有把相应的dll文件放在环境变量当中去。
运行结果:
转载于:https://www.cnblogs.com/skyhuangdan/p/5486780.html
验证occ和vtk整合工作的demo相关推荐
- 【OCC学习3】OCC与VTK整合
OCC只是几何内核,显示的话还需整合其他组件.今天介绍与VTK整合.本人是OCC.VTK初学者,代码部分也没整明白,主要介绍Visual Studio配置. 1. 本文采用的工具版本: OCC 7.6 ...
- php ci框架 模板引擎,详解CodeIgniter框架实现的整合Smarty引擎DEMO
CodeIgniter框架实现的整合Smarty引擎DEMO示例 本文实例讲述了CodeIgniter框架实现的整合Smarty引擎.分享给大家供大家参考,具体如下: Smarty的模板机制很强大,一 ...
- 使用poi导出excel报错-打开文件报“Excel 已完成文件级验证和修复。此工作簿的某些部分可能已被修复或丢弃”
使用poi导出excel报错-打开文件报"Excel 已完成文件级验证和修复.此工作簿的某些部分可能已被修复或丢弃" 1.原本正常使用的Excel导出突然下载文件报错 2.定位时发 ...
- SpringAMQP整合RabbitMQ-五种工作模式Demo
文章目录 一.MQ基本概念 二.RabbitMQ 三.Docker部署RabbitMQ 四.SpringAMQP 五.RabbitMQ工作模式 1.Basic Queue 简单模式 2.Work qu ...
- java ntlm解密_java – HttpClient 4.1.1在使用NTLM进行身份验证时返回401,浏览器工作正常...
我正在尝试使用Apache / Jakarta HttpClient 4.1.1使用给定的凭据连接到任意网页.为了测试这一点,我在运行的dev机器上安装了最少的IIS 7.5,其中一次只有一种身份验证 ...
- java activemq demo_Spring与ActiveMQ的整合的完整demo
[实例简介] 此demo基于Spring+JMS+ActiveMQ+Tomcat,通过注解实现的完整实例,包含jar包 [实例截图] [核心代码] ActiveMQSpringDemo └── Act ...
- Nginx实现负载均衡(整合SpringBoot小demo)
目录 1.前言 2.什么是负载均衡 3.准备工作 3.1 关于Mac系统安装Nginx 3.2 测试项目说明 4.Nginx负载均衡的集中方式介绍 4.1 轮询 4.2 权重 4.3 iphash 4 ...
- golang 工作池demo
package mainimport ("fmt""time" )//创建任务类型 type Task struct {f func() error }//执行 ...
- Springboot + Mybatis整合的小demo,火车订票系统
Springboot +Mybatis 的一个订票系统 这学期开了一门软件测试课程,需要做一个系统用于软件测试的学习,就使用目前JavaEE开发中比较火的SpringBoot + Mybatis做了一 ...
最新文章
- 不是我放弃AI,是AI放弃了我!!
- c# 大数据量比较时-方案
- oracle没有groupby,oraclegroupby之后还可以groupby么
- c语言的使用比例远远高于python语言对吗_Python和C语言的语法有什么不同?
- php学习笔记细节部分。
- jquery.ajax之beforeSend方法使用介绍
- attiny13a程序实例_关于ATtiny13A的一段程序
- chainmaker操作笔记
- MySQL8.0下载及安装教程
- Elsevier旗下期刊利用latex模板撰写论文记录
- 2022-08-19 mysql/stonedb-索引优化专利交底书-改进点
- 计算机内存不足16g内存,高手亲自教你win10 16g内存显示内存不足的修复要领
- 关于Python、R、VBA、SAS的生成批量变量名与动态变量引用的问题
- 微博视频代发(流程b)
- pyMuPDF How To
- 对话 CTO | 听掌门教育 CTO 李海坚讲教育公平背后的技术价值
- 【BZOJ2565】最长双回文串 Manacher
- Error1819(HY000):Your password does not satisfy the current policy requirements
- 秋春招总结之MySQL
- python io
热门文章
- concurrently同时开启多个监听服务
- 一、PHP框架Laravel——入门和安装
- LeetCode 1816. 截断句子
- LeetCode 1744. 你能在你最喜欢的那天吃到你最喜欢的糖果吗?(前缀和)
- LintCode MySQL 1928. 网课上课情况分析 I
- LeetCode 1652. 拆炸弹(前缀和)
- LeetCode 第 34 场双周赛(385/2842,前13.5%)
- LeetCode 1389. 按既定顺序创建目标数组
- 剑指Offer - 面试题10- I. 斐波那契数列
- Android全局窗口模糊,javascript – 窗口焦点和模糊事件在Android浏览器上无法正常工作...