diff --git a/LuaLibs/ProcessSplit.lua b/LuaLibs/ProcessSplit.lua index cacc585..634418a 100644 --- a/LuaLibs/ProcessSplit.lua +++ b/LuaLibs/ProcessSplit.lua @@ -266,6 +266,10 @@ end --------------------------------------------------------------------- -- split per sezioni grandi con sega a catena o mix catena + lama function ProcessSplit.MakeBigSectionSplitting( Proc, b3Raw, dOffset, SawingData, Cutting2Data) + local sNotes = '' + if SawingData.bSplit ~= nil then + sNotes = 'Precut;' + end local bigSectionSplitType -- se pezzo non troppo alto, taglio singolo da sopra if b3Raw:getDimZ() + BD.CUT_EXTRA_MIN < SawingData.dChainSawMaxMat + 10 * GEO.EPS_SMALL then @@ -284,7 +288,7 @@ function ProcessSplit.MakeBigSectionSplitting( Proc, b3Raw, dOffset, SawingData, -- in base alle scelte precedenti, applico le lavorazioni if bigSectionSplitType == "single horizontal" then local dCutDepth = b3Raw:getDimZ() + BD.CUT_EXTRA_MIN - local sNotesSplit = EgtIf( SawingData.bSplit, 'Split;', '') + local sNotesSplit = EgtIf( SawingData.bSplit, 'Split;', sNotes) -- verifico se sega a catena lunga e devo quindi estendere ingresso e uscita perchè è probabile che non riesca a ruotare sopra al pezzo local bExtendStartEnd local dMinLengthLongChainSaw = 630 @@ -295,28 +299,28 @@ function ProcessSplit.MakeBigSectionSplitting( Proc, b3Raw, dOffset, SawingData, if not bOk then return bOk, sErr end elseif bigSectionSplitType == "single vertical" then local dCutDepth = b3Raw:getDimY() + BD.CUT_EXTRA_MIN - local sNotesSplit = EgtIf( SawingData.bSplit, 'Split;', '') + local sNotesSplit = EgtIf( SawingData.bSplit, 'Split;', sNotes) local bOk, sErr = MakeCutByChainSaw( Proc.Id, SawingData.sSawing, MCH_MILL_FU.PARAL_FRONT, dCutDepth, sNotesSplit, dOffset, nil, SawingData.bInvert) if not bOk then return bOk, sErr end elseif bigSectionSplitType == "double vertical" then local dCutDepth = 0.5 * b3Raw:getDimY() + BD.CUT_EXTRA_MIN - local sNotesSplit = EgtIf( SawingData.bSplit, 'Presplit;', '') + local sNotesSplit = EgtIf( SawingData.bSplit, 'Presplit;', sNotes) local bOk, sErr = MakeCutByChainSaw( Proc.Id, SawingData.sSawing, MCH_MILL_FU.PARAL_BACK, dCutDepth, sNotesSplit, dOffset, nil, SawingData.bInvert) if not bOk then return bOk, sErr end - sNotesSplit = EgtIf( SawingData.bSplit, 'Split;', '') + sNotesSplit = EgtIf( SawingData.bSplit, 'Split;', sNotes) bOk, sErr = MakeCutByChainSaw( Proc.Id, SawingData.sSawing, MCH_MILL_FU.PARAL_FRONT, dCutDepth, sNotesSplit, dOffset, nil, SawingData.bInvert) if not bOk then return bOk, sErr end elseif bigSectionSplitType == "double horizontal" then -- sega a catena da sopra local dChainSawCutDepth = b3Raw:getDimZ() + BD.CUT_EXTRA_MIN - Cutting2Data.dMaxDepth - local sNotesSplit = EgtIf( SawingData.bSplit, 'Presplit;', '') + local sNotesSplit = EgtIf( SawingData.bSplit, 'Presplit;', sNotes) local bOk, sErr = MakeCutByChainSaw( Proc.Id, SawingData.sSawing, MCH_MILL_FU.PARAL_TOP, dChainSawCutDepth, sNotesSplit, dOffset, nil, SawingData.bInvert) if not bOk then return bOk, sErr end -- lama da sotto local dCutExtra = -dChainSawCutDepth + BD.CUT_EXTRA_MIN local dVzLimDwnUp if BD.TURN then dVzLimDwnUp = -2 end - local sNotes = EgtIf( SawingData.bSplit, 'Split;', '') + local sNotes = EgtIf( SawingData.bSplit, 'Split;', sNotes) local bMaximizeVerticalDepth = true bOk, sErr = Fbs.MakeOne( Proc.Id, 0, Cutting2Data.sCutting, Cutting2Data.dSawDiam, MCH_MILL_FU.ORTHO_TOP, dVzLimDwnUp, dCutExtra, BD.CUT_SIC, dOffset, 0, 0, sNotes, b3Raw, nil, bMaximizeVerticalDepth) if not bOk then return false, sErr end @@ -359,7 +363,10 @@ end --------------------------------------------------------------------- -- tagli standard local function MakeStandardCuts( Proc, b3Raw, nCuts, dOffsetBetweenCuts, TailCutType, Cutting1Data, Cutting2Data, dStartOffset, dLenEndRaw) - local PrecutType = { bBigSectionCut = TailCutType.bBigSectionCut, bHorizCut = TailCutType.bHorizCut, bDoubleHorizCut = TailCutType.bDoubleHorizCut, bDoubleCut = TailCutType.bDoubleCut, bSplit = TailCutType.bSplit, bNeedVerticalAddedCuts = false, bNeedHorizontalAddedCuts = false} + if not TailCutType.sType then + TailCutType.sType = '' + end + local PrecutType = { bBigSectionCut = TailCutType.bBigSectionCut, bHorizCut = TailCutType.bHorizCut, bDoubleHorizCut = TailCutType.bDoubleHorizCut, bDoubleCut = TailCutType.bDoubleCut, bSplit = TailCutType.bSplit, sType = 'Precut', bNeedVerticalAddedCuts = false, bNeedHorizontalAddedCuts = false} if not TailCutType.bDoubleHorizCut then -- flag di lavorazione faccia local nOrthoOpposite = EgtIf( TailCutType.bHorizCut, MCH_MILL_FU.ORTHO_DOWN, MCH_MILL_FU.ORTHO_BACK) @@ -427,8 +434,10 @@ local function MakeStandardCuts( Proc, b3Raw, nCuts, dOffsetBetweenCuts, TailCut if not bOk then return false, sErr end end -- taglio verticale - local sInfo = 'PreCut;' - if i == 1 then sInfo = 'Cut;' end + local sInfo = 'Precut' + if i == 1 and TailCutType.sType ~= 'Precut' then + sInfo = 'Cut' + end local bOk, sErr = Fbs.MakeOne( Proc.Id, 0, Cutting1Data.sCutting, Cutting1Data.dSawDiam, nOrthoOpposite, nil, dCutExtra, BD.CUT_SIC, dCutXOffset, dAccStart, dAccEnd, sInfo, b3Raw) if not bOk then return false, sErr end end @@ -473,7 +482,7 @@ local function MakeStandardCuts( Proc, b3Raw, nCuts, dOffsetBetweenCuts, TailCut if TailCutType.bSplit then sNotes = EgtIf( i == 1, 'Split;', 'Presplit;') else - sNotes = EgtIf( i == 1, 'Cut;', 'Precut;') + sNotes = EgtIf( i == 1 and TailCutType.sType ~= 'Precut', 'Cut;', 'Precut;') end -- se primo taglio da sopra e PF o ONE richiedo risalita preliminare a Zmax if i == nCuts and TailCutType.bHorizCut and BD.C_SIMM and not BD.DOWN_HEAD then @@ -539,7 +548,7 @@ local function MakeStandardCuts( Proc, b3Raw, nCuts, dOffsetBetweenCuts, TailCut if TailCutType.bSplit then sNotes = EgtIf( i == 1, 'Split;', 'Presplit;') else - sNotes = EgtIf( i == 1, 'Cut;', 'Precut;') + sNotes = EgtIf( i == 1 and TailCutType.sType ~= 'Precut', 'Cut;', 'Precut;') end local bOk, sErr = Fbs.MakeOne( Proc.Id, 0, Cutting1Data.sCutting, Cutting1Data.dSawDiam, MCH_MILL_FU.ORTHO_DOWN, dVzLimDwnUp, dCutExtra, BD.CUT_SIC, dCutOffset, dAccStart, 0, sNotes, b3Raw) if not bOk then return false, sErr end @@ -637,7 +646,7 @@ function ProcessSplit.Make( Proc, nPhase, nRawId, nPartId, nOrd, sDownOrSideOrSt -- aggiorno ingombro del grezzo corrente con quello del successivo b3Raw:Add( b3NextRaw) else - dLenEndRaw = 0 + dLenEndRaw = min( dOvmTail, abs( ptC:getX() - b3Raw:getMin():getX())) end end -- determino la necessità di tagli aggiuntivi @@ -647,7 +656,7 @@ function ProcessSplit.Make( Proc, nPhase, nRawId, nPartId, nOrd, sDownOrSideOrSt -- dati lavorazioni sopra e sotto local Cutting1Data = { sCutting = sCutting, dSawDiam = dSawDiam, dMaxDepth = dSawMaxDepth, dSawThick = dSawThick, dMaxVertDepth = dMaxVertDepth} local Cutting2Data = { sCutting = sCutting2, dSawDiam = dSawDiam2, dMaxDepth = dSawMaxDepth2, dSawThick = dSawThick2} - local SawingData = { sSawing = sSawing, dChainSawMaxMat = dChainSawMaxMat, dChainSawLen = dChainSawLen, bSplit = bSplit} + local SawingData = { sSawing = sSawing, dChainSawMaxMat = dChainSawMaxMat, dChainSawLen = dChainSawLen, bSplit = bSplit or false} -- dati sul taglio di coda da effettuare local TailCutType = { bBigSectionCut = bBigSectionCut, bHorizCut = bHorizCut, bDoubleHorizCut = bDoubleHorizCut, bDoubleCut = bDoubleCut, bSplit = bSplit, bNeedVerticalAddedCuts = bNeedVerticalAddedCuts, bNeedHorizontalAddedCuts = bNeedHorizontalAddedCuts} -- se taglio per pezzi alti e larghi