vtkExampleWarpVector和vtkWarpScalar
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的更多相关文章
- vtk多线程简单测试
vtkMultithreader is a class that provides support for multithreaded execution using sproc() on an SG ...
随机推荐
- 阿里云-docker安装redis AND(docker基本操作命令)
docker官网:https://hub.docker.com/search?q=redis&type=edition&offering=enterprise 1.拉取最新的redis ...
- 关于order_by
- 使用rpm安装mysql5.6(简单安装 实验使用)
[root@localhost mysql]# cd /usr [root@localhost mysql]# mkdir mysql [root@localhost mysql]# cd mysql ...
- 【BZOJ1176】Mokia
题目大意:给定一个 N*N 的矩形,有 Q 次操作,每个操作可以是矩形单点修改或查询子矩形的权值和. 题解:CDQ分治适合处理修改操作之间互不影响且支持离线的题目. 满足以上操作条件的显然可以树套树来 ...
- selenium相关导入By、Keys、WebDriverWait、ActionChains,显示等待与隐式等待
# -*- coding: utf-8 -*- """ @author: Dell Created on Tue Dec 24 12:33:56 2019 "& ...
- Python---函数参数---王伟
#### 定义函数 ```python#定义函数def function(): print("hello world")#调用函数function() #输出结果hello ...
- 【Winform-右下角弹窗】实现右下角弹窗,提示信息
网页是否经常在电脑右下角弹窗显示消息?其实Winform也是可以实现的.下面介绍两种方法. 第一步:设计窗体 第二步:实现代码 第一种方法 引用user32 声明常量 窗体Load事件 窗体FormC ...
- 织梦dedecms做的网站首页标题篡改跳转赌博网站解决方案
织梦dedecms因其强大功能,简单实用的优点常常被用来做企业网站,程序开源使用的人多了网站漏洞多会有中毒的情况,常见的有一种,首页标题关键词描述被篡改,百度快照收录点击后跳转的赌博网站,怎么解决这个 ...
- maven项目创建4 dao层整合
项目配置文件要放在打包成war包的web项目中 创建文件步骤 1 SqlMapConfig.xml <?xml version="1.0" encoding=" ...
- 报错:没有与参数列表匹配的构造函数 "CFileDialog::CFileDialog" 实例
如果是在解决方案管理器窗口内,右击你的项目“项目”,然后选“属性”(最后一项),再点“配置属性”,是个“+”号,把它展开,然后选“常规”选项卡,倒数第三项“字符集”,选择“使用多字节字符集”.再编译应 ...