diff --git a/LuaLibs/ProcessLongDoubleCut.lua b/LuaLibs/ProcessLongDoubleCut.lua index 4813d7d..3e7adb8 100644 --- a/LuaLibs/ProcessLongDoubleCut.lua +++ b/LuaLibs/ProcessLongDoubleCut.lua @@ -1132,8 +1132,17 @@ function ProcessLong2Cut.Make( Proc, nPhase, nRawId, nPartId, bForcedBladeMaster elseif ( nSide ~= -1 or BD.DOWN_HEAD or BD.TURN) and nUseMillOnSide == 0 then -- determino la massima elevazione local dElev = 0 - local dFacElev1 = BL.GetFaceElevation( Proc, tFaceLong[1], b3Solid) - local dFacElev2 = BL.GetFaceElevation( Proc, tFaceLong[2], b3Solid) + + -- calcolo l'elevazione della faccia principale + local dFacElev1 = BL.GetFaceElevation( Proc, tFaceLong[vOrd[1]], b3Solid) + local dFacElev2 = BL.GetFaceElevation( Proc, tFaceLong[vOrd[2]], b3Solid) + local bFacesSwapped = false + if bInt and not bConvex and dFacElev1 - 10* GEO.EPS_SMALL > dFacElev2 then + vOrd[1], vOrd[2] = vOrd[2], vOrd[1] + dFacElev1, dFacElev2 = dFacElev2, dFacElev1 + bFacesSwapped = true + end + -- se facce concave e a 90 gradi, prendo l'elevazione minima if bOrtho then dElev = min( dFacElev1, dFacElev2) @@ -1174,10 +1183,10 @@ function ProcessLong2Cut.Make( Proc, nPhase, nRawId, nPartId, bForcedBladeMaster -- se chiuso e corto, applico svuotatura con fresa opportuna if nFaceLimit == 3 and Proc.Box:getDimX() < 2 * dToolDiam then -- svuotatura della prima faccia longitudinale - local bOk, sErr = MakeByPocketing( Proc, nPhase, nRawId, nPartId, nSide, tFaceLong[1], dFacElev1) + local bOk, sErr = MakeByPocketing( Proc, nPhase, nRawId, nPartId, nSide, tFaceLong[vOrd[1]], dFacElev1) -- svuotatura della seconda faccia longitudinale if not bOk then return bOk, sErr end - return MakeByPocketing( Proc, nPhase, nRawId, nPartId, nSide, tFaceLong[2], dFacElev2) + return MakeByPocketing( Proc, nPhase, nRawId, nPartId, nSide, tFaceLong[vOrd[2]], dFacElev2) end -- determino gli estremi local dStartDist = 0 @@ -1381,6 +1390,9 @@ function ProcessLong2Cut.Make( Proc, nPhase, nRawId, nPartId, bForcedBladeMaster EgtOutLog( sErr) return false, sErr end + if bFacesSwapped then + dSal, dEal = dEal, dSal + end -- aggiungo geometria EgtSetMachiningGeometry( {{ Proc.Id, tFaceLong[vOrd[i]]}}) -- limito opportunamente la lavorazione @@ -1545,6 +1557,12 @@ function ProcessLong2Cut.Make( Proc, nPhase, nRawId, nPartId, bForcedBladeMaster -- calcolo l'elevazione della faccia principale local dFacElev1 = BL.GetFaceElevation( Proc, tFaceLong[vOrd[1]], b3Solid) local dFacElev2 = BL.GetFaceElevation( Proc, tFaceLong[vOrd[2]], b3Solid) + local bFacesSwapped = false + if bInt and not bConvex and dFacElev1 - 10* GEO.EPS_SMALL > dFacElev2 then + vOrd[1], vOrd[2] = vOrd[2], vOrd[1] + dFacElev1, dFacElev2 = dFacElev2, dFacElev1 + bFacesSwapped = true + end -- se fresa di fianco o da sotto calcolo quanto l'utensile può andare vicino al limite se l'elevazione della faccia è minore del raggio utensile if nUseMillOnSide <= 1 or nSide == -1 then local dFacElev = max( dFacElev1, dFacElev2) @@ -1725,7 +1743,7 @@ function ProcessLong2Cut.Make( Proc, nPhase, nRawId, nPartId, bForcedBladeMaster local ptC3 = EgtSurfTmFacetCenter( Proc.Id, tFaceLong[vOrd[i]], GDB_ID.ROOT) local ptDir = ptC3 - ptM ; ptDir:normalize() -- se concave e dal versore Z della faccia (> -20°) o convesso e versore Z ( > -30°) decido se eseguire la lavoraione con la testa da sopra o da sotto - if ( not bConvex and vtN[vOrd[i]]:getZ() > -0.9397 and ptDir:getZ() > 0) or + if ( not bConvex and vtN[vOrd[i]]:getZ() > -0.9397 and ptDir:getZ() > -0.017) or ( bConvex and vtN[vOrd[i]]:getZ() > -0.866 and ptDir:getZ() > 0) then sNameF = sPrefix .. ( EgtGetName( Proc.Id) or tostring( Proc.Id)) .. '_' .. tostring( nM) nMchFId = EgtAddMachining( sNameF, sMilling) @@ -1833,6 +1851,14 @@ function ProcessLong2Cut.Make( Proc, nPhase, nRawId, nPartId, bForcedBladeMaster EgtSetMachiningParam( MCH_MP.FACEUSE, vFaceUse[vOrd[i]]) end end + + if bFacesSwapped then + local dCurrStartAddLen = EgtGetMachiningParam( MCH_MP.STARTADDLEN) + local dCurrEndAddLen = EgtGetMachiningParam( MCH_MP.ENDADDLEN) + EgtSetMachiningParam( MCH_MP.STARTADDLEN, dCurrEndAddLen) + EgtSetMachiningParam( MCH_MP.ENDADDLEN, dCurrStartAddLen) + end + -- imposto lato di lavoro e inversione EgtSetMachiningParam( MCH_MP.WORKSIDE, EgtIf( bIsMachDownUp, MCH_MILL_WS.RIGHT, MCH_MILL_WS.LEFT)) EgtSetMachiningParam( MCH_MP.INVERT, true)