DataBeam :
- in DoubleCut migliorata Classify per fattibilià e necessità di rotazione - altre piccole modifiche accessorie.
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
-- ProcessDoubleCut.lua by Egaltech s.r.l. 2021/11/25
|
||||
-- ProcessDoubleCut.lua by Egaltech s.r.l. 2022/07/11
|
||||
-- Gestione calcolo doppi tagli di lama per Travi
|
||||
|
||||
-- Tabella per definizione modulo
|
||||
@@ -32,8 +32,6 @@ function ProcessDoubleCut.Classify( Proc, b3Raw)
|
||||
if BD.C_SIMM and BD.DOWN_HEAD then
|
||||
return true
|
||||
end
|
||||
-- limite per facce da sotto
|
||||
local dNzLimDwnUp = BL.GetNzLimDownUp( b3Raw)
|
||||
-- verifico se convesso
|
||||
local bAdj, _, _, dAng = EgtSurfTmFacetsContact( Proc.Id, 0, 1, GDB_ID.ROOT)
|
||||
local bConvex = ( not bAdj or ( dAng > 0))
|
||||
@@ -48,6 +46,7 @@ function ProcessDoubleCut.Classify( Proc, b3Raw)
|
||||
return true, true
|
||||
end
|
||||
end
|
||||
local dNzLimDwnUp = BL.GetNzLimDownUp( b3Raw, vtN)
|
||||
local bDownCut = ( vtN:getZ() <= dNzLimDwnUp)
|
||||
if bDownCut then
|
||||
local _, DimH, DimV = BL.GetFaceHvRefDim( Proc.Id, nFac)
|
||||
@@ -59,23 +58,37 @@ function ProcessDoubleCut.Classify( Proc, b3Raw)
|
||||
end
|
||||
end
|
||||
return true, false
|
||||
end
|
||||
-- altrimenti concavo, verifico le normali delle facce per tagli da sotto
|
||||
for i = 1, 2 do
|
||||
local ptC, vtN = EgtSurfTmFacetCenter( Proc.Id, i-1, GDB_ID.ROOT)
|
||||
local bDownCut = ( vtN:getZ() <= dNzLimDwnUp)
|
||||
if bDownCut then
|
||||
-- dimensione della faccia perpendicolare alla linea di intersezione tra le facce
|
||||
local vtN2 = EgtSurfTmFacetNormVersor( Proc.Id, 2-i, GDB_ID.ROOT)
|
||||
local vtX = vtN2 ^ vtN
|
||||
local frRef = Frame3d( ptC, ptC + 100 * vtX, ptC + 100 * vtN2)
|
||||
local b3Ref = EgtSurfTmGetFacetBBoxRef( Proc.Id, i-1, GDB_BB.STANDARD, frRef)
|
||||
if b3Ref:getDimY() > BD.MAX_DIM_DICE then
|
||||
return true, true
|
||||
else
|
||||
local ptC = {}
|
||||
local vtN = {}
|
||||
ptC[1], vtN[1] = EgtSurfTmFacetCenter( Proc.Id, 0, GDB_ID.ROOT)
|
||||
ptC[2], vtN[2] = EgtSurfTmFacetCenter( Proc.Id, 1, GDB_ID.ROOT)
|
||||
local vtX = vtN[1] ^ vtN[2] ; vtX:normalize()
|
||||
local vtY = { vtX ^ vtN[1], - vtX ^ vtN[2]}
|
||||
for i = 1, 2 do
|
||||
local dNzLimDwnUp = BL.GetNzLimDownUp( b3Raw, vtN[i], vtY[i])
|
||||
local bDownCut = ( vtN[i]:getZ() <= dNzLimDwnUp)
|
||||
if bDownCut then
|
||||
-- dimensione della faccia perpendicolarmente alla linea di intersezione tra le facce
|
||||
local frRef = Frame3d( ptC[i], ptC[i] + 100 * vtX, ptC[i] + 100 * vtY[i])
|
||||
local b3Ref = EgtSurfTmGetFacetBBoxRef( Proc.Id, i-1, GDB_BB.STANDARD, frRef)
|
||||
-- dimensione dell'altra faccia perpendicolarmente alla linea di intersezione tra le facce
|
||||
local frRef2 = Frame3d( ptC[3-i], ptC[3-i] + 100 * vtX, ptC[3-i] + 100 * vtY[3-1])
|
||||
local b3Ref2 = EgtSurfTmGetFacetBBoxRef( Proc.Id, 2-i, GDB_BB.STANDARD, frRef2)
|
||||
-- se faccia grande
|
||||
if b3Ref:getDimY() > BD.MAX_DIM_DICE then
|
||||
-- se altra faccia piccola
|
||||
if b3Ref2:getDimY() < BD.MAX_DIM_DICE then
|
||||
return true, true
|
||||
else
|
||||
return false
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
return true, false
|
||||
end
|
||||
return true, false
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user