From 51dec026ec172c60b7d573bbe852a75605449b8f Mon Sep 17 00:00:00 2001 From: "andrea.villa" Date: Fri, 5 Sep 2025 13:14:50 +0200 Subject: [PATCH] - Completato strategia STR0014 - Migliorata gestione pezzo invertito - Corretto problema scelta combinazione migliore - In STR0001 corretto nome variabile - In STR0011 (foro) cambiato messaggio warning in caso di lavorazione non completa - In BLADETOWASTE se taglio troncante, si setta da fare dopo taglio coda --- LuaLibs/BasicCustomerStrategies.lua | 3 ++ LuaLibs/BeamExec.lua | 54 ++++++++++--------- LuaLibs/BeamLib.lua | 6 +++ LuaLibs/FeatureLib.lua | 70 +++++++++++++++++-------- LuaLibs/Logs.lua | 4 +- LuaLibs/MachiningLib.lua | 4 +- Strategies/AvailableStrategyList.json | 16 +++++- Strategies/Standard/STR0001/STR0001.lua | 4 +- Strategies/Standard/STR0002/STR0002.lua | 7 ++- Strategies/Standard/STR0011/STR0011.lua | 8 +-- StrategyLibs/BLADETOWASTE.lua | 10 ++-- 11 files changed, 123 insertions(+), 63 deletions(-) diff --git a/LuaLibs/BasicCustomerStrategies.lua b/LuaLibs/BasicCustomerStrategies.lua index fe63b71..f925874 100644 --- a/LuaLibs/BasicCustomerStrategies.lua +++ b/LuaLibs/BasicCustomerStrategies.lua @@ -638,6 +638,9 @@ function BasicCustomerStrategies.GetToolsFromMachiningDataFile( Proc, sToolType) ToolList = GetTools_Essetre( Proc, sToolType) -- l'ordine di come le lavorazioni sono state in lista deve essere rispettato ToolList.bRespectListOrder = true + -- per tutti gli altri si considerano tutti gli utensili a disposizione + else + ToolList = nil end return ToolList diff --git a/LuaLibs/BeamExec.lua b/LuaLibs/BeamExec.lua index c88987c..59c7c58 100644 --- a/LuaLibs/BeamExec.lua +++ b/LuaLibs/BeamExec.lua @@ -304,7 +304,7 @@ function BeamExec.GetAvailableCombinations( PartInfo, bCalcBestPieceUnloadPositi table.insert( CombinationList, Combination) if nInvertIndex == 2 then - Combination.bPartIsInverted = true + Combination.bPartInCombiIsInverted = true end -- se posizionamento iniziale attivo @@ -561,11 +561,11 @@ local function GetFeatureForcedStrategy( Proc) end ------------------------------------------------------------------------------------------------------------- -local function AdjustPrcGrp( Proc, bPartIsInverted) +local function AdjustPrcGrp( Proc, bPartInCombiIsInverted) local nNewPrc = { nPrc = Proc.nPrc, nGrp = Proc.nGrp} -- se pezzo invertito - if bPartIsInverted then + if bPartInCombiIsInverted then -- il taglio di testa diventa taglio di coda if ID.IsHeadCut( Proc) then _, nNewPrc.nPrc, nNewPrc.nGrp = ID.IsTailCut( Proc) @@ -1269,21 +1269,23 @@ local function GetBestCombination( ListToCompare) -- si sceglie soluzione con più feature complete if ListToCompare[ListIndex].nComplete > ListToCompare[nIndexBestCombination].nComplete then nIndexBestCombination = ListIndex - -- se stesso voto - elseif ListToCompare[nIndexBestCombination].dTotalRating == ListToCompare[ListIndex].dTotalRating then - -- TODO il voto dovrebbe essere considerato già pesando le rotazioni, con un coefficiente o un peso fisso aggiuntivo - -- scelgo soluzione con meno rotazioni - if ListToCompare[nIndexBestCombination].nRotations > ListToCompare[ListIndex].nRotations then - nIndexBestCombination = ListIndex - -- se anche le rotazioni sono le stesse, prendo la soluzione con più lavorazioni alla fine - elseif #ListToCompare[nIndexBestCombination].Rot0 < #ListToCompare[ListIndex].Rot0 then - nIndexBestCombination = ListIndex - end - -- se voto diverso - else - -- scelgo soluzione con voto più alto - if ListToCompare[nIndexBestCombination].dTotalRating < ListToCompare[ListIndex].dTotalRating then - nIndexBestCombination = ListIndex + elseif ListToCompare[ListIndex].nComplete == ListToCompare[nIndexBestCombination].nComplete then + -- se stesso voto + if ListToCompare[nIndexBestCombination].dTotalRating == ListToCompare[ListIndex].dTotalRating then + -- TODO il voto dovrebbe essere considerato già pesando le rotazioni, con un coefficiente o un peso fisso aggiuntivo + -- scelgo soluzione con meno rotazioni + if ListToCompare[nIndexBestCombination].nRotations > ListToCompare[ListIndex].nRotations then + nIndexBestCombination = ListIndex + -- se anche le rotazioni sono le stesse, prendo la soluzione con più lavorazioni alla fine + elseif #ListToCompare[nIndexBestCombination].Rot0 < #ListToCompare[ListIndex].Rot0 then + nIndexBestCombination = ListIndex + end + -- se voto diverso + else + -- scelgo soluzione con voto più alto + if ListToCompare[nIndexBestCombination].dTotalRating < ListToCompare[ListIndex].dTotalRating then + nIndexBestCombination = ListIndex + end end end end @@ -1391,7 +1393,7 @@ local function GetCombinationListFromMatrix( ProcessingsOnPart, PartInfo) SingleCombination.nNotExecute = 0 SingleCombination.sBitIndexCombination = PartInfo.CombinationList[i].sBitIndexCombination -- TODO se pezzo invertito bisogna considerare le rotazioni nell'array dalla 5 alla 8 - SingleCombination.bPartIsInverted = PartInfo.CombinationList[i].bPartIsInverted + SingleCombination.bPartInCombiIsInverted = PartInfo.CombinationList[i].bPartInCombiIsInverted SingleCombination.nUnloadPos = nUnloadPos -- creo liste dei proc suddivisi per rotazione SingleCombination.Rot0 = {} @@ -1411,7 +1413,7 @@ local function GetCombinationListFromMatrix( ProcessingsOnPart, PartInfo) else -- ciclo sulle rotazioni local nNextRot = nUnloadPos - local nOffsetIndex = EgtIf( SingleCombination.bPartIsInverted, 4, 0) + local nOffsetIndex = EgtIf( SingleCombination.bPartInCombiIsInverted, 4, 0) local ResultsList = {} for nRotation = 1, 3 do -- se rotazione abilitata da combinazione @@ -1553,7 +1555,7 @@ function BeamExec.ProcessMachinings( PARTS) -- scelta delal migliore combinazione local BestCombination = GetBestCombination( CombinationListFromMatrix) PARTS[nPart].ChosenCombination = BestCombination.sBitIndexCombination - PARTS[nPart].bPartIsInverted = BestCombination.bPartIsInverted + PARTS[nPart].bPartInCombiIsInverted = BestCombination.bPartInCombiIsInverted -- scrittura nel log delle combinazioni possibili if EgtGetDebugLevel() >= 3 then @@ -1581,7 +1583,7 @@ function BeamExec.ProcessMachinings( PARTS) end -- se combinazione prevede inversione, si gira il pezzo - if PARTS[nPart].bPartIsInverted then + if PARTS[nPart].bPartInCombiIsInverted then BeamLib.InvertRawPart( PARTS[nPart], 2) end @@ -1590,7 +1592,7 @@ function BeamExec.ProcessMachinings( PARTS) PrintFeatures( vProc, PARTS[nPart]) end EgtOutLog( ' *** AddMachinings ***', 1) - + -- se la posizione iniziale non è calcolata, significa che non ci sono feature da eseguire. Solo taglio testa/coda if not MatrixResult.nInitialPosition then MatrixResult.nInitialPosition = 1 @@ -1617,7 +1619,7 @@ function BeamExec.ProcessMachinings( PARTS) -- salvo sul PART la posizione di partenza che è stata scelta PARTS[nPart].nInitialPosition = MatrixResult.nInitialPosition - local nOffsetIndex = EgtIf( PARTS[nPart].bPartIsInverted, 4, 0) + local nOffsetIndex = EgtIf( PARTS[nPart].bPartInCombiIsInverted, 4, 0) -- aggiunge tagli testa e coda in fasi opportune local nRotHeadCut = MatrixResult.nInitialPosition + MACHININGS.Info.nHeadCutRotation - 1 if nRotHeadCut > 4 then @@ -1721,7 +1723,7 @@ function BeamExec.ProcessMachinings( PARTS) EgtSetInfo( idDisp, 'TYPE', 'MID') end -- se combinazione prevede inversione, si gira il pezzo - if PARTS[nPart].bPartIsInverted then + if PARTS[nPart].bPartInCombiIsInverted and not PARTS[nPart].bIsInverted then BeamLib.InvertRawPart( PARTS[nPart], 2) end end @@ -1746,7 +1748,7 @@ function BeamExec.ProcessMachinings( PARTS) EgtSetInfo( idDisp, 'TYPE', 'MID') end -- se combinazione prevede inversione, si gira il pezzo - if PARTS[nPart].bPartIsInverted then + if PARTS[nPart].bPartInCombiIsInverted and not PARTS[nPart].bIsInverted then BeamLib.InvertRawPart( PARTS[nPart], 2) end end diff --git a/LuaLibs/BeamLib.lua b/LuaLibs/BeamLib.lua index c7897a5..0957578 100644 --- a/LuaLibs/BeamLib.lua +++ b/LuaLibs/BeamLib.lua @@ -209,6 +209,12 @@ function BeamLib.InvertRawPart( Part, nNumberOfRotations) local vtEccRot = Vector3d( vtEccOri) vtEccRot:rotate( Z_AX(), dAngRot) EgtMovePartInRawPart( Part.id, ( vtEccOri - vtEccRot)) + -- si salva posizione corrente + if Part.bIsInverted then + Part.bIsInverted = false + else + Part.bIsInverted = true + end end ------------------------------------------------------------------------------------------------------------- diff --git a/LuaLibs/FeatureLib.lua b/LuaLibs/FeatureLib.lua index e5ad1ff..084faa0 100644 --- a/LuaLibs/FeatureLib.lua +++ b/LuaLibs/FeatureLib.lua @@ -40,25 +40,22 @@ end --------------------------------------------------------------------- -- recupero topologia della feature function FeatureLib.NeedTopologyFeature( Proc) - -- features tipo taglio - if ID.IsCut( Proc) then -- (1-10) - return true - elseif ID.IsHeadCut( Proc) then -- (1-340) + -- feature Egalware con calcolo topologia SEMPRE da geometria + if ID.IsHeadCut( Proc) then -- (1-340) return true elseif ID.IsTailCut( Proc) then -- (2-350) return true - elseif ID.IsDoubleCut( Proc) then -- (1-11) + -- feature BTL con calcolo topologia SEMPRE da geometria + elseif ID.IsCut( Proc) then -- (1-10) return true - elseif ID.IsSawCut( Proc) then -- (0-13) - return true - -- features tipo taglio longitudinale elseif ID.IsLongitudinalCut( Proc) then -- (0-10) return true + elseif ID.IsDoubleCut( Proc) then -- (1-11) + return true elseif ID.IsDoubleLongitudinalCut( Proc) then -- (0-12) return true - elseif ID.IsChamfer( Proc) then -- (0-36) + elseif ID.IsSawCut( Proc) then -- (0-13) return true - -- features tipo LapJoint elseif ID.IsSlot( Proc) then -- (1-16) return true elseif ID.IsFrontSlot( Proc) then -- (1-17) @@ -69,24 +66,27 @@ function FeatureLib.NeedTopologyFeature( Proc) return true elseif ID.IsNotchRabbet( Proc) then -- (1-32) return true - elseif ID.IsNotch( Proc) then -- (1-34) - return true - elseif ID.IsPocket( Proc) then -- (1-39) - return true - -- calcolo topologia da geometria SOLO se non raggiata - elseif ID.IsMortise( Proc) and Proc.nFct < 6 then -- (1-50) - return true - -- calcolo topologia da geometria SOLO se non raggiata - elseif ID.IsFrontMortise( Proc) and Proc.nFct < 6 then -- (1-51) - return true elseif ID.IsBlockHaus( Proc) then -- (1-33) return true - elseif ID.IsRidgeLap( Proc) and Proc.nFct ~= 3 then -- (1-30) + elseif ID.IsNotch( Proc) then -- (1-34) + return true + elseif ID.IsChamfer( Proc) then -- (0-36) + return true + elseif ID.IsPocket( Proc) then -- (1-39) return true elseif ID.IsStepJoint( Proc) then -- (1-80) return true 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.IsHipValleyRafterNotch( Proc) and Proc.nFct < 4 then -- (0-25) + return true + elseif ID.IsRidgeLap( Proc) and Proc.nFct ~= 3 then -- (1-30) + return true + elseif ID.IsMortise( Proc) and Proc.nFct < 6 then -- (1-50) + return true + elseif ID.IsFrontMortise( Proc) and Proc.nFct < 6 then -- (1-51) + return true end -- se feature non tra quelle sopra, riconoscimento topologico non necessario @@ -255,6 +255,8 @@ function FeatureLib.GetTopologyFromFeature( Proc, Part) end elseif ID.IsRidgeLap( Proc) then Topology.sName = 'RidgeLap-3-Through' + elseif ID.IsHipValleyRafterNotch( Proc) then + Topology.sName = 'RafterNotch-' .. tostring( Proc.nFct) .. '-Through' else Topology.sName = 'Feature' end @@ -281,6 +283,10 @@ function FeatureLib.GetAdditionalInfo( Proc, Part) Proc.Faces = FaceData.GetFacesInfo( Proc, Part) elseif ID.IsMarking( Proc) then Proc.FeatureInfo = FeatureLib.GetMarkTextData( Proc) + elseif ID.IsHipValleyRafterNotch( Proc) then + Proc.AdjacencyMatrix = FaceData.GetAdjacencyMatrix( Proc) + Proc.Faces = FaceData.GetFacesInfo( Proc, Part) + Proc.FeatureInfo, Proc.MainFaces = FeatureLib.GetRafterNotchData( Proc) end return Proc @@ -314,6 +320,28 @@ function FeatureLib.GetDrillingData( Proc) return FeatureExtraInfo end +------------------------------------------------------------------------------------------------------------- +-- Recupero dati tenone e tenone a coda di rondine +function FeatureLib.GetRafterNotchData( Proc) + local FeatureExtraInfo = {} + local MainFaces = {} + + local FacesByAdjacencyNumber = FaceData.GetFacesByAdjacencyNumber( Proc) + if FacesByAdjacencyNumber then + -- si prende sempre quella con più adiacenze + MainFaces.BottomFaces = FacesByAdjacencyNumber[ Proc.nFct - 1] + MainFaces.BottomFaces[1].vtN = Proc.Faces[MainFaces.BottomFaces[1].id+1].vtN + MainFaces.BottomFaces[1].dElevation= Proc.Faces[MainFaces.BottomFaces[1].id+1].dElevation + FeatureExtraInfo.dFaceLength = 9999 + -- si cerca lato aperto più corto + for i = 1, #MainFaces.BottomFaces[1].Edges do + if MainFaces.BottomFaces[1].Edges[i].bIsOpen then + FeatureExtraInfo.dFaceLength = min ( FeatureExtraInfo.dFaceLength, MainFaces.BottomFaces[1].Edges[i].dLength) + end + end + end + return FeatureExtraInfo, MainFaces +end ------------------------------------------------------------------------------------------------------------- -- Recupero dati tenone e tenone a coda di rondine function FeatureLib.GetMarkTextData( Proc) diff --git a/LuaLibs/Logs.lua b/LuaLibs/Logs.lua index c142c12..d62b07a 100644 --- a/LuaLibs/Logs.lua +++ b/LuaLibs/Logs.lua @@ -163,7 +163,7 @@ function Logs.WriteCombinationLog( CombinationsList, BestCombination) EgtOutLog( '------------------------------------------------------------------------------') for CombiLog = 1, #CombinationsList do - local sPartPosition = EgtIf( CombinationsList[CombiLog].bPartIsInverted, 'INV', 'ORI') + local sPartPosition = EgtIf( CombinationsList[CombiLog].bPartInCombiIsInverted, 'INV', 'ORI') local sLogLine = ' ' .. CombinationsList[CombiLog].sBitIndexCombination .. ' (' .. CombinationsList[CombiLog].nUnloadPos .. ') ' .. sPartPosition .. ' |' -- rating local sOtherField = tostring( CombinationsList[CombiLog].dTotalRating) .. ' |' @@ -198,7 +198,7 @@ function Logs.WriteCombinationLog( CombinationsList, BestCombination) EgtOutLog( sLogLine) end - local sPartPosition = EgtIf( BestCombination.bPartIsInverted, 'INV', 'ORI') + local sPartPosition = EgtIf( BestCombination.bPartInCombiIsInverted, 'INV', 'ORI') EgtOutLog( '------------------------------------------------------------------------------') EgtOutLog( ' BEST ROTATION : ' .. BestCombination.sBitIndexCombination .. ' (' .. BestCombination.nUnloadPos .. ') ' .. sPartPosition) EgtOutLog( '---------------------------') diff --git a/LuaLibs/MachiningLib.lua b/LuaLibs/MachiningLib.lua index 8fb78ee..dec5c30 100644 --- a/LuaLibs/MachiningLib.lua +++ b/LuaLibs/MachiningLib.lua @@ -684,7 +684,7 @@ function MachiningLib.GetAvailableToolList( Proc, sToolList, sType) ToolList = BCS.GetToolsFromMachiningDataFile( Proc, sType) -- se arriva da JSON o NGE else - if #sToolList > 0 then + if sToolList and #sToolList > 0 then local List = EgtSplitString( sToolList) for i = 1, #List do table.insert( ToolList, { sName = List[i]}) @@ -1130,7 +1130,7 @@ function MachiningLib.AddOperations( vProc, Part, sRotation) MACHININGS.Info.bSplitPhase = EgtGetCurrPhase() -- se combinazione prevede inversione, si gira il pezzo - if Part.bPartIsInverted then + if Part.bPartInCombiIsInverted and not Part.bIsInverted then BeamLib.InvertRawPart( Part, 2) end diff --git a/Strategies/AvailableStrategyList.json b/Strategies/AvailableStrategyList.json index 1d3d30e..ee88e4f 100644 --- a/Strategies/AvailableStrategyList.json +++ b/Strategies/AvailableStrategyList.json @@ -121,8 +121,20 @@ "nPrc": 25, "nGrp": 0, "TopologyList" : [ - { "sName": "Feature", - "StrategyList" : [ ] + { "sName": "RafterNotch-5-Through", + "StrategyList" : [ { "sStrategyId": "STR0002" } ] + }, + { "sName": "Groove-3-Through", + "StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0003" }, { "sStrategyId": "STR0004" } ] + }, + { "sName": "Groove-3-Blind", + "StrategyList" : [ { "sStrategyId": "STR0002" } ] + }, + { "sName": "Bevel-3-Blind", + "StrategyList" : [ { "sStrategyId": "STR0002" } ] + }, + { "sName": "Rabbet-2-Through", + "StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0010"} ] } ] }, diff --git a/Strategies/Standard/STR0001/STR0001.lua b/Strategies/Standard/STR0001/STR0001.lua index 39c7e61..619fc6e 100644 --- a/Strategies/Standard/STR0001/STR0001.lua +++ b/Strategies/Standard/STR0001/STR0001.lua @@ -357,8 +357,8 @@ function STR0001.Make( bAddMachining, Proc, Part, CustomParameters) -- si controllano le ultime 5 facce della feature local nIndFace = -1 for i = 1, 5 do - if abs( Proc.FeatureInfo.vtTenonN * EgtSurfTmFacetNormVersor( Proc.Id, Proc.Fct-i, GDB_ID.ROOT)) < GEO.EPS_ANG_SMALL then - nIndFace = Proc.Fct-i + if abs( Proc.FeatureInfo.vtTenonN * EgtSurfTmFacetNormVersor( Proc.id, Proc.nFct-i, GDB_ID.ROOT)) < GEO.EPS_ANG_SMALL then + nIndFace = Proc.nFct-i end end -- controllo se serve passaggio di finitura in caso il tenone non cominci dal bordo della trave (P14 > 0) diff --git a/Strategies/Standard/STR0002/STR0002.lua b/Strategies/Standard/STR0002/STR0002.lua index 3f459ef..81bd3a5 100644 --- a/Strategies/Standard/STR0002/STR0002.lua +++ b/Strategies/Standard/STR0002/STR0002.lua @@ -27,6 +27,7 @@ local Strategy = {} ------------------------------------------------------------------------------------------------------------- local function IsTopologyOk( Proc) if Proc.Topology.sName == 'Pocket-5-Blind' or + Proc.Topology.sName == 'RafterNotch-5-Through' or Proc.Topology.sName == 'Tunnel-4-Through' or Proc.Topology.sName == 'Groove-4-Blind' or Proc.Topology.sName == 'Groove-3-Through' or @@ -115,6 +116,9 @@ local function GetBestPocketingStrategy( Proc) local dFaceWidth = Proc.MainFaces.LongFaces[1].MainEdges.OppositeEdges[1].dLength ToolSearchParameters.sType = 'MILL_STD' ToolSearchParameters.dMaxToolDiameter = min( Strategy.Parameters.dMaxCornerRadius * 2, dFaceHeight, dFaceWidth) + elseif Proc.Topology.sName == 'RafterNotch-5-Through' then + ToolSearchParameters.sType = 'MILL_STD' + ToolSearchParameters.dMaxToolDiameter = min( Strategy.Parameters.dMaxCornerRadius * 2, Proc.FeatureInfo.dFaceLength / 2) -- imposto dati per cercare la fresa migliore elseif Proc.Topology.sName == 'Pocket-5-Blind' then local dFaceWidth = Proc.MainFaces.BottomFaces[1].MainEdges.LongEdges[1].dLength @@ -197,7 +201,7 @@ local function GetBestPocketingStrategy( Proc) Milling = {} Milling.bIsApplicable = false if Proc.Topology.sName ~= 'DoubleBevel-2-Through' - and Proc.Topology.sName ~= 'Pocket-5-Blind' then + and Proc.Topology.sName ~= 'Pocket-5-Blind' and Proc.Topology.sName ~= 'RafterNotch-5-Through' then if Proc.Topology.sName == 'Groove-4-Blind' then ToolSearchParameters.dElevation = Proc.MainFaces.BottomFaces[2].dElevation @@ -241,6 +245,7 @@ local function GetBestPocketingStrategy( Proc) Milling.bIsApplicable = false if Proc.Topology.sName ~= 'DoubleBevel-2-Through' and Proc.Topology.sName ~= 'Pocket-5-Blind' + and Proc.Topology.sName ~= 'RafterNotch-5-Through' and Proc.Topology.sName ~= 'Groove-4-Blind' and Proc.Topology.sName ~= 'Bevel-3-Blind' then diff --git a/Strategies/Standard/STR0011/STR0011.lua b/Strategies/Standard/STR0011/STR0011.lua index 4daf7e6..db36277 100644 --- a/Strategies/Standard/STR0011/STR0011.lua +++ b/Strategies/Standard/STR0011/STR0011.lua @@ -72,7 +72,7 @@ local function GetDrillingStrategy( Proc, Part) local dMachinedLen = EgtIf( bDouble, Machining[1].sDepth * 2, Proc.FeatureInfo.dDrillLen) local dMachinedPrercentage = 100 * ( dMachinedLen / Proc.FeatureInfo.dDrillLen) Strategy.Result.nCompletionIndex = FeatureLib.GetFeatureCompletionIndex( dMachinedPrercentage) - Strategy.Result.sInfo = 'Machining not complete, left ' .. tostring( 100 - ceil( 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.nQuality = FeatureLib.GetFeatureQuality( 'Drill') end @@ -175,7 +175,7 @@ local function GetDrillingStrategy( Proc, Part) local dMachinedLen = Machining[1].sDepth + Machining[2].sDepth local dMachinedPrercentage = 100 * ( dMachinedLen / Proc.FeatureInfo.dDrillLen) Strategy.Result.nCompletionIndex = FeatureLib.GetFeatureCompletionIndex( dMachinedPrercentage) - Strategy.Result.sInfo = 'Machining not complete, left ' .. tostring( 100 - ceil( dMachinedPrercentage)) .. '%' + Strategy.Result.sInfo = 'Drill not complete, left ' .. tostring( 100 - ceil( dMachinedPrercentage)) .. '%' else Strategy.Result.sStatus = 'Completed' Strategy.Result.nCompletionIndex = 5 @@ -197,7 +197,7 @@ local function GetDrillingStrategy( Proc, Part) local dMachinedLen = Machining[1].sDepth local dMachinedPrercentage = 100 * ( dMachinedLen / Proc.FeatureInfo.dDrillLen) Strategy.Result.nCompletionIndex = FeatureLib.GetFeatureCompletionIndex( dMachinedPrercentage) - Strategy.Result.sInfo = 'Machining not complete, left ' .. tostring( 100 - ceil( dMachinedPrercentage)) .. '%' + Strategy.Result.sInfo = 'Drill not complete, left ' .. tostring( 100 - ceil( dMachinedPrercentage)) .. '%' Strategy.Result.dMRR = MachiningLib.GetToolMRR( Machining[1].ToolInfo) Strategy.Result.nQuality = FeatureLib.GetFeatureQuality( 'Drill') -- se utensile 2 non completo @@ -214,7 +214,7 @@ local function GetDrillingStrategy( Proc, Part) local dMachinedLen = Machining[1].sDepth local dMachinedPrercentage = 100 * ( dMachinedLen / Proc.FeatureInfo.dDrillLen) Strategy.Result.nCompletionIndex = FeatureLib.GetFeatureCompletionIndex( dMachinedPrercentage) - Strategy.Result.sInfo = 'Machining not complete, left ' .. tostring( 100 - ceil( dMachinedPrercentage)) .. '%' + Strategy.Result.sInfo = 'Drill not complete, left ' .. tostring( 100 - ceil( dMachinedPrercentage)) .. '%' Strategy.Result.dMRR = MachiningLib.GetToolMRR( Machining[1].ToolInfo) Strategy.Result.nQuality = FeatureLib.GetFeatureQuality( 'Drill') else diff --git a/StrategyLibs/BLADETOWASTE.lua b/StrategyLibs/BLADETOWASTE.lua index 7f64510..a7e831d 100644 --- a/StrategyLibs/BLADETOWASTE.lua +++ b/StrategyLibs/BLADETOWASTE.lua @@ -609,16 +609,20 @@ local function CutWholeWaste( Proc, Part, OptionalParameters) Cutting = FaceByBlade.Make( Proc, Part, Proc.Faces[1], EdgeToMachine, OptionalParametersFaceByBlade) CuttingDouble = FaceByBlade.Make( Proc, Part, Proc.Faces[1], EdgeToMachine, OptionalParametersFaceByBladeDouble) end - - end + local bCutToMoveAfterTail = Proc.Topology and Proc.Topology.sName == 'Cut-1-Through' and Proc.AffectedFaces.bLeft if Cutting and Cutting.bIsApplicable then - + if bCutToMoveAfterTail then + Cutting.sStage = 'AfterTail' + end table.insert( Machinings, Cutting) dCompletionPercentage = Cutting.dCompletionPercentage or dCompletionPercentage if CuttingDouble and CuttingDouble.bIsApplicable then + if bCutToMoveAfterTail then + CuttingDouble.sStage = 'AfterTail' + end table.insert( Machinings, CuttingDouble) dCompletionPercentage = 0.5 * ( Cutting.dCompletionPercentage or dCompletionPercentage) + 0.5 * ( CuttingDouble.dCompletionPercentage or dCompletionPercentage) end