Files
DataWall/LuaLibs/WProcessCut.lua
T

82 lines
2.5 KiB
Lua

-- WProcessCut.lua by Egaltech s.r.l. 2020/11/25
-- Gestione calcolo taglio di testa o longitudinale per Pareti
-- 2023/07/26 Angolo Z minimo ora gestito tramite costante da WallData CUT_VZ_MIN (default sempre -0.5).
-- Tabella per definizione modulo
local WPC = {}
-- Include
require( 'EgtBase')
local WL = require( 'WallLib')
local FreeContour = require( 'WProcessFreeContour')
local LapJoint = require( 'WProcessLapJoint')
EgtOutLog( ' WProcessCut started', 1)
-- Dati
local WD = require( 'WallData')
local WM = require( 'WMachiningLib')
---------------------------------------------------------------------
-- Riconoscimento della feature
function WPC.Identify( Proc)
return ( (( Proc.Grp == 1 or Proc.Grp == 2) and Proc.Prc == 10) or
(( Proc.Grp == 0 or Proc.Grp == 3 or Proc.Grp == 4) and Proc.Prc == 10))
end
---------------------------------------------------------------------
-- Classificazione della feature
function WPC.Classify( Proc, b3Raw)
-- verifico abbia una sola faccia
if Proc.Fct ~= 1 then return false end
-- controllo la normale
local vtN = EgtSurfTmFacetNormVersor( Proc.Id, 0, GDB_ID.ROOT)
if vtN:getZ() < ( WD.CUT_VZ_MIN or - 0.5) then return false end
return true
end
----------------------------------------------------------------------
-- Classificazione del flip della feature per nesting
-- return nFlip0, nFlip1
function WPC.FlipClassify( Proc)
-- verifico abbia una sola faccia
if Proc.Fct ~= 1 then return 0, 0 end
-- controllo la normale
local vtN = EgtSurfTmFacetNormVersor( Proc.Id, 0, GDB_ID.ROOT)
local vtNZ = vtN:getZ()
if vtNZ > - GEO.EPS_SMALL then
nFlip0 = 100
elseif vtNZ < ( WD.CUT_VZ_MIN or - 0.5) then
nFlip0 = 0
else
nFlip0 = 50
end
if - vtNZ > - GEO.EPS_SMALL then
nFlip1 = 100
elseif - vtNZ < ( WD.CUT_VZ_MIN or - 0.5) then
nFlip1 = 0
else
nFlip1 = 50
end
--nFlip0 = EgtIf( vtN:getZ() < -0.5, 0, 100)
--nFlip1 = EgtIf( - vtN:getZ() < -0.5, 0, 100)
return nFlip0, nFlip1
end
---------------------------------------------------------------------
-- Applicazione della lavorazione
function WPC.Make( Proc, nRawId, b3Raw)
local vtN = EgtSurfTmFacetNormVersor( Proc.Id, 0, GDB_ID.ROOT)
if vtN :getZ() > 0.866 then
return LapJoint.Make( Proc, nRawId, b3Raw)
else
return FreeContour.Make( Proc, nRawId, b3Raw)
end
end
---------------------------------------------------------------------
return WPC