- 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:
+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
|
||||
|
||||
Reference in New Issue
Block a user