<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<META content="MSHTML 6.00.2800.1522" name=GENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=#ffffff>
<DIV><FONT face=Arial size=2><FONT face="Times New Roman" size=3>Hi 
Julien,<BR><BR>Many thanks for your reply. Would you like to have a look at my 
requirement?<BR><BR>I'd like to build a spatial relationship between a 3D mesh 
(tetrahedron) and<BR>a 3D image. Since the mesh was extracted from CT images 
using a software, I<BR>would like to map the mesh to the orignial image data in 
my program, so that<BR>I can access all the voxels inside each elements. I don't 
know to build a<BR>common physical coordinate system for these two 
objects.<BR><BR>The following is my code and running result, the test point [50, 
20, 0]<BR>should not in the tetrhedron with<BR>node 
no&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
coordinate<BR>6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
65.8246 14.8065 
0<BR>1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
40.8246 39.8065 
25<BR>3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
40.8246 14.8065 
25<BR>5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
65.8246 14.8065 25<BR>however the return bool value of IsInside is 
true.<BR><BR>----------------------My<BR>code------------------------------------------------------------------------<BR>---<BR>typedef 
itk::DefaultDynamicMeshTraits&lt; float, 3, 3 &gt; MeshTrait;<BR>typedef 
itk::Mesh&lt; MeshPixelType, 3, MeshTrait&gt;&nbsp; MeshType;<BR>typedef 
MeshType::CellTraits&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CellTraits;<BR>typedef 
itk::CellInterface&lt; float, CellTraits &gt;&nbsp; 
CellInterfaceType;<BR>typedef itk::TetrahedronCell&lt; CellInterfaceType 
&gt;&nbsp; TetraCellType;<BR>typedef 
MeshType::PointType&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PointType;<BR>typedef 
MeshType::CellType&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CellType;<BR>typedef 
CellType::CellAutoPointer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
CellAutoPointer;<BR><BR><BR>&nbsp; //access points in cells in a mesh<BR>&nbsp; 
typedef MeshType::CellsContainer::Iterator CellIterator;<BR>&nbsp; CellIterator 
cellIterator = m_mesh-&gt;GetCells()-&gt;Begin();<BR>&nbsp; CellIterator end = 
m_mesh-&gt;GetCells()-&gt;End();<BR><BR>&nbsp;&nbsp; // Create a mesh with one 
tetrahedtron cell<BR>&nbsp; // in order to extract a bounding box for each 
cell<BR>&nbsp; MeshType::Pointer cellMesh = MeshType::New();<BR>&nbsp; 
cellMesh-&gt;SetCellsAllocationMethod(<BR>&nbsp; 
MeshType::CellsAllocatedDynamicallyCellByCell );<BR>&nbsp; CellAutoPointer 
oneCell;<BR>&nbsp; oneCell.TakeOwnership( new TetraCellType );<BR>&nbsp; 
CellAutoPointer testCell;<BR>&nbsp; testCell.TakeOwnership( new TetraCellType 
);<BR><BR>&nbsp; typedef itk::MeshSpatialObject&lt; MeshType &gt; 
MeshSpatialObjectType;<BR>&nbsp; 
MeshSpatialObjectType::Pointer&nbsp;&nbsp;&nbsp; 
cellMeshSpatialObject;<BR><BR>&nbsp; unsigned int numberOfCells = 
m_mesh-&gt;GetNumberOfCells();<BR><BR>&nbsp; for(unsigned int cellId = 0; cellId 
&lt; numberOfCells; cellId++)<BR>&nbsp; {<BR>&nbsp;std::cout &lt;&lt; std::endl 
&lt;&lt; "Cell ID = " &lt;&lt; cellId &lt;&lt; 
std::endl;<BR><BR>&nbsp;MeshType::CellType *cellptr1 = 
cellIterator.Value();<BR>&nbsp;TetraCellType *cellTetra1 = 
dynamic_cast&lt;TetraCellType *&gt;( cellptr1 
);<BR>&nbsp;TetraCellType::PointIdIterator pit = 
cellTetra1-&gt;PointIdsBegin();<BR>&nbsp;TetraCellType::PointIdIterator pitEnd = 
cellTetra1-&gt;PointIdsEnd();<BR><BR><BR>&nbsp;int id = 0;<BR>&nbsp;while(pit != 
pitEnd)<BR>&nbsp;{<BR>&nbsp;&nbsp; MeshType::PointType pp;<BR>&nbsp;&nbsp; 
m_mesh-&gt;GetPoint( *pit-1, &amp;pp );<BR>&nbsp;&nbsp; cout &lt;&lt; *pit 
&lt;&lt; "&nbsp; ";<BR>&nbsp;&nbsp; cout &lt;&lt; pp[0] &lt;&lt; " " &lt;&lt; 
pp[1] &lt;&lt; " " &lt;&lt; pp[2] &lt;&lt; endl;<BR><BR><BR>&nbsp;&nbsp; 
//create a mesh with one tetrahedron cell<BR>&nbsp;&nbsp; cellMesh-&gt;SetPoint( 
*pit-1, pp );<BR>&nbsp;&nbsp; oneCell-&gt;SetPointId( id, 
*pit);<BR><BR>&nbsp;&nbsp; pit++;<BR>&nbsp;&nbsp; 
id++;<BR>&nbsp;}<BR><BR>&nbsp;cellMesh-&gt;SetCell( 0, oneCell 
);<BR><BR>&nbsp;// print the point info in the mesh with one cell - 
tetrahedron<BR>&nbsp;cellMesh-&gt;GetCell( 0, testCell 
);<BR>&nbsp;TetraCellType::PointIdIterator pit2 = 
testCell-&gt;PointIdsBegin();<BR>&nbsp;TetraCellType::PointIdIterator pitEnd2 = 
testCell-&gt;PointIdsEnd();<BR><BR>&nbsp;cout &lt;&lt; "cell mesh------" 
&lt;&lt; endl;<BR>&nbsp;while(pit2 != pitEnd2)<BR>&nbsp;{<BR>&nbsp;&nbsp; 
MeshType::PointType pp1;<BR>&nbsp;&nbsp; cellMesh-&gt;GetPoint( *pit2-1, 
&amp;pp1 );<BR><BR>&nbsp;&nbsp; cout &lt;&lt; *pit2 &lt;&lt; "&nbsp; 
";<BR>&nbsp;&nbsp; cout &lt;&lt; pp1[0] &lt;&lt; " " &lt;&lt; pp1[1] &lt;&lt; " 
" &lt;&lt; pp1[2] &lt;&lt; endl;<BR><BR>&nbsp;&nbsp; 
pit2++;<BR>&nbsp;}<BR><BR>&nbsp;// extract a bounding box for the mesh object - 
one tetra cell<BR>&nbsp;cellMeshSpatialObject = 
MeshSpatialObjectType::New();<BR>&nbsp;cellMeshSpatialObject-&gt;SetMesh( 
cellMesh );<BR><BR>&nbsp;std::cout &lt;&lt; "Cell mesh bounds " 
&lt;&lt;<BR>&nbsp; cellMeshSpatialObject-&gt;GetBoundingBox()-&gt;GetBounds() 
&lt;&lt; 
std::endl;<BR><BR>&nbsp;//cellMeshSpatialObject-&gt;Print(std::cout);<BR><BR><BR>&nbsp;MeshSpatialObjectType::PointType 
myPhysicalPoint;<BR>&nbsp;myPhysicalPoint[0] = 50;<BR>&nbsp;myPhysicalPoint[1] = 
20;<BR>&nbsp;myPhysicalPoint[2] = 0;<BR><BR>&nbsp;cout &lt;&lt; "Is my physical 
point inside? : " &lt;&lt;<BR>&nbsp;&nbsp; cellMeshSpatialObject-&gt;IsInside( 
myPhysicalPoint ) &lt;&lt; endl;<BR>&nbsp; 
}<BR>----------------------------------------------------------------------------<BR>-----<BR><BR>--------------------------running<BR>result-----------------------------------------<BR>Cell 
ID = 0<BR>7&nbsp; 65.8246 39.8065 25<BR>1&nbsp; 40.8246 39.8065 25<BR>6&nbsp; 
65.8246 14.8065 0<BR>5&nbsp; 65.8246 14.8065 25<BR>cell mesh------<BR>7&nbsp; 
65.8246 39.8065 25<BR>1&nbsp; 40.8246 39.8065 25<BR>6&nbsp; 65.8246 14.8065 
0<BR>5&nbsp; 65.8246 14.8065 25<BR>Cell mesh 
bounds&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [40.8246, 65.8246, 14.8065, 
39.8065, 0, 25]<BR>Is my physical point [50, 20, 0] inside? : 0<BR><BR>Cell ID = 
1<BR>6&nbsp; 65.8246 14.8065 0<BR>3&nbsp; 40.8246 14.8065 25<BR>1&nbsp; 40.8246 
39.8065 25<BR>2&nbsp; 40.8246 39.8065 0<BR>cell mesh------<BR>6&nbsp; 65.8246 
14.8065 0<BR>3&nbsp; 40.8246 14.8065 25<BR>1&nbsp; 40.8246 39.8065 25<BR>2&nbsp; 
40.8246 39.8065 0<BR>Cell mesh bounds&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
[40.8246, 65.8246, 14.8065, 39.8065, 0, 25]<BR>Is my physical point [50, 20, 0] 
inside? : 0<BR><BR>Cell ID = 2<BR>7&nbsp; 65.8246 39.8065 25<BR>6&nbsp; 65.8246 
14.8065 0<BR>1&nbsp; 40.8246 39.8065 25<BR>2&nbsp; 40.8246 39.8065 0<BR>cell 
mesh------<BR>7&nbsp; 65.8246 39.8065 25<BR>6&nbsp; 65.8246 14.8065 0<BR>1&nbsp; 
40.8246 39.8065 25<BR>2&nbsp; 40.8246 39.8065 0<BR>Cell mesh 
bounds&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [40.8246, 65.8246, 14.8065, 
39.8065, 0, 25]<BR>Is my physical point [50, 20, 0] inside? : 0<BR><BR>Cell ID = 
3<BR>6&nbsp; 65.8246 14.8065 0<BR>2&nbsp; 40.8246 39.8065 0<BR>4&nbsp; 40.8246 
14.8065 0<BR>3&nbsp; 40.8246 14.8065 25<BR>cell mesh------<BR>6&nbsp; 65.8246 
14.8065 0<BR>2&nbsp; 40.8246 39.8065 0<BR>4&nbsp; 40.8246 14.8065 0<BR>3&nbsp; 
40.8246 14.8065 25<BR>Cell mesh bounds&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
[40.8246, 65.8246, 14.8065, 39.8065, 0, 25]<BR>Is my physical point [50, 20, 0] 
inside? : 0<BR><BR>Cell ID = 4<BR>6&nbsp; 65.8246 14.8065 0<BR>1&nbsp; 40.8246 
39.8065 25<BR>3&nbsp; 40.8246 14.8065 25<BR>5&nbsp; 65.8246 14.8065 25<BR>cell 
mesh------<BR>6&nbsp; 65.8246 14.8065 0<BR>1&nbsp; 40.8246 39.8065 25<BR>3&nbsp; 
40.8246 14.8065 25<BR>5&nbsp; 65.8246 14.8065 25<BR>Cell mesh 
bounds&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [40.8246, 65.8246, 14.8065, 
39.8065, 0, 25]<BR>Is my physical point [50, 20, 0] inside? : 1<BR><BR>Cell ID = 
5<BR>6&nbsp; 65.8246 14.8065 0<BR>2&nbsp; 40.8246 39.8065 0<BR>7&nbsp; 65.8246 
39.8065 25<BR>8&nbsp; 65.8246 39.8065 0<BR>cell mesh------<BR>6&nbsp; 65.8246 
14.8065 0<BR>2&nbsp; 40.8246 39.8065 0<BR>7&nbsp; 65.8246 39.8065 25<BR>8&nbsp; 
65.8246 39.8065 0<BR>Cell mesh bounds&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
[40.8246, 65.8246, 14.8065, 39.8065, 0, 25]<BR>Is my physical point [50, 20, 0] 
inside? : 
0<BR>----------------------------------------------------------------------------<BR>---------------------<BR><BR>Thanks 
a lot.<BR><BR>Kind regards,<BR><BR>Yan<BR><BR><BR>----- Original Message ----- 
<BR>From: "Julien Jomier" &lt;</FONT><A href="mailto:jjomier@cs.unc.edu"><FONT 
face="Times New Roman" size=3>jjomier@cs.unc.edu</FONT></A><FONT 
face="Times New Roman" size=3>&gt;<BR>To: &lt;</FONT><A 
href="mailto:y.yang@anglia.ac.uk"><FONT face="Times New Roman" 
size=3>y.yang@anglia.ac.uk</FONT></A><FONT face="Times New Roman" 
size=3>&gt;<BR>Sent: Friday, December 09, 2005 6:29 PM<BR>Subject: Re: 
IsInside() method in itk::MeshSpatialObject<BR><BR><BR>&gt; Hi 
Yan,<BR>&gt;<BR>&gt; Can you be more specific? and send me a sample code that 
shows the<BR>problem?<BR>&gt; I cannot reproduce the problem you are 
describing.<BR>&gt;<BR>&gt; Let me know,<BR>&gt;<BR>&gt; Julien<BR>&gt;<BR>&gt; 
Yan Yang wrote:<BR>&gt; &gt; Hi Julien,<BR>&gt; &gt;<BR>&gt; &gt; I am using 
ITK2.4.1. I am trying to query if a point is inside a<BR>&gt; &gt; tetrahedron. 
I created a Mesh Spatial Object with only one tetrahedron<BR>cell,<BR>&gt; &gt; 
and used IsInside() method to query if a point within the 
cell's<BR>bounding<BR>&gt; &gt; box is inside the tetrahedron. But I am afraid 
there might be something<BR>&gt; &gt; wrong with the return boolean value. I 
would be grateful if anyone could<BR>&gt; &gt; tell me if the IsInside() 
function can check a point inside the mesh.<BR>&gt; &gt;<BR>&gt; &gt; Kind 
regards,<BR>&gt; &gt;<BR>&gt; &gt; Yan<BR>&gt; &gt;<BR>&gt; &gt;<BR>&gt; 
&gt;</FONT><BR></FONT></DIV></BODY></HTML>