【无标题】


vtkDataSet

vtkdataset类型是Image、Point、RectlinearGrid等类型的父类。
在这里插入图片描述
vtkdataset的函数:
在这里插入图片描述

vtkCollection

在这里插入图片描述
在这里插入图片描述

vtkCell

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#include "stdafx.h"
#include "vtkCellArray.h"
#include "vtkDoubleArray.h"
#include "vtkFloatArray.h"
#include "vtkIntArray.h"
#include "vtkPointData.h"
#include "vtkPoints.h"
#include "vtkPolyData.h"
#include "vtkPolyDataMapper.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkRenderer.h"
int _tmain(int argc, _TCHAR* argv[])
{
int i;
//创建一个浮点型数组存储"点"
vtkFloatArray *pcoords = vtkFloatArray::New();
//设置维度,点->3
pcoords->SetNumberOfComponents( 3 );
//设置数组个数
pcoords->SetNumberOfTuples( 4 );
//指定每一个数组,具体的点坐标
float pts[4][3] = { { 0.0, 0.0, 0.0 }, { 0.0, 1.0, 0.0 },
       { 1.0, 0.0, 0.0 }, { 1.0, 1.0, 0.0}} ;
for( i=0; i<4; i++ )
{
   //设置数组中的点
   pcoords->SetTuple( i, pts[i] );
}
vtkPoints *points = vtkPoints::New();
//获得四个点
points->SetData( pcoords );
//创建网格数组
vtkCellArray *strips = vtkCellArray::New();
//设置单元由几个点组成
/* strips->InsertNextCell( 4 );
strips->InsertCellPoint( 0 );
strips->InsertCellPoint( 1 );
strips->InsertCellPoint( 2 );
strips->InsertCellPoint( 3 );*/
strips->InsertNextCell( 3 );
strips->InsertCellPoint( 0 );
strips->InsertCellPoint( 1 );
strips->InsertCellPoint( 2 );
//strips->InsertCellPoint( 3 );
//创建整形数组
vtkIntArray *temperature = vtkIntArray::New();
temperature->SetName( "Temperature" );
temperature->InsertNextValue( 60 );
temperature->InsertNextValue( 70 );
temperature->InsertNextValue( 80 );
// temperature->InsertNextValue( 90 );
/* //创建双精度型数组
vtkDoubleArray *vorticity = vtkDoubleArray::New();
vorticity->SetName( "Vorticity" );
vorticity->InsertNextValue( 2.7 );
vorticity->InsertNextValue( 4.1 );
vorticity->InsertNextValue( 5.3 );
vorticity->InsertNextValue( 3.4 );*/
//创建数据集
vtkPolyData *polydata = vtkPolyData::New();
//指定点和网格
polydata->SetPoints( points );
polydata->SetStrips( strips );
//指定标量
polydata->GetPointData()->SetScalars( temperature );
//polydata->GetPointData()->AddArray( vorticity ); 
vtkPolyDataMapper *mapper = vtkPolyDataMapper::New();
mapper->SetInput( polydata );
mapper->SetScalarRange( 0, 40 );
// Create an actor.
vtkActor* actor = vtkActor::New();
actor->SetMapper(mapper);
// Create the rendering objects.
vtkRenderer* ren = vtkRenderer::New();
ren->AddActor(actor);
vtkRenderWindow* renWin = vtkRenderWindow::New();
renWin->AddRenderer(ren);
vtkRenderWindowInteractor* iren = vtkRenderWindowInteractor::New();
iren->SetRenderWindow(renWin);
iren->Initialize();
iren->Start();
return 0;
}

 
    vtkSmartPointer<vtkActor> points_actor=
            vtkSmartPointer<vtkActor>::New();
 
    vtkSmartPointer<vtkCellArray> polyvertex=
                vtkSmartPointer<vtkCellArray>::New();
    int Num=points->GetNumberOfPoints();
    polyvertex->SetNumberOfCells(Num);
    for(vtkIdType i=0;i<Num;i++)
    {
        vtkIdType cell[1]={i};
        polyvertex->InsertNextCell(1,cell);
    }
 
    vtkSmartPointer<vtkPolyData> polydata_surf=
                vtkSmartPointer<vtkPolyData>::New();
    polydata_surf->SetPoints(points);
    polydata_surf->SetVerts(polyvertex);
 
    vtkSmartPointer<vtkDataSetMapper> points_map =
            vtkSmartPointer<vtkDataSetMapper>::New();
 
    points_map->SetInputData(polydata_surf);
    points_actor->SetMapper(points_map);
 
    render->AddActor(points_actor);



    vtkSmartPointer<vtkPolyData> polydata =
        vtkSmartPointer<vtkPolyData>::New();
    polydata->SetPoints(points);
    vtkSmartPointer<vtkVertexGlyphFilter> vertexFilter =                 
        vtkSmartPointer<vtkVertexGlyphFilter>::New();
    vertexFilter->SetInputData(polydata);
    vertexFilter->Update();
    
    vtkSmartPointer<vtkPolyDataMapper> mapper =
        vtkSmartPointer<vtkPolyDataMapper>::New();
    mapper->SetInputData(vertexFilter->GetOutput());
    mapper->Update();
 
    vtkSmartPointer<vtkActor>actor = 
        vtkSmartPointer<vtkActor>::New();
    actor->SetMapper(mapper);
    render->AddActor(actor);

