一、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. 泛型 class TimeComparator<Asr> implements Comparator<Asr>

    class TimeComparator<Asr> implements Comparator<Asr> 为何需要改为 class TimeComparator impleme ...

  2. PHP数字处理

    援引自博文 https://blog.csdn.net/hongxiaoshuang/article/details/54598757 ceil -- 进一法取整 float ceil ( float ...

  3. Acwing-119-袭击(分治)

    链接: https://www.acwing.com/problem/content/121/ 题意: 在与联盟的战斗中屡战屡败后,帝国撤退到了最后一个据点. 依靠其强大的防御系统,帝国击退了联盟的六 ...

  4. python读取文件出现\ufeff问题

    现象: 读取csv文件,表头为'ID',但读取后显示'\ufeffID',所以使用dict['ID']读取会报错 原因: 该文件保存时保存了BOM,保存于文件头部 解决: 将原有的 file_cont ...

  5. TOP K和Partition对比

    TOP k算法适用于海量数据,不用一批装入内存.. partition算法需要全部装入内存排序,需要修改原数据..

  6. 图片url 设置大小

    假设有一个图片url为:http://localhost/PictureUrl/ImgURL.aspx?PicUrl=.//testImg\test.jpg (文件夹testImg下有个文件test. ...

  7. C/C++数据类型判断与转换

    最近总想着写一些通用的代码,然集中收纳到自己的私人库中去,这些代码期望能与公司基础数据结构无关.然而这比较难,因为无论如何,必需要用到一些结构 化的东西,这些与基础引擎等有关,必需极度抽象才可以做到层 ...

  8. C# image/byte[]/string/互转

    public Image ByteArrayToImage(byte[] iamgebytes) { MemoryStream ms = new MemoryStream(iamgebytes); I ...

  9. malloc,calloc,realloc

    与堆操作相关的两个函数 malloc #include<stdio.h> #include<stdlib.h> #include<string.h> int mai ...

  10. Jmeter(二) Jmeter组件介绍

    一.测试计划 测试的起点,同时也是其他所有组件的容器 二.线程(用户) Setup 线程组:一种特殊类型的线程,可用于执行预测试操作.即执行测试前进行定期线程组的执行 Teardown 线程组:一种特 ...