DataBeam :
- migliorato ordinamento fori - riunite FindMilling, .... in una unica libreria - altre piccole migliorie.
This commit is contained in:
+46
-20
@@ -1,4 +1,4 @@
|
||||
-- BeamExec.lua by Egaltech s.r.l. 2019/01/07
|
||||
-- BeamExec.lua by Egaltech s.r.l. 2019/04/26
|
||||
-- Libreria esecuzione lavorazioni per Travi
|
||||
|
||||
-- Tabella per definizione modulo
|
||||
@@ -13,15 +13,18 @@ _G.package.loaded.CutData = nil
|
||||
_G.package.loaded.MillingData = nil
|
||||
_G.package.loaded.PocketingData = nil
|
||||
_G.package.loaded.DrillData = nil
|
||||
_G.package.loaded.SawingData = nil
|
||||
local BD = require( 'BeamData')
|
||||
|
||||
-- Carico le librerie
|
||||
_G.package.loaded.MachiningLib = nil
|
||||
local BM = require( 'MachiningLib')
|
||||
_G.package.loaded.BeamLib = nil
|
||||
local BL = require( 'BeamLib')
|
||||
_G.package.loaded.DiceCut = nil
|
||||
local DC = require( 'DiceCut')
|
||||
_G.package.loaded.TwoFacesBySaw = nil
|
||||
local DC = require( 'TwoFacesBySaw')
|
||||
_G.package.loaded.FacesBySaw = nil
|
||||
local Fbs = require( 'FacesBySaw')
|
||||
_G.package.loaded.ProcessHeadCut = nil
|
||||
local Hcut= require( 'ProcessHeadCut')
|
||||
_G.package.loaded.ProcessSplit = nil
|
||||
@@ -280,11 +283,14 @@ local function CollectFeatures( PartId, b3Raw, dCurrOvmH)
|
||||
Proc.Fct = EgtSurfTmFacetCount( ProcId) or 0
|
||||
Proc.Head = IsHeadFeature( Proc, b3Raw, dCurrOvmH)
|
||||
Proc.Tail = IsTailFeature( Proc, b3Raw)
|
||||
Proc.Diam = 0
|
||||
Proc.Fcs = 0
|
||||
Proc.Fce = 0
|
||||
table.insert( vProc, Proc)
|
||||
-- se foro
|
||||
if Drill.Identify( Proc) then
|
||||
-- assegno diametro
|
||||
Proc.Diam = EgtGetInfo( Proc.Id, 'P12', 'd') or 0
|
||||
-- assegno faccia di entrata e uscita (dati tabelle sempre per riferimento)
|
||||
Proc.Fcs = EgtGetInfo( Proc.Id, 'FCS', 'i') or 0
|
||||
Proc.Fce = EgtGetInfo( Proc.Id, 'FCE', 'i') or 0
|
||||
@@ -302,6 +308,7 @@ local function CollectFeatures( PartId, b3Raw, dCurrOvmH)
|
||||
Proc2.Fct = Proc.Fct
|
||||
Proc2.Head = Proc.Head
|
||||
Proc2.Tail = Drill.IsTailFeature( Proc2, b3Raw)
|
||||
Proc2.Diam = Proc.Diam
|
||||
Proc2.Fcs = Proc.Fce
|
||||
Proc2.Fce = Proc.Fcs
|
||||
table.insert( vProc, Proc2)
|
||||
@@ -338,18 +345,22 @@ local function OrderFeatures( vProc, b3Raw)
|
||||
end
|
||||
-- se primo è foro e l'altro no, lo penalizzo
|
||||
if B1.Prc == 40 and B2.Prc ~= 40 then
|
||||
return B1.Box:getCenter():getX() - 300 > B2.Box:getCenter():getX()
|
||||
return B1.Box:getCenter():getX() > B2.Box:getMax():getX() + 100
|
||||
end
|
||||
-- se secondo è foro e l'altro no, lo penalizzo
|
||||
if B2.Prc == 40 and B1.Prc ~= 40 then
|
||||
return B1.Box:getCenter():getX() + 300 > B2.Box:getCenter():getX()
|
||||
return B1.Box:getMax():getX() + 100 > B2.Box:getCenter():getX()
|
||||
end
|
||||
-- se sono fori e hanno posizione praticamente uguale ordino secondo la faccia di inizio (Fcs)
|
||||
if B1.Prc == 40 and B2.Prc == 40 and abs( B1.Box:getCenter():getX() - B2.Box:getCenter():getX()) < 300 then
|
||||
if B1.Fcs == B2.Fcs then
|
||||
return B1.Box:getCenter():getX() > B2.Box:getCenter():getX()
|
||||
-- se sono fori e hanno posizione praticamente uguale ordino secondo diametro e faccia di inizio (Fcs)
|
||||
if B1.Prc == 40 and B2.Prc == 40 and abs( B1.Box:getCenter():getX() - B2.Box:getCenter():getX()) < 200 then
|
||||
if abs( B1.Diam - B2.Diam) < 1.0 then
|
||||
if B1.Fcs == B2.Fcs then
|
||||
return B1.Box:getCenter():getX() > B2.Box:getCenter():getX()
|
||||
else
|
||||
return B1.Fcs > B2.Fcs
|
||||
end
|
||||
else
|
||||
return B1.Fcs > B2.Fcs
|
||||
return ( B1.Diam > B2.Diam)
|
||||
end
|
||||
end
|
||||
-- se primo è taglio longitudinale completo, dopo tutte le altre feature non di coda
|
||||
@@ -376,6 +387,22 @@ local function OrderFeatures( vProc, b3Raw)
|
||||
end
|
||||
-- eseguo ordinamento
|
||||
table.sort( vProc, CompareFeatures)
|
||||
-- riunisco fori con lo stesso diametro e non troppo lontani
|
||||
for i = 1, #vProc do
|
||||
local ProcI = vProc[i]
|
||||
if ProcI.Prc == 40 then
|
||||
for j = i + 1, #vProc do
|
||||
local ProcJ = vProc[j]
|
||||
if ProcJ.Prc == 40 and ProcJ.Head == ProcI.Head and ProcJ.Tail == ProcI.Tail and
|
||||
abs( ProcJ.Diam - ProcI.Diam) < 1.0 and abs( ProcJ.Box:getCenter():getX() - ProcI.Box:getCenter():getX()) < 600.0 then
|
||||
if j > i + 1 then
|
||||
table.insert( vProc, i + 1, table.remove( vProc, j))
|
||||
end
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-------------------------------------------------------------------------------------------------------------
|
||||
@@ -449,17 +476,16 @@ local function ClassifyFeatures( vProc, b3Raw)
|
||||
if bOk then
|
||||
-- non ammessa feature di testa o di coda da lavorare ribaltata
|
||||
if ( Proc.Head or Proc.Tail) and bDown then
|
||||
Proc.On = false
|
||||
Proc.Flg = 0
|
||||
Proc.Down = true
|
||||
bAllOk = false
|
||||
-- caso normale
|
||||
else
|
||||
Proc.On = true
|
||||
Proc.Down = bDown
|
||||
if bDown then bSomeDown = true end
|
||||
end
|
||||
else
|
||||
Proc.On = false
|
||||
Proc.Flg = 0
|
||||
bAllOk = false
|
||||
end
|
||||
end
|
||||
@@ -474,12 +500,12 @@ end
|
||||
local function PrintFeatures( vProc, b3Raw)
|
||||
EgtOutLog( ' RawBox=' .. tostring( b3Raw))
|
||||
for i = 1, #vProc do
|
||||
EgtOutLog( ' Proc=' .. string.format( '%3d', vProc[i].Id) .. ' Grp=' .. string.format( '%1d', vProc[i].Grp) .. ' Prc=' .. string.format( '%3d', vProc[i].Prc) ..
|
||||
' On=' .. EgtIf( vProc[i].On, 'T', 'F') .. ' Flg=' .. string.format( '%2d', vProc[i].Flg) .. ' Fcse=' .. string.format( '%1d,%1d', vProc[i].Fcs, vProc[i].Fce) ..
|
||||
' Down=' .. EgtIf( vProc[i].Down, 'T', 'F') .. ' Head=' .. EgtIf( vProc[i].Head, 'T', 'F') .. ' Tail=' .. EgtIf( vProc[i].Tail, 'T', 'F') ..
|
||||
' Fct=' .. string.format( '%2d', vProc[i].Fct) .. ' Box=' .. tostring( vProc[i].Box))
|
||||
local Proc = vProc[i]
|
||||
local sOut = string.format( ' Proc=%3d Grp=%1d Prc=%3d Flg=%2d Down=%s Head=%s Tail=%s Fcse=%1d,%1d Diam=%.2f Fct=%2d Box=%s',
|
||||
Proc.Id, Proc.Grp, Proc.Prc, Proc.Flg, EgtIf( Proc.Down, 'T', 'F'), EgtIf( Proc.Head, 'T', 'F'), EgtIf( Proc.Tail, 'T', 'F'),
|
||||
Proc.Fcs, Proc.Fce, Proc.Diam, Proc.Fct, tostring( Proc.Box))
|
||||
EgtOutLog( sOut)
|
||||
end
|
||||
return vProc
|
||||
end
|
||||
|
||||
-------------------------------------------------------------------------------------------------------------
|
||||
@@ -669,7 +695,7 @@ function BeamExec.ProcessFeatures()
|
||||
for i = 1, #vProc do
|
||||
-- creo la lavorazione
|
||||
local Proc = vProc[i]
|
||||
if Proc.On and Proc.Down then
|
||||
if Proc.Flg ~= 0 and Proc.Down then
|
||||
local bOk, sErr = AddFeatureMachining( Proc, nPhase, nRawId, nPartId, dCurrOvmH, b3Raw)
|
||||
if not bOk then
|
||||
bAddOk = false
|
||||
@@ -692,7 +718,7 @@ function BeamExec.ProcessFeatures()
|
||||
for i = 1, #vProc do
|
||||
-- creo la lavorazione
|
||||
local Proc = vProc[i]
|
||||
if Proc.On and not Proc.Down then
|
||||
if Proc.Flg ~= 0 and not Proc.Down then
|
||||
local bOk, sErr, bNewPhase = AddFeatureMachining( Proc, nPhase, nRawId, nPartId, dCurrOvmH, b3Raw)
|
||||
if not bOk then
|
||||
bAddOk = false
|
||||
|
||||
Reference in New Issue
Block a user