diff --git a/LuaLibs/BeamExec.lua b/LuaLibs/BeamExec.lua index b612abe..6deef97 100644 --- a/LuaLibs/BeamExec.lua +++ b/LuaLibs/BeamExec.lua @@ -1598,7 +1598,7 @@ function BeamExec.ProcessMachinings( PARTS) bAllStrategiesApplied = false MACHININGS, bAllStrategiesApplied = CalculateMachinings( vProc, PARTS[nPart], MatrixResult.nInitialPosition) -- se non sono sono settate le rotazioni di lavorazione di testa e coda, significa che le feature da eseguire non sono state eseguite per qualche problema. Si forza rotazione 1 - if MACHININGS.Info.nHeadCutRotation or MACHININGS.Info.nSplitCutRotation then + if not MACHININGS.Info.nHeadCutRotation or not MACHININGS.Info.nSplitCutRotation then MACHININGS.Info.nHeadCutRotation = 1 MACHININGS.Info.nSplitCutRotation = 1 end diff --git a/LuaLibs/BeamLib.lua b/LuaLibs/BeamLib.lua index e1002ee..0470992 100644 --- a/LuaLibs/BeamLib.lua +++ b/LuaLibs/BeamLib.lua @@ -619,6 +619,14 @@ function BeamLib.TableCopyDeep( OriginalTable) return CopiedTable end +--------------------------------------------------------------------- +function BeamLib.MergeTables( OriginalTable, InputTable) + local result = {} + for k, v in pairs( OriginalTable) do result[k] = v end + for k, v in pairs( InputTable) do result[k] = v end + return result +end + --------------------------------------------------------------------- function BeamLib.FindEdgeBestOrientedAsDirection( Edges, vtDirection) local BestEdge = {} diff --git a/LuaLibs/MachiningLib.lua b/LuaLibs/MachiningLib.lua index 44e3294..4439dda 100644 --- a/LuaLibs/MachiningLib.lua +++ b/LuaLibs/MachiningLib.lua @@ -249,6 +249,8 @@ function MachiningLib.FindMill( Proc, ToolSearchParameters) -- controlli standard elseif ToolSearchParameters.dMaxToolDiameter and TOOLS[i].dDiameter > ToolSearchParameters.dMaxToolDiameter then bIsToolCompatible = false + elseif ToolSearchParameters.dMinToolDiameter and TOOLS[i].dDiameter < ToolSearchParameters.dMinToolDiameter then + bIsToolCompatible = false elseif TOOLS[i].SetupInfo.HeadType.bTop and ToolSearchParameters.vtToolDirection:getZ() < TOOLS[i].SetupInfo.GetMinNz( ToolSearchParameters.vtToolDirection, TOOLS[i]) - GEO.EPS_ZERO then bIsToolCompatible = false elseif TOOLS[i].SetupInfo.HeadType.bBottom and ToolSearchParameters.vtToolDirection:getZ() > TOOLS[i].SetupInfo.GetMaxNz( ToolSearchParameters.vtToolDirection, TOOLS[i]) + GEO.EPS_ZERO then diff --git a/Strategies/AvailableStrategyList.json b/Strategies/AvailableStrategyList.json index 97b4d1d..24255df 100644 --- a/Strategies/AvailableStrategyList.json +++ b/Strategies/AvailableStrategyList.json @@ -316,7 +316,7 @@ "nGrp": 0, "TopologyList" : [ { "sName": "Feature", - "StrategyList" : [ { "sStrategyId": "STR0011" } ] + "StrategyList" : [ { "sStrategyId": "STR0011" }, { "sStrategyId": "STR0013" } ] } ] }, diff --git a/Strategies/Standard/STR0011/STR0011.lua b/Strategies/Standard/STR0011/STR0011.lua index fe6d6c9..3863797 100644 --- a/Strategies/Standard/STR0011/STR0011.lua +++ b/Strategies/Standard/STR0011/STR0011.lua @@ -17,7 +17,7 @@ local Strategy = {} -- TODO Da fare completamente gestione foratura doppia con 2 teste ------------------------------------------------------------------------------------------------------------- -function GetDrillingStrategy( Proc, Part) +local function GetDrillingStrategy( Proc, Part) local ToolSearchParameters = {} local Machining = {} @@ -34,9 +34,8 @@ function GetDrillingStrategy( Proc, Part) Drilling.ToolInfo = {} Drilling.ToolInfo = MachiningLib.FindDrill( Proc, ToolSearchParameters) if Drilling.ToolInfo.nToolIndex then - Drilling.nType = MCH_MY.DRILLING Drilling.nToolIndex = Drilling.ToolInfo.nToolIndex - Drilling.Geometry = {{ Proc.FeatureInfo.idAddAuxGeom, 0}} + Drilling.Geometry = {{ Proc.FeatureInfo.idAddAuxGeom, -1}} Drilling.dStep = TOOLS[Drilling.ToolInfo.nToolIndex].dStep -- se lavorazione non completa o se si deve forare dai due lati if Proc.FeatureInfo.bIsDrillOpen and @@ -106,13 +105,13 @@ function GetDrillingStrategy( Proc, Part) local dExtraDrill = ( Proc.FeatureInfo.dDrillLen - BeamData.MILL_OVERLAP - ( Drilling.ToolInfo.dResidualDepth + Drilling2.ToolInfo.dResidualDepth)) / 2 Drilling.nToolIndex = Drilling.ToolInfo.nToolIndex - Drilling.Geometry = {{ Proc.FeatureInfo.idAddAuxGeom, 0}} + Drilling.Geometry = {{ Proc.FeatureInfo.idAddAuxGeom, -1}} Drilling.vtToolDirection = Proc.FeatureInfo.vtDrillExtrusion Drilling.sDepth = Proc.FeatureInfo.dDrillLen - Drilling.ToolInfo.dResidualDepth - dExtraDrill table.insert( Machining, Drilling) Drilling2.nToolIndex = Drilling2.ToolInfo.nToolIndex - Drilling2.Geometry = {{ Proc.FeatureInfo.idAddAuxGeom, 0}} + Drilling2.Geometry = {{ Proc.FeatureInfo.idAddAuxGeom, -1}} Drilling2.bInvert = true Drilling2.vtToolDirection = -Proc.FeatureInfo.vtDrillExtrusion Drilling2.sDepth = Proc.FeatureInfo.dDrillLen - Drilling2.ToolInfo.dResidualDepth - dExtraDrill @@ -129,9 +128,8 @@ function GetDrillingStrategy( Proc, Part) elseif Drilling.ToolInfo.nToolIndex and Drilling.ToolInfo.dResidualDepth < 10 * GEO.EPS_SMALL and ( Strategy.Parameters.sDrillingMode == 'PREFER_ONE' or ( not Drilling2.ToolInfo.nToolIndex and Strategy.Parameters.sDrillingMode == 'AUTO') or not Proc.FeatureInfo.bIsDrillOpen) then Drilling.sDepth = 'TH' - Drilling.nType = MCH_MY.DRILLING Drilling.nToolIndex = Drilling.ToolInfo.nToolIndex - Drilling.Geometry = {{ Proc.FeatureInfo.idAddAuxGeom, 0}} + Drilling.Geometry = {{ Proc.FeatureInfo.idAddAuxGeom, -1}} Drilling.vtToolDirection = Proc.FeatureInfo.vtDrillExtrusion table.insert( Machining, Drilling) -- voto @@ -145,7 +143,7 @@ function GetDrillingStrategy( Proc, Part) ( Strategy.Parameters.sDrillingMode == 'PREFER_ONE' or ( not Drilling.ToolInfo.nToolIndex and Strategy.Parameters.sDrillingMode == 'AUTO')) then Drilling2.sDepth = 'TH' Drilling2.nToolIndex = Drilling2.ToolInfo.nToolIndex - Drilling2.Geometry = {{ Proc.FeatureInfo.idAddAuxGeom, 0}} + Drilling2.Geometry = {{ Proc.FeatureInfo.idAddAuxGeom, -1}} Drilling2.bInvert = true Drilling2.vtToolDirection = -Proc.FeatureInfo.vtDrillExtrusion table.insert( Machining, Drilling2) @@ -157,15 +155,14 @@ function GetDrillingStrategy( Proc, Part) Strategy.Result.sInfo = '' -- se possono lavorare entrambi elseif Drilling.ToolInfo.nToolIndex and Drilling2.ToolInfo.nToolIndex then - Drilling.nType = MCH_MY.DRILLING Drilling.nToolIndex = Drilling.ToolInfo.nToolIndex - Drilling.Geometry = {{ Proc.FeatureInfo.idAddAuxGeom, 0}} + Drilling.Geometry = {{ Proc.FeatureInfo.idAddAuxGeom, -1}} Drilling.vtToolDirection = Proc.FeatureInfo.vtDrillExtrusion Drilling.sDepth = Proc.FeatureInfo.dDrillLen - Drilling.ToolInfo.dResidualDepth table.insert( Machining, Drilling) Drilling2.nToolIndex = Drilling2.ToolInfo.nToolIndex - Drilling2.Geometry = {{ Proc.FeatureInfo.idAddAuxGeom, 0}} + Drilling2.Geometry = {{ Proc.FeatureInfo.idAddAuxGeom, -1}} Drilling2.bInvert = true Drilling2.vtToolDirection = -Proc.FeatureInfo.vtDrillExtrusion Drilling2.sDepth = Proc.FeatureInfo.dDrillLen - Drilling2.ToolInfo.dResidualDepth @@ -187,9 +184,8 @@ function GetDrillingStrategy( Proc, Part) -- se utensile 1 non completo elseif Drilling.ToolInfo.nToolIndex and ( Strategy.Parameters.sDrillingMode ~= 'FORCE_TWO' or Proc.FeatureInfo.bIsDrillOpen) then Drilling.sDepth = Proc.FeatureInfo.dDrillLen - Drilling.ToolInfo.dResidualDepth - Drilling.nType = MCH_MY.DRILLING Drilling.nToolIndex = Drilling.ToolInfo.nToolIndex - Drilling.Geometry = {{ Proc.FeatureInfo.idAddAuxGeom, 0}} + Drilling.Geometry = {{ Proc.FeatureInfo.idAddAuxGeom, -1}} Drilling.vtToolDirection = Proc.FeatureInfo.vtDrillExtrusion Drilling.sDepth = Proc.FeatureInfo.dDrillLen - Drilling.ToolInfo.dResidualDepth table.insert( Machining, Drilling) @@ -205,7 +201,7 @@ function GetDrillingStrategy( Proc, Part) elseif Drilling2.ToolInfo.nToolIndex and Strategy.Parameters.sDrillingMode ~= 'FORCE_TWO' then Drilling2.sDepth = Proc.FeatureInfo.dDrillLen - Drilling2.ToolInfo.dResidualDepth Drilling2.nToolIndex = Drilling2.ToolInfo.nToolIndex - Drilling2.Geometry = {{ Proc.FeatureInfo.idAddAuxGeom, 0}} + Drilling2.Geometry = {{ Proc.FeatureInfo.idAddAuxGeom, -1}} Drilling2.bInvert = true Drilling2.vtToolDirection = -Proc.FeatureInfo.vtDrillExtrusion Drilling2.sDepth = Proc.FeatureInfo.dDrillLen - Drilling2.ToolInfo.dResidualDepth @@ -250,6 +246,7 @@ function STR0011.Make( bAddMachining, Proc, Part, CustomParameters) if bAddMachining and Strategy.Result.sStatus ~= 'Not-Applicable' then -- aggiunge lavorazione for j = 1, #Strategy.Machinings do + Strategy.Machinings[j].nType = MCH_MY.DRILLING Strategy.Machinings[j].Steps.dStep = TOOLS[Strategy.Machinings[j].ToolInfo.nToolIndex].dStep bAreAllMachiningsAdded = MachiningLib.AddMachinings( Proc, Strategy.Machinings[j]) end diff --git a/Strategies/Standard/STR0013/STR0013.json b/Strategies/Standard/STR0013/STR0013.json new file mode 100644 index 0000000..0dd54eb --- /dev/null +++ b/Strategies/Standard/STR0013/STR0013.json @@ -0,0 +1,55 @@ +{ + "sStrategyId": "STR0013", + "sStrategyName": "Hole with Mill", + "ParameterList" : [ + { + "sName": "dDiameterTolerance", + "sNameNge": "TOLERANCE", + "sValue": "0", + "sDescriptionShort": "Tolerance on Diameter", + "sDescriptionLong": "Tolerance on Diameter", + "sType": "d", + "sMessageId": " ", + "sMinUserLevel": "1" + }, + { + "sName": "bUseMillAsDrill", + "sNameNge": "DRILLMILL", + "sValue": "0", + "sDescriptionShort": "Use mill as a drillbit", + "sDescriptionLong": "Admit to use the mill as a drillbit", + "sType": "b", + "sMessageId": " ", + "sMinUserLevel": "1" + }, + { + "sName": "sDrillingMode", + "sNameNge": "DRILLING_MODE", + "sValue": "AUTO", + "sDescriptionShort": "Drilling mode", + "sDescriptionLong": "", + "sType": "combo", + "sMinUserLevel": "1", + "Choices": [ + { + "sValue": "AUTO", + "sDescriptionShort": "Automatic", + "sDescriptionLong": "", + "sMessageId": "" + }, + { + "sValue": "PREFER_ONE", + "sDescriptionShort": "Preferred machining from one side only", + "sDescriptionLong": "", + "sMessageId": "" + }, + { + "sValue": "FORCE_TWO", + "sDescriptionShort": "Force machining from two sides", + "sDescriptionLong": "", + "sMessageId": "" + } + ] + } + ] +} \ No newline at end of file diff --git a/Strategies/Standard/STR0013/STR0013.lua b/Strategies/Standard/STR0013/STR0013.lua new file mode 100644 index 0000000..8b280a2 --- /dev/null +++ b/Strategies/Standard/STR0013/STR0013.lua @@ -0,0 +1,202 @@ +-- Strategia: STR0013 +-- Descrizione +-- foratura +-- Feature: foro con fresa + +-- carico librerie +local BeamLib = require( 'BeamLib') +local BeamData = require( 'BeamData') +local MachiningLib = require( 'MachiningLib') +local FeatureLib = require( 'FeatureLib') +-- strategie di base + +-- Tabella per definizione modulo +local STR0013 = {} +local Strategy = {} + +------------------------------------------------------------------------------------------------------------- +local function GetDrillingWithMillStrategy( Proc, Part) + local ToolSearchParameters = {} + local Machining = {} + local Milling = { ToolInfo = {}} + local Milling2 = { ToolInfo = {}} + + -- si cerca fresa con direzione standard + ToolSearchParameters = {} + ToolSearchParameters.dElevation = Proc.FeatureInfo.dDrillLen + BeamData.MILL_OVERLAP + ToolSearchParameters.vtToolDirection = Proc.FeatureInfo.vtDrillExtrusion + ToolSearchParameters.dMaxToolDiameter = Proc.FeatureInfo.dDrillDiam + Strategy.Parameters.dDiameterTolerance + ToolSearchParameters.sType = 'MILL_STD' + ToolSearchParameters.sMillShape = 'STANDARD' + Milling.vtToolDirection = -Proc.FeatureInfo.vtDrillExtrusion + Milling.ToolInfo = MachiningLib.FindMill( Proc, ToolSearchParameters) + + -- se foro aperto, si cerca anche fresa con direzione invertita + if Proc.FeatureInfo.bIsDrillOpen then + ToolSearchParameters = {} + ToolSearchParameters.dElevation = Proc.FeatureInfo.dDrillLen + BeamData.MILL_OVERLAP + ToolSearchParameters.vtToolDirection = -Proc.FeatureInfo.vtDrillExtrusion + ToolSearchParameters.dMaxToolDiameter = Proc.FeatureInfo.dDrillDiam + Strategy.Parameters.dDiameterTolerance + ToolSearchParameters.sType = 'MILL_STD' + ToolSearchParameters.sMillShape = 'STANDARD' + Milling2.vtToolDirection = -Proc.FeatureInfo.vtDrillExtrusion + Milling2.bInvert = true + Milling2.bToolInvert = true + Milling2.ToolInfo = MachiningLib.FindMill( Proc, ToolSearchParameters) + end + + local bDouble = false + -- se ho trovato entrambi gli utensili e non è forzato da eseguire solo da un lato e una punta lo fa completo, si fa foratura in doppio + if Milling.ToolInfo.nToolIndex and Milling2.ToolInfo.nToolIndex and + not ( Strategy.Parameters.sDrillingMode == 'PREFER_ONE' and ( Milling.ToolInfo.dResidualDepth < 0 or Milling2.ToolInfo.dResidualDepth < 0)) then + + bDouble = true + -- se entrambe le punte lavorano più della metà del foro, si cerca un altro utensile che possa lavorare fino alla metà del foro + -- è possibile che si possa trovare fresa più corta che lavora a sufficienza + if Milling.ToolInfo.dResidualDepth < ( Proc.FeatureInfo.dDrillLen - BeamData.MILL_OVERLAP) / 2 and + Milling2.ToolInfo.dResidualDepth < ( Proc.FeatureInfo.dDrillLen - BeamData.MILL_OVERLAP) / 2 then + + ToolSearchParameters = {} + ToolSearchParameters.dElevation = ( Proc.FeatureInfo.dDrillLen + BeamData.MILL_OVERLAP) / 2 + ToolSearchParameters.vtToolDirection = Proc.FeatureInfo.vtDrillExtrusion + ToolSearchParameters.dMaxToolDiameter = Proc.FeatureInfo.dDrillDiam + Strategy.Parameters.dDiameterTolerance + local HalfMilling = {} + HalfMilling.ToolInfo = {} + HalfMilling.ToolInfo = MachiningLib.FindMill( Proc, ToolSearchParameters) + + ToolSearchParameters.vtToolDirection = -Proc.FeatureInfo.vtDrillExtrusion + local HalfMilling2 = {} + HalfMilling2.ToolInfo = {} + HalfMilling2.ToolInfo = MachiningLib.FindMill( Proc, ToolSearchParameters) + + -- se entrambi gli utensili lavorano in modo completo fino alla metà del foro, li sostituisco a qeulli trovati in precedenza + if HalfMilling.ToolInfo.dResidualDepth < 0 and HalfMilling2.ToolInfo.dResidualDepth < 0 then + if Milling.ToolInfo.nToolIndex ~= HalfMilling.ToolInfo.nToolIndex then + Milling.ToolInfo.nToolIndex, Milling.ToolInfo.dResidualDepth = HalfMilling.ToolInfo.nToolIndex, HalfMilling.ToolInfo.dResidualDepth + end + if Milling2.ToolInfo.nToolIndex ~= HalfMilling2.ToolInfo.nToolIndex then + Milling2.ToolInfo.nToolIndex, Milling2.ToolInfo.dResidualDepth = HalfMilling2.ToolInfo.nToolIndex, HalfMilling2.ToolInfo.dResidualDepth + end + end + end + end + + local dResidual = Proc.FeatureInfo.dDrillLen + -- aggiunta lavorazioni a lista + -- se foro doppio + if bDouble then + dResidual = Milling.ToolInfo.dResidualDepth + Milling2.ToolInfo.dResidualDepth - Proc.FeatureInfo.dDrillLen + Strategy.Result.dMRR = ( MachiningLib.GetToolMRR( Milling.ToolInfo) + MachiningLib.GetToolMRR( Milling2.ToolInfo)) / 2 + local dExtraDrill = ( Proc.FeatureInfo.dDrillLen - BeamData.MILL_OVERLAP - ( Milling.ToolInfo.dResidualDepth + Milling2.ToolInfo.dResidualDepth)) / 2 + Milling.sDepth = Proc.FeatureInfo.dDrillLen - Milling.ToolInfo.dResidualDepth - dExtraDrill + table.insert( Machining, Milling) + Milling2.sDepth = Proc.FeatureInfo.dDrillLen - Milling2.ToolInfo.dResidualDepth - dExtraDrill + table.insert( Machining, Milling2) + -- altrimenti singolo + else + local BestMilling + if not Milling.ToolInfo.nToolIndex then + BestMilling = Milling2 + elseif not Milling2.ToolInfo.nToolIndex then + BestMilling = Milling + else + if Milling.ToolInfo.dResidualDepth < 0 then + BestMilling = Milling + elseif Milling2.ToolInfo.dResidualDepth < 0 then + BestMilling = Milling2 + else + BestMilling = EgtIf( Milling.ToolInfo.dResidualDepth < Milling2.ToolInfo.dResidualDepth, Milling, Milling2) + end + end + if BestMilling.ToolInfo.nToolIndex then + dResidual = BestMilling.ToolInfo.dResidualDepth + if dResidual < 0 then + BestMilling.sDepth = Proc.FeatureInfo.dDrillLen + EgtIf( Proc.FeatureInfo.bIsDrillOpen, MILL_OVERLAP, 0) + else + BestMilling.sDepth = Proc.FeatureInfo.dDrillLen - BestMilling.ToolInfo.dResidualDepth + end + + Strategy.Result.dMRR = MachiningLib.GetToolMRR( BestMilling.ToolInfo) + table.insert( Machining, BestMilling) + end + end + + -- se c'è almeno una lavorazione, si calcola voto + if #Machining > 0 then + if dResidual < 0 then + Strategy.Result.sStatus = 'Completed' + Strategy.Result.nCompletionIndex = 5 + Strategy.Result.sInfo = '' + Strategy.Result.nQuality = FeatureLib.GetFeatureQuality( 'Mill') + else + Strategy.Result.sStatus = 'Not-Completed' + local dResidualPrercentage = 100 * ( dResidual / Proc.FeatureInfo.dDrillLen) + Strategy.Result.nCompletionIndex = FeatureLib.GetFeatureCompletionIndex( 100 - dResidualPrercentage) + Strategy.Result.sInfo = 'Machining not complete, left ' .. tostring( ceil( dResidualPrercentage)) .. '%' + Strategy.Result.nQuality = FeatureLib.GetFeatureQuality( 'Mill') + end + -- se son state trovate frese compatibili + else + local sMessage = 'Mill not found' + Strategy.Result = FeatureLib.GetStrategyResultNotApplicable( sMessage) + end + + return Machining, Strategy.Result +end + +------------------------------------------------------------------------------------------------------------- +function STR0013.Make( bAddMachining, Proc, Part, CustomParameters) + -- carico parametri da default e li aggiorno con quelli passati dal chiamante (potrebbero non essere congruenti) + local StrategyLib = {} + StrategyLib.Config = STRATEGIES_CONFIG[CustomParameters.sStrategyId] + Strategy.sName = StrategyLib.Config.sStrategyId + Strategy.Parameters = BeamLib.LoadCustomParametersInStrategy( Proc, CustomParameters, StrategyLib.Config) + Strategy.Machinings = {} + Strategy.Result = {} + + local bAreAllMachiningsAdded + + Strategy.Machinings, Strategy.Result = GetDrillingWithMillStrategy( Proc, Part) + + if bAddMachining and Strategy.Result.sStatus ~= 'Not-Applicable' then + -- aggiunge lavorazione + for j = 1, #Strategy.Machinings do + local MachiningToAdd + local nIndexTool = Strategy.Machinings[j].ToolInfo.nToolIndex + -- se diametro fresa differisce al massimo della tolleranza si fa foratura con fresa (se ammesso) + if abs( TOOLS[nIndexTool].dDiameter - Proc.FeatureInfo.dDrillDiam) < Strategy.Parameters.dDiameterTolerance and Strategy.Parameters.bUseMillAsDrill then + MachiningToAdd = MachiningLib.InitMachiningParameters( MCH_MY.DRILLING) + MachiningToAdd = BeamLib.MergeTables( MachiningToAdd, Strategy.Machinings[j]) + MachiningToAdd.Steps.dStep = TOOLS[nIndexTool].dStep / 3 + -- se diametro foro più grande della fresa, ma non oltre il doppio del diametro, si fa contornatura a spirale + elseif Proc.FeatureInfo.dDrillDiam < ( TOOLS[nIndexTool].dDiameter * 0.75) * 2 then + MachiningToAdd = MachiningLib.InitMachiningParameters( MCH_MY.MILLING) + MachiningToAdd = BeamLib.MergeTables( MachiningToAdd, Strategy.Machinings[j]) + -- il diametro deve essere almeno 1mm più grande del foro, altrimenti la macchina non riesce ad interpolare + MachiningToAdd.dRadialOffset = min( 0, Proc.FeatureInfo.dDrillDiam - ( TOOLS[nIndexTool].dDiameter + 1)) + MachiningToAdd.Steps.nStepType = MCH_MILL_ST.SPIRAL + MachiningToAdd.Steps.dStep = TOOLS[nIndexTool].dStep + -- se diametro foro più grande del doppio del diametro fresa, si fa svuotatura + else + MachiningToAdd = MachiningLib.InitMachiningParameters( MCH_MY.POCKETING) + MachiningToAdd = BeamLib.MergeTables( MachiningToAdd, Strategy.Machinings[j]) + MachiningToAdd.Steps.dStep = TOOLS[nIndexTool].dStep + MachiningToAdd.Steps.dSideStep = TOOLS[nIndexTool].dSideStep + MachiningToAdd.nSubType = MCH_POCK_SUB.SPIRALOUT + MachiningToAdd.LeadIn.nType = MCH_POCK_LI.HELIX + MachiningToAdd.LeadIn.dTangentDistance = TOOLS[nIndexTool].dDiameter / 2 + MachiningToAdd.LeadIn.dElevation = MachiningToAdd.Steps.dStep / 2 + end + + MachiningToAdd.nToolIndex = nIndexTool + MachiningToAdd.Geometry = {{ Proc.FeatureInfo.idAddAuxGeom, -1}} + bAreAllMachiningsAdded = MachiningLib.AddMachinings( Proc, MachiningToAdd) + end + end + + return bAreAllMachiningsAdded, Strategy.Result +end + +------------------------------------------------------------------------------------------------------------- + + return STR0013 \ No newline at end of file