# Selecting longest edge in triangle

I've got traingluated mesh in which I want to select longest edge of each triangle. I have a feeling that this isn't hard via python script, but my coding skills are.... well not good. I know that you have to iterate through triangles in an object, then compare edge lenght, add longest one to some group and at the end select this group - I just don't know how to code it :( This is a workaround to not very good tris-to-quad tool.

Bmesh script

Simply running through and selecting the longest edge of each tri, the result can have any of 1, 2 or all edges of tri selected.

Added code try and avoid this somewhat.

Test script showing how to:

• Load current edit mesh into bmesh
• Find all triangles in bmesh
• Find the longest edge and select it.
• Update the edit mesh.

script:

import bpy
import bmesh

context = bpy.context
ob = context.edit_object
me = ob.data
bm = bmesh.from_edit_mesh(me)

# triangles
tris = [f for f in bm.faces if len(f.edges) == 3]
# deselect all edges
for e in bm.edges:
e.select = False

for f in tris:
# if an edge already selected continue
if any(t.select for t in f.edges):
continue
# sort by length and selected (if not using continue)
edges = sorted(f.edges, key=lambda t : [t.calc_length(), t.select])
# pop the last and select
edges.pop().select = True

bmesh.update_edit_mesh(me)


Alternativey

Each edge has a link_faces collection. If there are two link faces (not boundary) and the edge is longest of all edges in both faces, then turn into quad.

• Find all edges that have two triangle link faces
• For each these edges, (sorted maybe): if it is longest edge of 2 faces and no other edges selected disolve edge to make this face a quad.
• otherwise go to next edge.