在本实例中,我们将用到vtkQuadric、vtkSampleFunction、vtkContourFilter三个类,分别是二次曲面函数、函数曲面抽样和等高滤波。

vtkQuadric负责二次曲面基本参数的设置,vtkSampleFunction则是对二次曲面进行等间隔逐点采样,在本例中采样点数为50*50*50。vtkContourFilter负责将采集到空间点,转成vtkPolyData型对象。

#ifndef INITIAL_OPENGL
#define INITIAL_OPENGL
#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL)
VTK_MODULE_INIT(vtkInteractionStyle)
VTK_MODULE_INIT(vtkRenderingFreeType)
#endif
#include <iostream>
using namespace std;
#include <vtkSmartPointer.h>
#include <vtkQuadric.h>
#include <vtkSampleFunction.h>
#include <vtkContourFilter.h>
#include <vtkActor.h>
#include <vtkProperty.h>
#include <vtkRenderWindow.h>
#include <vtkRenderer.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkPolyDataMapper.h>
#include <vtkCellArray.h>
#include <vtkImageDataGeometryFilter.h>
#include <vtkImageData.h>
#include <vtkImageActor.h> int main()
{
//创建二次函数
vtkSmartPointer<vtkQuadric>quadric=vtkSmartPointer<vtkQuadric>::New();
quadric->SetCoefficients(0.5,,0.2,,0.1,,,0.2,,); //二次函数采样分辨率
vtkSmartPointer<vtkSampleFunction>sample=vtkSmartPointer<vtkSampleFunction>::New();
sample->SetSampleDimensions(,,);
sample->SetImplicitFunction(quadric);
double xmin=,xmax=,ymin=,ymax=,zmin=,zmax=;
sample->SetModelBounds(xmin,xmax,ymin,ymax,zmin,zmax);
vtkSmartPointer<vtkContourFilter> contourFilter=vtkSmartPointer<vtkContourFilter>::New();
contourFilter->SetInputConnection(sample->GetOutputPort());
contourFilter->GenerateValues(,,);
contourFilter->Update();
/**在此处可以有两种方法,使得contourFilter得到的vtkPolyData型对象与mapper对接
1.用contourFilter->GetOutput();得到PolyData,然后输入mapper;
2.再有就是,直接调用contourFilter->GetOutputPort()输入到 mapper->SetInputConnection()
******************************************************************************************/
vtkSmartPointer<vtkPolyData> polyData= contourFilter->GetOutput();
//可视化,设置mapper、actor
vtkSmartPointer<vtkPolyDataMapper>mapper=vtkSmartPointer<vtkPolyDataMapper>::New();
// mapper->SetInputConnection(contourFilter->GetOutputPort());
mapper->SetInputData(polyData); vtkSmartPointer<vtkActor>actor=vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mapper);
actor->SetOrigin(,,); //设置renderer、window和interactor
vtkSmartPointer<vtkRenderer> renderer=vtkSmartPointer<vtkRenderer>::New();
vtkSmartPointer<vtkRenderWindow> renWin=vtkSmartPointer<vtkRenderWindow>::New();
vtkSmartPointer<vtkRenderWindowInteractor> iren=vtkSmartPointer<vtkRenderWindowInteractor>::New();
renWin->AddRenderer(renderer);
iren->SetRenderWindow(renWin); renderer->AddActor(actor);
// renderer->AddActor(imageActor);
renderer->SetBackground(0.3,0.6,0.3);
renWin->Render();
iren->Start(); return ;
}
#ifndefINITIAL_OPENGL
#defineINITIAL_OPENGL
#include<vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL)
VTK_MODULE_INIT(vtkInteractionStyle)
VTK_MODULE_INIT(vtkRenderingFreeType)
#endif
#include<iostream>
usingnamespacestd;
#include<vtkSmartPointer.h>
#include<vtkQuadric.h>
#include<vtkSampleFunction.h>
#include<vtkContourFilter.h>
#include<vtkActor.h>
#include<vtkProperty.h>
#include<vtkRenderWindow.h>
#include<vtkRenderer.h>
#include<vtkRenderWindowInteractor.h>
#include<vtkPolyDataMapper.h>
#include<vtkCellArray.h>
#include<vtkImageDataGeometryFilter.h>
#include<vtkImageData.h>
#include<vtkImageActor.h>

intmain()
{
//创建二次函数
vtkSmartPointer<vtkQuadric>quadric=vtkSmartPointer<vtkQuadric>::New();
quadric->SetCoefficients(0.5,,0.2,,0.1,,,0.2,,);

//二次函数采样分辨率
vtkSmartPointer<vtkSampleFunction>sample=vtkSmartPointer<vtkSampleFunction>::New();
sample->SetSampleDimensions(,,);
sample->SetImplicitFunction(quadric);
doublexmin=,xmax=,ymin=,ymax=,zmin=,zmax=;
sample->SetModelBounds(xmin,xmax,ymin,ymax,zmin,zmax);
vtkSmartPointer<vtkContourFilter>contourFilter=vtkSmartPointer<vtkContourFilter>::New();
contourFilter->SetInputConnection(sample->GetOutputPort());
contourFilter->GenerateValues(,,);
contourFilter->Update();
vtkSmartPointer<vtkPolyData>polyData=contourFilter->GetOutput();

//可视化,设置mapper、actor
vtkSmartPointer<vtkPolyDataMapper>mapper=vtkSmartPointer<vtkPolyDataMapper>::New();
//mapper->SetInputConnection(contourFilter->GetOutputPort());
mapper->SetInputData(polyData);

vtkSmartPointer<vtkActor>actor=vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mapper);
actor->SetOrigin(,,);

