diff --git a/LuaLibs/ProcessLapJoint.lua b/LuaLibs/ProcessLapJoint.lua index f5ae21c..a8979b6 100644 --- a/LuaLibs/ProcessLapJoint.lua +++ b/LuaLibs/ProcessLapJoint.lua @@ -4391,49 +4391,29 @@ local function AreFacesOrthogonal( nSurfId, nFacInd, nFacInd2, dCosSideAng) return dOrtho end +--------------------------------------------------------------------- local function AreAllFacesOrthogonal( nSurfId, dCosSideAng) -- recupero il numero di facce local nFacCnt = EgtSurfTmFacetCount( nSurfId) if not dCosSideAng then dCosSideAng = -0.09 end - -- recupero le normali delle facce - local vvtN = {} - for i = 1, nFacCnt do - local vtN = EgtSurfTmFacetNormVersor( nSurfId, i - 1, GDB_ID.ROOT) - vvtN[i] = vtN - end - local dOrtho = 0 -- orthogonal - for i = 1, nFacCnt do - -- recupero le adiacenze del loop esterno - local vFacAdj = EgtSurfTmFacetAdjacencies( nSurfId, i - 1)[1] - -- le conto - local nCount = 0 - for j = 1, #vFacAdj do - if vFacAdj[j] >= 0 then - nCount = nCount + 1 - end - end - -- ne determino eventuale sottosquadra ( dal valore passato o - 5deg) e ortogonalità - for j = 1, #vFacAdj do - if vFacAdj[j] >= 0 then - local vtN = vvtN[i] - local vtN2 = vvtN[vFacAdj[j] + 1] - local dResV = vtN * vtN2 - if dResV < dCosSideAng - GEO.EPS_SMALL then - dOrtho = -1 -- undercut - end - -- se non ho già registrato un undercut - if dOrtho >= 0 and abs( dResV) > 2 * GEO.EPS_SMALL then - dOrtho = 1 -- overcut - end - end + local dOrtho = 0 + for i = 0, nFacCnt - 1 do + local fc1 = i + local fc2 = EgtIf( i < nFacCnt - 1, i + 1, 0) + + if dOrtho == 0 then + dOrtho = AreFacesOrthogonal( nSurfId, fc1, fc2, dCosSideAng) end + + if dOrtho ~= 0 then break end end return dOrtho end +--------------------------------------------------------------------- local function MakeObliquePoket( Proc, nPartId, tvtN, nSideFace, ptPs, tDimAndRef, nUseRoughTool, dAng, sPocketing, dPrevFaceElev) local sMchFind = 'Pocket' @@ -4489,14 +4469,12 @@ local function MakeSpecialThreeFaces( Proc, nPhase, bIsL, nRawId, nPartId, dOvmH if abs( vtN2:getX()) > 0.7 or abs( vtN2:getY()) > 0.7 or abs( vtN2:getZ()) > 0.7 then dCollSic2 = 0 end local sPocketing local nPockFace - -- controllo se le facce sono ortogonali - --local dOrtho = AreFacesOrthogonal( Proc.Id, nFacInd, nFacInd2) + -- controllo se tutte le facce sono ortogonali local dOrtho = AreAllFacesOrthogonal( Proc.Id) - if (dOrtho == 0) then -- ortogonali + if (dOrtho == 0) then -- tutte ortogonali sPocketing = ML.FindPocketing( sMchFind, dDiam2, dFacElev2 + dCollSic2) nPockFace = nFacInd2 - -- se non trova una svuotatura adatta provo ad assegnarla all'altra faccia if not sPocketing then if (dOrtho == 0) then @@ -4532,6 +4510,7 @@ local function MakeSpecialThreeFaces( Proc, nPhase, bIsL, nRawId, nPartId, dOvmH EgtOutLog( sErr) return false, sErr end + -- tentativo di lavorazione per tacca non aperta (almeno una faccia è overcut) elseif (dOrtho > 0) then -- overcut (angolo aperto) -- inizio con la prima faccia per la svuotatura @@ -4543,7 +4522,6 @@ local function MakeSpecialThreeFaces( Proc, nPhase, bIsL, nRawId, nPartId, dOvmH EgtOutLog( sErr) return false, sErr end - -- Recupero le facce adiacenti alla principale local vAdj = EgtSurfTmFacetAdjacencies( Proc.Id, nFacInd)[1] if not vAdj or #vAdj == 0 then