- Nella BasicCustomerStrategies aggiunte funzioni per leggere parametri Q per cliente Essetre
- I parametri delle BasicCustomerStrategies vengono letti all'inizio della Make di ogni strategia dalla BeamLib.LoadCustomParametersInStrategy - Se feature taglio compatibile con taglio testa/coda viene saltato ( controllo nella InfoAndDependency)
This commit is contained in:
@@ -32,6 +32,10 @@ local ID = require( 'Identity')
|
||||
-- end
|
||||
-- end
|
||||
|
||||
----------------------------------------------------------------------------------
|
||||
-- *** STRATEGIE ***
|
||||
----------------------------------------------------------------------------------
|
||||
|
||||
----------------------------------------------------------------------------------
|
||||
-- *** EGALWARE ***
|
||||
----------------------------------------------------------------------------------
|
||||
@@ -323,6 +327,11 @@ local function GetStrategies_Egalware( Proc)
|
||||
---------------------------------------------------------------------
|
||||
end
|
||||
|
||||
-- si salva che la strategia è stata presa dallo script
|
||||
if #Strategies > 0 then
|
||||
Strategies.bIsBasicStrategy = true
|
||||
end
|
||||
|
||||
return Strategies
|
||||
end
|
||||
|
||||
@@ -335,7 +344,7 @@ local function GetStrategies_Essetre( Proc)
|
||||
---------------------------------------------------------------------
|
||||
-- Feature : Cut (1-340)
|
||||
if ID.IsHeadCut( Proc) then
|
||||
Strategies = { { sStrategyId = 'HEADCUT'}}
|
||||
Strategies = { { sStrategyId = 'HEADCUT'}}
|
||||
---------------------------------------------------------------------
|
||||
-- Feature : Cut (2-350)
|
||||
elseif ID.IsTailCut( Proc) then
|
||||
@@ -343,9 +352,11 @@ local function GetStrategies_Essetre( Proc)
|
||||
---------------------------------------------------------------------
|
||||
-- Feature : Cut (1-10)
|
||||
elseif ID.IsCut( Proc) then
|
||||
Strategies = { { sStrategyId = 'STR0005'}}
|
||||
---------------------------------------------------------------------
|
||||
-- Feature : Longitudinal Cut (0-10)
|
||||
elseif ID.IsLongitudinalCut( Proc) then
|
||||
Strategies = { { sStrategyId = 'STR0005'}}
|
||||
---------------------------------------------------------------------
|
||||
-- Feature : Double Cut (1-11)
|
||||
elseif ID.IsDoubleCut( Proc) then
|
||||
@@ -615,9 +626,41 @@ local function GetStrategies_Essetre( Proc)
|
||||
---------------------------------------------------------------------
|
||||
end
|
||||
|
||||
-- si salva che la strategia è stata presa dallo script
|
||||
if #Strategies > 0 then
|
||||
Strategies.bIsBasicStrategy = true
|
||||
end
|
||||
|
||||
return Strategies
|
||||
end
|
||||
|
||||
|
||||
----------------------------------------------------------------------------------
|
||||
-- *** PARAMETRI ***
|
||||
----------------------------------------------------------------------------------
|
||||
----------------------------------------------------------------------------------
|
||||
-- *** ESSETRE ***
|
||||
----------------------------------------------------------------------------------
|
||||
-- funzione che recupera i paraemtri custom della strategia. Per cliente Essetre, vengono salvati dei valori 'Q' sul processing del file NGE per modificare il comportamento delle macro
|
||||
local function GetParameters_Essetre( Proc, sStrategyIdToGet)
|
||||
local Parameters = {}
|
||||
|
||||
-- Feature : Cut (1-340)
|
||||
if ID.IsHeadCut( Proc) then
|
||||
-- Per Essetre nion esiste il taglio di testa, quindi si leggono le variabili Q sul processing che coincide con il taglio di testa
|
||||
if sStrategyIdToGet == 'HEADCUT' then
|
||||
local dDepthChamfer = 0
|
||||
-- eventuali informazioni da recuperare sulla feature sostituita
|
||||
if Proc.SubstitutedProc then
|
||||
dDepthChamfer = EgtGetInfo( Proc.SubstitutedProc.id or GDB_ID.NULL, 'Q06', 'd') or 0
|
||||
end
|
||||
Parameters = { { sName = 'dDepthChamfer', sValue = dDepthChamfer, sType = 'd'}}
|
||||
end
|
||||
end
|
||||
|
||||
return Parameters
|
||||
end
|
||||
|
||||
----------------------------------------------------------------------------------
|
||||
-- *** Esecuzione ***
|
||||
----------------------------------------------------------------------------------
|
||||
@@ -636,9 +679,26 @@ function BasicCustomerStrategies.GetStrategiesFromBasicCustomerStrategies( Proc)
|
||||
else
|
||||
StrategiesFromScript = nil
|
||||
end
|
||||
|
||||
return StrategiesFromScript
|
||||
end
|
||||
|
||||
----------------------------------------------------------------------------------
|
||||
-- lettura parametri che personalizzano le strategie. I parametri di default sono decisi con cliente
|
||||
function BasicCustomerStrategies.GetParametersFromBasicCustomerStrategies( Proc, sStrategyIdToGet)
|
||||
local ParametersFromScript = {}
|
||||
|
||||
-- CLIENTE : ESSETRE
|
||||
if BeamData.STRATEGIES_SCRIPT == 'Essetre' then
|
||||
ParametersFromScript = GetParameters_Essetre( Proc, sStrategyIdToGet)
|
||||
else
|
||||
ParametersFromScript = nil
|
||||
end
|
||||
|
||||
return ParametersFromScript
|
||||
end
|
||||
|
||||
|
||||
-------------------------------------------------------------------------------------------------------------
|
||||
|
||||
return BasicCustomerStrategies
|
||||
+34
-16
@@ -755,22 +755,39 @@ local function GetFeatureInfoAndDependency( vProcSingleRot, Part)
|
||||
-- ciclo tutte le feature
|
||||
for i = 1, #vProcSingleRot do
|
||||
local Proc = vProcSingleRot[i]
|
||||
-- controllo la feature con tutte le altre per recuperare le dipendenze
|
||||
for j = 1, #vProcSingleRot do
|
||||
-- non si controlla la feature con se stessa
|
||||
if i ~= j then
|
||||
-- se feature abilitata alla lavorazione
|
||||
if Proc.nFlg ~= 0 then
|
||||
-- controllo la feature con tutte le altre per recuperare le dipendenze
|
||||
for j = 1, #vProcSingleRot do
|
||||
local ProcB = vProcSingleRot[j]
|
||||
-- verifico se feature tipo LapJoint è attraversata da almeno un foro
|
||||
if ( Proc.Topology.sFamily == 'Pocket' or Proc.Topology.sFamily == 'Tunnel' or Proc.Topology.sFamily == 'Groove' or ID.IsMortise( Proc)) and
|
||||
ID.IsDrilling( ProcB) and Overlaps( Proc.b3Box, ProcB.b3Box) then
|
||||
Proc.bPassedByHole = true
|
||||
end
|
||||
-- verifiche per specchiature
|
||||
if BeamData.DOWN_HEAD or BeamData.TWO_EQUAL_HEADS then
|
||||
-- forature
|
||||
if BeamData.DOUBLE_HEAD_DRILLING and ID.IsDrilling( Proc) and ID.IsDrilling( ProcB) and not Proc.Mirror then
|
||||
if AreDrillingsMirrored( Proc, ProcB, Part) then
|
||||
Proc.Mirror = ProcB
|
||||
-- non si controlla la feature con se stessa o se feature disabilitata
|
||||
if i ~= j and ProcB.nFlg ~= 0 then
|
||||
-- verifico se il taglio può essere saltato perchè è nella stessa posizione del taglio di testa
|
||||
if Proc.nPrc == 340 and ProcB.Topology.sFamily == 'Cut' and
|
||||
AreSameVectorApprox( ProcB.Faces[1].vtN, X_AX()) and abs( ProcB.Faces[1].ptCenter:getX() - Part.b3Part:getMax():getX()) < 10 * GEO.EPS_SMALL then
|
||||
Proc.SubstitutedProc = ProcB
|
||||
ProcB.IsSubstitutedBy = Proc
|
||||
ProcB.nFlg = 0
|
||||
end
|
||||
-- verifico se il taglio può essere saltato perchè è nella stessa posizione del taglio di coda
|
||||
if Proc.nPrc == 350 and ProcB.Topology.sFamily == 'Cut' and
|
||||
AreSameVectorApprox( ProcB.Faces[1].vtN, -X_AX()) and abs( ProcB.Faces[1].ptCenter:getX() - Part.b3Part:getMin():getX()) < 10 * GEO.EPS_SMALL then
|
||||
Proc.SubstitutedProc = ProcB
|
||||
ProcB.IsSubstitutedBy = Proc
|
||||
ProcB.nFlg = 0
|
||||
end
|
||||
-- verifico se feature tipo LapJoint è attraversata da almeno un foro
|
||||
if ( Proc.Topology.sFamily == 'Pocket' or Proc.Topology.sFamily == 'Tunnel' or Proc.Topology.sFamily == 'Groove' or ID.IsMortise( Proc)) and
|
||||
ID.IsDrilling( ProcB) and Overlaps( Proc.b3Box, ProcB.b3Box) then
|
||||
Proc.bPassedByHole = true
|
||||
end
|
||||
-- verifiche per specchiature
|
||||
if BeamData.DOWN_HEAD or BeamData.TWO_EQUAL_HEADS then
|
||||
-- forature
|
||||
if BeamData.DOUBLE_HEAD_DRILLING and ID.IsDrilling( Proc) and ID.IsDrilling( ProcB) and not Proc.Mirror then
|
||||
if AreDrillingsMirrored( Proc, ProcB, Part) then
|
||||
Proc.Mirror = ProcB
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -888,6 +905,7 @@ local function CalculateStrategies( vProcSingleRot, Part)
|
||||
-- eseguo file config con i parametri di default
|
||||
local CurrentStrategy = {}
|
||||
CurrentStrategy = RunStrategyLibraries( Proc.AvailableStrategies[nIndexCurrentStrategy].sStrategyId)
|
||||
-- TODO in caso di ulteriore ciclo dovuto a errori imprevisti, controllare se questa strategia è quella che ha dato errore e disabilitarla senza calcolare nulla
|
||||
-- controllo che le librerie siano state effettivamente caricate
|
||||
if CurrentStrategy.Config and CurrentStrategy.Script then
|
||||
-- eseguo la strategia solo come calcolo fattibilità e voto. Non si applicano le lavorazioni. Si passa la Proc e i parametri personalizzati
|
||||
@@ -1221,7 +1239,6 @@ end
|
||||
local function GetBestResultFromCombinationsMatrix( ProcessingsOnPart, PartInfo)
|
||||
local BestCombination = {}
|
||||
local CombinationsList = {}
|
||||
local HeadTailProc = {}
|
||||
|
||||
-- scrittura nel log della matrice delle rotazioni
|
||||
if EgtGetDebugLevel() >= 3 then
|
||||
@@ -1589,6 +1606,7 @@ function BeamExec.ProcessMachinings( PARTS)
|
||||
|
||||
-- TODO per il momento non si cicla mai una seconda volta. Controllare anche parametro modalità scelta strategia
|
||||
-- Gestione da fare completamente. La strategia che ha generato una lavorazione con errore deve essere annullata
|
||||
-- si può salvare una lista delle strategie da non utilizzare e, nella CalculateStrategy, settare quella specifica strategia come non valida
|
||||
-- si fa un reset del MACH e poi si ritorna a inizio ciclo e si rifà tutto
|
||||
-- se i cicli superano il massimo si esce (nell'ultimo ciclo possibile si potrebbe escludere la feature e basta, anche se avesse altre strategie da provare)
|
||||
if true or nCurrLoop > nMaxLoops then
|
||||
|
||||
+12
-26
@@ -9,6 +9,8 @@ local BeamLib = {}
|
||||
-- Include
|
||||
require( 'EgtBase')
|
||||
local BeamData = require( 'BeamData')
|
||||
local BCS = require( 'BasicCustomerStrategies')
|
||||
|
||||
|
||||
EgtOutLog( ' BeamLib started', 1)
|
||||
|
||||
@@ -35,19 +37,6 @@ function BeamLib.AddPartStartFace( PartId, b3Solid)
|
||||
EgtSetName( nStmId, 'StartCut')
|
||||
EgtSetInfo( nStmId, 'GRP', 1)
|
||||
EgtSetInfo( nStmId, 'PRC', 340)
|
||||
-- verifico se sostituisce un taglio di testa già presente
|
||||
local nProcId = EgtGetFirstInGroup( EgtGetFirstNameInGroup( PartId, 'Processings') or GDB_ID.NULL)
|
||||
while nProcId do
|
||||
local nGrp = EgtGetInfo( nProcId, 'GRP', 'i') or 0
|
||||
local nProc = EgtGetInfo( nProcId, 'PRC', 'i') or 0
|
||||
if ( nGrp == 1 or nGrp == 2) and nProc == 10 then
|
||||
local ptC, vtN = EgtSurfTmFacetCenter( nProcId, 0, GDB_ID.ROOT)
|
||||
if ptC and vtN and AreSameVectorApprox( vtN, X_AX()) and abs( ptC:getX() - b3Solid:getMax():getX()) < 10 * GEO.EPS_SMALL then
|
||||
EgtSetInfo( nStmId, 'ORI', nProcId)
|
||||
end
|
||||
end
|
||||
nProcId = EgtGetNext( nProcId)
|
||||
end
|
||||
|
||||
return true
|
||||
end
|
||||
@@ -73,19 +62,6 @@ function BeamLib.AddPartEndFace( PartId, b3Solid)
|
||||
EgtSetName( nStmId, 'EndCut')
|
||||
EgtSetInfo( nStmId, 'GRP', 2)
|
||||
EgtSetInfo( nStmId, 'PRC', 350)
|
||||
-- verifico se sostituisce un taglio di coda già presente
|
||||
local nProcId = EgtGetFirstInGroup( EgtGetFirstNameInGroup( PartId, 'Processings') or GDB_ID.NULL)
|
||||
while nProcId do
|
||||
local nGrp = EgtGetInfo( nProcId, 'GRP', 'i') or 0
|
||||
local nProc = EgtGetInfo( nProcId, 'PRC', 'i') or 0
|
||||
if ( nGrp == 1 or nGrp == 2) and nProc == 10 then
|
||||
local ptC, vtN = EgtSurfTmFacetCenter( nProcId, 0, GDB_ID.ROOT)
|
||||
if ptC and vtN and AreSameVectorApprox( vtN, -X_AX()) and abs( ptC:getX() - b3Solid:getMin():getX()) < 10 * GEO.EPS_SMALL then
|
||||
EgtSetInfo( nStmId, 'ORI', nProcId)
|
||||
end
|
||||
end
|
||||
nProcId = EgtGetNext( nProcId)
|
||||
end
|
||||
|
||||
return true
|
||||
end
|
||||
@@ -385,6 +361,15 @@ function BeamLib.LoadCustomParametersInStrategy( Proc, CustomParameters, Default
|
||||
local UpdatedParameters = {}
|
||||
-- TODO serve controllare se campo 'sStrategyId' congruente tra il Config (DefaultStrategyParamList) e i parametri custom (CustomParameters)?
|
||||
if DefaultStrategyParamList and DefaultStrategyParamList.Parameters and #DefaultStrategyParamList.Parameters > 0 then
|
||||
-- se le strategie disponibili sono le basic, non si possono customizzare valori di default da interfaccia, si leggono allora eventuali parametri di default decisi con cliente
|
||||
if Proc.AvailableStrategies.bIsBasicStrategy then
|
||||
-- essendo una strategia basic, la lista dei parametri custom dovrebbe essere sempre vuota. Si leggono ora
|
||||
if not CustomParameters.Parameters then
|
||||
CustomParameters.Parameters = BCS.GetParametersFromBasicCustomerStrategies( Proc, CustomParameters.sStrategyId)
|
||||
end
|
||||
end
|
||||
|
||||
-- lettura e settaggio parametri finali per la strategia (customizzati o default)
|
||||
for i=1, #DefaultStrategyParamList.Parameters do
|
||||
local xParameterValue = nil
|
||||
-- se strategia forzata, leggo eventuali parametri nelle info
|
||||
@@ -405,6 +390,7 @@ function BeamLib.LoadCustomParametersInStrategy( Proc, CustomParameters, Default
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- se non arriva forzato da strategia, oppure se non è stato configurato da cliente, si prende default
|
||||
if not xParameterValue then
|
||||
xParameterValue = DefaultStrategyParamList.Parameters[i].sValue
|
||||
|
||||
Reference in New Issue
Block a user