From 01d4ac1c2730624d9ce11eb9db3afa430468409d Mon Sep 17 00:00:00 2001 From: "luca.mazzoleni" Date: Wed, 15 Oct 2025 15:32:18 +0200 Subject: [PATCH 1/8] =?UTF-8?q?-=20in=20BLADETOWASTE=20si=20fanno=20tagli?= =?UTF-8?q?=20a=20ghigliottina=20anche=20in=20DownUp=20-=20in=20STR0005=20?= =?UTF-8?q?attivati=20di=20default=20tagli=20ridotti=20e=20veloci.=20Andr?= =?UTF-8?q?=C3=A0=20rimesso=20a=20false=20quando=20funzioner=C3=A0=20la=20?= =?UTF-8?q?lettura=20del=20json?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Strategies/Standard/STR0005/STR0005.json | 4 ++-- StrategyLibs/BLADETOWASTE.lua | 19 ++++++++++++++++++- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/Strategies/Standard/STR0005/STR0005.json b/Strategies/Standard/STR0005/STR0005.json index d08cff3..469542a 100644 --- a/Strategies/Standard/STR0005/STR0005.json +++ b/Strategies/Standard/STR0005/STR0005.json @@ -113,7 +113,7 @@ { "sName": "bAllowFastCuts", "sNameNge": "ALLOW_FAST_CUTS", - "sValue": "false", + "sValue": "true", "sDescriptionShort": "Prioritize machining speed over quality", "sDescriptionLong": "", "sType": "b", @@ -123,7 +123,7 @@ { "sName": "bReduceBladePath", "sNameNge": "REDUCE_BLADE_PATH", - "sValue": "false", + "sValue": "true", "sDescriptionShort": "Use entire blade diameter to shorten path", "sDescriptionLong": "", "sType": "b", diff --git a/StrategyLibs/BLADETOWASTE.lua b/StrategyLibs/BLADETOWASTE.lua index a19fa79..5c8b920 100644 --- a/StrategyLibs/BLADETOWASTE.lua +++ b/StrategyLibs/BLADETOWASTE.lua @@ -396,14 +396,31 @@ local function GetSingleCutStrategy( Proc, Part, OptionalParameters) } nToolIndex, sChosenBladeType = GetBestBlade( Proc, Part, FaceToMachine, OptionalParametersGetBestBlade) - -- se possibile, upgrade del taglio tipo 'Top' a taglio a ghigliottina + -- se possibile, upgrade del taglio tipo 'Top' a taglio a ghigliottina. Si tenta anche se il taglio singolo non è riuscito. if ( sChosenBladeType == 'Top' or not nToolIndex) and bReduceBladePath and FaceData.IsFaceRectangular( Proc, FaceToMachine.id) then + local nToolIndexGuillotine + -- ricerca lama migliore testa sopra local ToolInfo = MachiningLib.FindBlade( Proc, { vtN = FaceToMachine.vtN, bAllowTopHead = true, bAllowBottomHead = false }) + nToolIndexGuillotine = ToolInfo.nToolIndex + + -- se non trovato utensile, si prova in DownUp + if not nToolIndexGuillotine then + ToolInfo = MachiningLib.FindBlade( Proc, { + vtN = -FaceToMachine.vtN, + bAllowTopHead = true, + bAllowBottomHead = false}) + end + if ToolInfo.nToolIndex then + local dMinNzDownUp = TOOLS[ToolInfo.nToolIndex].SetupInfo.GetMinNzDownUp( Part.b3Raw, FaceToMachine.vtN, nil, TOOLS[ToolInfo.nToolIndex]) + if FaceToMachine.vtN:getZ() < dMinNzDownUp then + nToolIndexGuillotine = ToolInfo.nToolIndex + end + end -- test fattibilità taglio a ghigliottina if ToolInfo.nToolIndex then From 2d2b492fd066758b589c17794d34ac4b8d2c7029 Mon Sep 17 00:00:00 2001 From: "andrea.villa" Date: Wed, 15 Oct 2025 15:41:24 +0200 Subject: [PATCH 2/8] In STR0002 svuotatura, corretta lettura direzione utensile in lavorazione --- Strategies/Standard/STR0002/STR0002.lua | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/Strategies/Standard/STR0002/STR0002.lua b/Strategies/Standard/STR0002/STR0002.lua index 245ac09..51d18f0 100644 --- a/Strategies/Standard/STR0002/STR0002.lua +++ b/Strategies/Standard/STR0002/STR0002.lua @@ -554,10 +554,8 @@ function STR0002.Make( bAddMachining, Proc, Part, CustomParameters) -- se ho una sola trimesh, sto lavorando la Proc direttamente e non ho spezzato. Applico direttamente alla geometria calcolata prima if #vAddId == 1 then Pocketing.Geometry = {{ Strategy.Machining[j].idProc, Strategy.Machining[j].idFaceToMachine}} - Pocketing.vtToolDirection = Proc.Faces[ Strategy.Machining[j].idFaceToMachine + 1].vtN - if Pocketing.bToolInvert then - Pocketing.vtToolDirection = -Pocketing.vtToolDirection - end + Pocketing.vtToolDirection = Strategy.Machining[j].vtFaceNormal + -- TODO controllare parametro danneggiamento ammesso per decidere se spostare dopo taglio seprazione -- se è aperta sulla coda, dico che deve essere fatta dopo la separazione if Proc.AffectedFaces.bLeft then From f304df4d5b0a6f4d5e3d7f44c9a29a53dbcbd721 Mon Sep 17 00:00:00 2001 From: "luca.mazzoleni" Date: Wed, 15 Oct 2025 16:22:19 +0200 Subject: [PATCH 3/8] - in BLADETOWASTE corretta ghigliottina in DownUp --- StrategyLibs/BLADETOWASTE.lua | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/StrategyLibs/BLADETOWASTE.lua b/StrategyLibs/BLADETOWASTE.lua index 5c8b920..da48cdc 100644 --- a/StrategyLibs/BLADETOWASTE.lua +++ b/StrategyLibs/BLADETOWASTE.lua @@ -414,20 +414,20 @@ local function GetSingleCutStrategy( Proc, Part, OptionalParameters) vtN = -FaceToMachine.vtN, bAllowTopHead = true, bAllowBottomHead = false}) - end - if ToolInfo.nToolIndex then - local dMinNzDownUp = TOOLS[ToolInfo.nToolIndex].SetupInfo.GetMinNzDownUp( Part.b3Raw, FaceToMachine.vtN, nil, TOOLS[ToolInfo.nToolIndex]) - if FaceToMachine.vtN:getZ() < dMinNzDownUp then - nToolIndexGuillotine = ToolInfo.nToolIndex + if ToolInfo.nToolIndex then + local dMinNzDownUp = TOOLS[ToolInfo.nToolIndex].SetupInfo.GetMinNzDownUp( Part.b3Raw, FaceToMachine.vtN, nil, TOOLS[ToolInfo.nToolIndex]) + if FaceToMachine.vtN:getZ() < dMinNzDownUp then + nToolIndexGuillotine = ToolInfo.nToolIndex + end end end -- test fattibilità taglio a ghigliottina - if ToolInfo.nToolIndex then - local dRadialOffset = FaceByBlade.GetRadialOffsetForGuillotine( ToolInfo.nToolIndex, EdgeToMachineList.TopGuillotine.dLength) + if nToolIndexGuillotine then + local dRadialOffset = FaceByBlade.GetRadialOffsetForGuillotine( nToolIndexGuillotine, EdgeToMachineList.TopGuillotine.dLength) - if ( TOOLS[ToolInfo.nToolIndex].dMaxMaterial - EdgeToMachineList.TopGuillotine.dElevation - BeamData.CUT_SIC) > dRadialOffset + 10 * GEO.EPS_SMALL then - nToolIndex = ToolInfo.nToolIndex + if ( TOOLS[nToolIndexGuillotine].dMaxMaterial - EdgeToMachineList.TopGuillotine.dElevation - BeamData.CUT_SIC) > dRadialOffset + 10 * GEO.EPS_SMALL then + nToolIndex = nToolIndexGuillotine sChosenBladeType = 'TopGuillotine' end end From b3bf3177800a769ba0f37ce66a085ad6eb65be75 Mon Sep 17 00:00:00 2001 From: "luca.mazzoleni" Date: Wed, 15 Oct 2025 16:36:32 +0200 Subject: [PATCH 4/8] - in BLADETOWASTE piccola correzione --- StrategyLibs/BLADETOWASTE.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/StrategyLibs/BLADETOWASTE.lua b/StrategyLibs/BLADETOWASTE.lua index da48cdc..1b86485 100644 --- a/StrategyLibs/BLADETOWASTE.lua +++ b/StrategyLibs/BLADETOWASTE.lua @@ -415,7 +415,7 @@ local function GetSingleCutStrategy( Proc, Part, OptionalParameters) bAllowTopHead = true, bAllowBottomHead = false}) if ToolInfo.nToolIndex then - local dMinNzDownUp = TOOLS[ToolInfo.nToolIndex].SetupInfo.GetMinNzDownUp( Part.b3Raw, FaceToMachine.vtN, nil, TOOLS[ToolInfo.nToolIndex]) + local dMinNzDownUp = TOOLS[ToolInfo.nToolIndex].SetupInfo.GetMinNzDownUp( Part.b3Raw, FaceToMachine.vtN, EdgeToMachineList.TopGuillotine.vtN, TOOLS[ToolInfo.nToolIndex]) if FaceToMachine.vtN:getZ() < dMinNzDownUp then nToolIndexGuillotine = ToolInfo.nToolIndex end From 58a98231ad4f80e4b5e19a5561bf2c008518d51e Mon Sep 17 00:00:00 2001 From: "luca.mazzoleni" Date: Wed, 15 Oct 2025 17:45:49 +0200 Subject: [PATCH 5/8] - a FeatureLib.NeedTopologyFeature si passa anche il Part - aggiunta gestione SawCut 1 faccia, troncante --- BatchProcessNew.lua | 2 +- LuaLibs/BeamExec.lua | 2 +- LuaLibs/FeatureLib.lua | 34 ++++++++++++++------------- Strategies/AvailableStrategyList.json | 2 +- 4 files changed, 21 insertions(+), 19 deletions(-) diff --git a/BatchProcessNew.lua b/BatchProcessNew.lua index 98d3976..45b5c4b 100644 --- a/BatchProcessNew.lua +++ b/BatchProcessNew.lua @@ -239,7 +239,7 @@ elseif BEAM.FLAG == 9 then Proc.nPrc = EgtGetInfo( Proc.id, 'PRC', 'i') Proc.Topology = {} - if FeatureLib.NeedTopologyFeature( Proc) then + if FeatureLib.NeedTopologyFeature( Proc, Part) then Proc.Topology = FeatureLib.ClassifyTopology( Proc, Part) else Proc = FeatureLib.GetAdditionalInfo( Proc, Part) diff --git a/LuaLibs/BeamExec.lua b/LuaLibs/BeamExec.lua index 88e3414..5bb8f3c 100644 --- a/LuaLibs/BeamExec.lua +++ b/LuaLibs/BeamExec.lua @@ -647,7 +647,7 @@ local function CollectFeatures( Part, dRotIndex) Proc.AffectedFaces = BeamLib.GetAffectedFaces( Proc, Part) -- calcolo topologia solo se necessario, altrimenti si sfruttano le informazioni della feature BTL local bIsFeatureReadyForProcessing = false - if FeatureLib.NeedTopologyFeature( Proc) then + if FeatureLib.NeedTopologyFeature( Proc, Part) then Proc.AdjacencyMatrix = FaceData.GetAdjacencyMatrix( Proc) Proc.Faces = FaceData.GetFacesInfo( Proc, Part) Proc.Topology = FeatureLib.ClassifyTopology( Proc, Part) diff --git a/LuaLibs/FeatureLib.lua b/LuaLibs/FeatureLib.lua index 178cb25..fcda380 100644 --- a/LuaLibs/FeatureLib.lua +++ b/LuaLibs/FeatureLib.lua @@ -37,9 +37,22 @@ function FeatureLib.GetProcFromTrimesh( idTrimesh, Part, ProcToCopyFrom) return Proc end +------------------------------------------------------------------------------------------------------------- +-- restituisce vero se la feature con box b3Proc taglia l'intera sezione della barra +local function IsFeatureCuttingEntireSection( b3Proc, Part) + return ( b3Proc:getDimY() > ( Part.b3Part:getDimY() - 500 * GEO.EPS_SMALL) and b3Proc:getDimZ() > ( Part.b3Part:getDimZ() - 500 * GEO.EPS_SMALL)) +end + +------------------------------------------------------------------------------------------------------------- +-- restituisce vero se la feature con box b3Proc taglia l'intera lunghezza della barra +local function IsFeatureCuttingEntireLength( b3Proc, Part) + return ( ( b3Proc:getDimY() > ( Part.b3Part:getDimY() - 500 * GEO.EPS_SMALL) and b3Proc:getDimX() > ( Part.b3Part:getDimX() - 500 * GEO.EPS_SMALL)) or + ( b3Proc:getDimZ() > ( Part.b3Part:getDimZ() - 500 * GEO.EPS_SMALL) and b3Proc:getDimX() > ( Part.b3Part:getDimX() - 500 * GEO.EPS_SMALL))) +end + --------------------------------------------------------------------- -- recupero topologia della feature -function FeatureLib.NeedTopologyFeature( Proc) +function FeatureLib.NeedTopologyFeature( Proc, Part) -- feature Egalware con calcolo topologia SEMPRE da geometria if ID.IsHeadCut( Proc) then -- (1-340) return true @@ -54,8 +67,6 @@ function FeatureLib.NeedTopologyFeature( Proc) return true elseif ID.IsDoubleLongitudinalCut( Proc) then -- (0-12) return true - elseif ID.IsSawCut( Proc) then -- (0-13) - return true elseif ID.IsSlot( Proc) then -- (1-16) return true elseif ID.IsFrontSlot( Proc) then -- (1-17) @@ -79,6 +90,10 @@ function FeatureLib.NeedTopologyFeature( Proc) elseif ID.IsStepJointNotch( Proc) then -- (0-80) return true -- feature con calcolo topologia da geometria SOLO se rispettano certe condizioni, altrimenti riconoscimento specifico + elseif ID.IsSawCut( Proc) and Proc.nFct == 1 + and ( IsFeatureCuttingEntireSection( Proc.b3Box, Part) + or IsFeatureCuttingEntireLength( Proc.b3Box, Part)) then -- (0-13) + return true elseif ID.IsHipValleyRafterNotch( Proc) and Proc.nFct < 4 then -- (0-25) return true elseif ID.IsRidgeLap( Proc) and Proc.nFct ~= 3 then -- (1-30) @@ -139,19 +154,6 @@ local function IsAnyDimensionLongAsPart( Proc, Part) return bResult end -------------------------------------------------------------------------------------------------------------- --- restituisce vero se la feature con box b3Proc taglia l'intera sezione della barra -local function IsFeatureCuttingEntireSection( b3Proc, Part) - return ( b3Proc:getDimY() > ( Part.b3Part:getDimY() - 500 * GEO.EPS_SMALL) and b3Proc:getDimZ() > ( Part.b3Part:getDimZ() - 500 * GEO.EPS_SMALL)) -end - -------------------------------------------------------------------------------------------------------------- --- restituisce vero se la feature con box b3Proc taglia l'intera lunghezza della barra -local function IsFeatureCuttingEntireLength( b3Proc, Part) - return ( ( b3Proc:getDimY() > ( Part.b3Part:getDimY() - 500 * GEO.EPS_SMALL) and b3Proc:getDimX() > ( Part.b3Part:getDimX() - 500 * GEO.EPS_SMALL)) or - ( b3Proc:getDimZ() > ( Part.b3Part:getDimZ() - 500 * GEO.EPS_SMALL) and b3Proc:getDimX() > ( Part.b3Part:getDimX() - 500 * GEO.EPS_SMALL))) -end - --------------------------------------------------------------------- -- restituisce una stringa con il nome esteso della topologia della feature -- *famiglia - numero di facce - passante* diff --git a/Strategies/AvailableStrategyList.json b/Strategies/AvailableStrategyList.json index 885806c..e549f76 100644 --- a/Strategies/AvailableStrategyList.json +++ b/Strategies/AvailableStrategyList.json @@ -46,7 +46,7 @@ "nGrp": 0, "TopologyList" : [ { "sName": "Feature", - "StrategyList" : [ ] + "StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0005" }, { "sStrategyId": "STR0010" } ] } ] }, From 232a112036cb5ecc159aef8a115770e99dedfca9 Mon Sep 17 00:00:00 2001 From: "luca.mazzoleni" Date: Wed, 15 Oct 2025 18:46:53 +0200 Subject: [PATCH 6/8] - in FeatureLib.GetFeatureSplittingPoints messa una pezza nel caso di pezzi corti (i punti uscivano dal pezzo). Da sistemare --- LuaLibs/FeatureLib.lua | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/LuaLibs/FeatureLib.lua b/LuaLibs/FeatureLib.lua index fcda380..e4fef6c 100644 --- a/LuaLibs/FeatureLib.lua +++ b/LuaLibs/FeatureLib.lua @@ -844,6 +844,15 @@ function FeatureLib.GetFeatureSplittingPoints( Proc, Part, OptionalParameters) table.insert( FeatureSplittingPoints, ptSplitXLeft) end + -- TODO RIMUOVERE E SISTEMARE LA FUNZIONE!! + -- se il punto finisce fuori si mette in mezzeria + if #FeatureSplittingPoints == 1 + and ( ( FeatureSplittingPoints[1]:getX() < Part.b3Part:getMin():getX() + 10 * GEO.EPS_SMALL) + or ( FeatureSplittingPoints[1]:getX() > Part.b3Part:getMax():getX() - 10 * GEO.EPS_SMALL)) then + + FeatureSplittingPoints[1] = Point3d( Part.b3Part:getMin():getX() + ( Part.b3Part:getMax():getX() - Part.b3Part:getMin():getX()) / 2, 0, 0) + end + return FeatureSplittingPoints end From d7fac47297b381eafd736aad7079ab126288fc49 Mon Sep 17 00:00:00 2001 From: "andrea.villa" Date: Thu, 16 Oct 2025 16:08:12 +0200 Subject: [PATCH 7/8] =?UTF-8?q?Piccola=20modifica=20al=20log=20con=20scrit?= =?UTF-8?q?tura=20del=20rating=20con=201=20decimale.=20Il=20rating=20non?= =?UTF-8?q?=20=C3=A8=20pi=C3=B9=20un=20intero?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- LuaLibs/Logs.lua | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/LuaLibs/Logs.lua b/LuaLibs/Logs.lua index d62b07a..841f361 100644 --- a/LuaLibs/Logs.lua +++ b/LuaLibs/Logs.lua @@ -79,8 +79,8 @@ function Logs.WriteFeaturesLog( ProcessingsOnPart, PartInfo) end -- se c'è una chosen strategy, si aggiunge prefisso '*' per indicare nel log qual è la strategia che è stata scelta local nIndexBestStrategy = ProcessingsOnPart.Rotation[nRotLog][ProcLog].nIndexBestStrategy or 0 - local sLogLineProc = EgtIf( nIndexBestStrategy == nCountStrategies, '*', '') .. - tostring( ProcessingsOnPart.Rotation[nRotLog][ProcLog].AvailableStrategies[nCountStrategies].Result.dCompositeRating) ..' (' .. + local dRating = EgtNumToString( ProcessingsOnPart.Rotation[nRotLog][ProcLog].AvailableStrategies[nCountStrategies].Result.dCompositeRating, -1) + local sLogLineProc = EgtIf( nIndexBestStrategy == nCountStrategies, '*', '') .. dRating ..' (' .. tostring( ProcessingsOnPart.Rotation[nRotLog][ProcLog].AvailableStrategies[nCountStrategies].sStrategyId) .. ')' .. sStatusStrategy .. ' |' while string.len( sLogLineProc) <= 20 do @@ -138,8 +138,8 @@ function Logs.WriteMatrixLog( ProcessingsOnPart, PartInfo) if PartInfo.CombinationList.Rotations[nRotLog] == 1 then if ProcessingsOnPart.Rotation[nRotLog][ProcLog].ChosenStrategy then local sStatusStrategy = EgtIf( ProcessingsOnPart.Rotation[nRotLog][ProcLog].ChosenStrategy.Result.sStatus == 'Completed', 'C', 'P') - local sLogLineProc = tostring( ProcessingsOnPart.Rotation[nRotLog][ProcLog].ChosenStrategy.Result.dCompositeRating) .. - ' (' .. tostring( ProcessingsOnPart.Rotation[nRotLog][ProcLog].ChosenStrategy.sStrategyId) .. ')' .. sStatusStrategy .. ' |' + local dRating = EgtNumToString( ProcessingsOnPart.Rotation[nRotLog][ProcLog].ChosenStrategy.Result.dCompositeRating, -1) + local sLogLineProc = dRating .. ' (' .. tostring( ProcessingsOnPart.Rotation[nRotLog][ProcLog].ChosenStrategy.sStrategyId) .. ')' .. sStatusStrategy .. ' |' while string.len( sLogLineProc) <= 20 do sLogLineProc = ' ' .. sLogLineProc end @@ -159,15 +159,15 @@ end ------------------------------------------------------------------------------------------------------------- function Logs.WriteCombinationLog( CombinationsList, BestCombination) EgtOutLog( ' === === === === === === === === === === COMBINATIONS === === === === === === ') - EgtOutLog( ' COMBI (UNL) | RATING | COMPLETE | NO COMPL | NO EXEC | ROTATE |') + EgtOutLog( ' COMBI (UNL) POS | RATING | COMPLETE | NO COMPL | NO EXEC | ROTATE |') EgtOutLog( '------------------------------------------------------------------------------') for CombiLog = 1, #CombinationsList do local sPartPosition = EgtIf( CombinationsList[CombiLog].bPartInCombiIsInverted, 'INV', 'ORI') - local sLogLine = ' ' .. CombinationsList[CombiLog].sBitIndexCombination .. ' (' .. CombinationsList[CombiLog].nUnloadPos .. ') ' .. sPartPosition .. ' |' + local sLogLine = ' ' .. CombinationsList[CombiLog].sBitIndexCombination .. ' (' .. CombinationsList[CombiLog].nUnloadPos .. ') ' .. sPartPosition .. ' |' -- rating - local sOtherField = tostring( CombinationsList[CombiLog].dTotalRating) .. ' |' - while string.len( sOtherField) <= 11 do + local sOtherField = EgtNumToString( CombinationsList[CombiLog].dTotalRating, - 3) .. ' |' + while string.len( sOtherField) <= 15 do sOtherField = ' ' .. sOtherField end sLogLine = sLogLine .. sOtherField From c0cab77689f37f0805aab40e8f7344275c7429f8 Mon Sep 17 00:00:00 2001 From: "luca.mazzoleni" Date: Thu, 16 Oct 2025 18:56:55 +0200 Subject: [PATCH 8/8] - in BLADETOWASTE peggioramento tempo cubetti portato a 2 --- StrategyLibs/BLADETOWASTE.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/StrategyLibs/BLADETOWASTE.lua b/StrategyLibs/BLADETOWASTE.lua index 1b86485..7818ef4 100644 --- a/StrategyLibs/BLADETOWASTE.lua +++ b/StrategyLibs/BLADETOWASTE.lua @@ -907,7 +907,7 @@ local function CutWithDicing( Proc, Part, OptionalParameters) Result.dCompletionPercentage = 100 Result.dQuality = FeatureLib.GetStrategyQuality( TOOLS[nToolIndex].sFamily) Result.dTimeToMachineOriginal = FeatureLib.GetStrategyTimeToMachine( Machinings) - Result.dTimeToMachine = Result.dTimeToMachineOriginal * 1.3 + Result.dTimeToMachine = Result.dTimeToMachineOriginal * 2 Result.dMRR = ( FeatureInfo.dFeatureVolume / Result.dTimeToMachine) / pow( 10, 6) else Result = FeatureLib.GetStrategyResultNotApplicable()