How to make TopoDS_Face from gp_Pnts

OCCUtils provides Face::FromPoints() to linearly connect a set of gp_Pnt points and make a face from the resulting edges:

#include <occutils/Face.hxx>

using namespace OCCUtils;

gp_Pnt p1, p2, p3; // Your points!

TopoDS_Face face = Face::FromPoints({p1, p2, p3});

Face::FromPoints() will automatically remove duplicate consecutive points and connect the last point to the first point.

Note that if there are not enough unique points (you need at least 3 unique points to make a valid face!), Face::FromPoints() will return a TopoDS_Face where .IsNull() is true.