Compare commits

...

12 Commits

Author SHA1 Message Date
luca.mazzoleni 3edc65b785 Merge branch 'release/3.1c1' 2026-03-04 17:59:05 +01:00
luca.mazzoleni eb4f709db3 update version e log 2026-03-04 17:58:48 +01:00
andrea.villa f6316cc75a Nella OrderFeature non si considerano più le dipendenze, veniva già fatto tutto nella ReorderFeatureWithDependency 2026-03-04 17:32:36 +01:00
daniele.nicoli 261ce7992d Merge branch 'Fixed_duplicate_predrill' into develop 2026-02-27 15:49:12 +01:00
daniele.nicoli 48a1139eea - BeamExec, tolta duplicazione pre-foro nella BeamExec.ProcessBeam()
- ProcessDrill, sistemata dichiarazione local di alcune variabili usate anche dopo l'if
2026-02-27 15:31:47 +01:00
luca.mazzoleni 70b2002a24 Merge tag '3.1b1' into develop
3.1b1
2026-02-26 12:49:45 +01:00
luca.mazzoleni f14cb632d6 Merge branch 'release/3.1b1' 2026-02-26 12:49:35 +01:00
luca.mazzoleni f019633466 update version e log 2026-02-26 12:49:17 +01:00
luca.mazzoleni 57833ebad9 - in ProcessDrill se foratura in doppio si aggiunge la nota LastStep per garantire che non ci siano collisioni tra le punte e prevenire extracorsa 2026-02-26 11:34:41 +01:00
luca.mazzoleni 04a4458562 Merge commit 'b150b5387d73082d6f8904a270b115a1cabbb487' into develop 2026-02-25 19:00:14 +01:00
luca.mazzoleni b150b5387d - in Long2Cut correzione al LeadIn/Out 2026-02-25 18:34:59 +01:00
daniele.nicoli ce05aed8c9 LapJoint, Features lunghe spezzate, forzato parametro invert=false se tasca larga come l'utensile (solo 1 passata senza ritorno all'esterno del pezzo) 2026-02-25 15:14:52 +01:00
6 changed files with 62 additions and 35 deletions
+3 -10
View File
@@ -304,7 +304,7 @@ local function NeedTopologyFeature( Proc)
end
-------------------------------------------------------------------------------------------------------------
local function CollectFeatures( PartId, b3Raw, dCurrOvmH, dCurrOvmT)
local function CollectFeatures( PartId, b3Raw, dCurrOvmH, dCurrOvmT, bCreatePreDrill)
local dRawW = b3Raw:getDimY()
local dRawH = b3Raw:getDimZ()
-- recupero le feature
@@ -365,7 +365,7 @@ local function CollectFeatures( PartId, b3Raw, dCurrOvmH, dCurrOvmT)
-- assegno diametro e facce di ingresso e uscita (dati tabelle sempre per riferimento)
Proc.Diam, Proc.Len, Proc.Fcs, Proc.Fce = Drill.GetData( Proc, b3Raw)
-- verifico se devo inserire i prefori
if Drill.IsPredrillNeeded( Proc) then
if Drill.IsPredrillNeeded( Proc) and bCreatePreDrill then
local bAddProc, PredrillProc= Drill.AddPredrillFromDrillProc( Proc)
if bAddProc then
table.insert( vProc, PredrillProc)
@@ -949,13 +949,6 @@ local function OrderFeatures( vProc, b3Raw, nPartId)
if Hcut.Identify( B2) then
return false
end
-- se uno dipende dall'altro
if B1.Dependency and B1.Dependency.ExecBefore and B1.Dependency.ExecBefore.Id == B2.Id then
return true
end
if B2.Dependency and B2.Dependency.ExecBefore and B2.Dependency.ExecBefore.Id == B1.Id then
return false
end
-- se uno di testa e non l'altro, privilegio quello di testa (a meno che non siano dei fori)
if B1.Head ~= B2.Head and not Drill.Identify(B1) and not Drill.Identify(B2) then
return B1.Head
@@ -2315,7 +2308,7 @@ function BeamExec.ProcessFeatures()
local dCurrOvmH = EgtGetInfo( nRawId, 'HOVM', 'd') or 0
local dCurrOvmT = EgtGetInfo( nRawId, 'TOVM', 'd') or 0
-- recupero le feature di lavorazione della trave
local vProc = CollectFeatures( nPartId, b3Raw, dCurrOvmH, dCurrOvmT)
local vProc = CollectFeatures( nPartId, b3Raw, dCurrOvmH, dCurrOvmT, true)
-- recupero informazioni ausiliarie feature e dipendenze tra feature stesse
GetFeatureInfoAndDependency( vProc, b3Raw, nPartId)
+17 -10
View File
@@ -387,10 +387,11 @@ function ProcessDrill.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH)
EgtOutLog( sErr)
return false, sErr
end
local nFac, CosB
-- se non già richiesta inversione e invertibile
if not bToInvert and Proc.Flg == 1 and -vtExtr:getZ() >= BD.DRILL_VZ_MIN then
-- se il foro è cieco o dalla faccia sotto o troppo inclinato all'inizio, lo inverto
local nFac, CosB, _ = GetHoleStartData( ptCen, vtExtr, b3Solid)
nFac, CosB, _ = GetHoleStartData( ptCen, vtExtr, b3Solid)
if Proc.Fcs == 0 or (( nFac == 2 or CosB > BD.DRILL_VX_MAX) and bOpen) then
bToInvert = true
end
@@ -422,10 +423,11 @@ function ProcessDrill.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH)
-- primo gruppo di controlli con lunghezza utensile pari a metà foro se passante
-- recupero la lavorazione
local sDrilling, sType, dMaxDepth, dMaxToolLength, dToolDiam, dDiamTh, dToolFreeLen = ML.FindDrilling( dDiam, dCheckDepth, bDrillUp, bDrillDown, bExcludeH2, bDrillAngTrasm, Proc.IsPredrill)
local dMaxDepthOri
local vFaces
if sDrilling then
-- Determino la faccia di inizio del foro e dati correlati
local nFac, CosB, vFaces = GetHoleStartData( ptCen, vtExtr, b3Solid)
nFac, CosB, vFaces = GetHoleStartData( ptCen, vtExtr, b3Solid)
-- Calcolo acciorciamento affondamento utile per evitare collisione portautensile con faccia
local TgA = CosB / sqrt( 1 - CosB * CosB)
local dSubL = ( dDiamTh / 2 + ( Proc.Diam - dToolDiam) / 2 + 4) * TgA
@@ -433,7 +435,7 @@ function ProcessDrill.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH)
if BD.C_SIMM and CosB > 0.866 then
dSubL = ( 190 / 2 + ( Proc.Diam - dToolDiam) / 2 + 4) * TgA - 116
end
local dMaxDepthOri = dMaxDepth
dMaxDepthOri = dMaxDepth
dMaxDepth = min( dMaxDepth, max( dToolFreeLen - dSubL, 0))
-- se utensile scelto non arriva in fondo, cerco il più lungo
if dMaxDepth < GEO.EPS_SMALL * 10 then
@@ -632,6 +634,8 @@ function ProcessDrill.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH)
end
-- aggiungo geometria
EgtSetMachiningGeometry( {{ AuxId, -1}})
-- eventuali note utente
local sUserNotes = EgtGetMachiningParam( MCH_MP.USERNOTES) or ''
-- eventuale inversione
if sType == 'Drill' or sType == 'Drill_H2' or sType == 'Drill_AT' or sType == 'AngleDrill' or sType == 'Predrill' then
EgtSetMachiningParam( MCH_MP.INVERT, bToInvert)
@@ -644,10 +648,14 @@ function ProcessDrill.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH)
-- imposto affondamento
local dLastStepDepth
if Proc.Double and Proc.Double > 0 then
if ( sType == 'Pocket_AT' or sType == 'Pocket') and bOpen then
local dReduceDepth = MIRROR_POCKETS_MIN_DISTANCE / 2 + 10
dLastStepDepth = dDepth + dReduceDepth
dDepth = dDepth - dReduceDepth
if ( sType == 'Pocket_AT' or sType == 'Pocket') then
if bOpen then
local dReduceDepth = MIRROR_POCKETS_MIN_DISTANCE / 2 + 10
dLastStepDepth = dDepth + dReduceDepth
dDepth = dDepth - dReduceDepth
end
else
sUserNotes = EgtSetValInNotes( sUserNotes, 'LastStep', MIRROR_DRILLINGS_MIN_DISTANCE / 2 + 15)
end
if dDepth > Proc.MachDepthDouble + 10 * GEO.EPS_SMALL then
sMyWarn = 'Warning in double head drilling : depth (' .. EgtNumToString( dDepth, 1) .. ') reduced to (' .. EgtNumToString( Proc.MachDepthDouble, 1) .. ') to match H2 max tool depth'
@@ -661,8 +669,7 @@ function ProcessDrill.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH)
local dMinStartPos = 10
local dStartPos = max( dMinStartPos, dToolDbStartPos)
EgtSetMachiningParam( MCH_MP.STARTPOS, dStartPos)
-- Note utente con dichiarazione nessuna generazione sfridi per Vmill
local sUserNotes = EgtGetMachiningParam( MCH_MP.USERNOTES) or ''
-- dichiarazione nessuna generazione sfridi per Vmill
sUserNotes = EgtSetValInNotes( sUserNotes, 'VMRS', 0)
-- aggiungo alle note massima elevazione (coincide con affondamento)
local dCustomMaxElev
+11 -1
View File
@@ -3575,6 +3575,7 @@ local function MakePocket( Proc, nPartId, b3Solid, ptPs, tvtN, nFaceRef, sMchFin
local _, dH, dV = EgtSurfTmFacetMinAreaRectangle( Proc.Id, nFaceRef, GDB_ID.ROOT)
local bL = ( Proc.Fct < 4 or TestElleShape4( Proc) == 2)
if bL and min( dH, dV) < 1.5 * dDiamTool then
EgtSetMachiningParam( MCH_MP.INVERT, false)
if not bTipMill then
EgtSetMachiningParam( MCH_MP.LEADINTYPE, MCH_POCK_LI.HELIX)
EgtSetMachiningParam( MCH_MP.LITANG, dDiamTool)
@@ -3599,7 +3600,16 @@ local function MakePocket( Proc, nPartId, b3Solid, ptPs, tvtN, nFaceRef, sMchFin
local sUserNotes = EgtGetMachiningParam( MCH_MP.USERNOTES) or ''
sUserNotes = EgtSetValInNotes( sUserNotes, 'MaxElev', EgtNumToString( dElev, 1))
sUserNotes = EgtSetValInNotes( sUserNotes, 'VMRS', 0)
if bOpenOutRaw or ( Proc.LoopIdFacInd and ( EgtGetInfo( Proc.LoopIdFacInd, 'OPEN', 'i') or -1) > -1) then
-- Se forzato lato aperto lavorazione da curva forzo OpenOutRaw
if( Proc.LoopIdFacInd and ( EgtGetInfo( Proc.LoopIdFacInd, 'OPEN', 'i') or -1) > -1) then
local _, dH, dV = EgtSurfTmFacetMinAreaRectangle( Proc.Id, nFaceRef, GDB_ID.ROOT)
-- Se larghezza tasca uguale a larghezza utensile non permetto Invert
if abs( min( dH, dV) - dDiamTool) < 50 * GEO.EPS_SMALL then
EgtSetMachiningParam( MCH_MP.INVERT, false)
end
bOpenOutRaw = true
end
if bOpenOutRaw then
sUserNotes = EgtSetValInNotes( sUserNotes, 'OpenOutRaw', 1)
end
EgtSetMachiningParam( MCH_MP.USERNOTES, sUserNotes)
+15 -12
View File
@@ -1277,26 +1277,28 @@ function ProcessLong2Cut.Make( Proc, nPhase, nRawId, nPartId, bForcedBladeMaster
local dLimitAngle = -0.5 - 20 * GEO.EPS_SMALL
-- se facce ortogonali (concave), mantengo la lavorazione di testa sulla faccia più grande purchè non superi di 30 gradi il sottosquadra
if bOrtho then
if vtN[vOrd[1]]:getZ() > 0.001 and vtN[vOrd[2]]:getZ() > 0.001 then
if vtN[vOrd[1]]:getZ() >= vtN[vOrd[2]]:getZ() then
local vtN1 = vtN[vOrd[1]]
local vtN2 = vtN[vOrd[2]]
if vtN1:getZ() > 0.001 and vtN2:getZ() > 0.001 then
if vtN1:getZ() >= vtN2:getZ() then
nFin = 1
else
nIni = 2
end
else
if vtN[vOrd[1]]:getZ() < dLimitAngle then
if vtN1:getZ() < dLimitAngle then
nIni = 2
elseif vtN[vOrd[2]]:getZ() < dLimitAngle then
elseif vtN2:getZ() < dLimitAngle then
nFin = 1
else
if vtN[vOrd[1]]:getZ() >= vtN[vOrd[2]]:getZ() then
if vtN[vOrd[1]]:getZ() < dLimitAngle then
if vtN1:getZ() >= vtN2:getZ() then
if vtN1:getZ() < dLimitAngle then
nIni = 2
else
nFin = 1
end
else
if vtN[vOrd[1]]:getZ() < dLimitAngle then
if vtN1:getZ() < dLimitAngle then
nIni = 2
else
nFin = 1
@@ -1390,18 +1392,19 @@ function ProcessLong2Cut.Make( Proc, nPhase, nRawId, nPartId, bForcedBladeMaster
EgtOutLog( sErr)
return false, sErr
end
local dMySal, dMyEal = dSal, dEal
if bFacesSwapped then
dSal, dEal = dEal, dSal
dMySal, dMyEal = dMyEal, dMySal
end
-- aggiungo geometria
EgtSetMachiningGeometry( {{ Proc.Id, tFaceLong[vOrd[i]]}})
-- limito opportunamente la lavorazione
if ( nSide == -1 and BD.DOWN_HEAD) then
EgtSetMachiningParam( MCH_MP.STARTADDLEN, dEal)
EgtSetMachiningParam( MCH_MP.ENDADDLEN, dSal)
EgtSetMachiningParam( MCH_MP.STARTADDLEN, dMyEal)
EgtSetMachiningParam( MCH_MP.ENDADDLEN, dMySal)
else
EgtSetMachiningParam( MCH_MP.STARTADDLEN, dSal)
EgtSetMachiningParam( MCH_MP.ENDADDLEN, dEal)
EgtSetMachiningParam( MCH_MP.STARTADDLEN, dMySal)
EgtSetMachiningParam( MCH_MP.ENDADDLEN, dMyEal)
end
-- imposto posizione braccio porta testa per non ingombrare agli estremi
EgtSetMachiningParam( MCH_MP.SCC, nSCC)
+14
View File
@@ -1,4 +1,18 @@
==== Beam Update Log ====
Versione 3.1c1 (04/03/2026)
- Fixed : correzione in ordinamento (fori vs tagli)
- Fixed : in drilling rimosso preforo duplicato
Versione 3.1b1 (26/02/2026)
- Added : in LapJoint lunghe gestito Q14 per lavorare discorde
- Added : in forature ora sono possibili le DrillPocket in doppio (ultimo step fatto dalla testa principale)
- Added : in FreeContour (contornatura) aggiunta Q10 per forzare massima elevazione
- Modif : in LongDoubleCut e LapJoint lunghe migliorata la scelta della faccia da lavorare e altre migliorie
- Modif : in LapJoint migliorie alle svuotature
- Modif : in LapJoint lunghe, negli spezzoni successivi al primo, le svuotature considerano l'area svuotata precedente
- Fixed : in forature in doppio si garantisce l'ultimo step per evitare collisioni delle punte o finecorsa
- Fixed : in mortasa a coda di rondine tagliata corretti ingresso uscita in caso di svuotatura
- Fixed : in tagli di testa e coda corretti smussi con P08 e P09
Versione 2.7l3 (23/12/2025)
- Modif : nei fori che attraversano un taglio si decide la precedenza in base all'angolo tra foro e taglio stesso
+2 -2
View File
@@ -2,5 +2,5 @@
-- Gestione della versione di Beam
NAME = 'Beam'
VERSION = '3.1a1'
MIN_EXE = '3.1a4'
VERSION = '3.1c1'
MIN_EXE = '3.1b1'