用的关键类:vtkQuadric、vtkSampleFunction、vtkContourFilter;用于创建方框的类vtkOutlineFilter

 #ifndef INITIAL_OPENGL
#define INITIAL_OPENGL
#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL)
VTK_MODULE_INIT(vtkInteractionStyle)
#endif
#include <iostream>
using namespace std;
#include <vtkQuadric.h>
#include <vtkSampleFunction.h>
#include <vtkContourFilter.h>
#include <vtkOutlineFilter.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkProperty.h>
#include <vtkRenderWindow.h>
#include <vtkRenderer.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkImageData.h>
#include <vtkSmartPointer.h> void Sphere();
void PlotFunction(vtkQuadric*quadric,double value);
int main()
{
Sphere();
return ;
}
void Sphere()
{
vtkSmartPointer<vtkQuadric>quadric=vtkSmartPointer<vtkQuadric>::New();
quadric->SetCoefficients(0.5,0.5,,,,,,,,); // F(x,y,z) = a0*x^2 + a1*y^2 + a2*z^2 + a3*x*y + a4*y*z + a5*x*z + a6*x + a7*y + a8*z + a9
// F(x,y,z) = 1*x^2 + 1*y^2 + 1*z^2
PlotFunction(quadric,);
} void PlotFunction(vtkQuadric *quadric, double value){
//采样二次函数
vtkSmartPointer<vtkSampleFunction>sample=vtkSmartPointer<vtkSampleFunction>::New();
sample->SetSampleDimensions(,,);
sample->SetImplicitFunction(quadric);
//x,y,z取值范围
double xmin=-,xmax=,ymin=-,ymax=,zmin=,zmax=;
double scale=0.2;
sample->SetModelBounds(xmin,xmax,ymin,ymax,zmin,zmax);
//创建5个曲面surfaces F(x,y,z) = constant /*vtkContourFilter*contours=vtkContourFilter::New();
contours->SetInputData(sample->GetOutput());
contours->GenerateValues(5,0,1.2);*/
//创建第0 isosurface
vtkSmartPointer<vtkContourFilter>contours=vtkSmartPointer<vtkContourFilter>::New();
contours->SetInputConnection(sample->GetOutputPort());
contours->GenerateValues(,value,value);
//将contours映射到图形图元
vtkSmartPointer<vtkPolyDataMapper>contourMapper=vtkSmartPointer<vtkPolyDataMapper>::New();
contourMapper->SetInputConnection(contours->GetOutputPort());
contourMapper->SetScalarRange(,1.2);
//创建contour演员
vtkSmartPointer<vtkActor>contourActor=vtkSmartPointer<vtkActor>::New();
contourActor->SetMapper(contourMapper);
/*创建一个方盒,将函数曲面包围起来,标识抽样体*/
//创建方盒的边看线
vtkSmartPointer<vtkOutlineFilter>outline=vtkSmartPointer<vtkOutlineFilter>::New();
outline->SetInputConnection(sample->GetOutputPort());
//将线框映射为图形图元
vtkSmartPointer<vtkPolyDataMapper>outlineMapper=vtkSmartPointer<vtkPolyDataMapper>::New();
outlineMapper->SetInputConnection(outline->GetOutputPort());
//创建outline演员
vtkSmartPointer<vtkActor> outlineActor=vtkSmartPointer<vtkActor>::New();
outlineActor->SetMapper(outlineMapper);
outlineActor->GetProperty()->SetColor(,,); //创建显示窗口
vtkSmartPointer<vtkRenderer> ren1=vtkSmartPointer<vtkRenderer>::New();
vtkSmartPointer<vtkRenderWindow>renWin=vtkSmartPointer<vtkRenderWindow>::New();
renWin->AddRenderer(ren1);
vtkSmartPointer<vtkRenderWindowInteractor>iren=vtkSmartPointer<vtkRenderWindowInteractor>::New();
iren->SetRenderWindow(renWin);
//在场景中添加演员
ren1->AddActor(contourActor);
ren1->AddActor(outlineActor);
ren1->SetBackground(,,);
//渲染 互动
renWin->Render();
iren->Start();
}
#ifndefINITIAL_OPENGL
#defineINITIAL_OPENGL
#include<vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL)
VTK_MODULE_INIT(vtkInteractionStyle)
#endif
#include<iostream>
usingnamespacestd;
#include<vtkQuadric.h>
#include<vtkSampleFunction.h>
#include<vtkContourFilter.h>
#include<vtkOutlineFilter.h>
#include<vtkPolyDataMapper.h>
#include<vtkActor.h>
#include<vtkProperty.h>
#include<vtkRenderWindow.h>
#include<vtkRenderer.h>
#include<vtkRenderWindowInteractor.h>
#include<vtkImageData.h>
#include<vtkSmartPointer.h>

voidSphere();
voidPlotFunction(vtkQuadric*quadric,doublevalue);
intmain()
{
Sphere();
return;
}
voidSphere()
{
vtkSmartPointer<vtkQuadric>quadric=vtkSmartPointer<vtkQuadric>::New();
quadric->SetCoefficients(0.5,0.5,,,,,,,,);

//F(x,y,z)=a0*x^2+a1*y^2+a2*z^2+a3*x*y+a4*y*z+a5*x*z+a6*x+a7*y+a8*z+a9
//F(x,y,z)=1*x^2+1*y^2+1*z^2
PlotFunction(quadric,);
}

