<div dir="ltr">div,<div><br></div><div style>Why not use the Loop subdivision?</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Sun, Apr 21, 2013 at 8:00 AM, Bill Lorensen <span dir="ltr">&lt;<a href="mailto:bill.lorensen@gmail.com" target="_blank">bill.lorensen@gmail.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">David,<div><br></div><div>Butterfly is approximating. The vertices it generates do not lie on the original surface.</div>
</div><div class="gmail_extra"><div><div class="h5"><br><br><div class="gmail_quote">On Sat, Apr 20, 2013 at 6:31 PM, David Gobbi <span dir="ltr">&lt;<a href="mailto:david.gobbi@gmail.com" target="_blank">david.gobbi@gmail.com</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">The vtkProbeFilter works fine with RGB scalars, doesn&#39;t it?  So it<br>
should be possible to put a probe filter after the subdivision filter<br>
to re-interpolate the scalars from the original data set.<br>
<div><div><br>
On Sat, Apr 20, 2013 at 3:51 PM, Bill Lorensen &lt;<a href="mailto:bill.lorensen@gmail.com" target="_blank">bill.lorensen@gmail.com</a>&gt; wrote:<br>
&gt; I was able to duplicate your problem. I believe the problem is trying to<br>
&gt; approximate the unsigned char 3-component colors. Butterfly is an<br>
&gt; approximating subdivision scheme, while loop is an interpolating scheme. I<br>
&gt; think if you assigned scalar float, single component values and mapper them<br>
&gt; through a lookup table you would get good results. But I&#39;m not sure that<br>
&gt; would accomplish what you want.<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; On Sat, Apr 20, 2013 at 2:23 PM, Bill Lorensen &lt;<a href="mailto:bill.lorensen@gmail.com" target="_blank">bill.lorensen@gmail.com</a>&gt;<br>
&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; This better. Just to be sure, I assume this code also produces bad<br>
&gt;&gt; results?<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; On Sat, Apr 20, 2013 at 1:39 PM, DivyaS &lt;<a href="mailto:div.anand141@gmail.com" target="_blank">div.anand141@gmail.com</a>&gt; wrote:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Sure, please check this code - I have removed all the unnecessary code. I<br>
&gt;&gt;&gt; have added comments for each of the steps.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;             //Defining a cylinder source.<br>
&gt;&gt;&gt;             vtkCylinderSource cylinderSource = vtkCylinderSource.New();<br>
&gt;&gt;&gt;             cylinderSource.Update();<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;             vtkTriangleFilter triangles = vtkTriangleFilter.New();<br>
&gt;&gt;&gt;             triangles.SetInput(cylinderSource.GetOutput());<br>
&gt;&gt;&gt;             triangles.Update();<br>
&gt;&gt;&gt;             vtkPolyData originalMesh;<br>
&gt;&gt;&gt;             originalMesh = triangles.GetOutput();<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;             vtkUnsignedCharArray colors = vtkUnsignedCharArray.New();<br>
&gt;&gt;&gt;             colors.SetNumberOfComponents(3);<br>
&gt;&gt;&gt;             colors.SetNumberOfTuples(originalMesh.GetNumberOfPolys());<br>
&gt;&gt;&gt;             colors.SetName(&quot;Colors&quot;);<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;             //Creating an array to store the values according to which<br>
&gt;&gt;&gt; the<br>
&gt;&gt;&gt; colors are selected.<br>
&gt;&gt;&gt;             //Values are inserted for each of the points in the polydata<br>
&gt;&gt;&gt;             int[] colorAT = new int[originalMesh.GetNumberOfPolys()];<br>
&gt;&gt;&gt;             for (int i = 0; i &lt; originalMesh.GetNumberOfPolys(); i++)<br>
&gt;&gt;&gt;             {<br>
&gt;&gt;&gt;                 colorAT[i] = i;<br>
&gt;&gt;&gt;             }<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;             int activationTime;<br>
&gt;&gt;&gt;             //Loop to select colors for each of the points in the<br>
&gt;&gt;&gt; polydata.<br>
&gt;&gt;&gt;             for (int i = 0; i &lt; originalMesh.GetNumberOfPolys(); i++)<br>
&gt;&gt;&gt;             {<br>
&gt;&gt;&gt;                 activationTime = colorAT[i];<br>
&gt;&gt;&gt;                 if (activationTime &gt; 0 &amp;&amp; activationTime &lt; 5)<br>
&gt;&gt;&gt;                 {<br>
&gt;&gt;&gt;                     //Black<br>
&gt;&gt;&gt;                     colors.InsertTuple3(i, 255, 255, 0);<br>
&gt;&gt;&gt;                 }<br>
&gt;&gt;&gt;                 else if (activationTime &gt; 4 &amp;&amp; activationTime &lt; 10)<br>
&gt;&gt;&gt;                 {<br>
&gt;&gt;&gt;                     //Blue<br>
&gt;&gt;&gt;                     colors.InsertTuple3(i, 0, 0, 255);<br>
&gt;&gt;&gt;                 }<br>
&gt;&gt;&gt;                 else if (activationTime &gt; 9 &amp;&amp; activationTime &lt; 300)<br>
&gt;&gt;&gt;                 {<br>
&gt;&gt;&gt;                     //Red<br>
&gt;&gt;&gt;                     colors.InsertTuple3(i, 255, 0, 0);<br>
&gt;&gt;&gt;                 }<br>
&gt;&gt;&gt;             }<br>
&gt;&gt;&gt;             originalMesh.GetPointData().SetScalars(colors);<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;             //Subdivision.<br>
&gt;&gt;&gt;             int numberOfSubdivisions = 4;<br>
&gt;&gt;&gt;             vtkPolyDataAlgorithm subdivisionFilter =<br>
&gt;&gt;&gt; vtkButterflySubdivisionFilter.New();<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; ((vtkButterflySubdivisionFilter)subdivisionFilter).SetNumberOfSubdivisions(numberOfSubdivisions);<br>
&gt;&gt;&gt;             subdivisionFilter.SetInput(originalMesh);<br>
&gt;&gt;&gt;             subdivisionFilter.Update();<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;             vtkRenderWindow renderWindow =<br>
&gt;&gt;&gt; renderWindowControl1.RenderWindow;<br>
&gt;&gt;&gt;             vtkRenderer renderer = vtkRenderer.New();<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;             //Create a mapper and actor<br>
&gt;&gt;&gt;             vtkPolyDataMapper mapper = vtkPolyDataMapper.New();<br>
&gt;&gt;&gt;             mapper.SetInputConnection(subdivisionFilter.GetOutputPort());<br>
&gt;&gt;&gt;             vtkActor actor = vtkActor.New();<br>
&gt;&gt;&gt;             actor.SetMapper(mapper);<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;             renderer.AddActor(actor);<br>
&gt;&gt;&gt;             renderer.SetBackground(0, 0, 0);<br>
&gt;&gt;&gt;             renderer.ResetCamera();<br>
&gt;&gt;&gt;             renderWindow.AddRenderer(renderer);<br>
&gt;&gt;&gt;             renderWindow.Render();<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
</div></div></blockquote></div><br><br clear="all"><div><br></div></div></div><div class="im">-- <br>Unpaid intern in BillsBasement at noware dot com<br>
</div></div>
</blockquote></div><br><br clear="all"><div><br></div>-- <br>Unpaid intern in BillsBasement at noware dot com<br>
</div>