diff --git a/LuaLibs/MachiningLib.lua b/LuaLibs/MachiningLib.lua index 088f12d..2147aaa 100644 --- a/LuaLibs/MachiningLib.lua +++ b/LuaLibs/MachiningLib.lua @@ -199,6 +199,7 @@ end ------------------------------------------------------------------------------------------------------------- -- funzione per cercare utensile tipo FRESA con certe caratteristiche +-- TODO qui vtToolDirection è in realtà vtN function MachiningLib.FindMill( Proc, ToolSearchParameters) local ToolInfo = {} @@ -541,12 +542,14 @@ function MachiningLib.AddMachinings( Proc, Machining, AuxiliaryData) local dOriginalLeadOutPerpDistance = Machining.LeadOut.dPerpDistance for i = 1, Machining.CloneStepsHorizontal.nCount do AuxiliaryData.Clones[i] = {} - AuxiliaryData.Clones[i].LeadIn = {} - AuxiliaryData.Clones[i].LeadOut = {} AuxiliaryData.Clones[i].dRadialOffset = dOriginalRadialOffset + Machining.CloneStepsHorizontal.dStep * ( Machining.CloneStepsHorizontal.nCount - i) -- update distanza perpendicolare attacco per contemplare l'offset applicato - AuxiliaryData.Clones[i].LeadIn.dPerpDistance = dOriginalLeadInPerpDistance - AuxiliaryData.Clones[i].dRadialOffset + dOriginalRadialOffset - AuxiliaryData.Clones[i].LeadOut.dPerpDistance = dOriginalLeadOutPerpDistance - AuxiliaryData.Clones[i].dRadialOffset + dOriginalRadialOffset + if abs( dOriginalLeadInPerpDistance) > 10 * GEO.EPS_SMALL and abs( dOriginalLeadOutPerpDistance) > 10 * GEO.EPS_SMALL then + AuxiliaryData.Clones[i].LeadIn = {} + AuxiliaryData.Clones[i].LeadOut = {} + AuxiliaryData.Clones[i].LeadIn.dPerpDistance = dOriginalLeadInPerpDistance - AuxiliaryData.Clones[i].dRadialOffset + dOriginalRadialOffset + AuxiliaryData.Clones[i].LeadOut.dPerpDistance = dOriginalLeadOutPerpDistance - AuxiliaryData.Clones[i].dRadialOffset + dOriginalRadialOffset + end end elseif Machining.CloneStepsVertical and Machining.CloneStepsVertical.nCount > 1 then if not AuxiliaryData then diff --git a/Strategies/Standard/HEADCUT/HEADCUT.lua b/Strategies/Standard/HEADCUT/HEADCUT.lua index 0d0e301..416e93e 100644 --- a/Strategies/Standard/HEADCUT/HEADCUT.lua +++ b/Strategies/Standard/HEADCUT/HEADCUT.lua @@ -240,7 +240,7 @@ function HEADCUT.Make( bAddMachining, Proc, Part, CustomParameters) if Strategy.SplitStrategy.sTypeMachining == 'BladeSideSingle' then OptionalParameters = {} OptionalParameters.nToolIndex = Strategy.SplitStrategy[1].ToolInfo.nToolIndex - OptionalParameters.bDisableHorizontalSteps = true + OptionalParameters.dHorizontalStepSpan = 0 -- TODO gestire lavorazione a cubetti @@ -254,7 +254,7 @@ function HEADCUT.Make( bAddMachining, Proc, Part, CustomParameters) OptionalParameters = {} OptionalParameters.nToolIndex = Strategy.SplitStrategy[1].ToolInfo.nToolIndex OptionalParameters.dDepthToMachine = Part.dWidth / 2 + BeamData.CUT_EXTRA_MIN - OptionalParameters.bDisableHorizontalSteps = true + OptionalParameters.dHorizontalStepSpan = 0 -- TODO gestire lavorazione a cubetti @@ -269,7 +269,7 @@ function HEADCUT.Make( bAddMachining, Proc, Part, CustomParameters) AuxiliaryData = {} OptionalParameters.nToolIndex = Strategy.SplitStrategy[1].ToolInfo.nToolIndex OptionalParameters.dDepthToMachine = Part.dWidth / 2 + BeamData.CUT_EXTRA_MIN - OptionalParameters.bDisableHorizontalSteps = true + OptionalParameters.dHorizontalStepSpan = 0 -- TODO gestire lavorazione a cubetti @@ -282,7 +282,7 @@ function HEADCUT.Make( bAddMachining, Proc, Part, CustomParameters) OptionalParameters = {} OptionalParameters.nToolIndex = Strategy.SplitStrategy[1].ToolInfo.nToolIndex OptionalParameters.dDepthToMachine = Part.dHeight + BeamData.CUT_EXTRA - OptionalParameters.bDisableHorizontalSteps = true + OptionalParameters.dHorizontalStepSpan = 0 -- TODO gestire lavorazione a cubetti @@ -297,7 +297,7 @@ function HEADCUT.Make( bAddMachining, Proc, Part, CustomParameters) OptionalParameters.nToolIndex = Strategy.SplitStrategy[1].ToolInfo.nToolIndex local dExtraMaxMat = ( Strategy.SplitStrategy[1].ToolInfo.dMaxMatBladeFromTop + Strategy.SplitStrategy[2].ToolInfo.dMaxMatBladeFromDown - Part.dHeight - BeamData.CUT_EXTRA_MIN) / 2 OptionalParameters.dDepthToMachine = Strategy.SplitStrategy[1].ToolInfo.dMaxMatBladeFromTop - dExtraMaxMat - OptionalParameters.bDisableHorizontalSteps = true + OptionalParameters.dHorizontalStepSpan = 0 -- TODO gestire lavorazione a cubetti @@ -312,7 +312,7 @@ function HEADCUT.Make( bAddMachining, Proc, Part, CustomParameters) AuxiliaryData = {} OptionalParameters.nToolIndex = Strategy.SplitStrategy[2].ToolInfo.nToolIndex OptionalParameters.dDepthToMachine = Strategy.SplitStrategy[2].ToolInfo.dMaxMatBladeFromDown - dExtraMaxMat - OptionalParameters.bDisableHorizontalSteps = true + OptionalParameters.dHorizontalStepSpan = 0 -- TODO gestire lavorazione a cubetti diff --git a/Strategies/Standard/STR0005/STR0005.lua b/Strategies/Standard/STR0005/STR0005.lua index 38fd177..874f36b 100644 --- a/Strategies/Standard/STR0005/STR0005.lua +++ b/Strategies/Standard/STR0005/STR0005.lua @@ -114,7 +114,9 @@ function STR0005.Make( bAddMachining, Proc, Part, CustomParameters) -- se arrivati qui non è stata ancora applicata alcuna lavorazione, si prova la lavorazione con codolo if #Blade.Result == 0 and not bKeepWasteAttached then local BladeKeepWasteResult - local OptionalParameters = { dExtendAfterTail = dExtendAfterTail, dStripWidth = Strategy.Parameters.dStripWidth} + local OptionalParameters = { dExtendAfterTail = dExtendAfterTail, dStripWidth = Strategy.Parameters.dStripWidth, + dMillingOffsetFromSide = Strategy.Parameters.dMillingOffsetFromSide + } Blade.Result, BladeKeepWasteResult = BladeKeepWaste.Make( Proc, Part, OptionalParameters) dMRRBlade = BladeKeepWasteResult.dMRR dCompletionPercentage = BladeKeepWasteResult.dCompletionPercentage @@ -164,6 +166,7 @@ function STR0005.Make( bAddMachining, Proc, Part, CustomParameters) end end -- TODO migliorare calcolo area lavorata; se ho il codolo ha senso l'incompleta? se incompleta con codolo faccio i cubetti?? + -- TODO settare che il codolo restituisce incompleta tranne quando è forzato if nIsApplicableCount > 0 then if dCompletionPercentage > 100 - 10 * GEO.EPS_SMALL then Strategy.Result.sStatus = 'Completed' diff --git a/Strategies/Standard/STR0005/STR0005Config.lua b/Strategies/Standard/STR0005/STR0005Config.lua index c825ed3..f164171 100644 --- a/Strategies/Standard/STR0005/STR0005Config.lua +++ b/Strategies/Standard/STR0005/STR0005Config.lua @@ -19,7 +19,9 @@ local STR0005Data = { { sName = 'dMaxWasteVolume', sNameNge = 'MAX_WASTE_VOLUME', sValue = '6000000', sDescriptionShort = '', sDescriptionLong = '', sType = 'd', sMessageId = '', sMinUserLevel = '1'}, { sName = 'dStripWidth', sNameNge = 'STRIP_WIDTH', sValue = '5', sDescriptionShort = '', sDescriptionLong = '', sType = 'd', sMessageId = '', sMinUserLevel = '1'}, { sName = 'dMinZAngleTopBlade', sNameNge = 'MIN_Z_ANGLE_TOP_BLADE', sValue = '', sDescriptionShort = '', sDescriptionLong = '', sType = 'd', sMessageId = '', sMinUserLevel = '1'}, - { sName = 'dMaxYAngleTopBlade', sNameNge = 'MAX_Y_ANGLE_TOP_BLADE', sValue = '1', sDescriptionShort = '', sDescriptionLong = '', sType = 'd', sMessageId = '', sMinUserLevel = '1'} + { sName = 'dMaxYAngleTopBlade', sNameNge = 'MAX_Y_ANGLE_TOP_BLADE', sValue = '1', sDescriptionShort = '', sDescriptionLong = '', sType = 'd', sMessageId = '', sMinUserLevel = '1'}, + { sName = 'bFinishWithMill', sNameNge = 'ALLOW_FINISH_MILL', sValue = '1', sDescriptionShort = 'Clean blade radius with mill', sDescriptionLong = 'Clean blade radius with mill', sType = 'b', sMessageId = '', sMinUserLevel = '1'}, + { sName = 'dMillingOffsetFromSide', sNameNge = 'MILLING_OFFSET_SIDE', sValue = '1', sDescriptionShort = '', sDescriptionLong = '', sType = 'd', sMessageId = '', sMinUserLevel = '1'} } } diff --git a/StrategyLibs/BLADEKEEPWASTE.lua b/StrategyLibs/BLADEKEEPWASTE.lua index e333323..11a94bf 100644 --- a/StrategyLibs/BLADEKEEPWASTE.lua +++ b/StrategyLibs/BLADEKEEPWASTE.lua @@ -13,9 +13,10 @@ local FaceData = require( 'FaceData') local MachiningLib = require( 'MachiningLib') -- strategie di base local FaceByBlade = require('FACEBYBLADE') +local FaceByMill = require('FACEBYMILL') -- tabella per definizione modulo - +local Machinings = {} ------------------------------------------------------------------------------------------------------------- local function CompareEdges( EdgeA, EdgeB) -- prima i lati orientati lungo X @@ -56,23 +57,30 @@ local function SortMachiningsBySegment( MachiningA, MachiningB) return false elseif MachiningB.nFeatureSegment > MachiningA.nFeatureSegment then return true - -- se segmento uguale, si minimizzano i cambi di lato + -- se segmento uguale, si guarda la priorità else - local bIsOddSegment = ( MachiningA.nFeatureSegment % 2 ~= 0) - if MachiningA.vtToolDirection:getY() < MachiningB.vtToolDirection:getY() - 10 * GEO.EPS_SMALL then - if bIsOddSegment then - return true - else - return false - end - elseif MachiningA.vtToolDirection:getY() > MachiningB.vtToolDirection:getY() + 10 * GEO.EPS_SMALL then - if bIsOddSegment then - return false - else - return true - end - else + if MachiningA.nInternalSortingPriority > MachiningB.nInternalSortingPriority then return false + elseif MachiningB.nInternalSortingPriority > MachiningA.nInternalSortingPriority then + return true + -- se priorità uguale, si minimizzano i cambi di lato + else + local bIsOddSegment = ( MachiningA.nFeatureSegment % 2 ~= 0) + if MachiningA.vtToolDirection:getY() < MachiningB.vtToolDirection:getY() - 10 * GEO.EPS_SMALL then + if bIsOddSegment then + return true + else + return false + end + elseif MachiningA.vtToolDirection:getY() > MachiningB.vtToolDirection:getY() + 10 * GEO.EPS_SMALL then + if bIsOddSegment then + return false + else + return true + end + else + return false + end end end end @@ -84,8 +92,8 @@ function BLADEKEEPWASTE.Make( Proc, Part, OptionalParameters) -- il FindBlade dovrà restituire di utilizzare sempre la lama sopra se l'angolo lo permette, ma avendo un'altezza massima (da macchina) oltre cui il DownUp non sarà fattibile (evita collisioni tra asse e pezzo) local Result = {} - local Blade = {} - Blade.Result = {} + Machinings = {} + local CreatedMachinings = {} local Cutting1 = {} local Cutting2 = {} @@ -108,16 +116,30 @@ function BLADEKEEPWASTE.Make( Proc, Part, OptionalParameters) end end + -- parametri opzionali e default + if not OptionalParameters then + OptionalParameters = {} + end + local nToolIndex = OptionalParameters.nToolIndex + local dExtendAfterTail = OptionalParameters.dExtendAfterTail or 10000 + local bFinishWithMill + if OptionalParameters.bFinishWithMill == nil then + bFinishWithMill = true + else + bFinishWithMill = OptionalParameters.bFinishWithMill + end + local dMillingOffsetFromSide = OptionalParameters.dMillingOffsetFromSide or 1 + -- si trovano le facce da lavorare - local FaceToMachine = {} + local BottomFace = {} local LongFaces = {} if Proc.nFct == 1 then - FaceToMachine = Proc.Faces[1] + BottomFace = Proc.Faces[1] else if not Proc.MainFaces then Proc.MainFaces = FaceData.GetMainFaces( Proc, Part) end - FaceToMachine = Proc.MainFaces.BottomFaces[1] + BottomFace = Proc.MainFaces.BottomFaces[1] LongFaces = Proc.MainFaces.LongFaces end @@ -125,8 +147,8 @@ function BLADEKEEPWASTE.Make( Proc, Part, OptionalParameters) -- si trova il lato da lavorare local EdgeToMachine = {} local EdgesSorted = {} - for i = 1, #FaceToMachine.Edges do - table.insert( EdgesSorted, FaceToMachine.Edges[i]) + for i = 1, #BottomFace.Edges do + table.insert( EdgesSorted, BottomFace.Edges[i]) end table.sort( EdgesSorted, CompareEdges) EdgeToMachine = EdgesSorted[1] @@ -141,27 +163,43 @@ function BLADEKEEPWASTE.Make( Proc, Part, OptionalParameters) end -- calcolo lavorazioni + -- taglio eventuali facce di chiusura + for i = 1, #LongFaces do + local Cutting = {} + local OptionalParametersFaceByBlade = { bIsSplitFeature = bIsSplitFeature, dExtendAfterTail = dExtendAfterTail, nToolIndex = nToolIndex} + Cutting = FaceByBlade.Make( Proc, Part, Proc.MainFaces.LongFaces[i], Proc.MainFaces.LongFaces[i].MainEdges.BottomEdge, OptionalParametersFaceByBlade) + Cutting.nInternalSortingPriority = 1 + table.insert( CreatedMachinings, Cutting) + end + -- faccia di fondo -- primo lato - local OptionalParametersFaceByBlade = { dDepthToMachine = dDepthToMachine, bIsSplitFeature = bIsSplitFeature, dExtendAfterTail = OptionalParameters.dExtendAfterTail} - Cutting1 = FaceByBlade.Make( Proc, Part, FaceToMachine, EdgeToMachine, OptionalParametersFaceByBlade) - table.insert( Blade.Result, Cutting1) + local OptionalParametersFaceByBlade = { dDepthToMachine = dDepthToMachine, bIsSplitFeature = bIsSplitFeature, dExtendAfterTail = dExtendAfterTail, nToolIndex = nToolIndex} + Cutting1 = FaceByBlade.Make( Proc, Part, BottomFace, EdgeToMachine, OptionalParametersFaceByBlade) + Cutting1.nInternalSortingPriority = 3 + table.insert( CreatedMachinings, Cutting1) -- secondo lato OptionalParametersFaceByBlade.bOppositeToolDirection = true - Cutting2 = FaceByBlade.Make( Proc, Part, FaceToMachine, EdgeToMachine, OptionalParametersFaceByBlade) - table.insert( Blade.Result, Cutting2) - -- eventuali facce di chiusura - for i = 1, #LongFaces do - local CuttingLongFace = {} - OptionalParametersFaceByBlade = { bIsSplitFeature = bIsSplitFeature, dExtendAfterTail = OptionalParameters.dExtendAfterTail} - CuttingLongFace = FaceByBlade.Make( Proc, Part, Proc.MainFaces.LongFaces[i], Proc.MainFaces.LongFaces[i].MainEdges.BottomEdge, OptionalParametersFaceByBlade) - table.insert( Blade.Result, CuttingLongFace) + Cutting2 = FaceByBlade.Make( Proc, Part, BottomFace, EdgeToMachine, OptionalParametersFaceByBlade) + Cutting2.nInternalSortingPriority = 3 + table.insert( CreatedMachinings, Cutting2) + -- eventuale pulitura raggio lama + if bFinishWithMill then + for i = 1, #LongFaces do + local dDepthToMachineMill = BottomFace.MainEdges.LongEdges[i].dElevation - dMillingOffsetFromSide + local dBladeMarkLength = max( Cutting1.dBladeMarkLength, Cutting2.dBladeMarkLength) + local OptionalParametersFaceByMill = { bIsSplitFeature = bIsSplitFeature, dExtendAfterTail = dExtendAfterTail, + dHorizontalStepSpan = dBladeMarkLength, dDepthToMachine = dDepthToMachineMill + } + local Milling = FaceByMill.Make( Proc, Part, BottomFace, BottomFace.MainEdges.LongEdges[i], OptionalParametersFaceByMill) + Milling.nInternalSortingPriority = 2 + table.insert( CreatedMachinings, Milling) + end end -- lavorazioni raggruppate in unica lista - local Machinings = {} - for i = 1, #Blade.Result do - if Blade.Result[i].bIsApplicable then - table.insert( Machinings, Blade.Result[i]) + for i = 1, #CreatedMachinings do + if CreatedMachinings[i].bIsApplicable then + table.insert( Machinings, CreatedMachinings[i]) end end @@ -175,7 +213,7 @@ function BLADEKEEPWASTE.Make( Proc, Part, OptionalParameters) -- calcolo parametri per la stima della velocità di asportazione -- TODO non è corretto: come si stima la velocità di asportazione con il codolo? è come se avesse rimosso tutto il volume feature nel tempo di percorrenza - if Cutting1.bIsApplicable and Cutting2.bIsApplicable then + if Cutting1.bIsApplicable or Cutting2.bIsApplicable then MRRParameters1 = { dStep = TOOLS[Cutting1.nToolIndex].dThickness, dSideStep = min( TOOLS[Cutting1.nToolIndex].dSideStep, dDepthToMachine), @@ -189,7 +227,7 @@ function BLADEKEEPWASTE.Make( Proc, Part, OptionalParameters) local dMRRBlade1 = MachiningLib.GetToolMRR( MRRParameters1) local dMRRBlade2 = MachiningLib.GetToolMRR( MRRParameters2) Result.dMRR = ( dMRRBlade1 + dMRRBlade2) / 2 - Result.dCompletionPercentage = Cutting2.dCompletionPercentage + Result.dCompletionPercentage = 0.5 * Cutting1.dCompletionPercentage + 0.5 * Cutting2.dCompletionPercentage if Result.dCompletionPercentage > 100 - 10 * GEO.EPS_SMALL then Result.sStatus = 'Completed' else diff --git a/StrategyLibs/BLADETOWASTE.lua b/StrategyLibs/BLADETOWASTE.lua index 58a3cc2..ca4c7d7 100644 --- a/StrategyLibs/BLADETOWASTE.lua +++ b/StrategyLibs/BLADETOWASTE.lua @@ -476,7 +476,7 @@ function BLADETOWASTE.Make( ProcOrId, Part, OptionalParameters) local dDepthToMachine = EdgeToMachine.dElevation + BeamData.CUT_EXTRA local OptionalParametersFaceByBlade = { dDepthToMachine = dDepthToMachine, nToolIndex = nToolIndex, - bDisableHorizontalSteps = true, + dHorizontalStepSpan = 0, dExtendAfterTail = dExtendAfterTail } Cutting = FaceByBlade.Make( ProcTrimesh, Part, FaceToMachine, EdgeToMachine, OptionalParametersFaceByBlade) @@ -516,7 +516,7 @@ function BLADETOWASTE.Make( ProcOrId, Part, OptionalParameters) local OptionalParametersFaceByBlade = { dDepthToMachine = dDepthToMachine, nToolIndex = nToolIndex, EdgeToMachineAlternative = EdgeToMachineAlternative, - bDisableHorizontalSteps = true, + dHorizontalStepSpan = 0, dExtendAfterTail = dExtendAfterTail } Cutting = FaceByBlade.Make( ProcTrimesh, Part, FaceToMachine, EdgeToMachine, OptionalParametersFaceByBlade) diff --git a/StrategyLibs/FACEBYBLADE.lua b/StrategyLibs/FACEBYBLADE.lua index 7d3da3c..a6cae4d 100644 --- a/StrategyLibs/FACEBYBLADE.lua +++ b/StrategyLibs/FACEBYBLADE.lua @@ -1,7 +1,6 @@ -- Strategia: FACEBYBLADE -- Descrizione --- Strategia di base per la lavorazione delle slot o tasche con lama --- Feature: tipo lapjoint +-- Strategia di base per la lavorazione delle facce con lama -- carico librerie local BeamLib = require( 'BeamLib') @@ -20,7 +19,7 @@ local function GetLeadInOutType( Machining) else -- testa sopra if TOOLS[Machining.nToolIndex].SetupInfo.HeadType.bTop then - if Machining.vtToolDirection:getX() < 0.7 then + if abs( Machining.vtToolDirection:getX()) < 0.7 then if Machining.vtToolDirection:getZ() > -0.087 or abs( Machining.vtToolDirection:getX()) < 0.34202 then sLeadInOutType = 'Perpendicular' @@ -35,7 +34,7 @@ local function GetLeadInOutType( Machining) end -- testa sotto elseif TOOLS[Machining.nToolIndex].SetupInfo.HeadType.bBottom then - if Machining.vtToolDirection:getX() < 0.7 then + if abs( Machining.vtToolDirection:getX()) < 0.7 then if Machining.vtToolDirection:getZ() < -GEO.EPS_SMALL or abs( Machining.vtToolDirection:getX()) < 0.34202 then sLeadInOutType = 'Perpendicular' @@ -79,10 +78,9 @@ local function CalculateLeadInOut( Machining, EdgeToMachine, Part) LeadOut.dPerpDistance = 0 LeadIn.dTangentDistance = 0 LeadOut.dTangentDistance = 0 - -- TODO da rimuovere controllo numero step quando si sistema la funzione che crea i cloni if Machining.bIsStartClosed or Machining.bIsEndClosed - or Machining.CloneStepsHorizontal.nCount > 1 then + or Machining.Steps.nCount > 1 then Machining.sLeadInOutType = 'Perpendicular' if AreSameVectorApprox( Machining.vtToolDirection, EdgeToMachine.vtN) then @@ -172,13 +170,13 @@ function FACEBYBLADE.Make( Proc, Part, FaceToMachine, EdgeToMachine, OptionalPar local dDepthToMachine = OptionalParameters.dDepthToMachine or EdgeToMachine.dElevation local bIsSplitFeature = OptionalParameters.bIsSplitFeature or false local bOppositeToolDirection = OptionalParameters.bOppositeToolDirection or false - local bDisableHorizontalSteps = OptionalParameters.bDisableHorizontalSteps or false local sDepth = OptionalParameters.sDepth or 0 local nToolIndex = OptionalParameters.nToolIndex local dLongitudinalOffset = OptionalParameters.dLongitudinalOffset or 0 if OptionalParameters.dPocketHeight then dLongitudinalOffset = 0 end + local dHorizontalStepSpan = OptionalParameters.dHorizontalStepSpan local dMinNzDownUp = OptionalParameters.dMinNzDownUp local sUserNotes = OptionalParameters.sUserNotes or '' @@ -204,7 +202,6 @@ function FACEBYBLADE.Make( Proc, Part, FaceToMachine, EdgeToMachine, OptionalPar end if dMinNzDownUp and FaceToMachine.vtN:getZ() < dMinNzDownUp then Cutting.bToolInvert = true - Cutting.bInvert = not Cutting.bInvert else Cutting.bToolInvert = false end @@ -230,7 +227,6 @@ function FACEBYBLADE.Make( Proc, Part, FaceToMachine, EdgeToMachine, OptionalPar dMinNzDownUp = TOOLS[ToolInfo.nToolIndex].SetupInfo.GetMinNzDownUp( Part.b3Raw, FaceToMachine.vtN, Cutting.vtToolDirection) if FaceToMachine.vtN:getZ() < dMinNzDownUp then Cutting.bToolInvert = true - Cutting.bInvert = not Cutting.bInvert end end Cutting.nToolIndex = ToolInfo.nToolIndex @@ -282,8 +278,26 @@ function FACEBYBLADE.Make( Proc, Part, FaceToMachine, EdgeToMachine, OptionalPar Cutting.bInvert = not Cutting.bInvert end -- profondità da lavorare e offset radiale - if TOOLS[Cutting.nToolIndex].dMaxDepth > dDepthToMachine - 10 * GEO.EPS_SMALL then - -- TODO la depth dovrebbe essere quella del machining + if OptionalParameters.dPocketHeight then + if TOOLS[Cutting.nToolIndex].dMaxDepth > dDepthToMachine - 10 * GEO.EPS_SMALL then + -- TODO la depth dovrebbe essere quella del machining + Cutting.dDepthToMachine = dDepthToMachine + Cutting.dResidualDepth = 0 + if bOppositeToolDirection then + Cutting.dRadialOffset = -dDepthToMachine + else + Cutting.dRadialOffset = EdgeToMachine.dElevation - dDepthToMachine + end + else + Cutting.dDepthToMachine = TOOLS[Cutting.nToolIndex].dMaxDepth - 1 + Cutting.dResidualDepth = dDepthToMachine - Cutting.dDepthToMachine + if bOppositeToolDirection then + Cutting.dRadialOffset = -Cutting.dDepthToMachine + else + Cutting.dRadialOffset = EdgeToMachine.dElevation - Cutting.dDepthToMachine + end + end + else Cutting.dDepthToMachine = dDepthToMachine Cutting.dResidualDepth = 0 if bOppositeToolDirection then @@ -291,14 +305,6 @@ function FACEBYBLADE.Make( Proc, Part, FaceToMachine, EdgeToMachine, OptionalPar else Cutting.dRadialOffset = EdgeToMachine.dElevation - dDepthToMachine end - else - Cutting.dDepthToMachine = TOOLS[Cutting.nToolIndex].dMaxDepth - 1 - Cutting.dResidualDepth = dDepthToMachine - Cutting.dDepthToMachine - if bOppositeToolDirection then - Cutting.dRadialOffset = -Cutting.dDepthToMachine - else - Cutting.dRadialOffset = EdgeToMachine.dElevation - Cutting.dDepthToMachine - end end -- completamento Cutting.dCompletionPercentage = 100 - Cutting.dResidualDepth / Cutting.dDepthToMachine @@ -333,8 +339,11 @@ function FACEBYBLADE.Make( Proc, Part, FaceToMachine, EdgeToMachine, OptionalPar Cutting.sBlockedAxis = BeamLib.GetBlockedAxis( Cutting.nToolIndex, 'perpendicular', Part.b3Raw, FaceToMachine.vtN, EgtIf( FaceToMachine.vtN:getX() > 0, X_AX(), -X_AX())) -- eventuale step orizzontale Cutting.CloneStepsHorizontal = {} - if not bDisableHorizontalSteps and TOOLS[Cutting.nToolIndex].dSideStep then - Cutting.CloneStepsHorizontal = MachiningLib.GetMachiningSteps( Cutting.dDepthToMachine, TOOLS[Cutting.nToolIndex].dSideStep) + if not dHorizontalStepSpan then + dHorizontalStepSpan = Cutting.dDepthToMachine + end + if dHorizontalStepSpan > 10 * GEO.EPS_SMALL and TOOLS[Cutting.nToolIndex].dSideStep then + Cutting.CloneStepsHorizontal = MachiningLib.GetMachiningSteps( dHorizontalStepSpan, TOOLS[Cutting.nToolIndex].dSideStep) else Cutting.CloneStepsHorizontal.nCount = 1 Cutting.CloneStepsHorizontal.dStep = 0 diff --git a/StrategyLibs/FACEBYCHAINSAW.lua b/StrategyLibs/FACEBYCHAINSAW.lua index f930ad6..02272d7 100644 --- a/StrategyLibs/FACEBYCHAINSAW.lua +++ b/StrategyLibs/FACEBYCHAINSAW.lua @@ -1,7 +1,6 @@ -- Strategia: FACEBYCHAINSAW -- Descrizione --- Strategia di base per la lavorazione delle slot o tasche con sega a catena --- Feature: tipo lapjoint +-- Strategia di base per la lavorazione delle facce con sega a catena -- carico librerie local BeamLib = require( 'BeamLib') diff --git a/StrategyLibs/FACEBYMILL.lua b/StrategyLibs/FACEBYMILL.lua new file mode 100644 index 0000000..39f1d61 --- /dev/null +++ b/StrategyLibs/FACEBYMILL.lua @@ -0,0 +1,415 @@ +-- Strategia: FACEBYMILL +-- Descrizione +-- Strategia di base per la lavorazione delle facce con fresa + +-- carico librerie +local BeamLib = require( 'BeamLib') +local BeamData = require( 'BeamData') +local MachiningLib = require( 'MachiningLib') + +-- Tabella per definizione modulo +local FACEBYMILL = {} + +------------------------------------------------------------------------------------------------------------- +local function GetLeadInOutType( Machining) + local sLeadInOutType = '' + + if Machining.bIsStartClosed or Machining.bIsEndClosed then + sLeadInOutType = 'Perpendicular' + else + -- testa sopra + if TOOLS[Machining.nToolIndex].SetupInfo.HeadType.bTop then + if abs( Machining.vtToolDirection:getX()) < 0.7 then + if Machining.vtToolDirection:getZ() > -0.087 + or abs( Machining.vtToolDirection:getX()) < 0.34202 then + sLeadInOutType = 'Perpendicular' + else + sLeadInOutType = 'Tangent' + end + elseif abs( Machining.vtEdgeDirection:getZ()) < 0.7 then + sLeadInOutType = 'Tangent' + else + -- TODO qui attacco tangenziale speciale tutto da un lato + sLeadInOutType = 'Tangent' + end + -- testa sotto + elseif TOOLS[Machining.nToolIndex].SetupInfo.HeadType.bBottom then + if abs( Machining.vtToolDirection:getX()) < 0.7 then + if Machining.vtToolDirection:getZ() < -GEO.EPS_SMALL + or abs( Machining.vtToolDirection:getX()) < 0.34202 then + sLeadInOutType = 'Perpendicular' + else + sLeadInOutType = 'Tangent' + end + elseif abs( Machining.vtEdgeDirection:getZ()) > 0.7 then + sLeadInOutType = 'Tangent' + else + -- TODO qui attacco tangenziale speciale tutto da un lato + sLeadInOutType = 'Tangent' + end + -- se testa senza preferenza Top e Bottom si fa sempre attacco tangenziale + else + sLeadInOutType = 'Tangent' + end + end + + return sLeadInOutType +end + + +local function CalculateLeadInOut( Machining, EdgeToMachine, Part) + -- TODO implementare le funzioni di Tool Collision Avoidance (vedi wiki e FacesBysaw -> CalcLeadInOutPerpGeom) + + -- si determina l'eventuale riduzione da applicare in caso di inizio o fine chiusi + local dAddLengthToReduce = sqrt( Machining.dDepthToMachine * TOOLS[Machining.nToolIndex].dDiameter - Machining.dDepthToMachine * Machining.dDepthToMachine) + + if Machining.bInvert then + Machining.bIsStartClosed, Machining.bIsEndClosed = Machining.bIsEndClosed, Machining.bIsStartClosed + end + + local LeadIn = {} + local LeadOut = {} + Machining.sLeadInOutType = '' + LeadIn.dStartAddLength = 0 + LeadOut.dEndAddLength = 0 + LeadIn.nType = MCH_MILL_LI.LINEAR + LeadOut.nType = MCH_MILL_LI.LINEAR + LeadIn.dPerpDistance = 0 + LeadOut.dPerpDistance = 0 + LeadIn.dTangentDistance = 0 + LeadOut.dTangentDistance = 0 + if Machining.bIsStartClosed + or Machining.bIsEndClosed + or Machining.Steps.nCount > 1 then + + Machining.sLeadInOutType = 'Perpendicular' + if AreSameVectorApprox( Machining.vtToolDirection, EdgeToMachine.vtN) then + LeadIn.dPerpDistance = EdgeToMachine.dElevation + BeamData.CUT_SIC - Machining.dRadialOffset + LeadOut.dPerpDistance = EdgeToMachine.dElevation + BeamData.CUT_SIC - Machining.dRadialOffset + else + LeadIn.dPerpDistance = BeamData.CUT_SIC - Machining.dRadialOffset + LeadOut.dPerpDistance = BeamData.CUT_SIC - Machining.dRadialOffset + end + else + Machining.sLeadInOutType = GetLeadInOutType( Machining) + if Machining.sLeadInOutType == 'Perpendicular' then + LeadIn.dPerpDistance = 1 + LeadOut.dPerpDistance = 1 + else + LeadIn.dTangentDistance = TOOLS[Machining.nToolIndex].dDiameter / 2 + LeadOut.dTangentDistance = TOOLS[Machining.nToolIndex].dDiameter / 2 + end + end + LeadIn.dElevation = 0 + LeadOut.dElevation = 0 + LeadIn.dCompLength = 0 + LeadOut.dCompLength = 0 + if Machining.bIsStartClosed and Machining.bIsEndClosed then + LeadIn.dStartAddLength = -dAddLengthToReduce + LeadOut.dEndAddLength = -dAddLengthToReduce + elseif Machining.bIsStartClosed then + LeadIn.dStartAddLength = -dAddLengthToReduce + -- eventuale correzione per accorciamento maggiore di larghezza tasca + LeadOut.dEndAddLength = max( -LeadIn.dStartAddLength - EdgeToMachine.dLength + 10 * BeamData.CUT_EXTRA, BeamData.CUT_EXTRA) + elseif Machining.bIsEndClosed then + LeadOut.dEndAddLength = -dAddLengthToReduce + -- eventuale correzione per accorciamento maggiore di larghezza tasca + LeadIn.dStartAddLength = max( -LeadOut.dEndAddLength - EdgeToMachine.dLength + 10 * BeamData.CUT_EXTRA, BeamData.CUT_EXTRA) + else + LeadIn.dStartAddLength = BeamData.CUT_EXTRA + LeadOut.dEndAddLength = BeamData.CUT_EXTRA + end + + return LeadIn, LeadOut +end + + +local function GetSCC( vtMachiningDirection) + -- TODO implementare SCC come per FacesBySaw + local nSCC = MCH_SCC.NONE + if vtMachiningDirection:getZ() < -0.9 then + nSCC = MCH_SCC.ADIR_ZM + elseif vtMachiningDirection:getZ() > 0.9 then + nSCC = MCH_SCC.ADIR_ZP + elseif vtMachiningDirection:getY() < -0.707 then + nSCC = MCH_SCC.ADIR_YM + elseif vtMachiningDirection:getY() > 0.707 then + nSCC = MCH_SCC.ADIR_YP + elseif vtMachiningDirection:getX() < -0.707 then + nSCC = MCH_SCC.ADIR_XM + elseif vtMachiningDirection:getX() > 0.707 then + nSCC = MCH_SCC.ADIR_XP + end + + return nSCC +end + + +-- TODO calcolo area lavorata per completamento +-- TODO EdgeToMachineAlternative da gestire +function FACEBYMILL.Make( Proc, Part, FaceToMachine, EdgeToMachine, OptionalParameters) + local Milling = {} + Milling.bIsApplicable = true + Milling.dDepthToMachine = 0 + Milling.sMessage = '' + Milling.idProc = Proc.id + Milling.dResidualDepth = EdgeToMachine.dElevation + Milling.dBladeMarkLength = 0 + Milling.sEdgeType = EdgeToMachine.sType + Milling.nFeatureSegment = 1 + + -- parametri opzionali + if not OptionalParameters then + OptionalParameters = {} + end + local dExtendAfterTail = OptionalParameters.dExtendAfterTail or 10000 + local dPocketHeight = OptionalParameters.dPocketHeight or 0 + local dDepthToMachine = OptionalParameters.dDepthToMachine or EdgeToMachine.dElevation + local bIsSplitFeature = OptionalParameters.bIsSplitFeature or false + local bOppositeToolDirection = OptionalParameters.bOppositeToolDirection or false + local sDepth = OptionalParameters.sDepth or 0 + local nToolIndex = OptionalParameters.nToolIndex + local dLongitudinalOffset = OptionalParameters.dLongitudinalOffset or 0 + if OptionalParameters.dPocketHeight then + dLongitudinalOffset = 0 + end + local dHorizontalStepSpan = OptionalParameters.dHorizontalStepSpan + local dMinNzDownUp = OptionalParameters.dMinNzDownUp + local sUserNotes = OptionalParameters.sUserNotes or '' + + -- lunghezze, direzioni e punti caratteristici della lavorazione e del lato lavorato + Milling.dLengthToMachine = EdgeToMachine.dLength + Milling.dEdgeLength = EdgeToMachine.dLength + if bOppositeToolDirection then + Milling.vtToolDirection = -EdgeToMachine.vtN + else + Milling.vtToolDirection = EdgeToMachine.vtN + end + Milling.vtEdgeDirection = EdgeToMachine.vtN ^ FaceToMachine.vtN + -- TODO conviene spostare questi calcoli nel FaceData? + Milling.ptEdge1, _, Milling.ptEdge2 = EgtSurfTmFacetOppositeSide( Proc.id, FaceToMachine.id, -Milling.vtToolDirection, GDB_ID.ROOT) + local b3BoxEdge = BBox3d( Milling.ptEdge1, Milling.ptEdge2) + Milling.dLengthOnX = b3BoxEdge:getDimX() + + -- se si conosce il limite downUp (utensile forzato o downUp forzato) si decide se invertire (ToolInvert) + if nToolIndex and not dMinNzDownUp then + dMinNzDownUp = TOOLS[nToolIndex].SetupInfo.GetMinNzDownUp( Part.b3Raw, FaceToMachine.vtN, Milling.vtToolDirection) + end + if dMinNzDownUp and FaceToMachine.vtN:getZ() < dMinNzDownUp then + Milling.bToolInvert = true + else + Milling.bToolInvert = false + end + + -- ricerca utensile + if nToolIndex then + Milling.nToolIndex = nToolIndex + else + local ToolSearchParameters = {} + if OptionalParameters.dPocketHeight then + ToolSearchParameters.sMillShape = 'TSHAPEMILL' + else + ToolSearchParameters.sMillShape = 'STANDARD' + end + ToolSearchParameters.dElevation = FaceToMachine.dElevation + -- TODO qui ToolSearchParameters.vtToolDirection andrà sosituito con vtN!! + if Milling.bToolInvert then + ToolSearchParameters.vtToolDirection = -FaceToMachine.vtN + else + ToolSearchParameters.vtToolDirection = FaceToMachine.vtN + end + ToolSearchParameters.bAllowTopHead = true + -- TODO bisognerà implementare anche la lama da sotto + ToolSearchParameters.bAllowBottomHead = false + local ToolInfo = MachiningLib.FindMill( Proc, ToolSearchParameters) + -- ora che l'utensile è scelto, se non era definito l'angolo di DownUp lo verifico per decidere se invertire + if ToolInfo.nToolIndex and not dMinNzDownUp then + dMinNzDownUp = TOOLS[ToolInfo.nToolIndex].SetupInfo.GetMinNzDownUp( Part.b3Raw, FaceToMachine.vtN, Milling.vtToolDirection) + if FaceToMachine.vtN:getZ() < dMinNzDownUp then + Milling.bToolInvert = true + end + end + Milling.nToolIndex = ToolInfo.nToolIndex + end + Milling.nType = MCH_OY.MILLING + if not TOOLS[Milling.nToolIndex] or not TOOLS[Milling.nToolIndex].sName then + Milling.sMessage = 'Mill not found' + Milling.bIsApplicable = false + EgtOutLog( Milling.sMessage) + return Milling, EdgeToMachine.dElevation + end + + -- verifica dimensioni tasca compatibili + -- se tasca meno spessa della fresa la lavorazione non è applicabile + if OptionalParameters.dPocketHeight and TOOLS[Milling.nToolIndex].dMaxMaterial > dPocketHeight + 10 * GEO.EPS_SMALL then + Milling.sMessage = 'Pocket too narrow for blade thickness' + Milling.bIsApplicable = false + EgtOutLog( Milling.sMessage) + return Milling, EdgeToMachine.dElevation + end + -- se tasca chiusa da entrambi i lati e più stretta della fresa la lavorazione non è applicabile + if not ( EdgeToMachine.bIsStartOpen or EdgeToMachine.bIsEndOpen) then + if TOOLS[Milling.nToolIndex].dDiameter > EdgeToMachine.dLength + 10 * GEO.EPS_SMALL then + Milling.sMessage = 'Pocket too narrow for blade diameter' + Milling.bIsApplicable = false + EgtOutLog( Milling.sMessage) + return Milling, EdgeToMachine.dElevation + end + end + + -- parametri della lavorazione + -- profondità (parametro DEPTH) + Milling.sDepth = sDepth + -- inizio e fine aperti o chiusi + Milling.bIsStartClosed = not EdgeToMachine.bIsStartOpen + Milling.bIsEndClosed = not EdgeToMachine.bIsEndOpen + -- lato di lavoro e inversione + if TOOLS[Milling.nToolIndex].bIsCCW then + Milling.nWorkside = MCH_MILL_WS.RIGHT + Milling.bInvert = true + else + Milling.nWorkside = MCH_MILL_WS.LEFT + Milling.bInvert = false + end + if bOppositeToolDirection then + Milling.bInvert = not Milling.bInvert + end + if Milling.bToolInvert then + Milling.bInvert = not Milling.bInvert + end + -- profondità da lavorare e offset radiale + if OptionalParameters.dPocketHeight then + if TOOLS[Milling.nToolIndex].dSideDepth > dDepthToMachine - 10 * GEO.EPS_SMALL then + -- TODO la depth dovrebbe essere quella del machining + Milling.dDepthToMachine = dDepthToMachine + Milling.dResidualDepth = 0 + if bOppositeToolDirection then + Milling.dRadialOffset = -dDepthToMachine + else + Milling.dRadialOffset = EdgeToMachine.dElevation - dDepthToMachine + end + else + Milling.dDepthToMachine = TOOLS[Milling.nToolIndex].dSideDepth - 1 + Milling.dResidualDepth = dDepthToMachine - Milling.dDepthToMachine + if bOppositeToolDirection then + Milling.dRadialOffset = -Milling.dDepthToMachine + else + Milling.dRadialOffset = EdgeToMachine.dElevation - Milling.dDepthToMachine + end + end + else + Milling.dDepthToMachine = dDepthToMachine + Milling.dResidualDepth = 0 + if bOppositeToolDirection then + Milling.dRadialOffset = -dDepthToMachine + else + Milling.dRadialOffset = EdgeToMachine.dElevation - dDepthToMachine + end + end + -- completamento + Milling.dCompletionPercentage = 100 - Milling.dResidualDepth / Milling.dDepthToMachine + -- step verticale e offset longitudinale + if OptionalParameters.dPocketHeight then + Milling.Steps = MachiningLib.GetMachiningSteps( dPocketHeight, TOOLS[Milling.nToolIndex].dMaxMaterial) + Milling.Steps.nStepType = MCH_MILL_ST.ONEWAY + Milling.dMaxElev = Milling.Steps.dStep * Milling.Steps.nCount - 10 * GEO.EPS_SMALL + else + Milling.Steps = {} + Milling.Steps.nCount = 1 + Milling.Steps.dStep = TOOLS[Milling.nToolIndex].dStep + Milling.Steps.nStepType = MCH_MILL_ST.ZIGZAG + Milling.dMaxElev = FaceToMachine.dElevation + end + if Milling.bToolInvert then + if Milling.Steps.nCount > 1 then + Milling.dLongitudinalOffset = - dPocketHeight + else + Milling.dLongitudinalOffset = - TOOLS[Milling.nToolIndex].dMaxMaterial - dLongitudinalOffset + end + else + Milling.dLongitudinalOffset = dLongitudinalOffset + end + -- distanza di sicurezza + Milling.dStartSafetyLength = BeamData.CUT_SIC + -- overlap + Milling.dOverlap = 0 + -- faceuse e frame lavorazione + if bOppositeToolDirection then + Milling.nFaceuse = BeamLib.GetNearestOrthoOpposite( -Milling.vtToolDirection) + Milling.vtFaceUse = -Milling.vtToolDirection + else + Milling.nFaceuse = BeamLib.GetNearestOrthoOpposite( Milling.vtToolDirection) + Milling.vtFaceUse = Milling.vtToolDirection + end + -- SCC + Milling.nSCC = GetSCC( Milling.vtToolDirection) + -- asse bloccato + Milling.sBlockedAxis = '' + -- eventuale step orizzontale + Milling.CloneStepsHorizontal = {} + if not dHorizontalStepSpan then + dHorizontalStepSpan = Milling.dDepthToMachine + end + if dHorizontalStepSpan > 10 * GEO.EPS_SMALL and TOOLS[Milling.nToolIndex].dSideStep then + Milling.CloneStepsHorizontal = MachiningLib.GetMachiningSteps( dHorizontalStepSpan, TOOLS[Milling.nToolIndex].dSideStep) + else + Milling.CloneStepsHorizontal.nCount = 1 + Milling.CloneStepsHorizontal.dStep = 0 + end + -- approccio e retrazione + Milling.LeadIn, Milling.LeadOut = CalculateLeadInOut( Milling, EdgeToMachine, Part) + -- lunghezza impronta lama + if Milling.bIsStartClosed and Milling.bIsEndClosed then + Milling.dBladeMarkLength = abs( min( Milling.LeadIn.dStartAddLength, Milling.LeadOut.dEndAddLength)) + elseif Milling.bIsStartClosed then + Milling.dBladeMarkLength = abs( Milling.LeadIn.dStartAddLength) + elseif Milling.bIsEndClosed then + Milling.dBladeMarkLength = abs( Milling.LeadOut.dEndAddLength) + end + -- geometria + Milling.Geometry = {{Milling.idProc, FaceToMachine.id}} + -- note utente + Milling.sUserNotes = sUserNotes + -- nome operazione + Milling.sOperationName = 'Milling_' .. ( EgtGetName( Milling.idProc) or tostring( Milling.idProc)) .. '_' .. tostring( FaceToMachine.id + 1) + + -- se lavorazione aperta sulla coda, eventuali aggiustamenti + -- TODO valutare se fare funzione a parte + if Proc.AffectedFaces.bLeft and ( EdgeToMachine.sType == 'Bottom' or ( Milling.vtToolDirection:getX() < 0.707)) then + local dLengthOnX = Milling.dLengthOnX + -- se feature splittata non si considera la lunghezza della feature per il check spostamento dopo separazione + if bIsSplitFeature then + dLengthOnX = 0 + end + local bStartLeft = MachiningLib.StartsLeftSide( Milling) + local dAddLengthLeftSide = Milling.LeadOut.dEndAddLength + local dAddLengthToReduce = sqrt( Milling.dDepthToMachine * TOOLS[Milling.nToolIndex].dDiameter - Milling.dDepthToMachine * Milling.dDepthToMachine) + if bStartLeft then + dAddLengthLeftSide = Milling.LeadIn.dStartAddLength + end + if not AreSameOrOppositeVectorApprox( EdgeToMachine.vtN, Y_AX()) then + if MachiningLib.CanMoveAfterSplitcut( dLengthOnX, Part) then + Milling.sStage = 'AfterTail' + else + Milling.bIsApplicable = false + end + elseif dAddLengthLeftSide + dAddLengthToReduce > dExtendAfterTail then + if MachiningLib.CanMoveAfterSplitcut( dLengthOnX, Part) then + Milling.sStage = 'AfterTail' + else + if bStartLeft then + Milling.LeadIn.dStartAddLength = - dAddLengthToReduce + dExtendAfterTail + else + Milling.LeadOut.dEndAddLength = - dAddLengthToReduce + dExtendAfterTail + end + end + end + end + + return Milling + +end + +------------------------------------------------------------------------------------------------------------- + + return FACEBYMILL \ No newline at end of file diff --git a/StrategyLibs/SPLITCUT.lua b/StrategyLibs/SPLITCUT.lua index 0b64a44..1bfb09f 100644 --- a/StrategyLibs/SPLITCUT.lua +++ b/StrategyLibs/SPLITCUT.lua @@ -206,7 +206,7 @@ function SPLITCUT.Execute( Proc, Part, Strategy) OptionalParameters.nToolIndex = Strategy.SplitStrategy[1].ToolInfo.nToolIndex OptionalParameters.dLongitudinalOffset = Strategy.dOffset or 0 OptionalParameters.sUserNotes = EgtIf( Strategy.bSplit, 'Split;', 'Cut;') - OptionalParameters.bDisableHorizontalSteps = true + OptionalParameters.dHorizontalStepSpan = 0 Machining.AuxiliaryData.bIsSplitOrCut = true @@ -225,7 +225,7 @@ function SPLITCUT.Execute( Proc, Part, Strategy) OptionalParameters.dLongitudinalOffset = Strategy.dOffset or 0 OptionalParameters.dDepthToMachine = Part.dWidth / 2 + BeamData.CUT_EXTRA_MIN OptionalParameters.sUserNotes = EgtIf( Strategy.bSplit, 'Presplit;', 'Precut;') - OptionalParameters.bDisableHorizontalSteps = true + OptionalParameters.dHorizontalStepSpan = 0 local EdgeToMachine = SPLITCUT.GetEdgeToMachine( Proc, -Y_AX()) Machining.Splitting = FaceByBlade.Make( Proc, Part, Proc.Faces[1], EdgeToMachine, OptionalParameters) @@ -240,7 +240,7 @@ function SPLITCUT.Execute( Proc, Part, Strategy) OptionalParameters.dLongitudinalOffset = Strategy.dOffset or 0 OptionalParameters.dDepthToMachine = Part.dWidth / 2 + BeamData.CUT_EXTRA_MIN OptionalParameters.sUserNotes = EgtIf( Strategy.bSplit, 'Split;', 'Cut;') - OptionalParameters.bDisableHorizontalSteps = true + OptionalParameters.dHorizontalStepSpan = 0 Machining.AuxiliaryData.bIsSplitOrCut = true @@ -257,7 +257,7 @@ function SPLITCUT.Execute( Proc, Part, Strategy) OptionalParameters.dLongitudinalOffset = Strategy.dOffset or 0 OptionalParameters.dDepthToMachine = Part.dHeight + BeamData.CUT_EXTRA OptionalParameters.sUserNotes = EgtIf( Strategy.bSplit, 'Split;', 'Cut;') - OptionalParameters.bDisableHorizontalSteps = true + OptionalParameters.dHorizontalStepSpan = 0 Machining.AuxiliaryData.bIsSplitOrCut = true @@ -276,7 +276,7 @@ function SPLITCUT.Execute( Proc, Part, Strategy) local dExtraMaxMat = ( Strategy.SplitStrategy[1].ToolInfo.dMaxMatBladeFromTop + Strategy.SplitStrategy[2].ToolInfo.dMaxMatBladeFromDown - Part.dHeight - BeamData.CUT_EXTRA_MIN) / 2 OptionalParameters.dDepthToMachine = Strategy.SplitStrategy[1].ToolInfo.dMaxMatBladeFromTop - dExtraMaxMat OptionalParameters.sUserNotes = EgtIf( Strategy.bSplit, 'Presplit;', 'Precut;') - OptionalParameters.bDisableHorizontalSteps = true + OptionalParameters.dHorizontalStepSpan = 0 local EdgeToMachine = SPLITCUT.GetEdgeToMachine( Proc, Z_AX()) @@ -292,7 +292,7 @@ function SPLITCUT.Execute( Proc, Part, Strategy) OptionalParameters.dLongitudinalOffset = Strategy.dOffset or 0 OptionalParameters.dDepthToMachine = Strategy.SplitStrategy[2].ToolInfo.dMaxMatBladeFromDown - dExtraMaxMat OptionalParameters.sUserNotes = EgtIf( Strategy.bSplit, 'Split;', 'Cut;') - OptionalParameters.bDisableHorizontalSteps = true + OptionalParameters.dHorizontalStepSpan = 0 Machining.AuxiliaryData.bIsSplitOrCut = true