<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Exchange Server">
<!-- converted from text --><style><!-- .EmailQuote { margin-left: 1pt; padding-left: 4pt; border-left: #800000 2px solid; } --></style>
</head>
<body>
<meta content="text/html; charset=UTF-8">
<style type="text/css" style="">
<!--
p
        {margin-top:0;
        margin-bottom:0}
-->
</style>
<div dir="ltr">
<div id="x_divtagdefaultwrapper" style="font-size:12pt; color:#000000; background-color:#FFFFFF; font-family:Calibri,Arial,Helvetica,sans-serif">
<p>Hi Matt,</p>
<p><br>
</p>
<p>It did helped a lot! </p>
<p><br>
</p>
<p>I modified the example to display what's been written to file in terms of what I need but I'm struggling to access the edges of a particular face. For now all I can do is to iterate over the points and cell's ids. There are some examples to write data to
 cells but I either don't find it that useful for my case or completely understood it. </p>
<p><br>
</p>
<p>Please find my code below:</p>
<p><br>
</p>
<p><br>
</p>
<p></p>
<div>
<div>#include "itkQuadEdgeMesh.h"</div>
<div>#include "itkMeshFileWriter.h"</div>
<div>#include "itkMeshFileReader.h"</div>
<div><br>
</div>
<div>int main(int argc, char* argv[])</div>
<div>{</div>
<div>    if (argc != 2)</div>
<div>    {</div>
<div>        std::cerr << "Usage: " << std::endl;</div>
<div>        std::cerr << argv[0];</div>
<div>        std::cerr << " <OutputFileName>";</div>
<div>        std::cerr << std::endl;</div>
<div>        return EXIT_FAILURE;</div>
<div>    }</div>
<div><br>
</div>
<div>    const char * outputFileName = argv[1];</div>
<div><br>
</div>
<div>    //</div>
<div>    // Definitions</div>
<div>    //</div>
<div>    const unsigned int Dimension = 3;</div>
<div><br>
</div>
<div>    typedef double                                    CoordType;</div>
<div>    typedef itk::QuadEdgeMesh< CoordType, Dimension > MeshType;</div>
<div><br>
</div>
<div>    MeshType::Pointer mesh = MeshType::New();</div>
<div><br>
</div>
<div>    typedef MeshType::PointsContainer         PointsContainer;</div>
<div>    typedef MeshType::PointsContainerPointer  PointsContainerPointer;</div>
<div><br>
</div>
<div>    //</div>
<div>    // Create points</div>
<div>    //</div>
<div>    PointsContainerPointer points = PointsContainer::New();</div>
<div>    points->Reserve(9);</div>
<div><br>
</div>
<div>    typedef MeshType::PointType               PointType;</div>
<div>    PointType p;</div>
<div>    p[2] = 0.;</div>
<div><br>
</div>
<div>    typedef MeshType::PointIdentifier         PointIdentifier;</div>
<div>    PointIdentifier k = 0;</div>
<div><br>
</div>
<div>    for (int i = 0; i < 3; i++)</div>
<div>    {</div>
<div>        p[0] = static_cast< CoordType >(i);</div>
<div><br>
</div>
<div>        for (int j = 0; j < 3; j++)</div>
<div>        {</div>
<div>            p[1] = static_cast< CoordType >(j);</div>
<div>            points->SetElement(k, p);</div>
<div>            k++;</div>
<div>        }</div>
<div>    }</div>
<div><br>
</div>
<div>    mesh->SetPoints(points);</div>
<div><br>
</div>
<div>    //</div>
<div>    // Create faces</div>
<div>    //</div>
<div>    k = 0;</div>
<div><br>
</div>
<div>    for (int i = 0; i < 2; i++)</div>
<div>    {</div>
<div>        for (int j = 0; j < 2; j++)</div>
<div>        {</div>
<div>            mesh->AddFaceTriangle(k, k + 1, k + 4);</div>
<div>            mesh->AddFaceTriangle(k, k + 4, k + 3);</div>
<div>            k++;</div>
<div>        }</div>
<div>        k++;</div>
<div>    }</div>
<div>    </div>
<div>    //</div>
<div>    // Write mesh to file</div>
<div>    //</div>
<div>    typedef itk::MeshFileWriter< MeshType > WriterType;</div>
<div>    WriterType::Pointer writer = WriterType::New();</div>
<div>    writer->SetFileName(outputFileName);</div>
<div>    writer->SetInput(mesh);</div>
<div>    try</div>
<div>    {</div>
<div>        writer->Update();</div>
<div>    }</div>
<div>    catch (itk::ExceptionObject & error)</div>
<div>    {</div>
<div>        std::cerr << "Error: " << error << std::endl;</div>
<div>        return EXIT_FAILURE;</div>
<div>    }</div>
<div><br>
</div>
<div>    //</div>
<div>    // Read mesh to file</div>
<div>    //</div>
<div>    typedef itk::MeshFileReader< MeshType > ReaderType;</div>
<div>    ReaderType::Pointer reader = ReaderType::New();</div>
<div>    reader->SetFileName(outputFileName);</div>
<div>    try</div>
<div>    {</div>
<div>        reader->Update();</div>
<div>    }</div>
<div>    catch (itk::ExceptionObject & error)</div>
<div>    {</div>
<div>        std::cerr << "Error: " << error << std::endl;</div>
<div>        return EXIT_FAILURE;</div>
<div>    }</div>
<div><br>
</div>
<div>    mesh = reader->GetOutput();</div>
<div><br>
</div>
<div>    //</div>
<div>    // Print data</div>
<div>    //</div>
<div>    typedef MeshType::PointsContainer::ConstIterator PointIterator;</div>
<div>    PointIterator pointIterator = mesh->GetPoints()->Begin();</div>
<div>    PointIterator pointEnd = mesh->GetPoints()->End();</div>
<div><br>
</div>
<div>    MeshType::PointIdentifier pid;</div>
<div>    </div>
<div>    while (pointIterator != pointEnd)</div>
<div>    {</div>
<div>        p = pointIterator.Value();</div>
<div>        pid = pointIterator.Index();</div>
<div>        </div>
<div>        std::cout << pid << ": "</div>
<div>            << p[0] << " "</div>
<div>            << p[1] << " "</div>
<div>            << p[2] << std::endl;</div>
<div><br>
</div>
<div>        ++pointIterator;</div>
<div>    }</div>
<div>    </div>
<div>    //</div>
<div>    // Print edges</div>
<div>    //</div>
<div>    typedef MeshType::CellsContainer::ConstIterator CellIterator;</div>
<div>    CellIterator cellIterator = mesh->GetCells()->Begin();</div>
<div>    CellIterator cellEnd = mesh->GetCells()->End();</div>
<div>    </div>
<div>    MeshType::CellType *c;</div>
<div>    MeshType::CellIdentifier cid;</div>
<div><br>
</div>
<div>    while (cellIterator != cellEnd)</div>
<div>    {</div>
<div>        c = cellIterator.Value();</div>
<div>        cid = cellIterator.Index();</div>
<div><br>
</div>
<div>        std::cout << cid << ": "</div>
<div>            // The face's edge list?</div>
<div>            << std::endl;</div>
<div><br>
</div>
<div>        ++cellIterator;</div>
<div>    }</div>
<div>    </div>
<div>    return EXIT_SUCCESS;</div>
<div>}</div>
</div>
<p></p>
<div></div>
<div><br>
</div>
<p></p>
<p><br>
</p>
<p>Thanks again!</p>
<p><br>
</p>
<p>Rodolfo</p>
</div>
<hr tabindex="-1" style="display:inline-block; width:98%">
<div id="x_divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" color="#000000" style="font-size:11pt"><b>From:</b> Matt McCormick <matt.mccormick@kitware.com><br>
<b>Sent:</b> 07 September 2016 21:30:18<br>
<b>To:</b> Oliveira, Rodolfo<br>
<b>Cc:</b> Community@itk.org<br>
<b>Subject:</b> Re: [ITK] Get the list of Points, Edges and Cells of a Mesh</font>
<div> </div>
</div>
</div>
<font size="2"><span style="font-size:10pt;">
<div class="PlainText">Hi Rodolfo,<br>
<br>
Here is an example of how to manually create a mesh:<br>
<br>
  <a href="https://itk.org/ITKExamples/src/Core/QuadEdgeMesh/CreateTriangularQuadEdgeMesh/Documentation.html">
https://itk.org/ITKExamples/src/Core/QuadEdgeMesh/CreateTriangularQuadEdgeMesh/Documentation.html</a><br>
<br>
HTH,<br>
Matt<br>
<br>
On Wed, Sep 7, 2016 at 12:36 PM, Oliveira, Rodolfo<br>
<r.oliveira16@imperial.ac.uk> wrote:<br>
> Hi,<br>
><br>
><br>
> I need to get the list of points, edges and cells of an itk mesh to file. I<br>
> have to write the points, the edges as a reference of two points' indexes<br>
> and the faces as three edges' indexes.<br>
><br>
><br>
> So far I only managed to get the points from a mesh, using a point iterator<br>
> and writing its value and indexes. I still haven't figure it out how to get<br>
> the linking indexes of the edges and faces.<br>
><br>
><br>
> For illustration purposes, say I have a mesh containing a single triangle,<br>
> defined this:<br>
><br>
><br>
> 0,1 - 2 - 1,1<br>
><br>
>  |       /<br>
><br>
>  |      /<br>
><br>
>  |  1  /<br>
><br>
>  1    3<br>
><br>
>  |   /<br>
><br>
>  |  /<br>
><br>
>  | /<br>
><br>
> 0,0<br>
><br>
><br>
> The structure would be like this:<br>
><br>
> Points:<br>
> 1: 0,0<br>
> 2: 0,1<br>
> 3: 1,1<br>
><br>
> Edges:<br>
> 1: 1 2 (Point 1 to Point 2)<br>
> 2: 2 3<br>
> 3: 3 1<br>
><br>
> Faces:<br>
> 1: 1 2 3 (Edge 1, to Edge 2 and Edge 3)<br>
><br>
> This is a rather simplistic example, but there is no difference for the case<br>
> of more than one triangle. But they might share some of the same indexes<br>
> when neighbours.<br>
><br>
> Any help would be much appreciated!<br>
><br>
><br>
> Thanks,<br>
><br>
><br>
> Rodolfo<br>
><br>
><br>
> _______________________________________________<br>
> Community mailing list<br>
> Community@itk.org<br>
> <a href="http://public.kitware.com/mailman/listinfo/community">http://public.kitware.com/mailman/listinfo/community</a><br>
><br>
</div>
</span></font>
</body>
</html>