I am trying to create a polygon from a mesh. My idea is to get all the border edges and make a polygon.i found somewhat similar answer to mine in this question Get border edges of mesh - in winding order
I tried to implement the algorithm mention there but i am only getting a small triangle as my border edges
import plyfile
def edges_to_polygon_loop(edges):
# Initialize an empty polygon loop
polygon_loop = []
# Pick an unvisited edge segment
start_edge = edges[0]
v_start, v_next = start_edge
polygon_loop.append(v_start)
polygon_loop.append(v_next)
# Initialize a set to keep track of visited edges
visited_edges = set()
visited_edges.add(start_edge)
# Iterate until we get back to the start vertex
while v_next != v_start:
# Find the next unvisited edge segment
for edge in edges:
if edge not in visited_edges:
v_i, v_j = edge
if v_i == v_next:
polygon_loop.append(v_j)
v_next = v_j
visited_edges.add(edge)
break
elif v_j == v_next:
polygon_loop.append(v_i)
v_next = v_i
visited_edges.add(edge)
break
# Return the polygon loop
return polygon_loop
with open('M:\\volume.ply', 'rb') as f:
# Read the .ply file
ply = plyfile.PlyData.read(f)
# Extract the vertex and face data
vertices = ply['vertex']
faces = ply['face']
# Initialize an empty list of edges
edges = []
# Iterate over the faces
for face in faces:
# Get the indices of the vertices in the face
vertex_indices = face['vertex_indices']
# Add the edges to the list
for i in range(len(vertex_indices)):
# Get the indices of the endpoints of the edge
v1_index = vertex_indices[i]
v2_index = vertex_indices[(i + 1) % len(vertex_indices)]
# Get the coordinates of the endpoints
v1 = (vertices[v1_index]['x'], vertices[v1_index]['y'], vertices[v1_index]['z'])
v2 = (vertices[v2_index]['x'], vertices[v2_index]['y'], vertices[v2_index]['z'])
# Add the edge to the list
edges.append((v1, v2))
# Print the edges
polygon = edges_to_polygon_loop(edges)
You would need to eliminate
inner edges
first, then you can compose the outer loop.