DataBeam :
- correzioni e migliorie.
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
-- ProcessLongDoubleCut.lua by Egaltech s.r.l. 2019/05/25
|
||||
-- ProcessLongDoubleCut.lua by Egaltech s.r.l. 2019/07/08
|
||||
-- Gestione calcolo doppio taglio longitudinale per Travi
|
||||
|
||||
-- Tabella per definizione modulo
|
||||
@@ -51,9 +51,9 @@ function ProcessLong2Cut.Make( Proc, nPhase, nRawId, nPartId)
|
||||
--end
|
||||
-- verifico posizione (+1=sopra, -1=sotto, 0=sui lati)
|
||||
local nSide = 0
|
||||
if vtN[1]:getZ() > 0 and vtN[2]:getZ() > 0 then
|
||||
if vtN[1]:getZ() > -GEO.EPS_SMALL and vtN[2]:getZ() > -GEO.EPS_SMALL then
|
||||
nSide = 1
|
||||
elseif vtN[1]:getZ() < 0 and vtN[2]:getZ() < 0 then
|
||||
elseif vtN[1]:getZ() < GEO.EPS_SMALL and vtN[2]:getZ() < GEO.EPS_SMALL then
|
||||
nSide = -1
|
||||
end
|
||||
-- angolo diedro per stabilire se taglio convesso
|
||||
@@ -67,28 +67,29 @@ function ProcessLong2Cut.Make( Proc, nPhase, nRawId, nPartId)
|
||||
ptM = ( ptC[1] + ptC[2]) / 2
|
||||
bConvex = true
|
||||
end
|
||||
local bOrtho = ( abs( dAng + 90) < 1)
|
||||
-- analisi del taglio
|
||||
local vOrd = {}
|
||||
local vFaceUse = {}
|
||||
if nSide == 1 then
|
||||
vOrd = EgtIf( ptC[1]:getY() < ptM:getY(), { 1, 2}, { 2, 1})
|
||||
vFaceUse = {[vOrd[1]] = MCH_MILL_FU.ORTHO_BACK, [vOrd[2]] = MCH_MILL_FU.ORTHO_FRONT}
|
||||
vFaceUse = { BL.GetNearestOrthoOpposite( ptC[1] - ptM), BL.GetNearestOrthoOpposite( ptC[2] - ptM)}
|
||||
elseif nSide == -1 then
|
||||
vOrd = EgtIf( ptC[1]:getY() < ptM:getY(), { 1, 2}, { 2, 1})
|
||||
vFaceUse = {[vOrd[1]] = MCH_MILL_FU.PARAL_BACK, [vOrd[2]] = MCH_MILL_FU.PARAL_FRONT}
|
||||
vFaceUse = { BL.GetNearestParalOpposite( ptC[1] - ptM), BL.GetNearestParalOpposite( ptC[2] - ptM)}
|
||||
else
|
||||
local bFront = ( vtN[1]:getY() < 0)
|
||||
if bFront then
|
||||
vOrd = EgtIf( ptC[1]:getZ() < ptM:getZ(), { 1, 2}, { 2, 1})
|
||||
vFaceUse = {[vOrd[1]] = MCH_MILL_FU.ORTHO_TOP, [vOrd[2]] = MCH_MILL_FU.ORTHO_DOWN}
|
||||
vFaceUse = { BL.GetNearestOrthoOpposite( ptC[1] - ptM), BL.GetNearestOrthoOpposite( ptC[2] - ptM)}
|
||||
else
|
||||
vOrd = EgtIf( ptC[1]:getZ() < ptM:getZ(), { 2, 1}, { 1, 2})
|
||||
vFaceUse = {[vOrd[1]] = MCH_MILL_FU.ORTHO_DOWN, [vOrd[2]] = MCH_MILL_FU.ORTHO_TOP}
|
||||
vFaceUse = { BL.GetNearestOrthoOpposite( ptC[1] - ptM), BL.GetNearestOrthoOpposite( ptC[2] - ptM)}
|
||||
end
|
||||
end
|
||||
local vWidth = {}
|
||||
_, _, vWidth[vOrd[1]] = BL.GetFaceHvRefDim( Proc.Id, vOrd[1] - 1)
|
||||
_, _, vWidth[vOrd[2]] = BL.GetFaceHvRefDim( Proc.Id, vOrd[2] - 1)
|
||||
_, _, vWidth[1] = BL.GetFaceHvRefDim( Proc.Id, 1 - 1)
|
||||
_, _, vWidth[2] = BL.GetFaceHvRefDim( Proc.Id, 2 - 1)
|
||||
|
||||
-- Se non è sotto : lavorazione Long2Cut
|
||||
if nSide ~= - 1 then
|
||||
@@ -121,8 +122,17 @@ function ProcessLong2Cut.Make( Proc, nPhase, nRawId, nPartId)
|
||||
-- ciclo sulle parti
|
||||
local nM = 0
|
||||
for j = 1, nC do
|
||||
-- se facce ortogonali (concave), lavoro solo quella con versore maggiomente verso l'alto
|
||||
local nIni, nFin = 1, 2
|
||||
if bOrtho then
|
||||
if vtN[vOrd[1]]:getZ() >= vtN[vOrd[2]]:getZ() then
|
||||
nFin = 1
|
||||
else
|
||||
nIni = 2
|
||||
end
|
||||
end
|
||||
-- su entrambe le facce
|
||||
for i = 1, 2 do
|
||||
for i = nIni, nFin do
|
||||
-- Limitazioni della lavorazione
|
||||
local nPos = EgtIf( i == 1, j, nC - j + 1)
|
||||
local dSal = EgtIf( nPos == 1, 0, - dEndLen - ( nPos - 2) * dC)
|
||||
|
||||
Reference in New Issue
Block a user