Now that there are intrinsic ICE attributes like NbPoints and NbPolygons, there a couple of ways you can check for an empty mesh:
# Assume a polymesh is selected...
o = Application.Selection(0)
# Check the intrinsic ICE attribute
nb = o.ActivePrimitive.ICEAttributes("NbPoints")
print nb.IsDefined and nb.DataArray[0] <= 0
# Check using the object model
print o.ActivePrimitive.Geometry.Points.Count <= 0
The typical way to package this up for users it to define a filter. Then a user just has to select the filter and press CTRL+A. Here’s the Match callback for a filter that finds empty polygon meshes. Note that I switched to checking the number of polygons. That way, if somehow there was something weird like a mesh with just one point, you’d still find it.
The intrinsic attribute NbPolygons should always exist, but just to be sure I check IsDefined, and if that is False, I fall back to checking Geometry.Polygons.Count.
# Match callback for the EmptyPolygonMesh custom filter.
def EmptyPolygonMesh_Match( in_ctxt ):
Application.LogMessage("EmptyPolygonMesh_Match called",constants.siVerbose)
o = in_ctxt.GetAttribute( 'Input' )
if o.type == 'polymsh':
nb = o.ActivePrimitive.ICEAttributes("NbPolygons")
return (nb.IsDefined and nb.DataArray[0] <= 0) or o.ActivePrimitive.Geometry.Polygons.Count <= 0
else:
return False
I packaged the filter as an addon. Get it here.