EgtMachKernel :
- migliorata gestione approcci e retrazioni in fresature con lame.
This commit is contained in:
+10
-10
@@ -324,7 +324,7 @@ Operation::GetElevation( int nPhase, const Point3d& ptP, const Vector3d& vtTool,
|
||||
return false ;
|
||||
// considero più direzioni sulla circonferenza
|
||||
const int MIN_STEP = 8 ;
|
||||
const double LEN_STEP = 50 ;
|
||||
const double LEN_STEP = 25 ;
|
||||
int nStep = max( int( ( 2 * PIGRECO * dRad) / LEN_STEP), MIN_STEP) ;
|
||||
Vector3d vtRad = FromUprightOrtho( vtTool) * dRad ;
|
||||
for ( int i = 0 ; i < nStep ; ++ i) {
|
||||
@@ -344,7 +344,7 @@ Operation::GetElevation( int nPhase, const Point3d& ptP, const Vector3d& vtTool,
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Operation::GetPointUnderRaw( const Point3d& ptP, const Vector3d& vtTool, double dToolRad, double dToolRadForElev,
|
||||
double dToolLen, bool bIsSaw, double dSafeZ, double& dElev) const
|
||||
double dToolLen, bool bIsSaw, double dSafeZ, const Vector3d& vtDir, double& dElev) const
|
||||
{
|
||||
// punto a metà lunghezza utensile
|
||||
Point3d ptQ = ptP + vtTool * dToolLen / 2 ;
|
||||
@@ -359,10 +359,10 @@ Operation::GetPointUnderRaw( const Point3d& ptP, const Vector3d& vtTool, double
|
||||
// extra ingombro reale in Z
|
||||
double dExtraZ = sqrt( 1 - vtTool.z * vtTool.z) * dToolRad ;
|
||||
// direzione di fuga per l'elevazione
|
||||
Vector3d vtDir = vtTool ;
|
||||
if ( bIsSaw || vtDir.z < - EPS_SMALL)
|
||||
vtDir.z = 0 ;
|
||||
vtDir.Normalize() ;
|
||||
Vector3d vtMyDir = vtDir ;
|
||||
if ( bIsSaw || vtMyDir.z < - EPS_SMALL)
|
||||
vtMyDir.z = 0 ;
|
||||
vtMyDir.Normalize() ;
|
||||
// determino la posizione del punto rispetto al grezzo
|
||||
// ciclo sui grezzi
|
||||
int nRawId = m_pMchMgr->GetFirstRawPart() ;
|
||||
@@ -380,17 +380,17 @@ Operation::GetPointUnderRaw( const Point3d& ptP, const Vector3d& vtTool, double
|
||||
// determino elevazione del punto rispetto al grezzo a metà altezza
|
||||
Point3d ptTest( ptP.x, ptP.y, dRawCentZ) ;
|
||||
double dNewElev ;
|
||||
if ( GetElevation( m_nPhase, ptTest - 10 * EPS_SMALL * vtTool, vtTool, dToolRadForElev, vtDir, dNewElev))
|
||||
if ( GetElevation( m_nPhase, ptTest - 10 * EPS_SMALL * vtTool, vtTool, dToolRadForElev, vtMyDir, dNewElev))
|
||||
dElev = max( dElev, dNewElev) ;
|
||||
// se direzione di fuga quasi orizzontale (max 30 deg) e ingombro utensile rilevante rispetto ad altezza grezzo
|
||||
if ( vtDir.z < 0.5 && dToolDimZ > dRawDimZ / 2) {
|
||||
if ( vtMyDir.z < 0.5 && dToolDimZ > dRawDimZ / 2) {
|
||||
// determino elevazione del punto rispetto al grezzo a metà altezza più metà ingombro utensile
|
||||
ptTest = Point3d( ptP.x, ptP.y, dRawCentZ + dToolDimZ / 2) ;
|
||||
if ( GetElevation( m_nPhase, ptTest - 10 * EPS_SMALL * vtTool, vtTool, dToolRadForElev, vtDir, dNewElev))
|
||||
if ( GetElevation( m_nPhase, ptTest - 10 * EPS_SMALL * vtTool, vtTool, dToolRadForElev, vtMyDir, dNewElev))
|
||||
dElev = max( dElev, dNewElev) ;
|
||||
// determino elevazione del punto rispetto al grezzo a metà altezza meno metà ingombro utensile
|
||||
ptTest = Point3d( ptP.x, ptP.y, dRawCentZ - dToolDimZ / 2) ;
|
||||
if ( GetElevation( m_nPhase, ptTest - 10 * EPS_SMALL * vtTool, vtTool, dToolRadForElev, vtDir, dNewElev))
|
||||
if ( GetElevation( m_nPhase, ptTest - 10 * EPS_SMALL * vtTool, vtTool, dToolRadForElev, vtMyDir, dNewElev))
|
||||
dElev = max( dElev, dNewElev) ;
|
||||
}
|
||||
return true ;
|
||||
|
||||
Reference in New Issue
Block a user