vtk旋转扫描实体示例:vtkQuadRotationalExtrusionFilter、vtkRotationalExtrusionFilter
一、vtkQuadRotationalExtrusionFilter
Detailed Description
sweep polygonal data creating "skirt" from free edges and lines, and lines from vertices
vtkQuadRotationalExtrusionFilter is a modeling filter. It takes polygonal data as input and generates polygonal data on output. The input dataset is swept around the z-axis to create new polygonal primitives. These primitives form a "skirt" or swept surface. For example, sweeping a line results in a cylindrical shell, and sweeping a circle creates a torus.
There are a number of control parameters for this filter. You can control whether the sweep of a 2D object (i.e., polygon or triangle strip) is capped with the generating geometry via the "Capping" instance variable. Also, you can control the angle of rotation, and whether translation along the z-axis is performed along with the rotation. (Translation is useful for creating "springs".) You also can adjust the radius of the generating geometry using the "DeltaRotation" instance variable.
The skirt is generated by locating certain topological features. Free edges (edges of polygons or triangle strips only used by one polygon or triangle strips) generate surfaces. This is true also of lines or polylines. Vertices generate lines.
This filter can be used to model axisymmetric objects like cylinders, bottles, and wine glasses; or translational/rotational symmetric objects like springs or corkscrews.
- Warning:
- If the object sweeps 360 degrees, radius does not vary, and the object does not translate, capping is not performed. This is because the cap is unnecessary.
- Some polygonal objects have no free edges (e.g., sphere). When swept, this will result in two separate surfaces if capping is on, or no surface if capping is off.
- Thanks:
- This class was initially developed by Daniel Aguilera, CEA/DIF Ported and modified by Philippe Pebay, Kitware, 2011
Definition at line 74 of file vtkQuadRotationalExtrusionFilter.h.
示例代码:
#ifndef INITIAL_OPENGL
#define INITIAL_OPENGL
#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL)
VTK_MODULE_INIT(vtkInteractionStyle)
#endif
#include <iostream> using namespace std;
#include "vtkCamera.h"
#include "vtkInformation.h"
#include "vtkLineSource.h"
#include "vtkMultiBlockDataSet.h"
#include "vtkNew.h"
#include "vtkPolyDataMapper.h"
#include "vtkPolyDataNormals.h"
#include "vtkProperty.h"
#include "vtkRegressionTestImage.h"
#include "vtkRenderer.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkQuadRotationalExtrusionFilter.h"
#include "vtkTestUtilities.h"
int main()
{
// Create a line source
vtkNew<vtkLineSource> line;
line->SetPoint1( ., ., . );
line->SetPoint2( ., ., . );
line->SetResolution( );
line->Update(); // Create mapper for line segment
vtkNew<vtkPolyDataMapper> lineMapper;
lineMapper->SetInputConnection( line->GetOutputPort() ); // Create actor for line segment
vtkNew<vtkActor> lineActor;
lineActor->SetMapper( lineMapper.GetPointer() );
lineActor->GetProperty()->SetLineWidth( );
lineActor->GetProperty()->SetColor( ., ., . ); // deep sky blue // Create multi-block data set for quad-based sweep
vtkNew<vtkMultiBlockDataSet> lineMB;
lineMB->SetNumberOfBlocks( );
lineMB->GetMetaData( static_cast<unsigned>( ) )->Set( vtkCompositeDataSet::NAME(), "Line" );
lineMB->SetBlock( , line->GetOutput() ); // Create 3/4 of a cylinder by rotational extrusion
vtkNew<vtkQuadRotationalExtrusionFilter> lineSweeper;
lineSweeper->SetResolution( );
lineSweeper->SetInputData( lineMB.GetPointer() );
lineSweeper->SetDefaultAngle( );
lineSweeper->Update(); // Retrieve polydata output
vtkMultiBlockDataSet* cylDS = vtkMultiBlockDataSet::SafeDownCast( lineSweeper->GetOutputDataObject( ) );
vtkPolyData* cyl = vtkPolyData::SafeDownCast( cylDS->GetBlock( ) ); // Create normals for smooth rendering
vtkNew<vtkPolyDataNormals> normals;
normals->SetInputData( cyl ); // Create mapper for surface representation
vtkNew<vtkPolyDataMapper> cylMapper;
cylMapper->SetInputConnection( normals->GetOutputPort() );
cylMapper->SetResolveCoincidentTopologyToPolygonOffset(); // Create mapper for wireframe representation
vtkNew<vtkPolyDataMapper> cylMapperW;
cylMapperW->SetInputData( cyl );
cylMapperW->SetResolveCoincidentTopologyToPolygonOffset(); // Create actor for surface representation
vtkNew<vtkActor> cylActor;
cylActor->SetMapper( cylMapper.GetPointer() );
cylActor->GetProperty()->SetRepresentationToSurface();
cylActor->GetProperty()->SetInterpolationToGouraud();
cylActor->GetProperty()->SetColor( ., 0.3882, . ); // tomato // Create actor for wireframe representation
vtkNew<vtkActor> cylActorW;
cylActorW->SetMapper( cylMapperW.GetPointer() );
cylActorW->GetProperty()->SetRepresentationToWireframe();
cylActorW->GetProperty()->SetColor( ., ., .);
cylActorW->GetProperty()->SetAmbient( . );
cylActorW->GetProperty()->SetDiffuse( . );
cylActorW->GetProperty()->SetSpecular( . ); // Create a renderer, add actors to it
vtkNew<vtkRenderer> ren1;
ren1->AddActor( lineActor.GetPointer() );
ren1->AddActor( cylActor.GetPointer() );
ren1->AddActor( cylActorW.GetPointer() );
ren1->SetBackground( ., ., . ); // Create a renderWindow
vtkNew<vtkRenderWindow> renWin;
renWin->AddRenderer( ren1.GetPointer() );
renWin->SetSize( , );
renWin->SetMultiSamples( ); // Create a good view angle
vtkNew<vtkCamera> camera;
camera->SetClippingRange( 0.576398, 28.8199 );
camera->SetFocalPoint( 0.0463079, -0.0356571, 1.01993 );
camera->SetPosition( -2.47044, 2.39516, -3.56066 );
camera->SetViewUp( 0.607296, -0.513537, -0.606195 );
ren1->SetActiveCamera( camera.GetPointer() ); // Create interactor
vtkNew<vtkRenderWindowInteractor> iren;
iren->SetRenderWindow( renWin.GetPointer() );
// Render and test
renWin->Render();
iren->Start(); return ;
}
运行显示结果:

