This topic was brought up multiple times before, but going through all the threads could not solve my misunderstanding.
When I try to use the Rhinocommon MeshAllCoplanarFaces on a mesh the output mesh always has the exact same number of faces, only the mesh edge count seems to be affected.
import Grasshopper as gh
import scriptcontext as sc
if __name__ == "__main__":
if M:
if not t:
t = sc.doc.ModelAbsoluteTolerance
merged = M.MergeAllCoplanarFaces(t)
else:
ghenv.Component.AddRuntimeMessage(
gh.Kernel.GH_RuntimeMessageLevel.Warning,
"Input parameter M failed to collect data"
)
Is the method supposed to work like this and I just need to follow it up with more steps of reconstructing the mesh (adding ngon faces / culling unused vertices)?
Basically I want the script from above to return a mesh cube with just 6 faces.
Well … this Method is not available in R5 SDK (for the type of limited usage that R/GH have in the practice this combo is more than enough).
Anyway … I would suggest to try the analytic way (after doing a FF conn Tree). Use a bool [mesh.Faces.Count] , and call it, say, taken - in order to avoid dating the same girl twice. Notify if you want a C# that does that (but there’s no auto C# to P translation).
BTW: Use MTV connectivity (Vertices on a per Mesh basis) instead of MV (Vertices on a per Face basis). M.Vertices.CombineIdentical is a must as well
First of all thank you for your quick reply! Could you elaborate what you mean by FF conn Tree? (Face connectivity tree?). On first sight I was not able to put your approach together with the standard Rhinocommon methods.
Indeed FF is for Face/Face connectivity Tree (R SDK provides all what you need to do that classic Tree - plus all what you need for a full “merge” solution ).
The only puzzle if to find the fastest and most effective FF coplanarity check Method (Face Plane/Plane comparison comes to mind - planes defined by Face center and Face Normal. But of course there’s various other ways to cut the mustard)
Hello Dale,
I tried baking the script’s output mesh, but when I re-reference it into grasshopper again or export it as .obj, it just looks in its structure exactly like the input mesh and I see no point in applying the method.
Does this mean then, that Mesh.MergeAllCoplanarFaces and AddPlanarNgons return the same unmodified mesh? How could I simply filter out every face except the newly constructed n-gons?
Thank you Dale, the OBJ export option does the trick! I tried to further simplify the mesh by culling redundant vertices with Kangaroo 2 Combine&Clean but it seems to damage something in the mesh. All in all I am not able to put together a sufficient alternative to Moment Of Inspiration’s OBJ export mesher.
I am trying to use the script on this model but it does not reduce the mesh faces for me.
Actually every triangle contains three coplanar Mesh face. mesh coplanar.gh (24.0 KB)
Somebody else please explain how to rebuild a mesh using the output of face boundaries that won’t waste as much processor power in a larger scale scenario.