5977a4c6db
- a BLADETOWASTE si passa la dExtendAfterTail opzionale
118 lines
5.2 KiB
Lua
118 lines
5.2 KiB
Lua
-- Strategia: STR0005
|
|
-- Descrizione
|
|
-- lama per taglio facce con cubetti se necessario
|
|
-- Feature: tagli singoli con eventuali cubetti
|
|
|
|
-- carico librerie
|
|
local BeamLib = require( 'BeamLib')
|
|
local BeamData = require( 'BeamData')
|
|
local MachiningLib = require( 'MachiningLib')
|
|
local FeatureLib = require( 'FeatureLib')
|
|
-- strategie di base
|
|
local BladeToWaste = require( 'BLADETOWASTE')
|
|
local BladeKeepWaste = require( 'BLADEKEEPWASTE')
|
|
|
|
-- Tabella per definizione modulo
|
|
local STR0005 = {}
|
|
local Strategy = {}
|
|
local Blade = {}
|
|
Blade.Result = {}
|
|
|
|
-------------------------------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
function STR0005.Make( bAddMachining, Proc, Part, CustomParameters)
|
|
-- carico parametri da default e li aggiorno con quelli passati dal chiamante (potrebbero non essere congruenti)
|
|
local StrategyLib = {}
|
|
StrategyLib.Config = require( 'STR0005\\STR0005Config')
|
|
Strategy.sName = StrategyLib.Config.sStrategyId
|
|
Strategy.Parameters = BeamLib.LoadCustomParametersInStrategy( Proc, CustomParameters, StrategyLib.Config)
|
|
Strategy.Result = {}
|
|
Strategy.Result.sInfo = ''
|
|
Blade.Result = {}
|
|
local dMRRBlade = 0
|
|
local dCompletionPercentage = 0
|
|
|
|
-- estensione oltre la coda
|
|
local dExtendAfterTail = Strategy.Parameters.dExtendAfterTail or max( Part.dDistanceToNextPiece - BeamData.CUT_EXTRA, 0)
|
|
if MachiningLib.CanExtendAfterTail( Strategy.Parameters.sCanDamageNextPiece, Part) then
|
|
dExtendAfterTail = 10000
|
|
end
|
|
|
|
-- 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 bFeatureHindersClamping = FeatureLib.IsMachiningLong( max( dFeatureMaxNotClampableLengthHead, dFeatureMaxNotClampableLengthTail), Part, { dMaxSegmentLength = BeamData.LONGCUT_ENDLEN})
|
|
|
|
-- lavorazione con codolo
|
|
if ( not bDropWaste and bFeatureHindersClamping) or bKeepWasteAttached then
|
|
local BladeKeepWasteResult
|
|
local OptionalParameters = { dExtendAfterTail = dExtendAfterTail, dStripWidth = Strategy.Parameters.dStripWidth}
|
|
Blade.Result.Sorted, BladeKeepWasteResult = BladeKeepWaste.Make( Proc, Part, OptionalParameters)
|
|
dMRRBlade = BladeKeepWasteResult.dMRR
|
|
dCompletionPercentage = BladeKeepWasteResult.dCompletionPercentage
|
|
end
|
|
|
|
-- lavorazione a cubetti / taglio singolo
|
|
if #Blade.Result == 0 and not bKeepWasteAttached then
|
|
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
|
|
}
|
|
Blade.Result.Sorted, BladeToWasteResult = BladeToWaste.Make( Proc, Part, OptionalParameters)
|
|
dMRRBlade = BladeToWasteResult.dMRR
|
|
dCompletionPercentage = BladeToWasteResult.dCompletionPercentage
|
|
end
|
|
|
|
-- aggiunta lavorazioni
|
|
local nIsApplicableCount = 0
|
|
local dFinalCompletionPercentage = 100
|
|
local bAreAllMachiningsAdded = true
|
|
for i = 1, #Blade.Result.Sorted do
|
|
if Blade.Result.Sorted[i].bIsApplicable then
|
|
nIsApplicableCount = nIsApplicableCount + 1
|
|
if bAddMachining then
|
|
local bIsMachiningAdded = MachiningLib.AddMachinings( Proc, Blade.Result.Sorted[i])
|
|
if not bIsMachiningAdded then
|
|
bAreAllMachiningsAdded = false
|
|
end
|
|
end
|
|
Strategy.Result.sInfo = Strategy.Result.sInfo .. '\n' .. Blade.Result.Sorted[i].sMessage
|
|
end
|
|
end
|
|
-- TODO migliorare calcolo area lavorata; se ho il codolo ha senso l'incompleta? se incompleta con codolo faccio i cubetti??
|
|
if nIsApplicableCount > 0 then
|
|
if dCompletionPercentage > 100 - 10 * GEO.EPS_SMALL then
|
|
Strategy.Result.sStatus = 'Completed'
|
|
else
|
|
Strategy.Result.sStatus = 'Not-Completed'
|
|
-- TODO al momento si assume che la percentuale di completamento dell'ultima lavorazione sia quella rilevante
|
|
dFinalCompletionPercentage = dCompletionPercentage
|
|
end
|
|
else
|
|
Strategy.Result.sStatus = 'Not-Applicable'
|
|
end
|
|
Strategy.Result.nCompletionIndex = FeatureLib.GetFeatureCompletionIndex( dFinalCompletionPercentage)
|
|
Strategy.Result.nQuality = FeatureLib.GetFeatureQuality( 'Blade')
|
|
Strategy.Result.dMRR = dMRRBlade
|
|
|
|
return bAreAllMachiningsAdded, Strategy.Result
|
|
end
|
|
|
|
-------------------------------------------------------------------------------------------------------------
|
|
|
|
return STR0005 |