From d756e4c44d040c72da9e7c91ca604aab511c9837 Mon Sep 17 00:00:00 2001 From: "daniele.nicoli" Date: Tue, 23 Jun 2026 08:53:15 +0200 Subject: [PATCH] LapJoint - CleanCorner ora funziona anche su tasche a 3 facce a U. --- LuaLibs/ProcessLapJoint.lua | 63 +++++++++++++++++++++++++++++++++++-- 1 file changed, 60 insertions(+), 3 deletions(-) diff --git a/LuaLibs/ProcessLapJoint.lua b/LuaLibs/ProcessLapJoint.lua index e7a3caf..f507527 100644 --- a/LuaLibs/ProcessLapJoint.lua +++ b/LuaLibs/ProcessLapJoint.lua @@ -4789,7 +4789,7 @@ local function MakeByPockets( Proc, nPhase, nRawId, nPartId, nChamfer, dDepthCha end end end - return 1, sWarn, dDimMin, dDimMax, dDepth, vtOrtho, nLundIdFace, dDiamTool, bDoubleSide, nPathInt, nSurfInt, bOneShot, bMillDown, nFirstMachId + return 1, sWarn, dDimMin, dDimMax, dDepth, vtOrtho, nLundIdFace, dDiamTool, bDoubleSide, nPathInt, nSurfInt, bOneShot, bMillDown, nFirstMachId, nil, sPocketing end end end @@ -8110,7 +8110,7 @@ local function MakeMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead, bSinglePa bSetOpenBorders = true end nOk, sErr, dDimMin, dDimMax, dDepth, vtOrtho, nLundIdFace, dDiamTool, bDoubleSide, nPathInt, nSurfInt, bOneShot, bMillDown, nFirstMachId, - bOrthoFaces = MakeByPockets( Proc, nPhase, nRawId, nPartId, nChamfer, dDepthCham, nAddGrpId, sMyMchFind, bIs3Faces, b3Solid, bOrthoFacesMaster, bMillDown, bSetOpenBorders, bIsU, bIsL) + bOrthoFaces, sPocketing = MakeByPockets( Proc, nPhase, nRawId, nPartId, nChamfer, dDepthCham, nAddGrpId, sMyMchFind, bIs3Faces, b3Solid, bOrthoFacesMaster, bMillDown, bSetOpenBorders, bIsU, bIsL) if nOk == -3 then bTryWithBlades = true elseif nOk == -2 then @@ -8144,6 +8144,7 @@ local function MakeMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead, bSinglePa end -- se abilitato dal parametro Q inserisco pulitura spigoli o contorno con fresa più piccola local nContourSmallTool = EgtGetInfo( Proc.Id, Q_CONTOUR_SMALL_TOOL, 'i') or 0 + local nCleanCorner = EgtGetInfo( Proc.Id, Q_CLEAN_CORNER, 'i') or 0 if nContourSmallTool > 0 then local bOk, sWarn2 = MakeRoundCleanCornerOrContour( Proc, nPhase, nRawId, nPartId, b3Raw, nFacInd, nAddGrpId, dDiamTool, nContourSmallTool, bMillDown, @@ -8155,6 +8156,43 @@ local function MakeMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead, bSinglePa sWarn = EgtIf( #sWarn > 0, sWarn .. '\n' .. sWarn2, sWarn2) end end + -- se richiesta pulizia spigoli con fresa a V + if nCleanCorner > 0 then + local dMaxToolMaterial = 0 + if EgtMdbSetCurrMachining( sPocketing) then + local sTuuidPk = EgtMdbGetCurrMachiningParam( MCH_MP.TUUID) + if EgtTdbSetCurrTool( EgtTdbGetToolFromUUID( sTuuidPk) or '') then + dMaxToolMaterial = EgtTdbGetCurrToolParam( MCH_TP.MAXMAT) or dMaxToolMaterial + end + end + local nNewProc + local vtSpec = vtN + if not ( Proc.Fct == 3 and bIsU) then + nNewProc = RemoveBottomFaceAndReorder( Proc, nAddGrpId, nFacInd, vtN) + -- se U passante ricavo vettore da "sopra" con componente Z forzata in positivo + else + nNewProc = EgtCopyGlob( Proc.Id, nAddGrpId) or GDB_ID.NULL + local nNumFacet = EgtSurfTmFacetCount( nNewProc) + -- vettore normale ad una delle facce adiacenti + local vtOther = EgtSurfTmFacetNormVersor( Proc.Id, Proc.Face[nFacInd+1].Adjacencies[1], GDB_ID.ROOT) + -- ricavo vettore verso l'alto (simulo faccia di fondo) + vtSpec = vtN ^ vtOther + -- se negativo in Z forzo positivo + if vtSpec:getZ() < 0 then + vtSpec:mirror(vtSpec) + end + ReorderFaces( nNewProc, nNumFacet, vtSpec) + -- normale della lavorazione clean corner + vtN = vtSpec + end + local vFace, dDepth = GetFacesData( nNewProc, dDiamTool, dMaxToolMaterial, ( dDiamTool/2), nAddGrpId, Proc.PartId, vtN) + local bCleanCornerOk, sCleanCornerWarn = AddMillCorner( vFace, Proc, dDiamTool, nAddGrpId, nNewProc, vtN) + if not bCleanCornerOk then return false, sCleanCornerWarn end + if sCleanCornerWarn then + if not sWarn then sWarn = '' end + sWarn = EgtIf( #sWarn > 0, sWarn .. '\n' .. sCleanCornerWarn, sCleanCornerWarn) + end + end end end bOk = true @@ -8370,7 +8408,26 @@ local function MakeMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead, bSinglePa -- se richiesta pulizia spigoli con fresa a V if nCleanCorner > 0 then local dThElev = dToolThDiameter / 2 * sqrt( vtN:getX() * vtN:getX() + vtN:getY() * vtN:getY()) - local nNewProc = RemoveBottomFaceAndReorder( Proc, nAddGrpId, nFacInd, vtN) + local nNewProc + local vtSpec = vtN + if not ( Proc.Fct == 3 and bIsU) then + nNewProc = RemoveBottomFaceAndReorder( Proc, nAddGrpId, nFacInd, vtN) + -- se U passante ricavo vettore da "sopra" con componente Z forzata in positivo + else + nNewProc = EgtCopyGlob( Proc.Id, nAddGrpId) or GDB_ID.NULL + local nNumFacet = EgtSurfTmFacetCount( nNewProc) + -- vettore normale ad una delle facce adiacenti + local vtOther = EgtSurfTmFacetNormVersor( Proc.Id, Proc.Face[nFacInd+1].Adjacencies[1], GDB_ID.ROOT) + -- ricavo vettore verso l'alto (simulo faccia di fondo) + vtSpec = vtN ^ vtOther + -- se negativo in Z forzo positivo + if vtSpec:getZ() < 0 then + vtSpec:mirror(vtSpec) + end + ReorderFaces( nNewProc, nNumFacet, vtSpec) + -- normale della lavorazione clean corner + vtN = vtSpec + end local vFace, dDepth = GetFacesData( nNewProc, dToolDiameter, dMaxToolMaterial, ( dToolDiameter/2), nAddGrpId, Proc.PartId, vtN) local bCleanCornerOk, sCleanCornerWarn = AddMillCorner( vFace, Proc, dToolDiameter, nAddGrpId, nNewProc, vtN) if not bCleanCornerOk then return false, sCleanCornerWarn end