Skip to content

GitLab

  • Projects
  • Groups
  • Snippets
  • Help
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in
OpenVolumeMesh
OpenVolumeMesh
  • Project overview
    • Project overview
    • Details
    • Activity
    • Releases
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 7
    • Issues 7
    • List
    • Boards
    • Labels
    • Service Desk
    • Milestones
  • Merge Requests 1
    • Merge Requests 1
  • CI / CD
    • CI / CD
    • Pipelines
    • Jobs
    • Schedules
  • Operations
    • Operations
    • Incidents
    • Environments
  • Analytics
    • Analytics
    • CI / CD
    • Repository
    • Value Stream
  • Members
    • Members
  • Collapse sidebar
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
  • OpenVolumeMesh
  • OpenVolumeMeshOpenVolumeMesh
  • Issues
  • #19

Closed
Open
Opened Aug 03, 2020 by Valentin Nigolian@vnigolianDeveloper

"collect_garbage()" crashes after call to "collapse_edge()"

I'm running experiments with collapse_edge() and I found "collect_garbage" to crash after calling the former.

Below's a minimal example to reproduce it.

It ran with Xcode.

int main(int _argc, char** _argv) {
    
    TetrahedralMesh mesh;
    double two_pi_5 = 2 * M_PI / 5.;
    //pentagon shape
    Point p0 = {cos(0 * two_pi_5) , sin(0 * two_pi_5), 0};
    Point p1 = {cos(1 * two_pi_5) , sin(1 * two_pi_5), 0};
    Point p2 = {cos(2 * two_pi_5) , sin(2 * two_pi_5), 0};
    Point p3 = {cos(3 * two_pi_5) , sin(3 * two_pi_5), 0};
    Point p4 = {cos(4 * two_pi_5) , sin(4 * two_pi_5), 0};

    Point p5 = {0,0,1};
    Point p6 = {0,0,-1};
    
    Point p7 = {1,0,1};

    VertexHandle v0 = mesh.add_vertex(p0);
    VertexHandle v1 = mesh.add_vertex(p1);
    VertexHandle v2 = mesh.add_vertex(p2);
    VertexHandle v3 = mesh.add_vertex(p3);
    VertexHandle v4 = mesh.add_vertex(p4);
    VertexHandle v5 = mesh.add_vertex(p5);
    VertexHandle v6 = mesh.add_vertex(p6);
    VertexHandle v7 = mesh.add_vertex(p7);


    //'top faces
    FaceHandle f0 = mesh.add_face({v0, v1, v5});
    FaceHandle f1 = mesh.add_face({v1, v2, v5});
    FaceHandle f2 = mesh.add_face({v2, v3, v5});
    FaceHandle f3 = mesh.add_face({v3, v4, v5});
    FaceHandle f4 = mesh.add_face({v4, v0, v5});

    //bottom faces
    FaceHandle f5 = mesh.add_face({v0, v1, v6});
    FaceHandle f6 = mesh.add_face({v1, v2, v6});
    FaceHandle f7 = mesh.add_face({v2, v3, v6});
    FaceHandle f8 = mesh.add_face({v3, v4, v6});
    FaceHandle f9 = mesh.add_face({v4, v0, v6});

    //interior faces
    FaceHandle f10 = mesh.add_face({v0, v5, v6});
    FaceHandle f11 = mesh.add_face({v1, v5, v6});
    FaceHandle f12 = mesh.add_face({v2, v5, v6});
    FaceHandle f13 = mesh.add_face({v3, v5, v6});
    FaceHandle f14 = mesh.add_face({v4, v5, v6});
    
    //additional faces
    FaceHandle f15 = mesh.add_face({v0, v1, v7});
    FaceHandle f16 = mesh.add_face({v1, v5, v7});
    FaceHandle f17 = mesh.add_face({v0, v5, v7});
    FaceHandle f18 = mesh.add_face({v0, v4, v7});
    FaceHandle f19 = mesh.add_face({v4, v5, v7});
    

    //and cells
    mesh.add_cell({mesh.halfface_handle(f0, 0),
                   mesh.halfface_handle(f5, 1),
                   mesh.halfface_handle(f10,0),
                   mesh.halfface_handle(f11,1)});

    mesh.add_cell({mesh.halfface_handle(f1, 0),
                   mesh.halfface_handle(f6, 1),
                   mesh.halfface_handle(f11,0),
                   mesh.halfface_handle(f12,1)});

    mesh.add_cell({mesh.halfface_handle(f2, 0),
                   mesh.halfface_handle(f7, 1),
                   mesh.halfface_handle(f12,0),
                   mesh.halfface_handle(f13,1)});

    mesh.add_cell({mesh.halfface_handle(f3, 0),
                   mesh.halfface_handle(f8, 1),
                   mesh.halfface_handle(f13,0),
                   mesh.halfface_handle(f14,1)});

    mesh.add_cell({mesh.halfface_handle(f4, 0),
                   mesh.halfface_handle(f9, 1),
                   mesh.halfface_handle(f14,0),
                   mesh.halfface_handle(f10,1)});
    
    
    mesh.add_cell({mesh.halfface_handle(f0, 1),
                   mesh.halfface_handle(f15,1),
                   mesh.halfface_handle(f16,1),
                   mesh.halfface_handle(f17,1)});
    
    mesh.add_cell({mesh.halfface_handle(f4, 1),
                   mesh.halfface_handle(f17,1),
                   mesh.halfface_handle(f18,1),
                   mesh.halfface_handle(f19,1)});
    
        
    mesh.collapse_edge(HalfEdgeHandle(23));
    //ok up to this point
    
    //crashes there
    mesh.collect_garbage();

`

Assignee
Assign to
None
Milestone
None
Assign milestone
Time tracking
None
Due date
None
Reference: OpenVolumeMesh/OpenVolumeMesh#19