I have a solution but it is very long in python. Easy to reproduce in cpp but I would like as much as possible try to make a quick trick in python ...
---------------------------------------------------------------------------------------------------------------------------------------
# Get All UVs
u_values = OpenMaya.MFloatArray()
v_values = OpenMaya.MFloatArray()
mfn_mesh.getUVs(u_values, v_values, "SKIN")
# Sort UVs left / right
r_list = {}
l_list = {}
for idx, (u, v) in enumerate(zip(u_values, v_values)):
if u < 0.5:
r_list[str(idx)] = [u, v]
if u > 0.5:
l_list[str(idx)] = [u, v]
# Get UVs sym map
sym_map = {}
for rk, rv in r_list.items():
sym_uv = pmc.dt.Vector(1 - rv[0], rv[1], 0)
tmp_length = None
for lk, lv in l_list.items():
l_uv = pmc.dt.Vector(lv[0], lv[1], 0)
distance = sym_uv.distanceTo(sym_uv)
if tmp_length is None or distance < tmp_length:
tmp_length = distance
sym_map[rk] = lk
del l_list[lk]
# R vertices
r_vertices = []
for idx in sym_map.keys():
v = pmc.polyListComponentConversion(uv_name, fromUV=True, toVertex=True)
r_vertices.extend(v)
pmc.select(vertices)
# L vertices
l_vertices = []
for idx in sym_map.values():
v = pmc.polyListComponentConversion(uv_name, fromUV=True, toVertex=True)
l_vertices.extend(v)
pmc.select(r_vertices)
pmc.select(l_vertices)
---------------------------------------------------------------------------------------------------------------------------------------