[vtkusers] Glyph coloring
Gib Bogle
g.bogle at auckland.ac.nz
Thu Nov 25 23:16:33 EST 2010
Ahah! That works. I get the array pointer with
vtkSmartPointer<vtkDataArray> colors = input->GetPointData()->GetScalars();
I'm seeing some odd with the color, which I didn't see when using actors for the
individual tiles. I set the color to be off-white {0.9, 0.9, 0.5}, supposed to
be bone color. The tiles look OK when viewed at right angles, but as they are
rotated the color shifts toward a pale mauve. Could this be related to the
properties I'm using? I don't change the default scene lighting, but I set
glactor properties thus:
glactor->GetProperty()->SetAmbient(0.5);
glactor->GetProperty()->SetDiffuse(0.2);
glactor->GetProperty()->SetSpecular(0.5);
On 26/11/2010 4:22 p.m., David Gobbi wrote:
> It should be possible to modify the scalars the same way as the points:
>
> points->SetPoint(idx, point);
> colors->SetTupleValue(idx, color);
> glypher->Modified();
>
> The vtkCellArray isn't necessary (but somehow polydata with no cells goes
> against my sense of aesthetics).
>
> David
>
> On Thu, Nov 25, 2010 at 7:07 PM, Gib Bogle <g.bogle at auckland.ac.nz
> <mailto:g.bogle at auckland.ac.nz>> wrote:
>
> It turns out there was a difference between what I was doing and the wiki
> example code, one of those seemingly insignificant details that are actually
> important.
>
> I had
> glypher->SetScaleFactor(1.0);
> and the wiki code has
> glypher->ScalingOff();
> With that change it works (although I don't know why).
>
> I have a final (I hope!) question. I now want to selectively change the
> color of glyphs. I know how to change the position of the point indexed by idx:
> points->SetPoint(idx,x,y,z);
> glypher->Modified();
>
> Presumably something very similar is needed to change the color of this
> glyph, but I don't know how to access the array that holds the colors, which
> was initialized with:
> input->GetPointData()->SetScalars(colors);
>
> Can someone help me over this last hurdle?
>
>
>
> On 26/11/2010 12:42 p.m., Gib Bogle wrote:
>
> I've been trying to follow David Gobbi's suggestion about coloring the
> glyphs
> that I am now using to render my squares with. The hints he provided
> were not
> enough for me to get it working, so I hunted around and found the wiki
> example
> http://www.itk.org/Wiki/VTK/Examples/Cxx/Visualization/ColorGlyphs
> This works fine, so I thought I could just follow the same path. It
> doesn't work
> for me, and I'm guessing that it's because I'm using a vtkPolyData that
> contains
> both vtkPoints and vtkCellArray. David advised me to use
> input->GetPointData()->AddArray(...)
> but I couldn't see how to implement this. My code is shown below. What am I
> missing? (This code doesn't display the squares at all, unless I comment out
> input->GetPointData()->SetScalars(colors).)
> I apologize for the ignorance I'm displaying - I don't understand why it's
> necessary to use the vtkCellArray, for example.
>
> points = vtkSmartPointer<vtkPoints>::New();
> vtkSmartPointer<vtkCellArray> dummycells =
> vtkSmartPointer<vtkCellArray>::New();
> points->SetNumberOfPoints(npos); // number of squares
> dummycells->InsertNextCell(npos);
> colors = vtkSmartPointer<vtkUnsignedCharArray>::New();
> colors->SetName("colors");
> colors->SetNumberOfComponents(3);
> unsigned char g[3] = {0,255,0};
> for (int ipos=0; ipos<npos; ipos++) {
> points->SetPoint(ipos, x, y, z);
> dummycells->InsertCellPoint(ipos);
> colors->InsertNextTupleValue(g);
> }
> input = vtkSmartPointer<vtkPolyData>::New();
> input->SetPoints(points);
> input->SetVerts(dummycells);
> input->GetPointData()->SetScalars(colors);
> glypher = vtkSmartPointer<vtkGlyph3D>::New();
> glypher->SetInput(input);
> glypher->SetSource(polygonPolyData);
> glypher->SetScaleFactor(1.0);
> glypher->SetColorModeToColorByScalar();
> // glypher->SetInputArrayToProcess(3, 0, 0, 0, "colors");
> glypher->Update();
> squareMapper = vtkPolyDataMapper::New();
> squareMapper->SetInputConnection(glypher->GetOutputPort());
> glactor = vtkActor::New();
> glactor->SetMapper(squareMapper);
> glactor->GetProperty()->SetAmbient(0.5);
> glactor->GetProperty()->SetDiffuse(0.2);
> glactor->GetProperty()->SetSpecular(0.5);
> ren->AddActor(glactor);
> _______________________________________________
> Powered by www.kitware.com <http://www.kitware.com>
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Please keep messages on-topic and check the VTK FAQ at:
> http://www.vtk.org/Wiki/VTK_FAQ
>
> Follow this link to subscribe/unsubscribe:
> http://www.vtk.org/mailman/listinfo/vtkusers
>
> _______________________________________________
> Powered by www.kitware.com <http://www.kitware.com>
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Please keep messages on-topic and check the VTK FAQ at:
> http://www.vtk.org/Wiki/VTK_FAQ
>
> Follow this link to subscribe/unsubscribe:
> http://www.vtk.org/mailman/listinfo/vtkusers
>
>
More information about the vtkusers
mailing list