There is no ConvertClickToCoordinate() function in OCCT - how it looks?
Archived discussion
Getting wrong X,Y,Z coordinates
I can get (x, y, z) via gp_Pnt ConvertClickToCoordinate(int x, int y, Handle(V3D_View) aView) when using Projection_Orthographic projection type.
But the result is wrong when using Projection_Perspective projection type.
Anyone there has any idea to fix it?
Discussion
2 archived replies
Posts are displayed in their archived order.
Hi Kirill
This function is in the Viewer3dView class from Viewer3d project of mfc sample.
There's the code
gp_Pnt ConvertClickToPoint(Standard_Real x, Standard_Real y, Handle(V3d_View) aView)
{
Standard_Real XEye,YEye,ZEye,XAt,YAt,ZAt;
aView->Eye(XEye,YEye,ZEye);
aView->At(XAt,YAt,ZAt);
gp_Pnt EyePoint(XEye,YEye,ZEye);
gp_Pnt AtPoint(XAt,YAt,ZAt);
gp_Vec EyeVector(EyePoint,AtPoint);
gp_Dir EyeDir(EyeVector);
gp_Pln PlaneOfTheView = gp_Pln(AtPoint,EyeDir);
Standard_Real X,Y,Z;
aView->Convert(int(x),int(y),X,Y,Z);
gp_Pnt ConvertedPoint(X,Y,Z);
gp_Pnt2d ConvertedPointOnPlane = ProjLib::Project(PlaneOfTheView,ConvertedPoint);
gp_Pnt ResultPoint = ElSLib::Value(ConvertedPointOnPlane.X(),
ConvertedPointOnPlane.Y(),
PlaneOfTheView);
return ResultPoint;
}When using Projection_Orthographic projection type, I can get the point via cursor.
But when using Projection_Perspective projection type, the result point is far away from the cursor.
I got different result in two projection types of the code below
aView->Convert(int(x),int(y),X,Y,Z);