[vtkusers] Coordinate conversions (World-Display)

pat marion pat.marion at kitware.com
Wed Sep 8 18:44:31 EDT 2010


Sadly, yes, this is the way to do it.  If you want, there is a class that
offers static convenience methods:

static void vtkInteractorObserver::ComputeDisplayToWorld (vtkRenderer *ren,
double x, double y, double z, double worldPt[4])
static void vtkInteractorObserver::ComputeWorldToDisplay (vtkRenderer *ren,
double x, double y, double z, double displayPt[3])

But if you look at the implementation...

void vtkInteractorObserver::ComputeWorldToDisplay(vtkRenderer *ren,
                                                  double x,
                                                  double y,
                                                  double z,
                                                  double displayPt[3])
{
  ren->SetWorldPoint(x, y, z, 1.0);
  ren->WorldToDisplay();
  ren->GetDisplayPoint(displayPt);
}

One comment about your code... I'd be careful returning a double* like
that.  You don't own that memory, it could change at any time.

Pat

On Wed, Sep 8, 2010 at 1:42 PM, Daniel Haehn <haehn at bwh.harvard.edu> wrote:

> 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
> _______________________________________________
> Powered by 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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20100908/1722cc69/attachment.htm>


More information about the vtkusers mailing list