[vtkusers] Uneven colors after the vtkButterflySubdivisionFilter
Bill Lorensen
bill.lorensen at gmail.com
Sun Apr 21 08:01:26 EDT 2013
div,
Why not use the Loop subdivision?
On Sun, Apr 21, 2013 at 8:00 AM, Bill Lorensen <bill.lorensen at gmail.com>wrote:
> David,
>
> Butterfly is approximating. The vertices it generates do not lie on the
> original surface.
>
>
> On Sat, Apr 20, 2013 at 6:31 PM, David Gobbi <david.gobbi at gmail.com>wrote:
>
>> The vtkProbeFilter works fine with RGB scalars, doesn't it? So it
>> should be possible to put a probe filter after the subdivision filter
>> to re-interpolate the scalars from the original data set.
>>
>> On Sat, Apr 20, 2013 at 3:51 PM, Bill Lorensen <bill.lorensen at gmail.com>
>> wrote:
>> > I was able to duplicate your problem. I believe the problem is trying to
>> > approximate the unsigned char 3-component colors. Butterfly is an
>> > approximating subdivision scheme, while loop is an interpolating
>> scheme. I
>> > think if you assigned scalar float, single component values and mapper
>> them
>> > through a lookup table you would get good results. But I'm not sure that
>> > would accomplish what you want.
>> >
>> >
>> >
>> > On Sat, Apr 20, 2013 at 2:23 PM, Bill Lorensen <bill.lorensen at gmail.com
>> >
>> > wrote:
>> >>
>> >> This better. Just to be sure, I assume this code also produces bad
>> >> results?
>> >>
>> >>
>> >>
>> >> On Sat, Apr 20, 2013 at 1:39 PM, DivyaS <div.anand141 at gmail.com>
>> wrote:
>> >>>
>> >>> Sure, please check this code - I have removed all the unnecessary
>> code. I
>> >>> have added comments for each of the steps.
>> >>>
>> >>> //Defining a cylinder source.
>> >>> vtkCylinderSource cylinderSource =
>> vtkCylinderSource.New();
>> >>> cylinderSource.Update();
>> >>>
>> >>> vtkTriangleFilter triangles = vtkTriangleFilter.New();
>> >>> triangles.SetInput(cylinderSource.GetOutput());
>> >>> triangles.Update();
>> >>> vtkPolyData originalMesh;
>> >>> originalMesh = triangles.GetOutput();
>> >>>
>> >>> vtkUnsignedCharArray colors = vtkUnsignedCharArray.New();
>> >>> colors.SetNumberOfComponents(3);
>> >>> colors.SetNumberOfTuples(originalMesh.GetNumberOfPolys());
>> >>> colors.SetName("Colors");
>> >>>
>> >>> //Creating an array to store the values according to which
>> >>> the
>> >>> colors are selected.
>> >>> //Values are inserted for each of the points in the
>> polydata
>> >>> int[] colorAT = new int[originalMesh.GetNumberOfPolys()];
>> >>> for (int i = 0; i < originalMesh.GetNumberOfPolys(); i++)
>> >>> {
>> >>> colorAT[i] = i;
>> >>> }
>> >>>
>> >>> int activationTime;
>> >>> //Loop to select colors for each of the points in the
>> >>> polydata.
>> >>> for (int i = 0; i < originalMesh.GetNumberOfPolys(); i++)
>> >>> {
>> >>> activationTime = colorAT[i];
>> >>> if (activationTime > 0 && activationTime < 5)
>> >>> {
>> >>> //Black
>> >>> colors.InsertTuple3(i, 255, 255, 0);
>> >>> }
>> >>> else if (activationTime > 4 && activationTime < 10)
>> >>> {
>> >>> //Blue
>> >>> colors.InsertTuple3(i, 0, 0, 255);
>> >>> }
>> >>> else if (activationTime > 9 && activationTime < 300)
>> >>> {
>> >>> //Red
>> >>> colors.InsertTuple3(i, 255, 0, 0);
>> >>> }
>> >>> }
>> >>> originalMesh.GetPointData().SetScalars(colors);
>> >>>
>> >>> //Subdivision.
>> >>> int numberOfSubdivisions = 4;
>> >>> vtkPolyDataAlgorithm subdivisionFilter =
>> >>> vtkButterflySubdivisionFilter.New();
>> >>>
>> >>>
>> >>>
>> ((vtkButterflySubdivisionFilter)subdivisionFilter).SetNumberOfSubdivisions(numberOfSubdivisions);
>> >>> subdivisionFilter.SetInput(originalMesh);
>> >>> subdivisionFilter.Update();
>> >>>
>> >>> vtkRenderWindow renderWindow =
>> >>> renderWindowControl1.RenderWindow;
>> >>> vtkRenderer renderer = vtkRenderer.New();
>> >>>
>> >>> //Create a mapper and actor
>> >>> vtkPolyDataMapper mapper = vtkPolyDataMapper.New();
>> >>>
>> mapper.SetInputConnection(subdivisionFilter.GetOutputPort());
>> >>> vtkActor actor = vtkActor.New();
>> >>> actor.SetMapper(mapper);
>> >>>
>> >>> renderer.AddActor(actor);
>> >>> renderer.SetBackground(0, 0, 0);
>> >>> renderer.ResetCamera();
>> >>> renderWindow.AddRenderer(renderer);
>> >>> renderWindow.Render();
>> >>>
>> >>>
>> >>>
>>
>
>
>
> --
> Unpaid intern in BillsBasement at noware dot com
>
--
Unpaid intern in BillsBasement at noware dot com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20130421/5006289c/attachment.htm>
More information about the vtkusers
mailing list