- in BeamExec completata la funzione PrepareMachiningsForSorting

- in FaceData la lunghezza rispetto a X è ora in valore assoluto
- in MachiningLib -> GetSplitMachinings aggiunta la scrittura del centro della lavorazione
- in STR0003, STR0004, SlotByChainSaw e SlotByBLade nSegment diventa nFeatureSegment per distinguerla da nPartSegment
This commit is contained in:
luca.mazzoleni
2024-12-19 15:04:17 +01:00
parent 14f81da3df
commit 456d8e903a
7 changed files with 60 additions and 35 deletions
+30 -9
View File
@@ -982,19 +982,20 @@ local function CalculateMachinings( vProc, Part)
bAreAllApplyOk, _ = StrategyScript.Make( true, Proc, Part, Proc.ChosenStrategy.Parameters)
end
end
return MACHININGS
end
-------------------------------------------------------------------------------------------------------------
local function PrepareMachiningsForSorting( )
local function PrepareMachiningsForSorting( Part)
local nFeatureInternalIndex = 1
for i = 1, #MACHININGS do
local MachiningCurrent = MACHININGS[i].Machining
local ProcIdCurrent = MACHININGS[i].Proc.id
local ProcCurrent = MACHININGS[i].Proc
-- conversione campo sStage in nStage, numerico e ordinabile
if not MachiningCurrent.sStage then
MachiningCurrent.sStage = ''
if not MachiningCurrent.sStage or MachiningCurrent.sStage == '' then
MachiningCurrent.sStage = 'Middle'
end
if MachiningCurrent.sStage == 'Head' then
MachiningCurrent.nStage = 1
@@ -1008,8 +1009,8 @@ local function PrepareMachiningsForSorting( )
if i > 1 then
local MachiningPrevious = MACHININGS[i - 1].Machining
local ProcIdPrevious = MACHININGS[i - 1].Proc.id
if ProcIdCurrent == ProcIdPrevious then
local ProcPrevious = MACHININGS[i - 1].Proc
if ProcCurrent.id == ProcPrevious.id then
-- nStage devono essere sempre crescenti nella stessa feature
if MachiningCurrent.nStage < MachiningPrevious.nStage then
MachiningCurrent.nStage = MachiningPrevious.nStage
@@ -1024,16 +1025,35 @@ local function PrepareMachiningsForSorting( )
-- se fase di lavoro standard, assegnazione dello spezzone
if MachiningCurrent.nStage == 2 then
if not MachiningCurrent.ptCenter then
MachiningCurrent.ptCenter = Point3d( ProcCurrent.b3Box:getCenter():getX(), 0, 0)
end
local nParts = #Part.SplittingPoints + 1
local dPartMinX = Part.b3Part:getMin():getX()
local dPartMaxX = Part.b3Part:getMax():getX()
for j = 1, nParts do
local dNextSplitX = dPartMinX
local dPreviousSplitX = dPartMaxX
if j ~= 1 then
dPreviousSplitX = Part.SplittingPoints[j - 1]:getX()
elseif j ~= nParts then
dNextSplitX = Part.SplittingPoints[j]:getX()
end
if MachiningCurrent.ptCenter:getX() > dNextSplitX - 10 * GEO.EPS_SMALL and MachiningCurrent.ptCenter:getX() < dPreviousSplitX + 10 * GEO.EPS_SMALL then
MachiningCurrent.nPartSegment = j
end
end
end
end
return MACHININGS
end
-------------------------------------------------------------------------------------------------------------
local function SortMachiningsBySegment( MachiningA, MachiningB)
if MachiningA.Machining.nSegment > MachiningB.Machining.nSegment then
if MachiningA.Machining.nFeatureSegment > MachiningB.Machining.nFeatureSegment then
return false
elseif MachiningB.Machining.nSegment > MachiningA.Machining.nSegment then
elseif MachiningB.Machining.nFeatureSegment > MachiningA.Machining.nFeatureSegment then
return true
end
@@ -1402,6 +1422,7 @@ function BeamExec.ProcessMachinings( PROCESSINGS, PARTS)
MACHININGS = CalculateMachinings( vProc, PARTS[nPart])
-- TODO riordinare lavorazioni ottimizzando cambio utensile/spezzone ecc..., mantenendo dipendenze definite prima
MACHININGS = PrepareMachiningsForSorting( PARTS[nPart])
--table.sort( MACHININGS, SortMachinings)
-- MACHININGS = OrderMachining( MACHININGS, PARTS[nPart])