diff --git a/LuaLibs/MachiningLib.lua b/LuaLibs/MachiningLib.lua index 9531b97..4115602 100644 --- a/LuaLibs/MachiningLib.lua +++ b/LuaLibs/MachiningLib.lua @@ -871,7 +871,7 @@ function MachiningLib.AddOperations( vProc, Part, sRotation) nErr, sErr = EgtGetLastMachMgrError() EgtSetOperationMode( nOperationId, false) -- update risultati - -- TODO è corretto mettere non applicabile????? + -- TODO è corretto mettere non applicabile????? disattivare e dare un'incompleta gialla? RESULT[MACHININGS[i].Proc.nIndexInResult].ChosenStrategy.sStatus = 'Not-Applicable' RESULT[MACHININGS[i].Proc.nIndexInResult].ChosenStrategy.sApplyInfo = sErr RESULT[MACHININGS[i].Proc.nIndexInResult].ChosenStrategy.nApplyError = nErr @@ -996,6 +996,19 @@ function MachiningLib.GetTimeToMachineAllStepsWithLeadInOut( Machining) dLengthToMachineAllStepsWithLeadInOut = Machining.CloneStepsLongitudinal.nCount * ( ( 2 * Machining.Steps.nCount - 1) * Machining.dLengthToMachine + 2 * 10 * ( Machining.Steps.nCount - 1) + 2 * ( Machining.dDepthToMachine + ( TOOLS[Machining.nToolIndex].SetupInfo.dZSafeDelta or 60) + EgtMdbGetGeneralParam( MCH_GP.SAFEZ))) 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)) + 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) + local nOffsets = ceil ( ( dShortEdgeDimension - TOOLS[Machining.nToolIndex].dSideStep) / TOOLS[Machining.nToolIndex].dSideStep) + 1 + for i = 1, floor( nOffsets / 2) do + dLengthToMachineAllStepsWithLeadInOut = dLengthToMachineAllStepsWithLeadInOut + + 2 * ( dShortEdgeDimension - 2 * ( i - 1) * TOOLS[Machining.nToolIndex].dSideStep) + + 2 * ( dLongEdgeDimension - 2 * ( i - 1) * TOOLS[Machining.nToolIndex].dSideStep) + end + dLengthToMachineAllStepsWithLeadInOut = dLengthToMachineAllStepsWithLeadInOut * nSteps + dTimeToMachineTotal = dLengthToMachineAllStepsWithLeadInOut / dToolFeed else error( 'GetTimeToMachineAllStepsWithLeadInOut : unknown machining type') end diff --git a/Strategies/Standard/STR0002/STR0002.lua b/Strategies/Standard/STR0002/STR0002.lua index ef1062c..6e96561 100644 --- a/Strategies/Standard/STR0002/STR0002.lua +++ b/Strategies/Standard/STR0002/STR0002.lua @@ -363,7 +363,7 @@ local function GetBestPocketingStrategy( Proc) end ------------------------------------------------------------------------------------------------------------- -local function GetSplitSurfaces( Proc, Part) +local function GetSplitSurfaces( Proc, Part, bAddMachining) local vAddId = {} local vAddIdTunnel = {} local nAddGrpId = BeamLib.GetAddGroup( Part.id) @@ -378,6 +378,10 @@ local function GetSplitSurfaces( Proc, Part) if #FeatureSplittingPoints == 0 then 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) + end table.insert( vAddId, nAddId) table.insert( vAddIdTunnel, nAddIdTunnel) else @@ -399,6 +403,10 @@ local function GetSplitSurfaces( Proc, Part) EgtCutSurfTmPlane( nAddId, ptSplit, X_AX(), true, GDB_RT.GLOB) 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) + end table.insert( vAddId, nAddId) table.insert( vAddIdTunnel, nAddIdTunnel) end @@ -408,6 +416,10 @@ local function GetSplitSurfaces( Proc, Part) local ptSplit = FeatureSplittingPoints[#FeatureSplittingPoints] + Vector3d( BeamData.MILL_OVERLAP / 2, 0, 0) 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) + end table.insert( vAddId, nAddId) table.insert( vAddIdTunnel, nAddIdTunnel) end @@ -424,6 +436,7 @@ function STR0002.Make( bAddMachining, Proc, Part, CustomParameters) Strategy.Parameters = BeamLib.LoadCustomParametersInStrategy( Proc, CustomParameters, StrategyLib.Config) Strategy.Machining = {} Strategy.Result = {} + Strategy.Result.dTimeToMachine = 0 if not IsTopologyOk( Proc) then local sErr = 'Feature '.. Proc.idFeature .. ' : strategy ' .. StrategyLib.Config.sStrategyId .. ' not implemented' @@ -438,12 +451,12 @@ function STR0002.Make( bAddMachining, Proc, Part, CustomParameters) Strategy.Machining = GetBestPocketingStrategy( Proc) - if bAddMachining and Strategy.Result.sStatus ~= 'Not-Applicable' then + if Strategy.Result.sStatus ~= 'Not-Applicable' then local vAddId = {} local vAddIdTunnel = {} -- recupero superficie, se necessario trimmata sugli spezzoni - vAddId, vAddIdTunnel = GetSplitSurfaces( Proc, Part) + vAddId, vAddIdTunnel = GetSplitSurfaces( Proc, Part, bAddMachining) -- si applicano le lavorazioni for i = 1, #vAddId do @@ -477,7 +490,13 @@ function STR0002.Make( bAddMachining, Proc, Part, CustomParameters) if Proc.AffectedFaces.bLeft then Pocketing.sStage = 'AfterTail' end - bAreAllMachiningsAdded = MachiningLib.AddMachinings( Proc, Pocketing) + + Pocketing.dTimeToMachine = MachiningLib.GetTimeToMachineAllStepsWithLeadInOut( Pocketing) + Strategy.Result.dTimeToMachine = Strategy.Result.dTimeToMachine + Pocketing.dTimeToMachine + + if bAddMachining then + bAreAllMachiningsAdded = MachiningLib.AddMachinings( Proc, Pocketing) + end else -- TODO controllare parametro danneggiamento ammesso per decidere se spostare dopo taglio seprazione -- se è aperta sulla coda, dico che deve essere fatta dopo la separazione @@ -494,7 +513,13 @@ function STR0002.Make( bAddMachining, Proc, Part, CustomParameters) end if vtNSplitFace and AreSameVectorApprox( vtNSplitFace * EgtIf( Pocketing.bToolInvert, -1, 1), Strategy.Machining[j].vtFaceNormal) then Pocketing.Geometry = {{ nIdTm, k - 1}} - bAreAllMachiningsAdded = bAreAllMachiningsAdded and MachiningLib.AddMachinings( Proc, Pocketing) + + Pocketing.dTimeToMachine = MachiningLib.GetTimeToMachineAllStepsWithLeadInOut( Pocketing) + Strategy.Result.dTimeToMachine = Strategy.Result.dTimeToMachine + Pocketing.dTimeToMachine + + if bAddMachining then + bAreAllMachiningsAdded = bAreAllMachiningsAdded and MachiningLib.AddMachinings( Proc, Pocketing) + end break end end