#include "vtkPolyData.h"
#include "vtkAxes.h"
#include "vtkTubeFilter.h"
#include "vtkAppendPolyData.h"
#include "vtkPolyDataReader.h"
#include "vtkRenderer.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkCleanPolyData.h"
#include "vtkTriangleFilter.h"
#include "vtkLinearExtrusionFilter.h"
#include "vtkPolyDataMapper.h"
#include "vtkActor.h"
#include "vtkDecimate.h"
#include "vtkWindowToImageFilter.h"
#include "vtkPostScriptWriter.h"
void main( int argc, char *argv[] )
{
float range[2];
float axeOrg[3] = {10,10,10};
// Create the renderer, render window, and interactor
vtkRenderer *ren1 = vtkRenderer::New();
vtkRenderWindow *renWin = vtkRenderWindow::New();
renWin->AddRenderer(ren1);
vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();
iren->SetRenderWindow(renWin);
// Read the data from a vtk file
// links lines
// vtkPolyDataReader *line_reader = vtkPolyDataReader::New();
// polygon layers
vtkPolyDataReader *poly_reader = vtkPolyDataReader::New();
// wotkspace
vtkPolyDataReader *ws_reader = vtkPolyDataReader::New();
if (argc >=3)
{
poly_reader->SetFileName(argv[1]);
// line_reader->SetFileName(argv[1]);
ws_reader->SetFileName(argv[2]);
}
else
return 1;
poly_reader->Update();
ws_reader->Update();
vtkPolyData * polys;
polys = poly_reader->GetOutput();
vtkCleanPolyData *clean1 = vtkCleanPolyData::New();
clean1->SetInput(polys);
// triangulation
/*
vtkTriangleFilter *triangles = vtkTriangleFilter::New();
triangles->SetInput(clean1->GetOutput());
vtkDecimate *decim = vtkDecimate::New();
decim->SetInput(triangles->GetOutput());
*/
/*
vtkCleanPolyData *clean2 = vtkCleanPolyData::New();
clean2->SetInput(triangles->GetOutput());
*/
vtkLinearExtrusionFilter *extrude = vtkLinearExtrusionFilter::New();
extrude->SetInput(clean1->GetOutput());
// Create the volume mapper and set the ray function and scalar input
vtkPolyDataMapper *polyMapper = vtkPolyDataMapper::New();
polyMapper->SetInput(extrude->GetOutput());
vtkActor * polyAct = vtkActor::New();
polyAct->SetMapper(polyMapper);
// Axes
vtkAxes * axes = vtkAxes::New();
axes->SetScaleFactor(10);
vtkTubeFilter *axesTubes = vtkTubeFilter::New();
axesTubes->SetInput(axes->GetOutput());
axesTubes->SetRadius(axes->GetScaleFactor()/25.0);
axesTubes->SetNumberOfSides(6);
vtkPolyDataMapper *axesMapper = vtkPolyDataMapper::New();
axesMapper->SetInput(axesTubes->GetOutput());
vtkActor *axesActor = vtkActor::New();
axesActor->SetMapper(axesMapper);
// Workspace
vtkTubeFilter *wsTubes = vtkTubeFilter::New();
wsTubes->SetInput(ws_reader->GetOutput());
wsTubes->SetRadius(axes->GetScaleFactor()/15.0);
wsTubes->SetNumberOfSides(6);
vtkPolyDataMapper *wsMapper = vtkPolyDataMapper::New();
wsMapper->SetInput(wsTubes->GetOutput());
vtkActor * wsActor = vtkActor::New();
wsActor->SetMapper(wsMapper);
// Add this volume to the renderer and get a closer look
ren1->SetBackground(1,1,1);
ren1->AddActor(polyAct);
ren1->AddActor(axesActor);
ren1->AddActor(wsActor);
renWin->SetSize(300,300);
renWin->Render();
iren->Start();
vtkWindowToImageFilter *w2if = vtkWindowToImageFilter::New();
vtkPostScriptWriter *rttiffw = vtkPostScriptWriter::New();
w2if->SetInput(renWin);
rttiffw->SetInput(w2if->GetOutput());
rttiffw->SetFileName("output.eps");
rttiffw->Write();
}
//ren1->AddActor(lineAct);
// line_reader->Update();
//polys->SetLines(vtkCellArray::New());
/*
vtkPolyData * lines;
lines = line_reader->GetOutput();
lines->SetPolys(vtkCellArray::New());
*/
/*
vtkAppendPolyData * append = vtkAppendPolyData::New();
append->AddInput(lines);
append->AddInput(extrude->GetOutput());
*/
/*
vtkPolyDataMapper *lineMapper = vtkPolyDataMapper::New();
lineMapper->SetInput(lines);
*/
/*
vtkActor * lineAct = vtkActor::New();
lineAct->SetMapper(lineMapper);
*/