diff --git a/LuaLibs/BeamExec.lua b/LuaLibs/BeamExec.lua index 3afee1a..f1a2f0d 100644 --- a/LuaLibs/BeamExec.lua +++ b/LuaLibs/BeamExec.lua @@ -442,7 +442,9 @@ function BeamExec.ProcessBeams( dRawW, dRawH, dRawL, dOvmHead, dOvmMid, PARTS) -- aggiorno grezzo precedente idPrevRaw = PARTS[i].idRaw dPrevDelta = dDelta + -- TODO dDistanceToNextPiece è errato, va calcolato tenendo conto dei 3 casi (altro pezzo successivo, ultimo pezzo con dietro grezzo scaricabile, ultimo pezzo con dietro grezzo a perdere) PARTS[i].dDistanceToNextPiece = dDelta + PARTS[i].dRestLength = dLen PARTS[i].bIsLastPart = ( i == #PARTS) PARTS[i].b3Raw = EgtGetRawPartBBox( PARTS[i].idRaw) diff --git a/LuaLibs/MachiningLib.lua b/LuaLibs/MachiningLib.lua index d8fcd85..e10ca30 100644 --- a/LuaLibs/MachiningLib.lua +++ b/LuaLibs/MachiningLib.lua @@ -73,8 +73,8 @@ end ------------------------------------------------------------------------------------------------------------- -- TODO valutare se c'è un modo più preciso di prevedere i casi in cui le lavorazioni dopo separazione sono da saltare function MachiningLib.CanMoveAfterSplitcut( dLengthOnX, Part) - local bCanMoveAfterSplitcut = ( dLengthOnX < BeamData.LEN_SHORT_PART - 10 * GEO.EPS_SMALL) - or ( dLengthOnX > 0.7 * Part.dLength + 10 * GEO.EPS_SMALL) + local bCanMoveAfterSplitcut = ( Part.dLength > BeamData.dMinRaw + 10 * GEO.EPS_SMALL) + and ( dLengthOnX < 0.7 * Part.dLength - 10 * GEO.EPS_SMALL) return bCanMoveAfterSplitcut end diff --git a/Strategies/Core/SLOTBYCHAINSAW.lua b/Strategies/Core/SLOTBYCHAINSAW.lua index 515cd96..417ed43 100644 --- a/Strategies/Core/SLOTBYCHAINSAW.lua +++ b/Strategies/Core/SLOTBYCHAINSAW.lua @@ -66,11 +66,7 @@ function SLOTBYCHAINSAW.Make( Proc, Part, FaceToMachine, EdgeToMachine, Optional local dLengthToMachine = OptionalParameters.dLengthToMachine or EdgeToMachine.dLength local dCustomMaxElev = OptionalParameters.dMaxElev or abs( EdgeToMachine.dElevation) local bStopAtHalfElevation = OptionalParameters.bStopAtHalfElevation or false - local dDistanceToNextPiece = OptionalParameters.dDistanceToNextPiece or Part.dDistanceToNextPiece - local bCanExtendAfterTail = true - if type( OptionalParameters.bCanExtendAfterTail) == "boolean" then - bCanExtendAfterTail = OptionalParameters.bCanExtendAfterTail - end + local dExtendAfterTail = OptionalParameters.dExtendAfterTail or 10000 -- lunghezze e punti caratteristici della lavorazione e del lato lavorato Mortising.dLengthToMachine = dLengthToMachine @@ -239,15 +235,14 @@ function SLOTBYCHAINSAW.Make( Proc, Part, FaceToMachine, EdgeToMachine, Optional else Mortising.bIsApplicable = false end - elseif dAddLengthLeftSide + TOOLS[Mortising.nToolIndex].dDiameter / 2 > dDistanceToNextPiece then + elseif dAddLengthLeftSide + TOOLS[Mortising.nToolIndex].dDiameter / 2 > dExtendAfterTail then if MachiningLib.CanMoveAfterSplitcut( Mortising.dLengthOnX, Part) then Mortising.bMoveAfterSplitcut = true - elseif not bCanExtendAfterTail then - Mortising.bShortenedOnLeftSide = true + else if bStartLeft then - Mortising.LeadOut.dEndAddLength = - TOOLS[Mortising.nToolIndex].dDiameter / 2 + Mortising.LeadOut.dEndAddLength = - TOOLS[Mortising.nToolIndex].dDiameter / 2 + dExtendAfterTail else - Mortising.LeadIn.dStartAddLength = - TOOLS[Mortising.nToolIndex].dDiameter / 2 + Mortising.LeadIn.dStartAddLength = - TOOLS[Mortising.nToolIndex].dDiameter / 2 + dExtendAfterTail end end end diff --git a/Strategies/Standard/STR0004/STR0004.lua b/Strategies/Standard/STR0004/STR0004.lua index 4449bc1..57bffd0 100644 --- a/Strategies/Standard/STR0004/STR0004.lua +++ b/Strategies/Standard/STR0004/STR0004.lua @@ -149,44 +149,49 @@ function STR0004.Make( bAddMachining, Proc, Part, CustomParameters) return false, Strategy.Result end + -- TODO dDistanceToNextPiece è errato, va calcolato tenendo conto dei 3 casi (altro pezzo successivo, ultimo pezzo con dietro grezzo scaricabile, ultimo pezzo con dietro grezzo a perdere) + local dExtendAfterTail = max( Part.dDistanceToNextPiece - BeamData.CUT_EXTRA, 0) + if MachiningLib.CanExtendAfterTail( Strategy.Parameters.sCanDamageNextPiece, Part) then + dExtendAfterTail = 10000 + end + -- calcolo lavorazioni - local bCanExtendAfterTail = MachiningLib.CanExtendAfterTail( CustomParameters.sCanDamageNextPiece, Part) local Mortising = {} - OptionalParameters = { bCanExtendAfterTail = bCanExtendAfterTail} + OptionalParameters = { dExtendAfterTail = dExtendAfterTail} if Proc.Topology.sName == 'Groove-4-Blind' or Proc.Topology.sName == 'Pocket-5-Blind' then -- si lavora tutto il fondo - local OptionalParameters = { bCanExtendAfterTail = bCanExtendAfterTail} + local OptionalParameters = { dExtendAfterTail = dExtendAfterTail} Mortising = SlotByChainSaw.Make( Proc, Part, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.BottomEdge, OptionalParameters) Chainsaw.AddResult( Mortising) -- 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 + if ( Chainsaw.Result.Bottom[#Chainsaw.Result.Bottom].dResidualDepth > 10 * GEO.EPS_SMALL or not Chainsaw.Result.Bottom[#Chainsaw.Result.Bottom].bIsApplicable) and #Proc.MainFaces.SideFaces == 1 then if Proc.MainFaces.LongFaces[1].MainEdges.BottomEdge.bIsStartOpen then - local OptionalParameters = { bCanExtendAfterTail = bCanExtendAfterTail} + local OptionalParameters = { dExtendAfterTail = dExtendAfterTail} Mortising = SlotByChainSaw.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 = { bCanExtendAfterTail = bCanExtendAfterTail} + local OptionalParameters = { dExtendAfterTail = dExtendAfterTail} Mortising = SlotByChainSaw.Make( Proc, Part, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.SideEdges[2], OptionalParameters) end Chainsaw.AddResult( Mortising) end elseif Proc.Topology.sName == 'Groove-3-Through' then -- si lavora tutto il fondo - local OptionalParameters = { bCanExtendAfterTail = bCanExtendAfterTail} + local OptionalParameters = { dExtendAfterTail = dExtendAfterTail} Mortising = SlotByChainSaw.Make( Proc, Part, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.BottomEdge, OptionalParameters) Chainsaw.AddResult( Mortising) -- materiale residuo - si lavorano i lati - if Chainsaw.Result.Bottom[1].dResidualDepth > 10 * GEO.EPS_SMALL then - local OptionalParameters = { bCanExtendAfterTail = bCanExtendAfterTail} + if ( Chainsaw.Result.Bottom[1].dResidualDepth > 10 * GEO.EPS_SMALL or not Chainsaw.Result.Bottom[#Chainsaw.Result.Bottom].bIsApplicable) then + local OptionalParameters = { dExtendAfterTail = dExtendAfterTail} Mortising = SlotByChainSaw.Make( Proc, Part, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.SideEdges[1], 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, bCanExtendAfterTail = bCanExtendAfterTail} + local OptionalParameters = { bStopAtHalfElevation = true, dExtendAfterTail = dExtendAfterTail} Mortising = SlotByChainSaw.Make( Proc, Part, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.SideEdges[1], OptionalParameters) Chainsaw.AddResult( Mortising) OptionalParameters = {} - OptionalParameters = { bStopAtHalfElevation = true, bCanExtendAfterTail = bCanExtendAfterTail} + OptionalParameters = { bStopAtHalfElevation = true, dExtendAfterTail = dExtendAfterTail} Mortising = SlotByChainSaw.Make( Proc, Part, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.SideEdges[2], OptionalParameters) Chainsaw.AddResult( Mortising) -- lavorando dai due lati non c'è materiale residuo - si può disabilitare la lavorazione del fondo @@ -196,16 +201,16 @@ function STR0004.Make( bAddMachining, Proc, Part, CustomParameters) end end elseif Proc.Topology.sName == 'Tunnel-4-Through' then - local OptionalParameters = { bCanExtendAfterTail = bCanExtendAfterTail} + local OptionalParameters = { dExtendAfterTail = dExtendAfterTail} Mortising = SlotByChainSaw.Make( Proc, Part, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.OppositeEdges[1], 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, bCanExtendAfterTail = bCanExtendAfterTail} + local OptionalParameters = { bStopAtHalfElevation = true, dExtendAfterTail = dExtendAfterTail} SlotByChainSaw.Make( Proc, Part, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.OppositeEdges[1], OptionalParameters) Chainsaw.AddResult( Mortising) OptionalParameters = {} - OptionalParameters = { bStopAtHalfElevation = true, bCanExtendAfterTail = bCanExtendAfterTail} + OptionalParameters = { bStopAtHalfElevation = true, dExtendAfterTail = dExtendAfterTail} SlotByChainSaw.Make( Proc, Part, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.OppositeEdges[2], OptionalParameters) Chainsaw.AddResult( Mortising) end