EgtGraphics 1.6v7 :

- migliorie varie per overload e const
- aggiunta GetPlaneSnapPoint.
This commit is contained in:
Dario Sassi
2016-10-29 15:48:19 +00:00
parent 415f15f71c
commit cde25533e7
9 changed files with 147 additions and 127 deletions
+22 -3
View File
@@ -70,7 +70,7 @@ Scene::GetGraphicSnapPoint( int nSnap, const Point3d& ptWin, int nW, int nH, Poi
//----------------------------------------------------------------------------
bool
Scene::GetGridSnapPointZ( bool bSketch, const Point3d& ptWin, const Point3d& ptGrid, Point3d& ptSel)
Scene::GetGridSnapPointZ( bool bSketch, const Point3d& ptWin, const Point3d& ptGrid, Point3d& ptSel) const
{
// recupero il riferimento di griglia
Frame3d frGrid = GetGridFrame() ;
@@ -468,7 +468,7 @@ Scene::FindCurveSnapPoint( int nSnap, const Point3d& ptWin, int nId, const Frame
//----------------------------------------------------------------------------
bool
Scene::VerifySnapPoint( const Point3d& ptP, const Point3d& ptWin, double& dMinSqDist)
Scene::VerifySnapPoint( const Point3d& ptP, const Point3d& ptWin, double& dMinSqDist) const
{
// il punto di riferimento deriva da XY su viewport e Z minima (più vicina a osservatore) da selezione
Point3d ptWinZ( ptWin.x, ptWin.y, GetSelectedObjMinWinZ()) ;
@@ -962,4 +962,23 @@ Scene::FindTextSnapPoint( int nSnap, const Point3d& ptWin, int nId, const Frame3
break ;
}
return bFound ;
}
}
//----------------------------------------------------------------------------
bool
Scene::GetPlaneSnapPoint( const Point3d& ptWin, const Plane3d& plPlane, Point3d& ptSel) const
{
// calcolo un punto e la direzione della linea di mira
Point3d ptLine ;
if ( ! UnProject( ptWin, ptLine))
return false ;
Vector3d vtLine = - m_vtDirCamera ;
// determino l'intersezione di questa linea con il piano
double dDenom = vtLine * plPlane.vtN ;
if ( fabs( dDenom) < COS_ORTO_ANG_ZERO)
return false ;
double dU = ( plPlane.dDist - ( ptLine - ORIG) * plPlane.vtN) / dDenom ;
ptSel = ptLine + dU * vtLine ;
return true ;
}