From 1345c5a5cb73d8c8b3c5311421663129be03f92b Mon Sep 17 00:00:00 2001 From: "andrea.villa" Date: Fri, 6 Feb 2026 15:12:12 +0100 Subject: [PATCH] - Rimossa gestione speciale per foro esattamente orizzontale - Controllo extra-corse. Per ora SCC ignorato - Per ricerca punta, si considera sempre 1centesimo di tolleranza (oltre alla tolleranza configurabile) --- LuaLibs/MachiningLib.lua | 6 +- Process.lua | 2 +- Strategies/Standard/STR0011/STR0011.lua | 360 ++++++++++-------------- 3 files changed, 154 insertions(+), 214 deletions(-) diff --git a/LuaLibs/MachiningLib.lua b/LuaLibs/MachiningLib.lua index 23bc5de..4af5982 100644 --- a/LuaLibs/MachiningLib.lua +++ b/LuaLibs/MachiningLib.lua @@ -727,10 +727,10 @@ function MachiningLib.FindDrill( Proc, ToolSearchParameters) ToolSearchParameters.dToolDiameter = Proc.FeatureInfo.dDrillDiam or 0 end if not ToolSearchParameters.dMaxToolDiameter then - ToolSearchParameters.dMaxToolDiameter = ToolSearchParameters.dToolDiameter + ( ToolSearchParameters.dDiameterTolerance or ( 100 * GEO.EPS_SMALL)) + ToolSearchParameters.dMaxToolDiameter = ToolSearchParameters.dToolDiameter + ( ToolSearchParameters.dDiameterTolerance or 0) + ( 10 * GEO.EPS_SMALL) end if not ToolSearchParameters.dMinToolDiameter then - ToolSearchParameters.dMinToolDiameter = ToolSearchParameters.dToolDiameter - ( ToolSearchParameters.dDiameterTolerance or ( 100 * GEO.EPS_SMALL)) + ToolSearchParameters.dMinToolDiameter = ToolSearchParameters.dToolDiameter - ( ToolSearchParameters.dDiameterTolerance or 0) - ( 10 * GEO.EPS_SMALL) end for i = 1, #TOOLS do @@ -756,6 +756,8 @@ function MachiningLib.FindDrill( Proc, ToolSearchParameters) elseif TOOLS[i].SetupInfo.HeadType.bBottom and ToolSearchParameters.vtToolDirection:getZ() > TOOLS[i].SetupInfo.GetMaxNz( ToolSearchParameters.vtToolDirection, TOOLS[i]) + GEO.EPS_ZERO then bIsToolCompatible = false + elseif PreSimulationLib.CheckOutOfStrokeFromPoints( ToolSearchParameters.ptCheckOutStroke, ToolSearchParameters.vtToolDirection, 0, TOOLS[i]) then + bIsToolCompatible = false end -- scelgo il migliore diff --git a/Process.lua b/Process.lua index 1ef58aa..9f3b4f6 100644 --- a/Process.lua +++ b/Process.lua @@ -7,7 +7,7 @@ -- Intestazioni require( 'EgtBase') _ENV = EgtProtectGlobal() -EgtEnableDebug( false) +EgtEnableDebug( true) -- Imposto direttorio libreria specializzata per Travi EgtAddToPackagePath( BEAM.BASEDIR .. '\\LuaLibs\\?.lua') diff --git a/Strategies/Standard/STR0011/STR0011.lua b/Strategies/Standard/STR0011/STR0011.lua index d45c727..448333a 100644 --- a/Strategies/Standard/STR0011/STR0011.lua +++ b/Strategies/Standard/STR0011/STR0011.lua @@ -20,224 +20,162 @@ local Strategy = {} local function GetDrillingStrategy( Proc, Part) local ToolSearchParameters = {} local Machining = {} - local sQuality - -- se lavorazione orizzontale - if Proc.FeatureInfo.bIsDrillHorizontal then - local bDouble = false - local Drilling = MachiningLib.InitMachiningParameters( MCH_MY.DRILLING) - Drilling.bIsApplicable = false + -- si cerca utensile 1 + local Drilling = MachiningLib.InitMachiningParameters( MCH_MY.DRILLING) + ToolSearchParameters = {} + ToolSearchParameters.dElevation = Proc.FeatureInfo.dDrillLen + BeamData.MILL_OVERLAP + ToolSearchParameters.vtToolDirection = Proc.FeatureInfo.vtDrillExtrusion + ToolSearchParameters.dToolDiameter = Proc.FeatureInfo.dDrillDiam + ToolSearchParameters.dDiameterTolerance = Strategy.Parameters.dDiameterTolerance + ToolSearchParameters.AvailableToolList = MachiningLib.GetAvailableToolList( Proc, Strategy.Parameters.sDrillBitList, 'Drilling') + ToolSearchParameters.ptCheckOutStroke = { Proc.FeatureInfo.ptDrillCenter + ( EgtMdbGetGeneralParam( MCH_GP.SAFEZ) * ToolSearchParameters.vtToolDirection)} + + Drilling.ToolInfo = {} + Drilling.ToolInfo = MachiningLib.FindDrill( Proc, ToolSearchParameters) + -- TODO se utensile 2 che si torverà è il gemello da usare nelle lavorazioni in doppio, allora gestire di conseguenza l'applicazione delle lavorazioni in doppio + -- si cerca utensile 2 + local Drilling2 = MachiningLib.InitMachiningParameters( MCH_MY.DRILLING) + Drilling2.ToolInfo = {} + if Proc.FeatureInfo.bIsDrillOpen then ToolSearchParameters = {} ToolSearchParameters.dElevation = Proc.FeatureInfo.dDrillLen + BeamData.MILL_OVERLAP - ToolSearchParameters.vtToolDirection = Proc.FeatureInfo.vtDrillExtrusion - ToolSearchParameters.dToolDiameter = Proc.FeatureInfo.dDrillDiam + ToolSearchParameters.vtToolDirection = -Proc.FeatureInfo.vtDrillExtrusion ToolSearchParameters.dDiameterTolerance = Strategy.Parameters.dDiameterTolerance ToolSearchParameters.AvailableToolList = MachiningLib.GetAvailableToolList( Proc, Strategy.Parameters.sDrillBitList, 'Drilling') - Drilling.ToolInfo = {} - Drilling.ToolInfo = MachiningLib.FindDrill( Proc, ToolSearchParameters) - if Drilling.ToolInfo.nToolIndex then - Drilling.nToolIndex = Drilling.ToolInfo.nToolIndex - 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 - ( Drilling.ToolInfo.dResidualDepth > 10 * GEO.EPS_SMALL or Strategy.Parameters.sDrillingMode == 'FORCE_TWO' or Strategy.Parameters.sDrillingMode == 'AUTO') then - bDouble = true - local dHalfDrill = ( Proc.FeatureInfo.dDrillLen + BeamData.MILL_OVERLAP) / 2 - Drilling.sDepth = min( dHalfDrill, Proc.FeatureInfo.dDrillLen - Drilling.ToolInfo.dResidualDepth) - Drilling.vtFaceNormal = Proc.FeatureInfo.vtDrillExtrusion - Drilling.bInvert = false - Drilling.vtToolDirection = Proc.FeatureInfo.vtDrillExtrusion - table.insert( Machining, Drilling) - local Drilling2 = BeamLib.TableCopyDeep( Drilling) - Drilling2.bInvert = true - Drilling2.vtToolDirection = -Proc.FeatureInfo.vtDrillExtrusion - table.insert( Machining, Drilling2) - else - Drilling.sDepth = 'TH' - Drilling.vtFaceNormal = Proc.FeatureInfo.vtDrillExtrusion - Drilling.bInvert = false - Drilling.vtToolDirection = Proc.FeatureInfo.vtDrillExtrusion - table.insert( Machining, Drilling) - end + ToolSearchParameters.ptCheckOutStroke = { Proc.FeatureInfo.ptDrillCenter + ( ( Proc.FeatureInfo.dDrillLen + EgtMdbGetGeneralParam( MCH_GP.SAFEZ)) * ToolSearchParameters.vtToolDirection)} - -- voto - if Drilling.ToolInfo.dResidualDepth < 0 or ( Proc.FeatureInfo.dDrillLen + BeamData.MILL_OVERLAP) / 2 > Drilling.ToolInfo.dResidualDepth then - Strategy.Result.sStatus = 'Completed' - Strategy.Result.dCompletionIndex = 5 - Strategy.Result.dMRR = MachiningLib.GetToolMRR( Machining[1].ToolInfo or Machining[2].ToolInfo) - if bDouble or not Proc.FeatureInfo.bIsDrillOpen then - sQuality = 'FINE' - else - sQuality = 'ROUGH' - end - Strategy.Result.dQuality = FeatureLib.GetStrategyQuality( sQuality) - Strategy.Result.sInfo = '' - else - Strategy.Result.sStatus = 'Not-Completed' - local dMachinedLen = EgtIf( bDouble, Machining[1].sDepth * 2, Proc.FeatureInfo.dDrillLen) - local dMachinedPrercentage = 100 * ( dMachinedLen / Proc.FeatureInfo.dDrillLen) - Strategy.Result.dCompletionIndex = FeatureLib.GetFeatureCompletionIndex( dMachinedPrercentage) - Strategy.Result.sInfo = 'Drill not complete, left ' .. tostring( 100 - ceil( dMachinedPrercentage)) .. '%' - Strategy.Result.dMRR = MachiningLib.GetToolMRR( Machining[1].ToolInfo or Machining[2].ToolInfo) - Strategy.Result.dQuality = FeatureLib.GetStrategyQuality( 'FINE') -- se non completo, anche se fosse foro singolo, comunque non esce dall'altra parte, quindi non scheggia - end - else - local sMessage = 'Drillbit not found' - Strategy.Result = FeatureLib.GetStrategyResultNotApplicable( sMessage) - end - -- se lavorazione verticale - else - -- si cerca utensile 1 - local Drilling = MachiningLib.InitMachiningParameters( MCH_MY.DRILLING) - ToolSearchParameters = {} - ToolSearchParameters.dElevation = Proc.FeatureInfo.dDrillLen + BeamData.MILL_OVERLAP - ToolSearchParameters.vtToolDirection = Proc.FeatureInfo.vtDrillExtrusion - ToolSearchParameters.dToolDiameter = Proc.FeatureInfo.dDrillDiam - ToolSearchParameters.dDiameterTolerance = Strategy.Parameters.dDiameterTolerance - ToolSearchParameters.AvailableToolList = MachiningLib.GetAvailableToolList( Proc, Strategy.Parameters.sDrillBitList, 'Drilling') - Drilling.ToolInfo = {} - Drilling.ToolInfo = MachiningLib.FindDrill( Proc, ToolSearchParameters) - -- si cerca utensile 2 - local Drilling2 = MachiningLib.InitMachiningParameters( MCH_MY.DRILLING) - Drilling2.ToolInfo = {} - if Proc.FeatureInfo.bIsDrillOpen then - ToolSearchParameters = {} - ToolSearchParameters.dElevation = Proc.FeatureInfo.dDrillLen + BeamData.MILL_OVERLAP - ToolSearchParameters.vtToolDirection = -Proc.FeatureInfo.vtDrillExtrusion - ToolSearchParameters.dDiameterTolerance = Strategy.Parameters.dDiameterTolerance - ToolSearchParameters.AvailableToolList = MachiningLib.GetAvailableToolList( Proc, Strategy.Parameters.sDrillBitList, 'Drilling') - Drilling2.ToolInfo = MachiningLib.FindDrill( Proc, ToolSearchParameters) - end - - -- se possono lavorare entrambi e si deve fare lavorazione doppia e si riesce a completare - if Drilling.ToolInfo.nToolIndex and Drilling2.ToolInfo.nToolIndex and - ( Strategy.Parameters.sDrillingMode == 'FORCE_TWO' or Strategy.Parameters.sDrillingMode == 'AUTO') and - Drilling.ToolInfo.dResidualDepth + Drilling2.ToolInfo.dResidualDepth < Proc.FeatureInfo.dDrillLen then - - 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, -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, -1}} - Drilling2.bInvert = true - Drilling2.vtToolDirection = -Proc.FeatureInfo.vtDrillExtrusion - Drilling2.sDepth = Proc.FeatureInfo.dDrillLen - Drilling2.ToolInfo.dResidualDepth - dExtraDrill - table.insert( Machining, Drilling2) - - -- voto - Strategy.Result.sStatus = 'Completed' - Strategy.Result.dCompletionIndex = 5 - Strategy.Result.sInfo = '' - Strategy.Result.dMRR = MachiningLib.GetToolMRR( Machining[1].ToolInfo) - Strategy.Result.dQuality = FeatureLib.GetStrategyQuality( 'FINE') - - -- se utensile 1 esegue completamente - 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.nToolIndex = Drilling.ToolInfo.nToolIndex - Drilling.Geometry = {{ Proc.FeatureInfo.idAddAuxGeom, -1}} - Drilling.vtToolDirection = Proc.FeatureInfo.vtDrillExtrusion - table.insert( Machining, Drilling) - -- voto - Strategy.Result.sStatus = 'Completed' - Strategy.Result.dCompletionIndex = 5 - Strategy.Result.dMRR = MachiningLib.GetToolMRR( Machining[1].ToolInfo) - Strategy.Result.dQuality = FeatureLib.GetStrategyQuality( EgtIf( Proc.FeatureInfo.bIsDrillOpen, 'ROUGH', 'FINE')) - Strategy.Result.sInfo = '' - -- se utensile 2 esegue completamente - elseif Drilling2.ToolInfo.nToolIndex and Drilling2.ToolInfo.dResidualDepth < 10 * GEO.EPS_SMALL and - ( 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, -1}} - Drilling2.bInvert = true - Drilling2.vtToolDirection = -Proc.FeatureInfo.vtDrillExtrusion - table.insert( Machining, Drilling2) - -- voto - Strategy.Result.sStatus = 'Completed' - Strategy.Result.dCompletionIndex = 5 - Strategy.Result.dMRR = MachiningLib.GetToolMRR( Machining[1].ToolInfo) - Strategy.Result.dQuality = FeatureLib.GetStrategyQuality( EgtIf( Proc.FeatureInfo.bIsDrillOpen, 'ROUGH', 'FINE')) - Strategy.Result.sInfo = '' - -- se possono lavorare entrambi - elseif Drilling.ToolInfo.nToolIndex and Drilling2.ToolInfo.nToolIndex then - Drilling.nToolIndex = Drilling.ToolInfo.nToolIndex - 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, -1}} - Drilling2.bInvert = true - Drilling2.vtToolDirection = -Proc.FeatureInfo.vtDrillExtrusion - Drilling2.sDepth = Proc.FeatureInfo.dDrillLen - Drilling2.ToolInfo.dResidualDepth - table.insert( Machining, Drilling2) - if Drilling.ToolInfo.dResidualDepth + Drilling2.ToolInfo.dResidualDepth < Proc.FeatureInfo.dDrillLen then - Strategy.Result.sStatus = 'Not-Completed' - local dMachinedLen = Machining[1].sDepth + Machining[2].sDepth - local dMachinedPrercentage = 100 * ( dMachinedLen / Proc.FeatureInfo.dDrillLen) - Strategy.Result.dCompletionIndex = FeatureLib.GetFeatureCompletionIndex( dMachinedPrercentage) - Strategy.Result.sInfo = 'Drill not complete, left ' .. tostring( 100 - ceil( dMachinedPrercentage)) .. '%' - else - Strategy.Result.sStatus = 'Completed' - Strategy.Result.dCompletionIndex = 5 - Strategy.Result.sInfo = '' - end - -- voto - Strategy.Result.dMRR = MachiningLib.GetToolMRR( Machining[1].ToolInfo) - Strategy.Result.dQuality = FeatureLib.GetStrategyQuality( 'FINE') - -- 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.nToolIndex = Drilling.ToolInfo.nToolIndex - Drilling.Geometry = {{ Proc.FeatureInfo.idAddAuxGeom, -1}} - Drilling.vtToolDirection = Proc.FeatureInfo.vtDrillExtrusion - Drilling.sDepth = Proc.FeatureInfo.dDrillLen - Drilling.ToolInfo.dResidualDepth - table.insert( Machining, Drilling) - -- voto - Strategy.Result.sStatus = 'Not-Completed' - local dMachinedLen = Machining[1].sDepth - local dMachinedPrercentage = 100 * ( dMachinedLen / Proc.FeatureInfo.dDrillLen) - Strategy.Result.dCompletionIndex = FeatureLib.GetFeatureCompletionIndex( dMachinedPrercentage) - Strategy.Result.sInfo = 'Drill not complete, left ' .. tostring( 100 - ceil( dMachinedPrercentage)) .. '%' - Strategy.Result.dMRR = MachiningLib.GetToolMRR( Machining[1].ToolInfo) - Strategy.Result.dQuality = FeatureLib.GetStrategyQuality( 'FINE') - -- se utensile 2 non completo - 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, -1}} - Drilling2.bInvert = true - Drilling2.vtToolDirection = -Proc.FeatureInfo.vtDrillExtrusion - Drilling2.sDepth = Proc.FeatureInfo.dDrillLen - Drilling2.ToolInfo.dResidualDepth - table.insert( Machining, Drilling2) - -- voto - Strategy.Result.sStatus = 'Not-Completed' - local dMachinedLen = Machining[1].sDepth - local dMachinedPrercentage = 100 * ( dMachinedLen / Proc.FeatureInfo.dDrillLen) - Strategy.Result.dCompletionIndex = FeatureLib.GetFeatureCompletionIndex( dMachinedPrercentage) - Strategy.Result.sInfo = 'Drill not complete, left ' .. tostring( 100 - ceil( dMachinedPrercentage)) .. '%' - Strategy.Result.dMRR = MachiningLib.GetToolMRR( Machining[1].ToolInfo) - Strategy.Result.dQuality = FeatureLib.GetStrategyQuality( 'FINE') - else - local sMessage - -- se non sono state trovate punte - if not Drilling.ToolInfo.nToolIndex and not Drilling2.ToolInfo.nToolIndex then - sMessage = 'Drillbit not found' - -- se son state trovate delle punte, ma non è stato possibile forare da entrambe le parti - elseif Strategy.Parameters.sDrillingMode == 'FORCE_TWO' then - sMessage = "Not possible to force machining from both sides. Please change drilling mode to AUTO" - end - Strategy.Result = FeatureLib.GetStrategyResultNotApplicable( sMessage) - end + Drilling2.ToolInfo = MachiningLib.FindDrill( Proc, ToolSearchParameters) end + + -- se possono lavorare entrambi e si deve fare lavorazione doppia e si riesce a completare + if Drilling.ToolInfo.nToolIndex and Drilling2.ToolInfo.nToolIndex and + ( Strategy.Parameters.sDrillingMode == 'FORCE_TWO' or Strategy.Parameters.sDrillingMode == 'AUTO') and + Drilling.ToolInfo.dResidualDepth + Drilling2.ToolInfo.dResidualDepth < Proc.FeatureInfo.dDrillLen then + + 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, -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, -1}} + Drilling2.bInvert = true + Drilling2.vtToolDirection = -Proc.FeatureInfo.vtDrillExtrusion + Drilling2.sDepth = Proc.FeatureInfo.dDrillLen - Drilling2.ToolInfo.dResidualDepth - dExtraDrill + table.insert( Machining, Drilling2) + + -- voto + Strategy.Result.sStatus = 'Completed' + Strategy.Result.dCompletionIndex = 5 + Strategy.Result.sInfo = '' + Strategy.Result.dMRR = MachiningLib.GetToolMRR( Machining[1].ToolInfo) + Strategy.Result.dQuality = FeatureLib.GetStrategyQuality( 'FINE') + + -- se utensile 1 esegue completamente + 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.nToolIndex = Drilling.ToolInfo.nToolIndex + Drilling.Geometry = {{ Proc.FeatureInfo.idAddAuxGeom, -1}} + Drilling.vtToolDirection = Proc.FeatureInfo.vtDrillExtrusion + table.insert( Machining, Drilling) + -- voto + Strategy.Result.sStatus = 'Completed' + Strategy.Result.dCompletionIndex = 5 + Strategy.Result.dMRR = MachiningLib.GetToolMRR( Machining[1].ToolInfo) + Strategy.Result.dQuality = FeatureLib.GetStrategyQuality( EgtIf( Proc.FeatureInfo.bIsDrillOpen, 'ROUGH', 'FINE')) + Strategy.Result.sInfo = '' + -- se utensile 2 esegue completamente + elseif Drilling2.ToolInfo.nToolIndex and Drilling2.ToolInfo.dResidualDepth < 10 * GEO.EPS_SMALL and + ( 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, -1}} + Drilling2.bInvert = true + Drilling2.vtToolDirection = -Proc.FeatureInfo.vtDrillExtrusion + table.insert( Machining, Drilling2) + -- voto + Strategy.Result.sStatus = 'Completed' + Strategy.Result.dCompletionIndex = 5 + Strategy.Result.dMRR = MachiningLib.GetToolMRR( Machining[1].ToolInfo) + Strategy.Result.dQuality = FeatureLib.GetStrategyQuality( EgtIf( Proc.FeatureInfo.bIsDrillOpen, 'ROUGH', 'FINE')) + Strategy.Result.sInfo = '' + -- se possono lavorare entrambi + elseif Drilling.ToolInfo.nToolIndex and Drilling2.ToolInfo.nToolIndex then + Drilling.nToolIndex = Drilling.ToolInfo.nToolIndex + 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, -1}} + Drilling2.bInvert = true + Drilling2.vtToolDirection = -Proc.FeatureInfo.vtDrillExtrusion + Drilling2.sDepth = Proc.FeatureInfo.dDrillLen - Drilling2.ToolInfo.dResidualDepth + table.insert( Machining, Drilling2) + if Drilling.ToolInfo.dResidualDepth + Drilling2.ToolInfo.dResidualDepth < Proc.FeatureInfo.dDrillLen then + Strategy.Result.sStatus = 'Not-Completed' + local dMachinedLen = Machining[1].sDepth + Machining[2].sDepth + local dMachinedPrercentage = 100 * ( dMachinedLen / Proc.FeatureInfo.dDrillLen) + Strategy.Result.dCompletionIndex = FeatureLib.GetFeatureCompletionIndex( dMachinedPrercentage) + Strategy.Result.sInfo = 'Drill not complete, left ' .. tostring( 100 - ceil( dMachinedPrercentage)) .. '%' + else + Strategy.Result.sStatus = 'Completed' + Strategy.Result.dCompletionIndex = 5 + Strategy.Result.sInfo = '' + end + -- voto + Strategy.Result.dMRR = MachiningLib.GetToolMRR( Machining[1].ToolInfo) + Strategy.Result.dQuality = FeatureLib.GetStrategyQuality( 'FINE') + -- 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.nToolIndex = Drilling.ToolInfo.nToolIndex + Drilling.Geometry = {{ Proc.FeatureInfo.idAddAuxGeom, -1}} + Drilling.vtToolDirection = Proc.FeatureInfo.vtDrillExtrusion + Drilling.sDepth = Proc.FeatureInfo.dDrillLen - Drilling.ToolInfo.dResidualDepth + table.insert( Machining, Drilling) + -- voto + Strategy.Result.sStatus = 'Not-Completed' + local dMachinedLen = Machining[1].sDepth + local dMachinedPrercentage = 100 * ( dMachinedLen / Proc.FeatureInfo.dDrillLen) + Strategy.Result.dCompletionIndex = FeatureLib.GetFeatureCompletionIndex( dMachinedPrercentage) + Strategy.Result.sInfo = 'Drill not complete, left ' .. tostring( 100 - ceil( dMachinedPrercentage)) .. '%' + Strategy.Result.dMRR = MachiningLib.GetToolMRR( Machining[1].ToolInfo) + Strategy.Result.dQuality = FeatureLib.GetStrategyQuality( 'FINE') + -- se utensile 2 non completo + 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, -1}} + Drilling2.bInvert = true + Drilling2.vtToolDirection = -Proc.FeatureInfo.vtDrillExtrusion + Drilling2.sDepth = Proc.FeatureInfo.dDrillLen - Drilling2.ToolInfo.dResidualDepth + table.insert( Machining, Drilling2) + -- voto + Strategy.Result.sStatus = 'Not-Completed' + local dMachinedLen = Machining[1].sDepth + local dMachinedPrercentage = 100 * ( dMachinedLen / Proc.FeatureInfo.dDrillLen) + Strategy.Result.dCompletionIndex = FeatureLib.GetFeatureCompletionIndex( dMachinedPrercentage) + Strategy.Result.sInfo = 'Drill not complete, left ' .. tostring( 100 - ceil( dMachinedPrercentage)) .. '%' + Strategy.Result.dMRR = MachiningLib.GetToolMRR( Machining[1].ToolInfo) + Strategy.Result.dQuality = FeatureLib.GetStrategyQuality( 'FINE') + else + local sMessage + -- se non sono state trovate punte + if not Drilling.ToolInfo.nToolIndex and not Drilling2.ToolInfo.nToolIndex then + sMessage = 'Drillbit not found' + -- se son state trovate delle punte, ma non è stato possibile forare da entrambe le parti + elseif Strategy.Parameters.sDrillingMode == 'FORCE_TWO' then + sMessage = "Not possible to force machining from both sides. Please change drilling mode to AUTO" + end + Strategy.Result = FeatureLib.GetStrategyResultNotApplicable( sMessage) + end + return Machining, Strategy.Result end