[vtkusers] Locating a 3D position in 3D scheme from a XYZ coordinates

Dean Inglis dean.inglis at camris.ca
Wed Sep 3 07:23:18 EDT 2008


Hi Wagner,

 

dummyCoords (pcoords method parameter) needs to be passed

through the calling window but you don't need to use it.  Another

way to calculate xyz coords (for example, x):

double* spacing = = m_ImageData->GetSpacing();

 

x = m_coords[0]*spacing[0] + origin[0];

 

 

  _____  

From: Wagner Sales [mailto:wsales at gmail.com] 
Sent: September-02-08 3:09 PM
To: dean.inglis at camris.ca
Cc: VTK users
Subject: Re: [vtkusers] Locating a 3D position in 3D scheme from a XYZ
coordinates

 

Hi Dean,

My point are defined in int XYZ, which Z are my slice, and XY the simple
pixel coordinate. Are no interpolation here. This points are used to
segment, works fine.
Bu I need to show this points on 3D. The only way that's I know until now
are the celllocation by vtkCell::EvaluateLocation. But are crashing, and I
think are thread problem since this method aren't thread safe. I tried with
the thread safe method too, and are not working. Based on your sugestion, I
tried the second option, which appears to be the correct to my case:

    double dummyCoords[3];
    int mCoords[3] = { m_XPosition, m_YPosition, m_ZPosition };
    int ret = m_ImageData->ComputeStructuredCoordinates(viewCordinates,
mCoords, dummyCoords);
    if(ret >0 )
    {
        std::cout << "Point inside. Coords are: " << viewCordinates[0] << ",
" << viewCordinates[1] << ", " << viewCordinates[2] << endl;
    } else {
        std::cout << "Point outside of volume" << endl;
    }

Well, the point are always outside of the volume. dummyCoords ( pcoords
method parameter ) don't needs to be calculated?

Regards,

Wagner Sales

2008/9/1 Dean Inglis <dean.inglis at sympatico.ca>

Hi Wagner,

 

how are m_XPosition, m_YPosition, m_ZPosition defined?

 

Given a 3D double precision 3D spatial point:

 

vktIdType id = m_CurrentImageData->FindPoint(xyzCoords)

if(id > -1)

{

//do what you need to do with the point: it's valid!

}

 

if you have integer ijk indices:

 

double queryPoint[3];

double dummyPcoords[3];

if(m_CurrentImageData->ComputeStructuredCoordinates(queryPoint,myijkindices,
dummyPcoords) == 1)

{

//the ijk indices refer to a point in the 3D image volume and you have a
valid 3D point

//otherwise, try with different ijk indices

}

 

HTH

Dean

 

 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20080903/9342b847/attachment.htm>


More information about the vtkusers mailing list