vtk中物体的交集等运算

/=========================================================================
Copyright © Constantine Butakoff
All rights reserved.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================
/

#include <vtkSmartPointer.h>
#include <vtkPolyDataReader.h>
#include <vtkPolyDataWriter.h>
#include <vtkBooleanOperationPolyDataFilter.h>
#include <vtkPolyData.h>
#include <vtkCleanPolyData.h>

int main(int argc, char* argv[])
{
if (argc < 4) {
std::cout<<“Boolean surface mesh operations. v1.0”<<std::endl;
std::cout<<“Usage: SurfaceMeshBoolean mesh1.vtk mesh2.vtk operation output.vtk”<<std::endl;
std::cout<<“Operation: union, difference, intersect”<<std::endl;
return -1;
}

int c=1;
char* inshape1 = argv[c++];
char* inshape2 = argv[c++];
char* operation = argv[c++];
char* outshape = argv[c++];

std::cout << "The following parameters will be used:" << std::endl;
std::cout << "Mesh 1:" << inshape1 << std::endl;
std::cout << "Mesh 2:" << inshape2 << std::endl;
std::cout << "Output mesh:" << outshape << std::endl;    
std::cout << "Operation:" << operation << std::endl;    


vtkSmartPointer<vtkPolyDataReader> reader1 =
  vtkSmartPointer<vtkPolyDataReader>::New();
reader1->SetFileName(inshape1);
reader1->Update();
vtkPolyData* input1 = reader1->GetOutput();

vtkSmartPointer<vtkPolyDataReader> reader2 =
  vtkSmartPointer<vtkPolyDataReader>::New();
reader2->SetFileName(inshape2);
reader2->Update();
vtkPolyData* input2 = reader2->GetOutput();

vtkSmartPointer<vtkBooleanOperationPolyDataFilter> booleanOperation =
    vtkSmartPointer<vtkBooleanOperationPolyDataFilter>::New();


booleanOperation->SetInputData( 0, input1 );
booleanOperation->SetInputData( 1, input2 );

if(strcmp(operation,"union")==0)
    booleanOperation->SetOperationToUnion();    
else if(strcmp(operation,"difference")==0)
    booleanOperation->SetOperationToDifference();
else if(strcmp(operation,"intersect")==0)
    booleanOperation->SetOperationToIntersection();
else 
{
    std::cout<<"Unknown operation"<<std::endl;
    return -1;
}



booleanOperation->Update();

vtkSmartPointer<vtkCleanPolyData> cleaner = vtkSmartPointer<vtkCleanPolyData>::New();
cleaner->SetInputData(booleanOperation->GetOutput());
cleaner->Update();


vtkSmartPointer<vtkPolyDataWriter> writer =
  vtkSmartPointer<vtkPolyDataWriter>::New();
writer->SetFileName(outshape);
writer->SetInputData(cleaner->GetOutput());
writer->Write();


return 0;

}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值