Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 7a64a68167 | |||
| 2e086f9f42 | |||
| c7e8c63f37 | |||
| 2311ab4614 |
+6
-66
@@ -101,21 +101,6 @@ local function WriteTimeToLogFile( dTime)
|
|||||||
hFile:close()
|
hFile:close()
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Funzioni per riportare stato lavorazione o pezzo in nge
|
|
||||||
local function WriteErrToNge( nProcId, sErr, sMsg, sRot, sCutId, sTaskId)
|
|
||||||
EgtSetInfo( nProcId, 'STATUS.ERR', sErr)
|
|
||||||
EgtSetInfo( nProcId, 'STATUS.MSG', sMsg)
|
|
||||||
EgtSetInfo( nProcId, 'STATUS.ROT', sRot)
|
|
||||||
EgtSetInfo( nProcId, 'CUTID', sCutId)
|
|
||||||
EgtSetInfo( nProcId, 'TASKID', sTaskId)
|
|
||||||
end
|
|
||||||
local function WriteFallToNge( nPartId, sErr, sMsg, sCutId, sFall)
|
|
||||||
EgtSetInfo( nPartId, 'STATUS.ERR', sErr)
|
|
||||||
EgtSetInfo( nPartId, 'STATUS.MSG', sMsg)
|
|
||||||
EgtSetInfo( nPartId, 'CUTID', sCutId)
|
|
||||||
EgtSetInfo( nPartId, 'STATUS.FALL', sFall)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Funzione per gestire visualizzazione dopo errore
|
-- Funzione per gestire visualizzazione dopo errore
|
||||||
local function PostErrView( nErr, sMsg)
|
local function PostErrView( nErr, sMsg)
|
||||||
if nErr ~= 0 and ( BEAM.FLAG == 1 or BEAM.FLAG == 2) then
|
if nErr ~= 0 and ( BEAM.FLAG == 1 or BEAM.FLAG == 2) then
|
||||||
@@ -137,25 +122,13 @@ end
|
|||||||
-- Funzione per aggiornare dati ausiliari
|
-- Funzione per aggiornare dati ausiliari
|
||||||
local function UpdateAuxData( sAuxFile)
|
local function UpdateAuxData( sAuxFile)
|
||||||
local bModif = false
|
local bModif = false
|
||||||
local BtlInfoId = EgtGetFirstNameInGroup( GDB_ID.ROOT, 'BtlInfo') or GDB_ID.NULL
|
|
||||||
-- Se definito LOAD90, aggiorno
|
-- Se definito LOAD90, aggiorno
|
||||||
local sLoad90 = EgtGetStringFromIni( 'AuxData', 'LOAD90', '', sAuxFile)
|
local sLoad90 = EgtGetStringFromIni( 'AuxData', 'LOAD90', '', sAuxFile)
|
||||||
if sLoad90 ~= '' then
|
if sLoad90 ~= '' then
|
||||||
|
local BtlInfoId = EgtGetFirstNameInGroup( GDB_ID.ROOT, 'BtlInfo') or GDB_ID.NULL
|
||||||
EgtSetInfo( BtlInfoId, 'LOAD90', sLoad90)
|
EgtSetInfo( BtlInfoId, 'LOAD90', sLoad90)
|
||||||
bModif = true
|
bModif = true
|
||||||
end
|
end
|
||||||
-- Se definito PROJID, aggiorno
|
|
||||||
local sProjId = EgtGetStringFromIni( 'AuxData', 'PROJID', '', sAuxFile)
|
|
||||||
if sProjId ~= '' then
|
|
||||||
EgtSetInfo( BtlInfoId, 'PROJECTNUMBER', sProjId)
|
|
||||||
bModif = true
|
|
||||||
end
|
|
||||||
-- Se definito PRODID, aggiorno
|
|
||||||
local sProdId = EgtGetStringFromIni( 'AuxData', 'PRODID', '', sAuxFile)
|
|
||||||
if sProdId ~= '' then
|
|
||||||
EgtSetInfo( BtlInfoId, 'PRODID', sProdId)
|
|
||||||
bModif = true
|
|
||||||
end
|
|
||||||
return bModif
|
return bModif
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -428,9 +401,6 @@ if bToProcess then
|
|||||||
BEAM.CUTID = Stats[i].CutId
|
BEAM.CUTID = Stats[i].CutId
|
||||||
BEAM.TASKID = Stats[i].TaskId
|
BEAM.TASKID = Stats[i].TaskId
|
||||||
WriteErrToLogFile( BEAM.ERR, BEAM.MSG, BEAM.ROT, BEAM.CUTID, BEAM.TASKID)
|
WriteErrToLogFile( BEAM.ERR, BEAM.MSG, BEAM.ROT, BEAM.CUTID, BEAM.TASKID)
|
||||||
if Stats[i].ProcId then
|
|
||||||
WriteErrToNge( Stats[i].ProcId, BEAM.ERR, BEAM.MSG, BEAM.ROT, BEAM.CUTID, BEAM.TASKID)
|
|
||||||
end
|
|
||||||
elseif Stats[i].Err > 0 then
|
elseif Stats[i].Err > 0 then
|
||||||
nErrCnt = nErrCnt + 1
|
nErrCnt = nErrCnt + 1
|
||||||
sOutput = sOutput .. string.format( '[%d,%d] %s\n', Stats[i].CutId, Stats[i].TaskId, sMsg)
|
sOutput = sOutput .. string.format( '[%d,%d] %s\n', Stats[i].CutId, Stats[i].TaskId, sMsg)
|
||||||
@@ -440,9 +410,6 @@ if bToProcess then
|
|||||||
BEAM.CUTID = Stats[i].CutId
|
BEAM.CUTID = Stats[i].CutId
|
||||||
BEAM.TASKID = Stats[i].TaskId
|
BEAM.TASKID = Stats[i].TaskId
|
||||||
WriteErrToLogFile( BEAM.ERR, BEAM.MSG, BEAM.ROT, BEAM.CUTID, BEAM.TASKID)
|
WriteErrToLogFile( BEAM.ERR, BEAM.MSG, BEAM.ROT, BEAM.CUTID, BEAM.TASKID)
|
||||||
if Stats[i].ProcId then
|
|
||||||
WriteErrToNge( Stats[i].ProcId, BEAM.ERR, BEAM.MSG, BEAM.ROT, BEAM.CUTID, BEAM.TASKID)
|
|
||||||
end
|
|
||||||
elseif Stats[i].Err < 0 then
|
elseif Stats[i].Err < 0 then
|
||||||
-- se segnalazione scarico pezzo standard, incompleto o a caduta
|
-- se segnalazione scarico pezzo standard, incompleto o a caduta
|
||||||
if Stats[i].Err == -100 or Stats[i].Err == -101 or Stats[i].Err == -102 then
|
if Stats[i].Err == -100 or Stats[i].Err == -101 or Stats[i].Err == -102 then
|
||||||
@@ -451,9 +418,6 @@ if bToProcess then
|
|||||||
BEAM.CUTID = Stats[i].CutId
|
BEAM.CUTID = Stats[i].CutId
|
||||||
BEAM.FALL = abs( Stats[i].Err + 100)
|
BEAM.FALL = abs( Stats[i].Err + 100)
|
||||||
WriteFallToLogFile( BEAM.ERR, BEAM.MSG, BEAM.CUTID, BEAM.FALL)
|
WriteFallToLogFile( BEAM.ERR, BEAM.MSG, BEAM.CUTID, BEAM.FALL)
|
||||||
if Stats[i].ProcId then
|
|
||||||
WriteFallToNge( Stats[i].PartId, BEAM.ERR, BEAM.MSG, BEAM.CUTID, BEAM.FALL)
|
|
||||||
end
|
|
||||||
-- altri avvertimenti
|
-- altri avvertimenti
|
||||||
else
|
else
|
||||||
nWarnCnt = nWarnCnt + 1
|
nWarnCnt = nWarnCnt + 1
|
||||||
@@ -464,9 +428,6 @@ if bToProcess then
|
|||||||
BEAM.CUTID = Stats[i].CutId
|
BEAM.CUTID = Stats[i].CutId
|
||||||
BEAM.TASKID = Stats[i].TaskId
|
BEAM.TASKID = Stats[i].TaskId
|
||||||
WriteErrToLogFile( BEAM.ERR, BEAM.MSG, BEAM.ROT, BEAM.CUTID, BEAM.TASKID)
|
WriteErrToLogFile( BEAM.ERR, BEAM.MSG, BEAM.ROT, BEAM.CUTID, BEAM.TASKID)
|
||||||
if Stats[i].ProcId then
|
|
||||||
WriteErrToNge( Stats[i].ProcId, BEAM.ERR, BEAM.MSG, BEAM.ROT, BEAM.CUTID, BEAM.TASKID)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -482,56 +443,35 @@ if bToProcess then
|
|||||||
PostWarnView( 19, sOutput)
|
PostWarnView( 19, sOutput)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Altrimenti carico il progetto salvato, rileggo gli errori da nge e riscrivo il log txt con gli stati precedenti
|
-- Altrimenti carico il progetto salvato e dichiaro nessun errore
|
||||||
else
|
else
|
||||||
EgtOutLog( ' +++ Loading Project already processed >>>')
|
EgtOutLog( ' +++ Loading Project already processed >>>')
|
||||||
-- Carico il progetto già fatto
|
-- Carico il progetto già fatto
|
||||||
EgtOpenFile( sNgeFile)
|
EgtOpenFile( sNgeFile)
|
||||||
-- Riscrivo il log txt
|
-- Dichiaro nessun errore
|
||||||
local nPartId = EgtGetFirstPart()
|
local nPartId = EgtGetFirstPart()
|
||||||
while nPartId do
|
while nPartId do
|
||||||
local nCutId = EgtGetInfo( nPartId, 'CUTID')
|
local nCutId = EgtGetInfo( nPartId, 'CUTID')
|
||||||
if nCutId then
|
if nCutId then
|
||||||
-- stato a livello di singola feature
|
|
||||||
local nProcId = EgtGetFirstInGroup( EgtGetFirstNameInGroup( nPartId, 'Processings') or GDB_ID.NULL)
|
local nProcId = EgtGetFirstInGroup( EgtGetFirstNameInGroup( nPartId, 'Processings') or GDB_ID.NULL)
|
||||||
while nProcId do
|
while nProcId do
|
||||||
local bIsFea = EgtExistsInfo( nProcId, 'GRP') and EgtExistsInfo( nProcId, 'PRC')
|
local bIsFea = EgtExistsInfo( nProcId, 'GRP') and EgtExistsInfo( nProcId, 'PRC')
|
||||||
local nTaskId = EgtGetInfo( nProcId, 'TASKID')
|
local nTaskId = EgtGetInfo( nProcId, 'TASKID')
|
||||||
local sErr = EgtGetInfo( nProcId, 'STATUS.ERR') or 0
|
|
||||||
local sMsg = EgtGetInfo( nProcId, 'STATUS.MSG') or '---'
|
|
||||||
local sRot = EgtGetInfo( nProcId, 'STATUS.ROT') or 0
|
|
||||||
if bIsFea and nTaskId then
|
if bIsFea and nTaskId then
|
||||||
BEAM.ERR = sErr
|
BEAM.ERR = 0
|
||||||
BEAM.MSG = sMsg
|
BEAM.MSG = '---'
|
||||||
BEAM.ROT = sRot
|
BEAM.ROT = 0
|
||||||
BEAM.CUTID = nCutId
|
BEAM.CUTID = nCutId
|
||||||
BEAM.TASKID = nTaskId
|
BEAM.TASKID = nTaskId
|
||||||
WriteErrToLogFile( BEAM.ERR, BEAM.MSG, BEAM.ROT, BEAM.CUTID, BEAM.TASKID)
|
WriteErrToLogFile( BEAM.ERR, BEAM.MSG, BEAM.ROT, BEAM.CUTID, BEAM.TASKID)
|
||||||
end
|
end
|
||||||
nProcId = EgtGetNext( nProcId)
|
nProcId = EgtGetNext( nProcId)
|
||||||
end
|
end
|
||||||
-- stato a livello di pezzo
|
|
||||||
local sErr = EgtGetInfo( nPartId, 'STATUS.ERR') or 0
|
|
||||||
if sErr == -100 or sErr == -101 or sErr == -102 then
|
|
||||||
local sMsg = EgtGetInfo( nPartId, 'STATUS.MSG') or '---'
|
|
||||||
local sFall = EgtGetInfo( nPartId, 'STATUS.FALL') or 0
|
|
||||||
BEAM.ERR = sErr
|
|
||||||
BEAM.MSG = sMsg
|
|
||||||
BEAM.CUTID = nCutId
|
|
||||||
BEAM.FALL = sFall
|
|
||||||
WriteFallToLogFile( BEAM.ERR, BEAM.MSG, BEAM.CUTID, BEAM.FALL)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
nPartId = EgtGetNextPart( nPartId)
|
nPartId = EgtGetNextPart( nPartId)
|
||||||
end
|
end
|
||||||
-- Aggiorno eventuali dati ausiliari
|
-- Aggiorno eventuali dati ausiliari
|
||||||
UpdateAuxData( sBtmFile)
|
UpdateAuxData( sBtmFile)
|
||||||
|
|
||||||
-- Anche se non è da riprocessare, imposto nome file CN.
|
|
||||||
-- Se file TS7 importato da altro PC, 'BEAM.FILE' è cambiato da un PC all'altro. Di conseguenza si deve aggiornare nome file che si andrà a generare.
|
|
||||||
local _, sName, _ = EgtSplitPath( BEAM.FILE)
|
|
||||||
EgtSetInfo( EgtGetLastMachGroup(), 'NcName', sName .. '.cnc')
|
|
||||||
|
|
||||||
-- Passo in modalità lavora
|
-- Passo in modalità lavora
|
||||||
EgtSetCurrMachGroup( EgtGetLastMachGroup())
|
EgtSetCurrMachGroup( EgtGetLastMachGroup())
|
||||||
-- Se necessario eseguo aggiornamento con setup corrente e ricalcolo delle lavorazioni
|
-- Se necessario eseguo aggiornamento con setup corrente e ricalcolo delle lavorazioni
|
||||||
|
|||||||
@@ -45,7 +45,6 @@ REM Compilazione 32 e 64 bit
|
|||||||
\EgtProg\Dll32\luac54 -o bin\LuaLibs\ProcessText.lua -s LuaLibs\ProcessText.lua
|
\EgtProg\Dll32\luac54 -o bin\LuaLibs\ProcessText.lua -s LuaLibs\ProcessText.lua
|
||||||
\EgtProg\Dll32\luac54 -o bin\LuaLibs\ProcessTyroleanDovetail.lua -s LuaLibs\ProcessTyroleanDovetail.lua
|
\EgtProg\Dll32\luac54 -o bin\LuaLibs\ProcessTyroleanDovetail.lua -s LuaLibs\ProcessTyroleanDovetail.lua
|
||||||
\EgtProg\Dll32\luac54 -o bin\LuaLibs\ProcessVariant.lua -s LuaLibs\ProcessVariant.lua
|
\EgtProg\Dll32\luac54 -o bin\LuaLibs\ProcessVariant.lua -s LuaLibs\ProcessVariant.lua
|
||||||
\EgtProg\Dll32\luac54 -o bin\LuaLibs\ProcessProbing.lua -s LuaLibs\ProcessProbing.lua
|
|
||||||
\EgtProg\Dll32\luac54 -o bin\BatchProcess.lua -s BatchProcess.lua
|
\EgtProg\Dll32\luac54 -o bin\BatchProcess.lua -s BatchProcess.lua
|
||||||
\EgtProg\Dll32\luac54 -o bin\BatchProcessNew.lua -s BatchProcessNew.lua
|
\EgtProg\Dll32\luac54 -o bin\BatchProcessNew.lua -s BatchProcessNew.lua
|
||||||
\EgtProg\Dll32\luac54 -o bin\GetBeamData.lua -s GetBeamData.lua
|
\EgtProg\Dll32\luac54 -o bin\GetBeamData.lua -s GetBeamData.lua
|
||||||
|
|||||||
+55
-68
@@ -108,7 +108,6 @@ _G.package.loaded.ProcessScarfJoint = nil
|
|||||||
_G.package.loaded.ProcessSimpleScarf = nil
|
_G.package.loaded.ProcessSimpleScarf = nil
|
||||||
_G.package.loaded.ProcessStepJoint = nil
|
_G.package.loaded.ProcessStepJoint = nil
|
||||||
_G.package.loaded.ProcessStepJointNotch = nil
|
_G.package.loaded.ProcessStepJointNotch = nil
|
||||||
_G.package.loaded.ProcessProbing = nil
|
|
||||||
_G.package.loaded.ProcessProfFront = nil
|
_G.package.loaded.ProcessProfFront = nil
|
||||||
_G.package.loaded.ProcessProfConcave = nil
|
_G.package.loaded.ProcessProfConcave = nil
|
||||||
_G.package.loaded.ProcessProfConvex = nil
|
_G.package.loaded.ProcessProfConvex = nil
|
||||||
@@ -363,7 +362,7 @@ local function CollectFeatures( PartId, b3Raw, dCurrOvmH, dCurrOvmT)
|
|||||||
-- se foro
|
-- se foro
|
||||||
if Drill.Identify( Proc) then
|
if Drill.Identify( Proc) then
|
||||||
-- assegno diametro e facce di ingresso e uscita (dati tabelle sempre per riferimento)
|
-- assegno diametro e facce di ingresso e uscita (dati tabelle sempre per riferimento)
|
||||||
Proc.Diam, Proc.Len, Proc.Fcs, Proc.Fce = Drill.GetData( Proc, b3Raw)
|
Proc.Diam, Proc.Len, Proc.Fcs, Proc.Fce, Proc.vtDrillDir = Drill.GetData( Proc, b3Raw)
|
||||||
-- verifico se devo inserire i prefori
|
-- verifico se devo inserire i prefori
|
||||||
if Drill.IsPredrillNeeded( Proc) then
|
if Drill.IsPredrillNeeded( Proc) then
|
||||||
local bAddProc, PredrillProc= Drill.AddPredrillFromDrillProc( Proc)
|
local bAddProc, PredrillProc= Drill.AddPredrillFromDrillProc( Proc)
|
||||||
@@ -392,12 +391,11 @@ local function CollectFeatures( PartId, b3Raw, dCurrOvmH, dCurrOvmT)
|
|||||||
Proc2.Tail = Drill.IsTailFeature( Proc2, b3Raw, dCurrOvmH)
|
Proc2.Tail = Drill.IsTailFeature( Proc2, b3Raw, dCurrOvmH)
|
||||||
Proc2.Fcs = Proc.Fce
|
Proc2.Fcs = Proc.Fce
|
||||||
Proc2.Fce = Proc.Fcs
|
Proc2.Fce = Proc.Fcs
|
||||||
|
Proc2.vtDrillDir = -Proc.vtDrillDir
|
||||||
Proc2.CutId = Proc.CutId
|
Proc2.CutId = Proc.CutId
|
||||||
Proc2.TaskId = Proc.TaskId
|
Proc2.TaskId = Proc.TaskId
|
||||||
Proc2.AdjId = Proc.AdjId
|
Proc2.AdjId = Proc.AdjId
|
||||||
Proc2.MainId = Proc.MainId
|
Proc2.MainId = Proc.MainId
|
||||||
-- recupero l'elenco delle facce della parte interessate dalla feature
|
|
||||||
Proc2.AffectedFaces = BL.GetProcessAffectedFaces( Proc2)
|
|
||||||
table.insert( vProc, Proc2)
|
table.insert( vProc, Proc2)
|
||||||
-- verifico se devo inserire i prefori
|
-- verifico se devo inserire i prefori
|
||||||
if Drill.IsPredrillNeeded( Proc2) then
|
if Drill.IsPredrillNeeded( Proc2) then
|
||||||
@@ -1122,7 +1120,7 @@ local function ClassifyFeatures( vProc, b3Raw, Stats)
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- se senza geometria (già disabilitato)
|
-- se senza geometria (già disabilitato)
|
||||||
if Proc.Flg == 0 and not Proc.Double then
|
if Proc.Flg == 0 and not Proc.Double and not Proc.bGrouped then
|
||||||
bOk = false
|
bOk = false
|
||||||
-- se intestatura
|
-- se intestatura
|
||||||
elseif Hcut.Identify( Proc) then
|
elseif Hcut.Identify( Proc) then
|
||||||
@@ -1239,7 +1237,7 @@ local function ClassifyFeatures( vProc, b3Raw, Stats)
|
|||||||
Proc.Flg = 0
|
Proc.Flg = 0
|
||||||
Proc.Down = true
|
Proc.Down = true
|
||||||
bAllOk = false
|
bAllOk = false
|
||||||
table.insert( Stats, {Err = 1, Msg='Error : impossible to machine by orientation', CutId=Proc.CutId, TaskId=Proc.TaskId, ProcId = Proc.Id})
|
table.insert( Stats, {Err = 1, Msg='Error : impossible to machine by orientation', CutId=Proc.CutId, TaskId=Proc.TaskId})
|
||||||
-- gestione feature di coda da lavorare ribaltata
|
-- gestione feature di coda da lavorare ribaltata
|
||||||
elseif Proc.Tail and bDown then
|
elseif Proc.Tail and bDown then
|
||||||
Proc.Down = true
|
Proc.Down = true
|
||||||
@@ -1260,12 +1258,12 @@ local function ClassifyFeatures( vProc, b3Raw, Stats)
|
|||||||
elseif Proc.Flg == 0 then
|
elseif Proc.Flg == 0 then
|
||||||
bAllOk = false
|
bAllOk = false
|
||||||
Proc.ErrMsg = 'Error : out of the part'
|
Proc.ErrMsg = 'Error : out of the part'
|
||||||
table.insert( Stats, {Err = 1, Msg=Proc.ErrMsg, CutId=Proc.CutId, TaskId=Proc.TaskId, ProcId = Proc.Id})
|
table.insert( Stats, {Err = 1, Msg=Proc.ErrMsg, CutId=Proc.CutId, TaskId=Proc.TaskId})
|
||||||
else
|
else
|
||||||
Proc.Flg = 0
|
Proc.Flg = 0
|
||||||
bAllOk = false
|
bAllOk = false
|
||||||
if not Proc.ErrMsg then Proc.ErrMsg = 'Error : impossible to machine' end
|
if not Proc.ErrMsg then Proc.ErrMsg = 'Error : impossible to machine' end
|
||||||
table.insert( Stats, {Err = 1, Msg=Proc.ErrMsg, CutId=Proc.CutId, TaskId=Proc.TaskId, ProcId = Proc.Id})
|
table.insert( Stats, {Err = 1, Msg=Proc.ErrMsg, CutId=Proc.CutId, TaskId=Proc.TaskId})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
-- se necessario ribaltamento, assegno intestatura alla fase ribaltata
|
-- se necessario ribaltamento, assegno intestatura alla fase ribaltata
|
||||||
@@ -1355,7 +1353,8 @@ local function AddFeatureMachining( Proc, nPhase, nRawId, nPartId, dCurrOvmH, bN
|
|||||||
-- se foratura ( 3/4-040-X)
|
-- se foratura ( 3/4-040-X)
|
||||||
elseif Drill.Identify( Proc) then
|
elseif Drill.Identify( Proc) then
|
||||||
-- esecuzione foratura
|
-- esecuzione foratura
|
||||||
bOk, sErr = Drill.Make( Proc, nPhase, nRawId, nPartId)
|
local bUseMultiDrill = BD.USE_MULTI_DRILL
|
||||||
|
bOk, sErr = Drill.Make( Proc, nPhase, nRawId, nPartId, bUseMultiDrill)
|
||||||
-- se giunzione francese ( 1/2-035-X)
|
-- se giunzione francese ( 1/2-035-X)
|
||||||
elseif FrenchRidgeLap.Identify( Proc) then
|
elseif FrenchRidgeLap.Identify( Proc) then
|
||||||
-- esecuzione giunzione francese
|
-- esecuzione giunzione francese
|
||||||
@@ -1827,10 +1826,7 @@ local function VerifyDrillMirrored( Proc, vProc, b3Raw)
|
|||||||
sDrilling, sType, dMaxDepth = ML.FindDrilling( dDiam, 0, true, false, true)
|
sDrilling, sType, dMaxDepth = ML.FindDrilling( dDiam, 0, true, false, true)
|
||||||
dMachiningDepth = dMaxDepth or dMachiningDepth
|
dMachiningDepth = dMaxDepth or dMachiningDepth
|
||||||
end
|
end
|
||||||
if not sDrilling
|
if not sDrilling or ( sType ~= 'Drill' and sType ~= 'Pocket') or not EgtMdbSetCurrMachining( sDrilling) then
|
||||||
or ( sType ~= 'Drill' and ( sType ~= 'Pocket'or ( Proc.Fcs ~= 0 and Proc.Fce ~= 0)))
|
|
||||||
or not EgtMdbSetCurrMachining( sDrilling) then
|
|
||||||
|
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
local dDrillingStep = EgtMdbGetCurrMachiningParam( MCH_MP.STEP)
|
local dDrillingStep = EgtMdbGetCurrMachiningParam( MCH_MP.STEP)
|
||||||
@@ -1864,16 +1860,10 @@ local function VerifyDrillMirrored( Proc, vProc, b3Raw)
|
|||||||
( BD.DOWN_HEAD and AreOppositeVectorApprox( vtExtr, Y_AX())) then
|
( BD.DOWN_HEAD and AreOppositeVectorApprox( vtExtr, Y_AX())) then
|
||||||
Proc.Double = 2
|
Proc.Double = 2
|
||||||
Proc.MachDepthDouble = dMachiningDepth
|
Proc.MachDepthDouble = dMachiningDepth
|
||||||
Proc.MirrorId = ProcToDisable.Id
|
|
||||||
Proc.MirrorCutId = ProcToDisable.CutId
|
|
||||||
Proc.MirrorTaskId = ProcToDisable.TaskId
|
|
||||||
DisableOtherDrilling( ProcToDisable, vProc)
|
DisableOtherDrilling( ProcToDisable, vProc)
|
||||||
elseif BD.DOWN_HEAD and AreSameVectorApprox( vtExtr, Z_AX()) then
|
elseif BD.DOWN_HEAD and AreSameVectorApprox( vtExtr, Z_AX()) then
|
||||||
Proc.Double = 3
|
Proc.Double = 3
|
||||||
Proc.MachDepthDouble = dMachiningDepth
|
Proc.MachDepthDouble = dMachiningDepth
|
||||||
Proc.MirrorId = ProcToDisable.Id
|
|
||||||
Proc.MirrorCutId = ProcToDisable.CutId
|
|
||||||
Proc.MirrorTaskId = ProcToDisable.TaskId
|
|
||||||
DisableOtherDrilling( ProcToDisable, vProc)
|
DisableOtherDrilling( ProcToDisable, vProc)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -2036,29 +2026,44 @@ function GetFeatureInfoAndDependency( vProc, b3Raw)
|
|||||||
-- controllo la feature con tutte le altre per recuperare le dipendenze
|
-- controllo la feature con tutte le altre per recuperare le dipendenze
|
||||||
for j = 1, #vProc do
|
for j = 1, #vProc do
|
||||||
local ProcB = vProc[j]
|
local ProcB = vProc[j]
|
||||||
-- verifico se feature tipo LapJoint è attraversata da almeno un foro
|
-- se non è la stessa feature
|
||||||
if ( Proc.Topology == 'Pocket' or Proc.Topology == 'Tunnel' or Proc.Topology == 'Groove' or Mortise.Identify( Proc)) and Drill.Identify( ProcB) and Overlaps( Proc.Box, ProcB.Box) then
|
if Proc.Id ~= ProcB.Id then
|
||||||
-- se foro in coda non setto la dipendenza
|
-- verifico se feature tipo LapJoint è attraversata da almeno un foro
|
||||||
if not ProcB.AffectedFaces.Left then
|
if ( Proc.Topology == 'Pocket' or Proc.Topology == 'Tunnel' or Proc.Topology == 'Groove' or Mortise.Identify( Proc)) and Drill.Identify( ProcB) and Overlaps( Proc.Box, ProcB.Box) then
|
||||||
Proc.PassedByHole = true
|
Proc.PassedByHole = true
|
||||||
ProcB.Dependency = {}
|
ProcB.Dependency = {}
|
||||||
ProcB.Dependency.ExecBefore = Proc
|
ProcB.Dependency.ExecBefore = Proc
|
||||||
end
|
end
|
||||||
end
|
-- verifico se feature tipo LapJoint è attraversata da almeno una mortasa a coda di rondine
|
||||||
-- verifico se feature tipo LapJoint è attraversata da almeno una mortasa a coda di rondine
|
if ( Proc.Topology == 'Pocket' or Proc.Topology == 'Tunnel' or Proc.Topology == 'Groove') and DtMortise.SideIdentify( ProcB) and Overlaps( Proc.Box, ProcB.Box) then
|
||||||
if ( Proc.Topology == 'Pocket' or Proc.Topology == 'Tunnel' or Proc.Topology == 'Groove') and DtMortise.SideIdentify( ProcB) and Overlaps( Proc.Box, ProcB.Box) then
|
Proc.PassedByDtMortise = true
|
||||||
Proc.PassedByDtMortise = true
|
end
|
||||||
end
|
-- se tenone è attraversato da foro allora il foro deve essere fatto prima
|
||||||
-- se tenone è attraversato da foro allora il foro deve essere fatto prima
|
if Tenon.Identify( Proc) and Drill.Identify( ProcB) and Overlaps( Proc.Box, ProcB.Box) then
|
||||||
if Tenon.Identify( Proc) and Drill.Identify( ProcB) and Overlaps( Proc.Box, ProcB.Box) then
|
Proc.PassedByHole = true
|
||||||
Proc.PassedByHole = true
|
end
|
||||||
end
|
-- verifiche per specchiature
|
||||||
-- verifiche per specchiature
|
if BD.DOWN_HEAD or BD.TWO_EQUAL_HEADS then
|
||||||
if BD.DOWN_HEAD or BD.TWO_EQUAL_HEADS then
|
-- forature
|
||||||
-- forature
|
if BD.DOUBLE_HEAD_DRILLING and Drill.Identify( Proc) and Drill.Identify( ProcB) and not Proc.Mirror then
|
||||||
if BD.DOUBLE_HEAD_DRILLING and Drill.Identify( Proc) and Drill.Identify( ProcB) and not Proc.Mirror then
|
if AreDrillingsMirrored( Proc, ProcB, b3Raw) then
|
||||||
if AreDrillingsMirrored( Proc, ProcB, b3Raw) then
|
Proc.Mirror = ProcB
|
||||||
Proc.Mirror = ProcB
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
-- raggruppamento fori appartenenti allo stesso spezzone di trave
|
||||||
|
if Drill.Identify( Proc) and Proc.Flg ~= 0 and Drill.Identify( ProcB) and ProcB.Flg ~= 0 then
|
||||||
|
local dDrillRange = EgtIf( b3Raw:getDimX() < BD.LEN_SHORT_PART, BD.DRILL_RANGE_SP or BD.LONGCUT_ENDLEN/3, BD.DRILL_RANGE or BD.LONGCUT_ENDLEN)
|
||||||
|
local nXSegmentProc = ceil( ( Proc.Box:getCenter():getX() - b3Raw:getMin():getX()) / dDrillRange)
|
||||||
|
local nXSegmentProcB = ceil( ( ProcB.Box:getCenter():getX() - b3Raw:getMin():getX()) / dDrillRange)
|
||||||
|
-- se fanno parte dello stesso spezzone, scrivo info geometria nella prima e disattivo la seconda
|
||||||
|
if nXSegmentProc == nXSegmentProcB and Proc.Diam == ProcB.Diam and AreSameVectorApprox( Proc.vtDrillDir, ProcB.vtDrillDir) then
|
||||||
|
if not Proc.OtherGeometries then
|
||||||
|
Proc.OtherGeometries = {}
|
||||||
|
end
|
||||||
|
table.insert( Proc.OtherGeometries, ProcB)
|
||||||
|
ProcB.Flg = 0
|
||||||
|
ProcB.bGrouped = true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -2179,19 +2184,13 @@ function BeamExec.ProcessFeatures()
|
|||||||
end
|
end
|
||||||
if not bOk then
|
if not bOk then
|
||||||
nTotErr = nTotErr + 1
|
nTotErr = nTotErr + 1
|
||||||
table.insert( Stats, {Err=1, Msg=sMsg, Rot=-2, CutId=Proc.CutId, TaskId=Proc.TaskId, ProcId = Proc.Id, PartId = nPartId})
|
table.insert( Stats, {Err=1, Msg=sMsg, Rot=-2, CutId=Proc.CutId, TaskId=Proc.TaskId})
|
||||||
if Proc.Double == 2 or Proc.Double == 3 then
|
|
||||||
table.insert( Stats, {Err=1, Msg=sMsg, Rot=-2, CutId=Proc.MirrorCutId, TaskId=Proc.MirrorTaskId, ProcId = Proc.MirrorId, PartId = nPartId})
|
|
||||||
end
|
|
||||||
elseif sMsg and #sMsg > 0 then
|
elseif sMsg and #sMsg > 0 then
|
||||||
table.insert( Stats, {Err=-1, Msg=sMsg, Rot=-2, CutId=Proc.CutId, TaskId=Proc.TaskId, ProcId = Proc.Id, PartId = nPartId})
|
table.insert( Stats, {Err=-1, Msg=sMsg, Rot=-2, CutId=Proc.CutId, TaskId=Proc.TaskId})
|
||||||
if Proc.Double == 2 or Proc.Double == 3 then
|
|
||||||
table.insert( Stats, {Err=-1, Msg=sMsg, Rot=-2, CutId=Proc.MirrorCutId, TaskId=Proc.MirrorTaskId, ProcId = Proc.MirrorId, PartId = nPartId})
|
|
||||||
end
|
|
||||||
else
|
else
|
||||||
table.insert( Stats, {Err=0, Msg='', Rot=-2, CutId=Proc.CutId, TaskId=Proc.TaskId, ProcId = Proc.Id, PartId = nPartId})
|
table.insert( Stats, {Err=0, Msg='', Rot=-2, CutId=Proc.CutId, TaskId=Proc.TaskId})
|
||||||
if Proc.Double == 2 or Proc.Double == 3 then
|
if Proc.Double == 2 or Proc.Double == 3 then
|
||||||
table.insert( Stats, {Err=0, Msg='', Rot=-2, CutId=Proc.MirrorCutId, TaskId=Proc.MirrorTaskId, ProcId = Proc.MirrorId, PartId = nPartId})
|
table.insert( Stats, {Err=0, Msg='', Rot=-2, CutId=Proc.MirrorCutId, TaskId=Proc.MirrorTaskId})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
-- se è taglio di separazione, verifico se ha già aggiunto una nuova fase oppure se è da creare
|
-- se è taglio di separazione, verifico se ha già aggiunto una nuova fase oppure se è da creare
|
||||||
@@ -2275,19 +2274,13 @@ function BeamExec.ProcessFeatures()
|
|||||||
end
|
end
|
||||||
if not bOk then
|
if not bOk then
|
||||||
nTotErr = nTotErr + 1
|
nTotErr = nTotErr + 1
|
||||||
table.insert( Stats, {Err=1, Msg=sMsg, Rot=-1, CutId=Proc.CutId, TaskId=Proc.TaskId, ProcId = Proc.Id, PartId = nPartId})
|
table.insert( Stats, {Err=1, Msg=sMsg, Rot=-1, CutId=Proc.CutId, TaskId=Proc.TaskId})
|
||||||
if Proc.Double == 2 or Proc.Double == 3 then
|
|
||||||
table.insert( Stats, {Err=1, Msg=sMsg, Rot=-1, CutId=Proc.MirrorCutId, TaskId=Proc.MirrorTaskId, ProcId = Proc.MirrorId, PartId = nPartId})
|
|
||||||
end
|
|
||||||
elseif sMsg and #sMsg > 0 then
|
elseif sMsg and #sMsg > 0 then
|
||||||
table.insert( Stats, {Err=-1, Msg=sMsg, Rot=-1, CutId=Proc.CutId, TaskId=Proc.TaskId, ProcId = Proc.Id, PartId = nPartId})
|
table.insert( Stats, {Err=-1, Msg=sMsg, Rot=-1, CutId=Proc.CutId, TaskId=Proc.TaskId})
|
||||||
if Proc.Double == 2 or Proc.Double == 3 then
|
|
||||||
table.insert( Stats, {Err=-1, Msg=sMsg, Rot=-1, CutId=Proc.MirrorCutId, TaskId=Proc.MirrorTaskId, ProcId = Proc.MirrorId, PartId = nPartId})
|
|
||||||
end
|
|
||||||
else
|
else
|
||||||
table.insert( Stats, {Err=0, Msg='', Rot=-1, CutId=Proc.CutId, TaskId=Proc.TaskId, ProcId = Proc.Id, PartId = nPartId})
|
table.insert( Stats, {Err=0, Msg='', Rot=-1, CutId=Proc.CutId, TaskId=Proc.TaskId})
|
||||||
if Proc.Double == 2 or Proc.Double == 3 then
|
if Proc.Double == 2 or Proc.Double == 3 then
|
||||||
table.insert( Stats, {Err=0, Msg='', Rot=-1, CutId=Proc.MirrorCutId, TaskId=Proc.MirrorTaskId, ProcId = Proc.MirrorId, PartId = nPartId})
|
table.insert( Stats, {Err=0, Msg='', Rot=-1, CutId=Proc.MirrorCutId, TaskId=Proc.MirrorTaskId})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
if bOk then nSideMchOk = nSideMchOk + 1 end
|
if bOk then nSideMchOk = nSideMchOk + 1 end
|
||||||
@@ -2359,19 +2352,13 @@ function BeamExec.ProcessFeatures()
|
|||||||
end
|
end
|
||||||
if not bOk then
|
if not bOk then
|
||||||
nTotErr = nTotErr + 1
|
nTotErr = nTotErr + 1
|
||||||
table.insert( Stats, {Err=1, Msg=sMsg, Rot=0, CutId=Proc.CutId, TaskId=Proc.TaskId, ProcId = Proc.Id, PartId = nPartId})
|
table.insert( Stats, {Err=1, Msg=sMsg, Rot=0, CutId=Proc.CutId, TaskId=Proc.TaskId})
|
||||||
if Proc.Double == 2 or Proc.Double == 3 then
|
|
||||||
table.insert( Stats, {Err=1, Msg=sMsg, Rot=0, CutId=Proc.MirrorCutId, TaskId=Proc.MirrorTaskId, ProcId = Proc.MirrorId, PartId = nPartId})
|
|
||||||
end
|
|
||||||
elseif sMsg and #sMsg > 0 then
|
elseif sMsg and #sMsg > 0 then
|
||||||
table.insert( Stats, {Err=-1, Msg=sMsg, Rot=0, CutId=Proc.CutId, TaskId=Proc.TaskId, ProcId = Proc.Id, PartId = nPartId})
|
table.insert( Stats, {Err=-1, Msg=sMsg, Rot=0, CutId=Proc.CutId, TaskId=Proc.TaskId})
|
||||||
if Proc.Double == 2 or Proc.Double == 3 then
|
|
||||||
table.insert( Stats, {Err=-1, Msg=sMsg, Rot=0, CutId=Proc.MirrorCutId, TaskId=Proc.MirrorTaskId, ProcId = Proc.MirrorId, PartId = nPartId})
|
|
||||||
end
|
|
||||||
else
|
else
|
||||||
table.insert( Stats, {Err=0, Msg='', Rot=0, CutId=Proc.CutId, TaskId=Proc.TaskId, ProcId = Proc.Id, PartId = nPartId})
|
table.insert( Stats, {Err=0, Msg='', Rot=0, CutId=Proc.CutId, TaskId=Proc.TaskId})
|
||||||
if Proc.Double == 2 or Proc.Double == 3 then
|
if Proc.Double == 2 or Proc.Double == 3 then
|
||||||
table.insert( Stats, {Err=0, Msg='', Rot=0, CutId=Proc.MirrorCutId, TaskId=Proc.MirrorTaskId, ProcId = Proc.MirrorId, PartId = nPartId})
|
table.insert( Stats, {Err=0, Msg='', Rot=0, CutId=Proc.MirrorCutId, TaskId=Proc.MirrorTaskId})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
-- se era taglio di separazione, aggiungo nuova fase
|
-- se era taglio di separazione, aggiungo nuova fase
|
||||||
|
|||||||
+1
-46
@@ -642,7 +642,7 @@ function BeamLib.GetFaceWithMostAdj( Proc, nPartId, bCompare3Fc, dCosSideAng)
|
|||||||
-- premio quella che non è sottosquadra e che ha la X minore
|
-- premio quella che non è sottosquadra e che ha la X minore
|
||||||
local bDiffSmall = true
|
local bDiffSmall = true
|
||||||
for i = 1, #dtElev do
|
for i = 1, #dtElev do
|
||||||
if ( dtElev[i] > dMinElev + 5 or dtElev[i] > 80) and dMinElev < 0.85 * dtElev[i] then
|
if dtElev[i] > dMinElev + 5 or dtElev[i] > 80 then
|
||||||
bDiffSmall = false
|
bDiffSmall = false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -1335,50 +1335,5 @@ function BeamLib.IsCutNeeded( Proc, b3Raw, dOvmHead, dOvmTail)
|
|||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
|
||||||
-------------------------------------------------------------------------------------------------------------
|
|
||||||
function BeamLib.GetToolFromMachining( sMachiningName)
|
|
||||||
local Tool = {}
|
|
||||||
if EgtMdbSetCurrMachining( sMachiningName) then
|
|
||||||
local sTuuid = EgtMdbGetCurrMachiningParam( MCH_MP.TUUID)
|
|
||||||
if EgtTdbSetCurrTool( EgtTdbGetToolFromUUID( sTuuid) or '') then
|
|
||||||
Tool.Name = EgtTdbGetCurrToolParam( MCH_TP.NAME)
|
|
||||||
Tool.IsCCW = ( EgtMdbGetCurrMachiningParam( MCH_MP.SPEED) < 0)
|
|
||||||
Tool.Type = EgtTdbGetCurrToolParam( MCH_TP.TYPE)
|
|
||||||
Tool.Diameter = EgtTdbGetCurrToolParam( MCH_TP.DIAM) or 0
|
|
||||||
Tool.HeadType = {}
|
|
||||||
Tool.PreferredSide = {}
|
|
||||||
if BD.GetSetupInfo then
|
|
||||||
Tool.HeadType = BD.GetSetupInfo( EgtTdbGetCurrToolParam( MCH_TP.HEAD)).HeadType
|
|
||||||
Tool.PreferredSide = BD.GetSetupInfo( EgtTdbGetCurrToolParam( MCH_TP.HEAD)).PreferredSide
|
|
||||||
end
|
|
||||||
-- lama
|
|
||||||
if Tool.Type == MCH_TY.SAW_STD or Tool.Type == MCH_TY.SAW_FLAT then
|
|
||||||
Tool.Thickness = EgtTdbGetCurrToolParam(MCH_TP.THICK) or 0
|
|
||||||
Tool.MaxDepth = EgtTdbGetCurrToolMaxDepth() or 0
|
|
||||||
Tool.SideStep = EgtTdbGetCurrToolValInNotes( MCH_TP.USERNOTES, 'SIDESTEP', 'd')
|
|
||||||
-- sega a catena
|
|
||||||
elseif Tool.Type == MCH_TY.MORTISE_STD then
|
|
||||||
Tool.Length = EgtTdbGetCurrToolParam( MCH_TP.LEN) or 0
|
|
||||||
Tool.MaxMat = EgtTdbGetCurrToolParam( MCH_TP.MAXMAT) or 0
|
|
||||||
Tool.Width = EgtTdbGetCurrToolParam( MCH_TP.DIAM) or 0
|
|
||||||
Tool.Thickness = EgtTdbGetCurrToolParam( MCH_TP.THICK) or 0
|
|
||||||
Tool.CornerRadius = EgtTdbGetCurrToolParam( MCH_TP.CORNRAD) or 0
|
|
||||||
-- fresa (TODO al momento aggiunte solo le informazioni che servono)
|
|
||||||
elseif Tool.Type == MCH_TY.MILL_STD or MCH_TY.MILL_NOTIP then
|
|
||||||
if BD.GetSetupInfo then
|
|
||||||
Tool.IsOnAggregate = BD.GetSetupInfo( EgtTdbGetCurrToolParam( MCH_TP.HEAD)).bToolOnAggregate
|
|
||||||
else
|
|
||||||
Tool.IsOnAggregate = false
|
|
||||||
end
|
|
||||||
-- altri utensili al momento non previsti
|
|
||||||
else
|
|
||||||
error( 'Wrong tool type')
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
return Tool
|
|
||||||
end
|
|
||||||
|
|
||||||
-------------------------------------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------------------------------------
|
||||||
return BeamLib
|
return BeamLib
|
||||||
+1
-1
@@ -407,7 +407,7 @@ function DiceCut.GetDice( nParent, BBoxRawPart, ptCPlanes, vtNPlanes, bGetOrtoPl
|
|||||||
local dNzLimDwnUp = BL.GetNzLimDownUp( BBoxRawPart)
|
local dNzLimDwnUp = BL.GetNzLimDownUp( BBoxRawPart)
|
||||||
|
|
||||||
-- se non c'è testa da sotto e normali senza componenti in Y con faccia quasi verticale e trave non alta, uso per offset i limiti dei tagli di testa e coda
|
-- se non c'è testa da sotto e normali senza componenti in Y con faccia quasi verticale e trave non alta, uso per offset i limiti dei tagli di testa e coda
|
||||||
if not BD.TURN and not BD.DOWN_HEAD and abs( vtNPlanes:getY()) < 0.1 and vtNPlanes:getZ() < 0.7071 and ( not vtNBond or abs( vtNBond:getY()) < 0.1) and BBoxRawPart:getDimZ() < BD.MIN_DIM_HBEAM then
|
if not BD.DOWN_HEAD and abs( vtNPlanes:getY()) < 0.1 and vtNPlanes:getZ() < 0.7071 and ( not vtNBond or abs( vtNBond:getY()) < 0.1) and BBoxRawPart:getDimZ() < BD.MIN_DIM_HBEAM then
|
||||||
OffsetO = dOrthoMaxDim or BD.MAX_DIM_HTCUT
|
OffsetO = dOrthoMaxDim or BD.MAX_DIM_HTCUT
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
+11
-62
@@ -192,27 +192,6 @@ local function GetNameSolidFaceIncludingLine( b3Solid, ptP1Comp, ptP2Comp)
|
|||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
|
||||||
local function AreSameOrOppositeDirApprox( vDir1, vDir2)
|
|
||||||
if abs( abs( vDir1) - abs( vDir2)) < 10 * GEO.EPS_SMALL then
|
|
||||||
return true
|
|
||||||
else
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
|
||||||
local function GetEdgeToMachineFromVector( nSurfId, nFacet, vtOrthO)
|
|
||||||
local _, EdgesEgt = EgtSurfTmGetFacetOutlineInfo( nSurfId, nFacet, GDB_ID.ROOT)
|
|
||||||
|
|
||||||
for i = 1, #EdgesEgt do
|
|
||||||
if AreOppositeVectorApprox( EdgesEgt[i].Norm, vtOrthO) then
|
|
||||||
return ( i - 1)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
return nil
|
|
||||||
end
|
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
function FacesBySaw.MakeOne( nSurfId, nFacet, sCutting, dSawDiam, Par5, dVzLimDwnUp, dCutExtra, dCutSic, dCutOffset, dAccStart, dAccEnd, sNotes, b3Raw, bForceInvert, bMaximizeVerticalDepth, bSpecialTangentLeadInOut, bForceTangentLeadInOut, Par5Alternative)
|
function FacesBySaw.MakeOne( nSurfId, nFacet, sCutting, dSawDiam, Par5, dVzLimDwnUp, dCutExtra, dCutSic, dCutOffset, dAccStart, dAccEnd, sNotes, b3Raw, bForceInvert, bMaximizeVerticalDepth, bSpecialTangentLeadInOut, bForceTangentLeadInOut, Par5Alternative)
|
||||||
-- se lama con asse parallelo alla faccia, passo alla apposita funzione
|
-- se lama con asse parallelo alla faccia, passo alla apposita funzione
|
||||||
@@ -254,9 +233,8 @@ function FacesBySaw.MakeOne( nSurfId, nFacet, sCutting, dSawDiam, Par5, dVzLimDw
|
|||||||
if not dVzLimDwnUp then dVzLimDwnUp = BL.GetNzLimDownUp( b3Raw, vtN, vtOrthO) end
|
if not dVzLimDwnUp then dVzLimDwnUp = BL.GetNzLimDownUp( b3Raw, vtN, vtOrthO) end
|
||||||
local bDownHead = ( dVzLimDwnUp and dVzLimDwnUp < - 1.5)
|
local bDownHead = ( dVzLimDwnUp and dVzLimDwnUp < - 1.5)
|
||||||
local bDownUp = ( vtN:getZ() < dVzLimDwnUp)
|
local bDownUp = ( vtN:getZ() < dVzLimDwnUp)
|
||||||
|
-- linea o bilinea di lavorazione
|
||||||
local ptP1, ptPm, ptP2, vtV1, vtV2, dLen, dWidth = EgtSurfTmFacetOppositeSide( nSurfId, nFacet, vtOrthO, GDB_ID.ROOT)
|
local ptP1, ptPm, ptP2, vtV1, vtV2, dLen, dWidth = EgtSurfTmFacetOppositeSide( nSurfId, nFacet, vtOrthO, GDB_ID.ROOT)
|
||||||
|
|
||||||
|
|
||||||
if not dLen or dLen < 1.1 or not dWidth or dWidth < 1.1 then
|
if not dLen or dLen < 1.1 or not dWidth or dWidth < 1.1 then
|
||||||
local sWarn = 'Face ' .. string.format( '%d,%d', nSurfId, nFacet) .. ' skipped : too small'
|
local sWarn = 'Face ' .. string.format( '%d,%d', nSurfId, nFacet) .. ' skipped : too small'
|
||||||
EgtOutLog( sWarn, 1)
|
EgtOutLog( sWarn, 1)
|
||||||
@@ -268,12 +246,6 @@ function FacesBySaw.MakeOne( nSurfId, nFacet, sCutting, dSawDiam, Par5, dVzLimDw
|
|||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
local bIsSawCCW = ( EgtMdbGetCurrMachiningParam( MCH_MP.SPEED) < 0)
|
local bIsSawCCW = ( EgtMdbGetCurrMachiningParam( MCH_MP.SPEED) < 0)
|
||||||
-- se settato nelle note lavorazione si lavora in discordanza
|
|
||||||
EgtMdbSetCurrMachining( sCutting)
|
|
||||||
local sMachiningNotes = EgtMdbGetCurrMachiningParam( MCH_MP.USERNOTES) or ''
|
|
||||||
if ( EgtGetValInNotes( sMachiningNotes, 'PATHINVERT', 'd') or 0) == 1 then
|
|
||||||
bIsSawCCW = not bIsSawCCW
|
|
||||||
end
|
|
||||||
local bInvert = bForceInvert
|
local bInvert = bForceInvert
|
||||||
-- l'inversione può essere comandata da rotazione lama (direzione concorde, legata anche a DownUp) oppure da direzione Z del percorso (si preferisce lavorare dal basso verso l'alto per limitare le corse)
|
-- l'inversione può essere comandata da rotazione lama (direzione concorde, legata anche a DownUp) oppure da direzione Z del percorso (si preferisce lavorare dal basso verso l'alto per limitare le corse)
|
||||||
-- se c'è disaccordo tra rotazione e direzione si cambia il lato di lavoro, se possibile. Se ciò non è possbile comanda la direzione. Se percorso orizzontale comanda la rotazione.
|
-- se c'è disaccordo tra rotazione e direzione si cambia il lato di lavoro, se possibile. Se ciò non è possbile comanda la direzione. Se percorso orizzontale comanda la rotazione.
|
||||||
@@ -395,7 +367,6 @@ function FacesBySaw.MakeOne( nSurfId, nFacet, sCutting, dSawDiam, Par5, dVzLimDw
|
|||||||
local dLenLi = sqrt( dLiTang * dLiTang + dLiPerp * dLiPerp)
|
local dLenLi = sqrt( dLiTang * dLiTang + dLiPerp * dLiPerp)
|
||||||
local dLenLo = sqrt( dLoTang * dLoTang + dLoPerp * dLoPerp)
|
local dLenLo = sqrt( dLoTang * dLoTang + dLoPerp * dLoPerp)
|
||||||
local dLiCompLength = 0
|
local dLiCompLength = 0
|
||||||
local dLoCompLength = 0
|
|
||||||
-- attacco tangente
|
-- attacco tangente
|
||||||
local dLi2Tang = 0
|
local dLi2Tang = 0
|
||||||
local dLi2Perp = 0
|
local dLi2Perp = 0
|
||||||
@@ -417,7 +388,6 @@ function FacesBySaw.MakeOne( nSurfId, nFacet, sCutting, dSawDiam, Par5, dVzLimDw
|
|||||||
end
|
end
|
||||||
local dLenLi2 = abs( dLi2Tang)
|
local dLenLi2 = abs( dLi2Tang)
|
||||||
local dLenLo2 = abs( dLo2Tang)
|
local dLenLo2 = abs( dLo2Tang)
|
||||||
local dBiLineaAddLength = 0
|
|
||||||
|
|
||||||
-- se il lato non lavorato della bilinea è aperto, setto entrata/uscita con la stessa direzione
|
-- se il lato non lavorato della bilinea è aperto, setto entrata/uscita con la stessa direzione
|
||||||
if bIsBiLinea then
|
if bIsBiLinea then
|
||||||
@@ -446,7 +416,6 @@ function FacesBySaw.MakeOne( nSurfId, nFacet, sCutting, dSawDiam, Par5, dVzLimDw
|
|||||||
local dDistPointToCenter = sqrt( dDistPtTang * dDistPtTang + dDistToCenter * dDistToCenter)
|
local dDistPointToCenter = sqrt( dDistPtTang * dDistPtTang + dDistToCenter * dDistToCenter)
|
||||||
-- se distanza al punto è maggiore del raggio lama, significa che non ho già lavorato, quindi calcolo uscita opportunamente
|
-- se distanza al punto è maggiore del raggio lama, significa che non ho già lavorato, quindi calcolo uscita opportunamente
|
||||||
if dDistPointToCenter > 0.5 * dSawDiam then
|
if dDistPointToCenter > 0.5 * dSawDiam then
|
||||||
dBiLineaAddLength = dDistPointToCenter - ( 0.5 * dSawDiam)
|
|
||||||
dLoTang = -dAllEnd * dCosAlpha
|
dLoTang = -dAllEnd * dCosAlpha
|
||||||
dLoPerp = dDist2 * dSinAlpha
|
dLoPerp = dDist2 * dSinAlpha
|
||||||
end
|
end
|
||||||
@@ -480,23 +449,11 @@ function FacesBySaw.MakeOne( nSurfId, nFacet, sCutting, dSawDiam, Par5, dVzLimDw
|
|||||||
-- dLoPerp rimane invariato
|
-- dLoPerp rimane invariato
|
||||||
end
|
end
|
||||||
elseif BD.TURN then
|
elseif BD.TURN then
|
||||||
|
bLioTang = 2
|
||||||
|
local dMove = dist( ptP1, ptP2)
|
||||||
dLiTang, dLiPerp = dLi2Tang, dLi2Perp
|
dLiTang, dLiPerp = dLi2Tang, dLi2Perp
|
||||||
-- se angolo bilinea ottuso si segue bilinea per un tratto per tagliare completamente cubetto a forma di rombo
|
dLoTang = -( dLiTang - dAccStart - dAccEnd + dMove)
|
||||||
if dCosAngleL1L2 > 0.707 and bIsBiLinea then
|
dLoPerp = BD.COLL_SIC
|
||||||
-- calcolo uscita per prolungare solo della parte mancante per completare il taglio
|
|
||||||
if dBiLineaAddLength > 0 then
|
|
||||||
dLoTang = dLoTang * ( dBiLineaAddLength + BD.COLL_SIC) / 100
|
|
||||||
dLoPerp = dLoPerp * ( dBiLineaAddLength + BD.COLL_SIC) / 100
|
|
||||||
end
|
|
||||||
-- aggiungo componente perpendicolare a percorso per ritornare dal punto di ingresso, altrimenti l'uscita viene allungata fino dall'altra parte del grezzo
|
|
||||||
dLoCompLength = 100
|
|
||||||
-- se angolo bilinea oltre 45°, faccio movimento in retrazione
|
|
||||||
else
|
|
||||||
bLioTang = 2
|
|
||||||
local dMove = dist( ptP1, ptP2)
|
|
||||||
dLoTang = -( dLiTang - dAccStart - dAccEnd + dMove)
|
|
||||||
dLoPerp = BD.COLL_SIC
|
|
||||||
end
|
|
||||||
else
|
else
|
||||||
bLioTang = true
|
bLioTang = true
|
||||||
dLiTang, dLiPerp, dLoTang, dLoPerp, dLiCompLength = dLi2Tang, dLi2Perp, dLo2Tang, dLo2Perp, dLi2CompLength
|
dLiTang, dLiPerp, dLoTang, dLoPerp, dLiCompLength = dLi2Tang, dLi2Perp, dLo2Tang, dLo2Perp, dLi2CompLength
|
||||||
@@ -569,18 +526,8 @@ function FacesBySaw.MakeOne( nSurfId, nFacet, sCutting, dSawDiam, Par5, dVzLimDw
|
|||||||
EgtSetMachiningGeometry( {{ nSurfId, nFacet}})
|
EgtSetMachiningGeometry( {{ nSurfId, nFacet}})
|
||||||
-- imposto uso faccia
|
-- imposto uso faccia
|
||||||
EgtSetMachiningParam( MCH_MP.FACEUSE, nFaceUse)
|
EgtSetMachiningParam( MCH_MP.FACEUSE, nFaceUse)
|
||||||
-- vtFaceUse non funziona correttaemnte in caso che il lato da lavorare sia a 45°. Potrebbe ritornare una trilinea, non gestibile. Quindi si setta l'EDGE
|
local sNoteVtFaceUse = 'VtFaceUse=' .. EgtNumToString( vtOrthO:getX(),3) .. ',' .. EgtNumToString( vtOrthO:getY(),3) .. ',' .. EgtNumToString( vtOrthO:getZ(),3) .. ';'
|
||||||
local nEdgeFaceUse = GetEdgeToMachineFromVector( nSurfId, nFacet, vtOrthO)
|
EgtSetMachiningParam( MCH_MP.USERNOTES, sNoteVtFaceUse)
|
||||||
if nEdgeFaceUse and ( AreSameOrOppositeDirApprox( vtOrthO:getX(), 0.707) or AreSameOrOppositeDirApprox( vtOrthO:getY(), 0.707) or AreSameOrOppositeDirApprox( vtOrthO:getZ(), 0.707)) then
|
|
||||||
local sNoteEdgeFaceUse = 'EdgesFaceUse=' .. EgtNumToString( nEdgeFaceUse) .. ';'
|
|
||||||
EgtSetMachiningParam( MCH_MP.USERNOTES, sNoteEdgeFaceUse)
|
|
||||||
else
|
|
||||||
local sNoteVtFaceUse = 'VtFaceUse=' .. EgtNumToString( vtOrthO:getX(),3) .. ',' .. EgtNumToString( vtOrthO:getY(),3) .. ',' .. EgtNumToString( vtOrthO:getZ(),3) .. ';'
|
|
||||||
EgtSetMachiningParam( MCH_MP.USERNOTES, sNoteVtFaceUse)
|
|
||||||
-- imposto allungamenti iniziale e finale (in caso si utilizzi EDGE, non serve prolungare o accorciare)
|
|
||||||
EgtSetMachiningParam( MCH_MP.STARTADDLEN, dAllStart - dAccStart)
|
|
||||||
EgtSetMachiningParam( MCH_MP.ENDADDLEN, dAllEnd - dAccEnd)
|
|
||||||
end
|
|
||||||
-- imposto posizione braccio porta testa
|
-- imposto posizione braccio porta testa
|
||||||
EgtSetMachiningParam( MCH_MP.SCC, nSCC)
|
EgtSetMachiningParam( MCH_MP.SCC, nSCC)
|
||||||
-- imposto inversione e lato correzione
|
-- imposto inversione e lato correzione
|
||||||
@@ -598,7 +545,9 @@ function FacesBySaw.MakeOne( nSurfId, nFacet, sCutting, dSawDiam, Par5, dVzLimDw
|
|||||||
if BD.TURN and bLioTang == 2 then EgtSetMachiningParam( MCH_MP.LEADOUTTYPE, MCH_MILL_LO.PERP_TG) end
|
if BD.TURN and bLioTang == 2 then EgtSetMachiningParam( MCH_MP.LEADOUTTYPE, MCH_MILL_LO.PERP_TG) end
|
||||||
EgtSetMachiningParam( MCH_MP.LOTANG, dLoTang)
|
EgtSetMachiningParam( MCH_MP.LOTANG, dLoTang)
|
||||||
EgtSetMachiningParam( MCH_MP.LOPERP, dLoPerp)
|
EgtSetMachiningParam( MCH_MP.LOPERP, dLoPerp)
|
||||||
EgtSetMachiningParam( MCH_MP.LOCOMPLEN, dLoCompLength)
|
-- imposto allungamenti iniziale e finale
|
||||||
|
EgtSetMachiningParam( MCH_MP.STARTADDLEN, dAllStart - dAccStart)
|
||||||
|
EgtSetMachiningParam( MCH_MP.ENDADDLEN, dAllEnd - dAccEnd)
|
||||||
-- imposto angolo 3° asse rot
|
-- imposto angolo 3° asse rot
|
||||||
local sBlockedAxis = EgtIf( bMaximizeVerticalDepth, 'parallel', 'perpendicular')
|
local sBlockedAxis = EgtIf( bMaximizeVerticalDepth, 'parallel', 'perpendicular')
|
||||||
EgtSetMachiningParam( MCH_MP.BLOCKEDAXIS, BL.GetBlockedAxis( sCutting, sBlockedAxis, b3Raw, vtN, vtOrthO))
|
EgtSetMachiningParam( MCH_MP.BLOCKEDAXIS, BL.GetBlockedAxis( sCutting, sBlockedAxis, b3Raw, vtN, vtOrthO))
|
||||||
@@ -672,7 +621,7 @@ function FacesBySaw.MakeTwo( Proc, nPhase, nRawId, nPartId, dOvmHead, sCutType,
|
|||||||
local bFaceOk = {}
|
local bFaceOk = {}
|
||||||
bFaceOk[1] = ( vtN[1]:getZ() >= ( BD.CUT_VZ_MIN or BD.NZ_MINB) or abs( vtN[1]:getY()) < 0.174 or ( Proc.AffectedFaces.Left ~= Proc.AffectedFaces.Right and Proc.Face[1].Elevation < dMaxDepth - 10 * GEO.EPS_SMALL))
|
bFaceOk[1] = ( vtN[1]:getZ() >= ( BD.CUT_VZ_MIN or BD.NZ_MINB) or abs( vtN[1]:getY()) < 0.174 or ( Proc.AffectedFaces.Left ~= Proc.AffectedFaces.Right and Proc.Face[1].Elevation < dMaxDepth - 10 * GEO.EPS_SMALL))
|
||||||
bFaceOk[2] = ( vtN[2]:getZ() >= ( BD.CUT_VZ_MIN or BD.NZ_MINB) or abs( vtN[2]:getY()) < 0.174 or ( Proc.AffectedFaces.Left ~= Proc.AffectedFaces.Right and Proc.Face[2].Elevation < dMaxDepth - 10 * GEO.EPS_SMALL))
|
bFaceOk[2] = ( vtN[2]:getZ() >= ( BD.CUT_VZ_MIN or BD.NZ_MINB) or abs( vtN[2]:getY()) < 0.174 or ( Proc.AffectedFaces.Left ~= Proc.AffectedFaces.Right and Proc.Face[2].Elevation < dMaxDepth - 10 * GEO.EPS_SMALL))
|
||||||
if not bDownHead and not bFaceOk[1] and not bFaceOk[2] then
|
if not bDownHead and ( not bFaceOk[1] or not bFaceOk[2]) then
|
||||||
local sErr = 'Error : TwoFacesBySaw from bottom impossible'
|
local sErr = 'Error : TwoFacesBySaw from bottom impossible'
|
||||||
EgtOutLog( sErr)
|
EgtOutLog( sErr)
|
||||||
return false, sErr
|
return false, sErr
|
||||||
|
|||||||
+44
-61
@@ -25,14 +25,11 @@ EgtOutLog( ' MachiningLib started', 1)
|
|||||||
|
|
||||||
-- Dati
|
-- Dati
|
||||||
local BD = require( 'BeamData')
|
local BD = require( 'BeamData')
|
||||||
-- librerie lavorazioni caricate con pcall perchè potrebbero non esserci
|
local Cuttings = require( 'CutData')
|
||||||
local Cuttings, Millings, Pocketings, Sawings, Drillings, Probing
|
local Millings = require( 'MillingData')
|
||||||
if pcall( require, 'CutData') then Cuttings = require( 'CutData') end
|
local Pocketings = require( 'PocketingData')
|
||||||
if pcall( require, 'MillingData') then Millings = require( 'MillingData') end
|
local Sawings = require( 'SawingData')
|
||||||
if pcall( require, 'PocketingData') then Pocketings = require( 'PocketingData') end
|
local Drillings = require( 'DrillData')
|
||||||
if pcall( require, 'SawingData') then Sawings = require( 'SawingData') end
|
|
||||||
if pcall( require, 'DrillData') then Drillings = require( 'DrillData') end
|
|
||||||
if pcall( require, 'ProbingData') then Probing = require( 'ProbingData') end
|
|
||||||
|
|
||||||
-- tipo di teste macchina
|
-- tipo di teste macchina
|
||||||
local ONE_HEAD = 1 -- una testa (Fast, One, Turn1T)
|
local ONE_HEAD = 1 -- una testa (Fast, One, Turn1T)
|
||||||
@@ -173,7 +170,7 @@ function VerifyTool( Machining, MachiningType, Params, bH2)
|
|||||||
return VerifyDrillPocket( Machining, Params.Diam, Params.Depth, bH2)
|
return VerifyDrillPocket( Machining, Params.Diam, Params.Depth, bH2)
|
||||||
end
|
end
|
||||||
elseif MachiningType == MCH_MY.SAWING then
|
elseif MachiningType == MCH_MY.SAWING then
|
||||||
return ( not Params.Depth or Machining.Tool.MaxMat > Params.Depth - GEO.EPS_SMALL), { H2 = bH2}
|
return true, { H2 = bH2}
|
||||||
elseif MachiningType == MCH_MY.MILLING then
|
elseif MachiningType == MCH_MY.MILLING then
|
||||||
return VerifyMill( Machining, Params.Depth, Params.TuuidMstr, Params.MaxDiam, Params.MaxTotLen, bH2)
|
return VerifyMill( Machining, Params.Depth, Params.TuuidMstr, Params.MaxDiam, Params.MaxTotLen, bH2)
|
||||||
elseif MachiningType == MCH_MY.POCKETING then
|
elseif MachiningType == MCH_MY.POCKETING then
|
||||||
@@ -187,32 +184,18 @@ end
|
|||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
function GetMachinings( MachiningType, sType)
|
function GetMachinings( MachiningType, sType)
|
||||||
local Machinings = {}
|
local Machinings
|
||||||
-- leggo le lavorazioni disponibili
|
-- leggo le lavorazioni disponibili
|
||||||
if MachiningType == MCH_MY.DRILLING then
|
if MachiningType == MCH_MY.DRILLING then
|
||||||
if Drillings and type( Drillings) == "table" then
|
Machinings = Drillings
|
||||||
Machinings = Drillings
|
|
||||||
end
|
|
||||||
elseif MachiningType == MCH_MY.SAWING then
|
elseif MachiningType == MCH_MY.SAWING then
|
||||||
if Cuttings and type( Cuttings) == "table" then
|
Machinings = Cuttings
|
||||||
Machinings = Cuttings
|
|
||||||
end
|
|
||||||
elseif MachiningType == MCH_MY.MILLING then
|
elseif MachiningType == MCH_MY.MILLING then
|
||||||
if Millings and type( Millings) == "table" then
|
Machinings = Millings
|
||||||
Machinings = Millings
|
|
||||||
end
|
|
||||||
elseif MachiningType == MCH_MY.POCKETING then
|
elseif MachiningType == MCH_MY.POCKETING then
|
||||||
if Pocketings and type( Pocketings) == "table" then
|
Machinings = Pocketings
|
||||||
Machinings = Pocketings
|
|
||||||
end
|
|
||||||
elseif MachiningType == MCH_MY.MORTISING then
|
elseif MachiningType == MCH_MY.MORTISING then
|
||||||
if Sawings and type( Sawings) == "table" then
|
Machinings = Sawings
|
||||||
Machinings = Sawings
|
|
||||||
end
|
|
||||||
elseif MachiningType == MCH_MY.PROBING then
|
|
||||||
if Probing and type( Probing) == "table" then
|
|
||||||
Machinings = Probing
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
-- scrivo i parametri utensile nella lavorazione
|
-- scrivo i parametri utensile nella lavorazione
|
||||||
local validMachinings = {}
|
local validMachinings = {}
|
||||||
@@ -225,30 +208,27 @@ function GetMachinings( MachiningType, sType)
|
|||||||
if Machining.Tool.Name then
|
if Machining.Tool.Name then
|
||||||
if EgtTdbSetCurrTool( Machining.Tool.Name) then
|
if EgtTdbSetCurrTool( Machining.Tool.Name) then
|
||||||
table.insert( validMachinings, Machining)
|
table.insert( validMachinings, Machining)
|
||||||
-- se non è tastatura, recupero dati utensile
|
if ( MachiningType == MCH_MY.MILLING) or ( MachiningType == MCH_MY.POCKETING) or ( MachiningType == MCH_MY.DRILLING and EgtStartsWith( sType, 'Pocket')) then
|
||||||
if MachiningType ~= MCH_MY.PROBING then
|
Machining.Tool.MaxMat = EgtTdbGetCurrToolMaxDepth()
|
||||||
if ( MachiningType == MCH_MY.MILLING) or ( MachiningType == MCH_MY.POCKETING) or ( MachiningType == MCH_MY.DRILLING and EgtStartsWith( sType, 'Pocket')) then
|
else
|
||||||
Machining.Tool.MaxMat = EgtTdbGetCurrToolMaxDepth()
|
Machining.Tool.MaxMat = EgtTdbGetCurrToolParam( MCH_TP.MAXMAT)
|
||||||
else
|
|
||||||
Machining.Tool.MaxMat = EgtTdbGetCurrToolParam( MCH_TP.MAXMAT)
|
|
||||||
end
|
|
||||||
if MachiningType == MCH_MY.DRILLING then
|
|
||||||
if EgtStartsWith( Machining.Type, 'Drill') then
|
|
||||||
Machining.SubType = 'Drill'
|
|
||||||
elseif EgtStartsWith( Machining.Type, 'AngleDrill') then
|
|
||||||
Machining.SubType = 'AngleDrill'
|
|
||||||
elseif EgtStartsWith( Machining.Type, 'Pocket') then
|
|
||||||
Machining.SubType = 'DrillPocket'
|
|
||||||
elseif EgtStartsWith( Machining.Type, 'Predrill') then
|
|
||||||
Machining.SubType = 'Predrill'
|
|
||||||
end
|
|
||||||
end
|
|
||||||
Machining.Tool.Diameter = EgtTdbGetCurrToolParam( MCH_TP.DIAM)
|
|
||||||
Machining.Tool.Length = EgtTdbGetCurrToolParam( MCH_TP.LEN)
|
|
||||||
Machining.Tool.TotalLength = EgtTdbGetCurrToolParam( MCH_TP.TOTLEN)
|
|
||||||
Machining.Tool.ToolHolderDiameter = EgtTdbGetCurrToolThDiam()
|
|
||||||
Machining.Tool.ToolHolderLength = EgtTdbGetCurrToolThLength() or 72
|
|
||||||
end
|
end
|
||||||
|
if MachiningType == MCH_MY.DRILLING then
|
||||||
|
if EgtStartsWith( Machining.Type, 'Drill') or EgtStartsWith( Machining.Type, 'MultiDrill') then
|
||||||
|
Machining.SubType = 'Drill'
|
||||||
|
elseif EgtStartsWith( Machining.Type, 'AngleDrill') then
|
||||||
|
Machining.SubType = 'AngleDrill'
|
||||||
|
elseif EgtStartsWith( Machining.Type, 'Pocket') then
|
||||||
|
Machining.SubType = 'DrillPocket'
|
||||||
|
elseif EgtStartsWith( Machining.Type, 'Predrill') then
|
||||||
|
Machining.SubType = 'Predrill'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
Machining.Tool.Diameter = EgtTdbGetCurrToolParam( MCH_TP.DIAM)
|
||||||
|
Machining.Tool.Length = EgtTdbGetCurrToolParam( MCH_TP.LEN)
|
||||||
|
Machining.Tool.TotalLength = EgtTdbGetCurrToolParam( MCH_TP.TOTLEN)
|
||||||
|
Machining.Tool.ToolHolderDiameter = EgtTdbGetCurrToolThDiam()
|
||||||
|
Machining.Tool.ToolHolderLength = EgtTdbGetCurrToolThLength() or 72
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -317,7 +297,7 @@ end
|
|||||||
function ReturnParams( MachiningType, MachiningName, sType, ToolParams)
|
function ReturnParams( MachiningType, MachiningName, sType, ToolParams)
|
||||||
if MachiningType == MCH_MY.DRILLING then
|
if MachiningType == MCH_MY.DRILLING then
|
||||||
local _, sOrigType = EgtEndsWith( sType, '_H2')
|
local _, sOrigType = EgtEndsWith( sType, '_H2')
|
||||||
return MachiningName, sType, EgtIf( sOrigType == 'Drill' or sOrigType == 'Drill_AT' or sOrigType == 'AngleDrill' or sOrigType == 'Predrill' , ToolParams.TMaxMat, ToolParams.TMaxDepth), ToolParams.MaxToolLength, ToolParams.ToolDiam, ToolParams.DiamTh, ToolParams.FreeLen
|
return MachiningName, sType, EgtIf( sOrigType == 'Drill' or sOrigType == 'MultiDrill' or sOrigType == 'Drill_AT' or sOrigType == 'AngleDrill' or sOrigType == 'Predrill' , ToolParams.TMaxMat, ToolParams.TMaxDepth), ToolParams.MaxToolLength, ToolParams.ToolDiam, ToolParams.DiamTh, ToolParams.FreeLen
|
||||||
elseif MachiningType == MCH_MY.SAWING then
|
elseif MachiningType == MCH_MY.SAWING then
|
||||||
return MachiningName, ToolParams.H2
|
return MachiningName, ToolParams.H2
|
||||||
elseif MachiningType == MCH_MY.MILLING then
|
elseif MachiningType == MCH_MY.MILLING then
|
||||||
@@ -362,8 +342,8 @@ local function FindMachining( MachiningType, sType, Params, bTopHead, bDownHead,
|
|||||||
local ForStart = 1
|
local ForStart = 1
|
||||||
local ForEnd = #Machinings
|
local ForEnd = #Machinings
|
||||||
local ForStep = 1
|
local ForStep = 1
|
||||||
-- le forature vanno scorse dal diametro maggiore al minore, a meno che non sia stato passato un ordinamento specifico
|
-- le forature vanno scorse dal diametro maggiore al minore
|
||||||
if MachiningType == MCH_MY.DRILLING and ( not sSortingCriterion or sSortingCriterion == '') then
|
if MachiningType == MCH_MY.DRILLING then
|
||||||
ForStart = #Machinings
|
ForStart = #Machinings
|
||||||
ForEnd = 1
|
ForEnd = 1
|
||||||
ForStep = -1
|
ForStep = -1
|
||||||
@@ -470,22 +450,25 @@ local function FindMachining( MachiningType, sType, Params, bTopHead, bDownHead,
|
|||||||
end
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
function MachiningLib.FindCutting( sType, bTopHead, bDownHead, dDepth, sSortingCriterion)
|
function MachiningLib.FindCutting( sType, bTopHead, bDownHead)
|
||||||
return FindMachining( MCH_MY.SAWING, sType, { Depth = dDepth}, bTopHead, bDownHead, nil, nil, sSortingCriterion)
|
return FindMachining( MCH_MY.SAWING, sType, nil, bTopHead, bDownHead)
|
||||||
end
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
function MachiningLib.FindDrilling( dDiam, dDepth, bTopHead, bDownHead, bExcludeH2, bAngleTransmission, bIsPredrill, bExcludeH3, sSortingCriterion)
|
function MachiningLib.FindDrilling( dDiam, dDepth, bTopHead, bDownHead, bExcludeH2, bAngleTransmission, bIsPredrill, bIsMultidrill)
|
||||||
local MachiningName, MachiningType, Param1, Param2, Param3, Param4, Param5, sTypeMach
|
local MachiningName, MachiningType, Param1, Param2, Param3, Param4, Param5, sTypeMach
|
||||||
|
-- se la macchina ha gruppi a forare, si prova con quelli
|
||||||
|
if bIsMultidrill then
|
||||||
|
sTypeMach = 'MultiDrill'
|
||||||
-- se il foro è un predrill, cerco solo punte abilitate al Predrill
|
-- se il foro è un predrill, cerco solo punte abilitate al Predrill
|
||||||
if bIsPredrill then
|
elseif bIsPredrill then
|
||||||
sTypeMach = 'Predrill'
|
sTypeMach = 'Predrill'
|
||||||
else
|
else
|
||||||
sTypeMach = EgtIf( bAngleTransmission, 'Drill_AT', 'Drill')
|
sTypeMach = EgtIf( bAngleTransmission, 'Drill_AT', 'Drill')
|
||||||
end
|
end
|
||||||
MachiningName, MachiningType, Param1, Param2, Param3, Param4, Param5 = FindMachining( MCH_MY.DRILLING, sTypeMach, { Diam = dDiam, Depth = dDepth}, bTopHead, bDownHead, bExcludeH2, bExcludeH3, sSortingCriterion)
|
MachiningName, MachiningType, Param1, Param2, Param3, Param4, Param5 = FindMachining( MCH_MY.DRILLING, sTypeMach, { Diam = dDiam, Depth = dDepth}, bTopHead, bDownHead, bExcludeH2)
|
||||||
if ( not MachiningName or MachiningName == '') then
|
if ( not MachiningName or MachiningName == '') then
|
||||||
MachiningName, MachiningType, Param1, Param2, Param3, Param4, Param5 = FindMachining( MCH_MY.DRILLING, EgtIf( bAngleTransmission, 'Pocket_AT', 'Pocket'), { Diam = dDiam, Depth = dDepth}, bTopHead, bDownHead, bExcludeH2, bExcludeH3, sSortingCriterion)
|
MachiningName, MachiningType, Param1, Param2, Param3, Param4, Param5 = FindMachining( MCH_MY.DRILLING, EgtIf( bAngleTransmission, 'Pocket_AT', 'Pocket'), { Diam = dDiam, Depth = dDepth}, bTopHead, bDownHead)
|
||||||
end
|
end
|
||||||
if MachiningName and MachiningName ~= '' then
|
if MachiningName and MachiningName ~= '' then
|
||||||
return MachiningName, MachiningType, Param1, Param2, Param3, Param4, Param5
|
return MachiningName, MachiningType, Param1, Param2, Param3, Param4, Param5
|
||||||
|
|||||||
+9
-27
@@ -92,7 +92,7 @@ function ProcessCut.Classify( Proc, b3Raw)
|
|||||||
-- calcolo l'ingombro orizzontale della faccia
|
-- calcolo l'ingombro orizzontale della faccia
|
||||||
local _, DimH, DimV = BL.GetFaceHvRefDim( Proc.Id, 0)
|
local _, DimH, DimV = BL.GetFaceHvRefDim( Proc.Id, 0)
|
||||||
-- confronto questo ingombro con il doppio della massima dimensione del DiceCut (impossibile lavorare sotto da sopra se più di 2 tagli oppure se tipo PF, taglio inclinato in Y e non taglio singolo orizzontale)
|
-- confronto questo ingombro con il doppio della massima dimensione del DiceCut (impossibile lavorare sotto da sopra se più di 2 tagli oppure se tipo PF, taglio inclinato in Y e non taglio singolo orizzontale)
|
||||||
if DimH > 2 * BD.MAX_DIM_DICE or ( BD.C_SIMM and ( abs( vtN:getY()) > 0.1) and dMaxMat < DimH + BD.CUT_EXTRA) then
|
if DimH > 2 * BD.MAX_DIM_DICE or ( BD.C_SIMM and abs( vtN:getY()) > 0.1 and dMaxMat < DimH + BD.CUT_EXTRA) then
|
||||||
return true, true
|
return true, true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -262,7 +262,6 @@ end
|
|||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
-- Applicazione della lavorazione con testa da sopra
|
-- Applicazione della lavorazione con testa da sopra
|
||||||
local function MakeFromTop( sCutting, Proc, nPhase, nRawId, nPartId, dOvmHead, bFromBottom, bCustDiceCut, bForced, b3Raw, sNotes, nLimitingSurf, bForceTangentLeadInOut)
|
local function MakeFromTop( sCutting, Proc, nPhase, nRawId, nPartId, dOvmHead, bFromBottom, bCustDiceCut, bForced, b3Raw, sNotes, nLimitingSurf, bForceTangentLeadInOut)
|
||||||
local sWarn
|
|
||||||
-- ingombro del grezzo
|
-- ingombro del grezzo
|
||||||
b3Raw = b3Raw or EgtGetRawPartBBox( nRawId)
|
b3Raw = b3Raw or EgtGetRawPartBBox( nRawId)
|
||||||
-- ingombro del pezzo
|
-- ingombro del pezzo
|
||||||
@@ -273,7 +272,7 @@ local function MakeFromTop( sCutting, Proc, nPhase, nRawId, nPartId, dOvmHead, b
|
|||||||
local dNzLimDwnUp = BL.GetNzLimDownUp( b3Raw, vtN)
|
local dNzLimDwnUp = BL.GetNzLimDownUp( b3Raw, vtN)
|
||||||
local bDownCut = ( vtN:getZ() <= dNzLimDwnUp)
|
local bDownCut = ( vtN:getZ() <= dNzLimDwnUp)
|
||||||
if bFromBottom == nil then
|
if bFromBottom == nil then
|
||||||
bFromBottom = ( vtN:getZ() > 0.25 and ( b3Solid:getDimX() < BD.LEN_SHORT_PART and BL.IsSplittedPartPhase( nPhase)) and not Proc.AdvTail and vtN:getX() < 0 and abs( vtN:getY()) < 0.259)
|
bFromBottom = ( vtN:getZ() > 0.25 and b3Solid:getDimX() < BD.LEN_SHORT_PART and not Proc.AdvTail and vtN:getX() < 0 and abs( vtN:getY()) < 0.259)
|
||||||
end
|
end
|
||||||
local dMinFeatureLengthForLongCut = EgtIf( BD.C_SIMM, 590, 400)
|
local dMinFeatureLengthForLongCut = EgtIf( BD.C_SIMM, 590, 400)
|
||||||
-- verifico se da considerare taglio lungo ( non da sotto, inclinato non più di 30deg, largo come la trave e abbastanza lungo)
|
-- verifico se da considerare taglio lungo ( non da sotto, inclinato non più di 30deg, largo come la trave e abbastanza lungo)
|
||||||
@@ -374,17 +373,10 @@ local function MakeFromTop( sCutting, Proc, nPhase, nRawId, nPartId, dOvmHead, b
|
|||||||
end
|
end
|
||||||
-- verifico se necessari tagli supplementari o se presente superficie limitante
|
-- verifico se necessari tagli supplementari o se presente superficie limitante
|
||||||
EgtOutLog( string.format( 'MaxDepth=%.1f MaxVertDepth=%.1f CutH=%.1f CutV=%.1f', dMaxDepth, dMaxVertDepth, dCutH, dCutV), 3)
|
EgtOutLog( string.format( 'MaxDepth=%.1f MaxVertDepth=%.1f CutH=%.1f CutV=%.1f', dMaxDepth, dMaxVertDepth, dCutH, dCutV), 3)
|
||||||
-- se lungo, una faccia e rivolto sul retro verso l'alto si forzano i cubetti per evitare di rovinare il pezzo successivo
|
|
||||||
local bForceDicing = ( Proc.Fct == 1 and Proc.AffectedFaces.Left and bLongCut and vtN:getZ() > 10 * GEO.EPS_SMALL and vtN:getY() < 10 * GEO.EPS_SMALL)
|
|
||||||
local vCuts = {}
|
local vCuts = {}
|
||||||
if ( ( not Proc.AdvTail) or bForceDicing) and ( dCutH > dMaxDepth - BD.CUT_EXTRA - 3 * BD.COLL_SIC or dCutV > dMaxVertDepth - BD.CUT_EXTRA - 3 * BD.COLL_SIC) then
|
if not Proc.AdvTail and ( dCutH > dMaxDepth - BD.CUT_EXTRA - 3 * BD.COLL_SIC or dCutV > dMaxVertDepth - BD.CUT_EXTRA - 3 * BD.COLL_SIC) then
|
||||||
local ptExtra, vtExtra
|
local ptExtra, vtExtra
|
||||||
local bAutoCalcSurf = true
|
local bAutoCalcSurf = true
|
||||||
if Proc.AdvTail then
|
|
||||||
-- do avviso che la lama può sbordare nel pezzo successivo
|
|
||||||
sWarn = 'Warning : Cut machining can damage next piece'
|
|
||||||
EgtOutLog( sWarn .. ' (process ' .. tostring( Proc.Id) .. ')')
|
|
||||||
end
|
|
||||||
if bFillAreaPiece or bFillTail then
|
if bFillAreaPiece or bFillTail then
|
||||||
local ptMiddle = ( b3Solid:getMin() + b3Solid:getMax()) / 2
|
local ptMiddle = ( b3Solid:getMin() + b3Solid:getMax()) / 2
|
||||||
ptExtra = Point3d( b3Solid:getMin():getX() + 5*GEO.EPS_SMALL, ptMiddle:getY(), ptMiddle:getZ())
|
ptExtra = Point3d( b3Solid:getMin():getX() + 5*GEO.EPS_SMALL, ptMiddle:getY(), ptMiddle:getZ())
|
||||||
@@ -423,7 +415,7 @@ local function MakeFromTop( sCutting, Proc, nPhase, nRawId, nPartId, dOvmHead, b
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
-- se il taglio è più spesso della lama abilito il dicing, altrimenti no
|
-- se il taglio è più spesso della lama abilito il dicing, altrimenti no
|
||||||
if ( dMaxElev > dSawThick) or bForceDicing then
|
if dMaxElev > dSawThick then
|
||||||
vCuts = DC.GetDice( nAddGrpId, EgtIf( bForced, b3Raw, b3Solid), ptC, vtN, bAutoCalcSurf, ptExtra, vtExtra, dMaxVertDepth - BD.CUT_EXTRA, dNewDiceDim)
|
vCuts = DC.GetDice( nAddGrpId, EgtIf( bForced, b3Raw, b3Solid), ptC, vtN, bAutoCalcSurf, ptExtra, vtExtra, dMaxVertDepth - BD.CUT_EXTRA, dNewDiceDim)
|
||||||
-- se taglio sborda in coda e non è stato inserito nessun taglio a cubetti, lo rilancio con le dimensioni customizzate
|
-- se taglio sborda in coda e non è stato inserito nessun taglio a cubetti, lo rilancio con le dimensioni customizzate
|
||||||
if ( bFillTail or bCustDiceCut) and #vCuts == 0 then
|
if ( bFillTail or bCustDiceCut) and #vCuts == 0 then
|
||||||
@@ -616,8 +608,7 @@ local function MakeFromTop( sCutting, Proc, nPhase, nRawId, nPartId, dOvmHead, b
|
|||||||
local vtOrthoO
|
local vtOrthoO
|
||||||
if bFromBottom and dCutV < dMaxDepth - BD.CUT_EXTRA and vtN:getZ() > 0 then
|
if bFromBottom and dCutV < dMaxDepth - BD.CUT_EXTRA and vtN:getZ() > 0 then
|
||||||
vtOrthoO = -Z_AX()
|
vtOrthoO = -Z_AX()
|
||||||
elseif ( bHorizCut or ( dCutV < dMaxDepth - BD.CUT_EXTRA and not bVertCutOk)) and
|
elseif bHorizCut and ( not bVertCutOk or b3Solid:getDimX() > BD.LEN_SHORT_PART or Proc.AdvTail or ( vtN:getX() > 0 and vtN:getZ() <= 0.708) or ( abs( vtN:getY()) < 0.1 and vtN:getZ() <= 0)) then
|
||||||
( not bVertCutOk or b3Solid:getDimX() > BD.LEN_SHORT_PART or Proc.AdvTail or ( vtN:getX() > 0 and vtN:getZ() <= 0.708) or ( abs( vtN:getY()) < 0.1 and vtN:getZ() <= 0)) then
|
|
||||||
vtOrthoO = Z_AX()
|
vtOrthoO = Z_AX()
|
||||||
elseif b3Solid:getDimX() < BD.LEN_SHORT_PART and not Proc.AdvTail and abs( vtN:getY()) > 0.259 and
|
elseif b3Solid:getDimX() < BD.LEN_SHORT_PART and not Proc.AdvTail and abs( vtN:getY()) > 0.259 and
|
||||||
vtN:getZ() > -0.174 and abs( vtN:getY()) > abs( vtN:getZ()) and dCutH < dMaxDepth + 10 * GEO.EPS_SMALL then
|
vtN:getZ() > -0.174 and abs( vtN:getY()) > abs( vtN:getZ()) and dCutH < dMaxDepth + 10 * GEO.EPS_SMALL then
|
||||||
@@ -650,7 +641,7 @@ local function MakeFromTop( sCutting, Proc, nPhase, nRawId, nPartId, dOvmHead, b
|
|||||||
local bOk, sErr = Fbs.MakeOne( Proc.Id, 0, sCutting, dSawDiam, vtOrthoO, dVzLimDwnUp, dCutExtra, BD.CUT_SIC, 0, 0, 0, nil, b3Raw)
|
local bOk, sErr = Fbs.MakeOne( Proc.Id, 0, sCutting, dSawDiam, vtOrthoO, dVzLimDwnUp, dCutExtra, BD.CUT_SIC, 0, 0, 0, nil, b3Raw)
|
||||||
if not bOk then return bOk, sErr end
|
if not bOk then return bOk, sErr end
|
||||||
end
|
end
|
||||||
return true, sWarn
|
return true
|
||||||
end
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
@@ -875,31 +866,22 @@ function ProcessCut.Make( Proc, nPhase, nRawId, nPartId, dOvmHead, bFromBottom,
|
|||||||
return false, sErr
|
return false, sErr
|
||||||
end
|
end
|
||||||
local bNoDicing = false
|
local bNoDicing = false
|
||||||
local sWarn
|
|
||||||
-- se taglio con testa da sopra
|
-- se taglio con testa da sopra
|
||||||
if not bDownHead and not bDownTurn then
|
if not bDownHead and not bDownTurn then
|
||||||
local bOk, sErr, bNoDicing2 = MakeFromTop( sCutting, Proc, nPhase, nRawId, nPartId, dOvmHead, bFromBottom, bCustDiceCut, bForced, b3Raw, sNotes, nLimitingSurf, bForceTangentLeadInOut)
|
local bOk, sErr, bNoDicing2 = MakeFromTop( sCutting, Proc, nPhase, nRawId, nPartId, dOvmHead, bFromBottom, bCustDiceCut, bForced, b3Raw, sNotes, nLimitingSurf, bForceTangentLeadInOut)
|
||||||
bNoDicing = bNoDicing2
|
bNoDicing = bNoDicing2
|
||||||
if not bOk then
|
if not bOk then return false, sErr end
|
||||||
return false, sErr
|
|
||||||
else
|
|
||||||
sWarn = sErr
|
|
||||||
end
|
|
||||||
-- altrimenti taglio con testa da sotto
|
-- altrimenti taglio con testa da sotto
|
||||||
else
|
else
|
||||||
local bOk, sErr = MakeFromDown( sCutting, Proc, nPhase, nRawId, nPartId, dOvmHead)
|
local bOk, sErr = MakeFromDown( sCutting, Proc, nPhase, nRawId, nPartId, dOvmHead)
|
||||||
if not bOk then
|
if not bOk then return false, sErr end
|
||||||
return false, sErr
|
|
||||||
else
|
|
||||||
sWarn = sErr
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
-- Aggiornamento ingombro (se vero taglio o richiesto)
|
-- Aggiornamento ingombro (se vero taglio o richiesto)
|
||||||
-- Se lascio il cordolo (bNoDicing) non aggiorno il grezzo perchè lo scarto rimane attaccato
|
-- Se lascio il cordolo (bNoDicing) non aggiorno il grezzo perchè lo scarto rimane attaccato
|
||||||
if ( ProcessCut.Identify( Proc) or bUpdateIng) and not bNoDicing then
|
if ( ProcessCut.Identify( Proc) or bUpdateIng) and not bNoDicing then
|
||||||
UpdateEncumbrance( Proc, vtN, dOvmHead, nRawId, b3Solid, b3Raw)
|
UpdateEncumbrance( Proc, vtN, dOvmHead, nRawId, b3Solid, b3Raw)
|
||||||
end
|
end
|
||||||
return true, sWarn
|
return true
|
||||||
end
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
|
|||||||
+49
-48
@@ -102,8 +102,8 @@ end
|
|||||||
function ProcessDrill.GetData( Proc, b3Raw)
|
function ProcessDrill.GetData( Proc, b3Raw)
|
||||||
local AuxId = EgtGetInfo( Proc.Id, 'AUXID', 'i')
|
local AuxId = EgtGetInfo( Proc.Id, 'AUXID', 'i')
|
||||||
-- verifico se foro da adattare
|
-- verifico se foro da adattare
|
||||||
|
local nNewAuxId
|
||||||
if EgtExistsInfo( Proc.Id, 'DiamUser') then
|
if EgtExistsInfo( Proc.Id, 'DiamUser') then
|
||||||
local nNewAuxId
|
|
||||||
if AuxId then nNewAuxId = AuxId + Proc.Id end
|
if AuxId then nNewAuxId = AuxId + Proc.Id end
|
||||||
if AuxId and EgtGetType( nNewAuxId) == GDB_TY.CRV_ARC and BD.USER_HOLE_DIAM and BD.USER_HOLE_DIAM > 1 then
|
if AuxId and EgtGetType( nNewAuxId) == GDB_TY.CRV_ARC and BD.USER_HOLE_DIAM and BD.USER_HOLE_DIAM > 1 then
|
||||||
EgtModifyArcRadius( nNewAuxId, BD.USER_HOLE_DIAM / 2)
|
EgtModifyArcRadius( nNewAuxId, BD.USER_HOLE_DIAM / 2)
|
||||||
@@ -115,7 +115,13 @@ function ProcessDrill.GetData( Proc, b3Raw)
|
|||||||
-- recupero faccia di entrata e uscita
|
-- recupero faccia di entrata e uscita
|
||||||
local nFcs = EgtGetInfo( Proc.Id, 'FCS', 'i') or 0
|
local nFcs = EgtGetInfo( Proc.Id, 'FCS', 'i') or 0
|
||||||
local nFce = EgtGetInfo( Proc.Id, 'FCE', 'i') or 0
|
local nFce = EgtGetInfo( Proc.Id, 'FCE', 'i') or 0
|
||||||
return dDiam, dLen, nFcs, nFce
|
|
||||||
|
local vtDrillDir
|
||||||
|
if AuxId then
|
||||||
|
nNewAuxId = AuxId + Proc.Id
|
||||||
|
vtDrillDir = EgtCurveExtrusion( nNewAuxId, GDB_RT.GLOB)
|
||||||
|
end
|
||||||
|
return dDiam, dLen, nFcs, nFce, vtDrillDir
|
||||||
end
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
@@ -209,8 +215,7 @@ function ProcessDrill.AddPredrillFromDrillProc( Proc)
|
|||||||
PredrillProc.MainId = Proc.MainId
|
PredrillProc.MainId = Proc.MainId
|
||||||
PredrillProc.IsPredrill = true
|
PredrillProc.IsPredrill = true
|
||||||
PredrillProc.IsPredrillOf = Proc.Id
|
PredrillProc.IsPredrillOf = Proc.Id
|
||||||
-- recupero l'elenco delle facce della parte interessate dalla feature
|
|
||||||
PredrillProc.AffectedFaces = BL.GetProcessAffectedFaces( PredrillProc)
|
|
||||||
return true, PredrillProc
|
return true, PredrillProc
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -315,7 +320,7 @@ end
|
|||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
-- Applicazione della lavorazione
|
-- Applicazione della lavorazione
|
||||||
function ProcessDrill.Make( Proc, nPhase, nRawId, nPartId)
|
function ProcessDrill.Make( Proc, nPhase, nRawId, nPartId, bUseMultiDrill)
|
||||||
-- default per costanti
|
-- default per costanti
|
||||||
BD.DRILL_VX_MAX_ANGLEDRILL = ( BD.DRILL_VX_MAX_ANGLEDRILL or 0.928)
|
BD.DRILL_VX_MAX_ANGLEDRILL = ( BD.DRILL_VX_MAX_ANGLEDRILL or 0.928)
|
||||||
-- ingombro del pezzo
|
-- ingombro del pezzo
|
||||||
@@ -388,28 +393,9 @@ function ProcessDrill.Make( Proc, nPhase, nRawId, nPartId)
|
|||||||
end
|
end
|
||||||
-- primo gruppo di controlli con lunghezza utensile pari a metà foro se passante
|
-- primo gruppo di controlli con lunghezza utensile pari a metà foro se passante
|
||||||
-- recupero la lavorazione
|
-- recupero la lavorazione
|
||||||
local sDrilling, sType, dMaxDepth, dMaxToolLength, dToolDiam, dDiamTh, dToolFreeLen = ML.FindDrilling( dDiam, dCheckDepth, bDrillUp, bDrillDown, bExcludeH2, bDrillAngTrasm, Proc.IsPredrill)
|
local sDrilling, sType, dMaxDepth, dMaxToolLength, dToolDiam, dDiamTh, dToolFreeLen = ML.FindDrilling( dDiam, dCheckDepth, bDrillUp, bDrillDown, bExcludeH2, bDrillAngTrasm, Proc.IsPredrill, bUseMultiDrill)
|
||||||
|
|
||||||
if sDrilling then
|
|
||||||
-- Determino la faccia di inizio del foro e dati correlati
|
|
||||||
local nFac, CosB, vFaces = GetHoleStartData( ptCen, vtExtr, b3Solid)
|
|
||||||
-- Calcolo acciorciamento affondamento utile per evitare collisione portautensile con faccia
|
|
||||||
local TgA = CosB / sqrt( 1 - CosB * CosB)
|
|
||||||
local dSubL = ( dDiamTh / 2 + ( Proc.Diam - dToolDiam) / 2 + 4) * TgA
|
|
||||||
-- Per fori molto inclinati ( < 30 gradi) si usa la testa della macchina per l'accorciamento. Fast esclusa
|
|
||||||
if BD.C_SIMM and CosB > 0.866 then
|
|
||||||
dSubL = ( 190 / 2 + ( Proc.Diam - dToolDiam) / 2 + 4) * TgA - 116
|
|
||||||
end
|
|
||||||
local dMaxDepthOri = dMaxDepth
|
|
||||||
dMaxDepth = min( dMaxDepth, max( dToolFreeLen - dSubL, 0))
|
|
||||||
-- se utensile scelto non arriva in fondo, cerco il più lungo
|
|
||||||
if dMaxDepth < GEO.EPS_SMALL * 10 then
|
|
||||||
sDrilling, sType, dMaxDepth, dMaxToolLength, dToolDiam, dDiamTh, dToolFreeLen = ML.FindDrilling( dDiam, dCheckDepth, bDrillUp, bDrillDown, bExcludeH2, bDrillAngTrasm, Proc.IsPredrill, nil, 'Longest')
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
if not sDrilling and dCheckDepth then
|
if not sDrilling and dCheckDepth then
|
||||||
sDrilling, sType, dMaxDepth, dMaxToolLength, dToolDiam, dDiamTh, dToolFreeLen = ML.FindDrilling( dDiam, 0, bDrillUp, bDrillDown, bExcludeH2, bDrillAngTrasm, Proc.IsPredrill)
|
sDrilling, sType, dMaxDepth, dMaxToolLength, dToolDiam, dDiamTh, dToolFreeLen = ML.FindDrilling( dDiam, 0, bDrillUp, bDrillDown, bExcludeH2, bDrillAngTrasm, Proc.IsPredrill, bUseMultiDrill)
|
||||||
if sDrilling then dCheckDepth = nil end
|
if sDrilling then dCheckDepth = nil end
|
||||||
end
|
end
|
||||||
if not sDrilling then
|
if not sDrilling then
|
||||||
@@ -502,28 +488,16 @@ function ProcessDrill.Make( Proc, nPhase, nRawId, nPartId)
|
|||||||
EgtOutLog( sErr)
|
EgtOutLog( sErr)
|
||||||
return false, sErr
|
return false, sErr
|
||||||
end
|
end
|
||||||
-- eventuale inversione foro in base al lato di lavoro e al lato testa dell'utensile scelto
|
|
||||||
-- se non già richiesta inversione e foro quasi orizzontale (15deg) passante
|
|
||||||
if not bToInvert and Proc.Flg == 1 and bOpen and abs( vtExtr:getZ()) < 0.259 and abs( vtExtr:getY()) > 0.966 then
|
|
||||||
local Tool = BL.GetToolFromMachining( sDrilling)
|
|
||||||
-- lato testa e lato di lavoro devono corrispondere
|
|
||||||
if ( ( Tool.PreferredSide.bFront == true) and vtExtr:getY() > 10 * GEO.EPS_SMALL)
|
|
||||||
or ( ( Tool.PreferredSide.bBack == true) and vtExtr:getY() < - 10 * GEO.EPS_SMALL) then
|
|
||||||
ptCen = ptCen - vtExtr * dLen
|
|
||||||
vtExtr = - vtExtr
|
|
||||||
bToInvert = true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
-- Determino la faccia di inizio del foro e dati correlati
|
-- Determino la faccia di inizio del foro e dati correlati
|
||||||
nFac, CosB, vFaces = GetHoleStartData( ptCen, vtExtr, b3Solid)
|
local nFac, CosB, vFaces = GetHoleStartData( ptCen, vtExtr, b3Solid)
|
||||||
-- Calcolo acciorciamento affondamento utile per evitare collisione portautensile con faccia
|
-- Calcolo acciorciamento affondamento utile per evitare collisione portautensile con faccia
|
||||||
TgA = CosB / sqrt( 1 - CosB * CosB)
|
local TgA = CosB / sqrt( 1 - CosB * CosB)
|
||||||
dSubL = ( dDiamTh / 2 + ( Proc.Diam - dToolDiam) / 2 + 4) * TgA
|
local dSubL = ( dDiamTh / 2 + ( Proc.Diam - dToolDiam) / 2 + 4) * TgA
|
||||||
-- Per fori molto inclinati ( < 30 gradi) si usa la testa della macchina per l'accorciamento. Fast esclusa
|
-- Per fori molto inclinati ( < 30 gradi) si usa la testa della macchina per l'accorciamento. Fast esclusa
|
||||||
if BD.C_SIMM and CosB > 0.866 then
|
if BD.C_SIMM and CosB > 0.866 then
|
||||||
dSubL = ( 190 / 2 + ( Proc.Diam - dToolDiam) / 2 + 4) * TgA - 116
|
dSubL = ( 190 / 2 + ( Proc.Diam - dToolDiam) / 2 + 4) * TgA - 116
|
||||||
end
|
end
|
||||||
dMaxDepthOri = dMaxDepth
|
local dMaxDepthOri = dMaxDepth
|
||||||
dMaxDepth = min( dMaxDepth, max( dToolFreeLen - dSubL, 0))
|
dMaxDepth = min( dMaxDepth, max( dToolFreeLen - dSubL, 0))
|
||||||
-- Verifico inclinazione foro nei limiti
|
-- Verifico inclinazione foro nei limiti
|
||||||
local bTryDrill = EgtIf( dMaxDepth > 0, ( CosB < BD.DRILL_VX_MAX), false)
|
local bTryDrill = EgtIf( dMaxDepth > 0, ( CosB < BD.DRILL_VX_MAX), false)
|
||||||
@@ -586,19 +560,34 @@ function ProcessDrill.Make( Proc, nPhase, nRawId, nPartId)
|
|||||||
return false, sErr
|
return false, sErr
|
||||||
end
|
end
|
||||||
-- aggiungo geometria
|
-- aggiungo geometria
|
||||||
EgtSetMachiningGeometry( {{ AuxId, -1}})
|
if Proc.SkippedGeometries and #Proc.SkippedGeometries > 0 then
|
||||||
|
EgtSetMachiningGeometry( Proc.SkippedGeometries)
|
||||||
|
Proc.SkippedGeometries = nil
|
||||||
|
elseif Proc.OtherGeometries and #Proc.OtherGeometries > 0 then
|
||||||
|
local HolesGeometries = {}
|
||||||
|
-- aggiungo foro principale
|
||||||
|
table.insert( HolesGeometries, { AuxId, -1})
|
||||||
|
-- aggiungo altre geometrie connesse
|
||||||
|
for i = 1, #Proc.OtherGeometries do
|
||||||
|
-- recupero geometria da lavorare
|
||||||
|
local OtherAuxId = Proc.OtherGeometries[i].Id + EgtGetInfo( Proc.OtherGeometries[i].Id, 'AUXID', 'i')
|
||||||
|
local Geometry = { OtherAuxId, -1}
|
||||||
|
table.insert( HolesGeometries, Geometry)
|
||||||
|
end
|
||||||
|
EgtSetMachiningGeometry( HolesGeometries)
|
||||||
|
else
|
||||||
|
EgtSetMachiningGeometry( {{ AuxId, -1}})
|
||||||
|
end
|
||||||
-- eventuale inversione
|
-- eventuale inversione
|
||||||
if sType == 'Drill' or sType == 'Drill_H2' or sType == 'Drill_AT' or sType == 'AngleDrill' or sType == 'Predrill' then
|
if sType == 'Drill' or sType == 'MultiDrill' or sType == 'Drill_H2' or sType == 'Drill_AT' or sType == 'AngleDrill' or sType == 'Predrill' then
|
||||||
EgtSetMachiningParam( MCH_MP.INVERT, bToInvert)
|
EgtSetMachiningParam( MCH_MP.INVERT, bToInvert)
|
||||||
else
|
else
|
||||||
EgtSetMachiningParam( MCH_MP.TOOLINVERT, bToInvert)
|
EgtSetMachiningParam( MCH_MP.TOOLINVERT, bToInvert)
|
||||||
end
|
end
|
||||||
-- imposto posizione braccio porta testa
|
-- imposto posizione braccio porta testa
|
||||||
local nSCC = MCH_SCC.NONE
|
local nSCC = MCH_SCC.NONE
|
||||||
if bDrillAngTrasm then
|
if bDrillAngTrasm or bUseMultiDrill then
|
||||||
nSCC = MCH_SCC.ADIR_NEAR
|
nSCC = MCH_SCC.ADIR_NEAR
|
||||||
elseif BD.TURN == 2 then
|
|
||||||
nSCC = MCH_SCC.ADIR_ZP
|
|
||||||
elseif not BD.C_SIMM and not BD.TURN then
|
elseif not BD.C_SIMM and not BD.TURN then
|
||||||
nSCC = MCH_SCC.ADIR_YM
|
nSCC = MCH_SCC.ADIR_YM
|
||||||
if AreSameVectorApprox( vtExtr, Z_AX()) then
|
if AreSameVectorApprox( vtExtr, Z_AX()) then
|
||||||
@@ -657,13 +646,25 @@ function ProcessDrill.Make( Proc, nPhase, nRawId, nPartId)
|
|||||||
-- eseguo
|
-- eseguo
|
||||||
local bOk = ML.ApplyMachining( true, false)
|
local bOk = ML.ApplyMachining( true, false)
|
||||||
if not bOk and bDownDrill and bOpen and abs( Proc.Flg) == 1 then
|
if not bOk and bDownDrill and bOpen and abs( Proc.Flg) == 1 then
|
||||||
if sType == 'Drill' or sType == 'Drill_H2' or sType == 'AngleDrill' then
|
if sType == 'Drill' or sType == 'MultiDrill' or sType == 'Drill_H2' or sType == 'AngleDrill' then
|
||||||
EgtSetMachiningParam( MCH_MP.INVERT, true)
|
EgtSetMachiningParam( MCH_MP.INVERT, true)
|
||||||
else
|
else
|
||||||
EgtSetMachiningParam( MCH_MP.TOOLINVERT, true)
|
EgtSetMachiningParam( MCH_MP.TOOLINVERT, true)
|
||||||
end
|
end
|
||||||
bOk = ML.ApplyMachining( true, false)
|
bOk = ML.ApplyMachining( true, false)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- in caso di fori raggruppati, mi faccio restituire gli eventuali fori saltati
|
||||||
|
local SkippedGeometries = {}
|
||||||
|
SkippedGeometries = EgtGetMachiningSkippedGeometry()
|
||||||
|
if SkippedGeometries and #SkippedGeometries > 0 and bUseMultiDrill then
|
||||||
|
if #SkippedGeometries == #Proc.OtherGeometries + 1 then
|
||||||
|
EgtRemoveOperation( nMchId)
|
||||||
|
end
|
||||||
|
Proc.SkippedGeometries = SkippedGeometries
|
||||||
|
ProcessDrill.Make( Proc, nPhase, nRawId, nPartId, false)
|
||||||
|
end
|
||||||
|
|
||||||
if not bOk then
|
if not bOk then
|
||||||
local _, sErr = EgtGetLastMachMgrError()
|
local _, sErr = EgtGetLastMachMgrError()
|
||||||
EgtSetOperationMode( nMchId, false)
|
EgtSetOperationMode( nMchId, false)
|
||||||
|
|||||||
@@ -20,7 +20,6 @@ local ProcessDtMortise = {}
|
|||||||
require( 'EgtBase')
|
require( 'EgtBase')
|
||||||
local BL = require( 'BeamLib')
|
local BL = require( 'BeamLib')
|
||||||
local Cut = require( 'ProcessCut')
|
local Cut = require( 'ProcessCut')
|
||||||
local Probe = require( 'ProcessProbing')
|
|
||||||
|
|
||||||
EgtOutLog( ' ProcessDtMortise started', 1)
|
EgtOutLog( ' ProcessDtMortise started', 1)
|
||||||
|
|
||||||
@@ -112,6 +111,9 @@ local function CalcTopPath( nProcId, AuxId, nAddGrpId, dAltMort, dSideAng, b3Sol
|
|||||||
EgtAddCurveCompoLineTg( NewAuxId, 100, false)
|
EgtAddCurveCompoLineTg( NewAuxId, 100, false)
|
||||||
EgtAddCurveCompoLineTg( NewAuxId, 100, true)
|
EgtAddCurveCompoLineTg( NewAuxId, 100, true)
|
||||||
EgtMergeCurvesInCurveCompo( NewAuxId)
|
EgtMergeCurvesInCurveCompo( NewAuxId)
|
||||||
|
-- eseguo traslazione e offset per portarla sul top
|
||||||
|
local vtMove = EgtCurveExtrusion( AuxId, GDB_RT.GLOB) * ( dAltMort - 10 * GEO.EPS_SMALL)
|
||||||
|
EgtMove( NewAuxId, vtMove, GDB_RT.GLOB)
|
||||||
local dOffset = dAltMort * tan( dSideAng)
|
local dOffset = dAltMort * tan( dSideAng)
|
||||||
if not EgtOffsetCurve( NewAuxId, dOffset) then return end
|
if not EgtOffsetCurve( NewAuxId, dOffset) then return end
|
||||||
-- la limito entro la trave
|
-- la limito entro la trave
|
||||||
@@ -119,9 +121,6 @@ local function CalcTopPath( nProcId, AuxId, nAddGrpId, dAltMort, dSideAng, b3Sol
|
|||||||
local vtBoxDiag = b3Solid:getMax() - b3Solid:getMin()
|
local vtBoxDiag = b3Solid:getMax() - b3Solid:getMin()
|
||||||
local nCount
|
local nCount
|
||||||
NewAuxId, nCount = EgtTrimFlatCurveWithBox( NewAuxId, refBox, vtBoxDiag, true, true, GDB_RT.GLOB)
|
NewAuxId, nCount = EgtTrimFlatCurveWithBox( NewAuxId, refBox, vtBoxDiag, true, true, GDB_RT.GLOB)
|
||||||
-- eseguo traslazione e offset per portarla sul top
|
|
||||||
local vtMove = EgtCurveExtrusion( AuxId, GDB_RT.GLOB) * ( dAltMort - 10 * GEO.EPS_SMALL)
|
|
||||||
EgtMove( NewAuxId, vtMove, GDB_RT.GLOB)
|
|
||||||
-- se divisa in più parti, le unisco congiungendole con segmenti
|
-- se divisa in più parti, le unisco congiungendole con segmenti
|
||||||
if nCount > 1 then
|
if nCount > 1 then
|
||||||
if EgtGetType( NewAuxId) ~= GDB_TY.CRV_COMPO then
|
if EgtGetType( NewAuxId) ~= GDB_TY.CRV_COMPO then
|
||||||
@@ -274,9 +273,7 @@ function ProcessDtMortise.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH)
|
|||||||
local dToolDiam = 100
|
local dToolDiam = 100
|
||||||
local dMaxMat = 30
|
local dMaxMat = 30
|
||||||
local dSideAng = 0
|
local dSideAng = 0
|
||||||
local sHeadTool = 'H1'
|
|
||||||
local bCW = true
|
local bCW = true
|
||||||
local bMillOnAggregate = sMchExt == '_AT'
|
|
||||||
if EgtMdbSetCurrMachining( sMilling) then
|
if EgtMdbSetCurrMachining( sMilling) then
|
||||||
local sTuuid = EgtMdbGetCurrMachiningParam( MCH_MP.TUUID)
|
local sTuuid = EgtMdbGetCurrMachiningParam( MCH_MP.TUUID)
|
||||||
if EgtTdbSetCurrTool( EgtTdbGetToolFromUUID( sTuuid) or '') then
|
if EgtTdbSetCurrTool( EgtTdbGetToolFromUUID( sTuuid) or '') then
|
||||||
@@ -284,7 +281,6 @@ function ProcessDtMortise.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH)
|
|||||||
dToolDiam = max( dToolDiam, 10)
|
dToolDiam = max( dToolDiam, 10)
|
||||||
dMaxMat = EgtTdbGetCurrToolParam( MCH_TP.MAXMAT) or dMaxMat
|
dMaxMat = EgtTdbGetCurrToolParam( MCH_TP.MAXMAT) or dMaxMat
|
||||||
dSideAng = EgtTdbGetCurrToolParam( MCH_TP.SIDEANG) or dSideAng
|
dSideAng = EgtTdbGetCurrToolParam( MCH_TP.SIDEANG) or dSideAng
|
||||||
sHeadTool = EgtTdbGetCurrToolParam( MCH_TP.HEAD)
|
|
||||||
local dSpeed = EgtMdbGetCurrMachiningParam( MCH_MP.SPEED) or 0
|
local dSpeed = EgtMdbGetCurrMachiningParam( MCH_MP.SPEED) or 0
|
||||||
bCW = ( dSpeed >= 0)
|
bCW = ( dSpeed >= 0)
|
||||||
end
|
end
|
||||||
@@ -295,11 +291,6 @@ function ProcessDtMortise.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH)
|
|||||||
EgtOutLog( sErr)
|
EgtOutLog( sErr)
|
||||||
return false, sErr
|
return false, sErr
|
||||||
end
|
end
|
||||||
|
|
||||||
-- tastatura se richiesta
|
|
||||||
local Info = { vtProbe = vtExtr, ptProbe = ptBC, sType = 'DTMortise', sHead = sHeadTool}
|
|
||||||
local bProbeExecuted, sErr = Probe.Make( Proc, nPartId, Info)
|
|
||||||
|
|
||||||
-- se con tasca, la lavoro (mai in doppio)
|
-- se con tasca, la lavoro (mai in doppio)
|
||||||
if bPocket then
|
if bPocket then
|
||||||
-- recupero il contorno della tasca (seconda curva ausiliaria)
|
-- recupero il contorno della tasca (seconda curva ausiliaria)
|
||||||
@@ -354,20 +345,11 @@ function ProcessDtMortise.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH)
|
|||||||
end
|
end
|
||||||
-- eventuale calcolo SCC
|
-- eventuale calcolo SCC
|
||||||
local nSCC
|
local nSCC
|
||||||
if BD.TURN then
|
if BD.TURN and not bPocket then
|
||||||
if not bPocket then
|
if abs( vtAx:getY()) > abs( vtAx:getZ()) then
|
||||||
if abs( vtAx:getY()) > abs( vtAx:getZ()) then
|
nSCC = EgtIf( vtAx:getY() > 0, MCH_SCC.ADIR_YP, MCH_SCC.ADIR_YM)
|
||||||
nSCC = EgtIf( vtAx:getY() > 0, MCH_SCC.ADIR_YP, MCH_SCC.ADIR_YM)
|
else
|
||||||
else
|
nSCC = EgtIf( vtAx:getZ() > 0, MCH_SCC.ADIR_ZP, MCH_SCC.ADIR_ZM)
|
||||||
nSCC = EgtIf( vtAx:getZ() > 0, MCH_SCC.ADIR_ZP, MCH_SCC.ADIR_ZM)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
-- se aggregato e rivolto verso Z-, si accede da lato aperto
|
|
||||||
elseif bMillOnAggregate and AreSameVectorApprox( vtExtr, -Z_AX()) then
|
|
||||||
if Proc.AffectedFaces.Back then
|
|
||||||
nSCC = MCH_SCC.ADIR_YP
|
|
||||||
elseif Proc.AffectedFaces.Front then
|
|
||||||
nSCC = MCH_SCC.ADIR_YM
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
-- flag di mirror precedente aggiornabile localmente
|
-- flag di mirror precedente aggiornabile localmente
|
||||||
@@ -547,10 +529,6 @@ function ProcessDtMortise.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH)
|
|||||||
sUserNotes = EgtSetValInNotes( sUserNotes, 'StartZmax', 2)
|
sUserNotes = EgtSetValInNotes( sUserNotes, 'StartZmax', 2)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
-- se c'è stata tastatura, si disattiva sull'ultima lavorazione
|
|
||||||
if bProbeExecuted and i == 1 then
|
|
||||||
sUserNotes = EgtSetValInNotes( sUserNotes, 'END-PROBE', true)
|
|
||||||
end
|
|
||||||
EgtSetMachiningParam( MCH_MP.USERNOTES, sUserNotes)
|
EgtSetMachiningParam( MCH_MP.USERNOTES, sUserNotes)
|
||||||
-- eseguo
|
-- eseguo
|
||||||
if not ML.ApplyMachining( true, false) then
|
if not ML.ApplyMachining( true, false) then
|
||||||
|
|||||||
@@ -46,9 +46,9 @@ local function VerifyOrientation( Proc, vtN, b3Raw)
|
|||||||
-- se macchina Fast, pezzo stretto e inclinazione laterale non eccessiva, accetto fino a -27deg
|
-- se macchina Fast, pezzo stretto e inclinazione laterale non eccessiva, accetto fino a -27deg
|
||||||
elseif ( not BD.C_SIMM) and abs( vtN:getY()) < 0.5 and b3Raw:getDimY() < 150.1 then
|
elseif ( not BD.C_SIMM) and abs( vtN:getY()) < 0.5 and b3Raw:getDimY() < 150.1 then
|
||||||
return ( vtN:getZ() >= -0.454)
|
return ( vtN:getZ() >= -0.454)
|
||||||
-- altrimenti accetto fino a -23.5deg
|
-- altrimenti accetto fino a -21deg
|
||||||
else
|
else
|
||||||
return ( vtN:getZ() >= -0.399)
|
return ( vtN:getZ() >= -0.359)
|
||||||
end
|
end
|
||||||
-- se trave medio-bassa
|
-- se trave medio-bassa
|
||||||
elseif b3Raw:getDimZ() < 281 then
|
elseif b3Raw:getDimZ() < 281 then
|
||||||
@@ -70,8 +70,8 @@ local function VerifyOrientation( Proc, vtN, b3Raw)
|
|||||||
end
|
end
|
||||||
-- altrimenti
|
-- altrimenti
|
||||||
else
|
else
|
||||||
-- accetto fino a -7deg
|
-- accetto fino a -5deg
|
||||||
return ( vtN:getZ() >= -0.122)
|
return ( vtN:getZ() >= -0.088)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -33,7 +33,6 @@ local Q_ONLY_CHAMFER = 'Q00' -- i
|
|||||||
local Q_RADIAL_OFFSET = 'Q06' -- d, valido solo per pocket
|
local Q_RADIAL_OFFSET = 'Q06' -- d, valido solo per pocket
|
||||||
local Q_IGNORE_LASER_PROBLEMS = 'Q07'
|
local Q_IGNORE_LASER_PROBLEMS = 'Q07'
|
||||||
local Q_FORCE_CLAMPABLE_AREA = 'Q08'
|
local Q_FORCE_CLAMPABLE_AREA = 'Q08'
|
||||||
local Q_INVERT_LAST_PATH = 'Q09'
|
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
-- Riconoscimento della feature
|
-- Riconoscimento della feature
|
||||||
@@ -471,9 +470,7 @@ local function MakeByMill( Proc, nPhase, nRawId, nPartId, dOvmHead)
|
|||||||
end
|
end
|
||||||
-- posizione braccio porta testa
|
-- posizione braccio porta testa
|
||||||
local nSCC = MCH_SCC.NONE
|
local nSCC = MCH_SCC.NONE
|
||||||
if BD.TURN == 2 then
|
if not BD.C_SIMM then
|
||||||
nSCC = MCH_SCC.ADIR_ZP
|
|
||||||
elseif not BD.C_SIMM then
|
|
||||||
if Proc.Head then
|
if Proc.Head then
|
||||||
nSCC = MCH_SCC.ADIR_XP
|
nSCC = MCH_SCC.ADIR_XP
|
||||||
elseif Proc.Tail then
|
elseif Proc.Tail then
|
||||||
@@ -541,9 +538,7 @@ local function MakeByMill( Proc, nPhase, nRawId, nPartId, dOvmHead)
|
|||||||
end
|
end
|
||||||
-- posizione braccio porta testa
|
-- posizione braccio porta testa
|
||||||
local nSCC = MCH_SCC.NONE
|
local nSCC = MCH_SCC.NONE
|
||||||
if BD.TURN == 2 then
|
if not BD.C_SIMM then
|
||||||
nSCC = MCH_SCC.ADIR_ZP
|
|
||||||
elseif not BD.C_SIMM then
|
|
||||||
if Proc.Head then
|
if Proc.Head then
|
||||||
nSCC = MCH_SCC.ADIR_XP
|
nSCC = MCH_SCC.ADIR_XP
|
||||||
elseif Proc.Tail then
|
elseif Proc.Tail then
|
||||||
@@ -593,8 +588,6 @@ local function MakeByMill( Proc, nPhase, nRawId, nPartId, dOvmHead)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
-- eventuale inversione ultimo segmento
|
|
||||||
local bInvertLastPath = ( ( EgtGetInfo( Proc.Id, Q_INVERT_LAST_PATH, 'd') or 0) == 1)
|
|
||||||
-- eseguo
|
-- eseguo
|
||||||
for i = 1, nStep do
|
for i = 1, nStep do
|
||||||
for j = 1, nDouble do
|
for j = 1, nDouble do
|
||||||
@@ -637,71 +630,38 @@ local function MakeByMill( Proc, nPhase, nRawId, nPartId, dOvmHead)
|
|||||||
-- aggiungo geometria
|
-- aggiungo geometria
|
||||||
EgtSetMachiningGeometry( {{ AuxId, -1}})
|
EgtSetMachiningGeometry( {{ AuxId, -1}})
|
||||||
-- eventuale accorciamento di testa
|
-- eventuale accorciamento di testa
|
||||||
local dStartAddLen, dEndAddLen, dWorkSide, bToolInvert, bInvert
|
|
||||||
if ( j == 1 and i > 1) or ( j == 2 and i < nStep) then
|
if ( j == 1 and i > 1) or ( j == 2 and i < nStep) then
|
||||||
dStartAddLen = EgtIf( j == 1, - ( i - 1) * dStep, - ( nStep - i) * dStep)
|
local dStartAddLen = EgtIf( j == 1, - ( i - 1) * dStep, - ( nStep - i) * dStep)
|
||||||
|
EgtSetMachiningParam( MCH_MP.STARTADDLEN, dStartAddLen)
|
||||||
else
|
else
|
||||||
dStartAddLen = EgtIf( j == 1, dStartAddSpec, dEndAddSpec)
|
EgtSetMachiningParam( MCH_MP.STARTADDLEN, EgtIf( j == 1, dStartAddSpec, dEndAddSpec))
|
||||||
end
|
end
|
||||||
-- eventuale accorciamento di coda
|
-- eventuale accorciamento di coda
|
||||||
if ( j == 1 and i < nStep) or ( j == 2 and i > 1) then
|
if ( j == 1 and i < nStep) or ( j == 2 and i > 1) then
|
||||||
dEndAddLen = EgtIf( j == 1, - ( nStep - i) * dStep, - ( i - 1) * dStep)
|
local dEndAddLen = EgtIf( j == 1, - ( nStep - i) * dStep, - ( i - 1) * dStep)
|
||||||
|
EgtSetMachiningParam( MCH_MP.ENDADDLEN, dEndAddLen)
|
||||||
else
|
else
|
||||||
dEndAddLen = EgtIf( j == 1, dEndAddSpec, dStartAddSpec)
|
EgtSetMachiningParam( MCH_MP.ENDADDLEN, EgtIf( j == 1, dEndAddSpec, dStartAddSpec))
|
||||||
end
|
end
|
||||||
-- se estrusione da sotto, inverto direzione fresa
|
-- se estrusione da sotto, inverto direzione fresa
|
||||||
if ( j == 1 and bToolInv) or ( j == 2 and not bToolInv) then
|
if ( j == 1 and bToolInv) or ( j == 2 and not bToolInv) then
|
||||||
bToolInvert = true
|
EgtSetMachiningParam( MCH_MP.TOOLINVERT, true)
|
||||||
else
|
|
||||||
bToolInvert = false
|
|
||||||
end
|
end
|
||||||
-- se seconda passata, inverto direzione di lavoro
|
-- se seconda passata, inverto direzione di lavoro
|
||||||
if j == 2 then
|
if j == 2 then
|
||||||
bInvert = true
|
EgtSetMachiningParam( MCH_MP.INVERT, true)
|
||||||
else
|
|
||||||
bInvert = false
|
|
||||||
end
|
end
|
||||||
|
|
||||||
-- assegno lato di lavoro
|
-- assegno lato di lavoro
|
||||||
if Proc.Grp == 0 then
|
if Proc.Grp == 0 then
|
||||||
dWorkSide = MCH_MILL_WS.CENTER
|
EgtSetMachiningParam( MCH_MP.WORKSIDE, MCH_MILL_WS.CENTER)
|
||||||
elseif ( Proc.Grp == 3 and not bToolInv) or ( Proc.Grp == 4 and bToolInv) or ( Proc.Grp == 1 and bToolInv) or ( Proc.Grp == 2 and bToolInv) then
|
elseif ( Proc.Grp == 3 and not bToolInv) or ( Proc.Grp == 4 and bToolInv) or ( Proc.Grp == 1 and bToolInv) or ( Proc.Grp == 2 and bToolInv) then
|
||||||
dWorkSide = MCH_MILL_WS.LEFT
|
EgtSetMachiningParam( MCH_MP.WORKSIDE, MCH_MILL_WS.LEFT)
|
||||||
elseif ( Proc.Grp == 3 and bToolInv) or ( Proc.Grp == 4 and not bToolInv) or ( Proc.Grp == 1 and not bToolInv) or ( Proc.Grp == 2 and not bToolInv) then
|
elseif ( Proc.Grp == 3 and bToolInv) or ( Proc.Grp == 4 and not bToolInv) or ( Proc.Grp == 1 and not bToolInv) or ( Proc.Grp == 2 and not bToolInv) then
|
||||||
dWorkSide = MCH_MILL_WS.RIGHT
|
EgtSetMachiningParam( MCH_MP.WORKSIDE, MCH_MILL_WS.RIGHT)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- se ultimo step da invertire
|
|
||||||
if i == nStep and bInvertLastPath then
|
|
||||||
-- se profilo orizzontale
|
|
||||||
if abs( vtExtr:getZ()) < 10 * GEO.EPS_SMALL then
|
|
||||||
dStartAddLen, dEndAddLen = dEndAddLen, dStartAddLen
|
|
||||||
bInvert = not( bInvert)
|
|
||||||
bToolInvert = not( bToolInvert)
|
|
||||||
else
|
|
||||||
dStartAddLen, dEndAddLen = dEndAddLen, dStartAddLen
|
|
||||||
bInvert = not( bInvert)
|
|
||||||
if dWorkSide == MCH_MILL_WS.LEFT then
|
|
||||||
dWorkSide = MCH_MILL_WS.RIGHT
|
|
||||||
elseif dWorkSide == MCH_MILL_WS.RIGHT then
|
|
||||||
dWorkSide = MCH_MILL_WS.LEFT
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
-- setto i valori
|
|
||||||
EgtSetMachiningParam( MCH_MP.STARTADDLEN, dStartAddLen)
|
|
||||||
EgtSetMachiningParam( MCH_MP.ENDADDLEN, dEndAddLen)
|
|
||||||
EgtSetMachiningParam( MCH_MP.TOOLINVERT, bToolInvert)
|
|
||||||
EgtSetMachiningParam( MCH_MP.INVERT, bInvert)
|
|
||||||
EgtSetMachiningParam( MCH_MP.WORKSIDE, dWorkSide)
|
|
||||||
|
|
||||||
|
|
||||||
-- posizione braccio porta testa
|
-- posizione braccio porta testa
|
||||||
local nSCC = MCH_SCC.NONE
|
local nSCC = MCH_SCC.NONE
|
||||||
if BD.TURN == 2 then
|
if not BD.C_SIMM then
|
||||||
nSCC = MCH_SCC.ADIR_ZP
|
|
||||||
elseif not BD.C_SIMM then
|
|
||||||
if Proc.Head then
|
if Proc.Head then
|
||||||
nSCC = MCH_SCC.ADIR_XP
|
nSCC = MCH_SCC.ADIR_XP
|
||||||
elseif Proc.Tail then
|
elseif Proc.Tail then
|
||||||
@@ -832,9 +792,7 @@ local function MakeByPocket( Proc, nPhase, nRawId, nPartId, dOvmHead)
|
|||||||
EgtSetMachiningParam( MCH_MP.OFFSR, dExtra)
|
EgtSetMachiningParam( MCH_MP.OFFSR, dExtra)
|
||||||
-- posizione braccio porta testa
|
-- posizione braccio porta testa
|
||||||
local nSCC = MCH_SCC.NONE
|
local nSCC = MCH_SCC.NONE
|
||||||
if BD.TURN == 2 then
|
if not BD.C_SIMM then
|
||||||
nSCC = MCH_SCC.ADIR_ZP
|
|
||||||
elseif not BD.C_SIMM then
|
|
||||||
if Proc.Head then
|
if Proc.Head then
|
||||||
nSCC = MCH_SCC.ADIR_XP
|
nSCC = MCH_SCC.ADIR_XP
|
||||||
elseif Proc.Tail then
|
elseif Proc.Tail then
|
||||||
|
|||||||
@@ -365,15 +365,7 @@ function ProcessHeadCut.Make( Proc, nPhase, nRawId, nPartId, dOvmHead, bNeedHCut
|
|||||||
-- eventuali informazioni sul tipo di finitura
|
-- eventuali informazioni sul tipo di finitura
|
||||||
local nQ05 = EgtGetInfo( nOriId or GDB_ID.NULL, 'Q05', 'i') or 0
|
local nQ05 = EgtGetInfo( nOriId or GDB_ID.NULL, 'Q05', 'i') or 0
|
||||||
-- recupero la lavorazione
|
-- recupero la lavorazione
|
||||||
-- TODO questa parte andrà cambiata quando si gestiranno i volumi liberi in cui girare da mlse
|
local sCutting = ML.FindCutting( 'HeadSide')
|
||||||
local dMinWidthForBigBlade = 300
|
|
||||||
local dMaxHeightForBigBlade = 300
|
|
||||||
local sCutting
|
|
||||||
if b3Raw:getDimY() > dMinWidthForBigBlade and b3Raw:getDimZ() < dMaxHeightForBigBlade then
|
|
||||||
sCutting = ML.FindCutting( 'HeadSide', nil, nil, nil, 'Longest')
|
|
||||||
else
|
|
||||||
sCutting = ML.FindCutting( 'HeadSide')
|
|
||||||
end
|
|
||||||
if not sCutting then
|
if not sCutting then
|
||||||
local sErr = 'Error : cutting not found in library'
|
local sErr = 'Error : cutting not found in library'
|
||||||
EgtOutLog( sErr)
|
EgtOutLog( sErr)
|
||||||
@@ -406,23 +398,17 @@ function ProcessHeadCut.Make( Proc, nPhase, nRawId, nPartId, dOvmHead, bNeedHCut
|
|||||||
dSawThick2 = EgtTdbGetCurrToolParam( MCH_TP.THICK) or dSawThick2
|
dSawThick2 = EgtTdbGetCurrToolParam( MCH_TP.THICK) or dSawThick2
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
-- determino se lo spessore del materiale da rimuovere è eccessivo e quindi vanno fatti più tagli con offset
|
|
||||||
local nCuts = max( ceil( dOvmHead / (( BD.MAX_LEN_SCRAP_START or BD.MAX_LEN_SCRAP) + 0.5)), 1)
|
|
||||||
local dOffsL = dOvmHead / nCuts
|
|
||||||
-- caratteristiche taglio
|
-- caratteristiche taglio
|
||||||
local dDimYRef = EgtIf( b3Raw:getDimZ() < BD.MIN_DIM_HBEAM + 10 * GEO.EPS_SMALL, dMaxDepth, abs( BD.MAX_DIM_HTCUT_HBEAM))
|
local dDimYRef = EgtIf( b3Raw:getDimZ() < BD.MIN_DIM_HBEAM + 10 * GEO.EPS_SMALL, dMaxDepth, abs( BD.MAX_DIM_HTCUT_HBEAM))
|
||||||
local bBigSectionCut = ( b3Raw:getDimY() > 2 * dDimYRef - BD.CUT_EXTRA_MIN + 10 * GEO.EPS_SMALL) and
|
local bBigSectionCut = ( b3Raw:getDimY() > 2 * dDimYRef - BD.CUT_EXTRA_MIN + 10 * GEO.EPS_SMALL) and
|
||||||
( b3Raw:getDimZ() > EgtIf( BD.TURN, 2 * dMaxVertDepth, dMaxVertDepth + dMaxDepth2) - 2 * BD.CUT_EXTRA + 10 * GEO.EPS_SMALL)
|
( b3Raw:getDimZ() > EgtIf( BD.TURN, 2 * dMaxVertDepth, dMaxVertDepth + dMaxDepth2) - 2 * BD.CUT_EXTRA_MIN + 10 * GEO.EPS_SMALL)
|
||||||
local bHorizCut = ( ( b3Raw:getDimY() > b3Raw:getDimZ() + 10 * GEO.EPS_SMALL or BD.TURN) and b3Raw:getDimZ() < dMaxVertDepth - BD.CUT_EXTRA)
|
local bHorizCut = ( ( b3Raw:getDimY() > b3Raw:getDimZ() + 10 * GEO.EPS_SMALL or BD.TURN) and b3Raw:getDimZ() < dMaxVertDepth - BD.CUT_EXTRA)
|
||||||
local bDoubleHorizCut = ( ( BD.DOWN_HEAD or BD.TURN) and not bHorizCut and b3Raw:getDimY() > 2 * dDimYRef - BD.CUT_EXTRA_MIN + 10 * GEO.EPS_SMALL)
|
local bDoubleHorizCut = ( ( BD.DOWN_HEAD or BD.TURN) and not bHorizCut and b3Raw:getDimY() > 2 * dDimYRef - BD.CUT_EXTRA_MIN + 10 * GEO.EPS_SMALL)
|
||||||
local bDoubleCut = ( not bHorizCut and not bDoubleHorizCut and b3Raw:getDimY() > dDimYRef - BD.CUT_EXTRA + 10 * GEO.EPS_SMALL) and
|
local bDoubleCut = ( not bHorizCut and not bDoubleHorizCut and b3Raw:getDimY() > dDimYRef - BD.CUT_EXTRA + 10 * GEO.EPS_SMALL)
|
||||||
( b3Raw:getDimY() < 2 * dDimYRef - BD.CUT_EXTRA_MIN + 10 * GEO.EPS_SMALL)
|
|
||||||
-- verifico necessità di tagli aggiuntivi orizzontali o verticali
|
-- verifico necessità di tagli aggiuntivi orizzontali o verticali
|
||||||
local dMinOvmHeadForAddeddCuts = 10.123
|
local dMinOvmHeadForAddeddCuts = 10.123
|
||||||
local bNeedVerticalAddedCuts = ( Proc.Face[1].WidthTrimmed > BD.MAX_LEN_DICE) and ( dOvmHead > dMinOvmHeadForAddeddCuts - 10 * GEO.EPS_SMALL)
|
local bNeedVerticalAddedCuts = ( Proc.Face[1].WidthTrimmed > BD.MAX_LEN_DICE) and ( dOvmHead > dMinOvmHeadForAddeddCuts - 10 * GEO.EPS_SMALL)
|
||||||
local bNeedHorizontalAddedCuts = ( Proc.Face[1].HeightTrimmed > ( BD.MIN_HEIGHT_ADDED_CUTS or BD.MAX_LEN_DICE)) and
|
local bNeedHorizontalAddedCuts = ( Proc.Face[1].HeightTrimmed > ( BD.MIN_HEIGHT_ADDED_CUTS or BD.MAX_LEN_DICE)) and not bBigSectionCut and ( dOvmHead > dMinOvmHeadForAddeddCuts - 10 * GEO.EPS_SMALL)
|
||||||
not bBigSectionCut and ( dOvmHead > dMinOvmHeadForAddeddCuts - 10 * GEO.EPS_SMALL) and
|
|
||||||
dOffsL < BD.MAX_DIM_DICE
|
|
||||||
-- dati lavorazioni sopra e sotto
|
-- dati lavorazioni sopra e sotto
|
||||||
local Cutting1Data = { sCutting = sCutting, dSawDiam = dSawDiam, dMaxDepth = dMaxDepth, dSawThick = dSawThick, dMaxVertDepth = dMaxVertDepth}
|
local Cutting1Data = { sCutting = sCutting, dSawDiam = dSawDiam, dMaxDepth = dMaxDepth, dSawThick = dSawThick, dMaxVertDepth = dMaxVertDepth}
|
||||||
local Cutting2Data = { sCutting = sCutting2, dSawDiam = dSawDiam2, dMaxDepth = dMaxDepth2, dSawThick = dSawThick2}
|
local Cutting2Data = { sCutting = sCutting2, dSawDiam = dSawDiam2, dMaxDepth = dMaxDepth2, dSawThick = dSawThick2}
|
||||||
@@ -434,6 +420,9 @@ function ProcessHeadCut.Make( Proc, nPhase, nRawId, nPartId, dOvmHead, bNeedHCut
|
|||||||
if not bNeedHCut and AreSameVectorApprox( vtN, X_AX()) and abs( ptC:getX() - b3Raw:getMax():getX()) < 10 * GEO.EPS_SMALL then
|
if not bNeedHCut and AreSameVectorApprox( vtN, X_AX()) and abs( ptC:getX() - b3Raw:getMax():getX()) < 10 * GEO.EPS_SMALL then
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
-- determino se lo spessore del materiale da rimuovere è eccessivo e quindi vanno fatti più tagli con offset
|
||||||
|
local nCuts = max( ceil( dOvmHead / (( BD.MAX_LEN_SCRAP_START or BD.MAX_LEN_SCRAP) + 0.5)), 1)
|
||||||
|
local dOffsL = dOvmHead / nCuts
|
||||||
-- se taglio per sezioni alte e larghe
|
-- se taglio per sezioni alte e larghe
|
||||||
if bBigSectionCut then
|
if bBigSectionCut then
|
||||||
if dOvmHead > 0 then
|
if dOvmHead > 0 then
|
||||||
|
|||||||
+70
-122
@@ -200,7 +200,6 @@ local function AssignQIdent( Proc)
|
|||||||
elseif ( Proc.Grp == 3 or Proc.Grp == 4) and Proc.Prc == 17 then
|
elseif ( Proc.Grp == 3 or Proc.Grp == 4) and Proc.Prc == 17 then
|
||||||
Q_DEPTH_CHAMFER = 'Q01' -- d
|
Q_DEPTH_CHAMFER = 'Q01' -- d
|
||||||
Q_ONLY_CHAMFER = 'Q02' -- i
|
Q_ONLY_CHAMFER = 'Q02' -- i
|
||||||
Q_USE_MILL = 'Q03' -- i
|
|
||||||
elseif ( Proc.Grp == 3 or Proc.Grp == 4) and Proc.Prc == 20 then
|
elseif ( Proc.Grp == 3 or Proc.Grp == 4) and Proc.Prc == 20 then
|
||||||
Q_DEPTH_CHAMFER = 'Q01' -- d
|
Q_DEPTH_CHAMFER = 'Q01' -- d
|
||||||
Q_USE_MILL = 'Q02' -- i
|
Q_USE_MILL = 'Q02' -- i
|
||||||
@@ -415,11 +414,11 @@ local function VerifyPocket( Proc, dDiam, dDepth, dMaxTotLen, sMchFindMaster, bP
|
|||||||
end
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
local function VerifyBHSideMill( Proc, bIsU, bIsL, bSinglePart, bPrevBhSideMill, b3Raw)
|
local function VerifyBHSideMill( Proc, bIsU, bIsL, bSinglePart, bPrevBhSideMill)
|
||||||
|
|
||||||
-- se non feature BlockHausHalfLap e non abilitato parametro Q per lavorarlo di fianco e non macchina BH esco
|
-- se non feature BlockHausHalfLap e non abilitato parametro Q per lavorarlo di fianco e non macchina BH esco
|
||||||
local nUseSideTool = EgtGetInfo( Proc.Id, Q_SIDE_ROUGH_TOOL, 'i') or 0
|
local nUseSideTool = EgtGetInfo( Proc.Id, Q_SIDE_ROUGH_TOOL, 'i') or 0
|
||||||
if Proc.Prc ~= 37 and not BD.BH_MACHINE and ( nUseSideTool == 0 or ( nUseSideTool == 4 and ( Proc.AffectedFaces.Left or Proc.AffectedFaces.Right))) then
|
if Proc.Prc ~= 37 and nUseSideTool == 0 and not BD.BH_MACHINE then
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -445,13 +444,9 @@ local function VerifyBHSideMill( Proc, bIsU, bIsL, bSinglePart, bPrevBhSideMill,
|
|||||||
|
|
||||||
-- le facce devono contenere X e quelle di chiusura devono essere perpendicolari a X
|
-- le facce devono contenere X e quelle di chiusura devono essere perpendicolari a X
|
||||||
local bStopY, bStopZ
|
local bStopY, bStopZ
|
||||||
if not Proc.TopologyLongName then
|
|
||||||
Topology.Classify( Proc, b3Raw)
|
|
||||||
end
|
|
||||||
for i = 1, Proc.Fct do
|
for i = 1, Proc.Fct do
|
||||||
local vtN = EgtSurfTmFacetNormVersor( Proc.Id, i-1, GDB_ID.ROOT)
|
local vtN = EgtSurfTmFacetNormVersor( Proc.Id, i-1, GDB_ID.ROOT)
|
||||||
-- permessa U passante non parallela agli assi principali
|
if abs( vtN:getX()) > 0.001 and abs( vtN:getX()) < 0.999962 then
|
||||||
if abs( vtN:getX()) > 0.001 and abs( vtN:getX()) < 0.999962 and Proc.TopologyLongName ~= "Groove-Through-RightAngles-NotParallel-3" then
|
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
if abs( vtN:getY()) > 0.866 then bStopY = true end
|
if abs( vtN:getY()) > 0.866 then bStopY = true end
|
||||||
@@ -781,7 +776,7 @@ function ProcessLapJoint.IsTailFeature( Proc, b3Raw)
|
|||||||
-- in base al tipo di feature attribuisco il significato dei parametri Q
|
-- in base al tipo di feature attribuisco il significato dei parametri Q
|
||||||
AssignQIdent( Proc)
|
AssignQIdent( Proc)
|
||||||
-- se può essere fatto con utensile tipo lama
|
-- se può essere fatto con utensile tipo lama
|
||||||
local bUseBHSideMill, bHead, bHeadDir = VerifyBHSideMill( Proc, nil, nil, nil, nil, b3Raw)
|
local bUseBHSideMill, bHead, bHeadDir = VerifyBHSideMill( Proc)
|
||||||
if bUseBHSideMill then
|
if bUseBHSideMill then
|
||||||
Proc.HeadDir = bHeadDir
|
Proc.HeadDir = bHeadDir
|
||||||
end
|
end
|
||||||
@@ -789,6 +784,7 @@ function ProcessLapJoint.IsTailFeature( Proc, b3Raw)
|
|||||||
local nPartId = EgtGetParent( EgtGetParent( Proc.Id) or GDB_ID.NULL)
|
local nPartId = EgtGetParent( EgtGetParent( Proc.Id) or GDB_ID.NULL)
|
||||||
local b3Solid = EgtGetBBoxGlob( EgtGetFirstNameInGroup( nPartId, 'Box') or GDB_ID.NULL, GDB_BB.STANDARD)
|
local b3Solid = EgtGetBBoxGlob( EgtGetFirstNameInGroup( nPartId, 'Box') or GDB_ID.NULL, GDB_BB.STANDARD)
|
||||||
-- verifico se è in coda
|
-- verifico se è in coda
|
||||||
|
|
||||||
local dEndDist = Proc.Box:getMin():getX() - b3Solid:getMin():getX()
|
local dEndDist = Proc.Box:getMin():getX() - b3Solid:getMin():getX()
|
||||||
if ( dEndDist > BD.MAX_DIST_HTFEA) or bUseBHSideMill then
|
if ( dEndDist > BD.MAX_DIST_HTFEA) or bUseBHSideMill then
|
||||||
if not( BD.BH_MACHINE) and bUseBHSideMill and ( Proc.Box:getMax():getX() - b3Solid:getMin():getX()) < 400 then
|
if not( BD.BH_MACHINE) and bUseBHSideMill and ( Proc.Box:getMax():getX() - b3Solid:getMin():getX()) < 400 then
|
||||||
@@ -803,12 +799,6 @@ function ProcessLapJoint.IsTailFeature( Proc, b3Raw)
|
|||||||
( b3Solid:getDimX() > BD.LEN_SHORT_PART and Proc.Box:getDimX() > min( BD.MAX_LEN_HTFEA, 0.8 * b3Solid:getDimX())) then
|
( b3Solid:getDimX() > BD.LEN_SHORT_PART and Proc.Box:getDimX() > min( BD.MAX_LEN_HTFEA, 0.8 * b3Solid:getDimX())) then
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
-- se interessa la coda, e pezzo lungo, si sposta dopo separazione
|
|
||||||
if b3Solid:getDimX() > BD.LEN_SHORT_PART and Proc.AffectedFaces.Left and Proc.Fct >= 2 then
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
|
|
||||||
-- se una o due facce e interessa veramente la coda, allora di coda
|
-- se una o due facce e interessa veramente la coda, allora di coda
|
||||||
if Proc.Fct <= 2 then
|
if Proc.Fct <= 2 then
|
||||||
if Proc.Box:getMin():getX() < b3Solid:getMin():getX() + 1. then
|
if Proc.Box:getMin():getX() < b3Solid:getMin():getX() + 1. then
|
||||||
@@ -846,7 +836,7 @@ function ProcessLapJoint.Classify( Proc, b3Raw)
|
|||||||
-- se 2 facce
|
-- se 2 facce
|
||||||
elseif Proc.Fct == 2 then
|
elseif Proc.Fct == 2 then
|
||||||
-- se può essere fatto con utensile tipo lama
|
-- se può essere fatto con utensile tipo lama
|
||||||
local bUseBHSideMill = VerifyBHSideMill( Proc, nil, nil, nil, nil, b3Raw)
|
local bUseBHSideMill = VerifyBHSideMill( Proc)
|
||||||
if bUseBHSideMill then
|
if bUseBHSideMill then
|
||||||
return true, false
|
return true, false
|
||||||
end
|
end
|
||||||
@@ -883,25 +873,12 @@ function ProcessLapJoint.Classify( Proc, b3Raw)
|
|||||||
end
|
end
|
||||||
-- se è presente il rinvio angolare con lavorazioni di tasca ed è una tasca perfettamente verticale da sotto, non ruoto
|
-- se è presente il rinvio angolare con lavorazioni di tasca ed è una tasca perfettamente verticale da sotto, non ruoto
|
||||||
if BD.ANG_TRASM and Proc.Fct >= 4 and not bClosedOrthoFaces then
|
if BD.ANG_TRASM and Proc.Fct >= 4 and not bClosedOrthoFaces then
|
||||||
if AreOppositeVectorApprox( Proc.Face[nFacInd + 1].VtN, Z_AX()) and
|
local vtNBottomFace = EgtSurfTmFacetNormVersor( Proc.Id, nFacInd, GDB_ID.ROOT)
|
||||||
|
if AreOppositeVectorApprox( vtNBottomFace, Z_AX()) and
|
||||||
( Proc.Fct >= 5 and ML.FindPocketing( 'Pocket_AT') or ( Proc.Fct < 5 and ML.FindPocketing( 'OpenPocket_AT'))) then
|
( Proc.Fct >= 5 and ML.FindPocketing( 'Pocket_AT') or ( Proc.Fct < 5 and ML.FindPocketing( 'OpenPocket_AT'))) then
|
||||||
return true, false
|
return true, false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
-- se groove da sotto e possibile fresatura tipo SideMillAsBlade non ruoto
|
|
||||||
if Proc.AllRightAngles and ( Proc.Topology == 'Groove' or Proc.Topology == 'Pocket') and not( Proc.AffectedFaces.Front or Proc.AffectedFaces.Back) and AreOppositeVectorApprox( Proc.Face[nFacInd + 1].VtN, Z_AX()) then
|
|
||||||
-- recupero gruppo per geometria addizionale
|
|
||||||
local nAddGrpId = BL.GetAddGroup( nPartId)
|
|
||||||
if not nAddGrpId then
|
|
||||||
local sErr = 'Error : missing AddGroup'
|
|
||||||
EgtOutLog( sErr)
|
|
||||||
return false, sErr
|
|
||||||
end
|
|
||||||
if VerifySideMillAsSaw( Proc, nAddGrpId, Proc.Face[nFacInd + 1].VtN, min( Proc.Face[nFacInd + 1].Height, Proc.Face[nFacInd + 1].Width) , Proc.Face[nFacInd + 1].Elevation) then
|
|
||||||
Proc.OkFromBottom = true
|
|
||||||
return true, false
|
|
||||||
end
|
|
||||||
end
|
|
||||||
-- se scanalatura chiusa lavoro la faccia di fondo
|
-- se scanalatura chiusa lavoro la faccia di fondo
|
||||||
if Proc.Topology == 'Pocket' and ( Proc.IsParallel or Proc.AllRightAngles) and not bClosedOrthoFaces then
|
if Proc.Topology == 'Pocket' and ( Proc.IsParallel or Proc.AllRightAngles) and not bClosedOrthoFaces then
|
||||||
nFacInd = Topology.GetFacesWithGivenAdjacencyNumber( Proc, nil, 4)[1]
|
nFacInd = Topology.GetFacesWithGivenAdjacencyNumber( Proc, nil, 4)[1]
|
||||||
@@ -926,7 +903,7 @@ function ProcessLapJoint.Classify( Proc, b3Raw)
|
|||||||
local rfFac, dH, dV = EgtSurfTmFacetMinAreaRectangle( Proc.Id, nFacInd, GDB_ID.ROOT)
|
local rfFac, dH, dV = EgtSurfTmFacetMinAreaRectangle( Proc.Id, nFacInd, GDB_ID.ROOT)
|
||||||
local vtN = EgtSurfTmFacetNormVersor( Proc.Id, nFacInd, GDB_ID.ROOT)
|
local vtN = EgtSurfTmFacetNormVersor( Proc.Id, nFacInd, GDB_ID.ROOT)
|
||||||
-- se può essere fatto con utensile tipo lama
|
-- se può essere fatto con utensile tipo lama
|
||||||
local bUseBHSideMill, _, _, _, _, dTDiam = VerifyBHSideMill( Proc, nil, nil, nil, nil, b3Raw)
|
local bUseBHSideMill, _, _, _, _, dTDiam = VerifyBHSideMill( Proc)
|
||||||
if bUseBHSideMill then
|
if bUseBHSideMill then
|
||||||
if vtN:getZ() > -0.5 or b3Raw:getDimZ() - Proc.Box:getDimZ() < ( BD.MAX_DIST_BH_FROM_BOTTOM or 395) - dTDiam / 2 then
|
if vtN:getZ() > -0.5 or b3Raw:getDimZ() - Proc.Box:getDimZ() < ( BD.MAX_DIST_BH_FROM_BOTTOM or 395) - dTDiam / 2 then
|
||||||
return true, false
|
return true, false
|
||||||
@@ -945,7 +922,7 @@ function ProcessLapJoint.Classify( Proc, b3Raw)
|
|||||||
local bIsU = ( Proc.Fct == 3 and not TestElleShape3( Proc))
|
local bIsU = ( Proc.Fct == 3 and not TestElleShape3( Proc))
|
||||||
-- se forzata la lavorazione con fresa di lato da parametro Q03=2/3 non devo ruotare
|
-- se forzata la lavorazione con fresa di lato da parametro Q03=2/3 non devo ruotare
|
||||||
local nSideRoughTool = EgtGetInfo( Proc.Id, Q_SIDE_ROUGH_TOOL, 'd')
|
local nSideRoughTool = EgtGetInfo( Proc.Id, Q_SIDE_ROUGH_TOOL, 'd')
|
||||||
local bForceSideMill = ( Proc.AffectedFaces.Front or Proc.AffectedFaces.Back) and ( nSideRoughTool == 2 or nSideRoughTool == 3) and ( Proc.Fct == 3 or Proc.Fct == 4)
|
local bForceSideMill = ( ( nSideRoughTool == 2 or nSideRoughTool == 3) and ( Proc.Fct == 3 or Proc.Fct == 4))
|
||||||
if bForceSideMill then
|
if bForceSideMill then
|
||||||
bDown = false
|
bDown = false
|
||||||
elseif nFacInd2 and dElev2 < 160 and dElev2 < 2 * dElev then
|
elseif nFacInd2 and dElev2 < 160 and dElev2 < 2 * dElev then
|
||||||
@@ -3478,7 +3455,7 @@ local function MakePocket( Proc, nPartId, b3Solid, ptPs, tvtN, nFaceRef, sMchFin
|
|||||||
sWarn = 'Warning on pocketing ' .. sName .. ': machining can damage next piece. Minimum distance needed : ' .. ( 1 + dDiamTool / 2) .. ' mm'
|
sWarn = 'Warning on pocketing ' .. sName .. ': machining can damage next piece. Minimum distance needed : ' .. ( 1 + dDiamTool / 2) .. ' mm'
|
||||||
EgtOutLog( sWarn)
|
EgtOutLog( sWarn)
|
||||||
end
|
end
|
||||||
if BD.TURN and BD.TURN ~= 2 then
|
if BD.TURN then
|
||||||
-- centro del pezzo
|
-- centro del pezzo
|
||||||
local ptCen = ORIG()
|
local ptCen = ORIG()
|
||||||
if b3Solid then ptCen = b3Solid:getCenter() end
|
if b3Solid then ptCen = b3Solid:getCenter() end
|
||||||
@@ -4773,7 +4750,6 @@ SawPlusChain.ApplyOnlySawblade = false
|
|||||||
function SawPlusChain.IsTopologyOk( Proc)
|
function SawPlusChain.IsTopologyOk( Proc)
|
||||||
if Proc.TopologyLongName == 'Pocket-Blind-RightAngles-Parallel-5' or
|
if Proc.TopologyLongName == 'Pocket-Blind-RightAngles-Parallel-5' or
|
||||||
Proc.TopologyLongName == 'Groove-Through-RightAngles-Parallel-3' or
|
Proc.TopologyLongName == 'Groove-Through-RightAngles-Parallel-3' or
|
||||||
Proc.TopologyLongName == 'Groove-Through-RightAngles-NotParallel-3' or
|
|
||||||
Proc.TopologyLongName == 'Groove-Blind-RightAngles-Parallel-4' or
|
Proc.TopologyLongName == 'Groove-Blind-RightAngles-Parallel-4' or
|
||||||
Proc.TopologyLongName == 'Tunnel-Through-RightAngles-Parallel-4' then
|
Proc.TopologyLongName == 'Tunnel-Through-RightAngles-Parallel-4' then
|
||||||
|
|
||||||
@@ -5061,6 +5037,38 @@ function SawPlusChain.GetLongFaceEdges( Proc, Face)
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
function SawPlusChain.GetToolFromMachining( sMachiningName)
|
||||||
|
local Tool = {}
|
||||||
|
if EgtMdbSetCurrMachining( sMachiningName) then
|
||||||
|
local sTuuid = EgtMdbGetCurrMachiningParam( MCH_MP.TUUID)
|
||||||
|
if EgtTdbSetCurrTool( EgtTdbGetToolFromUUID( sTuuid) or '') then
|
||||||
|
Tool.Name = EgtTdbGetCurrToolParam( MCH_TP.NAME)
|
||||||
|
Tool.IsCCW = ( EgtMdbGetCurrMachiningParam( MCH_MP.SPEED) < 0)
|
||||||
|
Tool.Type = EgtTdbGetCurrToolParam( MCH_TP.TYPE)
|
||||||
|
Tool.Diameter = EgtTdbGetCurrToolParam( MCH_TP.DIAM) or 0
|
||||||
|
-- lama
|
||||||
|
if Tool.Type == MCH_TY.SAW_STD or Tool.Type == MCH_TY.SAW_FLAT then
|
||||||
|
Tool.Thickness = EgtTdbGetCurrToolParam(MCH_TP.THICK) or 0
|
||||||
|
Tool.MaxDepth = EgtTdbGetCurrToolMaxDepth() or 0
|
||||||
|
Tool.SideStep = EgtTdbGetCurrToolValInNotes( MCH_TP.USERNOTES, 'SIDESTEP', 'd')
|
||||||
|
-- sega a catena
|
||||||
|
elseif Tool.Type == MCH_TY.MORTISE_STD then
|
||||||
|
Tool.Length = EgtTdbGetCurrToolParam( MCH_TP.LEN) or 0
|
||||||
|
Tool.MaxMat = EgtTdbGetCurrToolParam( MCH_TP.MAXMAT) or 0
|
||||||
|
Tool.Width = EgtTdbGetCurrToolParam( MCH_TP.DIAM) or 0
|
||||||
|
Tool.Thickness = EgtTdbGetCurrToolParam( MCH_TP.THICK) or 0
|
||||||
|
Tool.CornerRadius = EgtTdbGetCurrToolParam( MCH_TP.CORNRAD) or 0
|
||||||
|
-- altri utensili al momento non previsti
|
||||||
|
else
|
||||||
|
error( 'Wrong tool type')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return Tool
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
function SawPlusChain.CalculateLeadInOut( Machining, EdgeToMachine)
|
function SawPlusChain.CalculateLeadInOut( Machining, EdgeToMachine)
|
||||||
-- TODO implementare le funzioni di Tool Collision Avoidance (vedi wiki e FacesBysaw -> CalcLeadInOutPerpGeom)
|
-- TODO implementare le funzioni di Tool Collision Avoidance (vedi wiki e FacesBysaw -> CalcLeadInOutPerpGeom)
|
||||||
|
|
||||||
@@ -5260,19 +5268,14 @@ function SawPlusChain.Saw.CalculateMachiningParameters( Proc, FaceToMachine, Edg
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- ricerca lavorazione
|
-- ricerca lavorazione
|
||||||
Cutting.Name = ML.FindCutting( 'HeadSide', true, false, abs( EdgeToMachine.Elevation))
|
Cutting.Name = ML.FindCutting( 'HeadSide', true, false)
|
||||||
if not Cutting.Name then
|
if not Cutting.Name then
|
||||||
-- ricerca lavorazione senza considerare massima elevazione
|
Cutting.Message = 'Feature '.. Proc.FeatureId .. ' : strategy ' .. SawPlusChain.Name .. ' not applicable - saw blade not found'
|
||||||
Cutting.Name = ML.FindCutting( 'HeadSide', true, false, nil, 'Longest')
|
Cutting.CanApply = false
|
||||||
if not Cutting.Name then
|
EgtOutLog( Cutting.Message)
|
||||||
Cutting.Message = 'Feature '.. Proc.FeatureId .. ' : strategy ' .. SawPlusChain.Name .. ' not applicable - saw blade not found'
|
|
||||||
Cutting.CanApply = false
|
|
||||||
EgtOutLog( Cutting.Message)
|
|
||||||
return Cutting
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
Cutting.Type = MCH_OY.MILLING
|
Cutting.Type = MCH_OY.MILLING
|
||||||
Cutting.Tool = BL.GetToolFromMachining( Cutting.Name)
|
Cutting.Tool = SawPlusChain.GetToolFromMachining( Cutting.Name)
|
||||||
|
|
||||||
-- verifica dimensioni tasca e direzione compatibili
|
-- verifica dimensioni tasca e direzione compatibili
|
||||||
-- se tasca meno spessa della lama la strategia non è applicabile
|
-- se tasca meno spessa della lama la strategia non è applicabile
|
||||||
@@ -5289,7 +5292,7 @@ function SawPlusChain.Saw.CalculateMachiningParameters( Proc, FaceToMachine, Edg
|
|||||||
EgtOutLog( Cutting.Message)
|
EgtOutLog( Cutting.Message)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
if EdgeToMachine.ToolDirection:getZ() < BD.NZ_MINA and BD.C_SIMM then
|
if EdgeToMachine.ToolDirection:getZ() < BD.NZ_MINA then
|
||||||
Cutting.CanApply = false
|
Cutting.CanApply = false
|
||||||
Cutting.Message = 'Feature '.. Proc.FeatureId .. ' : skipped sawblade from bottom'
|
Cutting.Message = 'Feature '.. Proc.FeatureId .. ' : skipped sawblade from bottom'
|
||||||
EgtOutLog( Cutting.Message)
|
EgtOutLog( Cutting.Message)
|
||||||
@@ -5470,7 +5473,7 @@ function SawPlusChain.Chainsaw.CalculateMachiningParameters( Proc, FaceToMachine
|
|||||||
EgtOutLog( Mortising.Message)
|
EgtOutLog( Mortising.Message)
|
||||||
end
|
end
|
||||||
Mortising.Type = MCH_OY.MORTISING
|
Mortising.Type = MCH_OY.MORTISING
|
||||||
Mortising.Tool = BL.GetToolFromMachining( Mortising.Name)
|
Mortising.Tool = SawPlusChain.GetToolFromMachining( Mortising.Name)
|
||||||
|
|
||||||
-- in caso di tunnel da un lato permetto eventuale inversione lato di lavoro in caso di errori di applicazione (es: Outstroke)
|
-- in caso di tunnel da un lato permetto eventuale inversione lato di lavoro in caso di errori di applicazione (es: Outstroke)
|
||||||
if Proc.Topology == 'Tunnel' and sMortisingType == 'OneSide' or sMortisingType == 'OneSideAndExtend' then
|
if Proc.Topology == 'Tunnel' and sMortisingType == 'OneSide' or sMortisingType == 'OneSideAndExtend' then
|
||||||
@@ -5670,7 +5673,7 @@ function SawPlusChain.Make( bOnlySaw, Proc, nRawId)
|
|||||||
end
|
end
|
||||||
else
|
else
|
||||||
-- se la lama non è arrivata sul fondo e c'è almeno un lato aperto va lavorato
|
-- se la lama non è arrivata sul fondo e c'è almeno un lato aperto va lavorato
|
||||||
if Cutting.CanApply and Cutting.RadialOffset > 10 * GEO.EPS_SMALL then
|
if Cutting.RadialOffset > 10 * GEO.EPS_SMALL then
|
||||||
-- eventuale lavorazione di lama - lato della tasca da cui inizia la lavorazione
|
-- eventuale lavorazione di lama - lato della tasca da cui inizia la lavorazione
|
||||||
if Proc.MainFaces.LongFace.Edges.BottomEdge.IsStartOpen then
|
if Proc.MainFaces.LongFace.Edges.BottomEdge.IsStartOpen then
|
||||||
Cutting = SawPlusChain.Saw.CalculateMachiningParameters( Proc, Proc.MainFaces.LongFace, Proc.MainFaces.LongFace.Edges.SideEdges.StartEdge)
|
Cutting = SawPlusChain.Saw.CalculateMachiningParameters( Proc, Proc.MainFaces.LongFace, Proc.MainFaces.LongFace.Edges.SideEdges.StartEdge)
|
||||||
@@ -5848,11 +5851,10 @@ local function MakeMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead, bSinglePa
|
|||||||
local sMyMchFind = 'Pocket'
|
local sMyMchFind = 'Pocket'
|
||||||
local nOk, sErr
|
local nOk, sErr
|
||||||
nOk, sErr, dDimMin, dDimMax, dDepth, vtOrtho,
|
nOk, sErr, dDimMin, dDimMax, dDepth, vtOrtho,
|
||||||
nLundIdFace, sErr = MakeByPockets( Proc, nPhase, nRawId, nPartId, nChamfer, dDepthCham, nAddGrpId, sMyMchFind, false, b3Solid, bClosedOrthoFaces)
|
nLundIdFace = MakeByPockets( Proc, nPhase, nRawId, nPartId, nChamfer, dDepthCham, nAddGrpId, sMyMchFind, false, b3Solid, bClosedOrthoFaces)
|
||||||
if nOk < 0 then
|
if nOk < 0 then
|
||||||
return false, sErr
|
return false, sErr
|
||||||
elseif nOk > 0 then
|
elseif nOk > 0 then
|
||||||
sWarn = sErr
|
|
||||||
bTryWithBlades = false
|
bTryWithBlades = false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -5955,9 +5957,9 @@ local function MakeMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead, bSinglePa
|
|||||||
local bIsL = ( Proc.Fct == 2 or TestElleShape3( Proc) or TestElleShape4( Proc) == 2)
|
local bIsL = ( Proc.Fct == 2 or TestElleShape3( Proc) or TestElleShape4( Proc) == 2)
|
||||||
-- se parametro Q03=2 forzo la fresatura di lato; con Q03=3 forzo solo se la faccia di lavoro non è rivolta verso l'alto +/-10°; per rabbet che guardano in giù sempre fresatura di lato
|
-- se parametro Q03=2 forzo la fresatura di lato; con Q03=3 forzo solo se la faccia di lavoro non è rivolta verso l'alto +/-10°; per rabbet che guardano in giù sempre fresatura di lato
|
||||||
local bIsRabbetAlongXTowardsBottom = ( Proc.TopologyLongName == 'Rabbet-Through-RightAngles-Parallel-2' and ( Proc.AffectedFaces.Front or Proc.AffectedFaces.Back) and Proc.AffectedFaces.Bottom and Proc.AffectedFaces.Left and Proc.AffectedFaces.Right)
|
local bIsRabbetAlongXTowardsBottom = ( Proc.TopologyLongName == 'Rabbet-Through-RightAngles-Parallel-2' and ( Proc.AffectedFaces.Front or Proc.AffectedFaces.Back) and Proc.AffectedFaces.Bottom and Proc.AffectedFaces.Left and Proc.AffectedFaces.Right)
|
||||||
local bForceSideMill = ( Proc.AffectedFaces.Front or Proc.AffectedFaces.Back) and ( bIsRabbetAlongXTowardsBottom or ( ( EgtGetInfo( Proc.Id, Q_SIDE_ROUGH_TOOL, 'i') == 2 or ( EgtGetInfo( Proc.Id, Q_SIDE_ROUGH_TOOL, 'i') == 3 and vtN:getZ() < 0.985)) and ( ( Proc.Fct == 4 and ( Proc.AffectedFaces.Front or Proc.AffectedFaces.Back)) or Proc.Fct == 3 or Proc.Fct == 2)))
|
local bForceSideMill = bIsRabbetAlongXTowardsBottom or ( ( EgtGetInfo( Proc.Id, Q_SIDE_ROUGH_TOOL, 'i') == 2 or ( EgtGetInfo( Proc.Id, Q_SIDE_ROUGH_TOOL, 'i') == 3 and vtN:getZ() < 0.985)) and ( ( Proc.Fct == 4 and ( Proc.AffectedFaces.Front or Proc.AffectedFaces.Back)) or Proc.Fct == 3 or Proc.Fct == 2))
|
||||||
-- se fattibile con fresa BH di fianco e spessore utensile inferiore alla larghezza faccia
|
-- se fattibile con fresa BH di fianco e spessore utensile inferiore alla larghezza faccia
|
||||||
local bMakeBySideMill, bHead, bHeadDir, sMilling, dMaxMat, dToolDiam = VerifyBHSideMill( Proc, bIsU, bIsL, bSinglePart, bPrevBhSideMill, b3Raw)
|
local bMakeBySideMill, bHead, bHeadDir, sMilling, dMaxMat, dToolDiam = VerifyBHSideMill( Proc, bIsU, bIsL, bSinglePart, bPrevBhSideMill)
|
||||||
if bPrevBhSideMill == nil then
|
if bPrevBhSideMill == nil then
|
||||||
bPrevBhSideMill = bMakeBySideMill
|
bPrevBhSideMill = bMakeBySideMill
|
||||||
end
|
end
|
||||||
@@ -5973,10 +5975,8 @@ local function MakeMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead, bSinglePa
|
|||||||
vtN, vtN2 = vtN2, vtN
|
vtN, vtN2 = vtN2, vtN
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
-- informazioni utensile
|
|
||||||
local Tool = BL.GetToolFromMachining( sMilling)
|
|
||||||
-- se lavorazione da sotto e lunga, va divisa in due metà
|
-- se lavorazione da sotto e lunga, va divisa in due metà
|
||||||
local bDouble = not Tool.IsOnAggregate and ( vtN:getZ() < -0.5 and dH > ( BD.MAX_LEN_BH_FROM_BOTTOM or 200) and not BD.TURN)
|
local bDouble = ( vtN:getZ() < -0.5 and dH > ( BD.MAX_LEN_BH_FROM_BOTTOM or 200) and not BD.TURN)
|
||||||
-- inserisco la lavorazione di fresatura
|
-- inserisco la lavorazione di fresatura
|
||||||
local sName = 'BHMill_' .. ( EgtGetName( Proc.Id) or tostring( Proc.Id))
|
local sName = 'BHMill_' .. ( EgtGetName( Proc.Id) or tostring( Proc.Id))
|
||||||
local nMchFId = EgtAddMachining( sName, sMilling)
|
local nMchFId = EgtAddMachining( sName, sMilling)
|
||||||
@@ -6012,12 +6012,6 @@ local function MakeMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead, bSinglePa
|
|||||||
EgtSetMachiningParam( MCH_MP.LITANG, 0)
|
EgtSetMachiningParam( MCH_MP.LITANG, 0)
|
||||||
EgtSetMachiningParam( MCH_MP.LIPERP, dFacElev + BD.CUT_SIC)
|
EgtSetMachiningParam( MCH_MP.LIPERP, dFacElev + BD.CUT_SIC)
|
||||||
EgtSetMachiningParam( MCH_MP.LEADOUTTYPE, MCH_MILL_LO.AS_LI)
|
EgtSetMachiningParam( MCH_MP.LEADOUTTYPE, MCH_MILL_LO.AS_LI)
|
||||||
local vtN2 = EgtSurfTmFacetNormVersor( Proc.Id, EgtIf( nFacInd == 0, 1, 0), GDB_ID.ROOT)
|
|
||||||
if vtN2 then
|
|
||||||
local AddLen = sqrt( dV^2 * ( ( 1 / abs( vtN2:getX())^2) - 1)) + BD.CUT_SIC
|
|
||||||
EgtSetMachiningParam( MCH_MP.STARTADDLEN, AddLen)
|
|
||||||
EgtSetMachiningParam( MCH_MP.ENDADDLEN, AddLen)
|
|
||||||
end
|
|
||||||
else
|
else
|
||||||
EgtSetMachiningParam( MCH_MP.STARTADDLEN, 0)
|
EgtSetMachiningParam( MCH_MP.STARTADDLEN, 0)
|
||||||
EgtSetMachiningParam( MCH_MP.LITANG, dToolDiam / 2 + BD.CUT_SIC)
|
EgtSetMachiningParam( MCH_MP.LITANG, dToolDiam / 2 + BD.CUT_SIC)
|
||||||
@@ -6050,22 +6044,6 @@ local function MakeMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead, bSinglePa
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
EgtSetMachiningParam( MCH_MP.SCC, nSCC)
|
EgtSetMachiningParam( MCH_MP.SCC, nSCC)
|
||||||
-- impostazioni per fresa a disco su aggregato
|
|
||||||
if Tool.IsOnAggregate then
|
|
||||||
if AreSameVectorApprox( vtN, -Z_AX()) then
|
|
||||||
EgtSetMachiningParam( MCH_MP.FACEUSE, MCH_MILL_FU.PARAL_RIGHT)
|
|
||||||
EgtSetMachiningParam( MCH_MP.SCC, MCH_SCC.ADIR_YP)
|
|
||||||
if bHeadDir then
|
|
||||||
EgtSetMachiningParam( MCH_MP.WORKSIDE, MCH_MILL_WS.LEFT)
|
|
||||||
EgtSetMachiningParam( MCH_MP.TOOLINVERT, true)
|
|
||||||
else
|
|
||||||
EgtSetMachiningParam( MCH_MP.WORKSIDE, MCH_MILL_WS.RIGHT)
|
|
||||||
EgtSetMachiningParam( MCH_MP.TOOLINVERT, false)
|
|
||||||
end
|
|
||||||
else
|
|
||||||
EgtSetMachiningParam( MCH_MP.SCC, MCH_SCC.ADIR_ZP)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
-- eseguo
|
-- eseguo
|
||||||
if not ML.ApplyMachining( true, false) then
|
if not ML.ApplyMachining( true, false) then
|
||||||
local _, sErr = EgtGetLastMachMgrError()
|
local _, sErr = EgtGetLastMachMgrError()
|
||||||
@@ -6154,20 +6132,9 @@ local function MakeMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead, bSinglePa
|
|||||||
vtN, vtN2 = vtN2, vtN
|
vtN, vtN2 = vtN2, vtN
|
||||||
sPocketing = ML.FindPocketing( sMchFind, dDiam2, dFacElev2 + dCollSic2)
|
sPocketing = ML.FindPocketing( sMchFind, dDiam2, dFacElev2 + dCollSic2)
|
||||||
if not sPocketing then
|
if not sPocketing then
|
||||||
dDiam, dDiam2 = dDiam2, dDiam
|
local sErr = 'Error : '..sMchFind..' not found in library'
|
||||||
dCollSic, dCollSic2 = dCollSic2, dCollSic
|
EgtOutLog( sErr)
|
||||||
nFacInd, nFacInd2 = nFacInd2, nFacInd
|
return false, sErr
|
||||||
dH, dH2 = dH2, dH
|
|
||||||
dV, dV2 = dV2, dV
|
|
||||||
dFacElev, dFacElev2 = dFacElev2, dFacElev
|
|
||||||
rfFac, rfFac2 = rfFac2, rfFac
|
|
||||||
vtN, vtN2 = vtN2, vtN
|
|
||||||
sPocketing = ML.FindPocketing( sMchFind, dDiam2, nil, nil, nil, nil, nil, nil, 'Longest')
|
|
||||||
if not sPocketing then
|
|
||||||
local sErr = 'Error : '..sMchFind..' not found in library'
|
|
||||||
EgtOutLog( sErr)
|
|
||||||
return false, sErr
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
-- provo con contornatura
|
-- provo con contornatura
|
||||||
@@ -6236,7 +6203,7 @@ local function MakeMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead, bSinglePa
|
|||||||
if BD.ANG_TRASM and Proc.Fct >= 4 and AreOppositeVectorApprox( vtN, Z_AX()) then
|
if BD.ANG_TRASM and Proc.Fct >= 4 and AreOppositeVectorApprox( vtN, Z_AX()) then
|
||||||
bLapJointAngTrasm = true
|
bLapJointAngTrasm = true
|
||||||
-- se orientata verso il basso e non c'è testa da sotto, verifico l'alternativa
|
-- se orientata verso il basso e non c'è testa da sotto, verifico l'alternativa
|
||||||
elseif vtN:getZ() < BD.NZ_MINA and not BD.DOWN_HEAD and nFacInd2 and not Proc.OkFromBottom then
|
elseif vtN:getZ() < BD.NZ_MINA and not BD.DOWN_HEAD and nFacInd2 then
|
||||||
ptC, vtN = EgtSurfTmFacetCenter( Proc.Id, nFacInd2, GDB_ID.ROOT)
|
ptC, vtN = EgtSurfTmFacetCenter( Proc.Id, nFacInd2, GDB_ID.ROOT)
|
||||||
nFacInd, nFacInd2 = nFacInd2, nFacInd
|
nFacInd, nFacInd2 = nFacInd2, nFacInd
|
||||||
dFacElev, dFacElev2 = dFacElev2, dFacElev
|
dFacElev, dFacElev2 = dFacElev2, dFacElev
|
||||||
@@ -6244,7 +6211,7 @@ local function MakeMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead, bSinglePa
|
|||||||
end
|
end
|
||||||
-- verifico non sia orientata verso il basso o ci sia una testa dal basso o la lavorazione sia dal lato.
|
-- verifico non sia orientata verso il basso o ci sia una testa dal basso o la lavorazione sia dal lato.
|
||||||
local bFaceDown = ( vtN:getZ() < BD.NZ_MINA)
|
local bFaceDown = ( vtN:getZ() < BD.NZ_MINA)
|
||||||
if bFaceDown and not BD.DOWN_HEAD and not BD.TURN and not bForceSideMill and not bLapJointAngTrasm and not Proc.OkFromBottom then
|
if bFaceDown and not BD.DOWN_HEAD and not BD.TURN and not bForceSideMill and not bLapJointAngTrasm then
|
||||||
local sErr = 'Error : LapJoint from bottom impossible'
|
local sErr = 'Error : LapJoint from bottom impossible'
|
||||||
EgtOutLog( sErr)
|
EgtOutLog( sErr)
|
||||||
return false, sErr
|
return false, sErr
|
||||||
@@ -6966,10 +6933,8 @@ local function MakeLongMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead)
|
|||||||
-- superficie di fondo
|
-- superficie di fondo
|
||||||
nSurfBottomId = EgtSurfTmPlaneInBBox( nAddGrpId, ptMaxBox, vtOrtho, b3SolidExtended, GDB_ID.ROOT)
|
nSurfBottomId = EgtSurfTmPlaneInBBox( nAddGrpId, ptMaxBox, vtOrtho, b3SolidExtended, GDB_ID.ROOT)
|
||||||
-- calcolo di quanto allargare le superfici
|
-- calcolo di quanto allargare le superfici
|
||||||
if dAddLen == 0 then
|
local dWidth = EgtIf( Proc.AffectedFaces.Front, Proc.Box:getDimZ(), Proc.Box:getDimY())
|
||||||
local dWidth = EgtIf( Proc.AffectedFaces.Front, Proc.Box:getDimZ(), Proc.Box:getDimY())
|
dAddLen = min( dWidth, 100) / 2
|
||||||
dAddLen = min( dWidth, 100) / 2
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
-- la divido in parti lungo X
|
-- la divido in parti lungo X
|
||||||
local vAddId = {}
|
local vAddId = {}
|
||||||
@@ -7056,7 +7021,7 @@ local function MakeLongMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead)
|
|||||||
for i = 1, #vAddId do
|
for i = 1, #vAddId do
|
||||||
local b3Box = EgtGetBBoxGlob( vAddId[i], GDB_BB.STANDARD)
|
local b3Box = EgtGetBBoxGlob( vAddId[i], GDB_BB.STANDARD)
|
||||||
local nFct = EgtSurfTmFacetCount( vAddId[i])
|
local nFct = EgtSurfTmFacetCount( vAddId[i])
|
||||||
local AddProc = { Id = vAddId[i], Grp = Proc.Grp, Prc = Proc.Prc, Box = b3Box, TotBox = Proc.Box, Fct = nFct, Flg = Proc.Flg, PartId = Proc.PartId, TaskId = Proc.TaskId, FeatureId = Proc.FeatureId, IsSplittedLapJoint = true, AffectedFaces = Proc.AffectedFaces, OkFromBottom = Proc.OkFromBottom}
|
local AddProc = { Id = vAddId[i], Grp = Proc.Grp, Prc = Proc.Prc, Box = b3Box, TotBox = Proc.Box, Fct = nFct, Flg = Proc.Flg, PartId = Proc.PartId, TaskId = Proc.TaskId, FeatureId = Proc.FeatureId, IsSplittedLapJoint = true, AffectedFaces = Proc.AffectedFaces}
|
||||||
Topology.Classify( AddProc, b3Raw)
|
Topology.Classify( AddProc, b3Raw)
|
||||||
-- lasciare il false nel sesto parametro (perchè internamente viene verificato se diverso da nil)
|
-- lasciare il false nel sesto parametro (perchè internamente viene verificato se diverso da nil)
|
||||||
local bOk, sMyWarn
|
local bOk, sMyWarn
|
||||||
@@ -7103,9 +7068,11 @@ local function TestTwoFacesDownHead( Proc)
|
|||||||
if not ( Proc.Face[1].IsTooDownwardForTopBlade or Proc.Face[2].IsTooDownwardForTopBlade) then
|
if not ( Proc.Face[1].IsTooDownwardForTopBlade or Proc.Face[2].IsTooDownwardForTopBlade) then
|
||||||
bDownHeadBlade = false
|
bDownHeadBlade = false
|
||||||
else
|
else
|
||||||
if ( Proc.Face[1].IsTooDownwardForTopBlade and Proc.Face[2].IsTooWideForTopBlade) or
|
for i = 1, Proc.Fct do
|
||||||
( Proc.Face[2].IsTooDownwardForTopBlade and Proc.Face[1].IsTooWideForTopBlade) then
|
if Proc.Face[i].IsTooDownwardForTopBlade and ( not Proc.IsTopDownRabbet or Proc.Face[i].IsTooWideForTopBlade) then
|
||||||
bDownHeadBlade = true
|
bDownHeadBlade = true
|
||||||
|
break
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -7335,9 +7302,6 @@ function ProcessLapJoint.Make( Proc, nPhase, nRawId, nPartId, dOvmHead)
|
|||||||
if Proc.Prc == 30 or Proc.Prc == 20 then
|
if Proc.Prc == 30 or Proc.Prc == 20 then
|
||||||
local nBladeAntisplint = EgtGetInfo( Proc.Id, Q_ANTISPLINT_TYPE, 'i') or 0
|
local nBladeAntisplint = EgtGetInfo( Proc.Id, Q_ANTISPLINT_TYPE, 'i') or 0
|
||||||
local nUseRoughToolOnSide = EgtGetInfo( Proc.Id, Q_SIDE_ROUGH_TOOL, 'i') or 0
|
local nUseRoughToolOnSide = EgtGetInfo( Proc.Id, Q_SIDE_ROUGH_TOOL, 'i') or 0
|
||||||
if nUseRoughToolOnSide == 4 and ( Proc.AffectedFaces.Left or Proc.AffectedFaces.Right) then
|
|
||||||
nUseRoughToolOnSide = 0
|
|
||||||
end
|
|
||||||
nForceUseBladeOnNotContinueFace = EgtGetInfo( Proc.Id, Q_BLADE_ON_ALONG_FACE, 'i') or 0
|
nForceUseBladeOnNotContinueFace = EgtGetInfo( Proc.Id, Q_BLADE_ON_ALONG_FACE, 'i') or 0
|
||||||
-- se antischeggia di fresa o abilitato sgrossatore di fianco
|
-- se antischeggia di fresa o abilitato sgrossatore di fianco
|
||||||
if nBladeAntisplint == 2 or nUseRoughToolOnSide > 0 then
|
if nBladeAntisplint == 2 or nUseRoughToolOnSide > 0 then
|
||||||
@@ -7363,7 +7327,7 @@ function ProcessLapJoint.Make( Proc, nPhase, nRawId, nPartId, dOvmHead)
|
|||||||
-- se lunghezza richiede spezzatura
|
-- se lunghezza richiede spezzatura
|
||||||
if ( Proc.Box:getDimX() > BD.LONGCUT_MAXLEN) or
|
if ( Proc.Box:getDimX() > BD.LONGCUT_MAXLEN) or
|
||||||
( Proc.Box:getDimX() > 0.7 * b3Solid:getDimX() and Proc.Box:getDimX() > BD.LONGCUT_ENDLEN) or
|
( Proc.Box:getDimX() > 0.7 * b3Solid:getDimX() and Proc.Box:getDimX() > BD.LONGCUT_ENDLEN) or
|
||||||
( ( nForceUseBladeOnNotContinueFace and nForceUseBladeOnNotContinueFace > 0) and ( Proc.Box:getDimX() > ( BD.LEN_SHORT_PART or 1000))) then
|
( ( nForceUseBladeOnNotContinueFace and nForceUseBladeOnNotContinueFace > 0) and ( Proc.Box:getDimX() > BD.LEN_SHORT_PART or 1000)) then
|
||||||
-- una faccia
|
-- una faccia
|
||||||
if Proc.Fct == 1 then
|
if Proc.Fct == 1 then
|
||||||
if bUseBlade then
|
if bUseBlade then
|
||||||
@@ -7511,26 +7475,10 @@ function ProcessLapJoint.Make( Proc, nPhase, nRawId, nPartId, dOvmHead)
|
|||||||
-- determino l'angolo tra le facce
|
-- determino l'angolo tra le facce
|
||||||
local bAdj, _, _, dAng = EgtSurfTmFacetsContact( Proc.Id, 0, 1, GDB_ID.ROOT)
|
local bAdj, _, _, dAng = EgtSurfTmFacetsContact( Proc.Id, 0, 1, GDB_ID.ROOT)
|
||||||
-- se con BH
|
-- se con BH
|
||||||
if VerifyBHSideMill( Proc, nil, nil, nil, nil, b3Raw) then
|
if VerifyBHSideMill( Proc) then
|
||||||
return MakeMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead, true)
|
return MakeMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead, true)
|
||||||
-- se ortogonali e non forzata lama, con fresa
|
-- se ortogonali e non forzata lama, con fresa
|
||||||
elseif not bUseBlade then
|
elseif not bUseBlade then
|
||||||
-- verifico se devo fare prima gli smussi
|
|
||||||
-- recupero gruppo per geometria addizionale
|
|
||||||
local nAddGrpId = BL.GetAddGroup( nPartId)
|
|
||||||
if not nAddGrpId then
|
|
||||||
local sErr = 'Error : missing AddGroup'
|
|
||||||
EgtOutLog( sErr)
|
|
||||||
return false, sErr
|
|
||||||
end
|
|
||||||
-- verifiche per smusso
|
|
||||||
local nChamfer, dDepthCham, sErrCham = EvaluateQParam( Proc)
|
|
||||||
-- se smusso da fare
|
|
||||||
if nChamfer > 0 then
|
|
||||||
local _, _, _, vtOrtho, _, nSurfInt = BL.GetTunnelDimension( Proc, nPartId)
|
|
||||||
local nOk, sErr = MakeChamfer( Proc, true, nAddGrpId, vtOrtho, b3Solid, nSurfInt, dDepthCham)
|
|
||||||
if nOk < 0 then return false, sErr end
|
|
||||||
end
|
|
||||||
-- se piccole
|
-- se piccole
|
||||||
if Proc.Box:getDimX() < MAX_MILL_LIN and ( Proc.Box:getDimZ() < MAX_MILL_LIN or Proc.Box:getDimY() < MAX_MILL_LIN) and bAdj and abs( dAng + 90) < 1 then
|
if Proc.Box:getDimX() < MAX_MILL_LIN and ( Proc.Box:getDimZ() < MAX_MILL_LIN or Proc.Box:getDimY() < MAX_MILL_LIN) and bAdj and abs( dAng + 90) < 1 then
|
||||||
return MakeTwoFacesByMill( Proc, nPhase, nRawId, nPartId, bDownHeadMill)
|
return MakeTwoFacesByMill( Proc, nPhase, nRawId, nPartId, bDownHeadMill)
|
||||||
|
|||||||
@@ -442,7 +442,6 @@ function ProcessLong2Cut.Make( Proc, nPhase, nRawId, nPartId, bForcedBladeMaster
|
|||||||
local vWidth = {}
|
local vWidth = {}
|
||||||
_, _, vWidth[1] = BL.GetFaceHvRefDim( Proc.Id, tFaceLong[1])
|
_, _, vWidth[1] = BL.GetFaceHvRefDim( Proc.Id, tFaceLong[1])
|
||||||
_, _, vWidth[2] = BL.GetFaceHvRefDim( Proc.Id, tFaceLong[2])
|
_, _, vWidth[2] = BL.GetFaceHvRefDim( Proc.Id, tFaceLong[2])
|
||||||
local vElevation = { vWidth[2], vWidth[1]}
|
|
||||||
|
|
||||||
-- Se da sopra o ( da tutte i lati con testa da sotto) e taglio di lama e lunghezza facce maggiore del parametro lunghezza minima
|
-- Se da sopra o ( da tutte i lati con testa da sotto) e taglio di lama e lunghezza facce maggiore del parametro lunghezza minima
|
||||||
if ( bCanUseUnderBlade or bCanUseBlade) and bUseBlade and Proc.Box:getDimX() > dLimMinPiece - 1 then
|
if ( bCanUseUnderBlade or bCanUseBlade) and bUseBlade and Proc.Box:getDimX() > dLimMinPiece - 1 then
|
||||||
@@ -1312,9 +1311,6 @@ function ProcessLong2Cut.Make( Proc, nPhase, nRawId, nPartId, bForcedBladeMaster
|
|||||||
if nSide == 1 or nSide == -1 then
|
if nSide == 1 or nSide == -1 then
|
||||||
local bFromYM = (( vtN[vOrd[i]]:getY() < 0 and bConvex) or ( vtN[vOrd[i]]:getY() > 0 and not bConvex))
|
local bFromYM = (( vtN[vOrd[i]]:getY() < 0 and bConvex) or ( vtN[vOrd[i]]:getY() > 0 and not bConvex))
|
||||||
nSCC = EgtIf( bFromYM, MCH_SCC.ADIR_YM, MCH_SCC.ADIR_YP)
|
nSCC = EgtIf( bFromYM, MCH_SCC.ADIR_YM, MCH_SCC.ADIR_YP)
|
||||||
if BD.TURN == 2 and not bFromYM then
|
|
||||||
nSCC = EgtIf( nSide == -1, MCH_SCC.ADIR_ZM, MCH_SCC.ADIR_ZP)
|
|
||||||
end
|
|
||||||
else
|
else
|
||||||
local bFromZM = (( vtN[vOrd[i]]:getZ() < 0 and bConvex) or ( vtN[vOrd[i]]:getZ() > 0 and not bConvex))
|
local bFromZM = (( vtN[vOrd[i]]:getZ() < 0 and bConvex) or ( vtN[vOrd[i]]:getZ() > 0 and not bConvex))
|
||||||
nSCC = EgtIf( bFromZM, MCH_SCC.ADIR_ZM, MCH_SCC.ADIR_ZP)
|
nSCC = EgtIf( bFromZM, MCH_SCC.ADIR_ZM, MCH_SCC.ADIR_ZP)
|
||||||
@@ -1329,12 +1325,6 @@ function ProcessLong2Cut.Make( Proc, nPhase, nRawId, nPartId, bForcedBladeMaster
|
|||||||
local dStep = 0
|
local dStep = 0
|
||||||
local dAgg = EgtIf( bConvex, 2 * BD.CUT_EXTRA, BD.CUT_EXTRA)
|
local dAgg = EgtIf( bConvex, 2 * BD.CUT_EXTRA, BD.CUT_EXTRA)
|
||||||
local dLargh = vWidth[vOrd[i]]
|
local dLargh = vWidth[vOrd[i]]
|
||||||
-- controllo se lavorazione completa
|
|
||||||
local dMachDepth = vElevation[vOrd[i]]
|
|
||||||
if dMachDepth > dMaxDepth - 10 * GEO.EPS_ANG_SMALL then
|
|
||||||
sWarn = 'Warning : elevation bigger than max tool depth'
|
|
||||||
EgtOutLog( sWarn)
|
|
||||||
end
|
|
||||||
if not bSide and dLargh > 0.8 * dToolDiam then
|
if not bSide and dLargh > 0.8 * dToolDiam then
|
||||||
nO = ceil( dLargh / ( 0.6 * dToolDiam))
|
nO = ceil( dLargh / ( 0.6 * dToolDiam))
|
||||||
if nO > 1 then
|
if nO > 1 then
|
||||||
@@ -1412,8 +1402,7 @@ function ProcessLong2Cut.Make( Proc, nPhase, nRawId, nPartId, bForcedBladeMaster
|
|||||||
return false, sErr
|
return false, sErr
|
||||||
end
|
end
|
||||||
local AddId = EgtCopyGlob( Proc.Id, nAddGrpId) or GDB_ID.NULL
|
local AddId = EgtCopyGlob( Proc.Id, nAddGrpId) or GDB_ID.NULL
|
||||||
local AddProc = { Id = AddId, Grp = 0, Prc = 12, Box = Proc.Box, Fct = Proc.Fct, Flg = Proc.Flg,
|
local AddProc = { Id = AddId, Grp = 0, Prc = 12, Box = Proc.Box, Fct = Proc.Fct, Flg = Proc.Flg, PartId = Proc.PartId, bMoveAfterSplit = true}
|
||||||
PartId = Proc.PartId, TaskId = Proc.TaskId, CutId = Proc.CutId, bMoveAfterSplit = true}
|
|
||||||
Topology.Classify( AddProc, b3Raw)
|
Topology.Classify( AddProc, b3Raw)
|
||||||
table.insert( AddedIds, AddProc)
|
table.insert( AddedIds, AddProc)
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,103 +0,0 @@
|
|||||||
-- ProcessSplit.lua by Egaltech s.r.l. 2025/06/20
|
|
||||||
-- Gestione tastatura
|
|
||||||
|
|
||||||
-- Tabella per definizione modulo
|
|
||||||
local ProcessProbing = {}
|
|
||||||
|
|
||||||
-- Include
|
|
||||||
require( 'EgtBase')
|
|
||||||
local BL = require( 'BeamLib')
|
|
||||||
|
|
||||||
-- Dati
|
|
||||||
local ML = require( 'MachiningLib')
|
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
|
||||||
local function GetProbingMachining( Machinings, sHead)
|
|
||||||
local sProbeMachining, sHeadTool
|
|
||||||
|
|
||||||
-- TODO questa associazione "testa utensile"-"testa tastatore" dovrebbe essere spostata nella macchina.
|
|
||||||
-- Non è detto che se testa utensile inizia con "H2" allora bisogna prendere lavorazione con "_H2"
|
|
||||||
|
|
||||||
-- se la testa utilizzata dalla lavorazione inizia con H2, dovrebbe essere la seconda testa
|
|
||||||
if EgtStartsWith( sHead, 'H2') then
|
|
||||||
sHeadTool = '_H2'
|
|
||||||
else
|
|
||||||
sHeadTool = '_H1'
|
|
||||||
end
|
|
||||||
|
|
||||||
for i = 1, #Machinings do
|
|
||||||
if EgtEndsWith( Machinings[i].Name, sHeadTool) then
|
|
||||||
sProbeMachining = Machinings[i]
|
|
||||||
return sProbeMachining
|
|
||||||
end
|
|
||||||
end
|
|
||||||
sProbeMachining = Machinings[1]
|
|
||||||
return sProbeMachining
|
|
||||||
end
|
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
|
||||||
local function MoveProbePointToRawFaces( ptProbe, vtProbe, nPartId)
|
|
||||||
local b3BoxPart = EgtGetBBoxGlob( EgtGetFirstNameInGroup( nPartId, 'Box') or GDB_ID.NULL, GDB_BB.STANDARD)
|
|
||||||
-- si porta linea di tastatura su grezzo
|
|
||||||
if AreSameVectorApprox( vtProbe, Z_AX()) then
|
|
||||||
ptProbe[3] = b3BoxPart:getMax():getZ()
|
|
||||||
elseif AreSameVectorApprox( vtProbe, -Z_AX()) then
|
|
||||||
ptProbe[3] = b3BoxPart:getMin():getZ()
|
|
||||||
elseif AreSameVectorApprox( vtProbe, Y_AX()) then
|
|
||||||
ptProbe[2] = b3BoxPart:getMax():getY()
|
|
||||||
elseif AreSameVectorApprox( vtProbe, -Y_AX()) then
|
|
||||||
ptProbe[2] = b3BoxPart:getMin():getY()
|
|
||||||
end
|
|
||||||
return ptProbe
|
|
||||||
end
|
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
|
||||||
-- Applicazione della lavorazione
|
|
||||||
function ProcessProbing.Make( Proc, nPartId, Info)
|
|
||||||
local bOk, sErr
|
|
||||||
|
|
||||||
-- per eseguire tastatura servono tutti i dati, altriemnti impossibile
|
|
||||||
if Info.vtProbe and Info.ptProbe and Info.sType then
|
|
||||||
Info.ptProbe = MoveProbePointToRawFaces( Info.ptProbe, Info.vtProbe, nPartId)
|
|
||||||
-- recupero gruppo per geometria addizionale
|
|
||||||
local nAddGrpId = BL.GetAddGroup( nPartId)
|
|
||||||
local nIdLine = EgtLinePVL( nAddGrpId, Info.ptProbe, Info.vtProbe, 10, GDB_RT.GLOB) -- TODO lunghezza da portare fuori come parametro
|
|
||||||
local Machinings = GetMachinings( MCH_MY.PROBING, Info.sType)
|
|
||||||
-- se c'è almeno una lavorazione, allora devo fare tastatura
|
|
||||||
if Machinings and #Machinings > 0 then
|
|
||||||
local sProbing = GetProbingMachining( Machinings, Info.sHead)
|
|
||||||
-- se c'è la linea e la lavorazione, applico
|
|
||||||
if sProbing and nIdLine then
|
|
||||||
local sName = 'DtMtProbe_' .. ( EgtGetName( Proc.Id) or tostring( Proc.Id))
|
|
||||||
local nMchFId = EgtAddMachining( sName, sProbing.Name)
|
|
||||||
-- si inverte la direzione della linea, deve essere entrante, oppostaa vettore estrusione
|
|
||||||
EgtInvertCurve( nIdLine)
|
|
||||||
-- aggiungo geometria
|
|
||||||
EgtSetMachiningGeometry( {{ nIdLine, -1}})
|
|
||||||
|
|
||||||
-- eseguo
|
|
||||||
if not ML.ApplyMachining( true, false) then
|
|
||||||
local _, sErr = EgtGetLastMachMgrError()
|
|
||||||
EgtSetOperationMode( nMchFId, false)
|
|
||||||
return false, sErr
|
|
||||||
else
|
|
||||||
bOk = true
|
|
||||||
end
|
|
||||||
else
|
|
||||||
bOk = false
|
|
||||||
sErr = 'Error on probing'
|
|
||||||
end
|
|
||||||
-- altrimenti tastatura non richiesta, esco
|
|
||||||
else
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
else
|
|
||||||
bOk = false
|
|
||||||
sErr = 'Error on probing'
|
|
||||||
end
|
|
||||||
|
|
||||||
return bOk, sErr
|
|
||||||
end
|
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
|
||||||
return ProcessProbing
|
|
||||||
@@ -639,13 +639,7 @@ function ProcessProfCamb.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH)
|
|||||||
EgtSetMachiningParam( MCH_MP.DEPTH, dDepth)
|
EgtSetMachiningParam( MCH_MP.DEPTH, dDepth)
|
||||||
end
|
end
|
||||||
-- posizione braccio porta testa
|
-- posizione braccio porta testa
|
||||||
local nSCC = MCH_SCC.ADIR_NONE
|
EgtSetMachiningParam( MCH_MP.SCC, EgtIf( bHead, MCH_SCC.ADIR_XP, MCH_SCC.ADIR_XM))
|
||||||
if BD.TURN == 2 then
|
|
||||||
nSCC = MCH_SCC.ADIR_ZP
|
|
||||||
else
|
|
||||||
nSCC = EgtIf( bHead, MCH_SCC.ADIR_XP, MCH_SCC.ADIR_XM)
|
|
||||||
end
|
|
||||||
EgtSetMachiningParam( MCH_MP.SCC, nSCC)
|
|
||||||
-- variabili per gestione direzione percorso e per gestione lavorazione di finitura opzionale
|
-- variabili per gestione direzione percorso e per gestione lavorazione di finitura opzionale
|
||||||
local ptSP, ptEp
|
local ptSP, ptEp
|
||||||
local bFinish
|
local bFinish
|
||||||
|
|||||||
@@ -50,7 +50,6 @@ end
|
|||||||
-- Applicazione della lavorazione
|
-- Applicazione della lavorazione
|
||||||
function ProcessRidgeLap.Make( Proc, nPhase, nRawId, nPartId, dOvmHead)
|
function ProcessRidgeLap.Make( Proc, nPhase, nRawId, nPartId, dOvmHead)
|
||||||
local nForceUseBladeOnNotContinueFace = EgtGetInfo( Proc.Id, 'Q04', 'i') or 0
|
local nForceUseBladeOnNotContinueFace = EgtGetInfo( Proc.Id, 'Q04', 'i') or 0
|
||||||
local bUseMill = ( EgtGetInfo( Proc.Id, 'Q05', 'i') or 0) == 1
|
|
||||||
-- recupero l'ingombro del grezzo di appartenenza
|
-- recupero l'ingombro del grezzo di appartenenza
|
||||||
local b3Raw = EgtGetRawPartBBox( nRawId)
|
local b3Raw = EgtGetRawPartBBox( nRawId)
|
||||||
-- ingombro del pezzo
|
-- ingombro del pezzo
|
||||||
@@ -140,9 +139,6 @@ function ProcessRidgeLap.Make( Proc, nPhase, nRawId, nPartId, dOvmHead)
|
|||||||
if BL.IsCutNeeded( CutProc, b3Raw, dOvmHead) then
|
if BL.IsCutNeeded( CutProc, b3Raw, dOvmHead) then
|
||||||
local bOk, sErr = Cut.Make( CutProc, nPhase, nRawId, nPartId, dOvmHead, false)
|
local bOk, sErr = Cut.Make( CutProc, nPhase, nRawId, nPartId, dOvmHead, false)
|
||||||
if not bOk then return bOk, sErr end
|
if not bOk then return bOk, sErr end
|
||||||
elseif bUseMill then
|
|
||||||
Proc.bForceMill = true
|
|
||||||
return LapJoint.Make( Proc, nPhase, nRawId, nPartId, dOvmHead)
|
|
||||||
elseif nForceUseBladeOnNotContinueFace > 0 then
|
elseif nForceUseBladeOnNotContinueFace > 0 then
|
||||||
EgtSurfTmRemoveFacet( Proc.Id, vFaceOrd[1] - 1)
|
EgtSurfTmRemoveFacet( Proc.Id, vFaceOrd[1] - 1)
|
||||||
Proc.Fct = Proc.Fct - 1
|
Proc.Fct = Proc.Fct - 1
|
||||||
|
|||||||
@@ -239,8 +239,6 @@ function ProcessRoundArch.Make( Proc, nPhase, nRawId, nPartId, dOvmHead)
|
|||||||
elseif AreSameOrOppositeVectorApprox( vtExtr, Z_AX()) then
|
elseif AreSameOrOppositeVectorApprox( vtExtr, Z_AX()) then
|
||||||
nSCC = MCH_SCC.ADIR_YP
|
nSCC = MCH_SCC.ADIR_YP
|
||||||
end
|
end
|
||||||
elseif BD.TURN == 2 then
|
|
||||||
nSCC = MCH_SCC.ADIR_ZP
|
|
||||||
elseif BD.TURN then
|
elseif BD.TURN then
|
||||||
if vtN:getZ() > 0.707 then
|
if vtN:getZ() > 0.707 then
|
||||||
nSCC = MCH_SCC.ADIR_ZP
|
nSCC = MCH_SCC.ADIR_ZP
|
||||||
|
|||||||
@@ -196,33 +196,27 @@ local function ApplyDiceCut( vFaceOrd, nGoodFace1, nGoodFace4, nAddGrpId, b3Soli
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- se non ho intersezione con la faccia tappo posso fare il taglio sul fianco
|
-- controllo per eseguire solo un taglio ottimizzato
|
||||||
if not nGoodFace1 or nGoodFace1 == 0 then
|
local bExecJustOneCut = false
|
||||||
-- controllo per eseguire solo un taglio ottimizzato
|
local dDiceFaceDim = GEO.INFINITO
|
||||||
local bExecJustOneCut = false
|
if ( i % 2) == 0 then
|
||||||
local dDiceFaceDim = GEO.INFINITO
|
for cont = 1, #vCuts[i] do
|
||||||
if ( i % 2) == 0 then
|
local _, dDiceFaceH, dDiceFaceV = BL.GetFaceHvRefDim( vCuts[i][cont], 0)
|
||||||
for cont = 1, #vCuts[i] do
|
-- se feature verso Z, si ammette anche lavorazione in doppio
|
||||||
local _, dDiceFaceH, dDiceFaceV = BL.GetFaceHvRefDim( vCuts[i][cont], 0)
|
if AreSameVectorApprox( vtRef, Z_AX()) then
|
||||||
-- se feature verso Z, si ammette anche lavorazione in doppio
|
if dMaxDepth * 2 > dDiceFaceH + BD.CUT_EXTRA then
|
||||||
if AreSameVectorApprox( vtRef, Z_AX()) then
|
bExecJustOneCut = true
|
||||||
if dMaxDepth * 2 > dDiceFaceH + BD.CUT_EXTRA then
|
dDiceFaceDim = dDiceFaceH
|
||||||
bExecJustOneCut = true
|
break
|
||||||
dDiceFaceDim = dDiceFaceH
|
end
|
||||||
break
|
elseif AreSameVectorApprox( vtRef, Y_AX()) or AreSameVectorApprox( vtRef, -Y_AX()) then
|
||||||
end
|
if dMaxDepth > dDiceFaceV + BD.CUT_EXTRA then
|
||||||
elseif AreSameVectorApprox( vtRef, Y_AX()) or AreSameVectorApprox( vtRef, -Y_AX()) then
|
bExecJustOneCut = true
|
||||||
if dMaxDepth > dDiceFaceV + BD.CUT_EXTRA then
|
dDiceFaceDim = dDiceFaceV
|
||||||
bExecJustOneCut = true
|
break
|
||||||
dDiceFaceDim = dDiceFaceV
|
|
||||||
break
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
-- se c'è intersezione non ci deve essere ExtraCut
|
|
||||||
else
|
|
||||||
dExtraCut = 0
|
|
||||||
end
|
end
|
||||||
-- se si può fare, faccio unico taglio parallelo
|
-- se si può fare, faccio unico taglio parallelo
|
||||||
if bExecJustOneCut then
|
if bExecJustOneCut then
|
||||||
@@ -449,7 +443,7 @@ function ProcessScarfJoint.Make( Proc, nPhase, nRawId, nPartId, dOvmHead, dOvmTa
|
|||||||
if not nGoodFace1 or nGoodFace1 == 0 then
|
if not nGoodFace1 or nGoodFace1 == 0 then
|
||||||
-- inserisco la lavorazione
|
-- inserisco la lavorazione
|
||||||
local vtRef2 = EgtIf( abs(vtRef:getZ()) < GEO.EPS_SMALL, Z_AX(), EgtIf( bHead, Y_AX(), -Y_AX()))
|
local vtRef2 = EgtIf( abs(vtRef:getZ()) < GEO.EPS_SMALL, Z_AX(), EgtIf( bHead, Y_AX(), -Y_AX()))
|
||||||
bOkd, sErrD = Fbs.MakeOne( nFace4, nGoodFace4 - 1, sCutting, dSawDiam, vtRef2, nil, BD.CUT_EXTRA, BD.CUT_SIC, 0, 0, 0, nil, b3Raw)
|
bOkd, sErrD = Fbs.MakeOne( nFace4, nGoodFace4 - 1, sCutting, dSawDiam, vtRef2, nil, 0, BD.CUT_SIC, 0, 0, 0, nil, b3Raw)
|
||||||
if not bOkd then return bOkd, sErrD end
|
if not bOkd then return bOkd, sErrD end
|
||||||
-- lavoro la faccia opposta (definita dal parametro P11)
|
-- lavoro la faccia opposta (definita dal parametro P11)
|
||||||
if vFaceOrd[3] ~= 0 then
|
if vFaceOrd[3] ~= 0 then
|
||||||
@@ -528,20 +522,10 @@ function ProcessScarfJoint.Make( Proc, nPhase, nRawId, nPartId, dOvmHead, dOvmTa
|
|||||||
else
|
else
|
||||||
dDiamMax = EgtIf( abs( frMor:getVersX():getY()) < abs( frMor:getVersY():getY()), dL, dW)
|
dDiamMax = EgtIf( abs( frMor:getVersX():getY()) < abs( frMor:getVersY():getY()), dL, dW)
|
||||||
end
|
end
|
||||||
-- determino la distanza tra le due facce inclinate per determinare elevazione
|
-- determino la distanza tra le due facce inclinate
|
||||||
local dDistFaces
|
local dDistFaces
|
||||||
if vFaceOrd[4] ~= 0 then
|
if vFaceOrd[4] ~= 0 then
|
||||||
local nElevationFace1 = 0
|
dDistFaces = abs((ptC[vFaceOrd[2]]-ptC[vFaceOrd[4]])*vtN[vFaceOrd[2]])
|
||||||
-- controllo estensione faccia 1
|
|
||||||
if vFaceOrd[1] ~= 0 then
|
|
||||||
frMor, dL, dW = EgtSurfTmFacetMinAreaRectangle( Proc.Id, vFaceOrd[1]-1, GDB_ID.ROOT)
|
|
||||||
if abs(vtRef:getY()) > 0.866 then
|
|
||||||
nElevationFace1 = EgtIf( abs( frMor:getVersX():getZ()) < abs( frMor:getVersY():getY()), dL, dW)
|
|
||||||
else
|
|
||||||
nElevationFace1 = EgtIf( abs( frMor:getVersX():getY()) < abs( frMor:getVersY():getY()), dL, dW)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
dDistFaces = max( abs((ptC[vFaceOrd[2]]-ptC[vFaceOrd[4]])*vtN[vFaceOrd[2]]), nElevationFace1)
|
|
||||||
end
|
end
|
||||||
-- recupero la lavorazione. considerando l dimensione del lato e l'affondamento
|
-- recupero la lavorazione. considerando l dimensione del lato e l'affondamento
|
||||||
local sPocketing
|
local sPocketing
|
||||||
|
|||||||
@@ -374,7 +374,7 @@ local function MakeStandardCuts( Proc, b3Raw, nCuts, dOffsetBetweenCuts, TailCut
|
|||||||
local dCutExtra = 0
|
local dCutExtra = 0
|
||||||
local dAccStart = 0
|
local dAccStart = 0
|
||||||
local dAccEnd = 0
|
local dAccEnd = 0
|
||||||
if TailCutType.bBigSectionCut and BD.C_SIMM and b3Raw:getDimZ() > BD.MIN_DIM_HBEAM + 10 * GEO.EPS_SMALL then
|
if TailCutType.bBigSectionCut and BD.C_SIMM then
|
||||||
-- qui arrivano sezioni molto grandi su macchine tipo PF con materiale da asportare inferiore allo spessore lama
|
-- qui arrivano sezioni molto grandi su macchine tipo PF con materiale da asportare inferiore allo spessore lama
|
||||||
local dSawRad = Cutting1Data.dSawDiam / 2
|
local dSawRad = Cutting1Data.dSawDiam / 2
|
||||||
dCutExtra = - ( b3Raw:getDimY() - dSawRad)
|
dCutExtra = - ( b3Raw:getDimY() - dSawRad)
|
||||||
@@ -573,15 +573,7 @@ function ProcessSplit.Make( Proc, nPhase, nRawId, nPartId, nOrd, sDownOrSideOrSt
|
|||||||
if not bOkc then return bOkc, sErrC end
|
if not bOkc then return bOkc, sErrC end
|
||||||
end
|
end
|
||||||
-- recupero la lavorazione
|
-- recupero la lavorazione
|
||||||
-- TODO questa parte andrà cambiata quando si gestiranno i volumi liberi in cui girare da mlse
|
local sCutting = ML.FindCutting( 'TailSide')
|
||||||
local dMinWidthForBigBlade = 300
|
|
||||||
local dMaxHeightForBigBlade = 300
|
|
||||||
local sCutting
|
|
||||||
if b3Raw:getDimY() > dMinWidthForBigBlade and b3Raw:getDimZ() < dMaxHeightForBigBlade then
|
|
||||||
sCutting = ML.FindCutting( 'TailSide', nil, nil, nil, 'Longest')
|
|
||||||
else
|
|
||||||
sCutting = ML.FindCutting( 'TailSide')
|
|
||||||
end
|
|
||||||
if not sCutting then
|
if not sCutting then
|
||||||
local sErr = 'Error on process ' .. tostring( Proc.Id) .. ' cutting not found in library'
|
local sErr = 'Error on process ' .. tostring( Proc.Id) .. ' cutting not found in library'
|
||||||
EgtOutLog( sErr)
|
EgtOutLog( sErr)
|
||||||
@@ -631,11 +623,10 @@ function ProcessSplit.Make( Proc, nPhase, nRawId, nPartId, nOrd, sDownOrSideOrSt
|
|||||||
-- caratteristiche taglio
|
-- caratteristiche taglio
|
||||||
local dDimYRef = EgtIf( b3Raw:getDimZ() < BD.MIN_DIM_HBEAM + 10 * GEO.EPS_SMALL, dSawMaxDepth, abs( BD.MAX_DIM_HTCUT_HBEAM))
|
local dDimYRef = EgtIf( b3Raw:getDimZ() < BD.MIN_DIM_HBEAM + 10 * GEO.EPS_SMALL, dSawMaxDepth, abs( BD.MAX_DIM_HTCUT_HBEAM))
|
||||||
local bBigSectionCut = ( b3Raw:getDimY() > 2 * dDimYRef - BD.CUT_EXTRA_MIN + 10 * GEO.EPS_SMALL) and
|
local bBigSectionCut = ( b3Raw:getDimY() > 2 * dDimYRef - BD.CUT_EXTRA_MIN + 10 * GEO.EPS_SMALL) and
|
||||||
( b3Raw:getDimZ() > EgtIf( BD.TURN, 2 * dMaxVertDepth, dMaxVertDepth + dSawMaxDepth2) - 2 * BD.CUT_EXTRA + 10 * GEO.EPS_SMALL)
|
( b3Raw:getDimZ() > EgtIf( BD.TURN, 2 * dMaxVertDepth, dMaxVertDepth + dSawMaxDepth2) - 2 * BD.CUT_EXTRA_MIN + 10 * GEO.EPS_SMALL)
|
||||||
local bHorizCut = ( ( b3Raw:getDimY() > b3Raw:getDimZ() + 10 * GEO.EPS_SMALL or BD.TURN) and ( b3Raw:getDimZ() < dMaxVertDepth - BD.CUT_EXTRA))
|
local bHorizCut = ( ( b3Raw:getDimY() > b3Raw:getDimZ() + 10 * GEO.EPS_SMALL or BD.TURN) and ( b3Raw:getDimZ() < dMaxVertDepth - BD.CUT_EXTRA))
|
||||||
local bDoubleHorizCut = ( ( BD.DOWN_HEAD or BD.TURN) and not bHorizCut and b3Raw:getDimY() > 2 * dDimYRef - BD.CUT_EXTRA_MIN + 10 * GEO.EPS_SMALL)
|
local bDoubleHorizCut = ( ( BD.DOWN_HEAD or BD.TURN) and not bHorizCut and b3Raw:getDimY() > 2 * dDimYRef - BD.CUT_EXTRA_MIN + 10 * GEO.EPS_SMALL)
|
||||||
local bDoubleCut = ( not bHorizCut and not bDoubleHorizCut and b3Raw:getDimY() > dDimYRef - BD.CUT_EXTRA + 10 * GEO.EPS_SMALL) and
|
local bDoubleCut = ( not bHorizCut and not bDoubleHorizCut and b3Raw:getDimY() > dDimYRef - BD.CUT_EXTRA + 10 * GEO.EPS_SMALL)
|
||||||
( b3Raw:getDimY() < 2 * dDimYRef - BD.CUT_EXTRA_MIN + 10 * GEO.EPS_SMALL)
|
|
||||||
-- dati geometrici del taglio
|
-- dati geometrici del taglio
|
||||||
local ptC, vtN = EgtSurfTmFacetCenter( Proc.Id, 0, GDB_ID.ROOT)
|
local ptC, vtN = EgtSurfTmFacetCenter( Proc.Id, 0, GDB_ID.ROOT)
|
||||||
-- separazione solo se esiste grezzo successivo con pezzi o scaricabile
|
-- separazione solo se esiste grezzo successivo con pezzi o scaricabile
|
||||||
@@ -661,10 +652,7 @@ function ProcessSplit.Make( Proc, nPhase, nRawId, nPartId, nOrd, sDownOrSideOrSt
|
|||||||
-- determino la necessità di tagli aggiuntivi
|
-- determino la necessità di tagli aggiuntivi
|
||||||
local dMinTailScrapForAdditionalCuts = 10.123
|
local dMinTailScrapForAdditionalCuts = 10.123
|
||||||
local bNeedVerticalAddedCuts = not bSplit and ( Proc.Face[1].WidthTrimmed > BD.MAX_LEN_DICE) and ( dLenEndRaw > dMinTailScrapForAdditionalCuts - 10 * GEO.EPS_SMALL)
|
local bNeedVerticalAddedCuts = not bSplit and ( Proc.Face[1].WidthTrimmed > BD.MAX_LEN_DICE) and ( dLenEndRaw > dMinTailScrapForAdditionalCuts - 10 * GEO.EPS_SMALL)
|
||||||
local bNeedHorizontalAddedCuts = not bSplit and not bBigSectionCut and
|
local bNeedHorizontalAddedCuts = not bSplit and ( Proc.Face[1].HeightTrimmed > ( BD.MIN_HEIGHT_ADDED_CUTS or BD.MAX_LEN_DICE)) and not bBigSectionCut and ( dLenEndRaw > dMinTailScrapForAdditionalCuts - 10 * GEO.EPS_SMALL)
|
||||||
( Proc.Face[1].HeightTrimmed > ( BD.MIN_HEIGHT_ADDED_CUTS or BD.MAX_LEN_DICE)) and
|
|
||||||
( dLenEndRaw > dMinTailScrapForAdditionalCuts - 10 * GEO.EPS_SMALL) and
|
|
||||||
dOffsL < BD.MAX_DIM_DICE
|
|
||||||
-- dati lavorazioni sopra e sotto
|
-- dati lavorazioni sopra e sotto
|
||||||
local Cutting1Data = { sCutting = sCutting, dSawDiam = dSawDiam, dMaxDepth = dSawMaxDepth, dSawThick = dSawThick, dMaxVertDepth = dMaxVertDepth}
|
local Cutting1Data = { sCutting = sCutting, dSawDiam = dSawDiam, dMaxDepth = dSawMaxDepth, dSawThick = dSawThick, dMaxVertDepth = dMaxVertDepth}
|
||||||
local Cutting2Data = { sCutting = sCutting2, dSawDiam = dSawDiam2, dMaxDepth = dSawMaxDepth2, dSawThick = dSawThick2}
|
local Cutting2Data = { sCutting = sCutting2, dSawDiam = dSawDiam2, dMaxDepth = dSawMaxDepth2, dSawThick = dSawThick2}
|
||||||
|
|||||||
@@ -132,12 +132,7 @@ local function MakePocket( Proc, nPartId, ptPs, vtN, nFaceRef, nDiffWidth, sMchF
|
|||||||
-- calcolo il diametro utensile
|
-- calcolo il diametro utensile
|
||||||
local dDiamTool
|
local dDiamTool
|
||||||
if nUseRoughTool == 1 then
|
if nUseRoughTool == 1 then
|
||||||
-- se feature passante prendo utensile più grande possibile
|
dDiamTool = max( 80, min( tBHx[nFaceRef][1], tBHx[nFaceRef][2]))
|
||||||
if ( Proc.AffectedFaces.Top and Proc.AffectedFaces.Bottom) or ( Proc.AffectedFaces.Front and Proc.AffectedFaces.Back) then
|
|
||||||
dDiamTool = nil
|
|
||||||
else
|
|
||||||
dDiamTool = max( 80, min( tBHx[nFaceRef][1], tBHx[nFaceRef][2]))
|
|
||||||
end
|
|
||||||
else
|
else
|
||||||
-- se non uso truciolatore prendo il valore dalle dimensioni minime delle facce
|
-- se non uso truciolatore prendo il valore dalle dimensioni minime delle facce
|
||||||
dDiamTool = min( tBHx[nFaceRef][1], tBHx[nFaceRef][2])
|
dDiamTool = min( tBHx[nFaceRef][1], tBHx[nFaceRef][2])
|
||||||
@@ -288,8 +283,8 @@ local function MachineByMill( Proc, nPhase, nRawId, nPartId, b3Solid, ptC, vtN,
|
|||||||
-- setto a 0 eventuali offset
|
-- setto a 0 eventuali offset
|
||||||
EgtSetMachiningParam( MCH_MP.OFFSR, 0)
|
EgtSetMachiningParam( MCH_MP.OFFSR, 0)
|
||||||
-- applico gli allungamenti o accorciamenti considerando che la lavorazione è invertita
|
-- applico gli allungamenti o accorciamenti considerando che la lavorazione è invertita
|
||||||
EgtSetMachiningParam( MCH_MP.STARTADDLEN, EgtIf( bOpenStart, dTDiam / 2 + 10, - dTDiam / 2))
|
EgtSetMachiningParam( MCH_MP.STARTADDLEN, EgtIf( bOpenStart, dTDiam / 2, - dTDiam / 2))
|
||||||
EgtSetMachiningParam( MCH_MP.ENDADDLEN, EgtIf( bOpenEnd, dTDiam / 2 + 10, - dTDiam / 2))
|
EgtSetMachiningParam( MCH_MP.ENDADDLEN, EgtIf( bOpenEnd, dTDiam / 2, - dTDiam / 2))
|
||||||
-- attacchi e uscite lineari con parte tg nulla
|
-- attacchi e uscite lineari con parte tg nulla
|
||||||
EgtSetMachiningParam( MCH_MP.LEADINTYPE, MCH_MILL_LI.LINEAR)
|
EgtSetMachiningParam( MCH_MP.LEADINTYPE, MCH_MILL_LI.LINEAR)
|
||||||
EgtSetMachiningParam( MCH_MP.LITANG, 0)
|
EgtSetMachiningParam( MCH_MP.LITANG, 0)
|
||||||
|
|||||||
@@ -321,9 +321,9 @@ function ProcessTenon.Make( Proc, nPhase, nRawId, nPartId, dOvmHead)
|
|||||||
-- se contorno aperto, cambio parametri di attacco/uscita
|
-- se contorno aperto, cambio parametri di attacco/uscita
|
||||||
if not bClosed then
|
if not bClosed then
|
||||||
EgtSetMachiningParam( MCH_MP.LITANG, 0.7 * dMillDiam)
|
EgtSetMachiningParam( MCH_MP.LITANG, 0.7 * dMillDiam)
|
||||||
EgtSetMachiningParam( MCH_MP.LIPERP, 20)
|
EgtSetMachiningParam( MCH_MP.LIPERP, 0)
|
||||||
EgtSetMachiningParam( MCH_MP.LOTANG, 0.7 * dMillDiam)
|
EgtSetMachiningParam( MCH_MP.LOTANG, 0.7 * dMillDiam)
|
||||||
EgtSetMachiningParam( MCH_MP.LOPERP, 20)
|
EgtSetMachiningParam( MCH_MP.LOPERP, 0)
|
||||||
end
|
end
|
||||||
-- imposto posizione braccio porta testa
|
-- imposto posizione braccio porta testa
|
||||||
local nSCC = MCH_SCC.NONE
|
local nSCC = MCH_SCC.NONE
|
||||||
|
|||||||
@@ -1,89 +1,5 @@
|
|||||||
==== Beam Update Log ====
|
==== Beam Update Log ====
|
||||||
|
|
||||||
Versione 2.7f3 (19/06/2025)
|
|
||||||
- Modifx : in StepJointNotch corretta distanza attacco in/out
|
|
||||||
|
|
||||||
Versione 2.7f2 (18/06/2025)
|
|
||||||
- Modif : in LongDoubleCut aggiunto messaggio feature non completa se utensile non arriva sul fondo
|
|
||||||
- Modif : in StepJointNotch, se si forza truciolatore, si prende utensile più grande
|
|
||||||
- Fixed : in LapJoint, piccola correzione calcolo sovrapposizione trimesh per smuotatura
|
|
||||||
- Fixed : in LapJoint, per sovrapposizione in spezzatura, corretto caso tipo Tunnel
|
|
||||||
|
|
||||||
Versione 2.7f1 (03/06/2025)
|
|
||||||
- Modif : in tenone coda di rondine modificato angolo limite tenone per lavorazione in sottosquadro
|
|
||||||
- Modif : migliorie per lavorazioni su aggregato
|
|
||||||
|
|
||||||
Versione 2.7e2 (23/05/2025)
|
|
||||||
- Modif : in tagli di lama migliorie alla scelta del lato da lavorare
|
|
||||||
- Modif : in mortasa coda di rondine migliorati i percorsi
|
|
||||||
- Modif : in tenone coda di rondine migliorate le lavorazioni da sotto
|
|
||||||
- Fixed : in Scarf Joint correzione alla scelta faccia da lavorare
|
|
||||||
|
|
||||||
Versione 2.7e1 (05/05/2025)
|
|
||||||
- Fixed : in taglio di separazione si riduce percorso di taglio solo se il pezzo è effettivamente alto
|
|
||||||
- Fixed : in foratura corretto caso in cui non si sceglieva l'utensile più lungo disponibile
|
|
||||||
- Fixed : In BatchProcess (Ts7) corretta generazione in caso di progetto senza ricalcolo
|
|
||||||
- Modif : in LapJoint se tunnel verticale lavorato solo da sopra e l'utensile non arriva, si restituisce warning
|
|
||||||
|
|
||||||
Versione 2.7d3 (22/04/2025)
|
|
||||||
- Fixed : in LapJoint corretta gestione errata Q04
|
|
||||||
|
|
||||||
Versione 2.7d2 (17/04/2025)
|
|
||||||
- Added : in scanalatura aggiunta Q03 per forzare fresa
|
|
||||||
- Modif : in slot con lama + sega a catena abilitata lavorazione da sotto per macchine con testa sopra
|
|
||||||
- Modif : nei tagli modifche in caso di tagli di coda anticipati
|
|
||||||
- Modif : in lavorazioni tipo tacca ma 3 facce migliorata la scelta faccia
|
|
||||||
|
|
||||||
Versione 2.7d1 (04/04/2025)
|
|
||||||
- Fixed : in PreDrill piccola correzione
|
|
||||||
- Fixed : nei tagli varie correzioni
|
|
||||||
- Fixed : in HeadCut e Split corretto calcolo lunghezza extra di taglio
|
|
||||||
|
|
||||||
Versione 2.7c2 (24/03/2025)
|
|
||||||
- Fixed : in BatchProcess (Ts7) riabilitata modifica barra erroneamente rimossa
|
|
||||||
|
|
||||||
Versione 2.7c1 (17/03/2025)
|
|
||||||
- Modif : in HeadCut e Split, per decidere se fare doppio taglio verticale, si controlla anche il massimo possibile e non solo il minimo
|
|
||||||
- Modif : in LapJoint migliorato controllo per decidere se feature di coda
|
|
||||||
- Modif : nei tagli, se taglio rivolto verso il basso e non possibile tagliare di fianco, si fa in fase ribaltata
|
|
||||||
- Fixed : in BatchProcess (Ts7) corretta restituzione stato feature erroneamente segnalata verde
|
|
||||||
- Fixed : corretta restituzione stato feature lavorata in doppio
|
|
||||||
|
|
||||||
Versione 2.7b3 (03/03/2025)
|
|
||||||
- Modif : in forature passanti orizzontali fatte da un solo lato, si inverte il lato di lavoro in base all'utensile scelto
|
|
||||||
- Modif : in LapJoint in lavorazione tipo BH permessa U passante non parallela agli assi principali; attacchi migliorati
|
|
||||||
- Modif : in LapJoint le feature di coda con pezzo lungo vengono spostate sempre dopo separazione
|
|
||||||
- Fixed : in macchine tipo Turn piccoli miglioramenti ai tagli di lama
|
|
||||||
|
|
||||||
Versione 2.7b2 (05/02/2025)
|
|
||||||
- Modif : si consentono DrillPocket in doppio solo se foro non passante
|
|
||||||
|
|
||||||
Versione 2.7b1 (04/02/2025)
|
|
||||||
- Modif : in tagli di testa e coda l'utilizzo delle lame grandi (es: 1000 su 15003TMAX) è limitato ai pezzi più bassi di 300 mm e più larghi di 300 mm
|
|
||||||
|
|
||||||
Versione 2.7a2 (23/01/2025)
|
|
||||||
- Added : in RidgeLap aggiunta Q05 per usare la fresa tipo LapJoint
|
|
||||||
- Fixed : in BatchProcess (Ts7) piccola correzione
|
|
||||||
- Fixed : in ScarfJoint, in caso di taglio dal lato, aggiunta estensione oltre il bordo
|
|
||||||
|
|
||||||
Versione 2.7a1 (21/01/2025)
|
|
||||||
- Added : in FreeContour aggiunta Q09 per inversione ultima lavorazione
|
|
||||||
- Modif : in Cut, si taglia dal basso solo se il pezzo piccolo è già staccato dalla barra
|
|
||||||
- Modif : in BatchProcess (Ts7) aggiunta scrittura id progetto e produzione in Btm
|
|
||||||
|
|
||||||
Versione 2.6l2 (07/01/2025)
|
|
||||||
- Added : in LapJoint abiitata SideMillAsBlade anche da sotto e varie migliorie
|
|
||||||
- Modif : in LapJoint L030 aggiunto Q03=4 per lavorare con fresa evitando tasche aperte testa/coda
|
|
||||||
- Modif : in LapJoint modifiche per gestione fresa a disco su aggregato
|
|
||||||
- Modif : in fresature con lama o simili aggiunta la possibilità di invertire il senso di percorrenza calcolato in automatico
|
|
||||||
- Modif : migliorie all'ordinamento
|
|
||||||
- Fixed : in LapJoint la Q per forzare lavorazione di lato funziona solo se la feature è aperta davnti o dietro
|
|
||||||
|
|
||||||
Versione 2.6l1 (11/12/2024)
|
|
||||||
- Added : aggiunta gestione slot e tagli di lama con lame molto grandi
|
|
||||||
- Modif : in lama + motosega aggiunta gestione slot aperte con lato obliquo
|
|
||||||
- Modif : modificata retrazione per tenoni aperti
|
|
||||||
|
|
||||||
Versione 2.6k2 (28/11/2024)
|
Versione 2.6k2 (28/11/2024)
|
||||||
- Modif : nei tagli migliorati i casi in cui si inverte l'SCC per facilitare la caduta del legno
|
- Modif : nei tagli migliorati i casi in cui si inverte l'SCC per facilitare la caduta del legno
|
||||||
- Modif : nei tagli migliorato controllo rimozione del primo cubetto molto piccolo
|
- Modif : nei tagli migliorato controllo rimozione del primo cubetto molto piccolo
|
||||||
|
|||||||
+1
-1
@@ -2,5 +2,5 @@
|
|||||||
-- Gestione della versione di Beam
|
-- Gestione della versione di Beam
|
||||||
|
|
||||||
NAME = 'Beam'
|
NAME = 'Beam'
|
||||||
VERSION = '2.7f3'
|
VERSION = '2.6k2'
|
||||||
MIN_EXE = '2.6e5'
|
MIN_EXE = '2.6e5'
|
||||||
|
|||||||
Reference in New Issue
Block a user