Compare commits

..

3 Commits

Author SHA1 Message Date
daniele.nicoli d756e4c44d LapJoint - CleanCorner ora funziona anche su tasche a 3 facce a U. 2026-06-23 08:53:15 +02:00
daniele.nicoli d2a9e9e189 LapJoint - migliorata gestione BirdsMouth con più di 3 facce 2026-06-19 09:31:19 +02:00
andrea.villa 8925c73639 Merge branch 'master' into develop 2026-06-18 16:50:32 +02:00
+113 -14
View File
@@ -1004,7 +1004,7 @@ end
--------------------------------------------------------------------- ---------------------------------------------------------------------
-- Lavorazione con fresa -- Lavorazione con fresa
--------------------------------------------------------------------- ---------------------------------------------------------------------
local function MakeOneFaceByMill( Proc, nPhase, nRawId, nPartId) local function MakeOneFaceByMill( Proc, nPhase, nRawId, nPartId, nForcedFacInd, nSideInd)
-- recupero l'ingombro del grezzo di appartenenza -- recupero l'ingombro del grezzo di appartenenza
local b3Raw = EgtGetRawPartBBox( nRawId) local b3Raw = EgtGetRawPartBBox( nRawId)
-- recupero l'ingombro della trave -- recupero l'ingombro della trave
@@ -1015,13 +1015,16 @@ local function MakeOneFaceByMill( Proc, nPhase, nRawId, nPartId)
return false, sErr return false, sErr
end end
-- verifico il numero di facce della tacca -- verifico il numero di facce della tacca
assert( ( Proc.Fct == 1), 'Error : MakeOneFaceByMill in LapJoint with ' .. tostring( Proc.Fct) .. ' faces') if not nForcedFacInd then
assert( ( Proc.Fct == 1), 'Error : MakeOneFaceByMill in LapJoint with ' .. tostring( Proc.Fct) .. ' faces')
nForcedFacInd = 0
end
-- dati della faccia -- dati della faccia
local ptC, vtN = EgtSurfTmFacetCenter( Proc.Id, 0, GDB_ID.ROOT) local ptC, vtN = EgtSurfTmFacetCenter( Proc.Id, nForcedFacInd, GDB_ID.ROOT)
-- verifico se orientata verso l'alto -- verifico se orientata verso l'alto
local bUp = ( vtN:getZ() >= BD.NZ_MINA) local bUp = ( vtN:getZ() >= BD.NZ_MINA)
-- scelta faccia da lavorare -- scelta faccia da lavorare
local nFacInd = 0 local nFacInd = nForcedFacInd
-- recupero la lavorazione -- recupero la lavorazione
local sMilling = ML.FindMilling( 'BirdsMouth') local sMilling = ML.FindMilling( 'BirdsMouth')
if not sMilling then if not sMilling then
@@ -1029,6 +1032,16 @@ local function MakeOneFaceByMill( Proc, nPhase, nRawId, nPartId)
EgtOutLog( sErr) EgtOutLog( sErr)
return false, sErr return false, sErr
end end
local dTDiam = 50
local dMaxMat = 0
if EgtMdbSetCurrMachining( sMilling) then
local sTuuid = EgtMdbGetCurrMachiningParam( MCH_MP.TUUID)
if EgtTdbSetCurrTool( EgtTdbGetToolFromUUID( sTuuid) or '') then
dTDiam = EgtTdbGetCurrToolParam( MCH_TP.DIAM) or dTDiam
dMaxMat = EgtTdbGetCurrToolParam( MCH_TP.MAXMAT) or dMaxMat
end
end
dTDiam = EgtTdbGetCurrToolParam( MCH_TP.DIAM) or dTDiam
-- inserisco la lavorazione di fresatura -- inserisco la lavorazione di fresatura
local sName = 'Mill_' .. ( EgtGetName( Proc.Id) or tostring( Proc.Id)) local sName = 'Mill_' .. ( EgtGetName( Proc.Id) or tostring( Proc.Id))
local nMchFId = EgtAddMachining( sName, sMilling) local nMchFId = EgtAddMachining( sName, sMilling)
@@ -1039,8 +1052,17 @@ local function MakeOneFaceByMill( Proc, nPhase, nRawId, nPartId)
end end
-- aggiungo geometria -- aggiungo geometria
EgtSetMachiningGeometry( {{ Proc.Id, nFacInd}}) EgtSetMachiningGeometry( {{ Proc.Id, nFacInd}})
-- imposto uso faccia e lato correzione -- imposto uso faccia e lato correzione se forzate da fuori forzo lavorazione della faccia
if vtN:getX() > 0 then if nSideInd and nForcedFacInd then
EgtSetMachiningParam( MCH_MP.FACEUSE, MCH_MILL_FU.NONE)
EgtSetMachiningParam( MCH_MP.ENDADDLEN, -dTDiam / 2)
EgtSetMachiningParam( MCH_MP.STARTADDLEN, -dTDiam / 2)
local sUserNotes = EgtGetMachiningParam( MCH_MP.USERNOTES) or ''
sUserNotes = EgtSetValInNotes( sUserNotes, 'EdgesFaceUse', EgtNumToString( nSideInd))
EgtSetMachiningParam( MCH_MP.USERNOTES, sUserNotes)
EgtSetMachiningParam( MCH_MP.LIPERP, dTDiam / 2)
EgtSetMachiningParam( MCH_MP.LOPERP, dTDiam / 2)
elseif vtN:getX() > 0 then
EgtSetMachiningParam( MCH_MP.FACEUSE, EgtIf( bUp, MCH_MILL_FU.ORTHO_LEFT, MCH_MILL_FU.PARAL_LEFT)) EgtSetMachiningParam( MCH_MP.FACEUSE, EgtIf( bUp, MCH_MILL_FU.ORTHO_LEFT, MCH_MILL_FU.PARAL_LEFT))
else else
EgtSetMachiningParam( MCH_MP.FACEUSE, EgtIf( bUp, MCH_MILL_FU.ORTHO_RIGHT, MCH_MILL_FU.PARAL_RIGHT)) EgtSetMachiningParam( MCH_MP.FACEUSE, EgtIf( bUp, MCH_MILL_FU.ORTHO_RIGHT, MCH_MILL_FU.PARAL_RIGHT))
@@ -4767,7 +4789,7 @@ local function MakeByPockets( Proc, nPhase, nRawId, nPartId, nChamfer, dDepthCha
end end
end 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 end
end end
@@ -7511,14 +7533,34 @@ local function MakeMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead, bSinglePa
end end
-- provo con contornatura -- provo con contornatura
local dDiamTool = 20 local dDiamTool = 20
local nChoosenFacInd = nFacInd2
local dChoosenFacElev = dFacElev2
if bIsL then if bIsL then
local bOk, sErr local bOk, sErr
bOk, sWarn, dDiamTool = MakeByMill( Proc, nPhase, nRawId, nPartId, nFacInd, rfFac, dH, dV, dFacElev, dCollSic, true, sMilling, nFacInd2, dFacElev2) bOk, sWarn, dDiamTool = MakeByMill( Proc, nPhase, nRawId, nPartId, nFacInd, rfFac, dH, dV, dFacElev, dCollSic, true, sMilling, nFacInd2, dFacElev2)
if not bOk then return bOk, sWarn end if not bOk then return bOk, sWarn end
else else
local sErr = 'Error : Impossible mill special LapJoint' -- provo ancora con la pocketing dell'altra faccia
EgtOutLog( sErr) local sPocketing = ML.FindPocketing( sMchFind, dDiam, dFacElev + dCollSic)
return false, sErr if sPocketing then
nChoosenFacInd = nFacInd
dChoosenFacElev = dFacElev
local Edges = BL.GetEdgesInfo( Proc, Proc.Face[nFacInd+1])
local nSideInd
for i = 1, #Edges do
if Edges[i].AdjacentFaceId == nFacInd2 then
nSideInd = i - 1
break
end
end
-- se pocketing ok forza facet e spigolo di lavoro
bOk, sWarn = MakeOneFaceByMill( Proc, nPhase, nRawId, nPartId, nFacInd2, nSideInd)
if not bOk then return bOk, sWarn end
else
local sErr = 'Error : Impossible mill special LapJoint'
EgtOutLog( sErr)
return false, sErr
end
end end
-- inserisco la lavorazione di svuotatura -- inserisco la lavorazione di svuotatura
local sName = 'Pock_' .. ( EgtGetName( Proc.Id) or tostring( Proc.Id)) local sName = 'Pock_' .. ( EgtGetName( Proc.Id) or tostring( Proc.Id))
@@ -7529,7 +7571,7 @@ local function MakeMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead, bSinglePa
return false, sErr return false, sErr
end end
-- aggiungo geometria -- aggiungo geometria
EgtSetMachiningGeometry( {{ Proc.Id, nFacInd2}}) EgtSetMachiningGeometry( {{ Proc.Id, nChoosenFacInd}})
-- imposto uso faccia -- imposto uso faccia
EgtSetMachiningParam( MCH_MP.FACEUSE, MCH_MILL_FU.ORTHO_CONT) EgtSetMachiningParam( MCH_MP.FACEUSE, MCH_MILL_FU.ORTHO_CONT)
-- imposto posizione braccio porta testa -- imposto posizione braccio porta testa
@@ -7544,7 +7586,7 @@ local function MakeMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead, bSinglePa
end end
-- imposto elevazione -- imposto elevazione
local sUserNotes = EgtGetMachiningParam( MCH_MP.USERNOTES) or '' local sUserNotes = EgtGetMachiningParam( MCH_MP.USERNOTES) or ''
sUserNotes = EgtSetValInNotes( sUserNotes, 'MaxElev', EgtNumToString( dFacElev2, 1)) sUserNotes = EgtSetValInNotes( sUserNotes, 'MaxElev', EgtNumToString( dChoosenFacElev, 1))
EgtSetMachiningParam( MCH_MP.USERNOTES, sUserNotes) EgtSetMachiningParam( MCH_MP.USERNOTES, sUserNotes)
-- eseguo -- eseguo
if not ML.ApplyMachining( true, false) then if not ML.ApplyMachining( true, false) then
@@ -8068,7 +8110,7 @@ local function MakeMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead, bSinglePa
bSetOpenBorders = true bSetOpenBorders = true
end end
nOk, sErr, dDimMin, dDimMax, dDepth, vtOrtho, nLundIdFace, dDiamTool, bDoubleSide, nPathInt, nSurfInt, bOneShot, bMillDown, nFirstMachId, 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 if nOk == -3 then
bTryWithBlades = true bTryWithBlades = true
elseif nOk == -2 then elseif nOk == -2 then
@@ -8102,6 +8144,7 @@ local function MakeMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead, bSinglePa
end end
-- se abilitato dal parametro Q inserisco pulitura spigoli o contorno con fresa più piccola -- 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 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 if nContourSmallTool > 0 then
local bOk, sWarn2 = MakeRoundCleanCornerOrContour( Proc, nPhase, nRawId, nPartId, b3Raw, local bOk, sWarn2 = MakeRoundCleanCornerOrContour( Proc, nPhase, nRawId, nPartId, b3Raw,
nFacInd, nAddGrpId, dDiamTool, nContourSmallTool, bMillDown, nFacInd, nAddGrpId, dDiamTool, nContourSmallTool, bMillDown,
@@ -8113,6 +8156,43 @@ local function MakeMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead, bSinglePa
sWarn = EgtIf( #sWarn > 0, sWarn .. '\n' .. sWarn2, sWarn2) sWarn = EgtIf( #sWarn > 0, sWarn .. '\n' .. sWarn2, sWarn2)
end end
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
end end
bOk = true bOk = true
@@ -8328,7 +8408,26 @@ local function MakeMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead, bSinglePa
-- se richiesta pulizia spigoli con fresa a V -- se richiesta pulizia spigoli con fresa a V
if nCleanCorner > 0 then if nCleanCorner > 0 then
local dThElev = dToolThDiameter / 2 * sqrt( vtN:getX() * vtN:getX() + vtN:getY() * vtN:getY()) 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 vFace, dDepth = GetFacesData( nNewProc, dToolDiameter, dMaxToolMaterial, ( dToolDiameter/2), nAddGrpId, Proc.PartId, vtN)
local bCleanCornerOk, sCleanCornerWarn = AddMillCorner( vFace, Proc, dToolDiameter, nAddGrpId, nNewProc, vtN) local bCleanCornerOk, sCleanCornerWarn = AddMillCorner( vFace, Proc, dToolDiameter, nAddGrpId, nNewProc, vtN)
if not bCleanCornerOk then return false, sCleanCornerWarn end if not bCleanCornerOk then return false, sCleanCornerWarn end