[vtkusers] vtkTriangleStrip and empty vtkSTLWriter output

piers.barber at logicmonkey.co.uk piers.barber at logicmonkey.co.uk
Mon Oct 12 18:12:15 EDT 2015


 

Hello VTKers 

I was getting empty STL file output from a program I
wrote using the ruled surface filter. So I thought I would take a
different approach and create triangle strips. 

The code does what I
would expect, but I still get an empty STL file (which I think would be
because there are no polys in the polydata). 

The ruled surface I can
believe would have this problem, but a triangle strip should be OK? 

My
full test example code follows. It creates a triangle strip 2 triangles
at a time by starting with 2 points and then successively adding more in
pairs. 

If there is a step that I have missed that is required to
convert this to individual triangles for vtxSTLWriter, what would happen
to vertex winding order? 

All comments and observations welcome!


Thanks. 

-=:LogicMonkey:=- 

#include <vtkVersion.h> 
#include
<vtkSmartPointer.h>
#include <vtkRenderer.h>
#include
<vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include
<vtkCellArray.h>
#include <vtkTransform.h>
#include
<vtkTransformPolyDataFilter.h>
#include <vtkAppendPolyData.h>
#include
<vtkPolyDataMapper.h>
#include <vtkProperty.h>
#include
<vtkCamera.h>
#include <vtkTriangleStrip.h>
#include <vtkSTLWriter.h>


#define VERTICES 100 

int main(int, char *[]) {


vtkSmartPointer<vtkPoints>
 points =
vtkSmartPointer<vtkPoints>::New();
 points->InsertPoint(0, 0, 0, 0); 

points->InsertPoint(1, 0, 1, 0); 

vtkSmartPointer<vtkTriangleStrip>

strip = vtkSmartPointer<vtkTriangleStrip>::New();

strip->GetPointIds()->SetNumberOfIds(VERTICES);

strip->GetPointIds()->SetId(0,0);
 strip->GetPointIds()->SetId(1,1);


for( int i=1; i<VERTICES/2; i++ ) { 

points->InsertPoint(2*i,
(double) i, 0, 0); 
 points->InsertPoint(2*i+1, (double) i, 1, 0);


strip->GetPointIds()->SetId(2*i,2*i);

strip->GetPointIds()->SetId(2*i+1,2*i+1);
 }


vtkSmartPointer<vtkPolyData>
 polydata =
vtkSmartPointer<vtkPolyData>::New(); 

polydata->SetPoints(points);


vtkSmartPointer<vtkCellArray>
 cells =
vtkSmartPointer<vtkCellArray>::New();
 cells->InsertNextCell(strip);


polydata->SetStrips(cells); 

// STL file output


vtkSmartPointer<vtkSTLWriter>
 stlWriter =
vtkSmartPointer<vtkSTLWriter>::New();

stlWriter->SetFileName("StripEx.stl");

stlWriter->SetInputData(polydata);
 stlWriter->Write(); 

// now the
usual VTK render and displey pipeline


vtkSmartPointer<vtkPolyDataMapper>
 mapper =
vtkSmartPointer<vtkPolyDataMapper>::New();

mapper->SetInputData(polydata); // data to mapper


vtkSmartPointer<vtkActor>
 actor = vtkSmartPointer<vtkActor>::New();

actor->SetMapper(mapper); // mapper to actor


actor->GetProperty()->SetColor(0.89, 0.81, 0.34);

actor->GetProperty()->SetRepresentationToWireframe(); 

// Add the
actors to the renderer, set the background and size

vtkSmartPointer<vtkRenderer>
 renderer =
vtkSmartPointer<vtkRenderer>::New(); 

vtkSmartPointer<vtkRenderWindow>

renderWindow = vtkSmartPointer<vtkRenderWindow>::New();

renderWindow->AddRenderer(renderer);


vtkSmartPointer<vtkRenderWindowInteractor>
 interactor =
vtkSmartPointer<vtkRenderWindowInteractor>::New();

interactor->SetRenderWindow(renderWindow); 

renderer->AddActor(actor);

renderer->SetBackground(.3, .4, .5); 

renderer->ResetCamera();

renderer->GetActiveCamera()->Azimuth(60);

renderer->GetActiveCamera()->Elevation(60);

renderer->GetActiveCamera()->Dolly(1.2);

renderer->ResetCameraClippingRange(); 

renderWindow->Render();

interactor->Start(); 

return EXIT_SUCCESS; 

} 
 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/vtkusers/attachments/20151012/1a170b9c/attachment.html>


More information about the vtkusers mailing list