Files
PVPlant/MeshTools/MeshGetBoundary.py

32 lines
1010 B
Python
Raw Permalink Normal View History

2025-01-28 00:04:13 +01:00
def get_boundary(mesh): # From trails
""" Create triangulation boundary """
import Part
import itertools as itools
from collections import Counter
from ast import literal_eval
facet_pidx = mesh.Topology[1]
edges = itools.chain(*(itools.permutations(pidx, 2) for pidx in facet_pidx))
count = Counter((str(edge) for edge in edges))
double_boundary = list((literal_eval(k) for k, v in count.items() if v == 1))
boundary = double_boundary[:1]
for candidate in double_boundary[1:]:
if candidate in boundary or candidate[::-1] in boundary:
pass
else:
boundary.append(candidate)
def mkEdge(p1, p2):
return Part.makeLine((p1.x, p1.y, p1.z), (p2.x, p2.y, p2.z))
points = mesh.Points
edges = []
for p1, p2 in boundary:
edges.append(mkEdge(points[p1], points[p2]))
wires = []
for opening in Part.sortEdges(edges):
wires.append(Part.Wire(opening))
return Part.makeCompound(wires)