EgtMachKernel 2.4b8 :
- migliorata gestione direzione utensile da lavorazione faccia in parallelo.
This commit is contained in:
+19
-10
@@ -673,7 +673,8 @@ GetDirInFacePerpSide( int nFaceUse, const Vector3d& vtN, ICurveComposite* pCrvCo
|
||||
}
|
||||
pCrv = pCrvCompo->GetNextCurve() ;
|
||||
}
|
||||
if ( dCosMax > 0)
|
||||
// richiedo non più di 85deg di deviazione
|
||||
if ( dCosMax > 0.087)
|
||||
vtRef = vtPerpMax ;
|
||||
return vtRef ;
|
||||
}
|
||||
@@ -689,6 +690,9 @@ Operation::AdjustCurveFromSurf( ICurveComposite* pCrvCompo, int nToolDir, int nF
|
||||
Vector3d vtN ;
|
||||
pCrvCompo->GetExtrusion( vtN) ;
|
||||
|
||||
// direzione di riferimento
|
||||
Vector3d vtRef ;
|
||||
|
||||
// direzioni lati precedente e successivo
|
||||
Vector3d vtDirPrev ;
|
||||
Vector3d vtDirNext ;
|
||||
@@ -713,7 +717,7 @@ Operation::AdjustCurveFromSurf( ICurveComposite* pCrvCompo, int nToolDir, int nF
|
||||
// altrimenti
|
||||
else {
|
||||
// determino la direzione di riferimento
|
||||
Vector3d vtRef = GetDirInFacePerpSide( nFaceUse, vtN, pCrvCompo) ;
|
||||
vtRef = GetDirInFacePerpSide( nFaceUse, vtN, pCrvCompo) ;
|
||||
// la curva gira in senso antiorario attorno al contorno faccia vista dalla normale uscente
|
||||
// elimino i segmenti che hanno la direzione di riferimento a destra o quasi (46deg o 16deg)
|
||||
const double COS_ANG_MAX = ( bLarge ? cos( 46.01 * DEGTORAD) : cos( 16.01 * DEGTORAD)) ;
|
||||
@@ -780,14 +784,19 @@ Operation::AdjustCurveFromSurf( ICurveComposite* pCrvCompo, int nToolDir, int nF
|
||||
}
|
||||
else { // nToolDir == TOOL_PARAL o TOOL_PAR_SLANT
|
||||
// sistemo versore
|
||||
//Point3d ptStart, ptEnd ;
|
||||
//pCrvCompo->GetStartPoint( ptStart) ;
|
||||
//pCrvCompo->GetEndPoint( ptEnd) ;
|
||||
//Vector3d vtT = ptEnd - ptStart ;
|
||||
Vector3d vtT ; pCrvCompo->GetMidDir( vtT) ;
|
||||
Vector3d vtExtr = vtN ^ vtT ;
|
||||
if ( ! vtExtr.Normalize())
|
||||
return false ;
|
||||
Vector3d vtExtr ;
|
||||
Vector3d vtTm ; pCrvCompo->GetMidDir( vtTm) ;
|
||||
Vector3d vtEm = vtN ^ vtTm ;
|
||||
if ( vtEm.Normalize())
|
||||
vtExtr = vtEm ;
|
||||
Vector3d vtTs ; pCrvCompo->GetStartDir( vtTs) ;
|
||||
Vector3d vtEs = vtN ^ vtTs ;
|
||||
if ( vtEs.Normalize() && vtEs * vtRef > vtExtr * vtRef)
|
||||
vtExtr = vtEs ;
|
||||
Vector3d vtTe ; pCrvCompo->GetEndDir( vtTe) ;
|
||||
Vector3d vtEe = vtN ^ vtTe ;
|
||||
if ( vtEe.Normalize() && vtEe * vtRef > vtExtr * vtRef)
|
||||
vtExtr = vtEe ;
|
||||
if ( nToolDir == TOOL_PAR_SLANT) {
|
||||
Vector3d vtDirPN = -vtDirPrev + vtDirNext ;
|
||||
// se le direzioni prima e dopo non sono troppo diverse tra loro (15deg) e la loro media è normalizzabile
|
||||
|
||||
Reference in New Issue
Block a user