diff --git a/LuaLibs/WProcessFreeContour.lua b/LuaLibs/WProcessFreeContour.lua index 1655ff4..8a22515 100644 --- a/LuaLibs/WProcessFreeContour.lua +++ b/LuaLibs/WProcessFreeContour.lua @@ -773,7 +773,7 @@ local function AddMillCornerMachining( nPartId, nNewProc, nFacInd, tFacAdj, nTyp ptApPoint = ptLocP1 end nAuxId = EgtLine( nAddGrpId, tFacAdj[1][nIdEndPoint] + Point3d( 0, 0, -dDepthMach), ptApPoint + Point3d( 0, 0, -dDepthMach), GDB_RT.GLOB) - local dLenTrimExt = dist( tFacAdj[1][nIdEndPoint], ptApPoint) - (( dToolDiam/2) + 2) + local dLenTrimExt = dist( tFacAdj[1][nIdEndPoint], ptApPoint) - (( dToolDiam/2) + 0.2) -- se la distanza dei due punti della linea è maggiore dal raggio fresa + delta, trimmo al raggio fresa + delta if dLenTrimExt > 10 * GEO.EPS_SMALL then EgtTrimExtendCurveByLen( nAuxId , -dLenTrimExt, ptApPoint + Point3d( 0, 0, -dDepthMach), GDB_RT.GLOB) @@ -811,7 +811,7 @@ local function AddMillCornerMachining( nPartId, nNewProc, nFacInd, tFacAdj, nTyp -- se offset angolare valido e/o negativo creo il baffo precedente if dOffsAng > -( 100 * GEO.EPS_SMALL) then nAuxId = EgtLine( nAddGrpId, tFacAdj[1][nIdEndPoint] + Point3d( 0, 0, -dDepthMach), ptApPoint + Point3d( 0, 0, -dDepthMach), GDB_RT.GLOB) - local dLenTrimExt = dist( tFacAdj[1][nIdEndPoint], ptApPoint) - (( dToolDiam/2) + 2) + local dLenTrimExt = dist( tFacAdj[1][nIdEndPoint], ptApPoint) - (( dToolDiam/2) + 0.2) -- se la distanza dei due punti della linea è maggiore dal raggio fresa + delta, trimmo al raggio fresa + delta if dLenTrimExt > 10 * GEO.EPS_SMALL then EgtTrimExtendCurveByLen( nAuxId , -dLenTrimExt, ptApPoint + Point3d( 0, 0, -dDepthMach), GDB_RT.GLOB) diff --git a/LuaLibs/WProcessLapJoint.lua b/LuaLibs/WProcessLapJoint.lua index 63c50ec..867caaf 100644 --- a/LuaLibs/WProcessLapJoint.lua +++ b/LuaLibs/WProcessLapJoint.lua @@ -205,75 +205,55 @@ end --------------------------------------------------------------------- local function ReorderFaces( nIdSurf, nNumFacet) - local vAdj = {} + -- cerco una faccia senza precedenti + local nFirstFac for i = 1, nNumFacet do - local vFacAdj = EgtSurfTmFacetAdjacencies( nIdSurf, 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 - end - local nIdFace - local nAdjMin = 1000 - for i = #vAdj, 1, -1 do - if vAdj[i] <= nAdjMin then - nAdjMin = vAdj[i] - nIdFace = i - end - end - -- se il numero faccia minore con minori adiacenze è <> 1 faccio lo scambio - if nIdFace and nIdFace ~= 1 then - EgtSurfTmSwapFacets( nIdSurf, nIdFace-1, 0) - end - -- ordino il numero di facce in modo da avere una sequenza di facce concatenate - for i = 1, (nNumFacet-1) do - -- recupero l'angolo con la faccia precedente - local bAdj, _, _, _ = EgtSurfTmFacetsContact( nIdSurf, i-1, i, GDB_ID.ROOT) - -- se non ho adiacenza - if not bAdj then - for j = i+1, nNumFacet do - bAdj, _, _, _ = EgtSurfTmFacetsContact( nIdSurf, i-1, j-1, GDB_ID.ROOT) - -- se ho adiacenza scambio le facce - if bAdj then - EgtSurfTmSwapFacets( nIdSurf, i, (j-1)) + -- centro e normale della faccia + local ptCen, vtN = EgtSurfTmFacetCenter( nIdSurf, i - 1, GDB_ID.ROOT) + -- verifico con le altre facce + local bFoundPrec + for j = 1, nNumFacet do + if j ~= i then + -- verifico se è precedente + local bAdj, ptP1, _, _ = EgtSurfTmFacetsContact( nIdSurf, i - 1, j - 1, GDB_ID.ROOT) + if bAdj and ( vtN ^ ( ptCen - ptP1)) * Z_AX() > 0 then + bFoundPrec = true break end end end + if not bFoundPrec then + nFirstFac = i + break + end + end + -- se trovata, la metto al primo posto + if nFirstFac and nFirstFac ~= 1 then + EgtSurfTmSwapFacets( nIdSurf, nFirstFac - 1, 0) + end + -- ordino le facce in modo da avere una sequenza ordinata con le normali a destra + for i = 1, nNumFacet - 1 do + -- centro e normale della faccia + local ptCen, vtN = EgtSurfTmFacetCenter( nIdSurf, i - 1, GDB_ID.ROOT) + -- cerco la successiva + for j = i + 1, nNumFacet do + -- verifico se è successiva + local bAdj, ptP1, _, _ = EgtSurfTmFacetsContact( nIdSurf, i - 1, j - 1, GDB_ID.ROOT) + if bAdj and ( vtN ^ ( ptP1 - ptCen)) * Z_AX() > 0 then + EgtSurfTmSwapFacets( nIdSurf, i, j - 1) + break + end + end end - return nIdSurf end --------------------------------------------------------------------- local function RemoveBottomFaceAndReorder( Proc, nAddGrpId, nFaceToDel) - -- copio la superfice nel gruppo ausiliario local nNewProc = EgtCopyGlob( Proc.Id, nAddGrpId) or GDB_ID.NULL EgtSurfTmRemoveFacet( nNewProc, nFaceToDel) local nNumFacet = EgtSurfTmFacetCount( nNewProc) - nNewProc = ReorderFaces( nNewProc, nNumFacet) ---[[ - -- ordino il numero di facce in modo da avere una sequenza di facce concatenate - for i = 1, (nNumFacet-1) do - -- recupero l'angolo con la faccia precedente - local bAdj, _, _, _ = EgtSurfTmFacetsContact( nNewProc, i-1, i, GDB_ID.ROOT) - -- se non ho adiacenza - if not bAdj then - for j = i+1, nNumFacet do - bAdj, _, _, _ = EgtSurfTmFacetsContact( nNewProc, i-1, j-1, GDB_ID.ROOT) - -- se ho adiacenza scambio le facce - if bAdj then - EgtSurfTmSwapFacets( nNewProc, i, (j-1)) - break - end - end - end - end -]]-- + ReorderFaces( nNewProc, nNumFacet) return nNewProc, nNumFacet end @@ -284,7 +264,7 @@ local function GetFacesData( nNewProc, bOpposite, bCalclForBlade, dToolDiam, dTo local vFace = {} -- recupero i dati di tutte le facce for i = 1, nNumFacet do - -- indice faccia corrente e precedente + -- indici faccia corrente e precedente local nFac = EgtIf( bOpposite, nNumFacet - i, i - 1) local nPrecFac if bOpposite then @@ -298,6 +278,12 @@ local function GetFacesData( nNewProc, bOpposite, bCalclForBlade, dToolDiam, dTo local _, dLen, dWidth = WL.GetFaceHvRefDim( nNewProc, nFac) -- recupero l'angolo con la faccia precedente local bAdj, ptLocP1, ptLocP2, dAng = EgtSurfTmFacetsContact( nNewProc, nPrecFac, nFac, GDB_ID.ROOT) + -- verifico che l'adiacenza sia veramente con il precedente (percorro con normale a destra) + if bAdj then + if ( vtN ^ ( ptLocP1 - ptCen)) * Z_AX() > 0 then + bAdj = false + end + end -- salvo i dati vFace[i] = { Fac = nFac, Cen = ptCen, Norm = vtN, Len = dLen, Width = dWidth, AngPrev = EgtIf( bAdj, dAng, 0)} if bAdj then @@ -322,7 +308,7 @@ local function GetFacesData( nNewProc, bOpposite, bCalclForBlade, dToolDiam, dTo end -- lunghezza baffo local dElev = vFace[i].Width + dDepth - local dWhisk = EgtIf( bCalclForBlade, ( dElev * sqrt( dToolDiam / dElev - 1) + WHISK_SAFE) , (dToolDiam/2) + WHISK_SAFE) + local dWhisk = EgtIf( bCalclForBlade, ( dElev * sqrt( dToolDiam / dElev - 1) + WHISK_SAFE), (dToolDiam/2) + WHISK_SAFE) -- determino la lunghezza del taglio passante e il tipo di attacco e uscita local dLen = vFace[i].Len local nType = 0 @@ -505,7 +491,7 @@ local function ReorderFacesFromTab( nIdSurf, vFace) local ptC, vtN = EgtSurfTmFacetCenter( nIdSurf, (j-1), GDB_ID.ROOT) -- se versore e posizione coincidono e non corrispondono al numero faccia, faccio lo swap if AreSameVectorExact( vFace[i].Norm, vtN) and AreSamePointEpsilon( vFace[i].Cen, ptC, 50*GEO.EPS_SMALL) then - if (j-1) ~= vFace[i].Fac then + if j - 1 ~= vFace[i].Fac then EgtSurfTmSwapFacets( nIdSurf, vFace[i].Fac, (j-1)) end break @@ -677,7 +663,7 @@ local function AddMillCornerMachining( nPartId, nNewProc, nFacInd, tFacAdj, nTyp ptApPoint = ptLocP1 end nAuxId = EgtLine( nAddGrpId, tFacAdj[1][nIdEndPoint] + Point3d( 0, 0, -dDepthMach), ptApPoint + Point3d( 0, 0, -dDepthMach), GDB_RT.GLOB) - local dLenTrimExt = dist( tFacAdj[1][nIdEndPoint], ptApPoint) - (( dToolDiam/2) + 2) + local dLenTrimExt = dist( tFacAdj[1][nIdEndPoint], ptApPoint) - (( dToolDiam/2) + 0.2) -- se la distanza dei due punti della linea è maggiore dal raggio fresa + delta, trimmo al raggio fresa + delta if dLenTrimExt > 10 * GEO.EPS_SMALL then EgtTrimExtendCurveByLen( nAuxId , -dLenTrimExt, ptApPoint + Point3d( 0, 0, -dDepthMach), GDB_RT.GLOB) @@ -715,7 +701,7 @@ local function AddMillCornerMachining( nPartId, nNewProc, nFacInd, tFacAdj, nTyp -- se offset angolare valido e/o negativo creo il baffo precedente if dOffsAng > -( 100 * GEO.EPS_SMALL) then nAuxId = EgtLine( nAddGrpId, tFacAdj[1][nIdEndPoint] + Point3d( 0, 0, -dDepthMach), ptApPoint + Point3d( 0, 0, -dDepthMach), GDB_RT.GLOB) - local dLenTrimExt = dist( tFacAdj[1][nIdEndPoint], ptApPoint) - (( dToolDiam/2) + 2) + local dLenTrimExt = dist( tFacAdj[1][nIdEndPoint], ptApPoint) - (( dToolDiam/2) + 0.2) -- se la distanza dei due punti della linea è maggiore dal raggio fresa + delta, trimmo al raggio fresa + delta if dLenTrimExt > 10 * GEO.EPS_SMALL then EgtTrimExtendCurveByLen( nAuxId , -dLenTrimExt, ptApPoint + Point3d( 0, 0, -dDepthMach), GDB_RT.GLOB) @@ -857,7 +843,7 @@ local function AddMillCorner( nTypeConeCut, vFace, Proc, nRawId, b3Raw, dMillDiam = EgtTdbGetCurrToolParam( MCH_TP.DIAM) or dMillDiam dThickTool = EgtTdbGetCurrToolParam( MCH_TP.THICK) or dThickTool dToolLength = EgtTdbGetCurrToolParam( MCH_TP.LEN) or dToolLength - dMaxDepth = EgtTdbGetCurrToolParam( MCH_TP.MAXMAT) or dMaxDepth -- qui è la distanza dal portautensile + dMaxDepth = EgtTdbGetCurrToolMaxDepth() or dMaxDepth -- qui è la distanza dal portautensile -- calcolo il secondo diametro del cono dMillTotDiam = dMillDiam + ( abs(dThickTool) * tan(dSideAng)) * 2 end