Files
DataWall/LuaLibs/WProcessMark.lua
T

167 lines
5.6 KiB
Lua

-- WProcessMark.lua by Egaltech s.r.l. 2021/04/20
-- Gestione calcolo marcatura per Pareti
-- 2023/01/05 Permesse le marcature laterali in presenza di offset Z, tra grezzo e tavola, di almeno 100 mm
-- 2023/05/25 Funzioni EgtAddMachining sostituite da WM.AddMachining in modo da trascrivere le priorità da btl alle lavorazioni.
-- Tabella per definizione modulo
local WPMK = {}
-- Include
require( 'EgtBase')
EgtOutLog( ' WProcessMark started', 1)
-- Dati
local WD = require( 'WallData')
local WM = require( 'WMachiningLib')
---------------------------------------------------------------------
-- Riconoscimento della feature
function WPMK.Identify( Proc)
return (( Proc.Grp == 3 or Proc.Grp == 4) and Proc.Prc == 60)
end
---------------------------------------------------------------------
-- Classificazione della feature
function WPMK.Classify( Proc, b3Raw)
-- recupero il versore estrusione o normale se testo
local vtN
if EgtGetType( Proc.Id) ~= GDB_TY.EXT_TEXT then
vtN = EgtCurveExtrusion( Proc.Id, GDB_ID.ROOT)
else
vtN = EgtTextNormVersor( Proc.Id, GDB_ID.ROOT)
end
-- verifico sia una curva/testo
if not vtN then
return false
end
-- verifico se la marcatura è lavorabile (solo da sopra o dal lato se con offset Z)
local dMinZRaw = b3Raw:getMin():getZ()
local b3Tab = EgtGetTableArea()
local dMaxZTable = b3Tab:getMax():getZ()
local dDeltaZ = dMinZRaw - dMaxZTable
local MIN_Z_OFFSET = 100
return EgtIf( dDeltaZ < MIN_Z_OFFSET - GEO.EPS_SMALL, vtN:getZ() > WD.NZ_MINA, vtN:getZ() > -0.1)
end
----------------------------------------------------------------------
-- Classificazione del flip della feature per nesting
-- return nFlip0, nFlip1
function WPMK.FlipClassify( Proc)
local nFlip0, nFlip1
local vtN
if EgtGetType( Proc.Id) ~= GDB_TY.EXT_TEXT then
vtN = EgtCurveExtrusion( Proc.Id, GDB_ID.ROOT)
else
vtN = EgtTextNormVersor( Proc.Id, GDB_ID.ROOT)
end
-- verifico sia una curva/testo
if not vtN then
return false
end
-- verifico se la marcatura è lavorabile (solo da sopra)
nFlip0 = EgtIf( vtN:getZ() > WD.NZ_MINA, 100, 0)
nFlip1 = EgtIf( - vtN:getZ() > WD.NZ_MINA, 100, 0)
return nFlip0, nFlip1
end
---------------------------------------------------------------------
-- Applicazione della lavorazione
function WPMK.Make( Proc, nRawId, b3Raw)
-- recupero eventuale geometria ausiliaria
local AuxId = EgtGetInfo( Proc.Id, 'AUXID', 'i')
if AuxId then AuxId = AuxId + Proc.Id end
-- recupero i dati della marcatura
local vtExtr
if EgtGetType( Proc.Id) ~= GDB_TY.EXT_TEXT then
vtExtr = EgtCurveExtrusion( Proc.Id, GDB_RT.GLOB)
else
vtExtr = EgtTextNormVersor( Proc.Id, GDB_ID.ROOT)
end
-- verifico sia una curva/testo
if not vtExtr then
local sErr = 'Error : Mark with geometry type not accepted'
EgtOutLog( sErr)
return false, sErr
end
-- verifico se la marcatura è lavorabile (solo da sopra o dal lato se con offset Z)
local dMinZRaw = b3Raw:getMin():getZ()
local b3Tab = EgtGetTableArea()
local dMaxZTable = b3Tab:getMax():getZ()
local dDeltaZ = dMinZRaw - dMaxZTable
local MIN_Z_OFFSET = 99.9
if vtExtr:getZ() < WD.NZ_MINA then
if dDeltaZ < MIN_Z_OFFSET - GEO.EPS_SMALL or vtExtr:getZ() <= -0.1 then
local sErr = 'Error : Mark from bottom impossible'
EgtOutLog( sErr)
return false, sErr
end
end
-- recupero la lavorazione
local sMilling = WM.FindMilling( 'Text')
if not sMilling then
local sErr = 'Error : milling not found in library'
EgtOutLog( sErr)
return false, sErr
end
-- inserisco la lavorazione di fresatura
local sName = 'Decor_' .. ( EgtGetName( Proc.Id) or tostring( Proc.Id))
local nMchFId = WM.AddMachining( Proc, sName, sMilling)
if not nMchFId then
local sErr = 'Error adding machining ' .. sName .. '-' .. sMilling
EgtOutLog( sErr)
return false, sErr
end
-- aggiungo geometria
EgtSetMachiningGeometry( {{ Proc.Id, -1}})
-- imposto posizione braccio porta testa
if vtExtr:getY() <= 0 then
EgtSetMachiningParam( MCH_MP.SCC, MCH_SCC.ADIR_YM)
else
EgtSetMachiningParam( MCH_MP.SCC, MCH_SCC.ADIR_YP)
end
-- eseguo
if not EgtApplyMachining( true, false) then
local _, sErr = EgtGetLastMachMgrError()
EgtSetOperationMode( nMchFId, false)
return false, sErr
end
-- eventuale lavorazione su seconda geometria
if AuxId then
-- inserisco la lavorazione di fresatura
local sName2 = 'Decor2_' .. ( EgtGetName( Proc.Id) or tostring( Proc.Id))
local nMchF2Id = WM.AddMachining( Proc, sName, sMilling)
if not nMchF2Id then
local sErr = 'Error adding machining ' .. sName2 .. '-' .. sMilling
EgtOutLog( sErr)
return false, sErr
end
-- aggiungo geometria
EgtSetMachiningGeometry( {{ AuxId, -1}})
-- imposto posizione braccio porta testa
if vtExtr:getY() <= 0 then
EgtSetMachiningParam( MCH_MP.SCC, MCH_SCC.ADIR_YM)
else
EgtSetMachiningParam( MCH_MP.SCC, MCH_SCC.ADIR_YP)
end
-- eseguo
if not EgtApplyMachining( true, false) then
local _, sErr = EgtGetLastMachMgrError()
EgtSetOperationMode( nMchF2Id, false)
return false, sErr
end
-- se geometria a X maggiore, la sposto prima
local ptS1 = EgtSP( Proc.Id, GDB_ID.ROOT)
local ptS2 = EgtSP( AuxId, GDB_ID.ROOT)
if ptS2:getX() > ptS1:getX() then
EgtRelocateGlob( nMchF2Id, nMchFId, GDB_IN.BEFORE)
end
end
return true
end
---------------------------------------------------------------------
return WPMK