Files
DataWall/LuaLibs/WProcessDoubleCut.lua
T
2025-04-29 15:06:00 +02:00

78 lines
2.8 KiB
Lua

-- WProcessDoubleCut.lua by Egaltech s.r.l. 2023/04/17
-- Gestione calcolo doppi tagli di lama per Pareti
-- 2023/04/17 Quando si chiama LapJoint si trasforma il Gruppo da 1 a 3 e da 2 a 4.
-- 2023/11/14 Aggiunta funzione IdentifyStrict per il riconoscimento della sola feature L011.
-- Tabella per definizione modulo
local WPDC = {}
-- Include
require( 'EgtBase')
local WL = require( 'WallLib')
local Cut = require( 'WProcessCut')
local LapJoint = require( 'WProcessLapJoint')
EgtOutLog( ' WProcessDoubleCut started', 1)
-- Dati
local WD = require( 'WallData')
local ML = require( 'WMachiningLib')
---------------------------------------------------------------------
-- Riconoscimento della feature
function WPDC.Identify( Proc)
return ( (( Proc.Grp == 1 or Proc.Grp == 2) and Proc.Prc == 11) or
( Proc.Grp == 0 and Proc.Prc == 12))
end
---------------------------------------------------------------------
-- Riconoscimento della sola feature L011
function WPDC.IdentifyStrict( Proc)
return ( Proc.Grp == 1 or Proc.Grp == 2) and Proc.Prc == 11
end
---------------------------------------------------------------------
-- Classificazione della feature
function WPDC.Classify( Proc, b3Raw)
-- se una faccia, uso la classificazione dei tagli singoli
if Proc.Fct == 1 then return Cut.Classify( Proc, b3Raw) end
-- se più di due facce non si fa
if Proc.Fct > 2 then return false end
-- se due facce si verifica solamente se le facce non sono troppo orientate verso il basso (per due facce unite sul lato lungo il check è fatto nella LapJoint)
local vtN = {}
vtN[1] = EgtSurfTmFacetNormVersor( Proc.Id, 0, GDB_ID.ROOT)
vtN[2] = EgtSurfTmFacetNormVersor( Proc.Id, 1, GDB_ID.ROOT)
local bIsMachinable = ( vtN[1]:getZ() >= ( WD.CUT_VZ_MIN or - 0.5)) and ( vtN[2]:getZ() >= ( WD.CUT_VZ_MIN or - 0.5))
return bIsMachinable
end
----------------------------------------------------------------------
-- Classificazione del flip della feature per nesting
-- return nFlip0, nFlip1
function WPDC.FlipClassify( Proc)
-- se una faccia, uso la classificazione dei tagli singoli
if Proc.Fct == 1 then return Cut.FlipClassify( Proc) end
-- se due facce, uso la classificazione del lap joint a due facce
if Proc.Fct == 2 then return LapJoint.FlipClassify( Proc) end
-- se più di due facce non si fa
if Proc.Fct > 2 then return 0, 0 end
end
---------------------------------------------------------------------
-- Applicazione della lavorazione
function WPDC.Make( Proc, nRawId, b3Raw)
-- se singola faccia, passo a quella lavorazione
if Proc.Fct == 1 then return Cut.Make( Proc, nRawId, b3Raw) end
-- altrimenti due facce e passo alla LapJoint
Proc.Grp = Proc.Grp + 2
return LapJoint.Make( Proc, nRawId, b3Raw)
end
---------------------------------------------------------------------
return WPDC