-- 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