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数据,而裁掉的部分以线框的形式显示。

这里写图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值