diff --git a/LuaLibs/ProcessHeadCut.lua b/LuaLibs/ProcessHeadCut.lua index 97bc8ab..a849c1a 100644 --- a/LuaLibs/ProcessHeadCut.lua +++ b/LuaLibs/ProcessHeadCut.lua @@ -285,7 +285,7 @@ function ProcessHeadCut.Make( Proc, nPhase, nRawId, nPartId, dOvmHead, bNeedHCut -- tagli verticali bOk, sErr = AddVerticalPreCuts( AddProc, sCutting, 0, b3Raw) if not bOk then return bOk, sErr end - -- tagli a cubetti con superficie limitante + -- tagli a cubetti con eventuale superficie limitante bOk, sErr = Cut.Make( AddProc, nPhase, nRawId, nPartId, dOvmHead, nil, false, true, nil, nil, dCurrOvmT, nil, nLimitingSurf) end -- tagli aggiuntivi non necessari diff --git a/LuaLibs/ProcessSplit.lua b/LuaLibs/ProcessSplit.lua index 1829661..762ac15 100644 --- a/LuaLibs/ProcessSplit.lua +++ b/LuaLibs/ProcessSplit.lua @@ -24,6 +24,7 @@ local BL = require( 'BeamLib') local Fbs = require( 'FacesBySaw') local Cut = require( 'ProcessCut') local Pocket = require( 'FaceByPocket') +local Topology = require( 'FeatureTopology') EgtOutLog( ' ProcessSplit started', 1) @@ -245,7 +246,7 @@ end -- tagli verticali aggiuntivi local function AddVerticalPreCuts( Proc, sCutting, dCutXOffset, b3Raw ) local _, dimH = BL.GetFaceHvRefDim( Proc.Id, 0, b3Raw) - local nVerticalCuts = ceil( dimH / ( 2 * BD.MAX_DIM_DICE)) - 1 + local nVerticalCuts = ceil( dimH / ( BD.MAX_DIM_DICE)) - 1 local dVerticalSliceHeight = dimH / ( nVerticalCuts + 1) -- recupero il diametro dell'utensile local dSawDiam = 400 @@ -485,7 +486,38 @@ function ProcessSplit.Make( Proc, nPhase, nRawId, nPartId, nOrd, sDownOrSideOrSt if nQ05 < 2 or ( not bSplit and dMaxElev > dSawThickCheck) then -- controllo se è necessario un taglio con dicing o si deve proseguire ai casi standard if bSplit or dMaxElev > dSawThickCheck then - local bOk, sErr = Cut.Make( Proc, nNewPhase, nRawId, nPartId, dMaxElev, nil, false, true, b3Raw, sNotes, dCurrOvmT) + local bOk, sErr + if not bSplit and ( dimH > BD.MAX_LEN_DICE) and ( dLenEndRaw > dMinTailScrapForAdditionalCuts - 10 * GEO.EPS_SMALL) then + -- ad ogni offset di taglio dovrò fare prima i tagli verticali e poi i cubetti + for i = nCuts, 1, -1 do + local nAddGrpId = BL.GetAddGroup( Proc.PartId) + -- faccia di taglio all'offset corrente + local AddId = EgtCopyGlob( Proc.Id, nAddGrpId) or GDB_ID.NULL + local AddProc = { Id = AddId, Grp = Proc.Grp, Prc = Proc.Prc, Box = Proc.Box, Fct = Proc.Fct, Flg = Proc.Flg, PartId = Proc.PartId} + Topology.Classify( AddProc, b3Raw) + local dCutOffset = ( i - 1) * dOffsL + local vtMoveSurf = Vector3d( -dCutOffset, 0, 0) + EgtMove( AddId, vtMoveSurf, GDB_RT.GLOB) + -- eventuale faccia di taglio all'offset precedente, per limitare il dicing e evitare di tagliare i cubetti nel vuoto + local nLimitingSurf + if nCuts > 1 then + nLimitingSurf = EgtCopyGlob( Proc.Id, nAddGrpId) or GDB_ID.NULL + local dLastCutOffset = i * dOffsL + local vtMoveLimitingSurf = Vector3d( -dLastCutOffset + 10 * GEO.EPS_SMALL, 0, 0) + EgtMove( nLimitingSurf, vtMoveLimitingSurf, GDB_RT.GLOB) + local vtNLimitingSurf = EgtSurfTmFacetNormVersor( nLimitingSurf, 0) + if AreOppositeVectorApprox( X_AX(), vtNLimitingSurf) then EgtInvertSurf( nLimitingSurf) end + end + -- tagli verticali + bOk, sErr = AddVerticalPreCuts( AddProc, sCutting, 0, b3Raw) + if not bOk then return bOk, sErr end + -- tagli a cubetti con eventuale superficie limitante + bOk, sErr = Cut.Make( AddProc, nNewPhase, nRawId, nPartId, dMaxElev, nil, false, true, b3Raw, sNotes, dCurrOvmT, nil, nLimitingSurf) + end + -- tagli aggiuntivi non necessari + else + bOk, sErr = Cut.Make( Proc, nNewPhase, nRawId, nPartId, dMaxElev, nil, false, true, b3Raw, sNotes, dCurrOvmT) + end if sNotesFinal then EgtSetMachiningParam( MCH_MP.USERNOTES, sNotesFinal) end