When I used PlanarFace.Normal property to get normals of faces, the direction seems to be opposite for some faces.
foreach (Face face in solid.Faces)
PlanarFace planarFace = face as PlanarFace;
if (planarFace != null)
// Get a normal direction of the face from Normal property
Trace.WriteLine("Normal=" + planarFace.Normal.ToString());
Actually, the right way to find the normal of a face is to use PlanarFace.ComputeNormal method. The following code computes a normal at the origin of the face by passing the UV coordinate as following.
XYZ normal = planarFace.ComputeNormal(new UV(planarFace.Origin.X, planarFace.Origin.Y));