diff --git a/LuaLibs/ProcessLapJoint.lua b/LuaLibs/ProcessLapJoint.lua index d6acd24..6d26ba0 100644 --- a/LuaLibs/ProcessLapJoint.lua +++ b/LuaLibs/ProcessLapJoint.lua @@ -141,6 +141,9 @@ local Q_SIDE_ROUGH_TOOL = '' -- i local Q_ANTISPLINT_TYPE = '' -- i local Q_BLADE_ON_ALONG_FACE = '' -- i local Q_MAX_ELEVATION = '' -- d +local Q_SAW_PLUS_CHAIN = '' -- i +local Q_FORCE_CHAINSAW = '' -- i + -- variabile smussi local bMadeChamfer @@ -182,6 +185,7 @@ local function AssignQIdent( Proc) Q_MAX_ELEVATION = 'Q10' Q_STAIRCASE = '' Q_SAW_PLUS_CHAIN = 'Q11' + Q_FORCE_CHAINSAW = 'Q12' if ( Proc.Grp == 3 or Proc.Grp == 4) and Proc.Prc == 16 then Q_FORCE_BLADE = 'Q01' -- i @@ -5731,17 +5735,27 @@ local function MakeMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead, bSinglePa if nChamfer < 0 then return false, sErrCham end + -- eventuale forzatura sega a catena + local bForceChainsaw = ( EgtGetInfo( Proc.Id, Q_FORCE_CHAINSAW, 'i') or 0) > 0 -- se è un tunnel provo a vedere se è possibile lavorarlo con la svuotatura o con la sega catena if bClosedOrthoFaces then local bTryWithBlades = true + local dDimMin, dDimMax, dDepth, vtOrtho, nLundIdFace + -- forzata sega a catena + if bForceChainsaw then + -- ottengo le dimensioni del tunnel + dDimMin, dDimMax, dDepth, vtOrtho, nLundIdFace = BL.GetTunnelDimension( Proc, nPartId) -- lavoro fessura con svuotature (singola o doppia contrapposta) - local sMyMchFind = 'Pocket' - local nOk, sErr, dDimMin, dDimMax, dDepth, vtOrtho, + else + local sMyMchFind = 'Pocket' + local nOk, sErr + nOk, sErr, dDimMin, dDimMax, dDepth, vtOrtho, nLundIdFace = MakeByPockets( Proc, nPhase, nRawId, nPartId, nChamfer, dDepthCham, nAddGrpId, sMyMchFind, false, b3Solid, bClosedOrthoFaces) - if nOk < 0 then - return false, sErr - elseif nOk > 0 then - bTryWithBlades = false + if nOk < 0 then + return false, sErr + elseif nOk > 0 then + bTryWithBlades = false + end end -- Se la svuotatura precedente non è stata fatta e chamfer non è mutuamente esclusivo provo con la sega-catena if bTryWithBlades and nChamfer < 2 then @@ -6232,6 +6246,10 @@ local function MakeMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead, bSinglePa if bForceSideMill then sPocketing = nil end + -- se forzata sega a catena + if bForceChainsaw then + sPocketing = nil + end -- leggo parametro Q local nQAntisplintResult = EgtGetInfo( Proc.Id, Q_ANTISPLINT_TYPE, 'i') or 0 -- se lavorazione fresa come lama disabilito eventuale antischeggia @@ -6453,8 +6471,9 @@ local function MakeMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead, bSinglePa sWarn = EgtIf( #sWarn > 0, sWarn .. '\n' .. sWarn2, sWarn2) end end - -- in tutti gli altri casi lancio la MakeByPockets (lavorazione singola o doppia contrapposta, fondo della tasca una faccia fittizia perpendicolare al lato lungo) - else + -- in tutti gli altri casi, a meno che non sia forzata sega a catena, lancio la MakeByPockets + -- lavorazione singola o doppia contrapposta, fondo della tasca una faccia fittizia perpendicolare al lato lungo + elseif not bForceChainsaw then -- se 2 facce setto i parametri corretti per la MakeByPockets if bForceSideMill and Proc.Fct == 2 then bIs3Faces = false diff --git a/LuaLibs/ProcessLongDoubleCut.lua b/LuaLibs/ProcessLongDoubleCut.lua index c16493b..93b49f5 100644 --- a/LuaLibs/ProcessLongDoubleCut.lua +++ b/LuaLibs/ProcessLongDoubleCut.lua @@ -949,18 +949,6 @@ function ProcessLong2Cut.Make( Proc, nPhase, nRawId, nPartId, bForcedBladeMaster end -- altrimenti concavo else - -- se effettivamente un taglio longitudinale e lama non taglia completamente, limito la lavorazione. Altrimenti esco. - for k = 1, #vOrd do - if vWidth[vOrd[k]] + BD.CUT_SIC > dMaxDepth then - if not( ProcessLong2Cut.Identify( Proc)) then - return false - else - local sWarn2 = 'Warning in ' .. ( EgtGetName( Proc.Id) or tostring( Proc.Id)) .. ' : elevation (' .. EgtNumToString( vWidth[vOrd[k]], 1) .. ') bigger than max saw depth (' .. EgtNumToString( dMaxDepth, 1) .. ')' - if not sWarn then sWarn = '' end - sWarn = EgtIf( #sWarn > 0, sWarn .. '\n' .. sWarn2, sWarn2) - end - end - end -- si percorrono i lati alto e basso della faccia for i = 1, nC do -- Posizione braccio portatesta @@ -990,6 +978,22 @@ function ProcessLong2Cut.Make( Proc, nPhase, nRawId, nPartId, bForcedBladeMaster EgtOutLog( sErr) return false, sErr end + -- se effettivamente un taglio longitudinale e lama non taglia completamente, limito la lavorazione. Altrimenti esco. + local dCheckDepth = 0 + if bCanUseBlade then + dCheckDepth = dMaxDepth + elseif bCanUseUnderBlade then + dCheckDepth = dMaxDepthDn + end + if vWidth[vOrd[j]] + 100 * GEO.EPS_SMALL > dCheckDepth then + if not( ProcessLong2Cut.Identify( Proc)) then + return false + else + local sWarn2 = 'Warning in ' .. ( EgtGetName( Proc.Id) or tostring( Proc.Id)) .. ' : elevation (' .. EgtNumToString( vWidth[vOrd[j]], 1) .. ') bigger than max saw depth (' .. EgtNumToString( dCheckDepth, 1) .. ')' + if not sWarn then sWarn = '' end + sWarn = EgtIf( #sWarn > 0, sWarn .. '\n' .. sWarn2, sWarn2) + end + end -- se lama da sotto verifico se la componente Y della profondità di taglio supera la capacità della lama if nSide <= 0 and bCanUseUnderBlade then if ( vWidth[vOrd[j]] / 2) > dMaxDepthDn then @@ -1003,7 +1007,7 @@ function ProcessLong2Cut.Make( Proc, nPhase, nRawId, nPartId, bForcedBladeMaster local dLioPerp if j == 1 then -- il primo taglio lo faccio completo se angolo interno maggiore di 90 - local dMinOffsBigFace = max( vWidth[vOrd[j]] - dMaxDepth, 0) + local dMinOffsBigFace = max( vWidth[vOrd[j]] - dCheckDepth, 0) -- se la faccia è più grande del massimo materiale lama, allora limito lavorazione if dMinOffsBigFace > 0 then dOffset = dMinOffsBigFace @@ -1015,7 +1019,7 @@ function ProcessLong2Cut.Make( Proc, nPhase, nRawId, nPartId, bForcedBladeMaster end dLioPerp = vWidth[vOrd[j]] + BD.CUT_SIC else -- il secondo ridotto della distanza minima e della componente spessore della lama - local dMinOffsBigFace = max( vWidth[vOrd[j]] - dMaxDepth, 0) + local dMinOffsBigFace = max( vWidth[vOrd[j]] - dCheckDepth, 0) -- se la faccia è più grande del massimo materiale lama, allora limito lavorazione if dMinOffsBigFace > 0 then dOffset = dMinOffsBigFace