|
|
|
@@ -2304,7 +2304,7 @@ end
|
|
|
|
|
-- se necessario forza la tasca a chiusa
|
|
|
|
|
local function VerifyPocket( Proc, nFacet, dElev, nRawId)
|
|
|
|
|
|
|
|
|
|
local bForceClosedPocket = false
|
|
|
|
|
local dToolOvershoot
|
|
|
|
|
local b3Raw = EgtGetRawPartBBox( nRawId)
|
|
|
|
|
-- verifico se la feature è sul bordo (non ci sono altri pezzi davanti alla tasca). Se è sul bordo, l'utensile potrà attaccare da fuori.
|
|
|
|
|
local bIsFeatureOnEdge = ( Proc.Topology == 'Groove' and Proc.Fct == 4 and Proc.DistanceToNearestParts.Front > b3Raw:getDimY())
|
|
|
|
@@ -2366,21 +2366,15 @@ local function VerifyPocket( Proc, nFacet, dElev, nRawId)
|
|
|
|
|
if Proc.AffectedFaces.Right then
|
|
|
|
|
dDistanceToNearestPart = min( dDistanceToNearestPart, Proc.DistanceToNearestParts.Right)
|
|
|
|
|
end
|
|
|
|
|
-- se la distanza è inferiore ad un valore minimo forzo la tasca chiusa per evitare che la ricerca utensile fallisca
|
|
|
|
|
local dMinToolDiameter = 25
|
|
|
|
|
if dDistanceToNearestPart < dMinToolDiameter / 2 - 10 * GEO.EPS_SMALL then
|
|
|
|
|
bForceClosedPocket = true
|
|
|
|
|
dDistanceToNearestPart = dMaxDiameter
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local bExcludeNoTipFeed = ( Proc.Topology == 'Pocket')
|
|
|
|
|
-- recupero la lavorazione
|
|
|
|
|
local bUseDElevToFindPocketing = true
|
|
|
|
|
local sPocketing = WM.FindPocketing( 'Pocket', dMaxDiameter, dElev, nil, nil, bExcludeNoTipFeed, dDistanceToNearestPart)
|
|
|
|
|
local sPocketing = WM.FindPocketing( 'Pocket', dMaxDiameter, dElev, nil, nil, bExcludeNoTipFeed)
|
|
|
|
|
-- se tasca troppo profonda cerco senza elevazione e limiterò la profondità
|
|
|
|
|
if not sPocketing then
|
|
|
|
|
bUseDElevToFindPocketing = false
|
|
|
|
|
sPocketing = WM.FindPocketing( 'Pocket', dMaxDiameter, nil, nil, nil, bExcludeNoTipFeed, dDistanceToNearestPart)
|
|
|
|
|
sPocketing = WM.FindPocketing( 'Pocket', dMaxDiameter, nil, nil, nil, bExcludeNoTipFeed)
|
|
|
|
|
end
|
|
|
|
|
local dMillDiam = 20
|
|
|
|
|
local dMaxDepth = 0
|
|
|
|
@@ -2391,7 +2385,7 @@ local function VerifyPocket( Proc, nFacet, dElev, nRawId)
|
|
|
|
|
-- se doppio cerco una lavorazione adatta
|
|
|
|
|
if Proc.Double and Proc.Double == 2 then
|
|
|
|
|
local sPocketingBackup = sPocketing
|
|
|
|
|
sPocketing = WM.FindPocketing( 'Pocket', dMaxDiameter, EgtIf( bUseDElevToFindPocketing, dElev, nil), nil, 'H1', true, dDistanceToNearestPart)
|
|
|
|
|
sPocketing = WM.FindPocketing( 'Pocket', dMaxDiameter, EgtIf( bUseDElevToFindPocketing, dElev, nil), nil, 'H1', true)
|
|
|
|
|
if not WM.IsMachiningOkForDouble( sPocketing) then
|
|
|
|
|
Proc.Double = 0
|
|
|
|
|
sPocketing = sPocketingBackup
|
|
|
|
@@ -2404,41 +2398,10 @@ local function VerifyPocket( Proc, nFacet, dElev, nRawId)
|
|
|
|
|
dMillDiam = EgtTdbGetCurrToolParam( MCH_TP.DIAM) or dMillDiam
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
-- verifico se la lavorazione (o il suo eventuale mirror) potrebbe danneggiare le parti limitrofe e devo quindi forzare una tasca chiusa
|
|
|
|
|
local bIsMachiningDamagingOtherParts = IsMachiningDamagingOtherParts( Proc, dMillDiam, nRawId)
|
|
|
|
|
if bIsMachiningDamagingOtherParts then
|
|
|
|
|
bForceClosedPocket = true
|
|
|
|
|
end
|
|
|
|
|
-- disattivo il doppio se devo forzare una tasca chiusa ma l'altra no
|
|
|
|
|
if Proc.Double and Proc.Double > 0 then
|
|
|
|
|
local bIsMirrorMachiningDamagingOtherParts = IsMachiningDamagingOtherParts( Proc.Mirror, dMillDiam, nRawId)
|
|
|
|
|
if bIsMachiningDamagingOtherParts ~= bIsMirrorMachiningDamagingOtherParts then
|
|
|
|
|
Proc.Double = 0
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
dToolOvershoot = min( dDistanceToNearestPart, dMillDiam / 2 + 1)
|
|
|
|
|
-- altrimenti diametro utensile troppo piccolo: devo forzare tasca chiusa
|
|
|
|
|
else
|
|
|
|
|
bForceClosedPocket = true
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- se tasca chiusa cerco lavorazione con diametro massimo pari a dimensione tasca e riverifico per eventuale doppio
|
|
|
|
|
if bForceClosedPocket then
|
|
|
|
|
dMaxDiameter = 0.9 * dStartDiameter
|
|
|
|
|
bUseDElevToFindPocketing = true
|
|
|
|
|
sPocketing = WM.FindPocketing( 'Pocket', dMaxDiameter, dElev, nil, nil, bExcludeNoTipFeed, dDistanceToNearestPart)
|
|
|
|
|
if not sPocketing then
|
|
|
|
|
bUseDElevToFindPocketing = false
|
|
|
|
|
sPocketing = WM.FindPocketing( 'Pocket', dMaxDiameter, nil, nil, nil, bExcludeNoTipFeed, dDistanceToNearestPart)
|
|
|
|
|
end
|
|
|
|
|
-- se doppio cerco una lavorazione adatta
|
|
|
|
|
if Proc.Double and Proc.Double == 2 then
|
|
|
|
|
local sPocketingBackup = sPocketing
|
|
|
|
|
sPocketing = WM.FindPocketing( 'Pocket', dMaxDiameter, EgtIf( bUseDElevToFindPocketing, dElev, nil), nil, 'H1', true, dDistanceToNearestPart)
|
|
|
|
|
if not WM.IsMachiningOkForDouble( sPocketing) then
|
|
|
|
|
Proc.Double = 0
|
|
|
|
|
sPocketing = sPocketingBackup
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
dToolOvershoot = 0
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- recupero dati utensile
|
|
|
|
@@ -2451,7 +2414,7 @@ local function VerifyPocket( Proc, nFacet, dElev, nRawId)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return sPocketing, bForceClosedPocket, bIsFeatureOnEdge, sTuuid, dMillDiam, dMaxDepth, dThDiam
|
|
|
|
|
return sPocketing, dToolOvershoot, bIsFeatureOnEdge, sTuuid, dMillDiam, dMaxDepth, dThDiam
|
|
|
|
|
end
|
|
|
|
|
---------------------------------------------------------------------
|
|
|
|
|
local function MakeByPocketing( Proc, nFacet, nRawId, b3Raw, bCheckQPar)
|
|
|
|
@@ -2462,7 +2425,7 @@ local function MakeByPocketing( Proc, nFacet, nRawId, b3Raw, bCheckQPar)
|
|
|
|
|
local nAddGrpId = WL.GetAddGroup( Proc.PartId)
|
|
|
|
|
local nNewProc = RemoveBottomFaceAndReorder( Proc, nAddGrpId, nFacet)
|
|
|
|
|
-- cerco lavorazione adatta e recupero i dati utensile
|
|
|
|
|
local sPocketing, bForceClosedPocket, bIsFeatureOnEdge, sTuuid, dMillDiam, dMaxDepth, dThDiam = VerifyPocket( Proc, nFacet, dElev, nRawId)
|
|
|
|
|
local sPocketing, dToolOvershoot, bIsFeatureOnEdge, sTuuid, dMillDiam, dMaxDepth, dThDiam = VerifyPocket( Proc, nFacet, dElev, nRawId)
|
|
|
|
|
if not sPocketing then
|
|
|
|
|
local sErr = 'Error : pocketing not found in library'
|
|
|
|
|
EgtOutLog( sErr)
|
|
|
|
@@ -2513,8 +2476,11 @@ local function MakeByPocketing( Proc, nFacet, nRawId, b3Raw, bCheckQPar)
|
|
|
|
|
sUserNotes = EgtSetValInNotes( sUserNotes, 'MaxOptSize', 0.1)
|
|
|
|
|
EgtSetMachiningParam( MCH_MP.SUBTYPE, MCH_POCK_SUB.SPIRALOUT)
|
|
|
|
|
end
|
|
|
|
|
-- setto eventuale nota per forzare tasca chiusa
|
|
|
|
|
if bForceClosedPocket then sUserNotes = EgtSetValInNotes( sUserNotes, 'Open', 0) end
|
|
|
|
|
-- setto eventuale nota per forzare massima uscita dalla geometria
|
|
|
|
|
if dToolOvershoot then
|
|
|
|
|
sUserNotes = EgtSetValInNotes( sUserNotes, 'Open', dToolOvershoot)
|
|
|
|
|
sUserNotes = EgtSetValInNotes( sUserNotes, 'ExtProj', dToolOvershoot)
|
|
|
|
|
end
|
|
|
|
|
-- setto eventuale nota per forzare attacco esterno, fino ad un certo spessore del grezzo
|
|
|
|
|
local dMaxRawThicknessToStartOut = 75
|
|
|
|
|
if bIsFeatureOnEdge and ( not Proc.Double or Proc.Double == 0) then sUserNotes = EgtSetValInNotes( sUserNotes, 'OpenMinSafe', dMaxRawThicknessToStartOut) end
|
|
|
|
|