[vtkusers] Adding an ImageSlice to one renderer causes the image to disappear from a different renderer?
    David Doria 
    daviddoria at gmail.com
       
    Thu Sep  1 14:05:50 EDT 2011
    
    
  
I have this situation:
- A QMainWindow that contains a left and right QVTKWidget.
- A vtkImageData* LeftImageData that will be displayed in the left QVTKWidget
- A vtkImageData* BothImageData that will be displayed in both QVTKWidgets
If I only add the ImageSlice made from BothImageData to the left
QVTKWidget, everything works as expected. However, as soon as I add
the BothImageSlice to the right QVTKWidget, it disappears from the
left QVTKWidget!
Has anyone seen anything like this before? Below is an excerpt:
void MainWindow::on_actionOpenImage_triggered()
{
  std::string filename = "bunny.jpg";
  JPEGReader->SetFileName(filename.c_str());
  JPEGReader->Update();
  this->LeftImageData->ShallowCopy(JPEGReader->GetOutput());
  // Clear everything
  this->LeftRenderer->RemoveAllViewProps();
  this->RightRenderer->RemoveAllViewProps();
  // Setup left pane
  this->LeftImageSliceMapper->SetInputConnection(this->LeftImageData->GetProducerPort());
  this->LeftImageSlice->SetMapper(this->LeftImageSliceMapper);
  this->LeftRenderer->AddViewProp(this->LeftImageSlice);
  // Setup the "Both" image
  Helpers::SetImageSize(this->LeftImageData, this->BothImageData);
  Helpers::CreateTransparentImage(this->LeftImageData,
this->BothImageData); // Makes BothImageData the same size as
LeftImageData, but transparent and empty
  this->BothImageSliceMapper->SetInputConnection(this->BothImageData->GetProducerPort());
  this->BothImageSlice->SetMapper(this->BothImageSliceMapper);
  // Add the "Both" image to both panes
  this->LeftRenderer->AddViewProp(this->BothImageSlice);
  this->RightRenderer->AddViewProp(this->BothImageSlice); // If this
is called (uncommented), the image in the *left* renderer
disappears???
  // Refresh
  this->LeftRenderer->ResetCamera();
  this->RightRenderer->ResetCamera();
  this->qvtkWidgetRight->GetInteractor()->Render();
  this->qvtkWidgetLeft->GetInteractor()->Render();
}
Unfortunately I could not try to recreate this without the Qt
components because I did not know how else to display two renderers.
The full code is available here:
http://daviddoria.com/Uploads/ImageSlice/
Thanks,
David
    
    
More information about the vtkusers
mailing list