From 89838c6f28bd77f85bda2878cd810e22a39b2ba3 Mon Sep 17 00:00:00 2001 From: "luca.mazzoleni" Date: Wed, 13 Dec 2023 16:57:30 +0100 Subject: [PATCH] =?UTF-8?q?-In=20FreeContour=20->=20MakeByPocket=20aggiunt?= =?UTF-8?q?a=20la=20possibilit=C3=A0=20di=20svuotare=20tasche=20passanti?= =?UTF-8?q?=20-In=20FreeContour=20->=20MakeByPocket=20in=20tasche=20specia?= =?UTF-8?q?li=20cliente=2090480029=20forzato=20step=20unico?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- LuaLibs/WProcessFreeContour.lua | 72 ++++++++++++++++++++++++++------- 1 file changed, 57 insertions(+), 15 deletions(-) diff --git a/LuaLibs/WProcessFreeContour.lua b/LuaLibs/WProcessFreeContour.lua index 9a0ebbb..f49eb8e 100644 --- a/LuaLibs/WProcessFreeContour.lua +++ b/LuaLibs/WProcessFreeContour.lua @@ -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