// Remove the original submesh region and merge in the remeshed version. // You can call this multiple times as the base-triangle-set is updated. // // By default, we allow the submesh to be modified to prevent creation of // non-manifold edges. You can disable this, however then some of the submesh // triangles may be discarded. // // Returns false if there were errors in insertion, ie if some triangles // failed to insert. Does not revert changes that were successful. public bool BackPropropagate(bool bAllowSubmeshRepairs = true) { if (bAllowSubmeshRepairs) { RepairPossibleNonManifoldEdges(); } // remove existing submesh triangles MeshEditor editor = new MeshEditor(BaseMesh); editor.RemoveTriangles(cur_base_tris, true); // insert new submesh int[] new_tris = new int[Region.SubMesh.TriangleCount]; IndexMap mapV; bool bOK = editor.ReinsertSubmesh(Region, ref new_tris, out mapV); cur_base_tris = new_tris; return(bOK); }
// Remove the original submesh region and merge in the remeshed version. // You can call this multiple times as the base-triangle-set is updated. // // By default, we allow the submesh to be modified to prevent creation of // non-manifold edges. You can disable this, however then some of the submesh // triangles may be discarded. // // Returns false if there were errors in insertion, ie if some triangles // failed to insert. Does not revert changes that were successful. public bool BackPropropagate(bool bAllowSubmeshRepairs = true) { if (bAllowSubmeshRepairs) { RepairPossibleNonManifoldEdges(); } // remove existing submesh triangles var editor = new MeshEditor(BaseMesh); editor.RemoveTriangles(cur_base_tris, true); // insert new submesh int[] new_tris = new int[Region.SubMesh.TriangleCount]; ReinsertSubToBaseMapV = null; bool bOK = editor.ReinsertSubmesh(Region, ref new_tris, out ReinsertSubToBaseMapV, ReinsertDuplicateTriBehavior); // reconstruct this...hacky? int NT = Region.SubMesh.MaxTriangleID; ReinsertSubToBaseMapT = new IndexMap(false, NT); int nti = 0; for (int ti = 0; ti < NT; ++ti) { if (Region.SubMesh.IsTriangle(ti) == false) { continue; } ReinsertSubToBaseMapT[ti] = new_tris[nti++]; } // assert that new triangles are all valid (goes wrong sometimes??) Debug.Assert(IndexUtil.IndicesCheck(new_tris, BaseMesh.IsTriangle)); cur_base_tris = new_tris; return(bOK); }
// Remove the original submesh region and merge in the remeshed version. // You can call this multiple times as the base-triangle-set is updated. // // By default, we allow the submesh to be modified to prevent creation of // non-manifold edges. You can disable this, however then some of the submesh // triangles may be discarded. // // Returns false if there were errors in insertion, ie if some triangles // failed to insert. Does not revert changes that were successful. public bool BackPropropagate(bool bAllowSubmeshRepairs = true) { if (bAllowSubmeshRepairs) { RepairPossibleNonManifoldEdges(); } // remove existing submesh triangles MeshEditor editor = new MeshEditor(BaseMesh); editor.RemoveTriangles(cur_base_tris, true); // insert new submesh int[] new_tris = new int[Region.SubMesh.TriangleCount]; ReinsertSubToBaseMapV = null; bool bOK = editor.ReinsertSubmesh(Region, ref new_tris, out ReinsertSubToBaseMapV, ReinsertDuplicateTriBehavior); // assert that new triangles are all valid (goes wrong sometimes??) Debug.Assert(IndexUtil.IndicesCheck(new_tris, BaseMesh.IsTriangle)); cur_base_tris = new_tris; return(bOK); }