VTK图形处理之vtkTriangleFilter

来源:互联网 发布:dx9.0c修复软件 编辑:程序博客网 时间:2024/06/09 16:40

   本文介绍vtkTriangleFilter。
 
vtkTriangleFilter可以实现多边形网格数据向三角形网格数据的转换。为了方便直观看出转换前后的变化,我们用网格方式显示数据模型。

示例说明

CMakeLists.txt文件代码如下:

CMAKE_MINIMUM_REQUIRED(VERSION 2.6)PROJECT( vtkTriangleFilter ) FIND_PACKAGE(VTK REQUIRED)INCLUDE(${VTK_USE_FILE})ADD_EXECUTABLE(vtkTriangleFilter vtkTriangleFilter.cpp)TARGET_LINK_LIBRARIES(vtkTriangleFilter ${VTK_LIBRARIES})

vtkTriangleFilter.cpp文件代码如下:

#include <vtkSmartPointer.h>#include <vtkPolygon.h>#include <vtkTriangle.h>#include <vtkCellArray.h>#include <vtkPolyData.h>#include <vtkPolyDataMapper.h>#include <vtkActor.h>#include <vtkRenderWindow.h>#include <vtkRenderer.h>#include <vtkRenderWindowInteractor.h>#include <vtkProperty.h>#include "vtkTriangleFilter.h"#include <iostream>int main(int argc, char *argv[]){    vtkSmartPointer<vtkPoints> points =        vtkSmartPointer<vtkPoints>::New();    points->InsertNextPoint(0.0, 0.0, 0.0);    points->InsertNextPoint(1.0, 0.0, 0.0);    points->InsertNextPoint(1.0, 1.0, 0.0);    points->InsertNextPoint(0.0, 1.0, 0.0);    points->InsertNextPoint(2.0, 0.0, 0.0);    vtkSmartPointer<vtkPolygon> polygon =        vtkSmartPointer<vtkPolygon>::New();    polygon->GetPointIds()->SetNumberOfIds(4);    polygon->GetPointIds()->SetId(0, 0);    polygon->GetPointIds()->SetId(1, 1);    polygon->GetPointIds()->SetId(2, 2);    polygon->GetPointIds()->SetId(3, 3);    vtkSmartPointer<vtkTriangle> trianle =        vtkSmartPointer<vtkTriangle>::New();    trianle->GetPointIds()->SetId(0, 1);    trianle->GetPointIds()->SetId(1, 2);    trianle->GetPointIds()->SetId(2, 4);    vtkSmartPointer<vtkCellArray> cells =        vtkSmartPointer<vtkCellArray>::New();    cells->InsertNextCell(polygon);    cells->InsertNextCell(trianle);    vtkSmartPointer<vtkPolyData> polygonPolyData =        vtkSmartPointer<vtkPolyData>::New();    polygonPolyData->SetPoints(points);    polygonPolyData->SetPolys(cells);    vtkSmartPointer<vtkTriangleFilter> filter = vtkSmartPointer<vtkTriangleFilter>::New();    filter->SetInputData(polygonPolyData);    filter->Update();    vtkSmartPointer<vtkPolyDataMapper> mapper =        vtkSmartPointer<vtkPolyDataMapper>::New();    mapper->SetInputData(filter->GetOutput());    vtkSmartPointer<vtkActor> actor =        vtkSmartPointer<vtkActor>::New();    actor->SetMapper(mapper);    actor->GetProperty()->SetRepresentationToWireframe();    vtkSmartPointer<vtkRenderer> renderer =        vtkSmartPointer<vtkRenderer>::New();    renderer->AddActor(actor);    renderer->SetBackground(0.5, 0.5, 0.5);    vtkSmartPointer<vtkRenderWindow> renderWindow =        vtkSmartPointer<vtkRenderWindow>::New();    renderWindow->AddRenderer(renderer);    renderWindow->SetSize( 640, 480 );    renderWindow->Render();    renderWindow->SetWindowName("vtkTriangleFilter");    vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =        vtkSmartPointer<vtkRenderWindowInteractor>::New();    renderWindowInteractor->SetRenderWindow(renderWindow);    renderWindow->Render();    renderWindowInteractor->Start();    return EXIT_SUCCESS;}

运行结果:

这里写图片描述

这里写图片描述

0 0