DataBeam :

- correzioni e migliorie.
This commit is contained in:
Dario Sassi
2019-07-08 18:01:28 +00:00
parent 7c1a4ba546
commit 19df7d3338
7 changed files with 100 additions and 44 deletions
+20 -10
View File
@@ -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)