From ec5583366e86b82e0a4ece839f553263bcb5b293 Mon Sep 17 00:00:00 2001 From: "luca.mazzoleni" Date: Wed, 29 Jun 2022 17:49:45 +0200 Subject: [PATCH] Revert "Revert "DataBeam:"" This reverts commit 59051cbf06c5cd5c49fac57cecd6dab15b7e0877. --- LuaLibs/ProcessLapJoint.lua | 50 +++++++++++++++++++++++++++++++++---- 1 file changed, 45 insertions(+), 5 deletions(-) diff --git a/LuaLibs/ProcessLapJoint.lua b/LuaLibs/ProcessLapJoint.lua index f4ba2c6..a35dbc2 100644 --- a/LuaLibs/ProcessLapJoint.lua +++ b/LuaLibs/ProcessLapJoint.lua @@ -46,6 +46,7 @@ -- 2022/06/15 Correzione calcolo normale alla faccia per sega catena di fianco. -- 2022/06/16 Implemento lavorazioni con fresatura di lato per L30 (al momento solo passanti) se parametro Q03=2. Modificate funzioni Make, MakeMoreFaces, Classify. -- 2022/06/21 Implemento di lavorazioni non passanti con fresatura di lato per L30 se parametro Q03=2. Modificate funzioni MakeMoreFaces, Classify. +-- 2022/06/29 Migliorate lavorazioni con fresatura di lato per L30 se parametro Q03=2. Ora con 4 facce / 3 facce a L può entrare una fresa grande fino al doppio dell'altezza della tasca / doppio della dimensione minima. -- Tabella per definizione modulo local ProcessLapJoint = {} @@ -4345,6 +4346,9 @@ end --------------------------------------------------------------------- local function MakeMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead, bSinglePart, bPrevBhSideMill, bAllWithEndCap) + if not BD.MAXDIAM_POCK_CORNER then + BD.MAXDIAM_POCK_CORNER = 30 + end local sWarn -- recupero l'ingombro del grezzo di appartenenza local b3Raw = EgtGetRawPartBBox( nRawId) @@ -4835,11 +4839,11 @@ local function MakeMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead, bSinglePa elseif Proc.Fct == 4 then -- se non angoli fittizi, per rifinire gli angoli premio utensile diam 25 o da BD if not bAllWithEndCap then - dDiam = min( dDiam, BD.MAXDIAM_POCK_CORNER or 30) + dDiam = min( dDiam, BD.MAXDIAM_POCK_CORNER) end elseif Proc.Fct == 3 and bIsL then -- per rifinire gli angoli premio utensile diam 25 o da BD - dDiam = min( 2 * dDiam, BD.MAXDIAM_POCK_CORNER or 30) + dDiam = min( ( 2 * dDiam) - 1, BD.MAXDIAM_POCK_CORNER) else dDiam = 2 * dDiam end @@ -5138,9 +5142,45 @@ local function MakeMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead, bSinglePa dFacElev = BL.GetFaceElevation( Proc.Id, nFacInd) dCollSic = CalcCollisionSafety( tvtNx[2]) local dMachDepth = dFacElev + dCollSic - _, dH, dV = EgtSurfTmFacetMinAreaRectangle( Proc.Id, nFacInd, GDB_ID.ROOT) - local dDimMin = min( dH, dV) - local _, sPocketing = VerifyPocket( Proc, dDimMin, dFacElev, nil, sMyMchFind) + local frFacRec, dFacDim1, dFacDim2 = EgtSurfTmFacetMinAreaRectangle( Proc.Id, nFacInd, GDB_ID.ROOT) + -- limito il diametro utensile massimo a 100 per queste lavorazioni + dToolTargetDiam = min( BD.MAXDIAM_POCK_CORNER, 100) + -- se è 4 facce devo capire quale è il lato libero e settare dH e dV di conseguenza + if Proc.Fct == 4 then + local vAdj = {} + local vtN2 + for i = 1, Proc.Fct do + -- recupero le adiacenze del loop esterno + local vFacAdj = EgtSurfTmFacetAdjacencies( Proc.Id, i - 1)[1] + -- le conto + local nCount = 0 + for j = 1, #vFacAdj do + if vFacAdj[j] >= 0 then + nCount = nCount + 1 + end + end + vAdj[i] = nCount + if vAdj[i] == Proc.Fct - 1 and i ~= nFacInd + 1 then + dV = BL.GetFaceElevation( Proc.Id, i - 1) + vtN2 = EgtSurfTmFacetNormVersor( Proc.Id, i - 1, GDB_ID.ROOT) + end + end + local vtRes = vtN2 ^ vtN + if AreSameOrOppositeVectorApprox( frFacRec:getVersX(), vtRes) then + dH = dFacDim1 + else + dH = dFacDim2 + end + -- se la tasca ha dimensioni adeguate cerco di usare una fresa con raggio fino a metà altezza + dToolMaxDiam = EgtIf( dH >= dToolTargetDiam and dV > 0.5 * dToolTargetDiam, dToolTargetDiam, min( dH, dV, dToolTargetDiam)) + -- per le L a 3 facce, avendo due lati aperti per l'attacco, si considera un diametro utensile pari al doppio della dimensione minima; il "- 1" è un accorgimento per impedire bug derivanti da dimensione della tasca uguale a D\2 utensile + elseif Proc.Fct == 3 and bIsL then + dToolMaxDiam = min ( ( min( dFacDim1, dFacDim2) * 2) - 1, dToolTargetDiam) + -- in tutti gli altri casi l'utensile dovrà essere grande al massimo come il lato più piccolo + else + dToolMaxDiam = min ( dFacDim1, dFacDim2, dToolTargetDiam) + end + local _, sPocketing = VerifyPocket( Proc, dToolMaxDiam, dFacElev, nil, sMyMchFind) bOk, sWarn2, sTuuidPk, dDiamTool = MakePocket( Proc, nPartId, ptPs, tvtNx, nFacInd, sMyMchFind, nUseRoughTool, sPocketing, dMachDepth, nil, nil, bAllWithEndCap) if not bOk then return false, sWarn2 end if sWarn2 then