|
|
|
@@ -4,6 +4,7 @@
|
|
|
|
|
-- 2022/06/10 Aggiunto il parametro dOvmTail per gestire sovramateriali in coda diversi da OVM_MID (sezioni alte e larghe)
|
|
|
|
|
-- 2022/07/12 Aggiunta gestione PF1250 e TURN.
|
|
|
|
|
-- 2023/02/14 Gestite le rotazioni di 90 deg nell'aggiornamento del grezzo.
|
|
|
|
|
-- 2024/09/03 In ApplyDiceCut, se possibile, i tagli paralleli sono fatti con un unico passaggio di fianco.
|
|
|
|
|
|
|
|
|
|
-- Tabella per definizione modulo
|
|
|
|
|
local ProcessScarfJoint = {}
|
|
|
|
@@ -134,7 +135,9 @@ end
|
|
|
|
|
local function ApplyDiceCut( vFaceOrd, nGoodFace1, nGoodFace4, nAddGrpId, b3Solid, ptC, vtN, Proc, vtRef, bHead, sCutting, dSawDiam, b3Raw, dNewDiceDim)
|
|
|
|
|
|
|
|
|
|
local bOk = true
|
|
|
|
|
local bOk2 = true
|
|
|
|
|
local sErr = ''
|
|
|
|
|
local sErr2 = ''
|
|
|
|
|
|
|
|
|
|
local vCuts = {}
|
|
|
|
|
if nGoodFace1 and nGoodFace4 and nGoodFace1 > 0 and nGoodFace4 > 0 then
|
|
|
|
@@ -185,9 +188,49 @@ local function ApplyDiceCut( vFaceOrd, nGoodFace1, nGoodFace4, nAddGrpId, b3Soli
|
|
|
|
|
-- extra taglio
|
|
|
|
|
local dExtraCut = EgtIf( i % 2 == 1, 0, BD.CUT_EXTRA)
|
|
|
|
|
-- lavoro la faccia
|
|
|
|
|
for j = 1, #vCuts[i] do
|
|
|
|
|
bOk, sErr = Fbs.MakeOne( vCuts[i][j], 0, sCutting, dSawDiam, vtOrthoO, dVzLimDwnUp, dExtraCut, BD.CUT_SIC, 0, 0, 0, nil, b3Raw)
|
|
|
|
|
if not bOk then return bOk, sErr end
|
|
|
|
|
local dMaxDepth = 0
|
|
|
|
|
if EgtMdbSetCurrMachining( sCutting) then
|
|
|
|
|
local sTuuid = EgtMdbGetCurrMachiningParam( MCH_MP.TUUID)
|
|
|
|
|
if EgtTdbSetCurrTool( EgtTdbGetToolFromUUID( sTuuid) or '') then
|
|
|
|
|
dMaxDepth = EgtTdbGetCurrToolMaxDepth() or dMaxDepth
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local dDiceFaceMaxH = 0
|
|
|
|
|
local dDiceFaceMinH = GEO.INFINITO
|
|
|
|
|
if ( i % 2) == 0 then
|
|
|
|
|
for cont = 1, #vCuts[i] do
|
|
|
|
|
local _, dDiceFaceH, dDiceFaceV = BL.GetFaceHvRefDim( vCuts[i][cont], 0)
|
|
|
|
|
dDiceFaceMaxH = max( dDiceFaceMaxH, dDiceFaceH)
|
|
|
|
|
-- calcolo lato orizzontale minore ipotizzando sia un trapezio
|
|
|
|
|
local dDiceFaceH2 = ( 2 * EgtSurfArea( vCuts[i][cont]) ) / dDiceFaceV - dDiceFaceH
|
|
|
|
|
dDiceFaceMinH = min( dDiceFaceMinH, dDiceFaceH2)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
-- se si può fare, faccio unico taglio parallelo
|
|
|
|
|
if ( i % 2) == 0 and ( dMaxDepth > dDiceFaceMaxH - 0.5 * dDiceFaceMinH + BD.CUT_EXTRA_MIN) then
|
|
|
|
|
local bDoubleCut = false
|
|
|
|
|
local dCutExtra = BD.CUT_EXTRA
|
|
|
|
|
if dMaxDepth < dDiceFaceMaxH + BD.CUT_EXTRA then
|
|
|
|
|
bDoubleCut = true
|
|
|
|
|
dCutExtra = - 0.5 * dDiceFaceMinH + BD.CUT_EXTRA_MIN
|
|
|
|
|
end
|
|
|
|
|
local nSurfToCut = EgtSurfTmBySewing( nAddGrpId, vCuts[i], false)
|
|
|
|
|
local nFaceUseCut1, nFaceUseCut2 = MCH_MILL_FU.ORTHO_BACK, MCH_MILL_FU.ORTHO_FRONT
|
|
|
|
|
if Proc.Tail then
|
|
|
|
|
nFaceUseCut1, nFaceUseCut2 = nFaceUseCut2, nFaceUseCut1
|
|
|
|
|
end
|
|
|
|
|
if bDoubleCut then
|
|
|
|
|
bOk, sErr = Fbs.MakeOne( nSurfToCut, 0, sCutting, dSawDiam, nFaceUseCut1, nil, dCutExtra, BD.CUT_SIC, 0, 0, 0, '', b3Raw, true)
|
|
|
|
|
if not bOk then return false, sErr end
|
|
|
|
|
end
|
|
|
|
|
bOk2, sErr2 = Fbs.MakeOne( nSurfToCut, 0, sCutting, dSawDiam, nFaceUseCut2, nil, dCutExtra, BD.CUT_SIC, 0, 0, 0, '', b3Raw)
|
|
|
|
|
if not bOk2 then return false, sErr2 end
|
|
|
|
|
else
|
|
|
|
|
for j = 1, #vCuts[i] do
|
|
|
|
|
bOk, sErr = Fbs.MakeOne( vCuts[i][j], 0, sCutting, dSawDiam, vtOrthoO, dVzLimDwnUp, dExtraCut, BD.CUT_SIC, 0, 0, 0, nil, b3Raw)
|
|
|
|
|
if not bOk then return bOk, sErr end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
-- lavoro la faccia interna in ogni caso
|
|
|
|
@@ -201,7 +244,7 @@ local function ApplyDiceCut( vFaceOrd, nGoodFace1, nGoodFace4, nAddGrpId, b3Soli
|
|
|
|
|
if vFaceOrd[3] ~= 0 then
|
|
|
|
|
-- inserisco la lavorazione
|
|
|
|
|
local vtOrthoO = Vector3d( vtRef)
|
|
|
|
|
local bOk, sErr = Fbs.MakeOne( Proc.Id, vFaceOrd[3] - 1, sCutting, dSawDiam, vtOrthoO, dVzLimDwnUp, 0, BD.CUT_SIC, 0, 0, 0, nil, b3Raw)
|
|
|
|
|
bOk, sErr = Fbs.MakeOne( Proc.Id, vFaceOrd[3] - 1, sCutting, dSawDiam, vtOrthoO, dVzLimDwnUp, 0, BD.CUT_SIC, 0, 0, 0, nil, b3Raw)
|
|
|
|
|
if not bOk then return bOk, sErr end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|