EgtMachKernel 2.4b8 :

- migliorata gestione direzione utensile da lavorazione faccia in parallelo.
This commit is contained in:
DarioS
2022-03-08 11:19:52 +01:00
parent b82cdd0bc7
commit b059fe9486
2 changed files with 19 additions and 10 deletions
+19 -10
View File
@@ -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