problems with GeomAPI_ProjectOnSurf


I use GeomAPI_ProjectOnSurf in a fucntion for generating shape meshes.
But, I meet problems. Sometimes, GeomAPI_ProjectOnSurf is unable to
generate a projected point. For instance, look at the following piece
of program.


int main()
gp_Pnt O(0,0,0);
gp_Dir N(0,0,1);
gp_Dir Vx(1,0,0);
Handle_Geom_Ellipse ellipse = new Geom_Ellipse(gp_Ax2(O,N,Vx),4,2);

BRepBuilderAPI_MakeEdge edge_builder(ellipse, 0,PI/2);
TopoDS_Shape E = edge_builder.Shape();

gp_Ax1 axis(O,Vx);

BRepPrimAPI_MakeRevol mkRev(E,axis, PI/2);
if (!mkRev.IsDone())

gp_Pnt P(2,0,0);
TopoDS_Shape shape = mkRev->Shape();

TopTools_IndexedMapOfShape MS;
TopExp().MapShapes(shape, TopAbs_FACE, MS);

// only one generated face whose corresponding surface type is GeomSurfaceOfRevolution
Handle_Geom_Surface Surf = BRep_Tool().Surface(TopoDS::Face(MS(1)));

GeomAPI_ProjectPointOnSurf Proj(P, Surf);

for (int i = 1; i {
gp_pnt cur = Proj.Point(i);
cout }

With the point P(2,0,0), there is no projected point. With other points
like P(0,0,1) or P(0,1,0) there is three points. I don't understqnd why.

Moreover to write my meshing function, I need to be able to project any point without exception.

I hope you could hep me, thanks for advance,


Francois Lauzon's picture

The point 2,0,0 is on the axis of your revolution surface, so you have an infinity of solution... pick one!


franck ledoux's picture

thanks a lot,

you're right, I didn't take care of this information. So, currently to project a point placed on the axis, I compute a vector orthogonal to this axis and I use the intersection package.