一、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.
See also:
vtkLinearExtrusionFilter vtkRotationalExtrusionFilter
Thanks:
This class was initially developed by Daniel Aguilera, CEA/DIF Ported and modified by Philippe Pebay, Kitware, 2011
Tests:
vtkQuadRotationalExtrusionFilter (Tests)

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)
Tests:
vtkRotationalExtrusionFilter (Tests)

示例代码:

#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的更多相关文章

  1. 应用程序框架实战三十四:数据传输对象(DTO)介绍及各类型实体比较

    本文将介绍DDD分层架构中广泛使用的数据传输对象Dto,并且与领域实体Entity,查询实体QueryObject,视图实体ViewModel等几种实体进行比较. 领域实体为何不能一统江湖? 当你阅读 ...

  2. 数据传输对象(DTO)介绍及各类型实体比较

    数据传输对象(DTO)介绍及各类型实体比较 本文将介绍DDD分层架构中广泛使用的数据传输对象Dto,并且与领域实体Entity,查询实体QueryObject,视图实体ViewModel等几种实体进行 ...

  3. Rookey.Frame之实体类

    上周跟大家分享了Rookey.Frame框架的初始化功能,今天继续给大家介绍实体类的设计. 先看下下面菜单实体示例代码: using Rookey.Frame.EntityBase; using Ro ...

  4. ABP框架 - 数据过滤

    文档目录 本节内容: 简介 预定义过滤 ISoftDelete 何时可用? IMustHaveTenant 何时可用? IMayHaveTenant 何时可用? 禁用过滤 关于using声明 关于多租 ...

  5. EF CodeFirst EntityTypeConfiguration 自关联映射配置

    实体示例代码: public class Message { public Message() { } public int ID { get; private set; } public strin ...

  6. c# SqlHelper Class

    using System;using System.Collections;using System.Collections.Generic;using System.Data;using Syste ...

  7. WPF学习之路初识

    WPF学习之路初识   WPF 介绍 .NET Framework 4 .NET Framework 3.5 .NET Framework 3.0 Windows Presentation Found ...

  8. Entity Framework Core 2.0 全局查询过滤器

    不定时更新翻译系列,此系列更新毫无时间规律,文笔菜翻译菜求各位看官老爷们轻喷,如觉得我翻译有问题请挪步原博客地址 本博文翻译自: http://gunnarpeipman.com/2017/08/ef ...

  9. 基于EF Core的Code First模式的DotNetCore快速开发框架

    前言 最近接了几个小单子,因为是小单子,项目规模都比较小,业务相对来说,也比较简单.所以在选择架构的时候,考虑到效率方面的因素,就采取了asp.net+entity framework中的code f ...

随机推荐

  1. 紫书 例题 10-11 UVa 11181(概率计算)

    这道题不能凭感觉做了.要套公式 r个人买了东西叫事件E, 第i个人买东西的概率叫做事件Ei 求得是P(E|Ei), 则P(E|Ei)= P(E|Ei)/ P(E) 那么P(E)可以枚举求得, 用递归求 ...

  2. maven在eclipse运行命令和calss文件没有更新的问题

    使用Eclipse Maven插件[Run As]-[Maven build]时并未为其指定goal或phase 解决方法:  1.使用Eclipse Maven插件[Run As]-[Maven b ...

  3. python和CSV

    lines=[]; 表头数据 lines.append(list(retlist[0].keys())) 明细数据 for city in city_list: { lines.append(list ...

  4. FM算法详解

    https://blog.csdn.net/jediael_lu/article/details/77772565 https://blog.csdn.net/bitcarmanlee/article ...

  5. Spring框架的七大模块

    转载于:https://www.cnblogs.com/Z-wen/p/11681211.html   Spring框架的七大模块 1. Spring Core:Core封装包是框架的最基础部分,提供 ...

  6. PHP教程-反序列化的方法

    序列化是将变量转换为可保存或传输的字符串的过程:反序列化就是在适当的时候把这个字符串再转化成原来的变量使用.这两个过程结合起来,可以轻松地存储和传输数据,使程序更具维护性.兄弟连PHP培训() 1. ...

  7. HTML+CSS知识总结2

    一.position:absolute和float属性的异同 相同点:两者都可以让元素脱离文档流,并可设置宽高 不同点:float仍会占据位置,而position:absolute会覆盖文档流中其他元 ...

  8. BZOJ 3551: [ONTAK2010]Peaks加强版 Kruskal重构树+dfs序+主席树+倍增

    建出来 $Kruskal$ 重构树. 将询问点向上跳到深度最小,且合法的节点上. 那么,得益于重构树优美的性质,这个最终跳到的点为根的所有子节点都可以与询问点互达. 对于子树中求点权第 $k$ 大的问 ...

  9. 网页“console”输出图文信息

    http://www.monmonkey.com/javascript/jiben2.html 参考以上链接中的转义字符使用. http://www.cnblogs.com/Wayou/p/chrom ...

  10. CodeForces 538F A Heap of Heaps

    题意 给定一个长度为n的数组A,将它变为一颗k叉树(1 <= k <= n - 1)(堆的形式编号). 问对于每一个k,有多少个节点小于它的父节点. 解题 显然,最初的想法是暴力.因为树的 ...