[vtkusers] Forcing a vtkCubeSource object to draw without jiggling the camera first

Steve Chall stevec at renci.org
Thu Oct 22 13:41:54 EDT 2009


Got it.  My colleague David Borland very sensibly recommended I try:

renderer->ResetCameraClippingRange();

which did the trick.

-Steve

-----Original Message-----
From: Steve Chall [mailto:stevec at renci.org] 
Sent: Wednesday, October 21, 2009 5:05 PM
To: 'vtkusers at vtk.org'
Subject: Forcing a vtkCubeSource object to draw without jiggling the camera
first

In my current project, I pick a grid cell on a vtkOpenGLImageActor, and then
I want to draw that grid cell using a colorful vtkCubeSource object.  It
works beautifully -- but only after I've zoomed or rotated the camera
(translating doesn't help).  If I don't zoom or rotate, the pickedPoint
never appears.  After zooming or rotating -- even when I return to my
original camera position -- it always works.

What does moving the camera do that makes the vtkCubeSource immediately
appear?  How can I programmatically "flip the switch" to force the
vtkCubeSource to display the first time, whatever side effect it is of the
camera motion (but not just *any* camera motion)?  The rather rudimentary C
function is included below (the variables and const are globals).  Thanks
for your suggestions.

I'm running VTK 5.4.2 on Ubuntu Linux version 8.04.1.

-Steve Chall
 Senior Research Software Developer
 Renaissance Computing Institute
 Phone: 919-515-0051
 Email: stevec at renci.org

void DrawPickedGridCell(int row, int col)
{
  if (!pickedPoint)
  {
    pickedPoint = vtkCubeSource::New();
    pickedPoint->SetXLength(kGridCellWidth);
    pickedPoint->SetYLength(kGridCellHeight);
    pickedPoint->SetZLength(0.1);

    pickedPointMapper = vtkOpenGLPolyDataMapper::New();

    pickedPointActor = vtkOpenGLActor::New();
    pickedPointActor->GetProperty()->SetColor(1, 0, 0);

    pickedPointMapper->SetInputConnection(pickedPoint->GetOutputPort());
    pickedPointActor->SetMapper(pickedPointMapper);

    mapRenderer->AddActor(pickedPointActor);
  }

  double x, y;
  ComputeGridCellCenter(row, col, x, y);
  pickedPoint->SetCenter(x, y, 0.1);
  pickedPointCenter->SetCenter(x, y, 0.1);
}





More information about the vtkusers mailing list