From fac9fd8877a40d4c39e4df71999ea5bb301f5eaa Mon Sep 17 00:00:00 2001 From: "andrea.villa" Date: Fri, 24 Oct 2025 11:46:41 +0200 Subject: [PATCH] Piccole modifiche per demo --- LuaLibs/FeatureLib.lua | 8 +-- LuaLibs/MachiningLib.lua | 34 ++++++------ Strategies/GeneralParameters.json | 2 +- Strategies/Standard/STR0012/STR0012.lua | 70 ++++++++++++++++--------- StrategyLibs/BLADEKEEPWASTE.lua | 2 +- 5 files changed, 69 insertions(+), 47 deletions(-) diff --git a/LuaLibs/FeatureLib.lua b/LuaLibs/FeatureLib.lua index 54c0855..a955bef 100644 --- a/LuaLibs/FeatureLib.lua +++ b/LuaLibs/FeatureLib.lua @@ -32,6 +32,8 @@ function FeatureLib.GetProcFromTrimesh( idTrimesh, Part, ProcToCopyFrom) Proc.AffectedFaces = BeamLib.GetAffectedFaces( Proc, Part) Proc.AdjacencyMatrix = FaceData.GetAdjacencyMatrix( Proc) Proc.Faces = FaceData.GetFacesInfo( Proc, Part) + Proc.NotClampableLength = FeatureLib.CalculateFeatureNotClampableLengths( Proc, Part) + Proc.bHindersLaserMeasure = FeatureLib.CalculateFeatureHindersLaserMeasure( Proc, Part) -- TODO servono anche altri dati raccolti nel collect?? return Proc @@ -85,9 +87,9 @@ function FeatureLib.NeedTopologyFeature( Proc, Part) 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) + elseif ID.IsSawCut( Proc) and Proc.nFct == 1 then + --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 diff --git a/LuaLibs/MachiningLib.lua b/LuaLibs/MachiningLib.lua index e584400..514b9dc 100644 --- a/LuaLibs/MachiningLib.lua +++ b/LuaLibs/MachiningLib.lua @@ -865,41 +865,41 @@ end -- TODO funziona solo con attacco perpendicolare - da aggiungere gestione in caso di attacco tangenziale function MachiningLib.AddMachinings( Proc, Machining, AuxiliaryData) local bMachiningAdded = false + local NewAuxiliaryData = {} + + -- se esistono i dati ausiliari li copio in locale perchè il parametro è una tabella per riferimento + if AuxiliaryData then + NewAuxiliaryData = BeamLib.TableCopyDeep( AuxiliaryData) + end if Machining.CloneStepsRadial and Machining.CloneStepsRadial.nCount > 1 then - if not AuxiliaryData then - AuxiliaryData = {} - end - AuxiliaryData.Clones = {} + NewAuxiliaryData.Clones = {} local dOriginalRadialOffset = Machining.dRadialOffset local dOriginalLeadInPerpDistance = Machining.LeadIn.dPerpDistance local dOriginalLeadOutPerpDistance = Machining.LeadOut.dPerpDistance for i = 1, Machining.CloneStepsRadial.nCount do - AuxiliaryData.Clones[i] = {} - AuxiliaryData.Clones[i].dRadialOffset = dOriginalRadialOffset + Machining.CloneStepsRadial.dStep * ( Machining.CloneStepsRadial.nCount - i) + NewAuxiliaryData.Clones[i] = {} + NewAuxiliaryData.Clones[i].dRadialOffset = dOriginalRadialOffset + Machining.CloneStepsRadial.dStep * ( Machining.CloneStepsRadial.nCount - i) -- update distanza perpendicolare attacco per contemplare l'offset applicato if abs( dOriginalLeadInPerpDistance) > 10 * GEO.EPS_SMALL and abs( dOriginalLeadOutPerpDistance) > 10 * GEO.EPS_SMALL then - AuxiliaryData.Clones[i].LeadIn = {} - AuxiliaryData.Clones[i].LeadOut = {} - AuxiliaryData.Clones[i].LeadIn.dPerpDistance = dOriginalLeadInPerpDistance - AuxiliaryData.Clones[i].dRadialOffset + dOriginalRadialOffset - AuxiliaryData.Clones[i].LeadOut.dPerpDistance = dOriginalLeadOutPerpDistance - AuxiliaryData.Clones[i].dRadialOffset + dOriginalRadialOffset + NewAuxiliaryData.Clones[i].LeadIn = {} + NewAuxiliaryData.Clones[i].LeadOut = {} + NewAuxiliaryData.Clones[i].LeadIn.dPerpDistance = dOriginalLeadInPerpDistance - NewAuxiliaryData.Clones[i].dRadialOffset + dOriginalRadialOffset + NewAuxiliaryData.Clones[i].LeadOut.dPerpDistance = dOriginalLeadOutPerpDistance - NewAuxiliaryData.Clones[i].dRadialOffset + dOriginalRadialOffset end end elseif Machining.CloneStepsLongitudinal and Machining.CloneStepsLongitudinal.nCount > 1 then - if not AuxiliaryData then - AuxiliaryData = {} - end - AuxiliaryData.Clones = {} + NewAuxiliaryData.Clones = {} local dOriginalRadialOffset = Machining.dRadialOffset for i = Machining.CloneStepsLongitudinal.nCount, 1, -1 do - AuxiliaryData.Clones[i] = {} - AuxiliaryData.Clones[i].dRadialOffset = dOriginalRadialOffset + Machining.CloneStepsLongitudinal.dStep * ( i - 1) + NewAuxiliaryData.Clones[i] = {} + NewAuxiliaryData.Clones[i].dRadialOffset = dOriginalRadialOffset + Machining.CloneStepsLongitudinal.dStep * ( i - 1) end end - bMachiningAdded = AddNewMachining( Proc, Machining, AuxiliaryData) + bMachiningAdded = AddNewMachining( Proc, Machining, NewAuxiliaryData) return bMachiningAdded end diff --git a/Strategies/GeneralParameters.json b/Strategies/GeneralParameters.json index eee8c9e..1ecab86 100644 --- a/Strategies/GeneralParameters.json +++ b/Strategies/GeneralParameters.json @@ -94,7 +94,7 @@ "nGroup": "MACHINING STRATEGY", "sName": "GEN_bReduceBladePath", "sNameNge": "REDUCE_BLADE_PATH", - "sValue": "false", + "sValue": "true", "sDescriptionShort": "Use entire blade diameter to shorten path", "sDescriptionLong": "", "sType": "b", diff --git a/Strategies/Standard/STR0012/STR0012.lua b/Strategies/Standard/STR0012/STR0012.lua index 8894984..f1b933e 100644 --- a/Strategies/Standard/STR0012/STR0012.lua +++ b/Strategies/Standard/STR0012/STR0012.lua @@ -10,6 +10,7 @@ local MachiningLib = require( 'MachiningLib') local FeatureLib = require( 'FeatureLib') -- strategie di base local BladeToWaste = require( 'BLADETOWASTE') +local BladeKeepWaste =require ( 'BLADEKEEPWASTE') -- Tabella per definizione modulo local STR0012 = {} @@ -42,6 +43,7 @@ function STR0012.Make( bAddMachining, Proc, Part, CustomParameters) local dMRRBladeAddedFace = 0 local dCompletionPercentageAddedFace = 0 local dQualityAddedFace = 0 + local AuxiliaryData = { bIgnoreNotClampableLength = false} -- gestito solo RidgeLap 3 facce if Proc.nFct ~= 3 then @@ -78,39 +80,57 @@ function STR0012.Make( bAddMachining, Proc, Part, CustomParameters) -- rimozione della terza faccia dalla Proc local idNewProc = EgtCopyGlob( Proc.id, nAddGrpId) EgtSurfTmRemoveFacet( idNewProc, nAddedFace) - Proc = FeatureLib.GetProcFromTrimesh( idNewProc, Part, Proc) + local NewProc = FeatureLib.GetProcFromTrimesh( idNewProc, Part, Proc) + NewProc.Topology = FeatureLib.ClassifyTopology( NewProc, Part) -- TODO rimuovere??? codolo da implementare o no?? -- considerazioni necessarie a determinare se lavorare con codolo oppure no local bKeepWasteAttached = ( Strategy.Parameters.sCuttingStrategy == 'KEEP_WASTE_ATTACHED') local bDropWaste = ( Strategy.Parameters.sCuttingStrategy == 'DROP_WASTE') - local dFeatureMaxNotClampableLengthHead, dFeatureMaxNotClampableLengthTail = FeatureLib.GetFeatureMaxNotClampableLengths( Proc, Part) + local dFeatureMaxNotClampableLengthHead, dFeatureMaxNotClampableLengthTail = FeatureLib.GetFeatureMaxNotClampableLengths( NewProc, Part) local bFeatureHindersClamping = FeatureLib.IsMachiningLong( max( dFeatureMaxNotClampableLengthHead, dFeatureMaxNotClampableLengthTail), Part, { dMaxSegmentLength = BeamData.LONGCUT_ENDLEN}) - local bIsFeatureLong = FeatureLib.IsMachiningLong( Proc.b3Box:getDimX(), Part, { dMaxSegmentLength = BeamData.LONGCUT_ENDLEN}) + local bIsFeatureLong = FeatureLib.IsMachiningLong( NewProc.b3Box:getDimX(), Part, { dMaxSegmentLength = BeamData.LONGCUT_ENDLEN}) + + -- lavorazione con codolo + if ( bIsFeatureLong) + or ( bFeatureHindersClamping and not bDropWaste) + or bKeepWasteAttached then + + local BladeKeepWasteResult + local OptionalParameters = { dExtendAfterTail = dExtendAfterTail, dStripWidth = 5, bFinishWithMill = false} + AuxiliaryData.bIgnoreNotClampableLength = true + TwoFaces.Result, BladeKeepWasteResult = BladeKeepWaste.Make( NewProc, Part, OptionalParameters) + dTimeToMachine = BladeKeepWasteResult.dTimeToMachine + dMRRBlade = BladeKeepWasteResult.dMRR + dCompletionPercentage = BladeKeepWasteResult.dCompletionPercentage + dQuality = BladeKeepWasteResult.dQuality -- lavorazione a cubetti facce concave - local dMinZTopBlade - local dMaxNyTopBlade - local BladeToWasteResult - if Strategy.Parameters.dMinZAngleTopBlade then - dMinZTopBlade = sin( Strategy.Parameters.dMinZAngleTopBlade) + else + local dMinZTopBlade + local dMaxNyTopBlade + local BladeToWasteResult + if Strategy.Parameters.dMinZAngleTopBlade then + dMinZTopBlade = sin( Strategy.Parameters.dMinZAngleTopBlade) + end + if Strategy.Parameters.dMaxYAngleTopBlade then + dMaxNyTopBlade = sin( Strategy.Parameters.dMaxYAngleTopBlade) + end + local OptionalParameters = { dMaxWasteVolume = Strategy.Parameters.dMaxWasteVolume, + dMaxWasteLength = Strategy.Parameters.dMaxWasteLength, + dMinNzTopBlade = dMinZTopBlade, + dMaxNyTopBlade = dMaxNyTopBlade, + bSaveAddedGeometries = bAddMachining, + dExtendAfterTail = dExtendAfterTail, + bReduceBladePath = Strategy.Parameters.bReduceBladePath + } + AuxiliaryData.bIgnoreNotClampableLength = false + TwoFaces.Result, BladeToWasteResult = BladeToWaste.Make( NewProc, Part, OptionalParameters) + dTimeToMachine = BladeToWasteResult.dTimeToMachine + dMRRBlade = BladeToWasteResult.dMRR + dCompletionPercentage = BladeToWasteResult.dCompletionPercentage + dQuality = BladeToWasteResult.dQuality end - if Strategy.Parameters.dMaxYAngleTopBlade then - dMaxNyTopBlade = sin( Strategy.Parameters.dMaxYAngleTopBlade) - end - local OptionalParameters = { dMaxWasteVolume = Strategy.Parameters.dMaxWasteVolume, - dMaxWasteLength = Strategy.Parameters.dMaxWasteLength, - dMinNzTopBlade = dMinZTopBlade, - dMaxNyTopBlade = dMaxNyTopBlade, - bSaveAddedGeometries = bAddMachining, - dExtendAfterTail = dExtendAfterTail, - bReduceBladePath = Strategy.Parameters.bReduceBladePath - } - TwoFaces.Result, BladeToWasteResult = BladeToWaste.Make( Proc, Part, OptionalParameters) - dTimeToMachine = BladeToWasteResult.dTimeToMachine - dMRRBlade = BladeToWasteResult.dMRR - dCompletionPercentage = BladeToWasteResult.dCompletionPercentage - dQuality = BladeToWasteResult.dQuality -- lavorazione terza faccia -- TODO da completare @@ -162,7 +182,7 @@ function STR0012.Make( bAddMachining, Proc, Part, CustomParameters) if RidgeLap.Result[i].bIsApplicable then nIsApplicableCount = nIsApplicableCount + 1 if bAddMachining then - local bIsMachiningAdded = MachiningLib.AddMachinings( OriginalProc, RidgeLap.Result[i]) + local bIsMachiningAdded = MachiningLib.AddMachinings( OriginalProc, RidgeLap.Result[i], AuxiliaryData) if not bIsMachiningAdded then bAreAllMachiningsAdded = false end diff --git a/StrategyLibs/BLADEKEEPWASTE.lua b/StrategyLibs/BLADEKEEPWASTE.lua index db42288..ba3da2f 100644 --- a/StrategyLibs/BLADEKEEPWASTE.lua +++ b/StrategyLibs/BLADEKEEPWASTE.lua @@ -209,7 +209,7 @@ function BLADEKEEPWASTE.Make( Proc, Part, OptionalParameters) -- taglio eventuali facce di chiusura for i = 1, #LongFaces do local Cutting = {} - local OptionalParametersFaceByBlade = { bIsSplitFeature = bIsSplitFeature, dExtendAfterTail = dExtendAfterTail, nToolIndex = nToolIndex} + local OptionalParametersFaceByBlade = { bIsSplitFeature = bIsSplitFeature, dExtendAfterTail = 9999, nToolIndex = nToolIndex} Cutting = FaceByBlade.Make( Proc, Part, LongFaces[i], LongFaces[i].MainEdges.BottomEdge, OptionalParametersFaceByBlade) Cutting.nInternalSortingPriority = 1 Cutting.dResultWeight = 0.15