EgtGeomKernel 1.6w3 :

- correzioni nell'intersezione di archi tangenti o quasi
- pulizia uso distanze e relative costanti minime.
This commit is contained in:
Dario Sassi
2016-11-14 06:18:44 +00:00
parent 2c29509f29
commit 0dd8afedf9
17 changed files with 111 additions and 54 deletions
+6 -6
View File
@@ -1329,7 +1329,7 @@ CurveArc::ModifyEnd( const Point3d& ptNewEnd)
Point3d ptEndIntr = ptNewEnd ;
ptEndIntr.ToLoc( frIntr) ;
// se coincidono nel piano XY, è cambiato solo il deltaN
if ( SqDistXY( ptOldEndIntr, ptEndIntr) < EPS_ZERO * EPS_ZERO) {
if ( AreSamePointXYExact( ptOldEndIntr, ptEndIntr)) {
m_dDeltaN += ptEndIntr.z - ptOldEndIntr.z ;
}
// altrimenti, calcolo un arco ausiliario nel riferimento intrinseco con i nuovi dati
@@ -1779,7 +1779,7 @@ CurveArc::CalcPointAngle( const Point3d& ptP, double& dAngDeg) const
//----------------------------------------------------------------------------
bool
CurveArc::CalcPointParamPosiz( const Point3d& ptP, double& dU, int& nPos) const
CurveArc::MyCalcPointParamPosiz( const Point3d& ptP, double& dU, int& nPos, double dLinTol) const
{
// calcolo la posizione angolare
double dAngDeg ;
@@ -1789,13 +1789,13 @@ CurveArc::CalcPointParamPosiz( const Point3d& ptP, double& dU, int& nPos) const
dU = dAngDeg / m_dAngCenDeg ;
// verifica posizione punto su arco
nPos = PP_NULL ; // fuori
if ( fabs( DiffAngle( dAngDeg, 0) * DEGTORAD * m_dRad) < EPS_SMALL) {
nPos = ( IsACircle() ? PP_MID : PP_START) ; // se cerchio interno, altrimenti vicino a inizio
if ( fabs( DiffAngle( dAngDeg, 0) * DEGTORAD * m_dRad) < dLinTol) {
nPos = ( IsACircle() ? PP_MID : PP_START) ; // se cerchio è interno, altrimenti vicino a inizio
dU = AngleNearAngle( dAngDeg, 0) / m_dAngCenDeg ;
dU = max( dU, 0.) ;
}
else if ( fabs( DiffAngle( dAngDeg, m_dAngCenDeg) * DEGTORAD * m_dRad) < EPS_SMALL) {
nPos = ( IsACircle() ? PP_MID : PP_END) ; // se cerchio interno, altrimenti vicino a fine
else if ( fabs( DiffAngle( dAngDeg, m_dAngCenDeg) * DEGTORAD * m_dRad) < dLinTol) {
nPos = ( IsACircle() ? PP_MID : PP_END) ; // se cerchio è interno, altrimenti vicino a fine
dU = AngleNearAngle( dAngDeg, m_dAngCenDeg) / m_dAngCenDeg ;
dU = min( dU, 1.) ;
}