Solid face orientation


#1

I would have expected that upon exploding a solid, the resulting surfaces would maintain an “outward” orientation with respect to their normals. It seems this is not the case - if you explode a cuboid, for instance, the top and bottom surfaces both have their normals pointing in +z. What’s the reason for this? Is there any way to get the consistent “outward” facing normals from a solid’s faces?


#2

Hi Andrew,

I agree that it would be more intuitive to have them pointing out from the start. Maybe you could file this as a wish on the github page? I can only suggest a rudimentary check that will work in most cases:

2015-10-06_10-13-59


#3

found a workaround… but it ain’t pretty. Solid -> Faces -> Vertices (which have consistent counterclockwise ordering) -> Vectors from pts[0] and pts[1] and pts[1] and pts[2] -> cross product between the two vectors = face normal. (which only works provided face boundaries are convex, and I’m also assuming planar faces. Could get fancier w/ Newell’s method but… for my purposes this works.)

 

Tell me there’s a better way!

 

Even the CurveGeometry() representation of each edge didn’t follow a consistent clockwise orientation - only its order did. What gives? Is it not reasonable to assume consistent orientations/windings/orderings etc. out of a solid? is there some loss of information at the moment of retrieving the “CurveGeometry” or “SurfaceGeometry” representation of one of the topology objects?


#4

hi Andrew, you’ve found my pain!

The bottom face does not maintain its outward pointing normal, I’m not sure if this because of the construction of the solid or the extraction step. I have found that constructing a solid by extrusion of a polygon sometimes produces a consistent normal.

The edge directions are different because they are extracted from topological edges which may come from loops defining multiple faces.

interesting that the verts are ordered consistently, that is useful.

I believe that this issue has been filed before bringing it to attention on github might be good to see if it has since regressed.