DataBeam :
- piccoli aggiustamenti e affinamenti.
This commit is contained in:
+203
-203
@@ -1,4 +1,4 @@
|
||||
-- BeamExec.lua by Egaltech s.r.l. 2022/05/04
|
||||
-- BeamExec.lua by Egaltech s.r.l. 2022/06/25
|
||||
-- Libreria esecuzione lavorazioni per Travi
|
||||
-- 2019/07/11 Aggiunta gestione stato rotazione di feature per TS3.
|
||||
-- 2019/09/04 Corretto controllo feature di testa e coda con sovramateriale di testa elevato.
|
||||
@@ -27,7 +27,8 @@
|
||||
-- 2021/12/20 Ulteriore correzione a CompareFeature (caso con entrambe senza geometria).
|
||||
-- 2022/05/04 Nell'ordinamento quando si confrontano i box delle feature aggiunta verifica preliminare della loro validità.
|
||||
-- 2022/05/31 Aggiunta gestione sovramateriale per sezioni alte e larghe e informazione di eventuale creazione nuova fase dalla AddFeatureMachining.
|
||||
-- 2022/06/10 Per sezioni alte e larghe modificata la gestione del sovramateriale per considerare la presenza di feature preesistenti e eventuale parametro Q05, che determinano la presenza o meno della finitura.
|
||||
-- 2022/06/10 Per sezioni alte e larghe modificata la gestione del sovramateriale per considerare la presenza di feature preesistenti ed
|
||||
-- eventuale parametro Q05, che determinano la presenza o meno della finitura.
|
||||
-- Create le funzioni AnalyzeHeadFeatures e AnalyzeTailFeatures. Spostate più in alto le funzioni CollectFeatures, isHeadFeature e isTailFeature.
|
||||
|
||||
-- Tabella per definizione modulo
|
||||
@@ -122,195 +123,12 @@ local FreeContour = require( 'ProcessFreeContour')
|
||||
local Decor = require( 'ProcessDecor')
|
||||
|
||||
EgtOutLog( ' BeamExec started', 1)
|
||||
|
||||
EgtMdbSetGeneralParam( MCH_GP.MAXDEPTHSAFE, BD.COLL_SIC)
|
||||
EgtMdbSave()
|
||||
|
||||
-------------------------------------------------------------------------------------------------------------
|
||||
local function IsHeadFeature( Proc, b3Raw, dCurrOvmH)
|
||||
-- feature sempre di testa o coda per il gruppo
|
||||
if Proc.Grp == 1 or Proc.Grp == 2 then
|
||||
return ( Proc.Box:getCenter():getX() > b3Raw:getCenter():getX() - 0.5 * dCurrOvmH)
|
||||
end
|
||||
-- feature sempre di testa o coda nonostante il gruppo
|
||||
if ( Proc.Grp == 3 or Proc.Grp == 4) and
|
||||
( Proc.Prc == 38 or Proc.Prc == 51 or Proc.Prc == 56 or Proc.Prc == 100 or Proc.Prc == 101 or Proc.Prc == 102 or Proc.Prc == 103 or Proc.Prc == 106) then
|
||||
return ( Proc.Box:getCenter():getX() > b3Raw:getCenter():getX() - 0.5 * dCurrOvmH)
|
||||
end
|
||||
-- gestioni speciali
|
||||
if LapJoint.Identify( Proc) then
|
||||
return LapJoint.IsHeadFeature( Proc, b3Raw, dCurrOvmH)
|
||||
end
|
||||
if Drill.Identify( Proc) then
|
||||
return Drill.IsHeadFeature( Proc, b3Raw, dCurrOvmH)
|
||||
end
|
||||
if RoundArch.Identify( Proc) then
|
||||
return RoundArch.IsHeadFeature( Proc, b3Raw, dCurrOvmH)
|
||||
end
|
||||
if Dovetail.Identify( Proc) then
|
||||
return Dovetail.IsHeadFeature( Proc, b3Raw, dCurrOvmH)
|
||||
end
|
||||
if FreeContour.Identify( Proc) then
|
||||
return FreeContour.IsHeadFeature( Proc, b3Raw, dCurrOvmH)
|
||||
end
|
||||
-- non è di testa
|
||||
return false
|
||||
end
|
||||
|
||||
-------------------------------------------------------------------------------------------------------------
|
||||
local function IsTailFeature( Proc, b3Raw, dCurrOvmH, dCurrOvmT)
|
||||
-- lunghezza di riferimento per spostare le feature di coda appena prima
|
||||
local dAdvTailLen = BD.LEN_VERY_SHORT_PART or BD.LEN_SHORT_PART
|
||||
-- feature sempre di testa o coda per il gruppo (se non troppo lunga)
|
||||
if Proc.Grp == 1 or Proc.Grp == 2 then
|
||||
-- se abilitato avanzamento lavorazione feature di coda e pezzo corto (quindi a caduta) e feature in coda
|
||||
if BD.ADVANCE_TAIL_CUT and b3Raw:getDimX() < dAdvTailLen and Proc.Box:getCenter():getX() < b3Raw:getCenter():getX() - 0.5 * dCurrOvmH then
|
||||
-- se taglio, lo avanzo
|
||||
if Proc.Prc == 10 then
|
||||
return false, true
|
||||
end
|
||||
end
|
||||
-- standard
|
||||
return ( Proc.Box:getCenter():getX() < b3Raw:getCenter():getX() - 0.5 * dCurrOvmH and Proc.Box:getDimX() < BD.MAX_LEN_HTFEA)
|
||||
end
|
||||
-- feature sempre di testa o coda nonostante il gruppo
|
||||
if ( Proc.Grp == 3 or Proc.Grp == 4) and
|
||||
( Proc.Prc == 38 or Proc.Prc == 51 or Proc.Prc == 56 or Proc.Prc == 100 or Proc.Prc == 101 or Proc.Prc == 102 or Proc.Prc == 103 or Proc.Prc == 106) then
|
||||
-- se abilitato avanzamento lavorazione feature di coda e pezzo corto (quindi a caduta) e feature in coda
|
||||
if BD.ADVANCE_TAIL_CUT and b3Raw:getDimX() < dAdvTailLen and Proc.Box:getCenter():getX() < b3Raw:getCenter():getX() - 0.5 * dCurrOvmH then
|
||||
-- se profilo front solo con smusso, lo avanzo
|
||||
if Proc.Prc == 100 and ProfFront.OnlyChamfer( Proc) then
|
||||
return false, true
|
||||
end
|
||||
-- se profilo concavo solo con smusso, lo avanzo
|
||||
if Proc.Prc == 101 and ProfConcave.OnlyChamfer( Proc) then
|
||||
return false, true
|
||||
end
|
||||
-- se profilo convesso solo con smusso, lo avanzo
|
||||
if Proc.Prc == 102 and ProfConvex.OnlyChamfer( Proc) then
|
||||
return false, true
|
||||
end
|
||||
-- se profilo caudato solo con smusso, lo avanzo
|
||||
if Proc.Prc == 103 and ProfCamb.OnlyChamfer( Proc) then
|
||||
return false, true
|
||||
end
|
||||
-- se profilo head solo con smusso, lo avanzo
|
||||
if Proc.Prc == 106 and ProfHead.OnlyChamfer( Proc) then
|
||||
return false, true
|
||||
end
|
||||
end
|
||||
-- standard
|
||||
return ( Proc.Box:getCenter():getX() < b3Raw:getCenter():getX() - 0.5 * dCurrOvmH)
|
||||
end
|
||||
-- gestioni speciali
|
||||
if LapJoint.Identify( Proc) then
|
||||
return LapJoint.IsTailFeature( Proc, b3Raw)
|
||||
end
|
||||
if Drill.Identify( Proc) then
|
||||
return Drill.IsTailFeature( Proc, b3Raw, dCurrOvmT)
|
||||
end
|
||||
if DtMortise.Identify( Proc) then
|
||||
return DtMortise.IsTailFeature( Proc, b3Raw)
|
||||
end
|
||||
if RoundArch.Identify( Proc) then
|
||||
return RoundArch.IsTailFeature( Proc, b3Raw)
|
||||
end
|
||||
if Dovetail.Identify( Proc) then
|
||||
return Dovetail.IsTailFeature( Proc, b3Raw)
|
||||
end
|
||||
if FreeContour.Identify( Proc) then
|
||||
return FreeContour.IsTailFeature( Proc, b3Raw)
|
||||
end
|
||||
-- non è di coda
|
||||
return false
|
||||
end
|
||||
|
||||
-------------------------------------------------------------------------------------------------------------
|
||||
local function CollectFeatures( PartId, b3Raw, dCurrOvmH, dCurrOvmT)
|
||||
-- recupero le feature
|
||||
local vProc = {}
|
||||
local LayerId = {}
|
||||
LayerId[1] = BL.GetAddGroup( PartId)
|
||||
LayerId[2] = EgtGetFirstNameInGroup( PartId or GDB_ID.NULL, 'Processings')
|
||||
for nInd = 1, 2 do
|
||||
local ProcId = EgtGetFirstInGroup( LayerId[nInd] or GDB_ID.NULL)
|
||||
while ProcId do
|
||||
local nEntType = EgtGetType( ProcId)
|
||||
if nEntType == GDB_TY.SRF_MESH or nEntType == GDB_TY.EXT_TEXT or
|
||||
nEntType == GDB_TY.CRV_LINE or nEntType == GDB_TY.CRV_ARC or nEntType == GDB_TY.CRV_BEZ or nEntType == GDB_TY.CRV_COMPO then
|
||||
local nGrp = EgtGetInfo( ProcId, 'GRP', 'i')
|
||||
local nPrc = EgtGetInfo( ProcId, 'PRC', 'i')
|
||||
local nDo = EgtGetInfo( ProcId, 'DO', 'i') or 1
|
||||
local nCutId = EgtGetInfo( EgtGetParent( EgtGetParent( ProcId)), 'CUTID', 'i') or 0
|
||||
local nTaskId = EgtGetInfo( ProcId, 'TASKID', 'i') or 0
|
||||
if nGrp and nPrc and nDo == 1 then
|
||||
local Proc = {}
|
||||
Proc.Id = ProcId
|
||||
Proc.Grp = nGrp
|
||||
Proc.Prc = nPrc
|
||||
Proc.Flg = 1
|
||||
Proc.Fct = EgtSurfTmFacetCount( ProcId) or 0
|
||||
Proc.Diam = 0
|
||||
Proc.Fcs = 0
|
||||
Proc.Fce = 0
|
||||
Proc.CutId = nCutId
|
||||
Proc.TaskId = nTaskId
|
||||
Proc.Box = EgtGetBBoxGlob( ProcId, GDB_BB.STANDARD)
|
||||
if Proc.Box and not Proc.Box:isEmpty() then
|
||||
Proc.Head = IsHeadFeature( Proc, b3Raw, dCurrOvmH)
|
||||
Proc.Tail, Proc.AdvTail = IsTailFeature( Proc, b3Raw, dCurrOvmH, dCurrOvmT)
|
||||
table.insert( vProc, Proc)
|
||||
-- se foro
|
||||
if Drill.Identify( Proc) then
|
||||
-- assegno diametro e facce di ingresso e uscita (dati tabelle sempre per riferimento)
|
||||
Proc.Diam, Proc.Fcs, Proc.Fce = Drill.GetData( Proc, b3Raw)
|
||||
-- verifico se necessaria seconda lavorazione da parte opposta per foro più lungo della punta
|
||||
if Drill.Split( Proc, b3Raw) then
|
||||
-- aggiorno flags prima parte foro (dati tabelle sempre per riferimento)
|
||||
Proc.Flg = 2
|
||||
Proc.Head = Drill.IsHeadFeature( Proc, b3Raw, dCurrOvmH)
|
||||
Proc.Tail = Drill.IsTailFeature( Proc, b3Raw, dCurrOvmH, dCurrOvmT)
|
||||
-- definisco dati seconda parte
|
||||
local Proc2 = {}
|
||||
Proc2.Id = ProcId
|
||||
Proc2.Grp = nGrp
|
||||
Proc2.Prc = nPrc
|
||||
Proc2.Flg = -2
|
||||
Proc2.Box = BBox3d( Proc.Box)
|
||||
Proc2.Fct = Proc.Fct
|
||||
Proc2.Diam = Proc.Diam
|
||||
Proc2.Head = Drill.IsHeadFeature( Proc2, b3Raw, dCurrOvmH)
|
||||
Proc2.Tail = Drill.IsTailFeature( Proc2, b3Raw, dCurrOvmH)
|
||||
Proc2.Fcs = Proc.Fce
|
||||
Proc2.Fce = Proc.Fcs
|
||||
Proc2.CutId = Proc.CutId
|
||||
Proc2.TaskId = Proc.TaskId
|
||||
table.insert( vProc, Proc2)
|
||||
end
|
||||
-- se BlockHaus HalfLap
|
||||
elseif Proc.Prc == 37 then
|
||||
local nFacInd = BL.GetFaceWithMostAdj( Proc.Id, PartId)
|
||||
if nFacInd then
|
||||
local vtN = EgtSurfTmFacetNormVersor( Proc.Id, nFacInd, GDB_ID.ROOT)
|
||||
if vtN then
|
||||
Proc.vtN = Vector3d( vtN)
|
||||
end
|
||||
end
|
||||
end
|
||||
else
|
||||
Proc.Head = false
|
||||
Proc.Tail = false
|
||||
Proc.Flg = 0
|
||||
table.insert( vProc, Proc)
|
||||
EgtOutLog( ' Feature ' .. tostring( Proc.Id) .. ' is empty (no geometry)')
|
||||
end
|
||||
end
|
||||
end
|
||||
ProcId = EgtGetNext( ProcId)
|
||||
end
|
||||
end
|
||||
return vProc
|
||||
end
|
||||
|
||||
-- *** Inserimento delle travi nel grezzo ***
|
||||
-------------------------------------------------------------------------------------------------------------
|
||||
local function AnalyzeHeadFeatures( b3Solid, vProc, dRawW, dRawH)
|
||||
local nReplacedFeatureId = nil
|
||||
@@ -328,7 +146,8 @@ local function AnalyzeHeadFeatures( b3Solid, vProc, dRawW, dRawH)
|
||||
end
|
||||
if Proc.Head and Proc.Id ~= nReplacedFeatureId and Proc.Prc ~= 340 then
|
||||
-- controllo se la feature taglia l'intera sezione; in caso positivo la finitura non è necessaria
|
||||
bHeadFinishingNeeded = not ((abs(Proc.Box:getDimY() - dRawW) < 10 * GEO.EPS_SMALL or Proc.Box:getDimY() > dRawW) and (abs(Proc.Box:getDimZ() - dRawH) < 10 * GEO.EPS_SMALL or Proc.Box:getDimZ() > dRawH))
|
||||
bHeadFinishingNeeded = not (( abs( Proc.Box:getDimY() - dRawW) < 10 * GEO.EPS_SMALL or Proc.Box:getDimY() > dRawW) and
|
||||
( abs( Proc.Box:getDimZ() - dRawH) < 10 * GEO.EPS_SMALL or Proc.Box:getDimZ() > dRawH))
|
||||
end
|
||||
end
|
||||
return bHeadFinishingNeeded, nReplacedFeatureId
|
||||
@@ -351,24 +170,19 @@ local function AnalyzeTailFeatures( b3Solid, vProc, dRawW, dRawH)
|
||||
end
|
||||
if Proc.Tail and Proc.Id ~= nReplacedFeatureId and Proc.Prc ~= 350 then
|
||||
-- controllo se la feature taglia l'intera sezione; in caso positivo la finitura non è necessaria
|
||||
bTailFinishingNeeded = not ((abs(Proc.Box:getDimY() - dRawW) < 10 * GEO.EPS_SMALL or Proc.Box:getDimY() > dRawW) and (abs(Proc.Box:getDimZ() - dRawH) < 10 * GEO.EPS_SMALL or Proc.Box:getDimZ() > dRawH))
|
||||
bTailFinishingNeeded = not (( abs( Proc.Box:getDimY() - dRawW) < 10 * GEO.EPS_SMALL or Proc.Box:getDimY() > dRawW) and
|
||||
( abs( Proc.Box:getDimZ() - dRawH) < 10 * GEO.EPS_SMALL or Proc.Box:getDimZ() > dRawH))
|
||||
end
|
||||
end
|
||||
return bTailFinishingNeeded, nReplacedFeatureId
|
||||
end
|
||||
|
||||
-------------------------------------------------------------------------------------------------------------
|
||||
-- *** Inserimento delle travi nel grezzo ***
|
||||
-------------------------------------------------------------------------------------------------------------
|
||||
function BeamExec.ProcessBeams( dRawW, dRawH, dRawL, dOvmHead, vBeam, bMachGroupOk)
|
||||
|
||||
if not BD.OVM_BLADE_HBEAM then
|
||||
BD.OVM_BLADE_HBEAM = 11
|
||||
end
|
||||
|
||||
if not BD.OVM_CHAIN_HBEAM then
|
||||
BD.OVM_CHAIN_HBEAM = 8
|
||||
end
|
||||
|
||||
-- default per nuove costanti qualora non definite
|
||||
BD.OVM_BLADE_HBEAM = ( BD.OVM_BLADE_HBEAM or 11)
|
||||
BD.OVM_CHAIN_HBEAM = ( BD.OVM_CHAIN_HBEAM or 8)
|
||||
|
||||
-- Determinazione minimo grezzo scaricabile
|
||||
BeamExec.CalcMinUnloadableRaw( dRawW, dRawH)
|
||||
@@ -562,6 +376,105 @@ local function Verify90DegRotation( nRawId)
|
||||
( dRawH < BD.MAX_WIDTH2 + 10 * GEO.EPS_SMALL and dRawW < BD.MAX_HEIGHT2 + 10 * GEO.EPS_SMALL)
|
||||
end
|
||||
|
||||
-------------------------------------------------------------------------------------------------------------
|
||||
local function IsHeadFeature( Proc, b3Raw, dCurrOvmH)
|
||||
-- feature sempre di testa o coda per il gruppo
|
||||
if Proc.Grp == 1 or Proc.Grp == 2 then
|
||||
return ( Proc.Box:getCenter():getX() > b3Raw:getCenter():getX() - 0.5 * dCurrOvmH)
|
||||
end
|
||||
-- feature sempre di testa o coda nonostante il gruppo
|
||||
if ( Proc.Grp == 3 or Proc.Grp == 4) and
|
||||
( Proc.Prc == 38 or Proc.Prc == 51 or Proc.Prc == 56 or Proc.Prc == 100 or Proc.Prc == 101 or Proc.Prc == 102 or Proc.Prc == 103 or Proc.Prc == 106) then
|
||||
return ( Proc.Box:getCenter():getX() > b3Raw:getCenter():getX() - 0.5 * dCurrOvmH)
|
||||
end
|
||||
-- gestioni speciali
|
||||
if LapJoint.Identify( Proc) then
|
||||
return LapJoint.IsHeadFeature( Proc, b3Raw, dCurrOvmH)
|
||||
end
|
||||
if Drill.Identify( Proc) then
|
||||
return Drill.IsHeadFeature( Proc, b3Raw, dCurrOvmH)
|
||||
end
|
||||
if RoundArch.Identify( Proc) then
|
||||
return RoundArch.IsHeadFeature( Proc, b3Raw, dCurrOvmH)
|
||||
end
|
||||
if Dovetail.Identify( Proc) then
|
||||
return Dovetail.IsHeadFeature( Proc, b3Raw, dCurrOvmH)
|
||||
end
|
||||
if FreeContour.Identify( Proc) then
|
||||
return FreeContour.IsHeadFeature( Proc, b3Raw, dCurrOvmH)
|
||||
end
|
||||
-- non è di testa
|
||||
return false
|
||||
end
|
||||
|
||||
-------------------------------------------------------------------------------------------------------------
|
||||
local function IsTailFeature( Proc, b3Raw, dCurrOvmH, dCurrOvmT)
|
||||
-- lunghezza di riferimento per spostare le feature di coda appena prima
|
||||
local dAdvTailLen = BD.LEN_VERY_SHORT_PART or BD.LEN_SHORT_PART
|
||||
-- feature sempre di testa o coda per il gruppo (se non troppo lunga)
|
||||
if Proc.Grp == 1 or Proc.Grp == 2 then
|
||||
-- se abilitato avanzamento lavorazione feature di coda e pezzo corto (quindi a caduta) e feature in coda
|
||||
if BD.ADVANCE_TAIL_CUT and b3Raw:getDimX() < dAdvTailLen and Proc.Box:getCenter():getX() < b3Raw:getCenter():getX() - 0.5 * dCurrOvmH then
|
||||
-- se taglio, lo avanzo
|
||||
if Proc.Prc == 10 then
|
||||
return false, true
|
||||
end
|
||||
end
|
||||
-- standard
|
||||
return ( Proc.Box:getCenter():getX() < b3Raw:getCenter():getX() - 0.5 * dCurrOvmH and Proc.Box:getDimX() < BD.MAX_LEN_HTFEA)
|
||||
end
|
||||
-- feature sempre di testa o coda nonostante il gruppo
|
||||
if ( Proc.Grp == 3 or Proc.Grp == 4) and
|
||||
( Proc.Prc == 38 or Proc.Prc == 51 or Proc.Prc == 56 or Proc.Prc == 100 or Proc.Prc == 101 or Proc.Prc == 102 or Proc.Prc == 103 or Proc.Prc == 106) then
|
||||
-- se abilitato avanzamento lavorazione feature di coda e pezzo corto (quindi a caduta) e feature in coda
|
||||
if BD.ADVANCE_TAIL_CUT and b3Raw:getDimX() < dAdvTailLen and Proc.Box:getCenter():getX() < b3Raw:getCenter():getX() - 0.5 * dCurrOvmH then
|
||||
-- se profilo front solo con smusso, lo avanzo
|
||||
if Proc.Prc == 100 and ProfFront.OnlyChamfer( Proc) then
|
||||
return false, true
|
||||
end
|
||||
-- se profilo concavo solo con smusso, lo avanzo
|
||||
if Proc.Prc == 101 and ProfConcave.OnlyChamfer( Proc) then
|
||||
return false, true
|
||||
end
|
||||
-- se profilo convesso solo con smusso, lo avanzo
|
||||
if Proc.Prc == 102 and ProfConvex.OnlyChamfer( Proc) then
|
||||
return false, true
|
||||
end
|
||||
-- se profilo caudato solo con smusso, lo avanzo
|
||||
if Proc.Prc == 103 and ProfCamb.OnlyChamfer( Proc) then
|
||||
return false, true
|
||||
end
|
||||
-- se profilo head solo con smusso, lo avanzo
|
||||
if Proc.Prc == 106 and ProfHead.OnlyChamfer( Proc) then
|
||||
return false, true
|
||||
end
|
||||
end
|
||||
-- standard
|
||||
return ( Proc.Box:getCenter():getX() < b3Raw:getCenter():getX() - 0.5 * dCurrOvmH)
|
||||
end
|
||||
-- gestioni speciali
|
||||
if LapJoint.Identify( Proc) then
|
||||
return LapJoint.IsTailFeature( Proc, b3Raw)
|
||||
end
|
||||
if Drill.Identify( Proc) then
|
||||
return Drill.IsTailFeature( Proc, b3Raw, dCurrOvmT)
|
||||
end
|
||||
if DtMortise.Identify( Proc) then
|
||||
return DtMortise.IsTailFeature( Proc, b3Raw)
|
||||
end
|
||||
if RoundArch.Identify( Proc) then
|
||||
return RoundArch.IsTailFeature( Proc, b3Raw)
|
||||
end
|
||||
if Dovetail.Identify( Proc) then
|
||||
return Dovetail.IsTailFeature( Proc, b3Raw)
|
||||
end
|
||||
if FreeContour.Identify( Proc) then
|
||||
return FreeContour.IsTailFeature( Proc, b3Raw)
|
||||
end
|
||||
-- non è di coda
|
||||
return false
|
||||
end
|
||||
|
||||
-------------------------------------------------------------------------------------------------------------
|
||||
local function PrintFeatures( vProc, b3Raw)
|
||||
EgtOutLog( ' RawBox=' .. tostring( b3Raw))
|
||||
@@ -581,6 +494,93 @@ local function PrintFeatures( vProc, b3Raw)
|
||||
end
|
||||
end
|
||||
|
||||
-------------------------------------------------------------------------------------------------------------
|
||||
local function CollectFeatures( PartId, b3Raw, dCurrOvmH, dCurrOvmT)
|
||||
-- recupero le feature
|
||||
local vProc = {}
|
||||
local LayerId = {}
|
||||
LayerId[1] = BL.GetAddGroup( PartId)
|
||||
LayerId[2] = EgtGetFirstNameInGroup( PartId or GDB_ID.NULL, 'Processings')
|
||||
for nInd = 1, 2 do
|
||||
local ProcId = EgtGetFirstInGroup( LayerId[nInd] or GDB_ID.NULL)
|
||||
while ProcId do
|
||||
local nEntType = EgtGetType( ProcId)
|
||||
if nEntType == GDB_TY.SRF_MESH or nEntType == GDB_TY.EXT_TEXT or
|
||||
nEntType == GDB_TY.CRV_LINE or nEntType == GDB_TY.CRV_ARC or nEntType == GDB_TY.CRV_BEZ or nEntType == GDB_TY.CRV_COMPO then
|
||||
local nGrp = EgtGetInfo( ProcId, 'GRP', 'i')
|
||||
local nPrc = EgtGetInfo( ProcId, 'PRC', 'i')
|
||||
local nDo = EgtGetInfo( ProcId, 'DO', 'i') or 1
|
||||
local nCutId = EgtGetInfo( EgtGetParent( EgtGetParent( ProcId)), 'CUTID', 'i') or 0
|
||||
local nTaskId = EgtGetInfo( ProcId, 'TASKID', 'i') or 0
|
||||
if nGrp and nPrc and nDo == 1 then
|
||||
local Proc = {}
|
||||
Proc.Id = ProcId
|
||||
Proc.Grp = nGrp
|
||||
Proc.Prc = nPrc
|
||||
Proc.Flg = 1
|
||||
Proc.Fct = EgtSurfTmFacetCount( ProcId) or 0
|
||||
Proc.Diam = 0
|
||||
Proc.Fcs = 0
|
||||
Proc.Fce = 0
|
||||
Proc.CutId = nCutId
|
||||
Proc.TaskId = nTaskId
|
||||
Proc.Box = EgtGetBBoxGlob( ProcId, GDB_BB.STANDARD)
|
||||
if Proc.Box and not Proc.Box:isEmpty() then
|
||||
Proc.Head = IsHeadFeature( Proc, b3Raw, dCurrOvmH)
|
||||
Proc.Tail, Proc.AdvTail = IsTailFeature( Proc, b3Raw, dCurrOvmH, dCurrOvmT)
|
||||
table.insert( vProc, Proc)
|
||||
-- se foro
|
||||
if Drill.Identify( Proc) then
|
||||
-- assegno diametro e facce di ingresso e uscita (dati tabelle sempre per riferimento)
|
||||
Proc.Diam, Proc.Fcs, Proc.Fce = Drill.GetData( Proc, b3Raw)
|
||||
-- verifico se necessaria seconda lavorazione da parte opposta per foro più lungo della punta
|
||||
if Drill.Split( Proc, b3Raw) then
|
||||
-- aggiorno flags prima parte foro (dati tabelle sempre per riferimento)
|
||||
Proc.Flg = 2
|
||||
Proc.Head = Drill.IsHeadFeature( Proc, b3Raw, dCurrOvmH)
|
||||
Proc.Tail = Drill.IsTailFeature( Proc, b3Raw, dCurrOvmH, dCurrOvmT)
|
||||
-- definisco dati seconda parte
|
||||
local Proc2 = {}
|
||||
Proc2.Id = ProcId
|
||||
Proc2.Grp = nGrp
|
||||
Proc2.Prc = nPrc
|
||||
Proc2.Flg = -2
|
||||
Proc2.Box = BBox3d( Proc.Box)
|
||||
Proc2.Fct = Proc.Fct
|
||||
Proc2.Diam = Proc.Diam
|
||||
Proc2.Head = Drill.IsHeadFeature( Proc2, b3Raw, dCurrOvmH)
|
||||
Proc2.Tail = Drill.IsTailFeature( Proc2, b3Raw, dCurrOvmH)
|
||||
Proc2.Fcs = Proc.Fce
|
||||
Proc2.Fce = Proc.Fcs
|
||||
Proc2.CutId = Proc.CutId
|
||||
Proc2.TaskId = Proc.TaskId
|
||||
table.insert( vProc, Proc2)
|
||||
end
|
||||
-- se BlockHaus HalfLap
|
||||
elseif Proc.Prc == 37 then
|
||||
local nFacInd = BL.GetFaceWithMostAdj( Proc.Id, PartId)
|
||||
if nFacInd then
|
||||
local vtN = EgtSurfTmFacetNormVersor( Proc.Id, nFacInd, GDB_ID.ROOT)
|
||||
if vtN then
|
||||
Proc.vtN = Vector3d( vtN)
|
||||
end
|
||||
end
|
||||
end
|
||||
else
|
||||
Proc.Head = false
|
||||
Proc.Tail = false
|
||||
Proc.Flg = 0
|
||||
table.insert( vProc, Proc)
|
||||
EgtOutLog( ' Feature ' .. tostring( Proc.Id) .. ' is empty (no geometry)')
|
||||
end
|
||||
end
|
||||
end
|
||||
ProcId = EgtGetNext( ProcId)
|
||||
end
|
||||
end
|
||||
return vProc
|
||||
end
|
||||
|
||||
-------------------------------------------------------------------------------------------------------------
|
||||
local function OrderFeatures( vProc, b3Raw)
|
||||
|
||||
@@ -1332,10 +1332,10 @@ function BeamExec.ProcessFeatures()
|
||||
-- eventuale spostamento fori sui tenoni
|
||||
MoveDrillsOnTenon( vProc)
|
||||
-- identifico la condizione di lavorazione, in base a bSomeDown e bSomeSide
|
||||
local sDownOrSideOrStd = 'standard'
|
||||
local sDownOrSideOrStd = 'STD'
|
||||
-- se richiesto ribaltamento (oppure rotazione)
|
||||
if ( bSomeDown or bSomeSide) and not BD.DOWN_HEAD and not BD.TURN then
|
||||
sDownOrSideOrStd = 'down'
|
||||
sDownOrSideOrStd = 'DOWN'
|
||||
-- ribalto le travi della fase corrente
|
||||
local nRId = nRawId
|
||||
while nRId do
|
||||
@@ -1398,7 +1398,7 @@ function BeamExec.ProcessFeatures()
|
||||
end
|
||||
-- se richiesta rotazione
|
||||
if bSomeSide and not BD.DOWN_HEAD and not BD.TURN then
|
||||
sDownOrSideOrStd = 'side'
|
||||
sDownOrSideOrStd = 'SIDE'
|
||||
-- vettore movimento grezzi per rotazione di 90deg
|
||||
local dDeltaYZ = EgtGetRawPartBBox( nRawId):getDimY() - EgtGetRawPartBBox( nRawId):getDimZ()
|
||||
local vtMove = Vector3d( 0, dDeltaYZ / 2, dDeltaYZ / 2)
|
||||
@@ -1470,7 +1470,7 @@ function BeamExec.ProcessFeatures()
|
||||
EgtSetInfo( nDispId, 'TYPE', EgtIf( not bSplitRot, 'MID', 'END2'))
|
||||
EgtSetInfo( nDispId, 'ORD', nOrd)
|
||||
end
|
||||
sDownOrSideOrStd = 'standard'
|
||||
sDownOrSideOrStd = 'STD'
|
||||
-- inserisco le lavorazioni non ribaltate della trave
|
||||
for i = 1, #vProc do
|
||||
-- creo la lavorazione
|
||||
|
||||
Reference in New Issue
Block a user