Directional icon indicating copy to clipboard operation
Directional copied to clipboard

Bug: Inconsistency of innerEdges(init in dual_cycles.h) and isBoundaryEdge(init in trimesh.h)

Open zxhcho opened this issue 4 months ago • 2 comments

For mesh with boundary, we only define angles on inner/non-boundary edges when calling functions in index_prescription.h , so we need to map all inner edges into a new array.

in dual_cycles.h, line 187, you write:

    for (int i=0;i<EV.rows();i++)
      if (!((isBoundary(EV(i,0)))&&(isBoundary(EV(i,1)))))
        innerEdgesList.push_back(i);

in TriMesh.h, line 81, you write:

            std::vector<int> innerEdgesList, boundEdgesList;
            isBoundaryVertex=Eigen::VectorXi::Zero(V.size());
            isBoundaryEdge=Eigen::VectorXi::Zero(EV.size());
            for (int i = 0; i < EF.rows(); i++) {
                if ((EF(i, 1) == -1) || (EF(i, 0) == -1)) {
                    boundEdgesList.push_back(i);
                    isBoundaryEdge(i)=1;
                    isBoundaryVertex(EV(i,0))=1;
                    isBoundaryVertex(EV(i,1))=1;
                }else
                    innerEdgesList.push_back(i);

            }

But in such mesh, these two definitions are inconsistent, an edge connecting 2 boundary vertices is not a boundary edge, more reasonable one is in TriMesh.h image

zxhcho avatar Oct 09 '24 07:10 zxhcho