EgtGeomKernel :

- correzione ad archi di elica per DeltaN significativo ora pari a 1/10 EPS_SMALL.
This commit is contained in:
DarioS
2022-05-16 12:24:27 +02:00
parent 3f2b6b2115
commit d1b22114d0
+11 -11
View File
@@ -831,7 +831,7 @@ CurveArc::GetEndPoint( Point3d& ptEnd) const
double dAng = m_dAngCenDeg * DEGTORAD ;
Vector3d vtDir = cos( dAng) * m_VtS + sin( dAng) * ( m_VtN ^ m_VtS) ;
ptEnd = m_PtCen + m_dRad * vtDir ;
if ( abs( m_dDeltaN) > EPS_SMALL)
if ( abs( m_dDeltaN) > 0.1 * EPS_SMALL)
ptEnd += m_dDeltaN * m_VtN ;
return true ;
@@ -849,7 +849,7 @@ CurveArc::GetMidPoint( Point3d& ptMid) const
double dAng = 0.5 * m_dAngCenDeg * DEGTORAD ;
Vector3d vtDir = cos( dAng) * m_VtS + sin( dAng) * ( m_VtN ^ m_VtS) ;
ptMid = m_PtCen + m_dRad * vtDir ;
if ( abs( m_dDeltaN) > EPS_SMALL)
if ( abs( m_dDeltaN) > 0.1 * EPS_SMALL)
ptMid += ( 0.5 * m_dDeltaN) * m_VtN ;
return true ;
@@ -909,7 +909,7 @@ CurveArc::GetDir( double dU, Vector3d& vtDir) const
Vector3d vtRad = cos( dAng) * m_VtS + sin( dAng) * ( m_VtN ^ m_VtS) ;
// calcolo della tangente nel punto finale
vtDir = ( m_dRad * m_dAngCenDeg * DEGTORAD) * ( m_VtN ^ vtRad) ;
if ( abs( m_dDeltaN) > EPS_SMALL)
if ( abs( m_dDeltaN) > 0.1 * EPS_SMALL)
vtDir += m_dDeltaN * m_VtN ;
// normalizzo
return vtDir.Normalize( EPS_ZERO) ;
@@ -935,13 +935,13 @@ CurveArc::GetPointD1D2( double dU, Side nS, Point3d& ptPos, Vector3d* pvtDer1, V
// calcolo del punto
ptPos = m_PtCen + m_dRad * vtDir ;
if ( abs( m_dDeltaN) > EPS_SMALL)
if ( abs( m_dDeltaN) > 0.1 * EPS_SMALL)
ptPos += ( dU * m_dDeltaN) * m_VtN ;
// calcolo della derivata prima
if ( pvtDer1 != nullptr) {
*pvtDer1 = ( m_dRad * m_dAngCenDeg * DEGTORAD) * ( m_VtN ^ vtDir) ;
if ( abs( m_dDeltaN) > EPS_SMALL)
if ( abs( m_dDeltaN) > 0.1 * EPS_SMALL)
*pvtDer1 += m_dDeltaN * m_VtN ;
}
@@ -963,7 +963,7 @@ CurveArc::GetLength( double& dLen) const
// lunghezza dell'arco piano
dLen = m_dRad * abs( m_dAngCenDeg) * DEGTORAD ;
// aggiunta eventuale parte ortogonale
if ( abs( m_dDeltaN) > EPS_SMALL)
if ( abs( m_dDeltaN) > 0.1 * EPS_SMALL)
dLen = sqrt( dLen * dLen + m_dDeltaN * m_dDeltaN) ;
return ( dLen > EPS_SMALL) ;
@@ -1204,7 +1204,7 @@ CurveArc::Invert( void)
return false ;
// il centro va spostato di DeltaN
if ( abs( m_dDeltaN) > EPS_SMALL)
if ( abs( m_dDeltaN) > 0.1 * EPS_SMALL)
m_PtCen += m_dDeltaN * m_VtN ;
// il versore normale rimane inalterato
// il versore iniziale diventa quello finale
@@ -1447,7 +1447,7 @@ CurveArc::TrimStartAtLen( double dLenTrim)
dAngRot = m_dAngCenDeg * dLenTrim / dLen ;
m_VtS.Rotate( m_VtN, dAngRot) ;
m_dAngCenDeg -= dAngRot ;
if ( abs( m_dDeltaN) > EPS_SMALL) {
if ( abs( m_dDeltaN) > 0.1 * EPS_SMALL) {
dMoveN = m_dDeltaN * dLenTrim / dLen ;
m_PtCen.Translate( m_VtN * dMoveN) ;
m_dDeltaN -= dMoveN ;
@@ -1477,7 +1477,7 @@ CurveArc::TrimEndAtLen( double dLenTrim)
// eseguo il trim
if ( ( dLen - dLenTrim) > EPS_ZERO) {
m_dAngCenDeg *= dLenTrim / dLen ;
if ( abs( m_dDeltaN) > EPS_SMALL)
if ( abs( m_dDeltaN) > 0.1 * EPS_SMALL)
m_dDeltaN *= dLenTrim / dLen ;
}
@@ -2109,7 +2109,7 @@ ArcApproxer::GetPoint( double& dU, Point3d& ptP)
if ( ! m_bInside && m_nCurrPnt == m_nTotPnt - 1) {
dU = 1 ;
ptP = m_PtCen + m_vtA1 * m_dRad ;
if ( abs( m_dDeltaN) > EPS_SMALL)
if ( abs( m_dDeltaN) > 0.1 * EPS_SMALL)
ptP += ( dU * m_dDeltaN) * m_VtN ;
return true ;
}
@@ -2130,7 +2130,7 @@ ArcApproxer::GetPoint( double& dU, Point3d& ptP)
ptP = m_PtCen + m_vtA1 * m_dRad ;
else
ptP = m_PtCen + ( vtA1p + m_vtA1) * ( m_dRad / ( 1 + m_dCosA)) ;
if ( abs( m_dDeltaN) > EPS_SMALL)
if ( abs( m_dDeltaN) > 0.1 * EPS_SMALL)
ptP += ( dU * m_dDeltaN) * m_VtN ;
return true ;