[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