1. 程式人生 > >VTK圖形處理之剪裁

VTK圖形處理之剪裁

剪裁

  剪裁的操作基本上和剪下一樣,需要使用一把“刀”(隱函式)並設定剪裁值。輸入的資料集被分成了兩部分:裁下的部分和裁掉的部分。預設只產生裁下的部分這個輸出。

示例演示

CMakeLists.txt檔案程式碼如下:

CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
PROJECT(ClipExample)
FIND_PACKAGE(VTK REQUIRED)
INCLUDE(${VTK_USE_FILE})
ADD_EXECUTABLE(ClipExample Clip.cpp)
TARGET_LINK_LIBRARIES(ClipExample ${VTK_LIBRARIES}
)

C++程式碼:

#include "vtkActor.h"
#include "vtkXMLPolyDataReader.h"
#include "vtkClipPolyData.h"
#include "vtkPlane.h"
#include "vtkPolyData.h"
#include "vtkPolyDataMapper.h"
#include "vtkPolyDataNormals.h"
#include "vtkProperty.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkRenderer.h" #include "vtkSmartPointer.h" #include "vtkInteractorStyleTrackballCamera.h" int main() { //read input data vtkSmartPointer<vtkXMLPolyDataReader> reader = vtkSmartPointer<vtkXMLPolyDataReader>::New(); reader->SetFileName("E:\\TestData\\cow.vtp"); vtkSmartPointer<
vtkPolyDataNormals> cow_normals = vtkSmartPointer<vtkPolyDataNormals>::New(); cow_normals->SetInputConnection(reader->GetOutputPort()); vtkSmartPointer<vtkPlane> plane = vtkSmartPointer<vtkPlane>::New(); plane->SetOrigin(0.25, 0.0, 0.0); plane->SetNormal(-1, -1, 0); vtkSmartPointer<vtkClipPolyData> clipper = vtkSmartPointer<vtkClipPolyData>::New(); clipper->SetInputConnection(cow_normals->GetOutputPort()); clipper->SetClipFunction(plane); clipper->GenerateClipScalarsOn(); clipper->GenerateClippedOutputOn(); clipper->SetValue(0.5); vtkSmartPointer<vtkPolyDataMapper> clip_mapper = vtkSmartPointer<vtkPolyDataMapper>::New(); clip_mapper->SetInputConnection(clipper->GetOutputPort()); clip_mapper->ScalarVisibilityOff(); vtkSmartPointer<vtkProperty> backProp = vtkSmartPointer<vtkProperty>::New(); backProp->SetDiffuseColor(1.00, 0.388, 0.278); vtkSmartPointer<vtkActor> clip_actor = vtkSmartPointer<vtkActor>::New(); clip_actor->SetMapper(clip_mapper); clip_actor->GetProperty()->SetColor(.200, .631, .788); clip_actor->SetBackfaceProperty(backProp); vtkSmartPointer<vtkPolyDataMapper> rest_mapper = vtkSmartPointer<vtkPolyDataMapper>::New(); rest_mapper->SetInputConnection(clipper->GetClippedOutputPort()); rest_mapper->ScalarVisibilityOff(); vtkSmartPointer<vtkActor> rest_actor = vtkSmartPointer<vtkActor>::New(); rest_actor->SetMapper(rest_mapper); rest_actor->GetProperty()->SetRepresentationToWireframe(); vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New(); renderer->AddActor(clip_actor); renderer->AddActor(rest_actor); renderer->SetBackground(1.0, 1.0, 1.0); vtkSmartPointer<vtkRenderWindow> renWin = vtkSmartPointer<vtkRenderWindow>::New(); renWin->AddRenderer(renderer); renWin->SetSize(640, 480); renWin->Render(); renWin->SetWindowName("ClipExample"); vtkSmartPointer<vtkRenderWindowInteractor> iren = vtkSmartPointer<vtkRenderWindowInteractor>::New(); iren->SetRenderWindow(renWin); vtkSmartPointer<vtkInteractorStyleTrackballCamera> style = vtkSmartPointer<vtkInteractorStyleTrackballCamera>::New(); iren->SetInteractorStyle(style); iren->Initialize(); iren->Start(); return EXIT_SUCCESS; }

執行結果:

圖中顏色顯示部分是裁下的部分PolyData資料,而裁掉的部分以線框的形式顯示。

這裡寫圖片描述