diff --git a/ExtDimension.cpp b/ExtDimension.cpp index c4d0c61..dd664ee 100644 --- a/ExtDimension.cpp +++ b/ExtDimension.cpp @@ -28,6 +28,7 @@ #include "/EgtDev/Include/EgtNumUtils.h" #include "/EgtDev/Include/EGkCurve.h" #include +#include using namespace std ; @@ -319,8 +320,23 @@ ExtDimension::SetAngularEx( const Point3d& ptV1, const Point3d& ptP1, dLenDir = m_vtDir.Len() ; } // assegno gli altri punti notevoli della quotatura - m_ptP1 = ptV1 - ( ptV1 - m_ptP6) * m_vtN * m_vtN ; - m_ptP2 = ptV2 - ( ptV2 - m_ptP6) * m_vtN * m_vtN ; + // se i ptV concidono con l'intersezione tra le linee le sposto leggermente verso l'altro punto di quel lato + Point3d ptV1New = ptV1 ; + Point3d ptV2New = ptV2 ; + if ( AreSamePointApprox( ptV1, ptV)) { + Vector3d vtDir1 ; Line1.GetStartDir( vtDir1) ; + double dLen ; Line1.GetLength( dLen) ; + dLen = max( min( 1., dLen/ 10), 0.01) ; + ptV1New = ptV1 + vtDir1 * dLen ; + } + if ( AreSamePointApprox( ptV2, ptV)) { + Vector3d vtDir2 ; Line2.GetStartDir( vtDir2) ; + double dLen ; Line2.GetLength( dLen) ; + dLen = max( min( 1., dLen/ 10), 0.01) ; + ptV2New = ptV2 + vtDir2 * dLen ; + } + m_ptP1 = ptV1New - ( ptV1New - m_ptP6) * m_vtN * m_vtN ; + m_ptP2 = ptV2New - ( ptV2New - m_ptP6) * m_vtN * m_vtN ; m_ptP5 = m_ptP6 + vtLine1 * dLenDir ; double dLen1 = Dist( m_ptP6, m_ptP1) ; m_ptP3 = m_ptP6 + vtLine1 * ( dLenDir + m_dExtLineLen * ( dLen1 < dLenDir ? 1 : -1)) ;