<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"><<a href="mailto:bill.lorensen@gmail.com" target="_blank">bill.lorensen@gmail.com</a>></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"><<a href="mailto:david.gobbi@gmail.com" target="_blank">david.gobbi@gmail.com</a>></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'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 <<a href="mailto:bill.lorensen@gmail.com" target="_blank">bill.lorensen@gmail.com</a>> wrote:<br>
> I was able to duplicate your problem. I believe the problem is trying to<br>
> approximate the unsigned char 3-component colors. Butterfly is an<br>
> approximating subdivision scheme, while loop is an interpolating scheme. I<br>
> think if you assigned scalar float, single component values and mapper them<br>
> through a lookup table you would get good results. But I'm not sure that<br>
> would accomplish what you want.<br>
><br>
><br>
><br>
> On Sat, Apr 20, 2013 at 2:23 PM, Bill Lorensen <<a href="mailto:bill.lorensen@gmail.com" target="_blank">bill.lorensen@gmail.com</a>><br>
> wrote:<br>
>><br>
>> This better. Just to be sure, I assume this code also produces bad<br>
>> results?<br>
>><br>
>><br>
>><br>
>> On Sat, Apr 20, 2013 at 1:39 PM, DivyaS <<a href="mailto:div.anand141@gmail.com" target="_blank">div.anand141@gmail.com</a>> wrote:<br>
>>><br>
>>> Sure, please check this code - I have removed all the unnecessary code. I<br>
>>> have added comments for each of the steps.<br>
>>><br>
>>> //Defining a cylinder source.<br>
>>> vtkCylinderSource cylinderSource = vtkCylinderSource.New();<br>
>>> cylinderSource.Update();<br>
>>><br>
>>> vtkTriangleFilter triangles = vtkTriangleFilter.New();<br>
>>> triangles.SetInput(cylinderSource.GetOutput());<br>
>>> triangles.Update();<br>
>>> vtkPolyData originalMesh;<br>
>>> originalMesh = triangles.GetOutput();<br>
>>><br>
>>> vtkUnsignedCharArray colors = vtkUnsignedCharArray.New();<br>
>>> colors.SetNumberOfComponents(3);<br>
>>> colors.SetNumberOfTuples(originalMesh.GetNumberOfPolys());<br>
>>> colors.SetName("Colors");<br>
>>><br>
>>> //Creating an array to store the values according to which<br>
>>> the<br>
>>> colors are selected.<br>
>>> //Values are inserted for each of the points in the polydata<br>
>>> int[] colorAT = new int[originalMesh.GetNumberOfPolys()];<br>
>>> for (int i = 0; i < originalMesh.GetNumberOfPolys(); i++)<br>
>>> {<br>
>>> colorAT[i] = i;<br>
>>> }<br>
>>><br>
>>> int activationTime;<br>
>>> //Loop to select colors for each of the points in the<br>
>>> polydata.<br>
>>> for (int i = 0; i < originalMesh.GetNumberOfPolys(); i++)<br>
>>> {<br>
>>> activationTime = colorAT[i];<br>
>>> if (activationTime > 0 && activationTime < 5)<br>
>>> {<br>
>>> //Black<br>
>>> colors.InsertTuple3(i, 255, 255, 0);<br>
>>> }<br>
>>> else if (activationTime > 4 && activationTime < 10)<br>
>>> {<br>
>>> //Blue<br>
>>> colors.InsertTuple3(i, 0, 0, 255);<br>
>>> }<br>
>>> else if (activationTime > 9 && activationTime < 300)<br>
>>> {<br>
>>> //Red<br>
>>> colors.InsertTuple3(i, 255, 0, 0);<br>
>>> }<br>
>>> }<br>
>>> originalMesh.GetPointData().SetScalars(colors);<br>
>>><br>
>>> //Subdivision.<br>
>>> int numberOfSubdivisions = 4;<br>
>>> vtkPolyDataAlgorithm subdivisionFilter =<br>
>>> vtkButterflySubdivisionFilter.New();<br>
>>><br>
>>><br>
>>> ((vtkButterflySubdivisionFilter)subdivisionFilter).SetNumberOfSubdivisions(numberOfSubdivisions);<br>
>>> subdivisionFilter.SetInput(originalMesh);<br>
>>> subdivisionFilter.Update();<br>
>>><br>
>>> vtkRenderWindow renderWindow =<br>
>>> renderWindowControl1.RenderWindow;<br>
>>> vtkRenderer renderer = vtkRenderer.New();<br>
>>><br>
>>> //Create a mapper and actor<br>
>>> vtkPolyDataMapper mapper = vtkPolyDataMapper.New();<br>
>>> mapper.SetInputConnection(subdivisionFilter.GetOutputPort());<br>
>>> vtkActor actor = vtkActor.New();<br>
>>> actor.SetMapper(mapper);<br>
>>><br>
>>> renderer.AddActor(actor);<br>
>>> renderer.SetBackground(0, 0, 0);<br>
>>> renderer.ResetCamera();<br>
>>> renderWindow.AddRenderer(renderer);<br>
>>> renderWindow.Render();<br>
>>><br>
>>><br>
>>><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>