<div>I understand it's VTK's style to keep classes as independent of each other as possible, and to make all things optional and easily connectable, so you don't have to run unnecessary filters.</div><div><br></div><div>But in this case, it's absolutely clear that the STL writer requires polydata with only triangles in it to write out a meaningful STL file. (I've encountered this personally before, and it took quite some effort to figure out that I just had to add a few lines of code to put a triangle filter in, too...)</div><div><br></div><div>So it begs the question: why is this a mailing list question in 2015?</div><div><br></div><div>Shouldn't the STL writer detect that its input contains non-triangles, and **automatically** insert a triangle filter to produce correct output? Or, at the very least, spit out an error message saying "here, insert this code before calling Update/Write, and it will work like you want it to" ... ?</div><div><br></div><div>(Similarly for rendering crappy polydata using the polydata mapper: it requires up-to-date normals to render with proper lighting and shading, and seems like the perfect candidate for **automatically** inserting a polydata normals filter. This might be harder to detect that the normals are not up to date, but sure would have saved my team some time recently...)</div><div><br></div><div>Would these types of improvements be welcome additions to VTK, or am I missing some case where you would NOT want this type of behavior?</div><div><br></div><div><br></div><div>??</div><div>David C.</div><div><br></div><div><br><br>On Wednesday, October 14, 2015,  <<a href="mailto:piers.barber@logicmonkey.co.uk">piers.barber@logicmonkey.co.uk</a>> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><u></u>
<div>
<p> On 2015-10-14 18:10, Cory Quammen wrote:</p>
<blockquote type="cite" style="padding-left:5px;border-left:#1010ff 2px solid;margin-left:5px;width:100%">
<div dir="ltr"><span style="font-size:12.8px">Maybe try inserting a vtkTriangleFilter in front of your STL writer?</span></div>
</blockquote>
<div dir="ltr">Perfect - many many thanks!</div>
<div dir="ltr"> </div>
<div dir="ltr">It worked on the triangle mesh AND on the ruled surface. Both STL files read into other apps just fine. The ruled surface output is appreciably higher quality even than a very high poly count mesh.</div>
<div dir="ltr"> </div>
<div dir="ltr">For the record...</div>
<div dir="ltr"> </div>
<div dir="ltr">/<span style="font-family:'courier new',courier">/ write out a STL file</span></div>
<div dir="ltr"><span style="font-family:'courier new',courier"></span><span style="font-family:'courier new',courier">// run a triangle filter ruled surface to create polys</span></div>
<div dir="ltr"><span style="font-family:'courier new',courier"></span><span style="font-family:'courier new',courier">vtkSmartPointer<vtkTriangleFilter></span></div>
<div dir="ltr"><span style="font-family:'courier new',courier"></span><span style="font-family:'courier new',courier">tris = vtkTriangleFilter::New();</span></div>
<div dir="ltr"><span style="font-family:'courier new',courier"></span><span style="font-family:'courier new',courier">tris->SetInputConnection(ruled->GetOutputPort());</span></div>
<div dir="ltr"><span style="font-family:'courier new',courier"></span><span style="font-family:'courier new',courier">vtkSmartPointer<vtkSTLWriter></span></div>
<div dir="ltr"><span style="font-family:'courier new',courier"></span><span style="font-family:'courier new',courier">stlWriter = vtkSmartPointer<vtkSTLWriter>::New();</span></div>
<div dir="ltr"><span style="font-family:'courier new',courier"></span><span style="font-family:'courier new',courier">stlWriter->SetFileName("Ruled.stl");</span></div>
<div dir="ltr"><span style="font-family:'courier new',courier"></span><span style="font-family:'courier new',courier">stlWriter->SetInputConnection(tris->GetOutputPort());</span></div>
<div dir="ltr"><span style="font-family:'courier new',courier"></span><span style="font-family:'courier new',courier">stlWriter->Write();</span></div>
<div dir="ltr">
<p>And</p>
<p>// write out a STL file<br> // run a triangle filter on the mesh to create polys<br> vtkSmartPointer<vtkTriangleFilter><br> tris = vtkTriangleFilter::New();<br> tris->SetInputConnection(ruled->GetOutputPort());</p>
<p>vtkSmartPointer<vtkSTLWriter></p>
<p>stlWriter = vtkSmartPointer<vtkSTLWriter>::New();</p>
<p>stlWriter->SetFileName("Mesh.stl");<br> stlWriter->SetInputConnection(tris->GetOutputPort());<br> stlWriter->Write();</p>
<p>--</p>
<p>Piers Barber                   (-=:LogicMonkey:=-)</p>
</div>
</div>
</blockquote></div>