diff --git a/LuaLibs/BeamExec.lua b/LuaLibs/BeamExec.lua index c262acd..4c20fd2 100644 --- a/LuaLibs/BeamExec.lua +++ b/LuaLibs/BeamExec.lua @@ -121,6 +121,8 @@ function BeamExec.GetToolsFromDB() Tool.Feeds.dTipFeed = EgtTdbGetCurrToolParam( MCH_TP.TIPFEED) -- TODO serve funzione in BeamData che data la posizione dell'utensile e della testa, capisca il montaggio (testa sopra - testa sotto - aggregato - ecc...) Tool.sHead = EgtTdbGetCurrToolParam( MCH_TP.HEAD) + Tool.SetupInfo = {} + Tool.SetupInfo = BeamData.GetSetupInfo( Tool.sHead) Tool.sUUID = EgtTdbGetCurrToolParam( MCH_TP.UUID) Tool.sUserNotes = EgtTdbGetCurrToolParam( MCH_TP.USERNOTES) Tool.dMaxDepth = EgtTdbGetCurrToolMaxDepth() or Tool.dMaxMaterial diff --git a/LuaLibs/MachiningLib.lua b/LuaLibs/MachiningLib.lua index 95495b0..1c0cdcc 100644 --- a/LuaLibs/MachiningLib.lua +++ b/LuaLibs/MachiningLib.lua @@ -276,6 +276,186 @@ end -- funzione per aggiungere una nuova lavorazione -- TODO da fare function MachiningLib.AddNewMachining( Machining) + local nErr + local sErr + + -- Controllo parametri obbligatori + if not Machining.nType or not Machining.nToolIndex or not Machining.idProc or not Machining.idFaceToMachine then + return false + end + + -- Drilling + if Machining.nType == MCH_MY.DRILLING then + Machining.sTypeName = 'Drill_' + -- Milling + elseif Machining.nType == MCH_MY.MILLING then + -- se utensile lama + if TOOLS[Machining.nToolIndex].sFamily == 'SAWBLADE' then + Machining.sTypeName = 'Cut' + else + Machining.sTypeName = 'Milling' + end + -- Pocketing + elseif Machining.nType == MCH_MY.POCKETING then + Machining.sTypeName = 'Pocketing' + -- Mortising + elseif Machining.nType == MCH_MY.MORTISING then + Machining.sTypeName = 'Mortising' + end + + -- se nome non definito, assegno alla lavorazioen un nome standard + if not Machining.sOperationName then + Machining.sOperationName = Machining.sTypeName .. ( EgtGetName( Machining.idProc) or tostring( Machining.idProc)) .. '_' .. tostring( Machining.idFaceToMachine) + end + if not Machining.sToolName then + Machining.sToolName = TOOLS[Machining.nToolIndex].sName + end + + -- creazione lavorazione + local nOperationId = EgtCreateMachining( Machining.sOperationName, Machining.nType, Machining.sToolName) + + if nOperationId then + -- impostazione geometria + EgtSetMachiningGeometry( {{ Machining.idProc, Machining.idFaceToMachine}}) + + -- impostazione parametri lavorazione + if Machining.dDepth then + EgtSetMachiningParam( MCH_MP.DEPTH, Machining.dDepth) + end + if Machining.bInvert then + EgtSetMachiningParam( MCH_MP.INVERT, Machining.bInvert) + end + if Machining.nWorkside then + EgtSetMachiningParam( MCH_MP.WORKSIDE, Machining.nWorkside) + end + if Machining.nFaceuse then + EgtSetMachiningParam( MCH_MP.FACEUSE, Machining.nFaceuse) + end + if Machining.nSCC then + EgtSetMachiningParam( MCH_MP.SCC, Machining.nSCC) + end + if Machining.bToolInvert then + EgtSetMachiningParam( MCH_MP.TOOLINVERT, Machining.bToolInvert) + end + if Machining.sBlockedAxis then + EgtSetMachiningParam( MCH_MP.BLOCKEDAXIS, Machining.sBlockedAxis) + end + if Machining.sInitialAngles then + EgtSetMachiningParam( MCH_MP.INITANGS, Machining.sInitialAngles) + end + if Machining.nHeadSide then + EgtSetMachiningParam( MCH_MP.HEADSIDE, Machining.nHeadSide) + end + if Machining.nSubType then + EgtSetMachiningParam( MCH_MP.SUBTYPE, Machining.nSubType) + end + if Machining.dOverlap then + EgtSetMachiningParam( MCH_MP.OVERL, Machining.dOverlap) + end + + -- step + if Machining.Steps then + if Machining.Steps.dStepType then + EgtSetMachiningParam( MCH_MP.STEPTYPE, Machining.Steps.dStepType) + end + if Machining.Steps.dStep then + EgtSetMachiningParam( MCH_MP.STEP, Machining.Steps.dStep) + end + if Machining.Steps.dSideStep then + EgtSetMachiningParam( MCH_MP.SIDESTEP, Machining.Steps.dSideStep) + end + end + + if Machining.dStartPos then + EgtSetMachiningParam( MCH_MP.STARTPOS, Machining.dStartPos) + end + if Machining.dReturnPos then + EgtSetMachiningParam( MCH_MP.RETURNPOS, Machining.dReturnPos) + end + + if Machining.dRadialOffset then + EgtSetMachiningParam( MCH_MP.OFFSR, Machining.dRadialOffset) + end + if Machining.dLongitudinalOffset then + EgtSetMachiningParam( MCH_MP.OFFSL, Machining.dLongitudinalOffset) + end + + -- paraemtri attacco + if Machining.LeadIn then + if Machining.LeadIn.nType then + EgtSetMachiningParam( MCH_MP.LEADINTYPE, Machining.LeadIn.nType) + end + if Machining.LeadIn.dStartAddLength then + EgtSetMachiningParam( MCH_MP.STARTADDLEN, Machining.LeadIn.dStartAddLength) + end + if Machining.LeadIn.dTangentDistance then + EgtSetMachiningParam( MCH_MP.LITANG, Machining.LeadIn.dTangentDistance) + end + if Machining.LeadIn.dPerpDistance then + EgtSetMachiningParam( MCH_MP.LIPERP, Machining.LeadIn.dPerpDistance) + end + if Machining.LeadIn.dElevation then + EgtSetMachiningParam( MCH_MP.LIELEV, Machining.LeadIn.dElevation) + end + if Machining.LeadIn.dCompLength then + EgtSetMachiningParam( MCH_MP.LICOMPLEN, Machining.LeadIn.dCompLength) + end + end + -- parametri uscita + if Machining.LeadOut then + if Machining.LeadOut.nType then + EgtSetMachiningParam( MCH_MP.LEADOUTTYPE, Machining.LeadOut.nType) + end + if Machining.LeadOut.dEndAddLength then + EgtSetMachiningParam( MCH_MP.ENDADDLEN, Machining.LeadOut.dEndAddLength) + end + if Machining.LeadOut.dTangentDistance then + EgtSetMachiningParam( MCH_MP.LOTANG, Machining.LeadOut.dTangentDistance) + end + if Machining.LeadOut.dPerpDistance then + EgtSetMachiningParam( MCH_MP.LOPERP, Machining.LeadOut.dPerpDistance) + end + if Machining.LeadOut.dElevation then + EgtSetMachiningParam( MCH_MP.LOELEV, Machining.LeadOut.dElevation) + end + if Machining.LeadOut.dCompLength then + EgtSetMachiningParam( MCH_MP.LOCOMPLEN, Machining.LeadOut.dCompLength) + end + end + + if Machining.dStartSlowLen then + EgtSetMachiningParam( MCH_MP.STARTSLOWLEN, Machining.dStartSlowLen) + end + if Machining.dEndSlowLen then + EgtSetMachiningParam( MCH_MP.ENDSLOWLEN, Machining.dEndSlowLen) + end + if Machining.dThrouAddLen then + EgtSetMachiningParam( MCH_MP.THROUADDLEN, Machining.dThrouAddLen) + end + -- parametri da settare nelle note + local sUserNotes = EgtGetMachiningParam( MCH_MP.USERNOTES) + if Machining.dMaxElev then + sUserNotes = EgtSetValInNotes( sUserNotes, 'MaxElev', Machining.dMaxElev) + end + EgtSetMachiningParam( MCH_MP.USERNOTES, sUserNotes) + + local bIsApplyOk = MachiningLib.ApplyMachining( true, false) + if not bIsApplyOk then + nErr, sErr = EgtGetLastMachMgrError() + EgtSetOperationMode( nOperationId, false) + return false + end + else + return false + end + + return true, sErr +end + +------------------------------------------------------------------------------------------------------------- +function MachiningLib.ApplyMachining( bRecalc, bApplyPost) + local bResult = EgtApplyMachining( bRecalc, bApplyPost) + return bResult end ------------------------------------------------------------------------------------------------------------- diff --git a/Process.lua b/Process.lua index bdde394..cea53a8 100644 --- a/Process.lua +++ b/Process.lua @@ -322,10 +322,10 @@ end ------------------------------------------------------------------------------------------------------------- if not MyProcessInputData() then return end -if not GetDataConfig() then return end - if not MyProcessBeams() then return end +if not GetDataConfig() then return end + -- Abilito Vmill EgtSetInfo( EgtGetCurrMachGroup(), 'Vm', '1') diff --git a/Strategies/STR0002/STR0002.lua b/Strategies/STR0002/STR0002.lua index 38f33bf..8695db2 100644 --- a/Strategies/STR0002/STR0002.lua +++ b/Strategies/STR0002/STR0002.lua @@ -48,6 +48,10 @@ function STR0002.Make( bAddMachining, Proc, Part, CustomParameters) end local ToolInfo = {} + local Pocketing = {} + Pocketing.Steps = {} + Pocketing.LeadIn = {} + Pocketing.LeadOut = {} -- serve utensile che possa lavorare di testa local ToolSearchParameters = {} @@ -141,35 +145,44 @@ function STR0002.Make( bAddMachining, Proc, Part, CustomParameters) end -- si applicano le lavorazioni for i = 1, #vAddId do - EgtCreateMachining( 'Svuotatura', MCH_OY.POCKETING, TOOLS[ToolInfo.nToolIndex].sName) - EgtSetMachiningParam( MCH_MP.STEP, TOOLS[ToolInfo.nToolIndex].dStep) - EgtSetMachiningParam( MCH_MP.DEPTH, min( 0, -ToolInfo.dResidualDepth)) - EgtSetMachiningParam( MCH_MP.SIDESTEP, TOOLS[ToolInfo.nToolIndex].dSideStep) - EgtSetMachiningParam( MCH_MP.SUBTYPE, MCH_POCK_SUB.SPIRALOUT) - EgtSetMachiningParam( MCH_MP.LEADINTYPE, MCH_POCK_LI.ZIGZAG) - EgtSetMachiningParam( MCH_MP.LITANG, TOOLS[ToolInfo.nToolIndex].dDiameter/2) - EgtSetMachiningParam( MCH_MP.LIELEV, TOOLS[ToolInfo.nToolIndex].dDiameter/2) + Pocketing.nToolIndex = ToolInfo.nToolIndex + Pocketing.nType = MCH_OY.POCKETING + Pocketing.sOperationName = 'Svuotatura' + Pocketing.Steps.dStep = TOOLS[ToolInfo.nToolIndex].dStep + -- TODO controllare segno e valore minimo + Pocketing.dDepth = ToolInfo.dMaxMatReduction + + Pocketing.Steps.dSideStep = TOOLS[ToolInfo.nToolIndex].dSideStep + Pocketing.nSubType = MCH_POCK_SUB.SPIRALOUT + Pocketing.LeadIn.nType = MCH_POCK_LI.ZIGZAG + Pocketing.LeadIn.TangentDistance = TOOLS[ToolInfo.nToolIndex].dDiameter/2 + Pocketing.LeadIn.Elevation = TOOLS[ToolInfo.nToolIndex].dDiameter/2 for j=1, Proc.nFct do local vtNSplitFace _, vtNSplitFace = EgtSurfTmFacetCenter( vAddId[i], j - 1, GDB_ID.ROOT) if vtNSplitFace and AreSameVectorExact( vtNSplitFace, Proc.MainFaces.BottomFace.vtN) then - EgtSetMachiningGeometry( {{ vAddId[i], j - 1}}) - EgtApplyMachining( true, true) + Pocketing.idFaceToMachine = j - 1 + Pocketing.idProc = vAddId[i] + MachiningLib.AddNewMachining( Pocketing) break end end end else - EgtCreateMachining( 'Svuotatura', MCH_OY.POCKETING, TOOLS[ToolInfo.nToolIndex].sName) - EgtSetMachiningParam( MCH_MP.STEP, TOOLS[ToolInfo.nToolIndex].dStep) - EgtSetMachiningParam( MCH_MP.DEPTH, min( 0, -ToolInfo.dResidualDepth)) - EgtSetMachiningParam( MCH_MP.SIDESTEP, TOOLS[ToolInfo.nToolIndex].dSideStep) - EgtSetMachiningParam( MCH_MP.SUBTYPE, MCH_POCK_SUB.SPIRALOUT) - EgtSetMachiningParam( MCH_MP.LEADINTYPE, MCH_POCK_LI.ZIGZAG) - EgtSetMachiningParam( MCH_MP.LITANG, TOOLS[ToolInfo.nToolIndex].dDiameter/2) - EgtSetMachiningParam( MCH_MP.LIELEV, TOOLS[ToolInfo.nToolIndex].dDiameter/2) - EgtSetMachiningGeometry( {{ Proc.id, Proc.MainFaces.BottomFace.id}}) - EgtApplyMachining( true, true) + Pocketing.nToolIndex = ToolInfo.nToolIndex + Pocketing.nType = MCH_OY.POCKETING + Pocketing.sOperationName = 'Svuotatura' + Pocketing.Steps.dStep = TOOLS[ToolInfo.nToolIndex].dStep + -- TODO controllare segno e valore minimo + Pocketing.dDepth = ToolInfo.dMaxMatReduction + Pocketing.Steps.dSideStep = TOOLS[ToolInfo.nToolIndex].dSideStep + Pocketing.nSubType = MCH_POCK_SUB.SPIRALOUT + Pocketing.LeadIn.nType = MCH_POCK_LI.ZIGZAG + Pocketing.LeadIn.TangentDistance = TOOLS[ToolInfo.nToolIndex].dDiameter/2 + Pocketing.LeadIn.Elevation = TOOLS[ToolInfo.nToolIndex].dDiameter/2 + Pocketing.idFaceToMachine = Proc.MainFaces.BottomFace.id + Pocketing.idProc = Proc.id + MachiningLib.AddNewMachining( Pocketing) end end else