Skip to content

Instantly share code, notes, and snippets.

@LaurentBerger
Created January 27, 2021 10:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save LaurentBerger/c71105eeaa28452d0ac8eb43b49e726c to your computer and use it in GitHub Desktop.
Save LaurentBerger/c71105eeaa28452d0ac8eb43b49e726c to your computer and use it in GitHub Desktop.
read obj and mtl file using vtk
#include <vtkNamedColors.h>
#include <vtkOBJImporter.h>
#include <vtkX3DExporter.h>
#include <vtkPolyData.h>
#include <vtkPolyDataMapper.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkRenderer.h>
#include <vtkSmartPointer.h>
#include <vtkTexture.h>
int main(int argc, char* argv[])
{
auto importer = vtkSmartPointer<vtkOBJImporter>::New();
importer->SetFileName("boy.obj");
importer->SetFileNameMTL("boy.mtl");
importer->SetTexturePath(".");
auto renderer = vtkSmartPointer<vtkRenderer>::New();
auto renWin = vtkSmartPointer<vtkRenderWindow>::New();
auto iren = vtkSmartPointer<vtkRenderWindowInteractor>::New();
/* auto colors = vtkSmartPointer<vtkNamedColors>::New();
renderer->SetBackground2(colors->GetColor3d("Silver").GetData());
renderer->SetBackground(colors->GetColor3d("Gold").GetData());
renderer->GradientBackgroundOn();
renWin->AddRenderer(renderer);
renderer->UseHiddenLineRemovalOn();*/
renWin->AddRenderer(renderer);
renWin->SetSize(640, 480);
iren->SetRenderWindow(renWin);
importer->SetRenderWindow(renWin);
importer->Update();
auto actors = renderer->GetActors();
actors->InitTraversal();
std::cout << "There are " << actors->GetNumberOfItems() << " actors"
<< std::endl;
for (vtkIdType a = 0; a < actors->GetNumberOfItems(); ++a)
{
std::cout << importer->GetOutputDescription(a) << std::endl;
vtkActor* actor = actors->GetNextActor();
// OBJImporter turns texture interpolation off
if (actor->GetTexture())
{
std::cout << "Has texture\n";
actor->GetTexture()->InterpolateOn();
}
vtkPolyData* pd =
dynamic_cast<vtkPolyData*>(actor->GetMapper()->GetInput());
vtkPolyDataMapper* mapper =
dynamic_cast<vtkPolyDataMapper*>(actor->GetMapper());
mapper->SetInputData(pd);
}
renWin->Render();
auto exporter = vtkSmartPointer<vtkX3DExporter>::New();
exporter->SetRenderWindow(renWin);
exporter->SetFileName("mystl.stl");
exporter->Write();
iren->Start();
return EXIT_SUCCESS;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment