From f7beede72ed82100e425a68c4d7e5064dc8bf8f4 Mon Sep 17 00:00:00 2001 From: DarioS Date: Sun, 29 May 2022 16:31:41 +0200 Subject: [PATCH] =?UTF-8?q?DataBeam=20:=20-=20aggiunto=20modulo=20FaceByPo?= =?UTF-8?q?cket=20per=20lavorazione=20per=20svuotatura=20di=20una=20faccia?= =?UTF-8?q?=20da=20sorgenti=20in=20tenone=20-=20aggiunta=20possibilit?= =?UTF-8?q?=C3=A0=20di=20svuotatura=20per=20piano=20sgrossatura=20profili?= =?UTF-8?q?=20su=20macchine=20PF=20e=20pezzi=20alti=20-=20aggiunto=20modul?= =?UTF-8?q?o=20GetBeamData.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- GetBeamData.lua | 43 ++++++++++++++ LuaLibs/FaceByPocket.lua | 101 +++++++++++++++++++++++++++++++++ LuaLibs/FacesBySaw.lua | 2 +- LuaLibs/ProcessProfCamb.lua | 37 +++++++++--- LuaLibs/ProcessProfConcave.lua | 37 +++++++++--- LuaLibs/ProcessProfConvex.lua | 37 +++++++++--- LuaLibs/ProcessProfFront.lua | 37 +++++++++--- LuaLibs/ProcessProfHead.lua | 37 +++++++++--- LuaLibs/ProcessTenon.lua | 82 ++++---------------------- 9 files changed, 302 insertions(+), 111 deletions(-) create mode 100644 GetBeamData.lua create mode 100644 LuaLibs/FaceByPocket.lua diff --git a/GetBeamData.lua b/GetBeamData.lua new file mode 100644 index 0000000..6ffe321 --- /dev/null +++ b/GetBeamData.lua @@ -0,0 +1,43 @@ +-- GetWallData.lua by Egaltech s.r.l. 2021/11/22 +-- Recupero dati da file WallData.lua di macchina + +-- Intestazioni +require( 'EgtBase') +_ENV = EgtProtectGlobal() +EgtEnableDebug( false) + +-- Per test +--GWD = {} +--GWD.MACHINE = 'Essetre-90480019_MW' + +local sLog = 'GetBeamData : ' .. GWD.MACHINE +EgtOutLog( sLog) + +-- Imposto direttorio libreria specializzata per Travi +EgtAddToPackagePath( GWD.BASEDIR .. '\\LuaLibs\\?.lua') + +-- Verifico che la macchina corrente sia abilitata per la lavorazione delle Travi +local sMachDir = EgtGetCurrMachineDir() +if not EgtExistsFile( sMachDir .. '\\Beam\\BeamData.lua') then + GWD.ERR = 12 + GWD.MSG = 'Error not configured for beam machine : ' .. GWD.MACHINE + WriteErrToLogFile( GWD.ERR, GWD.MSG) + PostErrView( GWD.ERR, GWD.MSG) + return +end + +-- Elimino direttori altre macchine e imposto direttorio macchina corrente per ricerca librerie +EgtRemoveBaseMachineDirFromPackagePath() +EgtAddToPackagePath( sMachDir .. '\\Beam\\?.lua') + +-- Carico i dati globali +local BD = require( 'BeamData') + +-- Assegno valori di interesse +GWD.SIMUL_VIEW_DIR = BD.SIMUL_VIEW_DIR +GWD.OVM_MID = BD.OVM_MID + +-- Tutto ok +GWD.ERR = 0 + +EgtOutLog( ' +++ GetWallData completed') diff --git a/LuaLibs/FaceByPocket.lua b/LuaLibs/FaceByPocket.lua new file mode 100644 index 0000000..4d8bdcb --- /dev/null +++ b/LuaLibs/FaceByPocket.lua @@ -0,0 +1,101 @@ +-- FaceByPocket.lua by Egaltech s.r.l. 2022/05/82 +-- Gestione svuotatura di feature con una faccia + +-- Tabella per definizione modulo +local FaceByPocket = {} + +-- Include +require( 'EgtBase') +local BL = require( 'BeamLib') + +EgtOutLog( ' FaceByPocket started', 1) + +-- Dati +local BD = require( 'BeamData') +local ML = require( 'MachiningLib') + +--------------------------------------------------------------------- +local function ApplyPocket( Proc, nSurfId, nFacet, sPocketing, nInd, dMaxElev, vtN) + + -- inserisco la lavorazione di svuotatura + local sName = 'Pock_' .. ( EgtGetName( Proc.Id) or tostring( Proc.Id)) .. '_' .. nInd + local nMchFId = EgtAddMachining( sName, sPocketing) + if not nMchFId then + local sErr = 'Error adding machining ' .. sName .. '-' .. sPocketing + return false, sErr + end + -- aggiungo geometria + EgtSetMachiningGeometry( {{ nSurfId, nFacet}}) + -- imposto uso faccia + EgtSetMachiningParam( MCH_MP.FACEUSE, MCH_MILL_FU.ORTHO_CONT) + if dMaxElev > 0.1 then + -- imposto elevazione + local sNotes = 'MaxElev=' .. EgtNumToString( dMaxElev, 2) .. ';' + EgtSetMachiningParam( MCH_MP.USERNOTES, sNotes) + end + -- imposto posizione braccio porta testa + local nSCC = MCH_SCC.NONE + if not BD.C_SIMM and not BD.TURN then + nSCC = EgtIf( vtN:getX() < GEO.EPS_SMALL, MCH_SCC.ADIR_XM, MCH_SCC.ADIR_XP) + end + EgtSetMachiningParam( MCH_MP.SCC, nSCC) + -- eseguo + if not ML.ApplyMachining( true, false) then + local _, sErr = EgtGetLastMachMgrError() + EgtSetOperationMode( nMchFId, false) + return false, sErr + end + + return true +end + +--------------------------------------------------------------------- +function FaceByPocket.Make( Proc, nSurfId, nFacet, sPocketing, nPartId, b3Solid) + local bOk = true + local sErr + -- recupero gruppo per geometria addizionale + local nAddGrpId = BL.GetAddGroup( nPartId) + if not nAddGrpId then + local sErr = 'Error : missing AddGroup' + EgtOutLog( sErr) + return false, sErr + end + -- recupero i dati dell'utensile + local dStep = 30 + local dMaxDepth = 100 + if EgtMdbSetCurrMachining( sPocketing) then + local sTuuid = EgtMdbGetCurrMachiningParam( MCH_MP.TUUID) + dStep = EgtMdbGetCurrMachiningParam( MCH_MP.STEP) or dStep + if EgtTdbSetCurrTool( EgtTdbGetToolFromUUID( sTuuid) or '') then + dMaxDepth = EgtTdbGetCurrToolMaxDepth() or dMaxDepth + end + end + -- dati della faccia + local ptC, vtN = EgtSurfTmFacetCenter( nSurfId, nFacet, GDB_ID.ROOT) + local dElev = BL.GetFaceElevation( nSurfId, nFacet, nPartId) + -- determino numero e valore degli step di lavorazione + local nSurfStep = ceil( dElev / dMaxDepth) + local dSurfStep = dElev / nSurfStep + -- copio superfice al passo superfice e vi applico la lavorazione + for i = nSurfStep, 2, -1 do + local ptOn = ptC + ( dSurfStep * ( i - 1)) * vtN + local nAddIdTmp = EgtSurfTmPlaneInBBox( nAddGrpId, ptOn, vtN, b3Solid, GDB_RT.GLOB) + if nAddIdTmp then + EgtSetName( nAddIdTmp, 'AddCut_' .. tostring( Proc.Id)) + EgtSetInfo( nAddIdTmp, 'TASKID', Proc.TaskId) + -- aggiungo lavorazione + bOk, sErr = ApplyPocket( Proc, nAddIdTmp, 0, sPocketing, i, dSurfStep, vtN) + if not bOk then + return false, sErr + end + end + end + -- faccio ultima superfice + bOk, sErr = ApplyPocket( Proc, nSurfId, nFacet, sPocketing, 1, EgtIf( nSurfStep > 1, dSurfStep, 0), vtN) + if not bOk then + return false, sErr + end + return true +end + +return FaceByPocket diff --git a/LuaLibs/FacesBySaw.lua b/LuaLibs/FacesBySaw.lua index 140c65b..823e866 100644 --- a/LuaLibs/FacesBySaw.lua +++ b/LuaLibs/FacesBySaw.lua @@ -622,4 +622,4 @@ function FacesBySaw.CalcLeadInOutTangGeom( ptP1, ptP2, vtN, dRad, vtRef, dCutExt return dLiTang, dLiPerp, dLoTang, dLoPerp end -return FacesBySaw \ No newline at end of file +return FacesBySaw diff --git a/LuaLibs/ProcessProfCamb.lua b/LuaLibs/ProcessProfCamb.lua index cbccf1f..2f67a9b 100644 --- a/LuaLibs/ProcessProfCamb.lua +++ b/LuaLibs/ProcessProfCamb.lua @@ -1,4 +1,4 @@ --- ProcessProfCamb.lua by Egaltech s.r.l. 2022/05/24 +-- ProcessProfCamb.lua by Egaltech s.r.l. 2022/05/28 -- Gestione calcolo profilo caudato per Travi -- 2021/05/03 Aggiunta gestione smusso da sopra e sotto per macchina con testa da sotto. -- 2021/06/28 Per macchine con testa sotto, smussi di lato con questa testa se non c'è lav.ne da sopra. @@ -7,6 +7,7 @@ -- 2022/01/26 Migliorato controllo lavorazione con fresa su testa da sotto. -- 2022/02/02 Aggiunta funzione OnlyChamfer. -- 2022/05/24 Aggiunta fresatura da sotto su macchine con testa da sotto. +-- 2022/05/28 Aggiunto calcolo svuotatura da modulo di libreria. -- Tabella per definizione modulo local ProcessProfCamb = {} @@ -15,6 +16,7 @@ local ProcessProfCamb = {} require( 'EgtBase') local BL = require( 'BeamLib') local Fbs = require( 'FacesBySaw') +local Fbp = require( 'FaceByPocket') local Cut = require( 'ProcessCut') EgtOutLog( ' ProcessProfCamb started', 1) @@ -277,19 +279,38 @@ function ProcessProfCamb.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH) bMakeAs = true end end - -- se smusso non è esclusivo, aggiungo sgrossatura con taglio di lama + -- se smusso non è esclusivo, aggiungo sgrossatura if nChamfer < 2 then - -- aggiungo taglio di lama di sgrossatura e lo lavoro + -- aggiungo piano di sgrossatura e lo lavoro local ptStart, vtNP = GetSawCutData( AuxId, vtNF) local AddId = EgtSurfTmPlaneInBBox( nAddGrpId, ptStart, vtNP, b3Solid, GDB_RT.GLOB) if AddId and BL.GetFaceElevation( AddId, 0, nPartId) > 20.0 then EgtSetName( AddId, 'AddCut_' .. tostring( Proc.Id)) EgtSetInfo( AddId, 'TASKID', Proc.TaskId) - -- applico la lavorazione - local CutProc = { Id = AddId, Grp = Proc.Grp, Prc = Proc.Prc, Box = Proc.Box, Fct = Proc.Fct, Flg = Proc.Flg, - Head = Proc.Head, Tail = Proc.Tail, CutId = Proc.CutId, TaskId = Proc.TaskId} - local bOk, sErr = Cut.Make( CutProc, nPhase, nRawId, nPartId, dCurrOvmH) - if not bOk then return bOk, sErr end + -- se macchina PF o ONE e profilo sopra davanti e pezzo alto applico svuotatura + if BD.C_SIMM and not BD.DOWN_HEAD and vtNP:getZ() > 0 and vtNP:getX() > 0 and b3Raw:getDimZ() > 550 then + -- recupero la lavorazione + local sPockType = 'OpenPocket' + local sPocketing = ML.FindPocketing( sPockType, nil, nil, nil, true, false) + if not sPocketing then + local sErr = 'Error : pocketing '..sPockType..' not found in library' + EgtOutLog( sErr) + return false, sErr + end + -- eseguo le svuotature necessarie + local bOk, sErr = Fbp.Make( Proc, AddId, 0, sPocketing, nPartId, b3Solid) + if not bOk then + return false, sErr + end + -- altrimenti applico taglio di lama + else + local CutProc = { Id = AddId, Grp = Proc.Grp, Prc = Proc.Prc, Box = Proc.Box, Fct = Proc.Fct, Flg = Proc.Flg, + Head = Proc.Head, Tail = Proc.Tail, CutId = Proc.CutId, TaskId = Proc.TaskId} + local bOk, sErr = Cut.Make( CutProc, nPhase, nRawId, nPartId, dCurrOvmH) + if not bOk then + return false, sErr + end + end end -- leggo anticipatamente i parametri utensile fresa per dare un valore opportuno all'elevazione della lama -- recupero la lavorazione di fresatura diff --git a/LuaLibs/ProcessProfConcave.lua b/LuaLibs/ProcessProfConcave.lua index 79ecaac..7c7d93d 100644 --- a/LuaLibs/ProcessProfConcave.lua +++ b/LuaLibs/ProcessProfConcave.lua @@ -1,9 +1,10 @@ --- ProcessProfConcave.lua by Egaltech s.r.l. 2022/05/24 +-- ProcessProfConcave.lua by Egaltech s.r.l. 2022/05/28 -- Gestione calcolo profilo concavo per Travi -- 2021/05/03 Aggiunta gestione smusso da sopra e sotto per macchina con testa da sotto. -- 2021/06/28 Per macchine con testa sotto, smussi di lato con questa testa se non c'è lav.ne da sopra. -- 2022/02/02 Aggiunta funzione OnlyChamfer. -- 2022/05/24 Aggiunta fresatura da sotto su macchine con testa da sotto. +-- 2022/05/28 Aggiunto calcolo svuotatura da modulo di libreria. -- Tabella per definizione modulo local ProcessProfConcave = {} @@ -11,6 +12,7 @@ local ProcessProfConcave = {} -- Include require( 'EgtBase') local BL = require( 'BeamLib') +local Fbp = require( 'FaceByPocket') local Cut = require( 'ProcessCut') EgtOutLog( ' ProcessProfConcave started', 1) @@ -258,19 +260,38 @@ function ProcessProfConcave.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH) if nChamfer < 0 then return false, sChamfer end - -- se smusso non è esclusivo, aggiungo sgrossatura con taglio di lama + -- se smusso non è esclusivo, aggiungo sgrossatura if nChamfer < 2 then - -- aggiungo taglio di lama di sgrossatura e lo lavoro + -- aggiungo piano di sgrossatura e lo lavoro local ptStart, vtNP = GetSawCutData( AuxId, vtN) local AddId = EgtSurfTmPlaneInBBox( nAddGrpId, ptStart, vtNP, b3Solid, GDB_RT.GLOB) if AddId and BL.GetFaceElevation( AddId, 0, nPartId) > 20.0 then EgtSetName( AddId, 'AddCut_' .. tostring( Proc.Id)) EgtSetInfo( AddId, 'TASKID', Proc.TaskId) - -- applico la lavorazione - local CutProc = { Id = AddId, Grp = Proc.Grp, Prc = Proc.Prc, Box = Proc.Box, Fct = Proc.Fct, Flg = Proc.Flg, - Head = Proc.Head, Tail = Proc.Tail, CutId = Proc.CutId, TaskId = Proc.TaskId} - local bOk, sErr = Cut.Make( CutProc, nPhase, nRawId, nPartId, dCurrOvmH) - if not bOk then return bOk, sErr end + -- se macchina PF o ONE e profilo sopra davanti e pezzo alto applico svuotatura + if BD.C_SIMM and not BD.DOWN_HEAD and vtNP:getZ() > 0 and vtNP:getX() > 0 and b3Raw:getDimZ() > 550 then + -- recupero la lavorazione + local sPockType = 'OpenPocket' + local sPocketing = ML.FindPocketing( sPockType, nil, nil, nil, true, false) + if not sPocketing then + local sErr = 'Error : pocketing '..sPockType..' not found in library' + EgtOutLog( sErr) + return false, sErr + end + -- eseguo le svuotature necessarie + local bOk, sErr = Fbp.Make( Proc, AddId, 0, sPocketing, nPartId, b3Solid) + if not bOk then + return false, sErr + end + -- altrimenti applico taglio di lama + else + local CutProc = { Id = AddId, Grp = Proc.Grp, Prc = Proc.Prc, Box = Proc.Box, Fct = Proc.Fct, Flg = Proc.Flg, + Head = Proc.Head, Tail = Proc.Tail, CutId = Proc.CutId, TaskId = Proc.TaskId} + local bOk, sErr = Cut.Make( CutProc, nPhase, nRawId, nPartId, dCurrOvmH) + if not bOk then + return false, sErr + end + end end end -- se devo inserire il chamfer diff --git a/LuaLibs/ProcessProfConvex.lua b/LuaLibs/ProcessProfConvex.lua index 6901f27..e3c6a2f 100644 --- a/LuaLibs/ProcessProfConvex.lua +++ b/LuaLibs/ProcessProfConvex.lua @@ -1,9 +1,10 @@ --- ProcessProfConvex.lua by Egaltech s.r.l. 2022/05/24 +-- ProcessProfConvex.lua by Egaltech s.r.l. 2022/05/28 -- Gestione calcolo profilo convesso per Travi -- 2021/05/03 Aggiunta gestione smusso da sopra e sotto per macchina con testa da sotto. -- 2021/06/28 Per macchine con testa sotto, smussi di lato con questa testa se non c'è lav.ne da sopra. -- 2022/02/02 Aggiunta funzione OnlyChamfer. -- 2022/05/24 Aggiunta fresatura da sotto su macchine con testa da sotto. +-- 2022/05/28 Aggiunto calcolo svuotatura da modulo di libreria. -- Tabella per definizione modulo local ProcessProfConvex = {} @@ -11,6 +12,7 @@ local ProcessProfConvex = {} -- Include require( 'EgtBase') local BL = require( 'BeamLib') +local Fbp = require( 'FaceByPocket') local Cut = require( 'ProcessCut') EgtOutLog( ' ProcessProfConvex started', 1) @@ -258,19 +260,38 @@ function ProcessProfConvex.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH) if nChamfer < 0 then return false, sChamfer end - -- se smusso non è esclusivo, aggiungo sgrossatura con taglio di lama + -- se smusso non è esclusivo, aggiungo sgrossatura if nChamfer < 2 then - -- aggiungo taglio di lama di sgrossatura e lo lavoro + -- aggiungo piano di sgrossatura e lo lavoro local ptStart, vtNP = GetSawCutData( AuxId, vtN) local AddId = EgtSurfTmPlaneInBBox( nAddGrpId, ptStart, vtNP, b3Solid, GDB_RT.GLOB) if AddId and BL.GetFaceElevation( AddId, 0, nPartId) > 20.0 then EgtSetName( AddId, 'AddCut_' .. tostring( Proc.Id)) EgtSetInfo( AddId, 'TASKID', Proc.TaskId) - -- applico la lavorazione - local CutProc = { Id = AddId, Grp = Proc.Grp, Prc = Proc.Prc, Box = Proc.Box, Fct = Proc.Fct, Flg = Proc.Flg, - Head = Proc.Head, Tail = Proc.Tail, CutId = Proc.CutId, TaskId = Proc.TaskId} - local bOk, sErr = Cut.Make( CutProc, nPhase, nRawId, nPartId, dCurrOvmH) - if not bOk then return bOk, sErr end + -- se macchina PF o ONE e profilo sopra davanti e pezzo alto applico svuotatura + if BD.C_SIMM and not BD.DOWN_HEAD and vtNP:getZ() > 0 and vtNP:getX() > 0 and b3Raw:getDimZ() > 550 then + -- recupero la lavorazione + local sPockType = 'OpenPocket' + local sPocketing = ML.FindPocketing( sPockType, nil, nil, nil, true, false) + if not sPocketing then + local sErr = 'Error : pocketing '..sPockType..' not found in library' + EgtOutLog( sErr) + return false, sErr + end + -- eseguo le svuotature necessarie + local bOk, sErr = Fbp.Make( Proc, AddId, 0, sPocketing, nPartId, b3Solid) + if not bOk then + return false, sErr + end + -- altrimenti applico taglio di lama + else + local CutProc = { Id = AddId, Grp = Proc.Grp, Prc = Proc.Prc, Box = Proc.Box, Fct = Proc.Fct, Flg = Proc.Flg, + Head = Proc.Head, Tail = Proc.Tail, CutId = Proc.CutId, TaskId = Proc.TaskId} + local bOk, sErr = Cut.Make( CutProc, nPhase, nRawId, nPartId, dCurrOvmH) + if not bOk then + return false, sErr + end + end end end -- se devo inserire il chamfer diff --git a/LuaLibs/ProcessProfFront.lua b/LuaLibs/ProcessProfFront.lua index 1b2fdbf..e56f930 100644 --- a/LuaLibs/ProcessProfFront.lua +++ b/LuaLibs/ProcessProfFront.lua @@ -1,9 +1,10 @@ --- ProcessProfFront.lua by Egaltech s.r.l. 2022/05/24 +-- ProcessProfFront.lua by Egaltech s.r.l. 2022/05/28 -- Gestione calcolo profilo frontale per Travi -- 2021/05/03 Aggiunta gestione smusso da sopra e sotto per macchina con testa da sotto. -- 2021/06/28 Per macchine con testa sotto, smussi di lato con questa testa se non c'è lav.ne da sopra. -- 2022/02/02 Aggiunta funzione OnlyChamfer. -- 2022/05/24 Aggiunta fresatura da sotto su macchine con testa da sotto. +-- 2022/05/28 Aggiunto calcolo svuotatura da modulo di libreria. -- Tabella per definizione modulo local ProcessProfFront = {} @@ -11,6 +12,7 @@ local ProcessProfFront = {} -- Include require( 'EgtBase') local BL = require( 'BeamLib') +local Fbp = require( 'FaceByPocket') local Cut = require( 'ProcessCut') EgtOutLog( ' ProcessProfFront started', 1) @@ -229,19 +231,38 @@ function ProcessProfFront.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH) if nChamfer < 0 then return false, sChamfer end - -- se smusso non è esclusivo, aggiungo sgrossatura con taglio di lama + -- se smusso non è esclusivo, aggiungo sgrossatura if nChamfer < 2 then - -- aggiungo taglio di lama di sgrossatura e lo lavoro + -- aggiungo piano di sgrossatura e lo lavoro local ptStart, vtNP = GetSawCutData( AuxId, vtN) local AddId = EgtSurfTmPlaneInBBox( nAddGrpId, ptStart, vtNP, b3Solid, GDB_RT.GLOB) if AddId and BL.GetFaceElevation( AddId, 0, nPartId) > 20.0 then EgtSetName( AddId, 'AddCut_' .. tostring( Proc.Id)) EgtSetInfo( AddId, 'TASKID', Proc.TaskId) - -- applico la lavorazione - local CutProc = { Id = AddId, Grp = Proc.Grp, Prc = Proc.Prc, Box = Proc.Box, Fct = Proc.Fct, Flg = Proc.Flg, - Head = Proc.Head, Tail = Proc.Tail, CutId = Proc.CutId, TaskId = Proc.TaskId} - local bOk, sErr = Cut.Make( CutProc, nPhase, nRawId, nPartId, dCurrOvmH) - if not bOk then return bOk, sErr end + -- se macchina PF o ONE e profilo sopra davanti e pezzo alto applico svuotatura + if BD.C_SIMM and not BD.DOWN_HEAD and vtNP:getZ() > 0 and vtNP:getX() > 0 and b3Raw:getDimZ() > 550 then + -- recupero la lavorazione + local sPockType = 'OpenPocket' + local sPocketing = ML.FindPocketing( sPockType, nil, nil, nil, true, false) + if not sPocketing then + local sErr = 'Error : pocketing '..sPockType..' not found in library' + EgtOutLog( sErr) + return false, sErr + end + -- eseguo le svuotature necessarie + local bOk, sErr = Fbp.Make( Proc, AddId, 0, sPocketing, nPartId, b3Solid) + if not bOk then + return false, sErr + end + -- altrimenti applico taglio di lama + else + local CutProc = { Id = AddId, Grp = Proc.Grp, Prc = Proc.Prc, Box = Proc.Box, Fct = Proc.Fct, Flg = Proc.Flg, + Head = Proc.Head, Tail = Proc.Tail, CutId = Proc.CutId, TaskId = Proc.TaskId} + local bOk, sErr = Cut.Make( CutProc, nPhase, nRawId, nPartId, dCurrOvmH) + if not bOk then + return false, sErr + end + end end end -- se devo inserire il chamfer diff --git a/LuaLibs/ProcessProfHead.lua b/LuaLibs/ProcessProfHead.lua index 3067d8c..9464fe6 100644 --- a/LuaLibs/ProcessProfHead.lua +++ b/LuaLibs/ProcessProfHead.lua @@ -1,10 +1,11 @@ --- ProcessProfHead.lua by Egaltech s.r.l. 2022/05/24 +-- ProcessProfHead.lua by Egaltech s.r.l. 2022/05/28 -- Gestione calcolo profilo di testa per Travi -- 2021/05/03 Aggiunta gestione smusso da sopra e sotto per macchina con testa sotto. -- 2021/06/28 Per macchine con testa sotto, smussi di lato con questa testa se non c'è lav.ne da sopra. -- 2021/10/12 Estesa gestione di testa da sotto, se presente. -- 2022/02/02 Aggiunta funzione OnlyChamfer. -- 2022/05/24 Aggiunta fresatura da sotto su macchine con testa da sotto. +-- 2022/05/28 Aggiunto calcolo svuotatura da modulo di libreria. -- Tabella per definizione modulo local ProcessProfHead = {} @@ -12,6 +13,7 @@ local ProcessProfHead = {} -- Include require( 'EgtBase') local BL = require( 'BeamLib') +local Fbp = require( 'FaceByPocket') local Cut = require( 'ProcessCut') EgtOutLog( ' ProcessProfHead started', 1) @@ -260,19 +262,38 @@ function ProcessProfHead.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH) if nChamfer < 0 then return false, sChamfer end - -- se smusso non è esclusivo, aggiungo sgrossatura con taglio di lama + -- se smusso non è esclusivo, aggiungo sgrossatura if nChamfer < 2 then - -- aggiungo taglio di lama di sgrossatura e lo lavoro + -- aggiungo piano di sgrossatura e lo lavoro local ptStart, vtNP = GetSawCutData( AuxId, vtN) local AddId = EgtSurfTmPlaneInBBox( nAddGrpId, ptStart, vtNP, b3Solid, GDB_RT.GLOB) if AddId and BL.GetFaceElevation( AddId, 0, nPartId) > 20.0 then EgtSetName( AddId, 'AddCut_' .. tostring( Proc.Id)) EgtSetInfo( AddId, 'TASKID', Proc.TaskId) - -- applico la lavorazione - local CutProc = { Id = AddId, Grp = Proc.Grp, Prc = Proc.Prc, Box = Proc.Box, Fct = Proc.Fct, Flg = Proc.Flg, - Head = Proc.Head, Tail = Proc.Tail, CutId = Proc.CutId, TaskId = Proc.TaskId} - local bOk, sErr = Cut.Make( CutProc, nPhase, nRawId, nPartId, dCurrOvmH) - if not bOk then return bOk, sErr end + -- se macchina PF o ONE e profilo sopra davanti e pezzo alto applico svuotatura + if BD.C_SIMM and not BD.DOWN_HEAD and vtNP:getZ() > 0 and vtNP:getX() > 0 and b3Raw:getDimZ() > 550 then + -- recupero la lavorazione + local sPockType = 'OpenPocket' + local sPocketing = ML.FindPocketing( sPockType, nil, nil, nil, true, false) + if not sPocketing then + local sErr = 'Error : pocketing '..sPockType..' not found in library' + EgtOutLog( sErr) + return false, sErr + end + -- eseguo le svuotature necessarie + local bOk, sErr = Fbp.Make( Proc, AddId, 0, sPocketing, nPartId, b3Solid) + if not bOk then + return false, sErr + end + -- altrimenti applico taglio di lama + else + local CutProc = { Id = AddId, Grp = Proc.Grp, Prc = Proc.Prc, Box = Proc.Box, Fct = Proc.Fct, Flg = Proc.Flg, + Head = Proc.Head, Tail = Proc.Tail, CutId = Proc.CutId, TaskId = Proc.TaskId} + local bOk, sErr = Cut.Make( CutProc, nPhase, nRawId, nPartId, dCurrOvmH) + if not bOk then + return false, sErr + end + end end end -- se devo inserire il chamfer diff --git a/LuaLibs/ProcessTenon.lua b/LuaLibs/ProcessTenon.lua index f752202..5fc7803 100644 --- a/LuaLibs/ProcessTenon.lua +++ b/LuaLibs/ProcessTenon.lua @@ -1,8 +1,9 @@ --- ProcessTenon.lua by Egaltech s.r.l. 2022/05/18 +-- ProcessTenon.lua by Egaltech s.r.l. 2022/05/28 -- Gestione calcolo tenone per Travi -- 2021/10/04 Corretto calcolo HCING per pezzi piccoli. -- 2022/02/15 Aggiornata VerifyOrientation per macchine con testa da sotto. -- 2022/05/18 Migliorata gestione attacco. +-- 2022/05/28 Spostato calcolo svuotatura in modulo di libreria. -- Tabella per definizione modulo local ProcessTenon = {} @@ -10,6 +11,7 @@ local ProcessTenon = {} -- Include require( 'EgtBase') local BL = require( 'BeamLib') +local Fbp = require( 'FaceByPocket') local Cut = require( 'ProcessCut') EgtOutLog( ' ProcessTenon started', 1) @@ -79,41 +81,6 @@ function ProcessTenon.Classify( Proc, b3Raw) return true, bDown end ---------------------------------------------------------------------- -local function ApplyPocket( Proc, sPocketing, nStep, dSurfStep, nIdSurf, vtExtr) - - -- inserisco la lavorazione di svuotatura - local sName = 'Pock_' .. ( EgtGetName( Proc.Id) or tostring( Proc.Id)) .. '_' .. nStep - local nMchFId = EgtAddMachining( sName, sPocketing) - if not nMchFId then - local sErr = 'Error adding machining ' .. sName .. '-' .. sPocketing - return false, sErr - end - -- aggiungo geometria - EgtSetMachiningGeometry( {{ nIdSurf, -1}}) - -- imposto uso faccia - EgtSetMachiningParam( MCH_MP.FACEUSE, MCH_MILL_FU.ORTHO_CONT) - if dSurfStep > 0 then - -- imposto elevazione - local sNotes = 'MaxElev=' .. EgtNumToString( dSurfStep, 2) .. ';' - EgtSetMachiningParam( MCH_MP.USERNOTES, sNotes) - end - -- imposto posizione braccio porta testa - local nSCC = MCH_SCC.NONE - if not BD.C_SIMM and not BD.TURN then - nSCC = EgtIf( vtExtr:getX() < GEO.EPS_SMALL, MCH_SCC.ADIR_XM, MCH_SCC.ADIR_XP) - end - EgtSetMachiningParam( MCH_MP.SCC, nSCC) - -- eseguo - if not ML.ApplyMachining( true, false) then - local _, sErr = EgtGetLastMachMgrError() - EgtSetOperationMode( nMchFId, false) - return false, sErr - end - - return true -end - --------------------------------------------------------------------- -- Applicazione della lavorazione function ProcessTenon.Make( Proc, nPhase, nRawId, nPartId, dOvmHead) @@ -180,43 +147,16 @@ function ProcessTenon.Make( Proc, nPhase, nRawId, nPartId, dOvmHead) EgtSetInfo( AddId, 'TASKID', Proc.TaskId) -- se pezzo piccolo, in coda, con piano inclinato verso il basso e macchina con testa da sotto applico svuotatura if bShortPart and vtExtr:getX() < 0 and vtExtr:getZ() < -0.09 and BD.DOWN_HEAD then + -- recupero la lavorazione local sPockType = EgtIf( bMillDown, 'OpenPocket_H2', 'OpenPocket') local sPocketing = ML.FindPocketing( sPockType, nil, nil, nil, not bMillDown, bMillDown) - local dMaxDepth = 100 - local dStep = 30 - local nSurfStep - -- acquisisco i dati necessari dall'utensile - if EgtMdbSetCurrMachining( sPocketing) then - local sTuuid = EgtMdbGetCurrMachiningParam( MCH_MP.TUUID) - dStep = EgtMdbGetCurrMachiningParam( MCH_MP.STEP) or dStep - if EgtTdbSetCurrTool( EgtTdbGetToolFromUUID( sTuuid) or '') then - dMaxDepth = EgtTdbGetCurrToolMaxDepth() or dMaxDepth - end - end - -- acquisisco elevazione - local dElev = BL.GetFaceElevation( AddId, 0, nPartId) - nSurfStep = ceil( dElev / dMaxDepth) - dSurfStep = dElev / nSurfStep - local bOk = true - local sErr - -- copio superfice al passo superfice e ci applico la lavorazione - for i = nSurfStep, 2, -1 do - local nAddIdTmp = EgtSurfTmPlaneInBBox( nAddGrpId, ptC+((dSurfStep*(i-1))*vtN), vtN, b3Solid, GDB_RT.GLOB) - if nAddIdTmp then - EgtSetName( nAddIdTmp, 'AddCut_' .. tostring( Proc.Id)) - EgtSetInfo( nAddIdTmp, 'TASKID', Proc.TaskId) - -- aggiungo lavorazione - bOk, sErr = ApplyPocket( Proc, sPocketing, i, (dSurfStep + 0), nAddIdTmp, vtExtr) - if not bOk then - break - end - end - end - if not bOk then + if not sPocketing then + local sErr = 'Error : pocketing '..sPockType..' not found in library' + EgtOutLog( sErr) return false, sErr end - -- faccio ultima superfice - bOk, sErr = ApplyPocket( Proc, sPocketing, 1, EgtIf( nSurfStep > 1, ( dSurfStep + 0), 0), AddId, vtExtr) + -- eseguo le svuotature necessarie + local bOk, sErr = Fbp.Make( Proc, AddId, 0, sPocketing, nPartId, b3Solid) if not bOk then return false, sErr end @@ -227,7 +167,9 @@ function ProcessTenon.Make( Proc, nPhase, nRawId, nPartId, dOvmHead) Head = Proc.Head, Tail = Proc.Tail, CutId = Proc.CutId, TaskId = Proc.TaskId} local bFromBottom = ( bShortPart and vtExtr:getZ() > 0.25) local bOk, sErr = Cut.Make( CutProc, nPhase, nRawId, nPartId, dOvmHead, bFromBottom) - if not bOk then return bOk, sErr end + if not bOk then + return false, sErr + end end end end