From 1271205f2ca14585af1336f541146a0f86a67a80 Mon Sep 17 00:00:00 2001 From: "luca.mazzoleni" Date: Fri, 31 Jan 2025 12:40:35 +0100 Subject: [PATCH] - in BLADETOWASTE primo implemento, non completo, del taglio singolo --- LuaLibs/BeamExec.lua | 39 ++--------------------- LuaLibs/DiceCut.lua | 2 +- Strategies/Standard/STR0005/STR0005.lua | 5 ++- StrategyLibs/BLADETOWASTE.lua | 42 +++++++++++++++++++++---- 4 files changed, 44 insertions(+), 44 deletions(-) diff --git a/LuaLibs/BeamExec.lua b/LuaLibs/BeamExec.lua index d8ef29a..7e47e07 100644 --- a/LuaLibs/BeamExec.lua +++ b/LuaLibs/BeamExec.lua @@ -1332,49 +1332,16 @@ function BeamExec.ProcessMachinings( PARTS) end EgtOutLog( ' *** AddMachinings ***', 1) - -- ordino le features + -- ordinamento di base delle feature vProc = OrderFeatures( vProc) -- esegue le strategie migliori che ha precedentemente scelto e salva le lavorazioni nella lista globale MACHININGS = CalculateMachinings( vProc, PARTS[nPart]) + + -- ordinamento lavorazioni MACHININGS = MachiningLib.PrepareMachiningsForSorting( PARTS[nPart]) - - --TODO - rimuovere o mettere in Log, serve solo per test - -- TEST - local MachiningPropertiesBeforeSorting = {} - for i =1, #MACHININGS do - MachiningPropertiesBeforeSorting[i] = {} - MachiningPropertiesBeforeSorting[i] = { - ptCenter = MACHININGS[i].Machining.ptCenter, - nStage = MACHININGS[i].Machining.nStage, - nPartSegment = MACHININGS[i].Machining.nPartSegment, - sToolFamily = TOOLS[ MACHININGS[i].Machining.nToolIndex].sFamily, - dToolPerformanceIndex = TOOLS[ MACHININGS[i].Machining.nToolIndex].dPerformanceIndex, - sToolName = TOOLS[ MACHININGS[i].Machining.nToolIndex].sName, - vtToolDirection = MACHININGS[i].Machining.vtToolDirection - } - end - -- fine TEST - -- TODO completare ordinamento. Mancano le dipendenze. MACHININGS = BeamLib.StableSort( MACHININGS, MachiningLib.CompareMachinings) - - --TODO - rimuovere o mettere in Log, serve solo per test - -- TEST - local MachiningPropertiesAfterSorting = {} - for i =1, #MACHININGS do - MachiningPropertiesAfterSorting[i] = {} - MachiningPropertiesAfterSorting[i] = { - ptCenter = MACHININGS[i].Machining.ptCenter, - nStage = MACHININGS[i].Machining.nStage, - nPartSegment = MACHININGS[i].Machining.nPartSegment, - sToolFamily = TOOLS[ MACHININGS[i].Machining.nToolIndex].sFamily, - dToolPerformanceIndex = TOOLS[ MACHININGS[i].Machining.nToolIndex].dPerformanceIndex, - sToolName = TOOLS[ MACHININGS[i].Machining.nToolIndex].sName, - vtToolDirection = MACHININGS[i].Machining.vtToolDirection - } - end - -- fine TEST -- aggiungo la fase, se non è la prima if nOrd == 1 then diff --git a/LuaLibs/DiceCut.lua b/LuaLibs/DiceCut.lua index e8447cf..0ae2788 100644 --- a/LuaLibs/DiceCut.lua +++ b/LuaLibs/DiceCut.lua @@ -414,7 +414,7 @@ function DiceCut.GetDice( Part, Face1, Face2, OptionalParameters) bGetOrtoPlanes = true end - -- parametri opzionali + -- parametri opzionali e default -- box per dicing local b3BoxDicing = OptionalParameters.b3BoxDicing or Part.b3Part -- distanza tra piani paralleli diff --git a/Strategies/Standard/STR0005/STR0005.lua b/Strategies/Standard/STR0005/STR0005.lua index 34ceda8..297d262 100644 --- a/Strategies/Standard/STR0005/STR0005.lua +++ b/Strategies/Standard/STR0005/STR0005.lua @@ -201,7 +201,10 @@ function STR0005.Make( bAddMachining, Proc, Part, CustomParameters) -- lavorazione a cubetti / taglio singolo if #Blade.Result == 0 and not bLeaveWasteAttached then - -- BladeToWaste + local bDropWholeWaste = Strategy.Parameters.sCuttingStrategy == 'DROP_WHOLE_WASTE' + local OptionalParameters = { bDropWholeWaste = bDropWholeWaste} + Blade.Result.Sorted = BladeToWaste.Make( Proc, Part, OptionalParameters) + end -- aggiunta lavorazioni diff --git a/StrategyLibs/BLADETOWASTE.lua b/StrategyLibs/BLADETOWASTE.lua index 5bb6f17..5b477d6 100644 --- a/StrategyLibs/BLADETOWASTE.lua +++ b/StrategyLibs/BLADETOWASTE.lua @@ -18,14 +18,43 @@ EgtOutLog( ' BLADETOWASTE started', 1) ------------------------------------------------------------------------------------------------------------- -function BLADETOWASTE.Make( ) - --- if dFeatureVolume < StrategyParameters.dMaxWasteVolume + 10 * GEO.EPS_SMALL --- and dFeatureMaxDimension < StrategyParameters.dMaxWasteLength + 10 * GEO.EPS_SMALL then - --- end +function BLADETOWASTE.Make( Proc, Part, OptionalParameters) + local Result = {} + -- parametri opzionali e default + local nToolIndex = OptionalParameters.nToolIndex + local bDropWholeWaste = OptionalParameters.bDropWholeWaste or false + local dFeatureVolume = FeatureLib.GetFeatureVolume( Proc, Part) + local dFeatureMaxDimension = max( Proc.b3Box:getDimX(), Proc.b3Box:getDimY()) + local bIsFeatureSmall = dFeatureVolume < StrategyParameters.dMaxWasteVolume + 10 * GEO.EPS_SMALL + and dFeatureMaxDimension < StrategyParameters.dMaxWasteLength + 10 * GEO.EPS_SMALL + + if Proc.nFct == 1 and ( bIsFeatureSmall or bDropWholeWaste) then + local EdgeToMachine = {} + -- ricerca utensile + if not nToolIndex then + local ToolSearchParameters = {} + for i = 1, #Proc.Faces[1].Edges do + if Proc.Faces[1].Edges[i].dElevation < EdgeToMachine.dElevation - 10 * GEO.EPS_SMALL then + EdgeToMachine = Proc.Faces[1].Edges[i] + end + end + ToolSearchParameters.dElevation = EdgeToMachine.dElevation + ToolSearchParameters.vtToolDirection = EdgeToMachine.vtN + ToolSearchParameters.bAllowTopHead = true + -- TODO bisognerà implementare anche la lama da sotto + ToolSearchParameters.bAllowBottomHead = false + ToolSearchParameters.bForceLongcutBlade = false + local ToolInfo = MachiningLib.FindBlade( Proc, ToolSearchParameters) + nToolIndex = ToolInfo.nToolIndex + end + + local Cutting = FaceByBlade.Make( Proc, Part, Proc.Faces[1], EdgeToMachine) + table.insert( Result, Cutting) + + -- restituire tabella contenente lavorazioni, già con cloni se necessari + end @@ -50,6 +79,7 @@ function BLADETOWASTE.Make( ) + return Result end -------------------------------------------------------------------------------------------------------------