数据source生成

vtkAlgorithm类

vtkAlgorithm类下面有vtkPolyDataAlgorithm、vtkUnstructuredGridAlgorithm等,可以生成想要的数据source,也有vtkReaderAlgorithm,可以读取vtk的数据文件。
![(https://img-blog.csdnimg.cn/ff6ee4ea27c5446fa574ce8af5aff19c.png)

vtkPolyDataAlgorithm

vtkPolyDataAlgorithm的子类包括vtkConeSource、vtkClinderSource、vtkClippolyData、vtkCutter vtkExtractEdge:
在这里插入图片描述
vtkPolyDataAlgorithm
有如下函数,子类都可以调用:
在这里插入图片描述
常见的几个source:

vtkConeSource *cone = vtkConeSource::New();
cone->SetHeight(3.0);
cone->SetRadius(1.0);
cone->SetResolution(10);

vtkSphereSource *sphere = vtkSphereSource::New();
sphere->SetThetaResolution(12);
sphere->SetPhiResolution(12);

vtkNew<vtkCubeSource> cube;
cube->SetXLength(40);
cube->SetYLength(30);
cube->SetZLength(20);


利用cutter生成相交线:

  vtkNew<vtkNamedColors> colors;
  vtkNew<vtkCubeSource> cube;
  cube->SetXLength(40);
  cube->SetYLength(30);
  cube->SetZLength(20);
  vtkNew<vtkPolyDataMapper> cubeMapper;
  cubeMapper->SetInputConnection(cube->GetOutputPort());
 
  // Create a plane to cut,here it cuts in the XZ direction (xz
  // normal=(1,0,0);XY =(0,0,1),YZ =(0,1,0)
  vtkNew<vtkPlane> plane;
  plane->SetOrigin(10, 0, 0);
  plane->SetNormal(1, 0, 0);
 
  // Create cutter
  vtkNew<vtkCutter> cutter;
  cutter->SetCutFunction(plane);
  cutter->SetInputConnection(cube->GetOutputPort());
  cutter->Update()

Mapper

在这里插入图片描述

vtkSmartPointer<vtkConeSource> coneSource =vtkSmartPointer<vtkConeSource>::New();
coneSource->Update();
vtkSmartPointer<vtkPolyData> polyData =vtkSmartPointer<vtkPolyData>::New();
polyData = coneSource->GetOutput();//sourced的输出是data
vtkSmartPointer<vtkPolyDataMapper> mapper =vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputData(polyData);
vtkSmartPointer<vtkActor>  actor =vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mapper);

Actor

在这里插入图片描述在这里插入图片描述

 pRenderer = vtkSmartPointer<vtkRenderer>::New();
 
    // 圆柱数据
    pCylinderSource = vtkSmartPointer<vtkCylinderSource>::New();
    pCylinderSource->SetCenter(0, 0, 0);
    pCylinderSource->SetResolution(25);
    pCylinderSource->SetHeight(2);
    pCylinderSource->SetRadius(2);
 
    // 圆柱的Mapper
    pPolyDataMapper = vtkSmartPointer<vtkPolyDataMapper>::New();
    pPolyDataMapper->SetInputConnection(pCylinderSource->GetOutputPort());
 
 
    // 圆柱的Property
    pProperty = vtkSmartPointer<vtkProperty>::New();
    pProperty->SetColor(1, 0, 0);
    pProperty->SetOpacity(0.5);
    pProperty->SetAmbient(0.3);
    pProperty->SetDiffuse(0.4);
    pProperty->SetSpecular(0.8);
    pProperty->SetShading(false);
    pProperty->SetLineWidth(2.0);
    pProperty->SetPointSize(2.0);
 
    // 圆柱体
    pCylinderActor = vtkSmartPointer<vtkActor>::New();
    pCylinderActor->SetMapper(pPolyDataMapper);
    pCylinderActor->SetProperty(pProperty);
 
    pCylinderActor->SetDragable(false);
    pCylinderActor->SetPickable(false);
    pCylinderActor->SetScale(1.0);
    pCylinderActor->SetPosition(0, 0, 0);
    pCylinderActor->SetOrientation(0, 0, 0);
    pCylinderActor->SetOrigin(0, 0, 0);
 
    pRenderer->AddActor(pCylinderActor);
 
    // 设置场景
    pRenderer->SetBackground(0, 1, 0);
    pRenderer->SetTwoSidedLighting(true);

renderer

在这里插入图片描述
在这里插入图片描述

vtkSmartPointer render=vtkSmartPointer::New();
创建一个vtkrenderer指针。

* void AddActor (vtkProp p) 向渲染器添加不同类型的道具。

如何添加一个actor:renderers->AddActor(glyphActor);
这是一个看名字就很容易理解的函数,再其他类中也有类似命名的函数,看名字就知道意思。如renderWindow->AddRenderer(renderers);

RemoveActor (vtkProp *p) 就不用介绍了

virtual void vtkRenderer::ResetCamera ( )
根据可见的actor自动设置摄像机。

相机将重新定位以观察演员的中心点,并沿其初始视平面法线(即,从相机位置定义到焦点的矢量)移动,以便可以看到所有演员。

在vtkOpenVRRenderer中重新实现。

vtkCamera vtkRenderer::GetActiveCamera ( )
获取当前的相机。

如果尚未为渲染器分配摄像机,则会自动创建新摄像机。 这不会重置相机
renderers[index]->GetActiveCamera()->Azimuth(30);
renderers[index]->GetActiveCamera()->Elevation(-30);
 renderers[index]->GetActiveCamera()->Dolly(1.1);
Azimuth()等是vtkCamera的函数,设置了相机的位置视角角点距离等等。

vtkRendererWindow

在这里插入图片描述在这里插入图片描述

#include "vtkSmartPointer.h"
#include "vtkSphereSource.h"
#include "vtkPolyDataMapper.h"
#include "vtkActor.h"
#include "vtkRenderer.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"

#include "vtkAutoInit.h"
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);
VTK_MODULE_INIT(vtkRenderingFreeType);
VTK_MODULE_INIT(vtkRenderingVolumeOpenGL2);

