vtkWarpVector :

deform geometry with vector data

vtkWarpVector is a filter that modifies point coordinates by moving points along vector times the scale factor. Useful for showing flow profiles or mechanical deformation.

The filter passes both its point data and cell data to its output.

Examples:
vtkWarpVector (Examples)
Tests:
vtkWarpVector (Tests)

示例程序1:

#ifndef INITIAL_OPENGL
#define INITIAL_OPENGL
#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL)
VTK_MODULE_INIT(vtkInteractionStyle)
#endif
#include <iostream>
using namespace std;
#include <vtkVersion.h>
#include <vtkActor.h>
#include <vtkCellArray.h>
#include <vtkDoubleArray.h>
#include <vtkLine.h>
#include <vtkPointData.h>
#include <vtkPoints.h>
#include <vtkPolyData.h>
#include <vtkPolyDataMapper.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkSmartPointer.h>
#include <vtkWarpVector.h> int main()
{
///沿x轴方向创建5个点,x坐标分别为0、1、2、3、4。
/// 所有点的y、z坐标为0。即初始的5个点在水平线上
vtkSmartPointer<vtkPoints>points=vtkSmartPointer<vtkPoints>::New();
points->InsertNextPoint(,,);
points->InsertNextPoint(,,);
points->InsertNextPoint(,,);
points->InsertNextPoint(,,);
points->InsertNextPoint(,,);
//将以上5个点,连成4段线
vtkSmartPointer<vtkCellArray> lines=vtkSmartPointer<vtkCellArray>::New();
vtkSmartPointer<vtkLine> line=vtkSmartPointer<vtkLine>::New();
for(int i=;i<;i++)
{
line->GetPointIds()->SetId(,i);
line->GetPointIds()->SetId(,i+);
lines->InsertNextCell(line);
} vtkSmartPointer<vtkDoubleArray> warpData=vtkSmartPointer<vtkDoubleArray>::New();
warpData->SetNumberOfComponents();
warpData->SetName("warpData");
//第1个点不动
double warp[]={,,};
warp[]=0.0;
warpData->InsertNextTuple(warp);
//第2个点沿y轴移动0.5
warp[]=0.5;
warpData->InsertNextTuple(warp);
//第3个点沿y轴移动0.3
warp[]=0.3;
warpData->InsertNextTuple(warp);
//第4个点沿y轴移动0.0
warp[] = 0.0;
warpData->InsertNextTuple(warp);
//第5个点沿y轴移动0.1
warp[] = 0.1;
warpData->InsertNextTuple(warp); //创建PolyData对象
vtkSmartPointer<vtkPolyData> polydata=vtkSmartPointer<vtkPolyData>::New();
polydata->SetPoints(points);
polydata->SetLines(lines);
polydata->GetPointData()->AddArray(warpData);
polydata->GetPointData()->SetActiveVectors(warpData->GetName());
//WarpVector will use the array marked as active vector in polydata
//it has to be a 3 component array
//with the same number of tuples as points in polydata
vtkSmartPointer<vtkWarpVector> warpVector =vtkSmartPointer<vtkWarpVector>::New();
warpVector->SetInputData(polydata);
warpVector->Update(); vtkSmartPointer<vtkPolyDataMapper>mapper=vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputData(warpVector->GetPolyDataOutput()); vtkSmartPointer<vtkActor> actor=vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mapper); vtkSmartPointer<vtkRenderer> renderer =vtkSmartPointer<vtkRenderer>::New();
renderer->AddActor(actor);
renderer->SetBackground(., ., .); vtkSmartPointer<vtkRenderWindow> renderWindow =vtkSmartPointer<vtkRenderWindow>::New();
renderWindow->AddRenderer(renderer); vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =vtkSmartPointer<vtkRenderWindowInteractor>::New();
renderWindowInteractor->SetRenderWindow(renderWindow);
renderWindow->Render();
renderWindowInteractor->Start();
return ;
}

vtkWarpScalar

vtkWarpVector 是根据矢量数据移动指定的点。vtkWarpScalar则是根据设定法向量normal和标量Scalar,移动变形点。

vtkWarpScalar is a filter that modifies point coordinates by moving points along point normals by the scalar amount times the scale factor. Useful for creating carpet or x-y-z plots.

If normals are not present in data, the Normal instance variable will be used as the direction along which to warp the geometry. If normals are present but you would like to use the Normal instance variable, set the UseNormal boolean to true.

If XYPlane boolean is set true, then the z-value is considered to be a scalar value (still scaled by scale factor), and the displacement is along the z-axis. If scalars are also present, these are copied through and can be used to color the surface.

Note that the filter passes both its point data and cell data to its output, except for normals, since these are distorted by the warping.

Examples:
vtkWarpScalar (Examples)
Tests:
vtkWarpScalar (Tests)

vtkWarpScalar示例:

