-In FreeContour -> MakeByPocket aggiunta la possibilità di svuotare tasche passanti

-In FreeContour -> MakeByPocket in tasche speciali cliente 90480029 forzato step unico
This commit is contained in:
luca.mazzoleni
2023-12-13 16:57:30 +01:00
parent 764c80824a
commit fe2d84375f
+57 -15
View File
@@ -27,6 +27,7 @@
-- 2023/10/02 Correzione a MakeCustomPath per calcolare correttamente puliture spigoli di tipo 2 (Clean 30) e 3 (Gola di Scarico).
-- 2023/11/14 Spostamento di alcune funzioni in WallLib.
-- Aggiunta dei FreeContour in doppio.
-- 2023/12/13 In MakeByPocket aggiunta la possibilità di svuotare tasche passanti.
-- Tabella per definizione modulo
local WPF = {}
@@ -2100,7 +2101,7 @@ local function MakeByMill( Proc, nRawId, b3Raw)
EgtSetMachiningParam( MCH_MP.WORKSIDE, MCH_MILL_WS.RIGHT)
end
-- se lamatura affondata speciale, setto attacco e stacco al centro
-- se lamatura affondata speciale (cliente 90480029), setto attacco e stacco al centro
local bIsRecessedCounterBore = ( Proc.Box:getMax():getZ() < b3Raw:getMax():getZ() + 10 * GEO.EPS_SMALL) and
( nTool_ID == WD.RECESSED_COUNTERBORE_TOOLID or 0) and
( EgtCurveIsACircle( AuxId))
@@ -2120,12 +2121,16 @@ local function MakeByMill( Proc, nRawId, b3Raw)
EgtSetMachiningParam( MCH_MP.LOELEV, 0)
-- imposto step
local dMaxMat = EgtTdbGetCurrToolParam( MCH_TP.MAXMAT) or 0
local dStep = EgtGetMachiningParam( MCH_MP.STEP)
if dStep < GEO.EPS_SMALL then dStep = 0.75 * dMaxMat end
local nStep = ceil( ( dDepth - dMaxMat) / dStep)
dStep = max( ( dDepth - dMaxMat) / max( nStep, 1), 0)
local dMaxElev = max( ( nStep + 1) * dStep - GEO.EPS_SMALL, 0)
EgtSetMachiningParam( MCH_MP.STEP, dStep)
--
-- su richiesta del cliente 90480029 si usa sempre step unico a prescindere dalla geometria
--
-- local dStep = EgtGetMachiningParam( MCH_MP.STEP)
-- if dStep < GEO.EPS_SMALL then dStep = 0.75 * dMaxMat end
-- local nStep = ceil( ( dDepth - dMaxMat) / dStep)
-- dStep = max( ( dDepth - dMaxMat) / max( nStep, 1), 0)
-- local dMaxElev = max( ( nStep + 1) * dStep - GEO.EPS_SMALL, 0)
EgtSetMachiningParam( MCH_MP.STEP, dMaxMat)
local dMaxElev = dMaxMat
-- imposto elevazione e forzo attacco dal lato aperto
EgtSetMachiningParam( MCH_MP.USERNOTES, 'MaxElev=' .. EgtNumToString( dMaxElev, 1) .. ';OutRaw=3;')
end
@@ -2350,6 +2355,7 @@ end
---------------------------------------------------------------------
local function MakeByPocket( Proc, nRawId, b3Raw)
-- recupero e verifico l'entità curva
local nAddGrpId = WL.GetAddGroup( Proc.PartId)
local bOpposite = false
local AuxId = EgtGetInfo( Proc.Id, 'AUXID', 'i') or 0
local vtExtr
@@ -2382,11 +2388,48 @@ local function MakeByPocket( Proc, nRawId, b3Raw)
break
end
end
-- se tasca verticale si permette la svuotatura anche se passante, lavorando la faccia di fondo aggiunta
local nProcTmWithAddedBottomSurfaceId
if not nFacet and not bPocketBotface and Proc.AffectedFaces.Top and Proc.AffectedFaces.Bottom and AreSameOrOppositeVectorApprox( vtExtr, Z_AX()) then
local nFirstLoopId, nLoopsCount = EgtExtractSurfTmLoops( Proc.Id, nAddGrpId)
local dMinZ = GEO.INFINITO
local nBottomLoopId = GDB_ID.NULL
for i = 1, nLoopsCount do
local nCurrentLoopId = nFirstLoopId + i - 1
local b3Loop = EgtGetBBoxGlob( nCurrentLoopId, GDB_BB.STANDARD)
local dCurrentZ = b3Loop:getMin():getZ()
if dCurrentZ < dMinZ then
dMinZ = dCurrentZ
nBottomLoopId = nCurrentLoopId
end
end
local nAddedBottomSurface = EgtSurfTmByFlatContour( nAddGrpId, nBottomLoopId)
local vtNAddedBottomSurface = EgtSurfTmFacetNormVersor( nAddedBottomSurface, 0)
if AreOppositeVectorApprox( vtNAddedBottomSurface, Z_AX()) then EgtInvertSurf( nAddedBottomSurface) end
nProcTmWithAddedBottomSurfaceId = EgtSurfTmBySewing( nAddGrpId, { nAddedBottomSurface, Proc.Id})
if nProcTmWithAddedBottomSurfaceId then
-- ricerco la faccia di fondo della trimesh (gli id potrebbero essere cambiati)
for i = 1, Proc.Fct do
local vtN = EgtSurfTmFacetNormVersor( nProcTmWithAddedBottomSurfaceId, i-1, GDB_ID.ROOT)
if abs( vtN * vtExtr) > 0.99 then
nFacet = i - 1
break
end
end
end
-- elimino le geometrie che non servono più
for i = 1, nLoopsCount do
EgtErase( nFirstLoopId + i - 1)
end
EgtErase( nAddedBottomSurface)
end
if not nFacet then
return MakeByMill( Proc, nRawId, b3Raw)
end
-- se ho creato la faccia di fondo utilizzo quella
local nSurfId = nProcTmWithAddedBottomSurfaceId or Proc.Id
-- se la faccia di fondo ha confini aperti, devo lavorarla direttamente
local vAdj = EgtSurfTmFacetAdjacencies( Proc.Id, nFacet)[1] or {}
local vAdj = EgtSurfTmFacetAdjacencies( nSurfId, nFacet)[1] or {}
for i = 1, #vAdj do
if vAdj[i] == - 1 then
bPocketBotface = true
@@ -2397,11 +2440,10 @@ local function MakeByPocket( Proc, nRawId, b3Raw)
local dDepth = EgtIf( bPocketBotface, 0, abs( EgtCurveThickness( AuxId)))
local dOriDepth = dDepth
-- dati della faccia di fondo
local _, dH, dV = EgtSurfTmFacetMinAreaRectangle( Proc.Id, nFacet, GDB_ID.ROOT)
local _, dH, dV = EgtSurfTmFacetMinAreaRectangle( nSurfId, nFacet, GDB_ID.ROOT)
local dDiam = min( dH, dV)
local dElev = WL.GetFaceElevation( Proc.Id, nFacet, nRawId)
local dElev = WL.GetFaceElevation( nSurfId, nFacet, nRawId)
-- gruppo ausiliario
local nAddGrpId = WL.GetAddGroup( Proc.PartId)
local nNewProc, nNumFacet = RemoveBottomFaceAndReorder( Proc, nAddGrpId, nFacet)
-- se ho forma a L
local bIsL = ( nNumFacet == 2 or WL.TestElleShape3( nNewProc, nNumFacet) or WL.TestElleShape4( nNewProc, nNumFacet) == 2)
@@ -2440,7 +2482,7 @@ local function MakeByPocket( Proc, nRawId, b3Raw)
end
end
-- inserisco la lavorazione di svuotatura
local sName = 'Pock_' .. ( EgtGetName( Proc.Id) or tostring( Proc.Id))
local sName = 'Pock_' .. ( EgtGetName( nSurfId) or tostring( nSurfId))
local nMchFId = WM.AddMachining( Proc, sName, sPocketing)
if not nMchFId then
local sErr = 'Error adding machining ' .. sName .. '-' .. sPocketing
@@ -2450,7 +2492,7 @@ local function MakeByPocket( Proc, nRawId, b3Raw)
EgtSetInfo( nMchFId, 'Part', Proc.PartId)
-- aggiungo geometria
if bPocketBotface then
EgtSetMachiningGeometry( {{ Proc.Id, nFacet}})
EgtSetMachiningGeometry( {{ nSurfId, nFacet}})
else
EgtSetMachiningGeometry( {{ AuxId, -1}})
end
@@ -2483,7 +2525,7 @@ local function MakeByPocket( Proc, nRawId, b3Raw)
local bAppOk = EgtApplyMachining( true, false)
if not bAppOk and not bPocketBotface then
bPocketBotface = true
EgtSetMachiningGeometry( {{ Proc.Id, nFacet}})
EgtSetMachiningGeometry( {{ nSurfId, nFacet}})
dDepth = 0
local dThElev = dThDiam / 2 * sqrt( vtExtr:getX() * vtExtr:getX() + vtExtr:getY() * vtExtr:getY())
if dElev + dThElev > dMaxDepth + 10 * GEO.EPS_SMALL then
@@ -2515,7 +2557,7 @@ local function MakeByPocket( Proc, nRawId, b3Raw)
else
EgtErase( nNewProc)
if nConeCut == 1 then
local sErr = 'Clean corner 60° not applid because thickness: ' .. EgtNumToString( dThick, 2) ..
local sErr = 'Clean corner 60° not applied because thickness: ' .. EgtNumToString( dThick, 2) ..
' is bigger than parameter MAX_CLEAN_CRN60: ' .. EgtNumToString( WD.MAX_CLEAN_CRN60 , 2)
EgtOutLog( sErr)
elseif nConeCut == 2 then