Loading python/build_cut_table.py +283 −47 Original line number Diff line number Diff line Loading @@ -58,23 +58,23 @@ class CutTable(): self.create_two_vertex_on_plane_cut(5) # [0, 1, 3, 5] self.create_three_edges_cut([1, 3, 5]) self.create_three_edges_cut([0, 3, 5]) self.create_three_edges_cut([0, 1, 5]) self.create_three_edges_cut([0, 1, 3]) self.create_three_edges_cut1([1, 3, 5]) self.create_three_edges_cut2([0, 3, 5]) self.create_three_edges_cut2([0, 1, 5]) self.create_three_edges_cut1([0, 1, 3]) # [1, 2, 3, 4] self.create_three_edges_cut([2, 3, 4]) self.create_three_edges_cut([1, 3, 4]) self.create_three_edges_cut([1, 2, 4]) self.create_three_edges_cut([1, 2, 3]) self.create_three_edges_cut1([2, 3, 4]) self.create_three_edges_cut1([1, 3, 4]) self.create_three_edges_cut1([1, 2, 4]) self.create_three_edges_cut1([1, 2, 3]) # [0, 2, 4, 5] self.create_three_edges_cut([2, 4, 5]) self.create_three_edges_cut([0, 4, 5]) self.create_three_edges_cut([0, 2, 5]) self.create_three_edges_cut([0, 2, 4]) self.create_three_edges_cut2([2, 4, 5]) self.create_three_edges_cut2([0, 4, 5]) self.create_three_edges_cut2([0, 2, 5]) self.create_three_edges_cut2([0, 2, 4]) Loading Loading @@ -762,12 +762,11 @@ class CutTable(): self.add_tet(index, conf, [ee2, tip5, 4+index5, 7], pts, [4, 5, 6], edges) def create_three_edges_cut(self, edges): def create_three_edges_cut1(self, edges): index = self.index_for_edges(edges) assert(self.table[index] is None) # print(flags, self.int_to_flags(index)) e0 = self.edges[edges[0], :] e1 = self.edges[edges[1], :] e2 = self.edges[edges[2], :] Loading Loading @@ -820,15 +819,189 @@ class CutTable(): for i in range(len(tmp)): if not tmp[i]: if len(tri4) <= 0: tri4 = self.tet[i] tri4 = self.tet[i].copy() assert(len(tri5) <= 0) elif len(tri5) <= 0: assert(len(tri4) > 0) assert(len(tri5) <= 0) tri5 = self.tet[i] tri5 = self.tet[i].copy() p0 = (self.vertices[e0[0], :]+self.vertices[e0[1], :]) / 2 p1 = (self.vertices[e1[0], :]+self.vertices[e1[1], :]) / 2 p2 = (self.vertices[e2[0], :]+self.vertices[e2[1], :]) / 2 self.new_points[index] = [] q00 = list(set(quad0).intersection(tri4).intersection(tri5))[0] q10 = list(set(quad1).intersection(tri4).intersection(tri5))[0] # fix me tip tip = list(set(tri5).intersection(tri4)) tip = tip[1] tri44 = list(tri4) tri55 = list(tri5) tri44.remove(tip) tri55.remove(tip) v1 = -1 v2 = -1 v3 = -1 if tip in e0 and (tri44[0] in e0 or tri44[1] in e0): v1 = 4 if tri44[0] in e0: v2 = tri44[0] v3 = tri44[1] else: v2 = tri44[1] v3 = tri44[0] elif tip in e1 and (tri44[0] in e1 or tri44[1] in e1): v1 = 5 if tri44[0] in e1: v2 = tri44[0] v3 = tri44[1] else: v2 = tri44[1] v3 = tri44[0] elif tip in e2 and (tri44[0] in e2 or tri44[1] in e2): v1 = 6 if tri44[0] in e2: v2 = tri44[0] v3 = tri44[1] else: v2 = tri44[1] v3 = tri44[0] else: assert(False) v5 = -1 if v3 == tri55[0]: v5 = tri55[1] elif v3 == tri55[1]: v5 = tri55[0] v4 = -1 if v3 in e0 and v5 in e0: v4 = 4 elif v3 in e1 and v5 in e1: v4 = 5 elif v3 in e2 and v5 in e2: v4 = 6 else: assert(False) v6 = -1 if v1 + v4 == 9: v6 = 6 elif v1 + v4 == 10: v6 = 5 elif v1 + v4 == 11: v6 = 4 else: assert(False) self.add_tet(index, 0, [v3, v1, v6, v2], [p0, p1, p2], [4, 5, 6], edges) self.add_tet(index, 0, [v3, tip, v1, v6], [p0, p1, p2], [4, 5, 6], edges) self.add_tet(index, 0, [v6, tip, v4, v5], [p0, p1, p2], [4, 5, 6], edges) self.add_tet(index, 0, [v4, tip, v3, v6], [p0, p1, p2], [4, 5, 6], edges) self.add_edge(index, [[tip, v6], [v6, v3]]) self.add_tet(index, 1, [v3, v1, v6, v2], [p0, p1, p2], [4, 5, 6], edges) self.add_tet(index, 1, [v1, v6, v5, v4], [p0, p1, p2], [4, 5, 6], edges) self.add_tet(index, 1, [v1, v5, tip, v4], [p0, p1, p2], [4, 5, 6], edges) self.add_tet(index, 1, [v3, v1, v6, v4], [p0, p1, p2], [4, 5, 6], edges) self.add_tet(index, 1, [tip, v3, v1, v4], [p0, p1, p2], [4, 5, 6], edges) self.add_edge(index, [[v1, v5], [v6, v3]]) self.add_tet(index, 2, [v1, v6, v5, v4], [p0, p1, p2], [4, 5, 6], edges) self.add_tet(index, 2, [v1, v5, tip, v4], [p0, p1, p2], [4, 5, 6], edges) self.add_tet(index, 2, [v1, v6, v2, v4], [p0, p1, p2], [4, 5, 6], edges) self.add_tet(index, 2, [v2, v3, v4, tip], [p0, p1, p2], [4, 5, 6], edges) self.add_edge(index, [[v1, v5], [v4, v2]]) self.add_tet(index, 3, [v1, v6, v2, v4], [p0, p1, p2], [4, 5, 6], edges) self.add_tet(index, 3, [v2, v3, v4, tip], [p0, p1, p2], [4, 5, 6], edges) self.add_tet(index, 3, [v1, v6, tip, v4], [p0, p1, p2], [4, 5, 6], edges) self.add_tet(index, 3, [tip, v6, v4, v5], [p0, p1, p2], [4, 5, 6], edges) self.add_edge(index, [[tip, v6], [v4, v2]]) def create_three_edges_cut2(self, edges): index = self.index_for_edges(edges) assert(self.table[index] is None) e0 = self.edges[edges[0], :] e1 = self.edges[edges[1], :] e2 = self.edges[edges[2], :] quad0 = [] tri0 = [] quad1 = [] tri1 = [] tri4 = [] tri5 = [] face0 = -1 face1 = -1 quad, tri, face = self.get_quad(e0, e1, 4, 5) if len(quad) > 0: quad0 = quad tri0 = tri face0 = face quad, tri, face = self.get_quad(e0, e2, 4, 6) if len(quad) > 0: if len(quad0) > 0: assert(len(quad1) <= 0) quad1 = quad tri1 = tri face1 = face else: quad0 = quad tri0 = tri face0 = face quad, tri, face = self.get_quad(e1, e2, 5, 6) if len(quad) > 0: assert(len(quad0) > 0) assert(len(quad1) <= 0) quad1 = quad tri1 = tri face1 = face tmp = [False, False, False, False] tmp[face0] = True tmp[face1] = True # print(tri4, tri5) # print(ee1, ee2, tip4, tip5) for i in range(len(tmp)): if not tmp[i]: if len(tri4) <= 0: tri4 = self.tet[i].copy() assert(len(tri5) <= 0) elif len(tri5) <= 0: assert(len(tri4) > 0) assert(len(tri5) <= 0) tri5 = self.tet[i].copy() p0 = (self.vertices[e0[0], :]+self.vertices[e0[1], :]) / 2 p1 = (self.vertices[e1[0], :]+self.vertices[e1[1], :]) / 2 Loading @@ -836,65 +1009,121 @@ class CutTable(): self.new_points[index] = [] new_p = (self.vertices[0,:]+self.vertices[1,:]+self.vertices[2,:]+self.vertices[3,:])/4 self.new_points[index].append(new_p) q00 = list(set(quad0).intersection(tri4).intersection(tri5))[0] q10 = list(set(quad1).intersection(tri4).intersection(tri5))[0] # fix me tip tip = list(set(tri5).intersection(tri4)) tip = tip[0] tri44 = list(tri4) tri55 = list(tri5) tri44.remove(tip) tri55.remove(tip) self.add_simple(index, 0, edges, tri0, tri1, tri4, tri5, [p0, p1, p2, new_p]) v1 = -1 v2 = -1 v3 = -1 if tip in e0 and (tri44[0] in e0 or tri44[1] in e0): v1 = 4 if tri44[0] in e0: v2 = tri44[0] v3 = tri44[1] else: v2 = tri44[1] v3 = tri44[0] elif tip in e1 and (tri44[0] in e1 or tri44[1] in e1): v1 = 5 if tri44[0] in e1: v2 = tri44[0] v3 = tri44[1] else: v2 = tri44[1] v3 = tri44[0] elif tip in e2 and (tri44[0] in e2 or tri44[1] in e2): v1 = 6 if tri44[0] in e2: v2 = tri44[0] v3 = tri44[1] else: v2 = tri44[1] v3 = tri44[0] else: assert(False) self.add_tet(index, 0, [quad0[0], quad0[1], quad0[2], 7], [p0, p1, p2, new_p], [4, 5, 6], edges) self.add_tet(index, 0, [quad0[0], quad0[2], quad0[3], 7], [p0, p1, p2, new_p], [4, 5, 6], edges) v5 = -1 if v3 == tri55[0]: v5 = tri55[1] elif v3 == tri55[1]: v5 = tri55[0] self.add_tet(index, 0, [quad1[0], quad1[1], quad1[2], 7], [p0, p1, p2, new_p], [4, 5, 6], edges) self.add_tet(index, 0, [quad1[0], quad1[2], quad1[3], 7], [p0, p1, p2, new_p], [4, 5, 6], edges) self.add_edge(index, [[quad0[0], quad0[2]], [quad1[0], quad1[2]]]) v4 = -1 if v3 in e0 and v5 in e0: v4 = 4 elif v3 in e1 and v5 in e1: v4 = 5 elif v3 in e2 and v5 in e2: v4 = 6 else: assert(False) v6 = -1 self.add_simple(index, 1, edges, tri0, tri1, tri4, tri5, [p0, p1, p2, new_p]) if v1 + v4 == 9: v6 = 6 elif v1 + v4 == 10: v6 = 5 elif v1 + v4 == 11: v6 = 4 else: assert(False) self.add_tet(index, 1, [quad0[0], quad0[1], quad0[3], 7], [p0, p1, p2, new_p], [4, 5, 6], edges) self.add_tet(index, 1, [quad0[1], quad0[2], quad0[3], 7], [p0, p1, p2, new_p], [4, 5, 6], edges) self.add_tet(index, 0, [v3, v1, v6, v2], [p0, p1, p2], [4, 5, 6], edges) self.add_tet(index, 0, [v3, tip, v1, v6], [p0, p1, p2], [4, 5, 6], edges) self.add_tet(index, 0, [v6, tip, v4, v5], [p0, p1, p2], [4, 5, 6], edges) self.add_tet(index, 0, [v4, tip, v3, v6], [p0, p1, p2], [4, 5, 6], edges) self.add_tet(index, 1, [quad1[0], quad1[1], quad1[2], 7], [p0, p1, p2, new_p], [4, 5, 6], edges) self.add_tet(index, 1, [quad1[0], quad1[2], quad1[3], 7], [p0, p1, p2, new_p], [4, 5, 6], edges) self.add_edge(index, [[tip, v6], [v6, v3]]) self.add_edge(index, [[quad0[1], quad0[3]], [quad1[0], quad1[2]]]) self.add_tet(index, 1, [v3, v1, v6, v2], [p0, p1, p2], [4, 5, 6], edges) self.add_tet(index, 1, [v1, v6, v5, v4], [p0, p1, p2], [4, 5, 6], edges) self.add_tet(index, 1, [v1, v5, tip, v4], [p0, p1, p2], [4, 5, 6], edges) self.add_tet(index, 1, [v3, v1, v6, v4], [p0, p1, p2], [4, 5, 6], edges) self.add_tet(index, 1, [tip, v3, v1, v4], [p0, p1, p2], [4, 5, 6], edges) self.add_simple(index, 2, edges, tri0, tri1, tri4, tri5, [p0, p1, p2, new_p]) self.add_edge(index, [[v1, v5], [v6, v3]]) self.add_tet(index, 2, [quad0[0], quad0[1], quad0[2], 7], [p0, p1, p2, new_p], [4, 5, 6], edges) self.add_tet(index, 2, [quad0[0], quad0[2], quad0[3], 7], [p0, p1, p2, new_p], [4, 5, 6], edges) self.add_tet(index, 2, [quad1[0], quad1[1], quad1[3], 7], [p0, p1, p2, new_p], [4, 5, 6], edges) self.add_tet(index, 2, [quad1[1], quad1[2], quad1[3], 7], [p0, p1, p2, new_p], [4, 5, 6], edges) self.add_edge(index, [[quad0[0], quad0[2]], [quad1[1], quad1[3]]]) self.add_tet(index, 2, [v1, v6, v5, v4], [p0, p1, p2], [4, 5, 6], edges) self.add_tet(index, 2, [v1, v5, tip, v4], [p0, p1, p2], [4, 5, 6], edges) self.add_tet(index, 2, [v1, v6, v2, v4], [p0, p1, p2], [4, 5, 6], edges) self.add_tet(index, 2, [v2, v3, v4, tip], [p0, p1, p2], [4, 5, 6], edges) self.add_edge(index, [[v1, v5], [v4, v2]]) self.add_simple(index, 3, edges, tri0, tri1, tri4, tri5, [p0, p1, p2, new_p]) self.add_tet(index, 3, [quad0[0], quad0[1], quad0[3], 7], [p0, p1, p2, new_p], [4, 5, 6], edges) self.add_tet(index, 3, [quad0[1], quad0[2], quad0[3], 7], [p0, p1, p2, new_p], [4, 5, 6], edges) self.add_tet(index, 3, [quad1[0], quad1[1], quad1[3], 7], [p0, p1, p2, new_p], [4, 5, 6], edges) self.add_tet(index, 3, [quad1[1], quad1[2], quad1[3], 7], [p0, p1, p2, new_p], [4, 5, 6], edges) self.add_tet(index, 3, [v1, v6, v2, v4], [p0, p1, p2], [4, 5, 6], edges) self.add_tet(index, 3, [v2, v3, v4, tip], [p0, p1, p2], [4, 5, 6], edges) self.add_tet(index, 3, [v1, v6, tip, v4], [p0, p1, p2], [4, 5, 6], edges) self.add_tet(index, 3, [tip, v6, v4, v5], [p0, p1, p2], [4, 5, 6], edges) self.add_edge(index, [[quad0[1], quad0[3]], [quad1[1], quad1[3]]]) self.add_edge(index, [[tip, v6], [v4, v2]]) def create_two_edges_cut(self, edges): index = self.index_for_edges(edges) assert(self.table[index] is None) # print(flags, self.int_to_flags(index)) e0 = self.edges[edges[0], :] e1 = self.edges[edges[1], :] Loading @@ -918,6 +1147,13 @@ if __name__ == '__main__': table = CutTable() print(table) for i in range(len(table.new_points)): p = table.new_points[i] if p is None: continue if len(p) > 0: print("iiii", i, p) for i in range(len(table.table)): confs = table.table[i] if confs: Loading Loading
python/build_cut_table.py +283 −47 Original line number Diff line number Diff line Loading @@ -58,23 +58,23 @@ class CutTable(): self.create_two_vertex_on_plane_cut(5) # [0, 1, 3, 5] self.create_three_edges_cut([1, 3, 5]) self.create_three_edges_cut([0, 3, 5]) self.create_three_edges_cut([0, 1, 5]) self.create_three_edges_cut([0, 1, 3]) self.create_three_edges_cut1([1, 3, 5]) self.create_three_edges_cut2([0, 3, 5]) self.create_three_edges_cut2([0, 1, 5]) self.create_three_edges_cut1([0, 1, 3]) # [1, 2, 3, 4] self.create_three_edges_cut([2, 3, 4]) self.create_three_edges_cut([1, 3, 4]) self.create_three_edges_cut([1, 2, 4]) self.create_three_edges_cut([1, 2, 3]) self.create_three_edges_cut1([2, 3, 4]) self.create_three_edges_cut1([1, 3, 4]) self.create_three_edges_cut1([1, 2, 4]) self.create_three_edges_cut1([1, 2, 3]) # [0, 2, 4, 5] self.create_three_edges_cut([2, 4, 5]) self.create_three_edges_cut([0, 4, 5]) self.create_three_edges_cut([0, 2, 5]) self.create_three_edges_cut([0, 2, 4]) self.create_three_edges_cut2([2, 4, 5]) self.create_three_edges_cut2([0, 4, 5]) self.create_three_edges_cut2([0, 2, 5]) self.create_three_edges_cut2([0, 2, 4]) Loading Loading @@ -762,12 +762,11 @@ class CutTable(): self.add_tet(index, conf, [ee2, tip5, 4+index5, 7], pts, [4, 5, 6], edges) def create_three_edges_cut(self, edges): def create_three_edges_cut1(self, edges): index = self.index_for_edges(edges) assert(self.table[index] is None) # print(flags, self.int_to_flags(index)) e0 = self.edges[edges[0], :] e1 = self.edges[edges[1], :] e2 = self.edges[edges[2], :] Loading Loading @@ -820,15 +819,189 @@ class CutTable(): for i in range(len(tmp)): if not tmp[i]: if len(tri4) <= 0: tri4 = self.tet[i] tri4 = self.tet[i].copy() assert(len(tri5) <= 0) elif len(tri5) <= 0: assert(len(tri4) > 0) assert(len(tri5) <= 0) tri5 = self.tet[i] tri5 = self.tet[i].copy() p0 = (self.vertices[e0[0], :]+self.vertices[e0[1], :]) / 2 p1 = (self.vertices[e1[0], :]+self.vertices[e1[1], :]) / 2 p2 = (self.vertices[e2[0], :]+self.vertices[e2[1], :]) / 2 self.new_points[index] = [] q00 = list(set(quad0).intersection(tri4).intersection(tri5))[0] q10 = list(set(quad1).intersection(tri4).intersection(tri5))[0] # fix me tip tip = list(set(tri5).intersection(tri4)) tip = tip[1] tri44 = list(tri4) tri55 = list(tri5) tri44.remove(tip) tri55.remove(tip) v1 = -1 v2 = -1 v3 = -1 if tip in e0 and (tri44[0] in e0 or tri44[1] in e0): v1 = 4 if tri44[0] in e0: v2 = tri44[0] v3 = tri44[1] else: v2 = tri44[1] v3 = tri44[0] elif tip in e1 and (tri44[0] in e1 or tri44[1] in e1): v1 = 5 if tri44[0] in e1: v2 = tri44[0] v3 = tri44[1] else: v2 = tri44[1] v3 = tri44[0] elif tip in e2 and (tri44[0] in e2 or tri44[1] in e2): v1 = 6 if tri44[0] in e2: v2 = tri44[0] v3 = tri44[1] else: v2 = tri44[1] v3 = tri44[0] else: assert(False) v5 = -1 if v3 == tri55[0]: v5 = tri55[1] elif v3 == tri55[1]: v5 = tri55[0] v4 = -1 if v3 in e0 and v5 in e0: v4 = 4 elif v3 in e1 and v5 in e1: v4 = 5 elif v3 in e2 and v5 in e2: v4 = 6 else: assert(False) v6 = -1 if v1 + v4 == 9: v6 = 6 elif v1 + v4 == 10: v6 = 5 elif v1 + v4 == 11: v6 = 4 else: assert(False) self.add_tet(index, 0, [v3, v1, v6, v2], [p0, p1, p2], [4, 5, 6], edges) self.add_tet(index, 0, [v3, tip, v1, v6], [p0, p1, p2], [4, 5, 6], edges) self.add_tet(index, 0, [v6, tip, v4, v5], [p0, p1, p2], [4, 5, 6], edges) self.add_tet(index, 0, [v4, tip, v3, v6], [p0, p1, p2], [4, 5, 6], edges) self.add_edge(index, [[tip, v6], [v6, v3]]) self.add_tet(index, 1, [v3, v1, v6, v2], [p0, p1, p2], [4, 5, 6], edges) self.add_tet(index, 1, [v1, v6, v5, v4], [p0, p1, p2], [4, 5, 6], edges) self.add_tet(index, 1, [v1, v5, tip, v4], [p0, p1, p2], [4, 5, 6], edges) self.add_tet(index, 1, [v3, v1, v6, v4], [p0, p1, p2], [4, 5, 6], edges) self.add_tet(index, 1, [tip, v3, v1, v4], [p0, p1, p2], [4, 5, 6], edges) self.add_edge(index, [[v1, v5], [v6, v3]]) self.add_tet(index, 2, [v1, v6, v5, v4], [p0, p1, p2], [4, 5, 6], edges) self.add_tet(index, 2, [v1, v5, tip, v4], [p0, p1, p2], [4, 5, 6], edges) self.add_tet(index, 2, [v1, v6, v2, v4], [p0, p1, p2], [4, 5, 6], edges) self.add_tet(index, 2, [v2, v3, v4, tip], [p0, p1, p2], [4, 5, 6], edges) self.add_edge(index, [[v1, v5], [v4, v2]]) self.add_tet(index, 3, [v1, v6, v2, v4], [p0, p1, p2], [4, 5, 6], edges) self.add_tet(index, 3, [v2, v3, v4, tip], [p0, p1, p2], [4, 5, 6], edges) self.add_tet(index, 3, [v1, v6, tip, v4], [p0, p1, p2], [4, 5, 6], edges) self.add_tet(index, 3, [tip, v6, v4, v5], [p0, p1, p2], [4, 5, 6], edges) self.add_edge(index, [[tip, v6], [v4, v2]]) def create_three_edges_cut2(self, edges): index = self.index_for_edges(edges) assert(self.table[index] is None) e0 = self.edges[edges[0], :] e1 = self.edges[edges[1], :] e2 = self.edges[edges[2], :] quad0 = [] tri0 = [] quad1 = [] tri1 = [] tri4 = [] tri5 = [] face0 = -1 face1 = -1 quad, tri, face = self.get_quad(e0, e1, 4, 5) if len(quad) > 0: quad0 = quad tri0 = tri face0 = face quad, tri, face = self.get_quad(e0, e2, 4, 6) if len(quad) > 0: if len(quad0) > 0: assert(len(quad1) <= 0) quad1 = quad tri1 = tri face1 = face else: quad0 = quad tri0 = tri face0 = face quad, tri, face = self.get_quad(e1, e2, 5, 6) if len(quad) > 0: assert(len(quad0) > 0) assert(len(quad1) <= 0) quad1 = quad tri1 = tri face1 = face tmp = [False, False, False, False] tmp[face0] = True tmp[face1] = True # print(tri4, tri5) # print(ee1, ee2, tip4, tip5) for i in range(len(tmp)): if not tmp[i]: if len(tri4) <= 0: tri4 = self.tet[i].copy() assert(len(tri5) <= 0) elif len(tri5) <= 0: assert(len(tri4) > 0) assert(len(tri5) <= 0) tri5 = self.tet[i].copy() p0 = (self.vertices[e0[0], :]+self.vertices[e0[1], :]) / 2 p1 = (self.vertices[e1[0], :]+self.vertices[e1[1], :]) / 2 Loading @@ -836,65 +1009,121 @@ class CutTable(): self.new_points[index] = [] new_p = (self.vertices[0,:]+self.vertices[1,:]+self.vertices[2,:]+self.vertices[3,:])/4 self.new_points[index].append(new_p) q00 = list(set(quad0).intersection(tri4).intersection(tri5))[0] q10 = list(set(quad1).intersection(tri4).intersection(tri5))[0] # fix me tip tip = list(set(tri5).intersection(tri4)) tip = tip[0] tri44 = list(tri4) tri55 = list(tri5) tri44.remove(tip) tri55.remove(tip) self.add_simple(index, 0, edges, tri0, tri1, tri4, tri5, [p0, p1, p2, new_p]) v1 = -1 v2 = -1 v3 = -1 if tip in e0 and (tri44[0] in e0 or tri44[1] in e0): v1 = 4 if tri44[0] in e0: v2 = tri44[0] v3 = tri44[1] else: v2 = tri44[1] v3 = tri44[0] elif tip in e1 and (tri44[0] in e1 or tri44[1] in e1): v1 = 5 if tri44[0] in e1: v2 = tri44[0] v3 = tri44[1] else: v2 = tri44[1] v3 = tri44[0] elif tip in e2 and (tri44[0] in e2 or tri44[1] in e2): v1 = 6 if tri44[0] in e2: v2 = tri44[0] v3 = tri44[1] else: v2 = tri44[1] v3 = tri44[0] else: assert(False) self.add_tet(index, 0, [quad0[0], quad0[1], quad0[2], 7], [p0, p1, p2, new_p], [4, 5, 6], edges) self.add_tet(index, 0, [quad0[0], quad0[2], quad0[3], 7], [p0, p1, p2, new_p], [4, 5, 6], edges) v5 = -1 if v3 == tri55[0]: v5 = tri55[1] elif v3 == tri55[1]: v5 = tri55[0] self.add_tet(index, 0, [quad1[0], quad1[1], quad1[2], 7], [p0, p1, p2, new_p], [4, 5, 6], edges) self.add_tet(index, 0, [quad1[0], quad1[2], quad1[3], 7], [p0, p1, p2, new_p], [4, 5, 6], edges) self.add_edge(index, [[quad0[0], quad0[2]], [quad1[0], quad1[2]]]) v4 = -1 if v3 in e0 and v5 in e0: v4 = 4 elif v3 in e1 and v5 in e1: v4 = 5 elif v3 in e2 and v5 in e2: v4 = 6 else: assert(False) v6 = -1 self.add_simple(index, 1, edges, tri0, tri1, tri4, tri5, [p0, p1, p2, new_p]) if v1 + v4 == 9: v6 = 6 elif v1 + v4 == 10: v6 = 5 elif v1 + v4 == 11: v6 = 4 else: assert(False) self.add_tet(index, 1, [quad0[0], quad0[1], quad0[3], 7], [p0, p1, p2, new_p], [4, 5, 6], edges) self.add_tet(index, 1, [quad0[1], quad0[2], quad0[3], 7], [p0, p1, p2, new_p], [4, 5, 6], edges) self.add_tet(index, 0, [v3, v1, v6, v2], [p0, p1, p2], [4, 5, 6], edges) self.add_tet(index, 0, [v3, tip, v1, v6], [p0, p1, p2], [4, 5, 6], edges) self.add_tet(index, 0, [v6, tip, v4, v5], [p0, p1, p2], [4, 5, 6], edges) self.add_tet(index, 0, [v4, tip, v3, v6], [p0, p1, p2], [4, 5, 6], edges) self.add_tet(index, 1, [quad1[0], quad1[1], quad1[2], 7], [p0, p1, p2, new_p], [4, 5, 6], edges) self.add_tet(index, 1, [quad1[0], quad1[2], quad1[3], 7], [p0, p1, p2, new_p], [4, 5, 6], edges) self.add_edge(index, [[tip, v6], [v6, v3]]) self.add_edge(index, [[quad0[1], quad0[3]], [quad1[0], quad1[2]]]) self.add_tet(index, 1, [v3, v1, v6, v2], [p0, p1, p2], [4, 5, 6], edges) self.add_tet(index, 1, [v1, v6, v5, v4], [p0, p1, p2], [4, 5, 6], edges) self.add_tet(index, 1, [v1, v5, tip, v4], [p0, p1, p2], [4, 5, 6], edges) self.add_tet(index, 1, [v3, v1, v6, v4], [p0, p1, p2], [4, 5, 6], edges) self.add_tet(index, 1, [tip, v3, v1, v4], [p0, p1, p2], [4, 5, 6], edges) self.add_simple(index, 2, edges, tri0, tri1, tri4, tri5, [p0, p1, p2, new_p]) self.add_edge(index, [[v1, v5], [v6, v3]]) self.add_tet(index, 2, [quad0[0], quad0[1], quad0[2], 7], [p0, p1, p2, new_p], [4, 5, 6], edges) self.add_tet(index, 2, [quad0[0], quad0[2], quad0[3], 7], [p0, p1, p2, new_p], [4, 5, 6], edges) self.add_tet(index, 2, [quad1[0], quad1[1], quad1[3], 7], [p0, p1, p2, new_p], [4, 5, 6], edges) self.add_tet(index, 2, [quad1[1], quad1[2], quad1[3], 7], [p0, p1, p2, new_p], [4, 5, 6], edges) self.add_edge(index, [[quad0[0], quad0[2]], [quad1[1], quad1[3]]]) self.add_tet(index, 2, [v1, v6, v5, v4], [p0, p1, p2], [4, 5, 6], edges) self.add_tet(index, 2, [v1, v5, tip, v4], [p0, p1, p2], [4, 5, 6], edges) self.add_tet(index, 2, [v1, v6, v2, v4], [p0, p1, p2], [4, 5, 6], edges) self.add_tet(index, 2, [v2, v3, v4, tip], [p0, p1, p2], [4, 5, 6], edges) self.add_edge(index, [[v1, v5], [v4, v2]]) self.add_simple(index, 3, edges, tri0, tri1, tri4, tri5, [p0, p1, p2, new_p]) self.add_tet(index, 3, [quad0[0], quad0[1], quad0[3], 7], [p0, p1, p2, new_p], [4, 5, 6], edges) self.add_tet(index, 3, [quad0[1], quad0[2], quad0[3], 7], [p0, p1, p2, new_p], [4, 5, 6], edges) self.add_tet(index, 3, [quad1[0], quad1[1], quad1[3], 7], [p0, p1, p2, new_p], [4, 5, 6], edges) self.add_tet(index, 3, [quad1[1], quad1[2], quad1[3], 7], [p0, p1, p2, new_p], [4, 5, 6], edges) self.add_tet(index, 3, [v1, v6, v2, v4], [p0, p1, p2], [4, 5, 6], edges) self.add_tet(index, 3, [v2, v3, v4, tip], [p0, p1, p2], [4, 5, 6], edges) self.add_tet(index, 3, [v1, v6, tip, v4], [p0, p1, p2], [4, 5, 6], edges) self.add_tet(index, 3, [tip, v6, v4, v5], [p0, p1, p2], [4, 5, 6], edges) self.add_edge(index, [[quad0[1], quad0[3]], [quad1[1], quad1[3]]]) self.add_edge(index, [[tip, v6], [v4, v2]]) def create_two_edges_cut(self, edges): index = self.index_for_edges(edges) assert(self.table[index] is None) # print(flags, self.int_to_flags(index)) e0 = self.edges[edges[0], :] e1 = self.edges[edges[1], :] Loading @@ -918,6 +1147,13 @@ if __name__ == '__main__': table = CutTable() print(table) for i in range(len(table.new_points)): p = table.new_points[i] if p is None: continue if len(p) > 0: print("iiii", i, p) for i in range(len(table.table)): confs = table.table[i] if confs: Loading