EgtGeomKernel 1.6c2 :

- aggiunte funzioni per circonferenze e archi tangenti.
This commit is contained in:
Dario Sassi
2015-03-16 07:38:43 +00:00
parent 3dd5d63a65
commit 6c14e51ef6
16 changed files with 1054 additions and 317 deletions
+47
View File
@@ -74,6 +74,53 @@ CalcLinePointTgCircle( const Point3d& ptP, const Point3d& ptCen, double dRad, BI
return 2 ;
}
//----------------------------------------------------------------------------
int
CalcCircleCenTgCircle( const Point3d& ptC, const Point3d& ptCen, double dRad, BIPNTVECTOR& vCenPtg)
{
// --- si lavora nel piano XY ---
// svuoto il vettore dei risultati (sono coppie centro-punto di tangenza)
vCenPtg.clear() ;
// se il raggio è negativo non ci sono soluzioni
if ( dRad < - EPS_SMALL)
return 0 ;
// versore e distanza tra i centri nel piano XY
Vector3d vtDir = ptCen - ptC ;
vtDir.z = 0 ;
double dDist = vtDir.Len() ;
vtDir /= dDist ;
// se il raggio è nullo ...
if ( dRad < EPS_SMALL) {
// se la distanza tra i punti è significativa, c'è una soluzione
if ( dDist > EPS_SMALL) {
vCenPtg.emplace_back( ptC, ptCen) ;
return 1 ;
}
// altrimenti, nessuna soluzione
else
return 0 ;
}
// se questa distanza è uguale al raggio, non ci sono soluzioni
if ( fabs( dDist - dRad) < EPS_SMALL)
return 0 ;
// se è minore del raggio, c'è una sola soluzione
else if ( dDist < dRad) {
vCenPtg.emplace_back( ptC, ptCen - vtDir * dRad) ;
return 1 ;
}
// altrimenti ci sono due soluzioni
else {
vCenPtg.emplace_back( ptC, ptCen - vtDir * dRad) ;
vCenPtg.emplace_back( ptC, ptCen + vtDir * dRad) ;
return 2 ;
}
}
//----------------------------------------------------------------------------
bool
FindPointOnArc( const CurveArc& crvArc, const Vector3d& vtDirP, const Point3d& ptNear, Point3d& ptP)