CAMAuto :

- create macchinate solo con pezzi delle stesse dimensioni
- lavorazioni sulla faccia Top effetuate in fase due
- aggiunto confronto tra svuotature nell'ordinamento delle lavorazioni.
This commit is contained in:
Annamaria Sassi
2026-07-24 13:01:47 +02:00
parent 00ee47e5dd
commit 4ae5012c67
4 changed files with 48 additions and 30 deletions
+15 -9
View File
@@ -190,17 +190,23 @@ local function CalculateSimilarity( Part1, Part2)
local ProfilesWeights = { 3, 3, 1, 1}
local dScore = 0
for i = 1, 4 do
if Part1.SemiProfiles[i] == Part2.SemiProfiles[i] then
dScore = dScore + ProfilesWeights[i]
end
end
-- punteggio maggiore di zero se hanno stesse dimensioni
if Part1.b3Raw:getDimZ() - Part2.b3Raw:getDimZ() < 10 * GEO.EPS_SMALL and Part1.b3Raw:getDimZ() - Part2.b3Raw:getDimZ() > - 10 * GEO.EPS_SMALL and
((Part1.b3Raw:getDimX() - Part2.b3Raw:getDimX() < 10 * GEO.EPS_SMALL and Part1.b3Raw:getDimX() - Part2.b3Raw:getDimX() > - 10 * GEO.EPS_SMALL and
Part1.b3Raw:getDimY() - Part2.b3Raw:getDimY() < 10 * GEO.EPS_SMALL and Part1.b3Raw:getDimY() - Part2.b3Raw:getDimY() > - 10 * GEO.EPS_SMALL) or
(Part1.b3Raw:getDimY() - Part2.b3Raw:getDimX() < 10 * GEO.EPS_SMALL and Part1.b3Raw:getDimY() - Part2.b3Raw:getDimX() > - 10 * GEO.EPS_SMALL and
Part1.b3Raw:getDimX() - Part2.b3Raw:getDimY() < 10 * GEO.EPS_SMALL and Part1.b3Raw:getDimX() - Part2.b3Raw:getDimY() > - 10 * GEO.EPS_SMALL))then
for i = 1, 4 do
if Part1.SemiProfiles[i] == Part2.SemiProfiles[i] then
dScore = dScore + ProfilesWeights[i]
end
end
-- punteggio "bonus" se il tipo di pezzo è lo stesso
if Part1.sPieceType and Part2.sPieceType and Part1.sPieceType == Part2.sPieceType then
dScore = dScore + 2
-- punteggio "bonus" se il tipo di pezzo è lo stesso
if Part1.sPieceType and Part2.sPieceType and Part1.sPieceType == Part2.sPieceType then
dScore = dScore + 2
end
end
return dScore
end
+2 -1
View File
@@ -170,12 +170,13 @@ function MachiningLib.GetPhaseMach( Proc)
-- se macchina tipo LINEA
if WinData.MACH_TYPE == 'LINE' then
if Proc.AffectedFaces.bTop then
nPhase = 1
nPhase = 2
elseif Proc.AffectedFaces.bFront or Proc.AffectedFaces.bLeft then
nPhase = EgtIf( WinData.FIRST_PHASE_LOAD == 'PUSH', 1, 2)
elseif Proc.AffectedFaces.bBack or Proc.AffectedFaces.bRight then
nPhase = EgtIf( WinData.FIRST_PHASE_LOAD == 'PUSH', 2, 1)
else
-- per fori presi da AGB effettuati dopo profilo e la cui lavorazione non parte da una faccia del grezzo
nPhase = EgtIf( Proc.vtDir:getX() < 0 and Proc.vtDir:getY() < 0, 1, 2)
end
-- se macchina tipo PANTOGRAFO
+28 -20
View File
@@ -360,10 +360,18 @@ local function OrderMachining( MACHININGS)
return true
elseif B1.AuxiliaryData.bIsDrilling and B1.AuxiliaryData.bExecAfterProfile and B2.AuxiliaryData.bIsProfiling then
return false
elseif B1.AuxiliaryData.bIsProfiling and B2.AuxiliaryData.bIsPocketingDrill then
return true
elseif B1.AuxiliaryData.bIsPocketingDrill and B2.AuxiliaryData.bIsProfiling then
return false
elseif B1.AuxiliaryData.bIsDrilling and B2.AuxiliaryData.bIsProfiling then
return true
elseif B2.AuxiliaryData.bIsDrilling and B1.AuxiliaryData.bIsProfiling then
return false
elseif B1.AuxiliaryData.bIsDrilling and B2.AuxiliaryData.bIsPocketingDrill then
return true
elseif B1.AuxiliaryData.bIsPocketingDrill and B2.AuxiliaryData.bIsDrilling then
return false
elseif B1.AuxiliaryData.bIsProfiling and B2.AuxiliaryData.bIsProfiling then
-- profiling Generic sempre per ultimi
if B1.Proc.sProfileInfo == 'Generic' and B2.Proc.sProfileInfo ~= 'Generic' then
@@ -382,26 +390,26 @@ local function OrderMachining( MACHININGS)
return EgtIf( B1.AuxiliaryData.nPhase == 1, false, true) -- se arrivati a questo controllo, la fase di lavorazione di entrambe è la stessa, quindi mi basta controllarne una
end
elseif B1.AuxiliaryData.bIsDrilling and B2.AuxiliaryData.bIsDrilling then
if B1.Proc.b3Box:getMin():getX() == B2.Proc.b3Box:getMin():getX() then
if B1.Proc.b3Box:getMin():getY() == B2.Proc.b3Box:getMin():getY() then
if B1.Proc.b3Box:getMin():getZ() < B2.Proc.b3Box:getMin():getZ() then
return true
else
return false
end
else
if B1.Proc.b3Box:getMin():getY() < B2.Proc.b3Box:getMin():getY() then
return true
else
return false
end
end
if B1.Proc.b3Box:getMin():getX() < B2.Proc.b3Box:getMin():getX() then
return true
elseif B1.Proc.b3Box:getMin():getX() > B2.Proc.b3Box:getMin():getX() then
return false
end
if B1.Proc.b3Box:getMin():getY() < B2.Proc.b3Box:getMin():getY() then
return true
elseif B1.Proc.b3Box:getMin():getY() > B2.Proc.b3Box:getMin():getY() then
return false
end
if B1.Proc.b3Box:getMin():getZ() < B2.Proc.b3Box:getMin():getZ() then
return true
elseif B1.Proc.b3Box:getMin():getZ() > B2.Proc.b3Box:getMin():getZ() then
return false
end
elseif B1.AuxiliaryData.bIsPocketingDrill and B2.AuxiliaryData.bIsPocketingDrill then
if B1.Proc.b3Box:getMin():getX() < B2.Proc.b3Box:getMin():getX() then
return true
else
if B1.Proc.b3Box:getMin():getX() < B2.Proc.b3Box:getMin():getX() then
return true
else
return false
end
return false
end
else
@@ -526,7 +534,7 @@ function WinExec.ProcessFeatures( PARTS)
AddMachinings( vProc, PARTS)
-- ordina le lavorazioni
--OrderMachining( MACHININGS)
OrderMachining( MACHININGS)
local maxOffsetX = {}
for i = 1, #PARTS do
+3
View File
@@ -21,6 +21,9 @@ local function IsDrillToMachineAfterProfile( Proc)
if ( Proc.AffectedFaces.bLeft or Proc.AffectedFaces.bRight) and abs( Proc.vtDir:getX()) > 0.15 then
bExecAfterProfile = true
end
if not (Proc.AffectedFaces.bLeft or Proc.AffectedFaces.bRight or Proc.AffectedFaces.bBottom or Proc.AffectedFaces.bTop or Proc.AffectedFaces.bBack or Proc.AffectedFaces.bFront) then
bExecAfterProfile = true
end
return bExecAfterProfile
end