2、vtkRotationalExtrusionFilter
Detailed Description
sweep polygonal data creating "skirt" from free edges and lines, and lines from vertices
vtkRotationalExtrusionFilter is a modeling filter. It takes polygonal data as input and generates polygonal data on output. The input dataset is swept around the z-axis to create new polygonal primitives. These primitives form a "skirt" or swept surface. For example, sweeping a line results in a cylindrical shell, and sweeping a circle creates a torus.
There are a number of control parameters for this filter. You can control whether the sweep of a 2D object (i.e., polygon or triangle strip) is capped with the generating geometry via the "Capping" instance variable. Also, you can control the angle of rotation, and whether translation along the z-axis is performed along with the rotation. (Translation is useful for creating "springs".) You also can adjust the radius of the generating geometry using the "DeltaRotation" instance variable.
The skirt is generated by locating certain topological features. Free edges (edges of polygons or triangle strips only used by one polygon or triangle strips) generate surfaces. This is true also of lines or polylines. Vertices generate lines.
This filter can be used to model axisymmetric objects like cylinders, bottles, and wine glasses; or translational/rotational symmetric objects like springs or corkscrews.
- Warning:
- If the object sweeps 360 degrees, radius does not vary, and the object does not translate, capping is not performed. This is because the cap is unnecessary.
- Some polygonal objects have no free edges (e.g., sphere). When swept, this will result in two separate surfaces if capping is on, or no surface if capping is off.
- See also:
- vtkLinearExtrusionFilter
- Examples:
- vtkRotationalExtrusionFilter (Examples)
示例代码:
#include <iostream>
#ifndef INITIAL_OPENGL
#define INITIAL_OPENGL
#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL)
VTK_MODULE_INIT(vtkInteractionStyle)
#endif
using namespace std;
// .SECTION Thanks
// This test was written by Philippe Pebay, Kitware SAS 2011 #include "vtkCamera.h"
#include "vtkLineSource.h"
#include "vtkNew.h"
#include "vtkPolyDataMapper.h"
#include "vtkPolyDataNormals.h"
#include "vtkProperty.h"
#include "vtkRegressionTestImage.h"
#include "vtkRenderer.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkRotationalExtrusionFilter.h" int main()
{
// Create a line source
vtkNew<vtkLineSource> line;
line->SetPoint1( ., ., . );
line->SetPoint2( ., ., . );
line->SetResolution( ); // Create mapper for line segment
vtkNew<vtkPolyDataMapper> lineMapper;
lineMapper->SetInputConnection( line->GetOutputPort() ); // Create actor for line segment
vtkNew<vtkActor> lineActor;
lineActor->SetMapper( lineMapper.GetPointer() );
lineActor->GetProperty()->SetLineWidth( );
lineActor->GetProperty()->SetColor( ., ., . ); // deep sky blue // Create 3/4 of a cylinder by rotational extrusion
vtkNew<vtkRotationalExtrusionFilter> lineSweeper;
lineSweeper->SetResolution( );
lineSweeper->SetInputConnection( line->GetOutputPort() );
lineSweeper->SetAngle( ); // Create normals for smooth rendering
vtkNew<vtkPolyDataNormals> normals;
normals->SetInputConnection( lineSweeper->GetOutputPort() ); // Create mapper for surface representation
vtkNew<vtkPolyDataMapper> cylMapper;
cylMapper->SetInputConnection( normals->GetOutputPort() );
cylMapper->SetResolveCoincidentTopologyToPolygonOffset(); // Create mapper for wireframe representation
vtkNew<vtkPolyDataMapper> cylMapperW;
cylMapperW->SetInputConnection( lineSweeper->GetOutputPort() );
cylMapperW->SetResolveCoincidentTopologyToPolygonOffset();
// Create actor for surface representation
vtkNew<vtkActor> cylActor;
cylActor->SetMapper( cylMapper.GetPointer() );
cylActor->GetProperty()->SetRepresentationToSurface();
cylActor->GetProperty()->SetInterpolationToGouraud();
cylActor->GetProperty()->SetColor( ., ., . ); // tomato
// Create actor for wireframe representation
vtkNew<vtkActor> cylActorW;
cylActorW->SetMapper( cylMapperW.GetPointer() );
cylActorW->GetProperty()->SetRepresentationToWireframe();
cylActorW->GetProperty()->SetColor( ., ., .);
cylActorW->GetProperty()->SetAmbient( . );
cylActorW->GetProperty()->SetDiffuse( . );
cylActorW->GetProperty()->SetSpecular( . );
// Create a renderer, add actors to it
vtkNew<vtkRenderer> ren1;
ren1->AddActor( lineActor.GetPointer() );
ren1->AddActor( cylActor.GetPointer() );
ren1->AddActor( cylActorW.GetPointer() );
ren1->SetBackground( ., ., . ); // Create a renderWindow
vtkNew<vtkRenderWindow> renWin;
renWin->AddRenderer( ren1.GetPointer() );
renWin->SetSize( , );
renWin->SetMultiSamples( );
// Create a good view angle
vtkNew<vtkCamera> camera;
camera->SetClippingRange( 0.576398, 28.8199 );
camera->SetFocalPoint( 0.0463079, -0.0356571, 1.01993 );
camera->SetPosition( -2.47044, 2.39516, -3.56066 );
camera->SetViewUp( 0.607296, -0.513537, -0.606195 );
ren1->SetActiveCamera( camera.GetPointer() ); // Create interactor
vtkNew<vtkRenderWindowInteractor> iren;
iren->SetRenderWindow( renWin.GetPointer() ); // Render and test
renWin->Render();
iren->Start(); return ;
}
代码运行结果:

