Code: Select all
def get_wire(edges, e1, e2):
_tmp = edges + [e1]
se = Part.sortEdges(_tmp)
if len(se) == 1: # e1 is indeed touching previous edges
w1 = Part.Wire(se[0])
return w1, e2
else: # e1 is not touching previous edges, let's try with e2
se = Part.sortEdges(edges + [e2])
if len(se) == 1: # all edges connected
w1 = Part.Wire(se[0])
return w1, e1
return None, None
def split_wire(wire, line, tol=1e-7):
wires = []
edges = []
for i, oe in enumerate(wire.OrderedEdges):
d, pts, info = oe.distToShape(line)
if d > tol:
edges.append(oe)
else:
for data in info:
if data[0] == "Edge":
e1, e2 = oe.split(data[2]).Edges
w, e = get_wire(edges, e1, e2)
if w:
wires.append(w)
edges = [e]
elif data[0] == "Vertex":
print("Wire is cut exactly on a vertex")
print("We should do something also, but I'm getting lazy ;-)")
if edges:
wires.append(Part.Wire(Part.sortEdges(edges)[0]))
if wire.isClosed():
join = Part.Wire(Part.sortEdges(wires[0].Edges + wires[-1].Edges)[0])
wires = [join] + wires[1:-1]
return wires