[vtkusers] Coordinate conversions (World-Display)

Daniel Haehn haehn at bwh.harvard.edu
Wed Sep 8 13:42:16 EDT 2010


Hi VTK experts,

I use the following functions to convert between World and Display coordinates and vice versa. I found the method on the mailing list or in some other code.

Isn't there an easier way to do that? Is it correct at all and is it robust?

this->GetRenderer is a vtkRenderer.

//---------------------------------------------------------------------------
/// Convert display to world coordinates
double* vtkMRMLAnnotationThreeDViewDisplayableManager::GetDisplayToWorldCoordinates(double x, double y)
{
  double coordinates[3];
  coordinates[0]=(double)x;
  coordinates[1]=(double)y;
  coordinates[2]=0;

  this->GetRenderer()->SetDisplayPoint(coordinates);
  this->GetRenderer()->DisplayToView();
  this->GetRenderer()->GetViewPoint(coordinates);
  this->GetRenderer()->ViewToWorld();
  return this->GetRenderer()->GetWorldPoint();

}

//---------------------------------------------------------------------------
/// Convert world to display coordinates
double* vtkMRMLAnnotationThreeDViewDisplayableManager::GetWorldToDisplayCoordinates(double * worldPoints)
{

  vtkDebugMacro("GetWorldToDisplayCoordinates: RAS " << worldPoints[0] << ", " << worldPoints[1] << ", " << worldPoints[2])

  double * displayCoordinates;

  this->GetRenderer()->SetWorldPoint(worldPoints);
  this->GetRenderer()->WorldToView();
  displayCoordinates = this->GetRenderer()->GetViewPoint();
  this->GetRenderer()->ViewToDisplay();

  double * output = this->GetRenderer()->GetDisplayPoint();

  vtkDebugMacro("GetWorldToDisplayCoordinates: Display " << output[0] << ", " << output[1])

  return output;

}

Thank you,
Daniel


More information about the vtkusers mailing list