//设置renderer、window和interactor
vtkSmartPointer<vtkRenderer>renderer=vtkSmartPointer<vtkRenderer>::New();
vtkSmartPointer<vtkRenderWindow>renWin=vtkSmartPointer<vtkRenderWindow>::New();
vtkSmartPointer<vtkRenderWindowInteractor>iren=vtkSmartPointer<vtkRenderWindowInteractor>::New();
renWin->AddRenderer(renderer);
iren->SetRenderWindow(renWin);

renderer->AddActor(actor);
//renderer->AddActor(imageActor);
renderer->SetBackground(0.3,0.6,0.3);
renWin->Render();
iren->Start();

return;
}

												

vtkQuadric创建二次曲面的更多相关文章

  1. vtkQuadratic创建半球面

    用的关键类:vtkQuadric.vtkSampleFunction.vtkContourFilter:用于创建方框的类vtkOutlineFilter #ifndef INITIAL_OPENGL ...

  2. <opengl>使用glu绘制二次曲面

    绘制二次曲面通常要以下四步:   1.首先我们创建一个二次方程状态对象 GLUquadricObj *m_pObj;    //保存绘图模式.法线模式.法线朝向.纹理等信息 //创建二次方程状态对象 ...

  3. In-Memory:在内存中创建临时表和表变量

    在Disk-Base数据库中,由于临时表和表变量的数据存储在tempdb中,如果系统频繁地创建和更新临时表和表变量,大量的IO操作集中在tempdb中,tempdb很可能成为系统性能的瓶颈.在SQL ...

  4. 创建 OVS flat network - 每天5分钟玩转 OpenStack(134)

    上一节完成了 flat 的配置工作,今天创建 OVS flat network.Admin -> Networks,点击 "Create Network" 按钮. 显示创建页 ...

  5. ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库

    在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...

  6. ABP入门系列(2)——通过模板创建MAP版本项目

    一.从官网创建模板项目 进入官网下载模板项目 依次按下图选择: 输入验证码开始下载 下载提示: 二.启动项目 使用VS2015打开项目,还原Nuget包: 设置以Web结尾的项目,设置为启动项目: 打 ...

  7. 记一次tomcat线程创建异常调优:unable to create new native thread

    测试在进行一次性能测试的时候发现并发300个请求时出现了下面的异常: HTTP Status 500 - Handler processing failed; nested exception is ...

  8. 在WPF中使用依赖注入的方式创建视图

    在WPF中使用依赖注入的方式创建视图 0x00 问题的产生 互联网时代桌面开发真是越来越少了,很多应用都转到了浏览器端和移动智能终端,相应的软件开发上的新技术应用到桌面开发的文章也很少.我之前主要做W ...

  9. 在一个空ASP.NET Web项目上创建一个ASP.NET Web API 2.0应用

    由于ASP.NET Web API具有与ASP.NET MVC类似的编程方式,再加上目前市面上专门介绍ASP.NET Web API 的书籍少之又少(我们看到的相关内容往往是某本介绍ASP.NET M ...

随机推荐

  1. MySQL优化一例

    DELIMITER $$ USE `xxx`$$ DROP FUNCTION IF EXISTS `F_getBuluDates`$$ CREATE DEFINER=`root`@`localhost ...

  2. Oracle学习笔记二 初识Oracle(二)

    Windows 中的 Oracle 服务 Oracle 9i的每个实例在Windows中都作为一项服务启动 服务是在 Windows 注册表中注册的可执行进程,由 Windows 操作系统管理 “服务 ...

  3. python3: error while loading shared libraries: libpython3.5m.so.1.0: cannot open shared object file: No such file or directory

    安装python3遇到报错: wget https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tgz ./configure --prefix=/u ...

  4. 用nginx一分钟实现文件服务器

    在局域网内和同事共享文件的好方法 1 安装nginx sudo apt-get install nginx 2 创建conf文件 sudo gedit /etc/nginx/conf.d/file_s ...

  5. 1-linux系统管理(一)之安装RHEL 6.4

    linux系统管理之安装RHEL 6.4 进入安装界面 这里选择跳过 点击下一步 选择安装语言 选择键盘 选择系统储存方式 选择是否格式化储存设备 给安装的系统一个计算机名 选择时区 给root一个密 ...

  6. 常用的14种HTTP状态码速查手册

    分类 1xx \> Information(信息) // 接收的请求正在处理 2xx \> Success(成功) // 请求正常处理完毕 3xx \> Redirection(重定 ...

  7. winform 用户控件、 动态创建添加控件、timer控件、控件联动

    用户控件: 相当于自定义的一个panel 里面可以放各种其他控件,并可以在后台一下调用整个此自定义控件. 使用方法:在项目上右键.添加.用户控件,之后用户控件的编辑与普通容器控件类似.如果要在后台往窗 ...

  8. [LeetCode] Search a 2D Matrix 搜索一个二维矩阵

    Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the follo ...

  9. FineUI(专业版)v3.0.0 发布,手机、平板和桌面全支持!

    FineUI(专业版)v3.0.0 已经正式发布,全面支持手机.平板和桌面!       自 2008 年 4 月发布第一个版本,我们持续更新了 126 个版本,拥有 16000 多位注册用户,130 ...

  10. SQL函数汇总【精选篇】

    1.绝对值   SQL:select abs(-1) value  O:select abs(-1) value from dual  2.取整(大)   S:select ceiling(-1.00 ...