#include "vtkAutoInit.h"
VTK_MODULE_INIT(vtkRenderingOpenGL2); // VTK was built with vtkRenderingOpenGL2
VTK_MODULE_INIT(vtkInteractionStyle);
#include <vtkPolyData.h>
#include <vtkSphereSource.h>
#include <vtkDecimatePro.h>
#include <vtkQuadricDecimation.h>
#include <vtkQuadricClustering.h>
#include <vtkSmartPointer.h>
#include <vtkPolyDataMapper.h>
#include <vtkProperty.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkRenderer.h>
#include <vtkPolydataReader.h>
#include <vtkCamera.h>
//測試文件:../data/fran_cut.vtk
int main(int argc, char * argv[])
{
/*if (argc < 2)
{
std::cout << argv[0] << " *.vtk" << std::endl;
return EXIT_FAILURE;
}*/
vtkSmartPointer<vtkPolyDataReader> reader =
vtkSmartPointer<vtkPolyDataReader>::New();
reader->SetFileName("G:/First_year_graduate/VTK/VTKexamle/VTKtest/x64/Release/fran_cut.vtk");
reader->Update();
vtkSmartPointer<vtkPolyData> original = reader->GetOutput();
std::cout << "抽取前:" << std::endl << "------------" << std::endl;
std::cout << "模型點數爲: " << original->GetNumberOfPoints() << std::endl;
std::cout << "模型面數爲: " << original->GetNumberOfPolys() << std::endl;
vtkSmartPointer<vtkDecimatePro> decimate =
vtkSmartPointer<vtkDecimatePro>::New();
decimate->SetInputData(original);
decimate->SetTargetReduction(.80);
decimate->Update();
vtkSmartPointer<vtkPolyData> decimated = decimate->GetOutput();
std::cout << "抽取後" << std::endl << "------------" << std::endl;
std::cout << "模型點數爲:" << decimated->GetNumberOfPoints() << std::endl;
std::cout << "模型面數爲:" << decimated->GetNumberOfPolys() << std::endl;
vtkSmartPointer<vtkPolyDataMapper> origianlMapper =
vtkSmartPointer<vtkPolyDataMapper>::New();
origianlMapper->SetInputData(original);
vtkSmartPointer<vtkActor> origianlActor =
vtkSmartPointer<vtkActor>::New();
origianlActor->SetMapper(origianlMapper);
vtkSmartPointer<vtkPolyDataMapper> decimatedMapper =
vtkSmartPointer<vtkPolyDataMapper>::New();
decimatedMapper->SetInputData(decimated);
vtkSmartPointer<vtkActor> decimatedActor =
vtkSmartPointer<vtkActor>::New();
decimatedActor->SetMapper(decimatedMapper);
double leftViewport[4] = { 0.0, 0.0, 0.5, 1.0 };
double rightViewport[4] = { 0.5, 0.0, 1.0, 1.0 };
vtkSmartPointer<vtkRenderer> leftRenderer =
vtkSmartPointer<vtkRenderer>::New();
leftRenderer->SetViewport(leftViewport);
leftRenderer->AddActor(origianlActor);
leftRenderer->SetBackground(1.0, 1.0, 1.0);
vtkSmartPointer<vtkRenderer> rightRenderer =
vtkSmartPointer<vtkRenderer>::New();
rightRenderer->SetViewport(rightViewport);
rightRenderer->AddActor(decimatedActor);
rightRenderer->SetBackground(1.0, 1.0, 1.0);
leftRenderer->GetActiveCamera()->SetPosition(0, -1, 0);
leftRenderer->GetActiveCamera()->SetFocalPoint(0, 0, 0);
leftRenderer->GetActiveCamera()->SetViewUp(0, 0, 1);
leftRenderer->GetActiveCamera()->Azimuth(30);
leftRenderer->GetActiveCamera()->Elevation(30);
leftRenderer->ResetCamera();
rightRenderer->SetActiveCamera(leftRenderer->GetActiveCamera());
vtkSmartPointer<vtkRenderWindow> renderWindow =
vtkSmartPointer<vtkRenderWindow>::New();
renderWindow->AddRenderer(leftRenderer);
renderWindow->AddRenderer(rightRenderer);
renderWindow->SetSize(640, 320);
renderWindow->Render();
renderWindow->SetWindowName("PolyDataDecimation");
vtkSmartPointer<vtkRenderWindowInteractor> interactor =
vtkSmartPointer<vtkRenderWindowInteractor>::New();
interactor->SetRenderWindow(renderWindow);
renderWindow->Render();
interactor->Start();
return EXIT_SUCCESS;
}
VS2013+VTK7.1.1(64位)+window7電腦。
可能系統版本 或者vs版本與VTK版本不兼容的問題,沒有找到答案。也有可能是我編譯的vtk是64位的庫文件,存在兼容性問題?
我直接在cmd中通過exe傳入文件,也出現這種錯誤。
希望有人能解答這個問題。