vtk旋转扫描实体示例:vtkQuadRotationalExtrusionFilter、vtkRotationalExtrusionFilter的更多相关文章
- 应用程序框架实战三十四:数据传输对象(DTO)介绍及各类型实体比较
本文将介绍DDD分层架构中广泛使用的数据传输对象Dto,并且与领域实体Entity,查询实体QueryObject,视图实体ViewModel等几种实体进行比较. 领域实体为何不能一统江湖? 当你阅读 ...
- 数据传输对象(DTO)介绍及各类型实体比较
数据传输对象(DTO)介绍及各类型实体比较 本文将介绍DDD分层架构中广泛使用的数据传输对象Dto,并且与领域实体Entity,查询实体QueryObject,视图实体ViewModel等几种实体进行 ...
- Rookey.Frame之实体类
上周跟大家分享了Rookey.Frame框架的初始化功能,今天继续给大家介绍实体类的设计. 先看下下面菜单实体示例代码: using Rookey.Frame.EntityBase; using Ro ...
- ABP框架 - 数据过滤
文档目录 本节内容: 简介 预定义过滤 ISoftDelete 何时可用? IMustHaveTenant 何时可用? IMayHaveTenant 何时可用? 禁用过滤 关于using声明 关于多租 ...
- EF CodeFirst EntityTypeConfiguration 自关联映射配置
实体示例代码: public class Message { public Message() { } public int ID { get; private set; } public strin ...
- c# SqlHelper Class
using System;using System.Collections;using System.Collections.Generic;using System.Data;using Syste ...
- WPF学习之路初识
WPF学习之路初识 WPF 介绍 .NET Framework 4 .NET Framework 3.5 .NET Framework 3.0 Windows Presentation Found ...
- Entity Framework Core 2.0 全局查询过滤器
不定时更新翻译系列,此系列更新毫无时间规律,文笔菜翻译菜求各位看官老爷们轻喷,如觉得我翻译有问题请挪步原博客地址 本博文翻译自: http://gunnarpeipman.com/2017/08/ef ...
- 基于EF Core的Code First模式的DotNetCore快速开发框架
前言 最近接了几个小单子,因为是小单子,项目规模都比较小,业务相对来说,也比较简单.所以在选择架构的时候,考虑到效率方面的因素,就采取了asp.net+entity framework中的code f ...
随机推荐
- 清北学堂提高组突破营游记day3
讲课人更换成dms. 真的今天快把我们逼疯了.. 今天主攻数据结构, 基本上看完我博客能理解个大概把, 1.LCA 安利之前个人博客链接.之前自己学过QWQ. 2.st表.同上. 3.字符串哈希.同上 ...
- 高性能mysql 第10章 复制
复制功能不仅能够构建高可用的应用,同时也是高可用性,可扩展性,灾难恢复,备份以及数据仓库等工作的基础. mysql支持两种复制方式:基于语句的复制和基于行的复制.基于语句的复制(也成为逻辑复制)是早期 ...
- 1、检查并修改mysql的my.ini的配置文件
代码如下: default-character-set=utf8 2.建立数据库是要指定字符集 代码如下: create database mydb default character set utf ...
- hiho #1066 : 无间道之并查集
#1066 : 无间道之并查集 时间限制:20000ms 单点时限:1000ms 内存限制:256MB 描述 这天天气晴朗.阳光明媚.鸟语花香,空气中弥漫着春天的气息……额,说远了,总之,小Hi和小H ...
- FFT用于高效大数乘法(当模板用)
转载来源:https://blog.csdn.net/zj_whu/article/details/72954766 #include <cstdio> #include <cmat ...
- Presto部署指南
1.Presto简介说明 Presto是一个开源的分布式SQL查询引擎,适用于交互式分析查询,数据量支持GB到PB字节. Presto的设计和编写完全是为了解决像Facebook这样规模的商业数据仓库 ...
- js获取页面的各种高度与宽度
document.body.scrollTop等属性可以获取页面滚动距离等,但是此类属性在xhtml标准网页或者更简单的说是带<!DOCTYPE ..>标签的页面里得到的结果是0, 所以一 ...
- Java常考面试题整理(五)
81.RMI中的远程接口(Remote Interface)扮演了什么样的角色? 参考答案: 远程接口用来标识哪些方法是可以被非本地虚拟机调用的接口.远程对象必须要直接或者是间接实现远程接口.实现了远 ...
- Java常考面试题整理(四)
有关所有Swing相关的面试题,都可以说是凑数的,感觉自己在敲这些的时候感觉一点用处都没有,可以从第72条开始看. 61.说出三种支持重绘(painting)的组件. 参考答案: Canvas,Fra ...
- spring-sevlet简单配置
<<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www ...