voidPlotFunction(vtkQuadric*quadric,doublevalue){
//采样二次函数
vtkSmartPointer<vtkSampleFunction>sample=vtkSmartPointer<vtkSampleFunction>::New();
sample->SetSampleDimensions(,,);
sample->SetImplicitFunction(quadric);
//x,y,z取值范围
doublexmin=-,xmax=,ymin=-,ymax=,zmin=,zmax=;
doublescale=0.2;
sample->SetModelBounds(xmin,xmax,ymin,ymax,zmin,zmax);
//创建5个曲面surfacesF(x,y,z)=constant

/*vtkContourFilter*contours=vtkContourFilter::New();
contours->SetInputData(sample->GetOutput());
contours->GenerateValues(5,0,1.2);*/
//创建第0isosurface
vtkSmartPointer<vtkContourFilter>contours=vtkSmartPointer<vtkContourFilter>::New();
contours->SetInputConnection(sample->GetOutputPort());
contours->GenerateValues(,value,value);
//将contours映射到图形图元
vtkSmartPointer<vtkPolyDataMapper>contourMapper=vtkSmartPointer<vtkPolyDataMapper>::New();
contourMapper->SetInputConnection(contours->GetOutputPort());
contourMapper->SetScalarRange(,1.2);
//创建contour演员
vtkSmartPointer<vtkActor>contourActor=vtkSmartPointer<vtkActor>::New();
contourActor->SetMapper(contourMapper);
/*创建一个方盒,将函数曲面包围起来,标识抽样体*/
//创建方盒的边看线
vtkSmartPointer<vtkOutlineFilter>outline=vtkSmartPointer<vtkOutlineFilter>::New();
outline->SetInputConnection(sample->GetOutputPort());
//将线框映射为图形图元
vtkSmartPointer<vtkPolyDataMapper>outlineMapper=vtkSmartPointer<vtkPolyDataMapper>::New();
outlineMapper->SetInputConnection(outline->GetOutputPort());
//创建outline演员
vtkSmartPointer<vtkActor>outlineActor=vtkSmartPointer<vtkActor>::New();
outlineActor->SetMapper(outlineMapper);
outlineActor->GetProperty()->SetColor(,,);

//创建显示窗口
vtkSmartPointer<vtkRenderer>ren1=vtkSmartPointer<vtkRenderer>::New();
vtkSmartPointer<vtkRenderWindow>renWin=vtkSmartPointer<vtkRenderWindow>::New();
renWin->AddRenderer(ren1);
vtkSmartPointer<vtkRenderWindowInteractor>iren=vtkSmartPointer<vtkRenderWindowInteractor>::New();
iren->SetRenderWindow(renWin);
//在场景中添加演员
ren1->AddActor(contourActor);
ren1->AddActor(outlineActor);
ren1->SetBackground(,,);
//渲染互动
renWin->Render();
iren->Start();
}

												

vtkQuadratic创建半球面的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  8. TODO:GitHub创建组织的步骤

    TODO:GitHub创建组织的步骤 使用GitHub进行团队合作,写这个步骤主要作用是为了OneTODO作为一个团队组织进行代码的分享,让更多人来参与. 使用帐号.密码登录GitHub 2.右上角加 ...

  9. java Web项目创建之一(普通java web项目的创建与发布)

    1.创建新的web项目 file->new_>Dynamic Web Project(如图) 或file->new->Project->Web->Dynamic W ...

随机推荐

  1. python中的ValueError

    在初学时候,会遇到这种错误,修改了代码,一一比对了代码,发现代码,没有错误,可是就是运行不了. 我们先从错误的语句来入手!(这显示了英语很重要)   ValueError: need more tha ...

  2. codegate-quals-2013-vuln100

    最近想多看看题目积累些经验, -------- 程序分析 64位,保护措施都没开 gdb-peda$ checksec CANARY : disabled FORTIFY : disabled NX ...

  3. 父容器利用opacity设置透明后,子元素跟着变透明的解决方案

    背景半透明,子元素不透明的效果经常需要用到.通常对父容器使用opacity属性时,子元素也跟着变透明,所以不妨设置父容器的 background-color:rgba(r,g,b,x); 其中x取值从 ...

  4. java基础算法之插入排序

    一.插入排序介绍 插入排序(Insertion Sort)是一种简单直观的排序算法.它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入.插入排序在实现上,通 ...

  5. express中url的参数传递和获取

    1,传统get参数 浏览器通过这种形式的url访问localhost/userlist?id=xxx&name=yyy,这种方式可以通过req.query.id获取参数的值 router.ge ...

  6. Opserver简单部署

    版权声明:本文为博主原创文章,未经博主允许不得转载. 一.下载opserver项目 地址:https://github.com/opserver/Opserver/ 二.用vs2012及以上版本打卡o ...

  7. STL bind1st bind2nd详解

    STL bind1st bind2nd详解   先不要被吓到,其实这两个配接器很简单.首先,他们都在头文件<functional>中定义.其次,bind就是绑定的意思,而1st就代表fir ...

  8. 测试对于list的sort与sorted的效率

    sorted from time import clock from random import randint start = clock() a = [randint(0,1000000) for ...

  9. caffe添加自己的层

    首先修改src/caffe/proto/下的caffe.proto,修改好后需要编译 然后修改include/caffe/layers/logwxl_layer.hpp 然后修改src/caffe/l ...

  10. 奇异值分解 SVD

    一基本知识 A是一个m*n的矩阵,那么A的SVD分解为\(A_{mn} = U_{mm}\Sigma _{mn}V^T_{nn}\),其中\(U^TU = I\),\(V^TV = I\),UV的列向 ...