This is a script I made a few weeks ago to solve this problem, it doesnt work 100% but it removed about 20% of redundant typology from models I tried it on, however I also found out they did the same with the remesh in sculpt mode so not sure if it will be of use to anyone anymore but here it is
import bpy
import bmesh
def ShowMessageBox(message = "", title = "Message Box", icon = 'INFO'):
def draw(self, context):
self.layout.label(text=message)
bpy.context.window_manager.popup_menu(draw, title = title, icon = icon)
def edges_count(v):
i = 0
return len(v.link_edges)
def deselect_all(bm):
for v in bm.verts:
v.select = False
def get_linked_total(value,f):
i = 0
for v in f.verts:
if edges_count(v) == value:
i = i + 1
return i
def center(co,co2):
return ((co.x+co2.x)/2,(co.y+co2.y)/2,(co.z+co2.z)/2)
me = bpy.context.object.data
bm = bmesh.from_edit_mesh(me)
i = 0
for f in bm.faces:
#probable candidate
if len(f.verts) == 4 and get_linked_total(3,f) == 2:
if edges_count(f.verts[0]) == 3 and edges_count(f.verts[2]) == 3:
i = i + 1
list = [f.verts[0],f.verts[2]]
bmesh.ops.pointmerge(bm,verts = list,merge_co = center(f.verts[0].co,f.verts[2].co))
elif edges_count(f.verts[1]) == 3 and edges_count(f.verts[3]) == 3:
i = i + 1
list = [f.verts[1],f.verts[3]]
bmesh.ops.pointmerge(bm,verts = list,merge_co = center(f.verts[1].co,f.verts[3].co))
bmesh.update_edit_mesh(me)
ShowMessageBox(("found faces "+str(i)), "Incorrect faces", 'INFO')