- in Split refactoring e implemento pretaglio a zero
- in HeadCut piccole migliorie in pretaglio a zero
This commit is contained in:
+54
-21
@@ -22,6 +22,7 @@ local Fbs = require( 'FacesBySaw')
|
||||
local Cut = require( 'ProcessCut')
|
||||
local Pocket = require( 'FaceByPocket')
|
||||
local Topology = require( 'FeatureTopology')
|
||||
local Split = require( 'ProcessSplit')
|
||||
|
||||
EgtOutLog( ' ProcessHeadCut started', 1)
|
||||
|
||||
@@ -29,6 +30,10 @@ EgtOutLog( ' ProcessHeadCut started', 1)
|
||||
local BD = require( 'BeamData')
|
||||
local ML = require( 'MachiningLib')
|
||||
|
||||
if BD.PRECUT_HEAD == nil then
|
||||
BD.PRECUT_HEAD = true
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
-- Riconoscimento della feature
|
||||
function ProcessHeadCut.Identify( Proc)
|
||||
@@ -176,12 +181,13 @@ local function AddVerticalPreCuts( Proc, sCutting, dCutXOffset, b3Raw)
|
||||
bOk, sErr = Fbs.MakeOne( Proc.Id, 0, sCutting, dSawDiam, nFaceUse, nil, -0.1 -dCutXOffset, BD.CUT_SIC, dVerticalCutOffset, 0, 0, '', b3Raw, nil, nil, nil, bForceTangentLeadInOut)
|
||||
if not bOk then return bOk, sErr end
|
||||
end
|
||||
|
||||
return bOk, sErr
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
-- tagli standard
|
||||
local function MakeStandardCuts( Proc, b3Raw, nCuts, dOffsetBetweenCuts, HeadCutType, Cutting1Data, Cutting2Data, dStartOffset)
|
||||
local function MakeStandardCuts( Proc, b3Raw, nCuts, dOffsetBetweenCuts, HeadCutType, Cutting1Data, Cutting2Data, dStartOffset, dOvmHead)
|
||||
local PrecutType = { bBigSectionCut = HeadCutType.bBigSectionCut, bHorizCut = HeadCutType.bHorizCut, bDoubleHorizCut = HeadCutType.bDoubleHorizCut, bDoubleCut = HeadCutType.bDoubleCut, bNeedVerticalAddedCuts = false, bNeedHorizontalAddedCuts = false}
|
||||
if not HeadCutType.bDoubleHorizCut then
|
||||
-- flag di lavorazione faccia
|
||||
@@ -218,9 +224,13 @@ local function MakeStandardCuts( Proc, b3Raw, nCuts, dOffsetBetweenCuts, HeadCut
|
||||
|
||||
-- per travi alte faccio dei tagli orizzontali aggiuntivi
|
||||
if HeadCutType.bNeedHorizontalAddedCuts then
|
||||
local bOkPrecut, sErrPrecut = MakeStandardCuts( Proc, b3Raw, 1, 0, PrecutType, Cutting1Data, Cutting2Data, dStartOffset)
|
||||
if not bOkPrecut then
|
||||
return false, sErrPrecut
|
||||
-- taglio a zero (con lama) per evitare problemi con grezzo più lungo del previsto. Se BigSection il pretaglio è già stato fatto.
|
||||
if not ( HeadCutType.bBigSectionCut) and BD.PRECUT_HEAD then
|
||||
dStartOffset = dOvmHead
|
||||
local bOkPrecut, sErrPrecut = MakeStandardCuts( Proc, b3Raw, 1, 0, PrecutType, Cutting1Data, Cutting2Data, dStartOffset)
|
||||
if not bOkPrecut then
|
||||
return false, sErrPrecut
|
||||
end
|
||||
end
|
||||
local nHorizontalCuts = ceil( Proc.Face[1].HeightTrimmed / BD.MAX_DIM_DICE) - 1
|
||||
local dHorizontalSliceHeight = Proc.Face[1].HeightTrimmed / ( nHorizontalCuts + 1)
|
||||
@@ -248,6 +258,14 @@ local function MakeStandardCuts( Proc, b3Raw, nCuts, dOffsetBetweenCuts, HeadCut
|
||||
return true, sWarn
|
||||
end
|
||||
|
||||
-- taglio a zero (con lama) per evitare problemi con grezzo più lungo del previsto. Se BigSection il pretaglio è già stato fatto.
|
||||
if not ( HeadCutType.bBigSectionCut) and BD.PRECUT_HEAD and HeadCutType.bNeedVerticalAddedCuts then
|
||||
dStartOffset = dOvmHead
|
||||
local bOkPrecut, sErrPrecut = MakeStandardCuts( Proc, b3Raw, 1, 0, PrecutType, Cutting1Data, Cutting2Data, dStartOffset)
|
||||
if not bOkPrecut then
|
||||
return false, sErrPrecut
|
||||
end
|
||||
end
|
||||
-- se necessari tagli in doppio, eseguo gli opposti
|
||||
if HeadCutType.bDoubleCut then
|
||||
-- gli accorciamenti vanno invertiti per il taglio opposto
|
||||
@@ -266,10 +284,6 @@ local function MakeStandardCuts( Proc, b3Raw, nCuts, dOffsetBetweenCuts, HeadCut
|
||||
local dCutOffset = ( i - 1) * dOffsetBetweenCuts
|
||||
-- se trave larga effettuo tagli verticali aggiuntivi
|
||||
if HeadCutType.bNeedVerticalAddedCuts then
|
||||
local bOkPrecut, sErrPrecut = MakeStandardCuts( Proc, b3Raw, 1, 0, PrecutType, Cutting1Data, Cutting2Data, dStartOffset)
|
||||
if not bOkPrecut then
|
||||
return false, sErrPrecut
|
||||
end
|
||||
local bOk, sErr = AddVerticalPreCuts( Proc, Cutting1Data.sCutting, dCutOffset, b3Raw)
|
||||
if not bOk then return bOk, sErr end
|
||||
end
|
||||
@@ -301,6 +315,14 @@ local function MakeStandardCuts( Proc, b3Raw, nCuts, dOffsetBetweenCuts, HeadCut
|
||||
local dAccStart = 0
|
||||
local dVzLimDwnUp
|
||||
if BD.TURN then dVzLimDwnUp = -2 end
|
||||
-- taglio a zero (con lama) per evitare problemi con grezzo più lungo del previsto. Se BigSection il pretaglio è già stato fatto.
|
||||
if not ( HeadCutType.bBigSectionCut) and BD.PRECUT_HEAD and HeadCutType.bNeedVerticalAddedCuts then
|
||||
dStartOffset = dOvmHead
|
||||
local bOkPrecut, sErrPrecut = MakeStandardCuts( Proc, b3Raw, 1, 0, PrecutType, Cutting1Data, Cutting2Data, dStartOffset)
|
||||
if not bOkPrecut then
|
||||
return false, sErrPrecut
|
||||
end
|
||||
end
|
||||
-- eseguo i tagli da sotto necessari
|
||||
for i = nCuts, 1, -1 do
|
||||
local dCutOffset = ( i - 1) * dOffsetBetweenCuts
|
||||
@@ -318,10 +340,6 @@ local function MakeStandardCuts( Proc, b3Raw, nCuts, dOffsetBetweenCuts, HeadCut
|
||||
end
|
||||
-- se trave larga effettuo tagli verticali aggiuntivi
|
||||
if HeadCutType.bNeedVerticalAddedCuts then
|
||||
local bOkPrecut, sErrPrecut = MakeStandardCuts( Proc, b3Raw, 1, 0, PrecutType, Cutting1Data, Cutting2Data, dStartOffset)
|
||||
if not bOkPrecut then
|
||||
return false, sErrPrecut
|
||||
end
|
||||
local bOk, sErr = AddVerticalPreCuts( Proc, Cutting1Data.sCutting, dCutOffset, b3Raw)
|
||||
if not bOk then return bOk, sErr end
|
||||
end
|
||||
@@ -396,7 +414,6 @@ function ProcessHeadCut.Make( Proc, nPhase, nRawId, nPartId, dOvmHead, bNeedHCut
|
||||
local Cutting2Data = { sCutting = sCutting2, dSawDiam = dSawDiam2, dMaxDepth = dMaxDepth2, dSawThick = dSawThick2}
|
||||
-- dati sul taglio di testa da effettuare
|
||||
local HeadCutType = { bBigSectionCut = bBigSectionCut, bHorizCut = bHorizCut, bDoubleHorizCut = bDoubleHorizCut, bDoubleCut = bDoubleCut, bNeedVerticalAddedCuts = bNeedVerticalAddedCuts, bNeedHorizontalAddedCuts = bNeedHorizontalAddedCuts}
|
||||
local PrecutType = { bBigSectionCut = HeadCutType.bBigSectionCut, bHorizCut = HeadCutType.bHorizCut, bDoubleHorizCut = HeadCutType.bDoubleHorizCut, bDoubleCut = HeadCutType.bDoubleCut, bNeedVerticalAddedCuts = false, bNeedHorizontalAddedCuts = false}
|
||||
-- dati geometrici del taglio
|
||||
local ptC, vtN = EgtSurfTmFacetCenter( Proc.Id, 0, GDB_ID.ROOT)
|
||||
-- se non obbligatorio e coincide con inizio grezzo, non va fatto
|
||||
@@ -421,16 +438,32 @@ function ProcessHeadCut.Make( Proc, nPhase, nRawId, nPartId, dOvmHead, bNeedHCut
|
||||
else
|
||||
dMaxElev = Proc.Box:getMax():getX() - b3Raw:getMin():getX()
|
||||
end
|
||||
-- controllo se è necessario un taglio con dicing o si deve proseguire ai casi standard
|
||||
if dMaxElev > dSawThickCheck then
|
||||
local bOk, sErr
|
||||
-- taglio a zero (con sega a catena o mix catena + lama) per evitare problemi con grezzo più lungo del previsto
|
||||
-- TODO qui mettere sega a catena
|
||||
local dStartOffset = dOvmHead
|
||||
local bOkPrecut, sErrPrecut = MakeStandardCuts( Proc, b3Raw, 1, 0, PrecutType, Cutting1Data, Cutting2Data, dStartOffset)
|
||||
-- taglio a zero (con sega a catena o mix catena + lama) per evitare problemi con grezzo più lungo del previsto
|
||||
if BD.PRECUT_HEAD then
|
||||
-- recupero dati utensile della sega a catena più lunga a disposizione
|
||||
local sSawing = ML.FindSawing( 'SawingForSplitting', nil, nil, 'Longest')
|
||||
if not sSawing then
|
||||
sSawing = ML.FindSawing( 'Sawing', nil, nil, 'Longest')
|
||||
end
|
||||
local dChainSawMaxMat = 0
|
||||
local dChainSawLen = 0
|
||||
if EgtMdbSetCurrMachining( sSawing or '') then
|
||||
local sTuuid = EgtMdbGetCurrMachiningParam( MCH_MP.TUUID)
|
||||
if EgtTdbSetCurrTool( EgtTdbGetToolFromUUID( sTuuid) or '') then
|
||||
dChainSawMaxMat = EgtTdbGetCurrToolParam( MCH_TP.MAXMAT) or dChainSawMaxMat
|
||||
dChainSawLen = EgtTdbGetCurrToolParam( MCH_TP.LEN) or dChainSawLen
|
||||
end
|
||||
end
|
||||
local SawingData = { sSawing = sSawing, dChainSawMaxMat = dChainSawMaxMat, dChainSawLen = dChainSawLen, bInvert = true}
|
||||
local dOffset = dOvmHead
|
||||
local bOkPrecut, sErrPrecut = Split.MakeBigSectionSplitting( Proc, b3Raw, dOffset, SawingData, Cutting2Data)
|
||||
if not bOkPrecut then
|
||||
return false, sErrPrecut
|
||||
end
|
||||
end
|
||||
-- controllo se è necessario un taglio con dicing o si deve proseguire ai casi standard
|
||||
if dMaxElev > dSawThickCheck then
|
||||
local bOk, sErr
|
||||
-- se trave larga effettuo tagli verticali aggiuntivi
|
||||
if bNeedVerticalAddedCuts then
|
||||
-- ad ogni offset di taglio dovrò fare prima i tagli verticali e poi i cubetti
|
||||
@@ -485,7 +518,7 @@ function ProcessHeadCut.Make( Proc, nPhase, nRawId, nPartId, dOvmHead, bNeedHCut
|
||||
end
|
||||
end
|
||||
|
||||
local bOk, sErr = MakeStandardCuts( Proc, b3Raw, nCuts, dOffsL, HeadCutType, Cutting1Data, Cutting2Data)
|
||||
local bOk, sErr = MakeStandardCuts( Proc, b3Raw, nCuts, dOffsL, HeadCutType, Cutting1Data, Cutting2Data, nil, dOvmHead)
|
||||
|
||||
return bOk, sErr
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user