Hi @mingYLY86

There is no simple node for it (maybe there is somewhere in a package) which can detiremine if a surface is Planar (Not curved)

Below you will find a series of nodes which do just this and split the surfaces in Planar and non planar

NormalAtParameter is a bit more open ended than I like. This is because it doesn’t look at the direction of the surface, but the vector which is perpendicular at that sample point.

Also this is only sampling the surface at two UV parameters - as such it’s possible for false positives which can’t be corrected. For a cylinder it’ll certainly work, but not necessarily for other shapes - say a wave:

This can be simplified some which is nice, by directly sampling the normal (effectively what happens with the coordinate system’s Z axis), but that does not increase the accuracy.

Adding a means for a sample rate can help:

But this will not ensure accuracy if you don’t set the number of samples:

There is a more accurate method of testing which will decrease the sampling though - the Surface.CurvatureAtParameter node. This doesn’t look for the perpendicular vector at the face, but looks at how the surface is shaped on it’s U and V axis on the given parameter. This reduces the number of samples for accuracy, while allowing increased sampling when needed:

The DYN with each method for reference:

Find Curved Surfaces.dyn (89.0 KB)

With the assumption that the direction of a sampling of all normals on a planar surface will be unidirectional (I don’t think I’ve had trouble with flipped normals on a planar surface), any surface with more than one unique normalized vector should be non-planar

planarSurfaces.dyn (23.1 KB)

Aah yes, that is because I only used 2 evaluation points. @JacobSmall explains this very well.

I like the solution provided by @Vikram_Subbaiah, which evaluates a 10x10 grid of points, which is more accurate.

Form_Explode Surface_test1.dyn (28.9 KB)