Compare commits
24 Commits
Ticket#2897
...
develop
| Author | SHA1 | Date | |
|---|---|---|---|
| fd0a52ad6b | |||
| 3e2ae92adc | |||
| c746a11e45 | |||
| d337e4cc18 | |||
| 5fcaf823a0 | |||
| 6b76dd2f4f | |||
| cc7f5abf40 | |||
| 389e722f7c | |||
| 946f5e8bf6 | |||
| a5cd84172e | |||
| 895740feff | |||
| 7e243bb9ea | |||
| ca21098226 | |||
| 32052e3016 | |||
| 4138f89f69 | |||
| 66013f5e07 | |||
| a9ec6744e3 | |||
| 5c82ab27c8 | |||
| 723f1a0d10 | |||
| 6c18d3fa95 | |||
| e910d6e6ba | |||
| 1f3906ab35 | |||
| 183a4a564a | |||
| be4575e984 |
@@ -1991,6 +1991,9 @@ local function VerifyDrillMirrored( Proc, vProc, b3Raw)
|
|||||||
end
|
end
|
||||||
local dToolDoubleDiam = EgtTdbGetCurrToolParam( MCH_TP.DIAM, 'd')
|
local dToolDoubleDiam = EgtTdbGetCurrToolParam( MCH_TP.DIAM, 'd')
|
||||||
local dToolDoubleMaxDepth = EgtTdbGetCurrToolParam( MCH_TP.MAXMAT)
|
local dToolDoubleMaxDepth = EgtTdbGetCurrToolParam( MCH_TP.MAXMAT)
|
||||||
|
if ( sType == 'Pocket_AT' or sType == 'Pocket') then
|
||||||
|
dToolDoubleMaxDepth = EgtTdbGetCurrToolMaxDepth()
|
||||||
|
end
|
||||||
dMachiningDepth = min( dMachiningDepth, dToolDoubleMaxDepth)
|
dMachiningDepth = min( dMachiningDepth, dToolDoubleMaxDepth)
|
||||||
-- recupero la lunghezza della parte inclinata della punta
|
-- recupero la lunghezza della parte inclinata della punta
|
||||||
local dToolDoubleTipLength = EgtTdbGetCurrToolParam( MCH_TP.TOTLEN) - EgtTdbGetCurrToolParam( MCH_TP.LEN)
|
local dToolDoubleTipLength = EgtTdbGetCurrToolParam( MCH_TP.TOTLEN) - EgtTdbGetCurrToolParam( MCH_TP.LEN)
|
||||||
|
|||||||
@@ -883,6 +883,25 @@ function BeamLib.GetBlockedAxis( sMachining, sBlockedAxis, b3Raw, vtTool, vtOut)
|
|||||||
return ''
|
return ''
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
function BeamLib.GetAuxDir( sMachining, sBlockedAxis, b3Raw, vtTool, vtOut)
|
||||||
|
-- informazioni sull'utensile della lavorazione
|
||||||
|
local nToolType, sHead
|
||||||
|
if EgtMdbSetCurrMachining( sMachining) then
|
||||||
|
local sTuuid = EgtMdbGetCurrMachiningParam( MCH_MP.TUUID)
|
||||||
|
if EgtTdbSetCurrTool( EgtTdbGetToolFromUUID( sTuuid) or '') then
|
||||||
|
nToolType = EgtTdbGetCurrToolParam( MCH_TP.TYPE)
|
||||||
|
sHead = EgtTdbGetCurrToolParam( MCH_TP.HEAD)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
-- se presente funzione specifica nella macchina, la richiamo
|
||||||
|
if BD.GetAuxDir then
|
||||||
|
return BD.GetAuxDir( sHead, nToolType, sBlockedAxis, b3Raw, vtTool, vtOut)
|
||||||
|
end
|
||||||
|
-- niente
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
-- Trova l'Ind (0 based) della faccia meglio orientata come l'asse vtAx. Restituisce anche vtN e ptC della faccia stessa. La faccia di indice (0 based) fctExclude non viene considerata nella ricerca.
|
-- Trova l'Ind (0 based) della faccia meglio orientata come l'asse vtAx. Restituisce anche vtN e ptC della faccia stessa. La faccia di indice (0 based) fctExclude non viene considerata nella ricerca.
|
||||||
function BeamLib.FindFaceBestOrientedAsAxis( Proc, vtAx, fctExclude)
|
function BeamLib.FindFaceBestOrientedAsAxis( Proc, vtAx, fctExclude)
|
||||||
@@ -1158,6 +1177,31 @@ function BeamLib.Is3EdgesApprox( Proc, nFacet, nAddGrpId)
|
|||||||
return bResult
|
return bResult
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-------------------------------------------------------------------------------------------------------------
|
||||||
|
function BeamLib.IsPointOnBoxLimits( ptPoint, b3Solid)
|
||||||
|
local dTol = 500 * GEO.EPS_SMALL
|
||||||
|
|
||||||
|
local dMinX = b3Solid:getMin():getX()
|
||||||
|
local dMinY = b3Solid:getMin():getY()
|
||||||
|
local dMinZ = b3Solid:getMin():getZ()
|
||||||
|
|
||||||
|
local dMaxX = b3Solid:getMax():getX()
|
||||||
|
local dMaxY = b3Solid:getMax():getY()
|
||||||
|
local dMaxZ = b3Solid:getMax():getZ()
|
||||||
|
|
||||||
|
-- Check di ogni piano limite
|
||||||
|
if abs( ptPoint:getX() - dMinX) < dTol then return true, "Left" end
|
||||||
|
if abs( ptPoint:getX() - dMaxX) < dTol then return true, "Right" end
|
||||||
|
|
||||||
|
if abs( ptPoint:getY() - dMinY) < dTol then return true, "Front" end
|
||||||
|
if abs( ptPoint:getY() - dMaxY) < dTol then return true, "Back" end
|
||||||
|
|
||||||
|
if abs( ptPoint:getZ() - dMinZ) < dTol then return true, "Bottom" end
|
||||||
|
if abs( ptPoint:getZ() - dMaxZ) < dTol then return true, "Top" end
|
||||||
|
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
-------------------------------------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------------------------------------
|
||||||
-- restituisce le facce della parte interessate dalla feature Proc
|
-- restituisce le facce della parte interessate dalla feature Proc
|
||||||
function BeamLib.GetProcessAffectedFaces( Proc)
|
function BeamLib.GetProcessAffectedFaces( Proc)
|
||||||
|
|||||||
@@ -170,6 +170,12 @@ function MakeParallelOne( nSurfId, nFacet, sCutting, dSawDiam, nFaceUse, dVzLimD
|
|||||||
end
|
end
|
||||||
local vtOut = EgtIf( vtN:getX() > 0, X_AX(), -X_AX())
|
local vtOut = EgtIf( vtN:getX() > 0, X_AX(), -X_AX())
|
||||||
EgtSetMachiningParam( MCH_MP.BLOCKEDAXIS, BL.GetBlockedAxis( sCutting, 'perpendicular', b3Raw, vtTool, vtOut))
|
EgtSetMachiningParam( MCH_MP.BLOCKEDAXIS, BL.GetBlockedAxis( sCutting, 'perpendicular', b3Raw, vtTool, vtOut))
|
||||||
|
local sAuxDir, sInitAngs = BL.GetAuxDir( sCutting, 'perpendicular', b3Raw, vtTool, vtOut)
|
||||||
|
if sAuxDir then
|
||||||
|
sNotes = EgtSetValInNotes( sNotes, 'VtAuxDir', sAuxDir)
|
||||||
|
EgtSetMachiningParam( MCH_MP.INITANGS, sInitAngs)
|
||||||
|
EgtSetMachiningParam( MCH_MP.SCC, MCH_SCC.STD)
|
||||||
|
end
|
||||||
-- eventuali note
|
-- eventuali note
|
||||||
if ( sLeadInOutType == 'PerpendicularOutraw') then
|
if ( sLeadInOutType == 'PerpendicularOutraw') then
|
||||||
sNotes = EgtSetValInNotes( sNotes, 'OutRaw', 3)
|
sNotes = EgtSetValInNotes( sNotes, 'OutRaw', 3)
|
||||||
@@ -631,6 +637,12 @@ function FacesBySaw.MakeOne( nSurfId, nFacet, sCutting, dSawDiam, Par5, dVzLimDw
|
|||||||
-- 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))
|
||||||
|
local sAuxDir, sInitAngs = BL.GetAuxDir( sCutting, sBlockedAxis, b3Raw, vtN, vtOrthO)
|
||||||
|
if sAuxDir then
|
||||||
|
sNotes = EgtSetValInNotes( sNotes, 'VtAuxDir', sAuxDir)
|
||||||
|
EgtSetMachiningParam( MCH_MP.INITANGS, sInitAngs)
|
||||||
|
EgtSetMachiningParam( MCH_MP.SCC, MCH_SCC.STD)
|
||||||
|
end
|
||||||
-- eventuali note
|
-- eventuali note
|
||||||
if ( sLeadInOutType == 'PerpendicularOutraw') then
|
if ( sLeadInOutType == 'PerpendicularOutraw') then
|
||||||
sNotes = EgtSetValInNotes( sNotes, 'OutRaw', 3)
|
sNotes = EgtSetValInNotes( sNotes, 'OutRaw', 3)
|
||||||
|
|||||||
@@ -613,6 +613,7 @@ function ProcessDrill.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
local dDepthOri = dDepth
|
||||||
-- se foro da saltare per eccessiva inclinazione
|
-- se foro da saltare per eccessiva inclinazione
|
||||||
if not bTryDrill then
|
if not bTryDrill then
|
||||||
sMyWarn = 'Warning in drill : too slant hole'
|
sMyWarn = 'Warning in drill : too slant hole'
|
||||||
@@ -654,6 +655,9 @@ function ProcessDrill.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH)
|
|||||||
local dReduceDepth = MIRROR_POCKETS_MIN_DISTANCE / 2 + 10
|
local dReduceDepth = MIRROR_POCKETS_MIN_DISTANCE / 2 + 10
|
||||||
dLastStepDepth = dDepth + dReduceDepth
|
dLastStepDepth = dDepth + dReduceDepth
|
||||||
dDepth = dDepth - dReduceDepth
|
dDepth = dDepth - dReduceDepth
|
||||||
|
if ( dLastStepDepth > dMaxDepth + 10 * GEO.EPS_SMALL) and ( dMaxDepth <= ( dLen / 2) - dReduceDepth) and ( dDepthOri ~= dDepth) then
|
||||||
|
dDepth = dMaxDepth
|
||||||
|
end
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
sUserNotes = EgtSetValInNotes( sUserNotes, 'LastStep', MIRROR_DRILLINGS_MIN_DISTANCE / 2 + 15)
|
sUserNotes = EgtSetValInNotes( sUserNotes, 'LastStep', MIRROR_DRILLINGS_MIN_DISTANCE / 2 + 15)
|
||||||
@@ -718,12 +722,12 @@ function ProcessDrill.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH)
|
|||||||
else
|
else
|
||||||
-- se DrillPocket passante in doppio si fa lavorazione aggiuntiva dell'ultimo step
|
-- se DrillPocket passante in doppio si fa lavorazione aggiuntiva dell'ultimo step
|
||||||
if Proc.Double and Proc.Double > 0 and ( sType == 'Pocket_AT' or sType == 'Pocket') and bOpen then
|
if Proc.Double and Proc.Double > 0 and ( sType == 'Pocket_AT' or sType == 'Pocket') and bOpen then
|
||||||
|
if dLastStepDepth > dMaxDepth + 10 * GEO.EPS_SMALL then
|
||||||
|
sMyWarn = 'Warning in drill pocket last step: depth (' .. EgtNumToString( dLastStepDepth, 1) .. ') bigger than max tool depth (' .. EgtNumToString( dMaxDepth, 1) .. ')'
|
||||||
|
return false, sMyWarn
|
||||||
|
end
|
||||||
local idMachiningLastStep = EgtCopyMachining( EgtIf( EgtStartsWith( sType, 'Predrill'), 'Predrill_', 'Drill_') .. ( EgtGetName( Proc.Id) or tostring( Proc.Id)), sName)
|
local idMachiningLastStep = EgtCopyMachining( EgtIf( EgtStartsWith( sType, 'Predrill'), 'Predrill_', 'Drill_') .. ( EgtGetName( Proc.Id) or tostring( Proc.Id)), sName)
|
||||||
EgtSetCurrMachining( idMachiningLastStep)
|
EgtSetCurrMachining( idMachiningLastStep)
|
||||||
if dLastStepDepth > dMaxDepth + 10 * GEO.EPS_SMALL then
|
|
||||||
sMyWarn = 'Warning in drill pocket last step: depth (' .. EgtNumToString( dLastStepDepth, 1) .. ') bigger than max tool depth (' .. EgtNumToString( dMaxDepth, 1) .. ')'
|
|
||||||
dLastStepDepth = dMaxDepth
|
|
||||||
end
|
|
||||||
local dMaxElevLastStep = dLastStepDepth - dDepth
|
local dMaxElevLastStep = dLastStepDepth - dDepth
|
||||||
sUserNotes = EgtSetValInNotes( sUserNotes, 'MaxElev', EgtNumToString( dMaxElevLastStep, 1))
|
sUserNotes = EgtSetValInNotes( sUserNotes, 'MaxElev', EgtNumToString( dMaxElevLastStep, 1))
|
||||||
EgtSetMachiningParam( MCH_MP.DEPTH, dLastStepDepth)
|
EgtSetMachiningParam( MCH_MP.DEPTH, dLastStepDepth)
|
||||||
|
|||||||
@@ -136,9 +136,11 @@ local function CalcPathAtHeight( nProcId, AuxId, nAddGrpId, dHeight, dSideAng, b
|
|||||||
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
|
-- per ogni curva creata, eseguo traslazione e offset per portarla sul top
|
||||||
local vtMove = EgtCurveExtrusion( AuxId, GDB_RT.GLOB) * ( dHeight - 10 * GEO.EPS_SMALL)
|
local vtMove = EgtCurveExtrusion( AuxId, GDB_RT.GLOB) * ( dHeight - 10 * GEO.EPS_SMALL)
|
||||||
EgtMove( NewAuxId, vtMove, GDB_RT.GLOB)
|
for i = 1, nCount do
|
||||||
|
EgtMove( NewAuxId + i - 1, vtMove, GDB_RT.GLOB)
|
||||||
|
end
|
||||||
-- 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
|
||||||
@@ -147,7 +149,7 @@ local function CalcPathAtHeight( nProcId, AuxId, nAddGrpId, dHeight, dSideAng, b
|
|||||||
for i = 2, nCount do
|
for i = 2, nCount do
|
||||||
local CrvId = NewAuxId + i - 1
|
local CrvId = NewAuxId + i - 1
|
||||||
local ptStart = EgtSP( CrvId)
|
local ptStart = EgtSP( CrvId)
|
||||||
EgtAddCurveCompoLine( NewAuxId, ptStart)
|
EgtAddCurveCompoLine( NewAuxId, ptStart)
|
||||||
EgtAddCurveCompoCurve( NewAuxId, CrvId)
|
EgtAddCurveCompoCurve( NewAuxId, CrvId)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -227,9 +229,10 @@ function ProcessDtMortise.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH)
|
|||||||
end
|
end
|
||||||
local b3DtMrt = EgtGetBBoxRef( Proc.Id, GDB_BB.STANDARD, rfDtMrt)
|
local b3DtMrt = EgtGetBBoxRef( Proc.Id, GDB_BB.STANDARD, rfDtMrt)
|
||||||
local dAltMort = b3DtMrt:getDimZ()
|
local dAltMort = b3DtMrt:getDimZ()
|
||||||
-- verifico se di tipo pocket
|
-- verifico se di tipo pocket o se antischeggia disabilitato
|
||||||
local bPocket = ( EgtGetInfo( Proc.Id, 'P05', 'i') == 1)
|
local bPocket = ( EgtGetInfo( Proc.Id, 'P05', 'i') == 1)
|
||||||
if bPocket then bMakeAntiSplitPath = false end
|
local bDisableAntiSplint = ( EgtGetInfo( Proc.Id, 'Q01', 'i') or 0) == 1
|
||||||
|
if bPocket or bDisableAntiSplint then bMakeAntiSplitPath = false end
|
||||||
-- verifico se frontale
|
-- verifico se frontale
|
||||||
local bFront = ( Proc.Prc == 56)
|
local bFront = ( Proc.Prc == 56)
|
||||||
-- se mortasa di fronte, eseguo il taglio della faccia
|
-- se mortasa di fronte, eseguo il taglio della faccia
|
||||||
|
|||||||
+144
-17
@@ -1066,6 +1066,12 @@ local function MakeOneFaceByMill( Proc, nPhase, nRawId, nPartId)
|
|||||||
local _, sErr = EgtGetLastMachMgrError()
|
local _, sErr = EgtGetLastMachMgrError()
|
||||||
EgtSetOperationMode( nMchFId, false)
|
EgtSetOperationMode( nMchFId, false)
|
||||||
return false, sErr
|
return false, sErr
|
||||||
|
else
|
||||||
|
local _, sWarn = EgtGetMachMgrWarning( 0)
|
||||||
|
if EgtIsMachiningEmpty() then
|
||||||
|
EgtSetOperationMode( nMchFId, false)
|
||||||
|
return false, sWarn
|
||||||
|
end
|
||||||
end
|
end
|
||||||
-- eventuale segnalazione ingombro di testa o coda
|
-- eventuale segnalazione ingombro di testa o coda
|
||||||
UpdateEncumbrance( Proc, nRawId, b3Raw, b3Solid)
|
UpdateEncumbrance( Proc, nRawId, b3Raw, b3Solid)
|
||||||
@@ -1203,6 +1209,12 @@ local function MakeTwoFacesByMill( Proc, nPhase, nRawId, nPartId, bDownHead)
|
|||||||
local _, sErr = EgtGetLastMachMgrError()
|
local _, sErr = EgtGetLastMachMgrError()
|
||||||
EgtSetOperationMode( nMchFId, false)
|
EgtSetOperationMode( nMchFId, false)
|
||||||
return false, sErr
|
return false, sErr
|
||||||
|
else
|
||||||
|
local _, sWarn = EgtGetMachMgrWarning( 0)
|
||||||
|
if EgtIsMachiningEmpty() then
|
||||||
|
EgtSetOperationMode( nMchFId, false)
|
||||||
|
return false, sWarn
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -1238,6 +1250,12 @@ local function MakeTwoFacesByMill( Proc, nPhase, nRawId, nPartId, bDownHead)
|
|||||||
local _, sErr = EgtGetLastMachMgrError()
|
local _, sErr = EgtGetLastMachMgrError()
|
||||||
EgtSetOperationMode( nMchFId, false)
|
EgtSetOperationMode( nMchFId, false)
|
||||||
return false, sErr
|
return false, sErr
|
||||||
|
else
|
||||||
|
local _, sWarn = EgtGetMachMgrWarning( 0)
|
||||||
|
if EgtIsMachiningEmpty() then
|
||||||
|
EgtSetOperationMode( nMchFId, false)
|
||||||
|
return false, sWarn
|
||||||
|
end
|
||||||
end
|
end
|
||||||
-- eventuale segnalazione ingombro di testa o coda
|
-- eventuale segnalazione ingombro di testa o coda
|
||||||
UpdateEncumbrance( Proc, nRawId, b3Raw, b3Solid)
|
UpdateEncumbrance( Proc, nRawId, b3Raw, b3Solid)
|
||||||
@@ -1407,6 +1425,12 @@ local function MakeByMill( Proc, nPhase, nRawId, nPartId, nFacInd, rfFac, dH, dV
|
|||||||
_, sErr = EgtGetLastMachMgrError()
|
_, sErr = EgtGetLastMachMgrError()
|
||||||
EgtSetOperationMode( nMchFId, false)
|
EgtSetOperationMode( nMchFId, false)
|
||||||
return false, sErr
|
return false, sErr
|
||||||
|
else
|
||||||
|
local _, sWarn = EgtGetMachMgrWarning( 0)
|
||||||
|
if EgtIsMachiningEmpty() then
|
||||||
|
EgtSetOperationMode( nMchFId, false)
|
||||||
|
return false, sWarn
|
||||||
|
end
|
||||||
end
|
end
|
||||||
return true, '', dTDiam
|
return true, '', dTDiam
|
||||||
end
|
end
|
||||||
@@ -2977,6 +3001,12 @@ local function MakeChamfer( Proc, bIs3Faces, nAddGrpId, vtOrtho, b3Solid, nSurfI
|
|||||||
local _, sErr = EgtGetLastMachMgrError()
|
local _, sErr = EgtGetLastMachMgrError()
|
||||||
EgtSetOperationMode( nMchId, false)
|
EgtSetOperationMode( nMchId, false)
|
||||||
return -1, sErr
|
return -1, sErr
|
||||||
|
else
|
||||||
|
local _, sWarn = EgtGetMachMgrWarning( 0)
|
||||||
|
if EgtIsMachiningEmpty() then
|
||||||
|
EgtSetOperationMode( nMchId, false)
|
||||||
|
return false, sWarn
|
||||||
|
end
|
||||||
end
|
end
|
||||||
-- se non perpendicolare emetto un warning
|
-- se non perpendicolare emetto un warning
|
||||||
-- else
|
-- else
|
||||||
@@ -3130,6 +3160,12 @@ local function MakeByMillAsSaw( Proc, nPhase, nRawId, nPartId, nFacInd,
|
|||||||
local _, sErr = EgtGetLastMachMgrError()
|
local _, sErr = EgtGetLastMachMgrError()
|
||||||
EgtSetOperationMode( nMchId, false)
|
EgtSetOperationMode( nMchId, false)
|
||||||
return false, sErr
|
return false, sErr
|
||||||
|
else
|
||||||
|
local _, sWarn = EgtGetMachMgrWarning( 0)
|
||||||
|
if EgtIsMachiningEmpty() then
|
||||||
|
EgtSetOperationMode( nMchId, false)
|
||||||
|
return false, sWarn
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
-- in base all'elevazione calcolo l'impronta della lama
|
-- in base all'elevazione calcolo l'impronta della lama
|
||||||
@@ -3372,7 +3408,9 @@ local function MakeByChainOrSaw( Proc, nPhase, nRawId, nPartId, nFacInd,
|
|||||||
bGoFromHead = false
|
bGoFromHead = false
|
||||||
-- continuo di testa se fessura con tre facce o non è tunnel
|
-- continuo di testa se fessura con tre facce o non è tunnel
|
||||||
else
|
else
|
||||||
bGoFromHead = (( bIs3Faces and dMaxElev) or not bOrthoFaces)
|
bGoFromHead = (( bIs3Faces and ( dMaxElev
|
||||||
|
or ( Proc.Topology == 'Groove' and Proc.IsThrough and (Proc.AffectedFaces.Left or Proc.AffectedFaces.Right) and not Proc.IsParallel)))
|
||||||
|
or not bOrthoFaces)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
-- se continuo a lavorare di testa
|
-- se continuo a lavorare di testa
|
||||||
@@ -3437,17 +3475,35 @@ local function MakeByChainOrSaw( Proc, nPhase, nRawId, nPartId, nFacInd,
|
|||||||
-- imposto offset radiale
|
-- imposto offset radiale
|
||||||
local dOffs = ( i - 1) * dStep
|
local dOffs = ( i - 1) * dStep
|
||||||
EgtSetMachiningParam( MCH_MP.OFFSR, dOffs)
|
EgtSetMachiningParam( MCH_MP.OFFSR, dOffs)
|
||||||
|
local bElevAdj
|
||||||
|
local dToolEntryAngle, _, _, dTanToolEntryAngle = GetToolEntryAngle( Proc, rfFac:getVersZ())
|
||||||
-- se necessario, avverto limitazione dell'affondamento
|
-- se necessario, avverto limitazione dell'affondamento
|
||||||
if dElev > dMaxDepth + 10 * GEO.EPS_SMALL then
|
if dElev > dMaxDepth + 10 * GEO.EPS_SMALL then
|
||||||
EgtSetMachiningParam( MCH_MP.DEPTH, dMaxDepth)
|
if Proc.Fct == 3 and Proc.Topology == 'Groove' and Proc.IsThrough and (Proc.AffectedFaces.Left or Proc.AffectedFaces.Right) and not Proc.IsParallel then
|
||||||
sWarn = 'Warning in LapJoint : elevation (' .. EgtNumToString( dElev, 1) .. ') bigger than max tool depth (' .. EgtNumToString( dMaxDepth, 1) .. ')'
|
local Edges = BL.GetEdgesInfo( Proc, Proc.Face[nFacAdj+1])
|
||||||
EgtOutLog( sWarn)
|
local dWorkEdgeWidth
|
||||||
|
for i = 1, #Edges do
|
||||||
|
if Edges[i].AdjacentFaceId == nFacInd then
|
||||||
|
dWorkEdgeWidth = Edges[i].Length
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
local dDeltaDepth = dWorkEdgeWidth * cos( dToolEntryAngle)
|
||||||
|
bElevAdj = true
|
||||||
|
EgtSetMachiningParam( MCH_MP.DEPTH, dMaxDepth - dDeltaDepth)
|
||||||
|
else
|
||||||
|
EgtSetMachiningParam( MCH_MP.DEPTH, dMaxDepth)
|
||||||
|
sWarn = 'Warning in LapJoint : elevation (' .. EgtNumToString( dElev, 1) .. ') bigger than max tool depth (' .. EgtNumToString( dMaxDepth, 1) .. ')'
|
||||||
|
EgtOutLog( sWarn)
|
||||||
|
end
|
||||||
|
|
||||||
--local dDepth = dMaxDepth - dElev
|
--local dDepth = dMaxDepth - dElev
|
||||||
--EgtSetMachiningParam( MCH_MP.DEPTH_STR, 'TH '..EgtNumToString( dDepth, 1))
|
--EgtSetMachiningParam( MCH_MP.DEPTH_STR, 'TH '..EgtNumToString( dDepth, 1))
|
||||||
end
|
end
|
||||||
-- imposto massima elevazione
|
-- imposto massima elevazione
|
||||||
local sUserNotes = EgtGetMachiningParam( MCH_MP.USERNOTES) or ''
|
local sUserNotes = EgtGetMachiningParam( MCH_MP.USERNOTES) or ''
|
||||||
sUserNotes = EgtSetValInNotes( sUserNotes, 'MaxElev', EgtNumToString( dElev, 2))
|
local dElevAdj = EgtIf( bElevAdj, dElev / sin( dToolEntryAngle), dElev)
|
||||||
|
sUserNotes = EgtSetValInNotes( sUserNotes, 'MaxElev', EgtNumToString( dElevAdj, 2))
|
||||||
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
|
||||||
@@ -3852,6 +3908,12 @@ local function MakePocket( Proc, nPartId, b3Solid, ptPs, tvtN, nFaceRef, sMchFin
|
|||||||
EgtSetOperationMode( nMchFId, false)
|
EgtSetOperationMode( nMchFId, false)
|
||||||
return false, sErr
|
return false, sErr
|
||||||
end
|
end
|
||||||
|
else
|
||||||
|
local _, sWarn = EgtGetMachMgrWarning( 0)
|
||||||
|
if EgtIsMachiningEmpty() then
|
||||||
|
EgtSetOperationMode( nMchFId, false)
|
||||||
|
return false, sWarn
|
||||||
|
end
|
||||||
end
|
end
|
||||||
-- se la lavorazione rovina il pezzo successivo emetto warning
|
-- se la lavorazione rovina il pezzo successivo emetto warning
|
||||||
if ( not Proc.Tail or Proc.AdvTail) and Proc.AffectedFaces.Left and dDistToNextPiece < dDiamTool / 2 then
|
if ( not Proc.Tail or Proc.AdvTail) and Proc.AffectedFaces.Left and dDistToNextPiece < dDiamTool / 2 then
|
||||||
@@ -3969,6 +4031,12 @@ local function MachineByMill( Proc, nPhase, nRawId, nPartId, b3Solid, tvtN, nBas
|
|||||||
local _, sErr = EgtGetLastMachMgrError()
|
local _, sErr = EgtGetLastMachMgrError()
|
||||||
EgtSetOperationMode( nMchId, false)
|
EgtSetOperationMode( nMchId, false)
|
||||||
return false, sErr
|
return false, sErr
|
||||||
|
else
|
||||||
|
local _, sWarn = EgtGetMachMgrWarning( 0)
|
||||||
|
if EgtIsMachiningEmpty() then
|
||||||
|
EgtSetOperationMode( nMchId, false)
|
||||||
|
return false, sWarn
|
||||||
|
end
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
return false, sWarn
|
return false, sWarn
|
||||||
@@ -4096,6 +4164,12 @@ local function MachineByMill( Proc, nPhase, nRawId, nPartId, b3Solid, tvtN, nBas
|
|||||||
local _, sErr = EgtGetLastMachMgrError()
|
local _, sErr = EgtGetLastMachMgrError()
|
||||||
EgtSetOperationMode( nMchFId, false)
|
EgtSetOperationMode( nMchFId, false)
|
||||||
return false, sErr
|
return false, sErr
|
||||||
|
else
|
||||||
|
local _, sWarn = EgtGetMachMgrWarning( 0)
|
||||||
|
if EgtIsMachiningEmpty() then
|
||||||
|
EgtSetOperationMode( nMchFId, false)
|
||||||
|
return false, sWarn
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -4539,6 +4613,12 @@ local function MakeByPockets( Proc, nPhase, nRawId, nPartId, nChamfer, dDepthCha
|
|||||||
EgtSetOperationMode( nMchFId, false)
|
EgtSetOperationMode( nMchFId, false)
|
||||||
return -1, sErr
|
return -1, sErr
|
||||||
end
|
end
|
||||||
|
else
|
||||||
|
local _, sWarn = EgtGetMachMgrWarning( 0)
|
||||||
|
if EgtIsMachiningEmpty() then
|
||||||
|
EgtSetOperationMode( nMchFId, false)
|
||||||
|
return false, sWarn
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
-- se non completo e U, cerco di lavorare anche la faccia di fondo (con il massimo affondamento possibile)
|
-- se non completo e U, cerco di lavorare anche la faccia di fondo (con il massimo affondamento possibile)
|
||||||
@@ -4610,6 +4690,12 @@ local function MakeByPockets( Proc, nPhase, nRawId, nPartId, nChamfer, dDepthCha
|
|||||||
EgtSetOperationMode( nMchFId, false)
|
EgtSetOperationMode( nMchFId, false)
|
||||||
return -1, sErr
|
return -1, sErr
|
||||||
end
|
end
|
||||||
|
else
|
||||||
|
local _, sWarn = EgtGetMachMgrWarning( 0)
|
||||||
|
if EgtIsMachiningEmpty() then
|
||||||
|
EgtSetOperationMode( nMchFId, false)
|
||||||
|
return false, sWarn
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -4722,6 +4808,12 @@ local function ManageAntiSplintBySaw( Proc, b3Raw, b3Solid, bIsU, vtN, nFacInd,
|
|||||||
local _, sErr = EgtGetLastMachMgrError()
|
local _, sErr = EgtGetLastMachMgrError()
|
||||||
EgtSetOperationMode( nIdMach, false)
|
EgtSetOperationMode( nIdMach, false)
|
||||||
return false, false, sErr
|
return false, false, sErr
|
||||||
|
else
|
||||||
|
local _, sWarn = EgtGetMachMgrWarning( 0)
|
||||||
|
if EgtIsMachiningEmpty() then
|
||||||
|
EgtSetOperationMode( nIdMach, false)
|
||||||
|
return false, sWarn
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -4731,7 +4823,7 @@ local function ManageAntiSplintBySaw( Proc, b3Raw, b3Solid, bIsU, vtN, nFacInd,
|
|||||||
end
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
local function MakePathsOnExtremPoints( nAddGrpId, nIdPath, pPaths, dTDiam)
|
local function MakePathsOnExtremePoints( nAddGrpId, nIdPath, pPaths, dTDiam, b3Solid)
|
||||||
|
|
||||||
local dLength = 2
|
local dLength = 2
|
||||||
if not nIdPath then return pPaths end
|
if not nIdPath then return pPaths end
|
||||||
@@ -4747,15 +4839,20 @@ local function MakePathsOnExtremPoints( nAddGrpId, nIdPath, pPaths, dTDiam)
|
|||||||
local vtIni = EgtSV( nIdPath, GDB_RT.GLOB)
|
local vtIni = EgtSV( nIdPath, GDB_RT.GLOB)
|
||||||
local vtEnd = EgtEV( nIdPath, GDB_RT.GLOB)
|
local vtEnd = EgtEV( nIdPath, GDB_RT.GLOB)
|
||||||
|
|
||||||
local ptIniP = ptIni
|
-- si costruisce il percorso solo per i punti sui bordi del grezzo
|
||||||
local ptEndP = ptIniP + (vtIni * dLength)
|
if BL.IsPointOnBoxLimits( ptIni, b3Solid) then
|
||||||
local nAuxId = EgtLine( nAddGrpId, ptIniP, ptEndP, GDB_RT.GLOB)
|
local ptIniP = ptIni
|
||||||
table.insert( pPaths, { nAuxId, 1, ptIniP})
|
local ptEndP = ptIniP + (vtIni * dLength)
|
||||||
|
local nAuxId = EgtLine( nAddGrpId, ptIniP, ptEndP, GDB_RT.GLOB)
|
||||||
|
table.insert( pPaths, { nAuxId, 1, ptIniP})
|
||||||
|
end
|
||||||
|
|
||||||
ptIniP = ptEnd
|
if BL.IsPointOnBoxLimits( ptEnd, b3Solid) then
|
||||||
ptEndP = ptEnd - ( vtEnd * dLength)
|
local ptIniP = ptEnd
|
||||||
nAuxId = EgtLine( nAddGrpId, ptIniP, ptEndP, GDB_RT.GLOB)
|
local ptEndP = ptEnd - ( vtEnd * dLength)
|
||||||
table.insert( pPaths, { nAuxId, 2, ptIniP})
|
local nAuxId = EgtLine( nAddGrpId, ptIniP, ptEndP, GDB_RT.GLOB)
|
||||||
|
table.insert( pPaths, { nAuxId, 2, ptIniP})
|
||||||
|
end
|
||||||
|
|
||||||
return pPaths
|
return pPaths
|
||||||
end
|
end
|
||||||
@@ -5009,7 +5106,7 @@ local function ManageAntiSplintByMill( Proc, nPhase, nRawId, nPartId, b3Raw,
|
|||||||
-- creo percorsi antisplint dagli estremi dei percorsi di contorno trovati
|
-- creo percorsi antisplint dagli estremi dei percorsi di contorno trovati
|
||||||
for i = 1, nNumId do
|
for i = 1, nNumId do
|
||||||
local nIdPath = nFirstId + i - 1
|
local nIdPath = nFirstId + i - 1
|
||||||
pPaths = MakePathsOnExtremPoints( nAddGrpId, nIdPath, pPaths, dTDiam)
|
pPaths = MakePathsOnExtremePoints( nAddGrpId, nIdPath, pPaths, dTDiam, b3Solid)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
-- alrimenti ho la faccia aggiunta
|
-- alrimenti ho la faccia aggiunta
|
||||||
@@ -5044,7 +5141,7 @@ local function ManageAntiSplintByMill( Proc, nPhase, nRawId, nPartId, b3Raw,
|
|||||||
-- se non ho un percorso chiuso estraggo i percorsi
|
-- se non ho un percorso chiuso estraggo i percorsi
|
||||||
if bOpenPath then
|
if bOpenPath then
|
||||||
-- creo percorsi antisplint dagli estremi dei percorsi di contorno trovati
|
-- creo percorsi antisplint dagli estremi dei percorsi di contorno trovati
|
||||||
pPaths = MakePathsOnExtremPoints( nAddGrpId, nFirstId, pPaths, dTDiam)
|
pPaths = MakePathsOnExtremePoints( nAddGrpId, nFirstId, pPaths, dTDiam, b3Solid)
|
||||||
end
|
end
|
||||||
EgtErase(nFirstId)
|
EgtErase(nFirstId)
|
||||||
end
|
end
|
||||||
@@ -7163,6 +7260,12 @@ local function MakeMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead, bSinglePa
|
|||||||
local _, sErr = EgtGetLastMachMgrError()
|
local _, sErr = EgtGetLastMachMgrError()
|
||||||
EgtSetOperationMode( nMchFId, false)
|
EgtSetOperationMode( nMchFId, false)
|
||||||
return false, sErr
|
return false, sErr
|
||||||
|
else
|
||||||
|
local _, sWarn = EgtGetMachMgrWarning( 0)
|
||||||
|
if EgtIsMachiningEmpty() then
|
||||||
|
EgtSetOperationMode( nMchFId, false)
|
||||||
|
return false, sWarn
|
||||||
|
end
|
||||||
end
|
end
|
||||||
-- se divisa in due metà
|
-- se divisa in due metà
|
||||||
if bDouble then
|
if bDouble then
|
||||||
@@ -7183,6 +7286,12 @@ local function MakeMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead, bSinglePa
|
|||||||
local _, sErr = EgtGetLastMachMgrError()
|
local _, sErr = EgtGetLastMachMgrError()
|
||||||
EgtSetOperationMode( nMchFNId, false)
|
EgtSetOperationMode( nMchFNId, false)
|
||||||
return false, sErr
|
return false, sErr
|
||||||
|
else
|
||||||
|
local _, sWarn = EgtGetMachMgrWarning( 0)
|
||||||
|
if EgtIsMachiningEmpty() then
|
||||||
|
EgtSetOperationMode( nMchFNId, false)
|
||||||
|
return false, sWarn
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -7263,6 +7372,12 @@ local function MakeMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead, bSinglePa
|
|||||||
local _, sErr = EgtGetLastMachMgrError()
|
local _, sErr = EgtGetLastMachMgrError()
|
||||||
EgtSetOperationMode( nMchFId, false)
|
EgtSetOperationMode( nMchFId, false)
|
||||||
return false, sErr
|
return false, sErr
|
||||||
|
else
|
||||||
|
local _, sWarn = EgtGetMachMgrWarning( 0)
|
||||||
|
if EgtIsMachiningEmpty() then
|
||||||
|
EgtSetOperationMode( nMchFId, false)
|
||||||
|
return false, sWarn
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- CASO SPECIALE 3 FACCE (se rimane esclusa molta sezione trasversale complessiva della feature, solo per feature 20)
|
-- CASO SPECIALE 3 FACCE (se rimane esclusa molta sezione trasversale complessiva della feature, solo per feature 20)
|
||||||
@@ -7378,6 +7493,12 @@ local function MakeMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead, bSinglePa
|
|||||||
EgtSetOperationMode( nMchFId, false)
|
EgtSetOperationMode( nMchFId, false)
|
||||||
return false, sErr
|
return false, sErr
|
||||||
end
|
end
|
||||||
|
else
|
||||||
|
local _, sWarn = EgtGetMachMgrWarning( 0)
|
||||||
|
if EgtIsMachiningEmpty() then
|
||||||
|
EgtSetOperationMode( nMchFId, false)
|
||||||
|
return false, sWarn
|
||||||
|
end
|
||||||
end
|
end
|
||||||
-- se abilitato dal parametro Q inserisco foro sullo spigolo
|
-- se abilitato dal parametro Q inserisco foro sullo spigolo
|
||||||
if EgtGetInfo( Proc.Id, Q_BORE_ON_CORNER, 'i') == 1 then
|
if EgtGetInfo( Proc.Id, Q_BORE_ON_CORNER, 'i') == 1 then
|
||||||
@@ -8559,6 +8680,12 @@ local function MakeStaircaseStep( Proc, nRawId, b3Raw, nPartId)
|
|||||||
local _, sErr = EgtGetLastMachMgrError()
|
local _, sErr = EgtGetLastMachMgrError()
|
||||||
EgtSetOperationMode( nMchFId, false)
|
EgtSetOperationMode( nMchFId, false)
|
||||||
return false, sErr
|
return false, sErr
|
||||||
|
else
|
||||||
|
local _, sWarn = EgtGetMachMgrWarning( 0)
|
||||||
|
if EgtIsMachiningEmpty() then
|
||||||
|
EgtSetOperationMode( nMchFId, false)
|
||||||
|
return false, sWarn
|
||||||
|
end
|
||||||
end
|
end
|
||||||
-- eventuale segnalazione ingombro di testa o coda
|
-- eventuale segnalazione ingombro di testa o coda
|
||||||
UpdateEncumbrance( Proc, nRawId, b3Raw, b3Solid)
|
UpdateEncumbrance( Proc, nRawId, b3Raw, b3Solid)
|
||||||
|
|||||||
+154
-34
@@ -140,6 +140,112 @@ local function MakeChamfer( Proc, nPhase, nRawId, nPartId, dOvmHead)
|
|||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
local function MakePocket( Proc, nPartId, ptPs, vtN, nFaceRef, nDiffWidth, sMchFind, nUseRoughTool, tBHx)
|
||||||
|
|
||||||
|
-- calcolo il elevazione dal punto medio
|
||||||
|
local dElev
|
||||||
|
local dLenIn, dLedOut = BL.GetPointDirDepth( nPartId, ptPs, vtN[nFaceRef])
|
||||||
|
if dLenIn > 0 then
|
||||||
|
dElev = dLenIn
|
||||||
|
elseif dLedOut then
|
||||||
|
dElev = dLedOut
|
||||||
|
end
|
||||||
|
local dCollSic = 2 * BD.COLL_SIC
|
||||||
|
local sTuuidMstr
|
||||||
|
-- calcolo il diametro utensile
|
||||||
|
local dDiamTool
|
||||||
|
if nUseRoughTool == 1 then
|
||||||
|
-- se feature passante prendo utensile più grande possibile
|
||||||
|
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
|
||||||
|
-- se non uso truciolatore prendo il valore dalle dimensioni minime delle facce
|
||||||
|
dDiamTool = min( tBHx[nFaceRef][1], tBHx[nFaceRef][2])
|
||||||
|
end
|
||||||
|
-- abilitazione lavorazione da sotto (testa da sotto e direzione normale sotto -30deg)
|
||||||
|
local bTopHead = ( BD.DOWN_HEAD and vtN[nFaceRef]:getZ() > -0.1)
|
||||||
|
local bDownHead = ( BD.DOWN_HEAD and vtN[nFaceRef]:getZ() < 0.1)
|
||||||
|
-- recupero la lavorazione
|
||||||
|
local sPocketing, _, _, bDownHead = ML.FindPocketing( sMchFind.. EgtIf( bDownHead, '_H2', ''), dDiamTool, dElev + dCollSic, nil, bTopHead, bDownHead)
|
||||||
|
if not sPocketing then
|
||||||
|
local sErr = 'Error : pocketing not found in library'
|
||||||
|
EgtOutLog( sErr)
|
||||||
|
return false, sErr
|
||||||
|
end
|
||||||
|
-- recupero il diametro dell'utensile
|
||||||
|
if EgtMdbSetCurrMachining( sPocketing) then
|
||||||
|
sTuuidMstr = EgtMdbGetCurrMachiningParam( MCH_MP.TUUID)
|
||||||
|
if EgtTdbSetCurrTool( EgtTdbGetToolFromUUID( sTuuidMstr) or '') then
|
||||||
|
dDiamTool = EgtTdbGetCurrToolParam( MCH_TP.DIAM) or dDiamTool
|
||||||
|
end
|
||||||
|
end
|
||||||
|
-- inserisco la lavorazione di svuotatura
|
||||||
|
local sName = 'Pock_' .. ( EgtGetName( Proc.Id) or tostring( Proc.Id)) .. 'F' .. tostring( nFaceRef - 1)
|
||||||
|
local nMchFId = EgtAddMachining( sName, sPocketing)
|
||||||
|
if not nMchFId then
|
||||||
|
local sErr = 'Error adding machining ' .. sName .. '-' .. sPocketing
|
||||||
|
EgtOutLog( sErr)
|
||||||
|
return false, sErr
|
||||||
|
end
|
||||||
|
-- aggiungo geometria
|
||||||
|
EgtSetMachiningGeometry( {{ Proc.Id, (nFaceRef-1)}})
|
||||||
|
-- imposto uso faccia
|
||||||
|
EgtSetMachiningParam( MCH_MP.FACEUSE, MCH_MILL_FU.ORTHO_CONT)
|
||||||
|
-- imposto posizione braccio porta testa
|
||||||
|
if vtN[nFaceRef]:getY() < GEO.EPS_SMALL then
|
||||||
|
EgtSetMachiningParam( MCH_MP.SCC, MCH_SCC.ADIR_YM)
|
||||||
|
else
|
||||||
|
EgtSetMachiningParam( MCH_MP.SCC, MCH_SCC.ADIR_YP)
|
||||||
|
end
|
||||||
|
-- La tasca ha sempre almeno un lato aperto, imposto opportuno attacco
|
||||||
|
EgtSetMachiningParam( MCH_MP.SUBTYPE, MCH_POCK_SUB.SPIRALIN)
|
||||||
|
-- imposto elevazione
|
||||||
|
local sUserNotes = EgtGetMachiningParam( MCH_MP.USERNOTES) or ''
|
||||||
|
sUserNotes = EgtSetValInNotes( sUserNotes, 'MaxElev', EgtNumToString( dElev, 1))
|
||||||
|
EgtSetMachiningParam( MCH_MP.USERNOTES, sUserNotes)
|
||||||
|
if not ML.ApplyMachining( true, false) then
|
||||||
|
-- provo ad allargare leggermente la tasca
|
||||||
|
EgtSetMachiningParam( MCH_MP.OFFSR, -0.1)
|
||||||
|
if not ML.ApplyMachining( true, false) then
|
||||||
|
local _, sErr = EgtGetLastMachMgrError()
|
||||||
|
EgtSetOperationMode( nMchFId, false)
|
||||||
|
return false, sErr
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return true, '', sTuuidMstr
|
||||||
|
end
|
||||||
|
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
local function MachineByMill( Proc, nPhase, nRawId, nPartId, b3Solid, ptC, vtN, nBigInd, nSmaInd, ptPs, tBHx, b3Raw, nDiffWidth, nUseRoughTool, dAng)
|
||||||
|
|
||||||
|
local sMchFind = 'Pocket'
|
||||||
|
-- se feature é larga come trave imposto openpocket
|
||||||
|
if nDiffWidth == 0 then
|
||||||
|
sMchFind = 'OpenPocket'
|
||||||
|
-- altrimenti se non è passante disabilito il truciolatore
|
||||||
|
else
|
||||||
|
nUseRoughTool = 0
|
||||||
|
end
|
||||||
|
-- applico la svuotatura
|
||||||
|
local bOk, sErr, sTuuidMstr = MakePocket( Proc, nPartId, ptPs, vtN, nBigInd, nDiffWidth, sMchFind, nUseRoughTool, tBHx)
|
||||||
|
if not bOk then
|
||||||
|
return bOk, sErr
|
||||||
|
end
|
||||||
|
-- se angolo tra le facce maggiore di 90, inserisco la contornatura o svuotatura del lato più corto
|
||||||
|
if dAng > -90 then
|
||||||
|
-- applico la svuotatura
|
||||||
|
local bOk, sErr = MakePocket( Proc, nPartId, ptPs, vtN, nSmaInd, nDiffWidth, sMchFind, nUseRoughTool, tBHx)
|
||||||
|
if not bOk then
|
||||||
|
return bOk, sErr
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
-- Applicazione della lavorazione al caso due facce
|
-- Applicazione della lavorazione al caso due facce
|
||||||
local function MakeTwoFaces( Proc, nPhase, nRawId, nPartId, dOvmHead)
|
local function MakeTwoFaces( Proc, nPhase, nRawId, nPartId, dOvmHead)
|
||||||
@@ -156,6 +262,7 @@ local function MakeTwoFaces( Proc, nPhase, nRawId, nPartId, dOvmHead)
|
|||||||
return false, sErr
|
return false, sErr
|
||||||
end
|
end
|
||||||
-- dati delle facce
|
-- dati delle facce
|
||||||
|
local tBHx = {}
|
||||||
local ptC = {}
|
local ptC = {}
|
||||||
local vtN = {}
|
local vtN = {}
|
||||||
ptC[1], vtN[1] = EgtSurfTmFacetCenter( Proc.Id, 0, GDB_ID.ROOT)
|
ptC[1], vtN[1] = EgtSurfTmFacetCenter( Proc.Id, 0, GDB_ID.ROOT)
|
||||||
@@ -183,11 +290,13 @@ local function MakeTwoFaces( Proc, nPhase, nRawId, nPartId, dOvmHead)
|
|||||||
end
|
end
|
||||||
-- recupero i dati dell'utensile
|
-- recupero i dati dell'utensile
|
||||||
local dSawDiam = 400
|
local dSawDiam = 400
|
||||||
|
local dSawThick = 2
|
||||||
local dMaxDepth = 0
|
local dMaxDepth = 0
|
||||||
if EgtMdbSetCurrMachining( sCutting) then
|
if EgtMdbSetCurrMachining( sCutting) 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
|
||||||
dSawDiam = EgtTdbGetCurrToolParam( MCH_TP.DIAM) or dSawDiam
|
dSawDiam = EgtTdbGetCurrToolParam( MCH_TP.DIAM) or dSawDiam
|
||||||
|
dSawThick = EgtTdbGetCurrToolParam( MCH_TP.THICK) or dSawThick
|
||||||
dMaxDepth = EgtTdbGetCurrToolMaxDepth() or dMaxDepth
|
dMaxDepth = EgtTdbGetCurrToolMaxDepth() or dMaxDepth
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -239,47 +348,58 @@ local function MakeTwoFaces( Proc, nPhase, nRawId, nPartId, dOvmHead)
|
|||||||
vtRef[2] = vtN[2] ^ vtTg
|
vtRef[2] = vtN[2] ^ vtTg
|
||||||
if vtRef[2] * vtN[1] < 0 then vtRef[2] = - vtRef[2] end
|
if vtRef[2] * vtN[1] < 0 then vtRef[2] = - vtRef[2] end
|
||||||
-- determino quale faccia è più grande
|
-- determino quale faccia è più grande
|
||||||
local _, dB1, dH1 = EgtSurfTmFacetMinAreaRectangle( Proc.Id, 0)
|
local rfFac1, dB1, dH1 = EgtSurfTmFacetMinAreaRectangle( Proc.Id, 0)
|
||||||
local _, dB2, dH2 = EgtSurfTmFacetMinAreaRectangle( Proc.Id, 1)
|
local rfFac2, dB2, dH2 = EgtSurfTmFacetMinAreaRectangle( Proc.Id, 1)
|
||||||
local nBigInd = EgtIf( dB1 * dH1 >= dB2 * dH2, 1, 2)
|
local nBigInd = EgtIf( dB1 * dH1 >= dB2 * dH2, 1, 2)
|
||||||
local nSmaInd = 3 - nBigInd
|
local nSmaInd = 3 - nBigInd
|
||||||
-- calcolo extra taglio
|
tBHx[1] = {dH1, dV1, rfFac1}
|
||||||
local dCutExtra = dExtraUp
|
tBHx[2] = {dH2, dV2, rfFac2}
|
||||||
if dAng < -90.5 and dAng > -179.5 then
|
local nUseRoughTool = EgtGetInfo( Proc.Id, 'Q02', 'i')
|
||||||
dCutExtra = - dSawThick / tan( 180 + dAng) + dExtraUp
|
if nUseRoughTool == 1 and dAng < -0.1 and dAng > -90 then
|
||||||
end
|
local bOk, sErr = MachineByMill( Proc, nPhase, nRawId, nPartId, b3Solid, ptC, vtN, nBigInd, nSmaInd, ptPs, tBHx, b3Raw, 0, nUseRoughTool, dAng)
|
||||||
-- verifico se necessari tagli supplementari
|
|
||||||
local vCuts = DC.GetDice( nAddGrpId, b3Solid, ptC[nBigInd], vtN[nBigInd], false, ptC[nSmaInd], vtN[nSmaInd])
|
|
||||||
--DC.PrintOrderCut( vCuts)
|
|
||||||
if #vCuts > 0 then
|
|
||||||
-- sistemo posizione nel DB e nome
|
|
||||||
for i = 1, #vCuts do
|
|
||||||
for j = 1, #vCuts[i] do
|
|
||||||
EgtSetName( vCuts[i][j], 'AddCut_' .. tostring( Proc.Id))
|
|
||||||
EgtSetInfo( vCuts[i][j], 'TASKID', Proc.TaskId)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
-- eseguo
|
|
||||||
for i = 1, #vCuts do
|
|
||||||
-- assegno il modo di tagliare
|
|
||||||
local vtOrthO = EgtIf( ( i % 2) == 1, vtRef[nSmaInd], vtRef[nBigInd])
|
|
||||||
-- lavoro la faccia
|
|
||||||
for j = 1, #vCuts[i] do
|
|
||||||
local dLocCutExtra = EgtIf( j == #vCuts[i], dCutExtra - dExtraUp, dCutExtra)
|
|
||||||
local bOk, sErr = Fbs.MakeOne( vCuts[i][j], 0, sCutting, dSawDiam, vtOrthO, nil, dLocCutExtra, BD.CUT_SIC, 0, 0, 0, nil, b3Raw)
|
|
||||||
if not bOk then
|
|
||||||
return bOk, sErr
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
-- altrimenti, tagli diretti delle facce
|
|
||||||
else
|
|
||||||
local bOk, sErr = Fbs.MakeTwo( Proc, nPhase, nRawId, nPartId, dOvmHead, EgtIf( bHead, 'HeadSide', 'TailSide'))
|
|
||||||
if not bOk then
|
if not bOk then
|
||||||
return bOk, sErr
|
return bOk, sErr
|
||||||
end
|
end
|
||||||
|
else
|
||||||
|
-- calcolo extra taglio
|
||||||
|
local dCutExtra = dExtraUp
|
||||||
|
if dAng < -90.5 and dAng > -179.5 then
|
||||||
|
dCutExtra = - dSawThick / tan( 180 + dAng) + dExtraUp
|
||||||
|
end
|
||||||
|
-- verifico se necessari tagli supplementari
|
||||||
|
local vCuts = DC.GetDice( nAddGrpId, b3Solid, ptC[nBigInd], vtN[nBigInd], false, ptC[nSmaInd], vtN[nSmaInd])
|
||||||
|
--DC.PrintOrderCut( vCuts)
|
||||||
|
if #vCuts > 0 then
|
||||||
|
-- sistemo posizione nel DB e nome
|
||||||
|
for i = 1, #vCuts do
|
||||||
|
for j = 1, #vCuts[i] do
|
||||||
|
EgtSetName( vCuts[i][j], 'AddCut_' .. tostring( Proc.Id))
|
||||||
|
EgtSetInfo( vCuts[i][j], 'TASKID', Proc.TaskId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
-- eseguo
|
||||||
|
for i = 1, #vCuts do
|
||||||
|
-- assegno il modo di tagliare
|
||||||
|
local vtOrthO = EgtIf( ( i % 2) == 1, vtRef[nSmaInd], vtRef[nBigInd])
|
||||||
|
-- lavoro la faccia
|
||||||
|
for j = 1, #vCuts[i] do
|
||||||
|
local dLocCutExtra = EgtIf( j == #vCuts[i], dCutExtra - dExtraUp, dCutExtra)
|
||||||
|
local bOk, sErr = Fbs.MakeOne( vCuts[i][j], 0, sCutting, dSawDiam, vtOrthO, nil, dLocCutExtra, BD.CUT_SIC, 0, 0, 0, nil, b3Raw)
|
||||||
|
if not bOk then
|
||||||
|
return bOk, sErr
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
-- altrimenti, tagli diretti delle facce
|
||||||
|
else
|
||||||
|
local bOk, sErr = Fbs.MakeTwo( Proc, nPhase, nRawId, nPartId, dOvmHead, EgtIf( bHead, 'HeadSide', 'TailSide'))
|
||||||
|
if not bOk then
|
||||||
|
return bOk, sErr
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- eventuale segnalazione ingombro di testa o coda
|
-- eventuale segnalazione ingombro di testa o coda
|
||||||
if Proc.Head then
|
if Proc.Head then
|
||||||
local dOffs = b3Raw:getMax():getX() - dOvmHead - Proc.Box:getMin():getX()
|
local dOffs = b3Raw:getMax():getX() - dOvmHead - Proc.Box:getMin():getX()
|
||||||
|
|||||||
@@ -1,4 +1,20 @@
|
|||||||
==== Beam Update Log ====
|
==== Beam Update Log ====
|
||||||
|
|
||||||
|
Versione 3.1e1 (05/05/2026)
|
||||||
|
- Modif : in LapJoint migliorate slot con sega a catena
|
||||||
|
- Fixed : in DrillPocket in doppio eliminata lavorazione aggiuntiva in caso di utensile non abbastanza lungo
|
||||||
|
|
||||||
|
Versione 3.1d2 (10/04/2026)
|
||||||
|
- Added : in StepJoint aggiunto Q02=1 per forzare fresa
|
||||||
|
- Added : in DtMortise aggiunto Q01=1 per disabilitare antischeggia
|
||||||
|
- Fixed : in LapJoint correzione a antischeggia con fresa in caso di feature spezzata
|
||||||
|
|
||||||
|
Versione 3.1d1 (08/04/2026)
|
||||||
|
- Added : le forature vengono accorciate con massima elevazione anche in presenza di tagli di testa
|
||||||
|
- Modif : nelle slot con lama verticali si lavora sempre in concordanza
|
||||||
|
- Fixed : in DtMortise correzione a lavorazione antischeggia
|
||||||
|
- Fixed : in LapJoint, se lavorazione vuota, si disattiva sempre; in Q02 si lavora sempre prima il lato sotto.
|
||||||
|
|
||||||
Versione 3.1c2 (18/03/2026)
|
Versione 3.1c2 (18/03/2026)
|
||||||
- Added : in LapJoint (solo L030) aggiunto Q02 per fare solo contorno per forme a "C" e tunnel; Q17 spessore di eventuale codolo
|
- Added : in LapJoint (solo L030) aggiunto Q02 per fare solo contorno per forme a "C" e tunnel; Q17 spessore di eventuale codolo
|
||||||
- Modif : per LapJoint e simili il Q06 per antischeggia ora contempla il valore 3 per scegliere la strategia in automatico (lama o fresa)
|
- Modif : per LapJoint e simili il Q06 per antischeggia ora contempla il valore 3 per scegliere la strategia in automatico (lama o fresa)
|
||||||
|
|||||||
+1
-1
@@ -2,5 +2,5 @@
|
|||||||
-- Gestione della versione di Beam
|
-- Gestione della versione di Beam
|
||||||
|
|
||||||
NAME = 'Beam'
|
NAME = 'Beam'
|
||||||
VERSION = '3.1c2'
|
VERSION = '3.1e1'
|
||||||
MIN_EXE = '3.1b1'
|
MIN_EXE = '3.1b1'
|
||||||
|
|||||||
Reference in New Issue
Block a user