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 # 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) or o.ActivePrimitive.Geometry.Polygons.Count <= 0 else: return False
I packaged the filter as an addon. Get it here.