int main()
{
    // 实例化一个球体的数据源对象
	vtkSmartPointer<vtkSphereSource> sphereSource = vtkSmartPointer<vtkSphereSource>::New();
    // 实例化一个Mapper
	vtkSmartPointer<vtkPolyDataMapper> sphereMapper = vtkSmartPointer<vtkPolyDataMapper>::New();
    // 实例化一个Actor
	vtkSmartPointer<vtkActor> sphereActor = vtkSmartPointer<vtkActor>::New();

	sphereSource->SetRadius(0.2); // 设置球体的Source图像源半径
	sphereMapper->SetInputConnection(sphereSource->GetOutputPort());	// 关联Source的输出与Mapper的输入口
	sphereActor->SetMapper(sphereMapper);	// 将Mapper绑定到Actor上
	// 实例化一个Renderer对象
	vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
    // 实例化一个窗口对象
	vtkSmartPointer<vtkRenderWindow> renWin = vtkSmartPointer<vtkRenderWindow>::New();
    // 实例化一个窗口的交互器对象
	vtkSmartPointer<vtkRenderWindowInteractor> iren = vtkSmartPointer<vtkRenderWindowInteractor>::New();

	renderer->AddActor(sphereActor);	// 一个Renderer包含多个Actor
	renWin->AddRenderer(renderer);	// 一个RenderWindow包含多个Renderer,可以为不同Renderer设置视口
	iren->SetRenderWindow(renWin);		// 关联窗口和交互器

	renWin->Render();				// RenderWindow 开始渲染
	iren->Initialize();			// vtkRenderWindowInteractor 初始化事件监听
	iren->Start();			// vtkRenderWindowInteractor开启事件监听循环
	return 0;
}

vtkRenderWindowInteractor

在这里插入图片描述
**加粗样式**

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值