[Insight-users] CellInterface & PolygonCell & Region
Ofri Sadowsky
ofri@cs.jhu.edu
Wed, 27 Nov 2002 14:53:23 -0500
PolygonType * pcell = new PolygonType;
pcell->AdPointId( pp ); // many times...
_polygonCellPtr.TakeOwnership( pcell );
_mesh->SetCell(0, cellptr);
Just to see that I understand it right - I should not try to delete pcell
while getting rid of _mesh. _mesh takes ownership of pcell in the SetCell
operation.
Luis Ibanez wrote:
> Hi Ofri,
>
> -----------------------------
> 1)
>
> The AddPointId() only makes sense in a polygonal cell.
> That's the reason it is not defined at the level of
> the CellInterface. For memory efficiency reasons, every
> cell using a static array for storing point identifiers.
>
> The polygonal cell is the only cell with an arbitrary
> number of points henceforth it requires to manage dynamic
> memory.
>
> The easy way around this is to downcast the cell pointer.
> Cells return their type in the GetType() method. This method
> returns an enum with a geometry type. It is defined as:
>
> VERTEX_CELL=0,
> LINE_CELL,
> TRIANGLE_CELL,
> QUADRILATERAL_CELL,
> POLYGON_CELL,
> TETRAHEDRON_CELL,
> HEXAHEDRON_CELL,
> QUADRATIC_EDGE_CELL,
> QUADRATIC_TRIANGLE_CELL,
>
> You can then do the following:
> Since you are constructing here, you can do
>
> PolygonType * pcell = new PolygonType;
> pcell->AdPointId( pp ); // many times...
> _polygonCellPtr.TakeOwnership( pcell );
> _mesh->SetCell(0, cellptr);
>
> If you were visiting the cells and you don't
> know if all of them are polygonal cell you
> could also do:
>
> CellAutoPointer cellptr;
> while(.. some condition...)
> {
> mesh->GetCell( i, cellptr );
> if( cellptr->GetType() == POLYGON_CELL )
> {
> PolygonType * pcell =
> dynamic_cast< PolygonCell * >( cellptr.GetPointer() );
> pcell->AddPointId( pid ); // many times...
> }
> }
>
> You may want to look at the Mesh examples on
>
> Insigh/Examples/DataRepresentation/Mesh
>
> The example on MeshCellVisitor is work in progress...
>
> -----------------------------
>
> 2) There are plans to extend the functionality of the Mesh.
>
> Please note that the Mesh has been less excercised than
> the ITK image. It will still require some work to take it
> to the same level of maturity.
>
> All suggestions on how to improve this class are welcome.
>
> ========================================================
>
> Thanks
>
> Luis
>
> =================================
>
> Ofri Sadowsky wrote:
> > Hi,
> >
> >
> > 1
> > ---
> > I look at the documentation for itk::CellInterface and itk::PolygonCell.
> >
> > My hypothesis was, that these should have compatible interfaces, as
> > PolygonCell is a case of CellInterface. But they seem to be
> > incompatible: PolygonCell declares the method AddPointId() and
> > CellInterface does not.
> >
> > If I want to insert a PolygonCell into a Mesh, I do the following:
> >
> > typedef itk::Mesh<PixelType, VDimension> MeshType;
> > typedef MeshType::CellType CellType;
> > typedef CellType::CellAutoPointer CellAutoPointer;
> > typedef itk::PolygonCell<CellType> PolygonType;
> >
> > MeshType::Pointer _mesh;
> > CellAutoPointer _polygonCellPtr;
> >
> > _mesh = MeshType::New();
> > _polygonCellPtr.TakeOwnership(new PolygonType); /* (1) */
> > _mesh->SetCell(0, cellptr);
> >
> >
> > But I could not use AddPointId() on my _polygonCellPtr, because it only
> > allows access to the methods of CellInterface.
> > I tried to make my CellAutoPointer a itk::AutoPointer<PolygonCell>, but
> > then I fell into type incompatibility in (1).
> >
> > How do I get out of this?
> >
> >
> >
> > 2
> > ---
> > the classes ImageRegion and ImageIORegion declare a public method
> > IsInside() but MeshRegion does not seem to have one. I would question
> > the usability of a Region object without a function of this sort.
> > Furthermore, MeshRegion hardly declares any public methods. Are there
> > plans to extend MeshRegion, or should I avoid using it?
> >
> >
> >
> > Thanks,
> >
> > Ofri.
> >
> > _______________________________________________
> > Insight-users mailing list
> > Insight-users@public.kitware.com
> > http://public.kitware.com/mailman/listinfo/insight-users
> >
> >
>
> _______________________________________________
> Insight-users mailing list
> Insight-users@public.kitware.com
> http://public.kitware.com/mailman/listinfo/insight-users