EgtGeomKernel :
- migliorie nella intersezione tra triangoli - correzione a IntersSurfTmSurfTm che non interpretava correttamente i nuovi risultati di IntersTriaTria - correzioni a Zmap per Mortising con movimento nel piano ma non perpendicolare all'asse dell'utensile.
This commit is contained in:
+40
-29
@@ -611,7 +611,7 @@ VolZmap::MillingStep( const Point3d& ptPs, const Vector3d& vtDs, const Vector3d&
|
||||
Mrt_ZMilling( i, ptLs[i], ptLe[i], vtLs[i], vtALs[i]) ;
|
||||
break ;
|
||||
case Tool::CHISEL :
|
||||
Chs_ZMilling( i, ptLs[i], ptLe[i], vtLs[i], vtALs[i]) ;
|
||||
Chs_Milling( i, ptLs[i], ptLe[i], vtLs[i], vtALs[i]) ;
|
||||
break ;
|
||||
}
|
||||
}
|
||||
@@ -628,6 +628,10 @@ VolZmap::MillingStep( const Point3d& ptPs, const Vector3d& vtDs, const Vector3d&
|
||||
break ;
|
||||
case Tool::CONEMILL :
|
||||
Conus_ZMilling( i, ptLs[i], ptLe[i], vtLs[i]) ;
|
||||
break ;
|
||||
case Tool::MORTISER :
|
||||
Mrt_Milling( i, ptLs[i], ptLe[i], vtLs[i], vtALs[i]) ;
|
||||
break ;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -697,6 +701,9 @@ VolZmap::MillingStep( const Point3d& ptPs, const Vector3d& vtDs, const Vector3d&
|
||||
case Tool::CONEMILL :
|
||||
Conus_XYMilling( i, ptLs[i], ptLe[i], vtLs[i]) ;
|
||||
break ;
|
||||
case Tool::MORTISER :
|
||||
Mrt_Milling( i, ptLs[i], ptLe[i], vtLs[i], vtALs[i]) ;
|
||||
break ;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -745,9 +752,7 @@ VolZmap::MillingStep( const Point3d& ptPs, const Vector3d& vtDs, const Vector3d&
|
||||
Conus_Milling( i, ptLs[i], ptLe[i], vtLs[i]) ;
|
||||
break ;
|
||||
case Tool::MORTISER :
|
||||
// ammesso solo movimento perpendicolare all'asse utensile
|
||||
if ( dSqLLong < EPS_SMALL * EPS_SMALL)
|
||||
Mrt_Milling( i, ptLs[i], ptLe[i], vtLs[i], vtALs[i]) ;
|
||||
Mrt_Milling( i, ptLs[i], ptLe[i], vtLs[i], vtALs[i]) ;
|
||||
break ;
|
||||
case Tool::CHISEL :
|
||||
// ammesso solo movimento perpendicolare all'asse utensile
|
||||
@@ -1601,12 +1606,10 @@ VolZmap::Mrt_ZMilling( int nGrid, const Point3d& ptS, const Point3d& ptE, const
|
||||
{
|
||||
// Proiezione della traiettoria sul piano di movimento
|
||||
Vector3d vtPlV = vtToolDir ^ vtAux ;
|
||||
|
||||
if ( vtPlV * ( ptE - ptS) < 0)
|
||||
vtPlV *= - 1 ;
|
||||
|
||||
Point3d ptPlS = ptS ;
|
||||
Point3d ptPlE = ptS + ( ptE - ptS) * vtPlV * vtPlV ;
|
||||
Point3d ptPlE = ptS + ( ( ptE - ptS) - ( ptE - ptS) * vtAux * vtAux) ;
|
||||
|
||||
// Scompongo la mortasatrice in solidi semplici
|
||||
|
||||
@@ -1615,7 +1618,7 @@ VolZmap::Mrt_ZMilling( int nGrid, const Point3d& ptS, const Point3d& ptE, const
|
||||
double dLenY = m_Tool.GetMrtChsThickness() ;
|
||||
double dLenZ = m_Tool.GetHeigth() - m_Tool.GetCornRadius() ;
|
||||
|
||||
CompPar_ZMilling( nGrid, dLenX, dLenY, dLenZ, ptPlS, ptPlE, vtToolDir, vtAux) ;
|
||||
CompPar_Milling( nGrid, dLenX, dLenY, dLenZ, ptPlS, ptPlE, vtToolDir, vtAux) ;
|
||||
|
||||
// Se la punta è di tipo bull-nose
|
||||
if ( abs( m_Tool.GetMrtChsWidth() - 2 * m_Tool.GetCornRadius()) > EPS_SMALL) {
|
||||
@@ -1626,12 +1629,15 @@ VolZmap::Mrt_ZMilling( int nGrid, const Point3d& ptS, const Point3d& ptE, const
|
||||
dLenX = abs( m_Tool.GetMrtChsWidth() - 2 * m_Tool.GetCornRadius()) ;
|
||||
dLenZ = m_Tool.GetCornRadius() ;
|
||||
|
||||
// Cilindro ( il moto dei due cilindri si sovrappone, quindi è inutile
|
||||
CompPar_Milling( nGrid, dLenX, dLenY, dLenZ, ptTipS, ptTipE, vtToolDir, vtAux) ;
|
||||
// Cilindri ( il moto dei due cilindri non sempre si sovrappone, quindi è fondamentale
|
||||
// eseguire due volte il conto
|
||||
Point3d ptSminus = ptTipS - ( 0.5 * dLenX) * vtPlV + 0.5 * dLenY * vtAux ;
|
||||
Point3d ptEplus = ptTipE + ( 0.5 * dLenX) * vtPlV + 0.5 * dLenY * vtAux ;
|
||||
|
||||
CompCyl_Milling( nGrid, ptSminus, ptEplus, vtAux, dLenY, m_Tool.GetCornRadius(), false, false) ;
|
||||
Point3d ptSCyl = ptTipS - ( 0.5 * dLenX) * vtPlV + 0.5 * dLenY * vtAux ;
|
||||
Point3d ptECyl = ptTipE - ( 0.5 * dLenX) * vtPlV + 0.5 * dLenY * vtAux ;
|
||||
CompCyl_Milling( nGrid, ptSCyl, ptECyl, vtAux, dLenY, m_Tool.GetCornRadius(), false, false) ;
|
||||
ptSCyl = ptTipS + ( 0.5 * dLenX) * vtPlV + 0.5 * dLenY * vtAux ;
|
||||
ptECyl = ptTipE + ( 0.5 * dLenX) * vtPlV + 0.5 * dLenY * vtAux ;
|
||||
CompCyl_Milling( nGrid, ptSCyl, ptECyl, vtAux, dLenY, m_Tool.GetCornRadius(), false, false) ;
|
||||
}
|
||||
|
||||
// se la punta è di tipo sfera
|
||||
@@ -2792,9 +2798,11 @@ bool
|
||||
VolZmap::Mrt_Milling( int nGrid, const Point3d& ptS, const Point3d& ptE, const Vector3d& vtToolDir, const Vector3d& vtAux)
|
||||
{
|
||||
// Proiezione della traiettoria sul piano dei movimenti possibili
|
||||
Point3d ptSp = ptS ;
|
||||
Vector3d vtMoveDir = vtToolDir ^ vtAux ;
|
||||
Point3d ptEp = ptS + ( ptE - ptS) * vtMoveDir * vtMoveDir ;
|
||||
Vector3d vtVOnP = vtToolDir ^ vtAux ;
|
||||
if ( vtVOnP * ( ptE - ptS) < 0)
|
||||
vtVOnP *= -1 ;
|
||||
Point3d ptPlS = ptS ;
|
||||
Point3d ptPlE = ptS + ( ( ptE - ptS) - (ptE - ptS) * vtAux * vtAux) ;
|
||||
|
||||
// Scompongo la mortasatrice in solidi semplici
|
||||
|
||||
@@ -2803,35 +2811,38 @@ VolZmap::Mrt_Milling( int nGrid, const Point3d& ptS, const Point3d& ptE, const V
|
||||
double dLenY = m_Tool.GetMrtChsThickness() ;
|
||||
double dLenZ = m_Tool.GetHeigth() - m_Tool.GetCornRadius() ;
|
||||
|
||||
CompPar_Milling( nGrid, dLenX, dLenY, dLenZ, ptS, ptEp, vtToolDir, vtAux) ;
|
||||
Point3d ptBasePS = ptPlS - 0.5 * dLenZ * vtToolDir + 0.5 * dLenY * vtAux ;
|
||||
Point3d ptBasePE = ptPlE - 0.5 * dLenZ * vtToolDir + 0.5 * dLenY * vtAux ;
|
||||
|
||||
CompPar_Milling( nGrid, dLenX, dLenZ, dLenY, ptBasePS, ptBasePE, vtAux, vtToolDir) ;
|
||||
// Se la punta è di tipo bull-nose
|
||||
if ( abs( m_Tool.GetMrtChsWidth() - 2 * m_Tool.GetCornRadius()) > EPS_SMALL) {
|
||||
|
||||
// Parallelepipedo di punta
|
||||
Point3d ptTipS = ptS - dLenZ * vtToolDir ;
|
||||
Point3d ptTipE = ptEp - dLenZ * vtToolDir ;
|
||||
Point3d ptTipPS = ptBasePS - 0.5 * dLenZ * vtToolDir ;
|
||||
Point3d ptTipPE = ptBasePE - 0.5 * dLenZ * vtToolDir ;
|
||||
|
||||
dLenX = abs( m_Tool.GetMrtChsWidth() - 2 * m_Tool.GetCornRadius()) ;
|
||||
dLenZ = m_Tool.GetCornRadius() ;
|
||||
|
||||
Vector3d vtVOnP = vtToolDir ^ vtAux ;
|
||||
if ( vtVOnP * ( ptTipE - ptTipS) < 0)
|
||||
vtVOnP *= - 1 ;
|
||||
ptTipPS -= 0.5 * dLenZ * vtToolDir ;
|
||||
ptTipPE -= 0.5 * dLenZ * vtToolDir ;
|
||||
|
||||
CompPar_Milling( nGrid, dLenX, dLenZ, dLenY, ptTipPS, ptTipPE, vtAux, vtToolDir) ;
|
||||
// Cilindri
|
||||
Point3d ptSminus = ptTipS - ( 0.5 * dLenX) * vtVOnP + 0.5 * dLenY * vtAux ;
|
||||
Point3d ptEminus = ptTipE - ( 0.5 * dLenX) * vtVOnP + 0.5 * dLenY * vtAux ;
|
||||
Point3d ptSplus = ptTipS + ( 0.5 * dLenX) * vtVOnP + 0.5 * dLenY * vtAux ;
|
||||
Point3d ptEplus = ptTipE + ( 0.5 * dLenX) * vtVOnP + 0.5 * dLenY * vtAux ;
|
||||
CompCyl_Milling( nGrid, ptSminus, ptEplus, vtAux, dLenY, m_Tool.GetCornRadius(), false, false) ;
|
||||
Point3d ptSminus = ptTipPS + 0.5 * dLenZ * vtToolDir - ( 0.5 * dLenX) * vtVOnP ;
|
||||
Point3d ptEminus = ptTipPE + 0.5 * dLenZ * vtToolDir - ( 0.5 * dLenX) * vtVOnP ;
|
||||
CompCyl_Milling( nGrid, ptSminus, ptEminus, vtAux, dLenY, m_Tool.GetCornRadius(), false, false) ;
|
||||
Point3d ptSplus = ptTipPS + 0.5 * dLenZ * vtToolDir + ( 0.5 * dLenX) * vtVOnP ;
|
||||
Point3d ptEplus = ptTipPE + 0.5 * dLenZ * vtToolDir + ( 0.5 * dLenX) * vtVOnP ;
|
||||
CompCyl_Milling( nGrid, ptSplus, ptEplus, vtAux, dLenY, m_Tool.GetCornRadius(), false, false) ;
|
||||
}
|
||||
|
||||
// se la punta è di tipo sfera
|
||||
else {
|
||||
// Cilindro
|
||||
Point3d ptCylS = ptS - dLenZ * vtToolDir + 0.5 * dLenY * vtAux ;
|
||||
Point3d ptCylE = ptEp - dLenZ * vtToolDir + 0.5 * dLenY * vtAux ;
|
||||
Point3d ptCylS = ptBasePS - 0.5 * dLenZ * vtToolDir ;
|
||||
Point3d ptCylE = ptBasePE - 0.5 * dLenZ * vtToolDir ;
|
||||
CompCyl_Milling( nGrid, ptCylS, ptCylE, vtAux, dLenY, m_Tool.GetCornRadius(), false, false) ;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user