|
|
|
@@ -196,27 +196,33 @@ local function ApplyDiceCut( vFaceOrd, nGoodFace1, nGoodFace4, nAddGrpId, b3Soli
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- controllo per eseguire solo un taglio ottimizzato
|
|
|
|
|
local bExecJustOneCut = false
|
|
|
|
|
local dDiceFaceDim = GEO.INFINITO
|
|
|
|
|
if ( i % 2) == 0 then
|
|
|
|
|
for cont = 1, #vCuts[i] do
|
|
|
|
|
local _, dDiceFaceH, dDiceFaceV = BL.GetFaceHvRefDim( vCuts[i][cont], 0)
|
|
|
|
|
-- se feature verso Z, si ammette anche lavorazione in doppio
|
|
|
|
|
if AreSameVectorApprox( vtRef, Z_AX()) then
|
|
|
|
|
if dMaxDepth * 2 > dDiceFaceH + BD.CUT_EXTRA then
|
|
|
|
|
bExecJustOneCut = true
|
|
|
|
|
dDiceFaceDim = dDiceFaceH
|
|
|
|
|
break
|
|
|
|
|
end
|
|
|
|
|
elseif AreSameVectorApprox( vtRef, Y_AX()) or AreSameVectorApprox( vtRef, -Y_AX()) then
|
|
|
|
|
if dMaxDepth > dDiceFaceV + BD.CUT_EXTRA then
|
|
|
|
|
bExecJustOneCut = true
|
|
|
|
|
dDiceFaceDim = dDiceFaceV
|
|
|
|
|
break
|
|
|
|
|
-- se non ho intersezione con la faccia tappo posso fare il taglio sul fianco
|
|
|
|
|
if not nGoodFace1 or nGoodFace1 == 0 then
|
|
|
|
|
-- controllo per eseguire solo un taglio ottimizzato
|
|
|
|
|
local bExecJustOneCut = false
|
|
|
|
|
local dDiceFaceDim = GEO.INFINITO
|
|
|
|
|
if ( i % 2) == 0 then
|
|
|
|
|
for cont = 1, #vCuts[i] do
|
|
|
|
|
local _, dDiceFaceH, dDiceFaceV = BL.GetFaceHvRefDim( vCuts[i][cont], 0)
|
|
|
|
|
-- se feature verso Z, si ammette anche lavorazione in doppio
|
|
|
|
|
if AreSameVectorApprox( vtRef, Z_AX()) then
|
|
|
|
|
if dMaxDepth * 2 > dDiceFaceH + BD.CUT_EXTRA then
|
|
|
|
|
bExecJustOneCut = true
|
|
|
|
|
dDiceFaceDim = dDiceFaceH
|
|
|
|
|
break
|
|
|
|
|
end
|
|
|
|
|
elseif AreSameVectorApprox( vtRef, Y_AX()) or AreSameVectorApprox( vtRef, -Y_AX()) then
|
|
|
|
|
if dMaxDepth > dDiceFaceV + BD.CUT_EXTRA then
|
|
|
|
|
bExecJustOneCut = true
|
|
|
|
|
dDiceFaceDim = dDiceFaceV
|
|
|
|
|
break
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
-- se c'è intersezione non ci deve essere ExtraCut
|
|
|
|
|
else
|
|
|
|
|
dExtraCut = 0
|
|
|
|
|
end
|
|
|
|
|
-- se si può fare, faccio unico taglio parallelo
|
|
|
|
|
if bExecJustOneCut then
|
|
|
|
@@ -522,10 +528,20 @@ function ProcessScarfJoint.Make( Proc, nPhase, nRawId, nPartId, dOvmHead, dOvmTa
|
|
|
|
|
else
|
|
|
|
|
dDiamMax = EgtIf( abs( frMor:getVersX():getY()) < abs( frMor:getVersY():getY()), dL, dW)
|
|
|
|
|
end
|
|
|
|
|
-- determino la distanza tra le due facce inclinate
|
|
|
|
|
-- determino la distanza tra le due facce inclinate per determinare elevazione
|
|
|
|
|
local dDistFaces
|
|
|
|
|
if vFaceOrd[4] ~= 0 then
|
|
|
|
|
dDistFaces = abs((ptC[vFaceOrd[2]]-ptC[vFaceOrd[4]])*vtN[vFaceOrd[2]])
|
|
|
|
|
local nElevationFace1 = 0
|
|
|
|
|
-- controllo estensione faccia 1
|
|
|
|
|
if vFaceOrd[1] ~= 0 then
|
|
|
|
|
frMor, dL, dW = EgtSurfTmFacetMinAreaRectangle( Proc.Id, vFaceOrd[1]-1, GDB_ID.ROOT)
|
|
|
|
|
if abs(vtRef:getY()) > 0.866 then
|
|
|
|
|
nElevationFace1 = EgtIf( abs( frMor:getVersX():getZ()) < abs( frMor:getVersY():getY()), dL, dW)
|
|
|
|
|
else
|
|
|
|
|
nElevationFace1 = EgtIf( abs( frMor:getVersX():getY()) < abs( frMor:getVersY():getY()), dL, dW)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
dDistFaces = max( abs((ptC[vFaceOrd[2]]-ptC[vFaceOrd[4]])*vtN[vFaceOrd[2]]), nElevationFace1)
|
|
|
|
|
end
|
|
|
|
|
-- recupero la lavorazione. considerando l dimensione del lato e l'affondamento
|
|
|
|
|
local sPocketing
|
|
|
|
|