#ifndef INITIAL_OPENGL
#define INITIAL_OPENGL
#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL)
VTK_MODULE_INIT(vtkInteractionStyle)
#endif
#include <iostream>
using namespace std;
#include "vtkSmartPointer.h"
#include "vtkActor.h"
#include "vtkCamera.h"
#include "vtkDataSetMapper.h"
#include "vtkDebugLeaks.h"
#include "vtkFloatArray.h"
#include "vtkPlaneSource.h"
#include "vtkPointData.h"
#include "vtkPoints.h"
#include "vtkPolyData.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkRenderer.h"
#include "vtkTransform.h"
#include "vtkTransformPolyDataFilter.h"
#include "vtkWarpScalar.h"
int main()
{
int i, numPts;
double x[];
double r, deriv; vtkSmartPointer<vtkRenderer> ren = vtkSmartPointer<vtkRenderer>::New();
vtkSmartPointer<vtkRenderWindow> renWin =vtkSmartPointer<vtkRenderWindow>::New();
renWin->AddRenderer(ren); vtkSmartPointer<vtkRenderWindowInteractor> iren =vtkSmartPointer<vtkRenderWindowInteractor>::New();
iren->SetRenderWindow(renWin); // create plane to warp
vtkSmartPointer<vtkPlaneSource> plane =vtkSmartPointer<vtkPlaneSource>::New();
plane->SetResolution (,); vtkSmartPointer<vtkTransform> transform =vtkSmartPointer<vtkTransform>::New();
transform->Scale(10.0,10.0,1.0); vtkSmartPointer<vtkTransformPolyDataFilter> transF =vtkSmartPointer<vtkTransformPolyDataFilter>::New();
transF->SetInputConnection(plane->GetOutputPort());
transF->SetTransform(transform);
transF->Update(); // compute Bessel function and derivatives. This portion could be
// encapsulated into source or filter object.
//
vtkSmartPointer<vtkPolyData> input = transF->GetOutput();
numPts = input->GetNumberOfPoints(); vtkSmartPointer<vtkPoints> newPts =vtkSmartPointer<vtkPoints>::New();
newPts->SetNumberOfPoints(numPts); vtkSmartPointer<vtkFloatArray> derivs =vtkSmartPointer<vtkFloatArray>::New();
derivs->SetNumberOfTuples(numPts); vtkSmartPointer<vtkPolyData> bessel =vtkSmartPointer<vtkPolyData>::New();
bessel->CopyStructure(input);
bessel->SetPoints(newPts);
bessel->GetPointData()->SetScalars(derivs); for (i=; i<numPts; i++)
{
input->GetPoint(i,x);
r = sqrt(static_cast<double>(x[]*x[]) + x[]*x[]);
x[] = exp(-r) * cos (10.0*r);
newPts->SetPoint(i,x);
deriv = -exp(-r) * (cos(10.0*r) + 10.0*sin(10.0*r));
derivs->SetValue(i,deriv);
} // warp plane
vtkSmartPointer<vtkWarpScalar> warp =vtkSmartPointer<vtkWarpScalar>::New();
warp->SetInputData(bessel);
warp->XYPlaneOn();
warp->SetScaleFactor(0.5); // mapper and actor
vtkSmartPointer<vtkDataSetMapper> mapper =vtkSmartPointer<vtkDataSetMapper>::New();
mapper->SetInputConnection(warp->GetOutputPort());
double tmp[];
bessel->GetScalarRange(tmp);
mapper->SetScalarRange(tmp[],tmp[]); vtkSmartPointer<vtkActor> carpet =vtkSmartPointer<vtkActor>::New();
carpet->SetMapper(mapper); // assign our actor to the renderer
ren->AddActor(carpet);
ren->SetBackground(,,);
renWin->SetSize(,); // draw the resulting scene
ren->ResetCamera();
ren->GetActiveCamera()->Zoom(1.4);
ren->GetActiveCamera()->Elevation(-);
ren->GetActiveCamera()->Azimuth();
ren->ResetCameraClippingRange();
renWin->Render(); iren->Start();
return ;
}

vtkExampleWarpVector和vtkWarpScalar的更多相关文章

  1. vtk多线程简单测试

    vtkMultithreader is a class that provides support for multithreaded execution using sproc() on an SG ...

随机推荐

  1. CentOS系统下使用docker安装pinpoint

    准备:安装docker与docker-compose docker安装参考:https://www.cnblogs.com/zhi-leaf/p/10561501.html docker-compos ...

  2. thinkPHP5.0.22初体验---路由,url访问

    “豪情卷起万重浪,吼吼哈哈-”一学thinkPHP才知道这是个国内研究的php web开发框架,瞬间自豪感如电流一般传遍全身 这就不多不说说 一.控制器 所谓MVC编程,无外乎函数(sometimes ...

  3. SQL server 获取异常

    一.try...... catch 获取异常信息 /*======================================== 相关错误消 息如下: ERROR_NUMBER() 返回错误号. ...

  4. user-select 用户禁止选中

    我们在页面输入的文本按理来说应该都是可以选中的,但是如何才能让显示出来的文本或是图片不被选中呢,这时候就需要用到 user-select 属性. user-select user-select (CS ...

  5. 文件操作:fseek()

    int fseek(FILE *stream, long offset, int fromwhere); fseek 用于二进制方式打开的文件,移动文件读写指针位置.   int fseek( FIL ...

  6. confluence -- 命令行备份还原

    备份:confluence每日凌晨2:00都在 /data/atlassian/application-data/confluence/backups/ 下生成备份包,其中包括文档,附件,用户 还原: ...

  7. Mysql cluster管理节点配置文件详解

    一.定义MySQL Cluster的TCP/IP连接TCP/IP是MySQL集群用于建立连接的默认传输协议,正常情况下不需要定义连接.可使用“[TCP DEFAULT]”或“[TCP]”进行定义. 1 ...

  8. C++入门经典-例3.10-根据输入的字符输出字符串

    1:代码如下: // 3.10.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> #inc ...

  9. pom.xml报Plugin execution not covered by lifecycle configuration错误

    环境     eclipse 4.3.0     maven 3.0.4     m2e 1.4.0      出现场景     以前的老项目,在我的环境(我的环境较新)下,别人老环境不报错. 错误示 ...

  10. Spring之AOP配置

    特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...