Wed, 08/13/2003 - 07:32
Forums:
Hello everybody,
I have 2 problems to resolve with Cascade :
- how can I display a 3d point and attach a text to it.
- when I'm picking with mouse in the viewer, how can I get the coordinates of picking point (in world coordinates).
best regards.
thm
Wed, 08/13/2003 - 18:43
Hi,
Have a look at the example/class CASCADE\samples\standard\mfc\01_Geometry\src\ISession2D\ISession_Text.cpp.
Second question:
world coordinates !!! Don't know!!
---Open a local context on VERTEX's---
//expecting a click on a vertice
pDoc->GetAISContext()->Select();
pDoc->GetAISContext()->InitSelected();
TopoDS_Shape aShape = pDoc->GetAISContext()->SelectedShape();
pDoc->GetAISContext()->CloseLocalContext();
TopoDS_Vertex aVertex = TopoDS::Vertex(aShape);
//print the coordinates on screen
TopoDS_Vertex v;
gp_Pnt pt;
v= TopoDS::Vertex(aVertex);
pt = BRep_Tool::Pnt(v);
char aText[10];
sprintf(aText,"(%g,%g,%g)",pt.X(),pt.Y(),pt.Z());
Handle(ISession_Text) aGraphicText = new ISession_Text(aText,pt);
aGraphicText->SetScale(0.1);
pDoc->GetAISContext()->Display(aGraphicText,TRUE);
//close local context
pDoc->GetAISContext()->ClearCurrents();
Regards,
David
Wed, 08/13/2003 - 18:54
to get the 3d coodinates of a picked point , use :
gp_Pnt ConvertClickToPoint(Standard_Real x, Standard_Real y, Handle(V3d_View) aView)
{
V3d_Coordinate 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;
}
HTH