diff --git a/LuaLibs/MachiningLib.lua b/LuaLibs/MachiningLib.lua index d4125ce..1da3b8d 100644 --- a/LuaLibs/MachiningLib.lua +++ b/LuaLibs/MachiningLib.lua @@ -199,8 +199,8 @@ function MachiningLib.GetSplitMachinings( Machinings, SplittingPoints, Part ) -- si considerano allungamenti e accorciamenti solo se la feature è orientata principalmente lungo X -- TODO il modo corretto è proiettare tutto, allungamenti e accorciamenti compresi, sulla faccia frontale if abs( Machinings[i].vtToolDirection:getX()) < 0.707 then - dRightAddLength = dOriginalStartAddLength - dLeftAddLength = dOriginalEndAddLength + dRightAddLength = OriginalLeadIn.dStartAddLength + dLeftAddLength = OriginalLeadOut.dEndAddLength if MachiningLib.StartsLeftSide( Machinings[i]) then dRightAddLength, dLeftAddLength = dLeftAddLength, dRightAddLength end diff --git a/Strategies/Standard/STR0003/STR0003.lua b/Strategies/Standard/STR0003/STR0003.lua index 12a1abe..c05cd50 100644 --- a/Strategies/Standard/STR0003/STR0003.lua +++ b/Strategies/Standard/STR0003/STR0003.lua @@ -240,38 +240,48 @@ function STR0003.Make( bAddMachining, Proc, Part, CustomParameters) dPocketHeight = Proc.MainFaces.BottomFaces[1].MainEdges.SideEdges[1].dLength end + -- riferimenti locali per leggibilità e performance + local LongFace = Proc.MainFaces.LongFaces[1] + local OppositeEdge1 = LongFace.MainEdges.OppositeEdges[1] + local OppositeEdge2 = LongFace.MainEdges.OppositeEdges[2] + local SideEdge1 = LongFace.MainEdges.SideEdges[1] + local SideEdge2 = LongFace.MainEdges.SideEdges[2] + local BottomEdge = LongFace.MainEdges.BottomEdge + -- lama - calcolo lavorazioni local Cutting = {} - local OptionalParameters = { bForceLongcutBlade = Strategy.Parameters.bForceLongcutBlade, - dExtendAfterTail = dExtendAfterTail, - dPocketHeight = dPocketHeight, - bIsSplitFeature = bIsSplitFeature, - dMinNzDownUp = 0} + local OptionalParameters = { + bForceLongcutBlade = Strategy.Parameters.bForceLongcutBlade, + dExtendAfterTail = dExtendAfterTail, + dPocketHeight = dPocketHeight, + bIsSplitFeature = bIsSplitFeature, + dMinNzDownUp = 0 + } if Proc.Topology.sFamily == 'Tunnel' then OptionalParameters.bOppositeToolDirection = true - Cutting = FaceByBlade.Make( Proc, Part, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.OppositeEdges[1], OptionalParameters) + Cutting = FaceByBlade.Make( Proc, Part, LongFace, OppositeEdge1, OptionalParameters) else - Cutting = FaceByBlade.Make( Proc, Part, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.BottomEdge, OptionalParameters) + Cutting = FaceByBlade.Make( Proc, Part, LongFace, BottomEdge, OptionalParameters) end Blade.AddResult( Cutting) -- lato opposto del tunnel if Proc.Topology.sFamily == 'Tunnel' then OptionalParameters.bOppositeToolDirection = true - Cutting = FaceByBlade.Make( Proc, Part, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.OppositeEdges[2], OptionalParameters) + Cutting = FaceByBlade.Make( Proc, Part, LongFace, OppositeEdge2, OptionalParameters) Blade.AddResult( Cutting) else -- se la lama non è arrivata sul fondo e c'è almeno un lato aperto va lavorato if Blade.Result.Bottom[1].dResidualDepth > 10 * GEO.EPS_SMALL then -- eventuale lavorazione di lama - lato della tasca da cui inizia la lavorazione - if Proc.MainFaces.LongFaces[1].MainEdges.BottomEdge.bIsStartOpen then + if BottomEdge.bIsStartOpen then OptionalParameters.bOppositeToolDirection = true - Cutting = FaceByBlade.Make( Proc, Part, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.SideEdges[1], OptionalParameters) + Cutting = FaceByBlade.Make( Proc, Part, LongFace, SideEdge1, OptionalParameters) Blade.AddResult( Cutting) end -- eventuale lavorazione di lama - lato della tasca in cui finisce la lavorazione - if Proc.MainFaces.LongFaces[1].MainEdges.BottomEdge.bIsEndOpen then + if BottomEdge.bIsEndOpen then OptionalParameters.bOppositeToolDirection = true - Cutting = FaceByBlade.Make( Proc, Part, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.SideEdges[2], OptionalParameters) + Cutting = FaceByBlade.Make( Proc, Part, LongFace, SideEdge2, OptionalParameters) Blade.AddResult( Cutting) end -- la lama è arrivata sul fondo e tasca passante, non servono ulteriori lavorazioni @@ -316,9 +326,10 @@ function STR0003.Make( bAddMachining, Proc, Part, CustomParameters) Strategy.Result.nCompletionIndex = FeatureLib.GetFeatureCompletionIndex( dFinalCompletionPercentage) Strategy.Result.nQuality = TOOLS[Cutting.nToolIndex].nQuality local MRRParametersBlade = { - dStep = TOOLS[Cutting.nToolIndex].dThickness, - dSideStep = min( TOOLS[Cutting.nToolIndex].dSideStep, Proc.MainFaces.LongFaces[1].MainEdges.SideEdges[1].dLength), - dFeed = TOOLS[Cutting.nToolIndex].Feeds.dFeed} + dStep = TOOLS[Cutting.nToolIndex].dThickness, + dSideStep = min( TOOLS[Cutting.nToolIndex].dSideStep, SideEdge1.dLength), + dFeed = TOOLS[Cutting.nToolIndex].Feeds.dFeed + } local dMRRBlade = MachiningLib.GetToolMRR( MRRParametersBlade) Strategy.Result.dMRR = dMRRBlade @@ -326,40 +337,61 @@ function STR0003.Make( bAddMachining, Proc, Part, CustomParameters) end -- sega a catena - calcolo lavorazioni - -- TODO riordinare le righe troppo lunghe + -- TODO reset dei parametri opzionali!!!!!!!!!!!!! local Mortising = {} - OptionalParameters = {} + -- parametri comuni a tutte le lavorazioni + OptionalParameters = { + dExtendAfterTail = dExtendAfterTail, + dPocketHeight = dPocketHeight, + bIsSplitFeature = bIsSplitFeature + } if Proc.Topology.sName == 'Groove-4-Blind' or Proc.Topology.sName == 'Pocket-5-Blind' then -- si lavora solamente l'impronta lama sui lati chiusi if ( Blade.Result.Bottom[1].dResidualDepth < 10 * GEO.EPS_SMALL) and - ( Proc.MainFaces.LongFaces[1].MainEdges.BottomEdge.dLength > 3 * Blade.Result.Bottom[1].dBladeMarkLength - 10 * GEO.EPS_SMALL) then + ( BottomEdge.dLength > 3 * Blade.Result.Bottom[1].dBladeMarkLength - 10 * GEO.EPS_SMALL) then - if not Proc.MainFaces.LongFaces[1].MainEdges.BottomEdge.bIsStartOpen then - local OptionalParameters = { sSideToMachine = 'Start', dLengthToMachine = Blade.Result.Bottom[1].dBladeMarkLength, dExtendAfterTail = dExtendAfterTail, dPocketHeight = dPocketHeight, bIsSplitFeature = bIsSplitFeature} - Mortising = FaceByChainsaw.Make( Proc, Part, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.BottomEdge, OptionalParameters) + if not BottomEdge.bIsStartOpen then + OptionalParameters.sSideToMachine = 'Start' + OptionalParameters.dLengthToMachine = Blade.Result.Bottom[1].dBladeMarkLength + + Mortising = FaceByChainsaw.Make( Proc, Part, LongFace, BottomEdge, OptionalParameters) Chainsaw.AddResult( Mortising) end - if not Proc.MainFaces.LongFaces[1].MainEdges.BottomEdge.bIsEndOpen then - local OptionalParameters = { sSideToMachine = 'End', dLengthToMachine = Blade.Result.Bottom[1].dBladeMarkLength, dExtendAfterTail = dExtendAfterTail, dPocketHeight = dPocketHeight, bIsSplitFeature = bIsSplitFeature} - Mortising = FaceByChainsaw.Make( Proc, Part, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.BottomEdge, OptionalParameters) + if not BottomEdge.bIsEndOpen then + OptionalParameters.sSideToMachine = 'End' + OptionalParameters.dLengthToMachine = Blade.Result.Bottom[1].dBladeMarkLength + + Mortising = FaceByChainsaw.Make( Proc, Part, LongFace, BottomEdge, OptionalParameters) Chainsaw.AddResult( Mortising) end + + OptionalParameters.sSideToMachine = nil + OptionalParameters.dLengthToMachine = nil -- si lavora tutto il fondo else - local OptionalParameters = { dMaxElev = Blade.Result.Bottom[1].dResidualDepth + BeamData.CUT_EXTRA, dExtendAfterTail = dExtendAfterTail, dPocketHeight = dPocketHeight, bIsSplitFeature = bIsSplitFeature} - Mortising = FaceByChainsaw.Make( Proc, Part, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.BottomEdge, OptionalParameters) + OptionalParameters.dMaxElev = Blade.Result.Bottom[1].dResidualDepth + BeamData.CUT_EXTRA + + Mortising = FaceByChainsaw.Make( Proc, Part, LongFace, BottomEdge, OptionalParameters) Chainsaw.AddResult( Mortising) + + OptionalParameters.dMaxElev = nil end -- ancora materiale residuo - se possibile si lavora dal lato if Chainsaw.Result.Bottom[#Chainsaw.Result.Bottom].dResidualDepth > 10 * GEO.EPS_SMALL and #Proc.MainFaces.SideFaces == 1 then -- si lavora solamente l'impronta lama sul fondo if ( #Blade.Result.Side > 0) and Blade.Result.Side[1].dResidualDepth < 10 * GEO.EPS_SMALL then - if ( Proc.MainFaces.LongFaces[1].MainEdges.BottomEdge.bIsStartOpen and Proc.MainFaces.LongFaces[1].MainEdges.SideEdges[1].dLength > 3 * Blade.Result.Side[1].dBladeMarkLength - 10 * GEO.EPS_SMALL) then - local OptionalParameters = { sSideToMachine = 'End', dLengthToMachine = Blade.Result.Side[1].dBladeMarkLength, dExtendAfterTail = dExtendAfterTail, dPocketHeight = dPocketHeight, bOppositeToolDirection = true, bIsSplitFeature = bIsSplitFeature} - Mortising = FaceByChainsaw.Make( Proc, Part, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.SideEdges[1], OptionalParameters) - elseif ( Proc.MainFaces.LongFaces[1].MainEdges.BottomEdge.bIsEndOpen and Proc.MainFaces.LongFaces[1].MainEdges.SideEdges[2].dLength > 3 * Blade.Result.Side[1].dBladeMarkLength - 10 * GEO.EPS_SMALL) then - local OptionalParameters = { sSideToMachine = 'Start', dLengthToMachine = Blade.Result.Side[1].dBladeMarkLength, dExtendAfterTail = dExtendAfterTail, dPocketHeight = dPocketHeight, bOppositeToolDirection = true, bIsSplitFeature = bIsSplitFeature} - Mortising = FaceByChainsaw.Make( Proc, Part, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.SideEdges[2], OptionalParameters) + if ( BottomEdge.bIsStartOpen and SideEdge1.dLength > 3 * Blade.Result.Side[1].dBladeMarkLength - 10 * GEO.EPS_SMALL) then + OptionalParameters.sSideToMachine = 'End' + OptionalParameters.dLengthToMachine = Blade.Result.Side[1].dBladeMarkLength + OptionalParameters.bOppositeToolDirection = true + + Mortising = FaceByChainsaw.Make( Proc, Part, LongFace, SideEdge1, OptionalParameters) + elseif ( BottomEdge.bIsEndOpen and SideEdge2.dLength > 3 * Blade.Result.Side[1].dBladeMarkLength - 10 * GEO.EPS_SMALL) then + OptionalParameters.sSideToMachine = 'Start' + OptionalParameters.dLengthToMachine = Blade.Result.Side[1].dBladeMarkLength + OptionalParameters.bOppositeToolDirection = true + + Mortising = FaceByChainsaw.Make( Proc, Part, LongFace, SideEdge2, OptionalParameters) end -- si lavora tutto il lato else @@ -369,12 +401,16 @@ function STR0003.Make( bAddMachining, Proc, Part, CustomParameters) else dBladeResidualDepth = Blade.Result.Bottom[1].dResidualDepth end - if Proc.MainFaces.LongFaces[1].MainEdges.BottomEdge.bIsStartOpen then - local OptionalParameters = { dMaxElev = dBladeResidualDepth + BeamData.CUT_EXTRA, dExtendAfterTail = dExtendAfterTail, dPocketHeight = dPocketHeight, bOppositeToolDirection = true, bIsSplitFeature = bIsSplitFeature} - Mortising = FaceByChainsaw.Make( Proc, Part, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.SideEdges[1], OptionalParameters) - elseif Proc.MainFaces.LongFaces[1].MainEdges.BottomEdge.bIsEndOpen then - local OptionalParameters = { dMaxElev = dBladeResidualDepth + BeamData.CUT_EXTRA, dExtendAfterTail = dExtendAfterTail, dPocketHeight = dPocketHeight, bOppositeToolDirection = true, bIsSplitFeature = bIsSplitFeature} - Mortising = FaceByChainsaw.Make( Proc, Part, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.SideEdges[2], OptionalParameters) + if BottomEdge.bIsStartOpen then + OptionalParameters.dMaxElev = dBladeResidualDepth + BeamData.CUT_EXTRA + OptionalParameters.bOppositeToolDirection = true + + Mortising = FaceByChainsaw.Make( Proc, Part, LongFace, SideEdge1, OptionalParameters) + elseif BottomEdge.bIsEndOpen then + OptionalParameters.dMaxElev = dBladeResidualDepth + BeamData.CUT_EXTRA + OptionalParameters.bOppositeToolDirection = true + + Mortising = FaceByChainsaw.Make( Proc, Part, LongFace, SideEdge2, OptionalParameters) end end Chainsaw.AddResult( Mortising) @@ -382,26 +418,40 @@ function STR0003.Make( bAddMachining, Proc, Part, CustomParameters) elseif Proc.Topology.sName == 'Groove-3-Through' then if Blade.Result.Bottom[1].dResidualDepth > 10 * GEO.EPS_SMALL then -- si lavora tutto il fondo - local OptionalParameters = { dMaxElev = Blade.Result.Bottom[1].dResidualDepth + BeamData.CUT_EXTRA, dExtendAfterTail = dExtendAfterTail, dPocketHeight = dPocketHeight, bIsSplitFeature = bIsSplitFeature} - Mortising = FaceByChainsaw.Make( Proc, Part, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.BottomEdge, OptionalParameters) + OptionalParameters.dMaxElev = Blade.Result.Bottom[1].dResidualDepth + BeamData.CUT_EXTRA + + Mortising = FaceByChainsaw.Make( Proc, Part, LongFace, BottomEdge, OptionalParameters) Chainsaw.AddResult( Mortising) + + OptionalParameters.dMaxElev = nil -- ancora materiale residuo - si lavorano i lati if Chainsaw.Result.Bottom[1].dResidualDepth > 10 * GEO.EPS_SMALL then -- si lavora solamente l'impronta lama sul fondo - if ( Blade.Result.Side[1].dResidualDepth < 10 * GEO.EPS_SMALL and Proc.MainFaces.LongFaces[1].MainEdges.SideEdges[1].dLength > 3 * Blade.Result.Side[1].dBladeMarkLength - 10 * GEO.EPS_SMALL) and - ( Blade.Result.Side[2].dResidualDepth < 10 * GEO.EPS_SMALL and Proc.MainFaces.LongFaces[1].MainEdges.SideEdges[2].dLength > 3 * Blade.Result.Side[2].dBladeMarkLength - 10 * GEO.EPS_SMALL) then + if ( Blade.Result.Side[1].dResidualDepth < 10 * GEO.EPS_SMALL and SideEdge1.dLength > 3 * Blade.Result.Side[1].dBladeMarkLength - 10 * GEO.EPS_SMALL) and + ( Blade.Result.Side[2].dResidualDepth < 10 * GEO.EPS_SMALL and SideEdge2.dLength > 3 * Blade.Result.Side[2].dBladeMarkLength - 10 * GEO.EPS_SMALL) then - local OptionalParameters = { sSideToMachine = 'End', dLengthToMachine = Blade.Result.Side[1].dBladeMarkLength, dExtendAfterTail = dExtendAfterTail, dPocketHeight = dPocketHeight, bOppositeToolDirection = true, bIsSplitFeature = bIsSplitFeature} - Mortising = FaceByChainsaw.Make( Proc, Part, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.SideEdges[1], OptionalParameters) + OptionalParameters.sSideToMachine = 'End' + OptionalParameters.dLengthToMachine = Blade.Result.Side[1].dBladeMarkLength + OptionalParameters.bOppositeToolDirection = true + + Mortising = FaceByChainsaw.Make( Proc, Part, LongFace, SideEdge1, OptionalParameters) Chainsaw.AddResult( Mortising) -- ancora materiale residuo - si lavora da entrambi i lati if Chainsaw.Result.Side[1].dResidualDepth > 10 * GEO.EPS_SMALL then - local OptionalParameters = { bStopAtHalfElevation = true, sSideToMachine = 'End', dLengthToMachine = Blade.Result.Side[1].dBladeMarkLength, dExtendAfterTail = dExtendAfterTail, dPocketHeight = dPocketHeight, bOppositeToolDirection = true, bIsSplitFeature = bIsSplitFeature} - Mortising = FaceByChainsaw.Make( Proc, Part, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.SideEdges[1], OptionalParameters) + OptionalParameters.bStopAtHalfElevation = true + OptionalParameters.sSideToMachine = 'End' + OptionalParameters.dLengthToMachine = Blade.Result.Side[1].dBladeMarkLength + OptionalParameters.bOppositeToolDirection = true + + Mortising = FaceByChainsaw.Make( Proc, Part, LongFace, SideEdge1, OptionalParameters) Chainsaw.AddResult( Mortising) - OptionalParameters = {} - OptionalParameters = { bStopAtHalfElevation = true, sSideToMachine = 'Start', dLengthToMachine = Blade.Result.Side[2].dBladeMarkLength, dExtendAfterTail = dExtendAfterTail, dPocketHeight = dPocketHeight, bOppositeToolDirection = true, bIsSplitFeature = bIsSplitFeature} - Mortising = FaceByChainsaw.Make( Proc, Part, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.SideEdges[2], OptionalParameters) + + OptionalParameters.bStopAtHalfElevation = true + OptionalParameters.sSideToMachine = 'Start' + OptionalParameters.dLengthToMachine = Blade.Result.Side[2].dBladeMarkLength + OptionalParameters.bOppositeToolDirection = true + + Mortising = FaceByChainsaw.Make( Proc, Part, LongFace, SideEdge2, OptionalParameters) Chainsaw.AddResult( Mortising) -- lavorando dai due lati non c'è materiale residuo - si può eliminare la lavorazione del fondo if Chainsaw.Result.Side[2].dResidualDepth < 10 * GEO.EPS_SMALL then @@ -410,18 +460,27 @@ function STR0003.Make( bAddMachining, Proc, Part, CustomParameters) end -- si lavora tutto il lato else - local OptionalParameters = { dMaxElev = Blade.Result.Side[1].dResidualDepth + BeamData.CUT_EXTRA, dExtendAfterTail = dExtendAfterTail, dPocketHeight = dPocketHeight, bOppositeToolDirection = true, bIsSplitFeature = bIsSplitFeature} - Mortising = FaceByChainsaw.Make( Proc, Part, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.SideEdges[1], OptionalParameters) + OptionalParameters.dMaxElev = Blade.Result.Side[1].dResidualDepth + BeamData.CUT_EXTRA + OptionalParameters.bOppositeToolDirection = true + + Mortising = FaceByChainsaw.Make( Proc, Part, LongFace, SideEdge1, OptionalParameters) Chainsaw.AddResult( Mortising) -- ancora materiale residuo - si lavora da entrambi i lati if Chainsaw.Result.Side[1].dResidualDepth > 10 * GEO.EPS_SMALL then Chainsaw.Result.Side[1].bIsApplicable = false - local OptionalParameters = { bStopAtHalfElevation = true, dMaxElev = Blade.Result.Side[1].dResidualDepth + BeamData.CUT_EXTRA, dExtendAfterTail = dExtendAfterTail, dPocketHeight = dPocketHeight, bOppositeToolDirection = true, bIsSplitFeature = bIsSplitFeature} - Mortising = FaceByChainsaw.Make( Proc, Part, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.SideEdges[1], OptionalParameters) + + OptionalParameters.bStopAtHalfElevation = true + OptionalParameters.dMaxElev = Blade.Result.Side[1].dResidualDepth + BeamData.CUT_EXTRA + OptionalParameters.bOppositeToolDirection = true + + Mortising = FaceByChainsaw.Make( Proc, Part, LongFace, SideEdge1, OptionalParameters) Chainsaw.AddResult( Mortising) - OptionalParameters = {} - OptionalParameters = { bStopAtHalfElevation = true, dMaxElev = Blade.Result.Side[2].dResidualDepth + BeamData.CUT_EXTRA, dExtendAfterTail = dExtendAfterTail, dPocketHeight = dPocketHeight, bOppositeToolDirection = true, bIsSplitFeature = bIsSplitFeature} - Mortising = FaceByChainsaw.Make( Proc, Part, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.SideEdges[2], OptionalParameters) + + OptionalParameters.bStopAtHalfElevation = true + OptionalParameters.dMaxElev = Blade.Result.Side[2].dResidualDepth + BeamData.CUT_EXTRA + OptionalParameters.bOppositeToolDirection = true + + Mortising = FaceByChainsaw.Make( Proc, Part, LongFace, SideEdge2, OptionalParameters) Chainsaw.AddResult( Mortising) -- lavorando dai due lati non c'è materiale residuo - si può disabilitare la lavorazione del fondo if Chainsaw.Result.Side[2].dResidualDepth < 10 * GEO.EPS_SMALL then @@ -433,47 +492,80 @@ function STR0003.Make( bAddMachining, Proc, Part, CustomParameters) end elseif Proc.Topology.sName == 'Tunnel-4-Through' then -- si lavora solamente l'impronta lama sul lato opposto - if ( Blade.Result.Opposite[1].dResidualDepth < 10 * GEO.EPS_SMALL and Proc.MainFaces.LongFaces[1].MainEdges.OppositeEdges[1].dLength > 3 * Blade.Result.Opposite[1].dBladeMarkLength - 10 * GEO.EPS_SMALL) and - ( Blade.Result.Opposite[2].dResidualDepth < 10 * GEO.EPS_SMALL and Proc.MainFaces.LongFaces[1].MainEdges.OppositeEdges[2].dLength > 3 * Blade.Result.Opposite[2].dBladeMarkLength - 10 * GEO.EPS_SMALL) then + if ( Blade.Result.Opposite[1].dResidualDepth < 10 * GEO.EPS_SMALL and OppositeEdge1.dLength > 3 * Blade.Result.Opposite[1].dBladeMarkLength - 10 * GEO.EPS_SMALL) and + ( Blade.Result.Opposite[2].dResidualDepth < 10 * GEO.EPS_SMALL and OppositeEdge2.dLength > 3 * Blade.Result.Opposite[2].dBladeMarkLength - 10 * GEO.EPS_SMALL) then - local OptionalParameters = { sSideToMachine = 'Start', dLengthToMachine = Blade.Result.Opposite[1].dBladeMarkLength, dExtendAfterTail = dExtendAfterTail, dPocketHeight = dPocketHeight, bOppositeToolDirection = true, bIsSplitFeature = bIsSplitFeature} - Mortising = FaceByChainsaw.Make( Proc, Part, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.OppositeEdges[1], OptionalParameters) + OptionalParameters.sSideToMachine = 'Start' + OptionalParameters.dLengthToMachine = Blade.Result.Opposite[1].dBladeMarkLength + OptionalParameters.bOppositeToolDirection = true + + Mortising = FaceByChainsaw.Make( Proc, Part, LongFace, OppositeEdge1, OptionalParameters) Chainsaw.AddResult( Mortising) - OptionalParameters = {} - OptionalParameters = { sSideToMachine = 'End', dLengthToMachine = Blade.Result.Opposite[2].dBladeMarkLength, dExtendAfterTail = dExtendAfterTail, dPocketHeight = dPocketHeight, bOppositeToolDirection = true, bIsSplitFeature = bIsSplitFeature} - Mortising = FaceByChainsaw.Make( Proc, Part, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.OppositeEdges[1], OptionalParameters) + + OptionalParameters.sSideToMachine = 'End' + OptionalParameters.dLengthToMachine = Blade.Result.Opposite[2].dBladeMarkLength + OptionalParameters.bOppositeToolDirection = true + + Mortising = FaceByChainsaw.Make( Proc, Part, LongFace, OppositeEdge1, OptionalParameters) Chainsaw.AddResult( Mortising) + -- se lavorando solo da un lato rimane materiale residuo, si lavora da entrambi if Chainsaw.Result.Opposite[1].dResidualDepth > 10 * GEO.EPS_SMALL or Chainsaw.Result.Opposite[2].dResidualDepth > 10 * GEO.EPS_SMALL then Chainsaw.Result.Opposite[1].bIsApplicable = false Chainsaw.Result.Opposite[2].bIsApplicable = false - local OptionalParameters = { bStopAtHalfElevation = true, sSideToMachine = 'Start', dLengthToMachine = Blade.Result.Opposite[1].dBladeMarkLength, dExtendAfterTail = dExtendAfterTail, dPocketHeight = dPocketHeight, bOppositeToolDirection = true, bIsSplitFeature = bIsSplitFeature} - Mortising = FaceByChainsaw.Make( Proc, Part, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.OppositeEdges[1], OptionalParameters) + + OptionalParameters.bStopAtHalfElevation = true + OptionalParameters.sSideToMachine = 'Start' + OptionalParameters.dLengthToMachine = Blade.Result.Opposite[1].dBladeMarkLength + OptionalParameters.bOppositeToolDirection = true + + Mortising = FaceByChainsaw.Make( Proc, Part, LongFace, OppositeEdge1, OptionalParameters) Chainsaw.AddResult( Mortising) - OptionalParameters = {} - OptionalParameters = { bStopAtHalfElevation = true, sSideToMachine = 'End', dLengthToMachine = Blade.Result.Opposite[1].dBladeMarkLength, dExtendAfterTail = dExtendAfterTail, dPocketHeight = dPocketHeight, bOppositeToolDirection = true, bIsSplitFeature = bIsSplitFeature} - Mortising = FaceByChainsaw.Make( Proc, Part, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.OppositeEdges[1], OptionalParameters) + + OptionalParameters.bStopAtHalfElevation = true + OptionalParameters.sSideToMachine = 'End' + OptionalParameters.dLengthToMachine = Blade.Result.Opposite[1].dBladeMarkLength + OptionalParameters.bOppositeToolDirection = true + + Mortising = FaceByChainsaw.Make( Proc, Part, LongFace, OppositeEdge1, OptionalParameters) Chainsaw.AddResult( Mortising) - OptionalParameters = {} - OptionalParameters = { bStopAtHalfElevation = true, sSideToMachine = 'Start', dLengthToMachine = Blade.Result.Opposite[2].dBladeMarkLength, dExtendAfterTail = dExtendAfterTail, dPocketHeight = dPocketHeight, bOppositeToolDirection = true, bIsSplitFeature = bIsSplitFeature} - Mortising = FaceByChainsaw.Make( Proc, Part, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.OppositeEdges[2], OptionalParameters) + + OptionalParameters.bStopAtHalfElevation = true + OptionalParameters.sSideToMachine = 'Start' + OptionalParameters.dLengthToMachine = Blade.Result.Opposite[2].dBladeMarkLength + OptionalParameters.bOppositeToolDirection = true + + Mortising = FaceByChainsaw.Make( Proc, Part, LongFace, OppositeEdge2, OptionalParameters) Chainsaw.AddResult( Mortising) - OptionalParameters = {} - OptionalParameters = { bStopAtHalfElevation = true, sSideToMachine = 'End', dLengthToMachine = Blade.Result.Opposite[2].dBladeMarkLength, dExtendAfterTail = dExtendAfterTail, dPocketHeight = dPocketHeight, bOppositeToolDirection = true, bIsSplitFeature = bIsSplitFeature} - Mortising = FaceByChainsaw.Make( Proc, Part, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.OppositeEdges[2], OptionalParameters) + + OptionalParameters.bStopAtHalfElevation = true + OptionalParameters.sSideToMachine = 'End' + OptionalParameters.dLengthToMachine = Blade.Result.Opposite[2].dBladeMarkLength + OptionalParameters.bOppositeToolDirection = true + + Mortising = FaceByChainsaw.Make( Proc, Part, LongFace, OppositeEdge2, OptionalParameters) Chainsaw.AddResult( Mortising) end else - local OptionalParameters = { dMaxElev = Blade.Result.Opposite[1].dResidualDepth + BeamData.CUT_EXTRA, dExtendAfterTail = dExtendAfterTail, dPocketHeight = dPocketHeight, bOppositeToolDirection = true, bIsSplitFeature = bIsSplitFeature} - Mortising = FaceByChainsaw.Make( Proc, Part, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.OppositeEdges[1], OptionalParameters) + OptionalParameters.dMaxElev = Blade.Result.Opposite[1].dResidualDepth + BeamData.CUT_EXTRA + OptionalParameters.bOppositeToolDirection = true + + Mortising = FaceByChainsaw.Make( Proc, Part, LongFace, OppositeEdge1, OptionalParameters) Chainsaw.AddResult( Mortising) if Chainsaw.Result.Opposite[1].dResidualDepth > 10 * GEO.EPS_SMALL then Chainsaw.Result.Opposite[1].bIsApplicable = false - local OptionalParameters = { bStopAtHalfElevation = true, dMaxElev = Blade.Result.Opposite[1].dResidualDepth + BeamData.CUT_EXTRA, dExtendAfterTail = dExtendAfterTail, dPocketHeight = dPocketHeight, bOppositeToolDirection = true, bIsSplitFeature = bIsSplitFeature} - Mortising = FaceByChainsaw.Make( Proc, Part, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.OppositeEdges[1], OptionalParameters) + + OptionalParameters.bStopAtHalfElevation = true + OptionalParameters.dMaxElev = Blade.Result.Opposite[1].dResidualDepth + BeamData.CUT_EXTRA + OptionalParameters.bOppositeToolDirection = true + + Mortising = FaceByChainsaw.Make( Proc, Part, LongFace, OppositeEdge1, OptionalParameters) Chainsaw.AddResult( Mortising) - OptionalParameters = {} - OptionalParameters = { bStopAtHalfElevation = true, dMaxElev = Blade.Result.Opposite[2].dResidualDepth + BeamData.CUT_EXTRA, dExtendAfterTail = dExtendAfterTail, dPocketHeight = dPocketHeight, bOppositeToolDirection = true, bIsSplitFeature = bIsSplitFeature} - Mortising = FaceByChainsaw.Make( Proc, Part, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.OppositeEdges[2], OptionalParameters) + + OptionalParameters.bStopAtHalfElevation = true + OptionalParameters.dMaxElev = Blade.Result.Opposite[2].dResidualDepth + BeamData.CUT_EXTRA + OptionalParameters.bOppositeToolDirection = true + + Mortising = FaceByChainsaw.Make( Proc, Part, LongFace, OppositeEdge2, OptionalParameters) Chainsaw.AddResult( Mortising) end end @@ -521,10 +613,10 @@ function STR0003.Make( bAddMachining, Proc, Part, CustomParameters) Strategy.Result.nQuality = 0.5 * TOOLS[Cutting.nToolIndex].nQuality + 0.5 * TOOLS[Mortising.nToolIndex].nQuality local MRRParametersBlade = { dStep = TOOLS[Cutting.nToolIndex].dThickness, - dSideStep = min( TOOLS[Cutting.nToolIndex].dSideStep, Proc.MainFaces.LongFaces[1].MainEdges.SideEdges[1].dLength), + dSideStep = min( TOOLS[Cutting.nToolIndex].dSideStep, SideEdge1.dLength), dFeed = TOOLS[Cutting.nToolIndex].Feeds.dFeed} local MRRParametersChainsaw = { - dStep = min( TOOLS[Mortising.nToolIndex].dStep, Proc.MainFaces.LongFaces[1].MainEdges.SideEdges[1].dLength), + dStep = min( TOOLS[Mortising.nToolIndex].dStep, SideEdge1.dLength), dSideStep = TOOLS[Mortising.nToolIndex].dThickness, dFeed = TOOLS[Mortising.nToolIndex].Feeds.dFeed} local dMRRBlade = MachiningLib.GetToolMRR( MRRParametersBlade) diff --git a/StrategyLibs/FACEBYCHAINSAW.lua b/StrategyLibs/FACEBYCHAINSAW.lua index d2e2f57..9d3a64c 100644 --- a/StrategyLibs/FACEBYCHAINSAW.lua +++ b/StrategyLibs/FACEBYCHAINSAW.lua @@ -65,7 +65,10 @@ function FACEBYCHAINSAW.Make( Proc, Part, FaceToMachine, EdgeToMachine, Optional local sSideToMachine = OptionalParameters.sSideToMachine or '' local dLengthToMachine = OptionalParameters.dLengthToMachine or EdgeToMachine.dLength local dCustomMaxElev = OptionalParameters.dMaxElev or EdgeToMachine.dElevation + local bStopAtHalfElevation = OptionalParameters.bStopAtHalfElevation or false + local dDepthToMachine = OptionalParameters.dDepthToMachine or EdgeToMachine.dElevation + local dExtendAfterTail = OptionalParameters.dExtendAfterTail or 10000 local dPocketHeight = OptionalParameters.dPocketHeight or 0 local bIsSplitFeature = OptionalParameters.bIsSplitFeature or false @@ -215,8 +218,8 @@ function FACEBYCHAINSAW.Make( Proc, Part, FaceToMachine, EdgeToMachine, Optional if not dLongitudinalStepSpan then dLongitudinalStepSpan = dPocketHeight end - if dLongitudinalStepSpan > 10 * GEO.EPS_SMALL and TOOLS[Mortising.nToolIndex].dSideStep then - Mortising.CloneStepsLongitudinal = MachiningLib.GetMachiningSteps( dLongitudinalStepSpan, TOOLS[Mortising.nToolIndex].dSideStep) + if dLongitudinalStepSpan > 10 * GEO.EPS_SMALL then + Mortising.CloneStepsLongitudinal = MachiningLib.GetMachiningSteps( dLongitudinalStepSpan, TOOLS[Mortising.nToolIndex].dThickness) else Mortising.CloneStepsLongitudinal.nCount = 1 Mortising.CloneStepsLongitudinal.dStep = dPocketHeight