How to compute surface normal in OpenCASCADE
OCCUtils provides a convenient utility to compute the Normal of a surface (represented by a GeomAdaptor_Surface
) in OpenCASCADE:
#include <occutils/Surface.hxx>
using namespace OCCUtils;
GeomAdaptor_Surface surf = /* ... */;
gp_Ax1 surfaceNormal = Surface::Normal(surf);
// ...or just get the direction
gp_Dir surfaceDirection = Surface::NormalDirection(surf);
This function computes the normal vector at specific U/V coordinates which default to (0,0)
. You can also give custom U/V coordinates:
gp_Ax1 normal = Surface::Normal(surf, 1.0 /* u */, -4.5 /* v */);
In case you can’t use OCCUtils and you need to do it manually, here’s how you can do it:
#include <GeomLProp_SLProps.hxx>
GeomLProp_SLProps props(surf.Surface(), u, v, 1 /* max 1 derivation */, precision);
gp_Ax1 axis(props.Value(), props.Normal());
props.Value()
returns the point on the surface at the given U/V coordinates.