diff --git a/LuaLibs/MachiningLib.lua b/LuaLibs/MachiningLib.lua index 4115602..559c41a 100644 --- a/LuaLibs/MachiningLib.lua +++ b/LuaLibs/MachiningLib.lua @@ -190,7 +190,7 @@ function MachiningLib.GetSplitMachinings( Machinings, SplittingPoints, Part) end Machinings[nCurrentMachiningIndex].nFeatureSegment = j Machinings[nCurrentMachiningIndex].dLengthToMachine = Machinings[nCurrentMachiningIndex].dEdgeLength + Machinings[nCurrentMachiningIndex].LeadIn.dStartAddLength + Machinings[nCurrentMachiningIndex].LeadOut.dEndAddLength - Machinings[nCurrentMachiningIndex].dTimeToMachine = MachiningLib.GetTimeToMachineAllStepsWithLeadInOut( Machinings[nCurrentMachiningIndex]) + Machinings[nCurrentMachiningIndex].dTimeToMachine = MachiningLib.GetTimeToMachineAllStepsWithLeadInOut( Machinings[nCurrentMachiningIndex], Part) end -- anche le lavorazioni non splittate necessitano del segmento assegnato else @@ -220,7 +220,7 @@ function MachiningLib.GetSplitMachinings( Machinings, SplittingPoints, Part) end end Machinings[i].dLengthToMachine = Machinings[i].dEdgeLength + Machinings[i].LeadIn.dStartAddLength + Machinings[i].LeadOut.dEndAddLength - Machinings[i].dTimeToMachine = MachiningLib.GetTimeToMachineAllStepsWithLeadInOut( Machinings[i]) + Machinings[i].dTimeToMachine = MachiningLib.GetTimeToMachineAllStepsWithLeadInOut( Machinings[i], Part) end end @@ -947,7 +947,7 @@ function MachiningLib.GetToolMRR( Parameters) end ------------------------------------------------------------------------------------------------------------- -function MachiningLib.GetTimeToMachineAllStepsWithLeadInOut( Machining) +function MachiningLib.GetTimeToMachineAllStepsWithLeadInOut( Machining, Part) local dLengthToMachineAllStepsWithLeadInOut = 0 local dTimeToMachineTotal = 0 local dToolStartFeed = TOOLS[Machining.nToolIndex].Feeds.dStartFeed @@ -997,7 +997,9 @@ function MachiningLib.GetTimeToMachineAllStepsWithLeadInOut( Machining) dTimeToMachineTotal = Machining.CloneStepsLongitudinal.nCount * ( ( 2 * Machining.Steps.nCount - 1) * dTimeToMachineEdge + 2 * 10 / dToolFeed * ( Machining.Steps.nCount - 1) + dTimeToMachineLeadIn + dTimeToMachineLeadOut) end elseif Machining.nType == MCH_MY.POCKETING then - local dDepthToMachine = min( Machining.dElevation, ( Machining.dMaxElev or Machining.dElevation)) - ( max( 0, Machining.ToolInfo.dResidualDepth or 0)) + -- TODO le chiamate alla pocketing vanno unificate e uniformate + local dFaceElevation = EgtSurfTmFacetElevationInBBox( Machining.Geometry[1][1], Machining.Geometry[1][2], Part.b3Part, true, GDB_ID.ROOT) + local dDepthToMachine = min( dFaceElevation, ( Machining.dMaxElev or dFaceElevation)) - ( max( 0, Machining.dResidualDepth or 0)) local nSteps = ceil( ( dDepthToMachine - 50 * GEO.EPS_SMALL) / TOOLS[Machining.nToolIndex].dStep) local _, dLongEdgeDimension, dShortEdgeDimension = EgtSurfTmFacetMinAreaRectangle( Machining.Geometry[1][1], Machining.Geometry[1][2], GDB_ID.ROOT) -- TODO bisogna calcolare correttamente per lati aperti e chiusi (aperti: aggiungi D/2 - Sidestep, chiusi: sottrai - D/2) diff --git a/Strategies/Standard/STR0002/STR0002.lua b/Strategies/Standard/STR0002/STR0002.lua index 6e96561..453037f 100644 --- a/Strategies/Standard/STR0002/STR0002.lua +++ b/Strategies/Standard/STR0002/STR0002.lua @@ -379,8 +379,8 @@ local function GetSplitSurfaces( Proc, Part, bAddMachining) local nAddId = EgtCopyGlob( Proc.id, nAddGrpId) or GDB_ID.NULL local nAddIdTunnel = EgtCopyGlob( nOriginalTmIdTunnel, nAddGrpId) or GDB_ID.NULL if not bAddMachining then - nAddId = EgtSetLevel( nAddId, GDB_LV.TEMP) - nAddIdTunnel = EgtSetLevel( nAddIdTunnel, GDB_LV.TEMP) + EgtSetLevel( nAddId, GDB_LV.TEMP) + EgtSetLevel( nAddIdTunnel, GDB_LV.TEMP) end table.insert( vAddId, nAddId) table.insert( vAddIdTunnel, nAddIdTunnel) @@ -404,8 +404,8 @@ local function GetSplitSurfaces( Proc, Part, bAddMachining) EgtCutSurfTmPlane( nAddIdTunnel, ptSplit, X_AX(), true, GDB_RT.GLOB) end if not bAddMachining then - nAddId = EgtSetLevel( nAddId, GDB_LV.TEMP) - nAddIdTunnel = EgtSetLevel( nAddIdTunnel, GDB_LV.TEMP) + EgtSetLevel( nAddId, GDB_LV.TEMP) + EgtSetLevel( nAddIdTunnel, GDB_LV.TEMP) end table.insert( vAddId, nAddId) table.insert( vAddIdTunnel, nAddIdTunnel) @@ -417,8 +417,8 @@ local function GetSplitSurfaces( Proc, Part, bAddMachining) EgtCutSurfTmPlane( nAddId, ptSplit, X_AX(), true, GDB_RT.GLOB) EgtCutSurfTmPlane( nAddIdTunnel, ptSplit, X_AX(), true, GDB_RT.GLOB) if not bAddMachining then - nAddId = EgtSetLevel( nAddId, GDB_LV.TEMP) - nAddIdTunnel = EgtSetLevel( nAddIdTunnel, GDB_LV.TEMP) + EgtSetLevel( nAddId, GDB_LV.TEMP) + EgtSetLevel( nAddIdTunnel, GDB_LV.TEMP) end table.insert( vAddId, nAddId) table.insert( vAddIdTunnel, nAddIdTunnel) @@ -428,6 +428,7 @@ local function GetSplitSurfaces( Proc, Part, bAddMachining) end ------------------------------------------------------------------------------------------------------------- +-- TODO rimuovere il calcolo MRR dove non serve, è fatto tutto alla fine. function STR0002.Make( bAddMachining, Proc, Part, CustomParameters) -- carico parametri de default e li aggiorno con quelli passati dal chiamante (potrebbero non essere congruenti) local StrategyLib = {} @@ -446,6 +447,7 @@ function STR0002.Make( bAddMachining, Proc, Part, CustomParameters) end local bAreAllMachiningsAdded = true + local dFeatureVolume = FeatureLib.GetFeatureVolume( Proc, Part) local ToolInfo = {} local Pocketing = {} @@ -474,6 +476,7 @@ function STR0002.Make( bAddMachining, Proc, Part, CustomParameters) Pocketing.LeadIn.dTangentDistance = TOOLS[Strategy.Machining[j].ToolInfo.nToolIndex].dDiameter/2 Pocketing.LeadIn.dElevation = TOOLS[Strategy.Machining[j].ToolInfo.nToolIndex].dDiameter/2 Pocketing.sDepth = -Strategy.Machining[j].ToolInfo.dResidualDepth + Pocketing.dResidualDepth = Strategy.Machining[j].ToolInfo.dResidualDepth -- il quarto ciclo è la lavorazione opposta sulla faccia Tunnel if Strategy.Machining[j].bToolInvert then Pocketing.bToolInvert = true @@ -491,7 +494,7 @@ function STR0002.Make( bAddMachining, Proc, Part, CustomParameters) Pocketing.sStage = 'AfterTail' end - Pocketing.dTimeToMachine = MachiningLib.GetTimeToMachineAllStepsWithLeadInOut( Pocketing) + Pocketing.dTimeToMachine = MachiningLib.GetTimeToMachineAllStepsWithLeadInOut( Pocketing, Part) Strategy.Result.dTimeToMachine = Strategy.Result.dTimeToMachine + Pocketing.dTimeToMachine if bAddMachining then @@ -514,7 +517,7 @@ function STR0002.Make( bAddMachining, Proc, Part, CustomParameters) if vtNSplitFace and AreSameVectorApprox( vtNSplitFace * EgtIf( Pocketing.bToolInvert, -1, 1), Strategy.Machining[j].vtFaceNormal) then Pocketing.Geometry = {{ nIdTm, k - 1}} - Pocketing.dTimeToMachine = MachiningLib.GetTimeToMachineAllStepsWithLeadInOut( Pocketing) + Pocketing.dTimeToMachine = MachiningLib.GetTimeToMachineAllStepsWithLeadInOut( Pocketing, Part) Strategy.Result.dTimeToMachine = Strategy.Result.dTimeToMachine + Pocketing.dTimeToMachine if bAddMachining then @@ -527,6 +530,8 @@ function STR0002.Make( bAddMachining, Proc, Part, CustomParameters) end end end + -- TODO se incompleta il volume non è corretto, ma conta? L'MRR ha senso nelle incomplete?? + Strategy.Result.dMRR = ( dFeatureVolume / Strategy.Result.dTimeToMachine) / pow( 10, 6) else bAreAllMachiningsAdded = false end diff --git a/StrategyLibs/FACEBYBLADE.lua b/StrategyLibs/FACEBYBLADE.lua index 818320e..24af66a 100644 --- a/StrategyLibs/FACEBYBLADE.lua +++ b/StrategyLibs/FACEBYBLADE.lua @@ -80,7 +80,8 @@ local function CalculateLeadInOut( Machining, EdgeToMachine, Part) LeadOut.dTangentDistance = 0 if Machining.bIsStartClosed or Machining.bIsEndClosed - or Machining.CloneStepsRadial.nCount > 1 then + or Machining.CloneStepsRadial.nCount > 1 + or Machining.Steps.nCount > 1 then Machining.sLeadInOutType = 'Perpendicular' if AreSameVectorApprox( Machining.vtToolDirection, EdgeToMachine.vtN) then @@ -378,7 +379,7 @@ function FACEBYBLADE.Make( Proc, Part, FaceToMachine, EdgeToMachine, OptionalPar Cutting.dLengthToMachine = EdgeToMachine.dLength + Cutting.LeadIn.dStartAddLength + Cutting.LeadOut.dEndAddLength local b3BoxEdge = BBox3d( Cutting.ptEdge1, Cutting.ptEdge2) Cutting.dLengthOnX = b3BoxEdge:getDimX() - Cutting.dTimeToMachine, Cutting.dLengthToMachineAllStepsWithLeadInOut = MachiningLib.GetTimeToMachineAllStepsWithLeadInOut( Cutting) + Cutting.dTimeToMachine, Cutting.dLengthToMachineAllStepsWithLeadInOut = MachiningLib.GetTimeToMachineAllStepsWithLeadInOut( Cutting, Part) -- lunghezza impronta lama if Cutting.bIsStartClosed and Cutting.bIsEndClosed then Cutting.dToolMarkLength = abs( min( Cutting.LeadIn.dStartAddLength, Cutting.LeadOut.dEndAddLength)) diff --git a/StrategyLibs/FACEBYCHAINSAW.lua b/StrategyLibs/FACEBYCHAINSAW.lua index c0e1d3a..0646f49 100644 --- a/StrategyLibs/FACEBYCHAINSAW.lua +++ b/StrategyLibs/FACEBYCHAINSAW.lua @@ -215,7 +215,7 @@ function FACEBYCHAINSAW.Make( Proc, Part, FaceToMachine, EdgeToMachine, Optional -- TODO fare funzione EstimatePathLength o simile Mortising.dLengthToMachine = Mortising.dEdgeLength + Mortising.LeadIn.dStartAddLength + Mortising.LeadOut.dEndAddLength Mortising.dLengthOnX = abs( dLengthToMachine * EdgeToMachine.vtN:getY()) - Mortising.dTimeToMachine, Mortising.dLengthToMachineAllStepsWithLeadInOut = MachiningLib.GetTimeToMachineAllStepsWithLeadInOut( Mortising) + Mortising.dTimeToMachine, Mortising.dLengthToMachineAllStepsWithLeadInOut = MachiningLib.GetTimeToMachineAllStepsWithLeadInOut( Mortising, Part) -- area lavorata Mortising.dAreaToMachine = min( EdgeToMachine.dElevation, Mortising.dDepthToMachine) * ( min( Mortising.dEdgeLength, Mortising.dLengthToMachine + TOOLS[Mortising.nToolIndex].dDiameter)) -- geometria diff --git a/StrategyLibs/FACEBYMILL.lua b/StrategyLibs/FACEBYMILL.lua index 5c4a018..81540aa 100644 --- a/StrategyLibs/FACEBYMILL.lua +++ b/StrategyLibs/FACEBYMILL.lua @@ -379,7 +379,7 @@ function FACEBYMILL.Make( Proc, Part, FaceToMachine, EdgeToMachine, OptionalPara Milling.dLengthToMachine = EdgeToMachine.dLength + Milling.LeadIn.dStartAddLength + Milling.LeadOut.dEndAddLength local b3BoxEdge = BBox3d( Milling.ptEdge1, Milling.ptEdge2) Milling.dLengthOnX = b3BoxEdge:getDimX() - Milling.dTimeToMachine, Milling.dLengthToMachineAllStepsWithLeadInOut = MachiningLib.GetTimeToMachineAllStepsWithLeadInOut( Milling) + Milling.dTimeToMachine, Milling.dLengthToMachineAllStepsWithLeadInOut = MachiningLib.GetTimeToMachineAllStepsWithLeadInOut( Milling, Part) -- lunghezza impronta lama if Milling.bIsStartClosed and Milling.bIsEndClosed then Milling.dToolMarkLength = abs( min( Milling.LeadIn.dStartAddLength, Milling.LeadOut.dEndAddLength))