From e3d73e980516e8a51d526bfdfbe3d04cb6502c7d Mon Sep 17 00:00:00 2001 From: "luca.mazzoleni" Date: Thu, 20 Jun 2024 17:04:48 +0200 Subject: [PATCH] - modificata STR0003 per contemplare strategia di base SlotByChainsaw --- Strategies/STR0003/STR0003.lua | 225 ++++++++++++++++++++++----------- 1 file changed, 149 insertions(+), 76 deletions(-) diff --git a/Strategies/STR0003/STR0003.lua b/Strategies/STR0003/STR0003.lua index 053d0b5..21db696 100644 --- a/Strategies/STR0003/STR0003.lua +++ b/Strategies/STR0003/STR0003.lua @@ -66,8 +66,7 @@ local function AddResult( Machining, Result) Result[#Result].dDepthMachined = Machining.dDepthToMachine Result[#Result].dResidualDepth = Machining.dResidualDepth Result[#Result].dBladeMarkLength = Machining.dBladeMarkLength - Result[#Result].bIsApplyOk = Machining.bIsApplyOk - Result[#Result].sApplyMessage = Machining.sApplyMessage + Result[#Result].bMachiningAdded = Machining.bMachiningAdded return Result end @@ -162,7 +161,7 @@ function Blade.GetSCC( vtMachiningDirection) end -function Blade.CalculateMachiningParameters( Proc, FaceToMachine, EdgeToMachine, Part) +function Blade.CalculateMachiningParameters( Proc, Part, FaceToMachine, EdgeToMachine) local Cutting = {} Cutting.bIsApplicable = true Cutting.dDepthToMachine = 0 @@ -332,7 +331,7 @@ end function Blade.AddMachiningAllSteps( Proc, Cutting) - local bIsCuttingOk = false + local bMachiningAdded = false local sCuttingApplyMessage = '' local dOriginalRadialOffset = Cutting.dRadialOffset @@ -344,18 +343,18 @@ function Blade.AddMachiningAllSteps( Proc, Cutting) Cutting.LeadIn.dPerpDistance = dOriginalLeadInPerpDistance - Cutting.dRadialOffset Cutting.LeadOut.dPerpDistance = dOriginalLeadOutPerpDistance - Cutting.dRadialOffset -- applicazione lavorazione - bIsCuttingOk, sCuttingApplyMessage = MachiningLib.AddNewMachining( Proc, Cutting) + bMachiningAdded = MachiningLib.AddNewMachining( Proc, Cutting) -- update messaggi if sCuttingApplyMessage and #sCuttingApplyMessage > 0 then sCuttingApplyMessage = sCuttingApplyMessage .. 'Apply : ' .. sCuttingApplyMessage .. '\n' end end - return bIsCuttingOk, sCuttingApplyMessage + return bMachiningAdded end -function Chainsaw.CalculateMachiningParameters( Proc, FaceToMachine, EdgeToMachine, Part) +function Chainsaw.CalculateMachiningParameters( Proc, Part, FaceToMachine, EdgeToMachine) local Mortising = {} Mortising.bIsApplicable = true Mortising.dDepthToMachine = 0 @@ -544,21 +543,21 @@ end function Chainsaw.AddMachiningAllSteps( Proc, Mortising) - local bIsMortisingOk = false + local bMachiningAdded = false local sMortisingApplyMessage = '' local dOriginalRadialOffsetMortising = Mortising.dRadialOffset for i = Mortising.VerticalSteps.nCount, 1, -1 do Mortising.dRadialOffset = dOriginalRadialOffsetMortising + Mortising.VerticalSteps.dStepLength * ( i - 1) -- applicazione lavorazione - bIsMortisingOk, sMortisingApplyMessage = MachiningLib.AddNewMachining( Proc, Mortising) + bMachiningAdded = MachiningLib.AddNewMachining( Proc, Mortising) -- update messaggi if sMortisingApplyMessage and #sMortisingApplyMessage > 0 then Mortising.sMessage = Mortising.sMessage .. '\n' .. 'Apply : ' .. sMortisingApplyMessage .. '\n' end end - return bIsMortisingOk, sMortisingApplyMessage + return bMachiningAdded end @@ -597,9 +596,9 @@ function STR0003.Make( bAddMachining, Proc, Part, CustomParameters) -- lavorazione di lama - fondo della tasca o fino a massimo materiale se tunnel local Cutting = {} if Proc.Topology.sFamily == 'Tunnel' then - Cutting = Blade.CalculateMachiningParameters( Proc, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.OppositeEdges[1], Part) + Cutting = Blade.CalculateMachiningParameters( Proc, Part, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.OppositeEdges[1]) else - Cutting = Blade.CalculateMachiningParameters( Proc, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.BottomEdge, Part) + Cutting = Blade.CalculateMachiningParameters( Proc, Part, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.BottomEdge) end if bAddMachining and Cutting.bIsApplicable then Cutting.bIsApplyOk, Cutting.sApplyMessage = Blade.AddMachiningAllSteps( Proc, Cutting) @@ -608,17 +607,17 @@ function STR0003.Make( bAddMachining, Proc, Part, CustomParameters) local dBottomDepthToMachine = Cutting.dResidualDepth -- lato opposto del tunnel if Proc.Topology.sFamily == 'Tunnel' then - Cutting = Blade.CalculateMachiningParameters( Proc, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.OppositeEdges[2], Part) + Cutting = Blade.CalculateMachiningParameters( Proc, Part, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.OppositeEdges[2]) if bAddMachining and Cutting.bIsApplicable then Cutting.bIsApplyOk, Cutting.sApplyMessage = Blade.AddMachiningAllSteps( Proc, Cutting) end Blade.AddResult( Cutting) else -- se la lama non è arrivata sul fondo e c'è almeno un lato aperto va lavorato - if Cutting.dResidualDepth > 10 * GEO.EPS_SMALL then + if Blade.Result[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 - Cutting = Blade.CalculateMachiningParameters( Proc, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.SideEdges[1], Part) + Cutting = Blade.CalculateMachiningParameters( Proc, Part, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.SideEdges[1]) if bAddMachining and Cutting.bIsApplicable then Cutting.bIsApplyOk, Cutting.sApplyMessage = Blade.AddMachiningAllSteps( Proc, Cutting) end @@ -626,7 +625,7 @@ function STR0003.Make( bAddMachining, Proc, Part, CustomParameters) end -- eventuale lavorazione di lama - lato della tasca in cui finisce la lavorazione if Proc.MainFaces.LongFaces[1].MainEdges.BottomEdge.bIsEndOpen then - Cutting = Blade.CalculateMachiningParameters( Proc, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.SideEdges[2], Part) + Cutting = Blade.CalculateMachiningParameters( Proc, Part, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.SideEdges[2]) if bAddMachining and Cutting.bIsApplicable then Cutting.bIsApplyOk, Cutting.sApplyMessage = Blade.AddMachiningAllSteps( Proc, Cutting) end @@ -679,73 +678,147 @@ function STR0003.Make( bAddMachining, Proc, Part, CustomParameters) -- sega a catena - if Proc.Topology.sName == 'Groove-4-Blind' or Proc.Topology.sName == 'Pocket-5-Blind' then - if ( Blade.Result[1].dResidualDepth < GEO.EPS_SMALL) and - ( Proc.MainFaces.LongFaces[1].MainEdges.BottomEdge.dLength > 3 * Blade.Result[1].dBladeMarkLength - 10 * GEO.EPS_SMALL) then - - end - - elseif Proc.Topology.sName == 'Groove-3-Through' then - - elseif Proc.Topology.sName == 'Tunnel-4-Through' then - - end - - - - - - - - - - - - - - - - - -- sega a catena - -- parametri lavorazione con sega a catena - fondo della tasca o tunnel local Mortising = {} - if Proc.Topology.sFamily == 'Tunnel' then - Mortising, dResidualDepth = Chainsaw.CalculateMachiningParameters( Proc, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.OppositeEdges[1], Part) - else - Mortising, dResidualDepth = Chainsaw.CalculateMachiningParameters( Proc, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.BottomEdge, Part) - -- si lavora solo quanto non lavorato dalla lama - Mortising.MaxElev = dBottomDepthToMachine + BeamData.CUT_EXTRA - end - if bAddMachining and Mortising.bIsApplicable then - Mortising.bIsApplyOk, Mortising.sApplyMessage = Chainsaw.AddMachiningAllSteps( Proc, Mortising) - end - Chainsaw.AddResult( Mortising) - -- lato opposto del tunnel - if Proc.Topology.sFamily == 'Tunnel' then - if dResidualDepth > 10 * GEO.EPS_SMALL then - Mortising, dResidualDepth = Chainsaw.CalculateMachiningParameters( Proc, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.OppositeEdges[2], Part) - if bAddMachining and Mortising.bIsApplicable then - Mortising.bIsApplyOk, Mortising.sApplyMessage = Chainsaw.AddMachiningAllSteps( Proc, Mortising) + 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[1].dResidualDepth < 10 * GEO.EPS_SMALL) and + ( Proc.MainFaces.LongFaces[1].MainEdges.BottomEdge.dLength > 3 * Blade.Result[1].dBladeMarkLength - 10 * GEO.EPS_SMALL) then + + if not Proc.MainFaces.LongFaces[1].MainEdges.BottomEdge.bIsStartOpen then + local OptionalParameters = { sSideToMachine = 'Start', dLengthToMachine = Blade.Result[1].dBladeMarkLength, dMaxElev = 0} + Mortising = SlotByChainSaw.Make( Proc, Part, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.BottomEdge, OptionalParameters) + Chainsaw.AddResult( Mortising) + end + if not Proc.MainFaces.LongFaces[1].MainEdges.BottomEdge.bIsEndOpen then + local OptionalParameters = { sSideToMachine = 'End', dLengthToMachine = Blade.Result[1].dBladeMarkLength, dMaxElev = 0} + Mortising = SlotByChainSaw.Make( Proc, Part, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.BottomEdge, OptionalParameters) + Chainsaw.AddResult( Mortising) + end + -- si lavora tutto il fondo + else + local OptionalParameters = { dMaxElev = Blade.Result[1].dResidualDepth + BeamData.CUT_EXTRA} + Mortising = SlotByChainSaw.Make( Proc, Part, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.BottomEdge, OptionalParameters) + Chainsaw.AddResult( Mortising) + 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[2].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[2].dBladeMarkLength - 10 * GEO.EPS_SMALL) then + local OptionalParameters = { sSideToMachine = 'End', dLengthToMachine = Blade.Result[2].dBladeMarkLength, dMaxElev = 0} + 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 and Proc.MainFaces.LongFaces[1].MainEdges.SideEdges[2].dLength > 3 * Blade.Result[2].dBladeMarkLength - 10 * GEO.EPS_SMALL) then + local OptionalParameters = { sSideToMachine = 'Start', dLengthToMachine = Blade.Result[2].dBladeMarkLength, dMaxElev = 0} + Mortising = SlotByChainSaw.Make( Proc, Part, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.SideEdges[2], OptionalParameters) + end + -- si lavora tutto il lato + else + if Proc.MainFaces.LongFaces[1].MainEdges.BottomEdge.bIsStartOpen then + local OptionalParameters = { dMaxElev = Blade.Result[2].dResidualDepth + BeamData.CUT_EXTRA} + 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 = { dMaxElev = Blade.Result[2].dResidualDepth + BeamData.CUT_EXTRA} + Mortising = SlotByChainSaw.Make( Proc, Part, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.SideEdges[2], OptionalParameters) + end end Chainsaw.AddResult( Mortising) end - else - -- se la sega a catena non è arrivata sul fondo e c'è almeno un lato aperto va lavorato - if dResidualDepth > 10 * GEO.EPS_SMALL then - -- eventuale lavorazione di sega a catena - lato della tasca da cui inizia la lavorazione - if Proc.MainFaces.LongFaces[1].MainEdges.BottomEdge.bIsStartOpen then - Mortising, dResidualDepth = Chainsaw.CalculateMachiningParameters( Proc, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.SideEdges[1], Part) - if bAddMachining and Mortising.bIsApplicable then - Mortising.bIsApplyOk, Mortising.sApplyMessage = Chainsaw.AddMachiningAllSteps( Proc, Mortising) + elseif Proc.Topology.sName == 'Groove-3-Through' then + -- si lavora tutto il fondo + if Blade.Result[1].dResidualDepth > 10 * GEO.EPS_SMALL then + local OptionalParameters = { dMaxElev = Blade.Result[1].dResidualDepth + BeamData.CUT_EXTRA} + Mortising = SlotByChainSaw.Make( Proc, Part, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.BottomEdge, OptionalParameters) + Chainsaw.AddResult( Mortising) + end + -- 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[2].dResidualDepth < 10 * GEO.EPS_SMALL and Proc.MainFaces.LongFaces[1].MainEdges.SideEdges[1].dLength > 3 * Blade.Result[2].dBladeMarkLength - 10 * GEO.EPS_SMALL) and + ( Blade.Result[3].dResidualDepth < 10 * GEO.EPS_SMALL and Proc.MainFaces.LongFaces[1].MainEdges.SideEdges[2].dLength > 3 * Blade.Result[3].dBladeMarkLength - 10 * GEO.EPS_SMALL) then + + local OptionalParameters = { sSideToMachine = 'End', dLengthToMachine = Blade.Result[2].dBladeMarkLength, dMaxElev = 0} + Mortising = SlotByChainSaw.Make( Proc, Part, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.SideEdges[1], OptionalParameters) + -- 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[2].dBladeMarkLength, dMaxElev = 0} + Mortising = SlotByChainSaw.Make( Proc, Part, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.SideEdges[1], OptionalParameters) + Chainsaw.AddResult( Mortising) + OptionalParameters = {} + OptionalParameters = { bStopAtHalfElevation = true, sSideToMachine = 'Start', dLengthToMachine = Blade.Result[2].dBladeMarkLength, dMaxElev = 0} + 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ò eliminare la lavorazione del fondo + if Chainsaw.Result.Side[2].dResidualDepth < 10 * GEO.EPS_SMALL then + Chainsaw.Result.Bottom[1].bIsApplicable = false + end + else + Chainsaw.AddResult( Mortising) end + -- si lavora tutto il lato + else + local OptionalParameters = { dMaxElev = Blade.Result[2].dResidualDepth + BeamData.CUT_EXTRA} + Mortising = SlotByChainSaw.Make( Proc, Part, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.SideEdges[1], OptionalParameters) + -- ancora materiale residuo - si lavora da entrambi i lati + if Chainsaw.Result.Side[1].dResidualDepth > 10 * GEO.EPS_SMALL then + local OptionalParameters = { dMaxElev = Blade.Result[2].dResidualDepth + BeamData.CUT_EXTRA} + Mortising = SlotByChainSaw.Make( Proc, Part, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.SideEdges[1], OptionalParameters) + Chainsaw.AddResult( Mortising) + OptionalParameters = {} + OptionalParameters = { dMaxElev = Blade.Result[3].dResidualDepth + BeamData.CUT_EXTRA} + 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 + if Chainsaw.Result.Side[2].dResidualDepth < 10 * GEO.EPS_SMALL then + Chainsaw.Result.Bottom[1].bIsApplicable = false + end + else + Chainsaw.AddResult( Mortising) + end + end + end + elseif Proc.Topology.sName == 'Tunnel-4-Through' then + -- si lavora solamente l'impronta lama sul lato opposto + if ( Blade.Result[1].dResidualDepth < 10 * GEO.EPS_SMALL and Proc.MainFaces.LongFaces[1].MainEdges.OppositeEdges[1].dLength > 3 * Blade.Result[1].dBladeMarkLength - 10 * GEO.EPS_SMALL) and + ( Blade.Result[2].dResidualDepth < 10 * GEO.EPS_SMALL and Proc.MainFaces.LongFaces[1].MainEdges.OppositeEdges[2].dLength > 3 * Blade.Result[2].dBladeMarkLength - 10 * GEO.EPS_SMALL) then + + local OptionalParameters = { sSideToMachine = 'Start', dLengthToMachine = Blade.Result[1].dBladeMarkLength, dMaxElev = 0} + Mortising = SlotByChainSaw.Make( Proc, Part, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.OppositeEdges[1], OptionalParameters) + Chainsaw.AddResult( Mortising) + OptionalParameters = {} + OptionalParameters = { sSideToMachine = 'End', dLengthToMachine = Blade.Result[2].dBladeMarkLength, dMaxElev = 0} + 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 > GEO.EPS_SMALL or Chainsaw.Result.Opposite[2].dResidualDepth > 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[1].dBladeMarkLength, dMaxElev = 0} + Mortising = SlotByChainSaw.Make( Proc, Part, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.OppositeEdges[1], OptionalParameters) + Chainsaw.AddResult( Mortising) + OptionalParameters = {} + OptionalParameters = { bStopAtHalfElevation = true, sSideToMachine = 'End', dLengthToMachine = Blade.Result[1].dBladeMarkLength, dMaxElev = 0} + Mortising = SlotByChainSaw.Make( Proc, Part, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.OppositeEdges[1], OptionalParameters) + Chainsaw.AddResult( Mortising) + OptionalParameters = {} + OptionalParameters = { bStopAtHalfElevation = true, sSideToMachine = 'Start', dLengthToMachine = Blade.Result[2].dBladeMarkLength, dMaxElev = 0} + Mortising = SlotByChainSaw.Make( Proc, Part, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.OppositeEdges[2], OptionalParameters) + Chainsaw.AddResult( Mortising) + OptionalParameters = {} + OptionalParameters = { bStopAtHalfElevation = true, sSideToMachine = 'End', dLengthToMachine = Blade.Result[2].dBladeMarkLength, dMaxElev = 0} + Mortising = SlotByChainSaw.Make( Proc, Part, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.OppositeEdges[2], OptionalParameters) Chainsaw.AddResult( Mortising) end - -- eventuale lavorazione di sega a catena - lato della tasca in cui finisce la lavorazione - if Proc.MainFaces.LongFaces[1].MainEdges.BottomEdge.bIsEndOpen then - Mortising, dResidualDepth = Chainsaw.CalculateMachiningParameters( Proc, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.SideEdges[2], Part) - if bAddMachining and Mortising.bIsApplicable then - Mortising.bIsApplyOk, Mortising.sApplyMessage = Chainsaw.AddMachiningAllSteps( Proc, Mortising) - end + else + local OptionalParameters = { dMaxElev = Blade.Result[1].dResidualDepth + BeamData.CUT_EXTRA} + Mortising = SlotByChainSaw.Make( Proc, Part, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.OppositeEdges[1], OptionalParameters) + if Chainsaw.Result.Opposite[1].dResidualDepth > GEO.EPS_SMALL then + local OptionalParameters = { bStopAtHalfElevation = true, dMaxElev = Blade.Result[1].dResidualDepth + BeamData.CUT_EXTRA} + SlotByChainSaw.Make( Proc, Part, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.OppositeEdges[1], OptionalParameters) + Chainsaw.AddResult( Mortising) + OptionalParameters = {} + OptionalParameters = { bStopAtHalfElevation = true, dMaxElev = Blade.Result[2].dResidualDepth + BeamData.CUT_EXTRA} + SlotByChainSaw.Make( Proc, Part, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.OppositeEdges[2], OptionalParameters) + Chainsaw.AddResult( Mortising) + else Chainsaw.AddResult( Mortising) end end