'definition':'A face with 3 edges. Often bad for modeling because it stops edge loops and does not deform well around bent areas. A mesh might look good until you animate, so beware!',
'default':True
})
defcheck_tris(self):
bad={'faces':[]}
forfinself.b.faces:
if3==len(f.verts):
bad['faces'].append(f.index)
returnbad
CHECKS.append({
'symbol':'ngons',
'label':'Ngons',
'definition':'A face with >4 edges. Is generally bad in exactly the same ways as Tris',
'default':True
})
defcheck_ngons(self):
bad={'faces':[]}
forfinself.b.faces:
if4<len(f.verts):
bad['faces'].append(f.index)
returnbad
CHECKS.append({
'symbol':'nonmanifold',
'label':'Nonmanifold Elements',
'definition':'Simply, shapes that won\'t hold water. More precisely, nonmanifold edges are those that do not have exactly 2 faces attached to them (either more or less). Nonmanifold verts are more complicated -- you can see their definition in BM_vert_is_manifold() in bmesh_queries.c',
'default':True
})
defcheck_nonmanifold(self):
bad={}
forelemtypein'verts','edges':
bad[elemtype]=[]
forelemingetattr(self.b,elemtype):
ifnotelem.is_manifold:
bad[elemtype].append(elem.index)
# TODO: Exempt mirror-plane verts.
# Plus: ...anybody wanna tackle Mirrors with an Object Offset?
returnbad
CHECKS.append({
'symbol':'interior_faces',
'label':'Interior Faces',
'definition':'This confuses people. It is very specific: A face whose edges ALL have >2 faces attached. The simplest way to see this is to Ctrl+r a Default Cube and hit \'f\'',
'default':True
})
defcheck_interior_faces(self):# translated from editmesh_select.c
bad={'faces':[]}
forfinself.b.faces:
ifnotany(3>len(e.link_faces)foreinf.edges):
bad['faces'].append(f.index)
returnbad
CHECKS.append({
'symbol':'sixplus_poles',
'label':'6+-edge Poles',
'definition':'A vertex with 6 or more edges connected to it. Generally this is not something you want, but since some kinds of extrusions will legitimately cause such a pole (imagine extruding each face of a Cube outward, the inner corners are rightful 6+-poles). Still, if you don\'t know for sure that you want them, it is good to enable this',
'default':False
})
defcheck_sixplus_poles(self):
bad={'verts':[]}
forvinself.b.verts:
if5<len(v.link_edges):
bad['verts'].append(v.index)
returnbad
# [Your great new idea here] -> Tell me about it: rking@panoptic.com