-- ProcessSawCut.lua by Egaltech s.r.l. 2020/01/29 -- Gestione calcolo taglio di lama per Travi -- Tabella per definizione modulo local ProcessSawCut = {} -- Include require( 'EgtBase') local BL = require( 'BeamLib') local DC = require( 'DiceCut') EgtOutLog( ' ProcessSawCut started', 1) -- Dati local BD = require( 'BeamData') local ML = require( 'MachiningLib') --------------------------------------------------------------------- -- Riconoscimento della feature function ProcessSawCut.Identify( Proc) return ( ( Proc.Grp == 0 or Proc.Grp == 3 or Proc.Grp == 4) and Proc.Prc == 13) end --------------------------------------------------------------------- -- Classificazione della feature function ProcessSawCut.Classify( Proc, b3Raw) -- recupero i dati del versore direzione di accesso della lavorazione local AuxId = EgtGetInfo( Proc.Id, 'AUXID', 'i') if not AuxId then return false end AuxId = AuxId + Proc.Id local vtDir = EgtSV( AuxId, GDB_ID.ROOT) return true, ( vtDir:getZ() <= - 0.088) end --------------------------------------------------------------------- -- Applicazione della lavorazione function ProcessSawCut.Make( Proc, nPhase, nRawId, nPartId, dOvmHead) -- ingombro del grezzo local b3Raw = EgtGetRawPartBBox( nRawId) -- ingombro del pezzo local Ls = EgtGetFirstNameInGroup( nPartId, 'Box') local b3Solid = EgtGetBBoxGlob( Ls or GDB_ID.NULL, GDB_BB.STANDARD) if not b3Solid then local sErr = 'Error on process ' .. tostring( Proc.Id) .. ' part box not found' EgtOutLog( sErr) return false, sErr end -- dati geometrici del taglio local ptC, vtN = EgtSurfTmFacetCenter( Proc.Id, 0, GDB_ID.ROOT) -- recupero e verifico l'entità vettore local AuxId = EgtGetInfo( Proc.Id, 'AUXID', 'i') if AuxId then AuxId = AuxId + Proc.Id end if not AuxId or EgtGetType( AuxId) ~= GDB_TY.GEO_VECTOR then local sErr = 'Error on process ' .. tostring( Proc.Id) .. ' missing access direction' EgtOutLog( sErr) return false, sErr end local vtDir = EgtSV( AuxId, GDB_ID.ROOT) -- se taglio di testa if Proc.Head then -- se coincide con il taglio di separazione precedente, non va fatto if AreSameVectorApprox( vtN, X_AX()) and abs( ptC:getX() - b3Raw:getMax():getX() + dOvmHead) < 10 * GEO.EPS_SMALL then return true end -- altrimenti taglio di coda else -- se coincide con taglio di separazione, non va fatto if AreSameVectorApprox( vtN, - X_AX()) and abs( ptC:getX() - b3Raw:getMin():getX()) < BD.OVM_MID + 10 * GEO.EPS_SMALL then return true end end -- recupero la lavorazione local sCutting = ML.FindCutting( EgtIf( Proc.Head, 'HeadSide', 'TailSide')) if not sCutting then local sErr = 'Error on process ' .. tostring( Proc.Id) .. ' cutting not found in library' EgtOutLog( sErr) return false, sErr end -- recupero i dati dell'utensile local dSawDiam = 400 local dMaxDepth = 0 if EgtMdbSetCurrMachining( sCutting) then local sTuuid = EgtMdbGetCurrMachiningParam( MCH_MP.TUUID) if EgtTdbSetCurrTool( EgtTdbGetToolFromUUID( sTuuid) or '') then dSawDiam = EgtTdbGetCurrToolParam( MCH_TP.DIAM) or dSawDiam dMaxDepth = EgtTdbGetCurrToolMaxDepth() or dMaxDepth end end -- lavoro la faccia local bOk, sErr = BL.MakeOneFaceBySaw( Proc.Id, 0, sCutting, dSawDiam, vtDir, nil, 0, BD.CUT_SIC, 0, 0, nil, b3Raw) if not bOk then return bOk, sErr end return true end --------------------------------------------------------------------- return ProcessSawCut