Compare commits
37 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 7a64a68167 | |||
| 2e086f9f42 | |||
| c7e8c63f37 | |||
| 8e9de6026e | |||
| b382560cfa | |||
| 339c6acb37 | |||
| 2311ab4614 | |||
| 570a65c7a1 | |||
| e18a816647 | |||
| d578194d43 | |||
| e0f20d19f0 | |||
| cff4ef0d47 | |||
| d9fb464066 | |||
| 9d6a5fb496 | |||
| c3fab404a5 | |||
| fa139c84f3 | |||
| ae6853cd3f | |||
| c0618cd628 | |||
| 524b6a470c | |||
| cd4aa8ee11 | |||
| 242f5f4516 | |||
| e6a3e0c519 | |||
| 640c8af05f | |||
| 48ceceb8e0 | |||
| 5165463dbd | |||
| 9e1d424bc7 | |||
| 15c96303de | |||
| 3211f21869 | |||
| 1f4fe3597b | |||
| 0749e56b9f | |||
| 7424bdc147 | |||
| a623072e89 | |||
| 7f15b08b20 | |||
| d9f4d0584a | |||
| 8b1d38c451 | |||
| abe3465514 | |||
| fc753c47be |
+43
-27
@@ -362,7 +362,7 @@ local function CollectFeatures( PartId, b3Raw, dCurrOvmH, dCurrOvmT)
|
|||||||
-- se foro
|
-- se foro
|
||||||
if Drill.Identify( Proc) then
|
if Drill.Identify( Proc) then
|
||||||
-- assegno diametro e facce di ingresso e uscita (dati tabelle sempre per riferimento)
|
-- 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)
|
Proc.Diam, Proc.Len, Proc.Fcs, Proc.Fce, Proc.vtDrillDir = Drill.GetData( Proc, b3Raw)
|
||||||
-- verifico se devo inserire i prefori
|
-- verifico se devo inserire i prefori
|
||||||
if Drill.IsPredrillNeeded( Proc) then
|
if Drill.IsPredrillNeeded( Proc) then
|
||||||
local bAddProc, PredrillProc= Drill.AddPredrillFromDrillProc( Proc)
|
local bAddProc, PredrillProc= Drill.AddPredrillFromDrillProc( Proc)
|
||||||
@@ -391,6 +391,7 @@ local function CollectFeatures( PartId, b3Raw, dCurrOvmH, dCurrOvmT)
|
|||||||
Proc2.Tail = Drill.IsTailFeature( Proc2, b3Raw, dCurrOvmH)
|
Proc2.Tail = Drill.IsTailFeature( Proc2, b3Raw, dCurrOvmH)
|
||||||
Proc2.Fcs = Proc.Fce
|
Proc2.Fcs = Proc.Fce
|
||||||
Proc2.Fce = Proc.Fcs
|
Proc2.Fce = Proc.Fcs
|
||||||
|
Proc2.vtDrillDir = -Proc.vtDrillDir
|
||||||
Proc2.CutId = Proc.CutId
|
Proc2.CutId = Proc.CutId
|
||||||
Proc2.TaskId = Proc.TaskId
|
Proc2.TaskId = Proc.TaskId
|
||||||
Proc2.AdjId = Proc.AdjId
|
Proc2.AdjId = Proc.AdjId
|
||||||
@@ -1119,7 +1120,7 @@ local function ClassifyFeatures( vProc, b3Raw, Stats)
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- se senza geometria (già disabilitato)
|
-- se senza geometria (già disabilitato)
|
||||||
if Proc.Flg == 0 and not Proc.Double then
|
if Proc.Flg == 0 and not Proc.Double and not Proc.bGrouped then
|
||||||
bOk = false
|
bOk = false
|
||||||
-- se intestatura
|
-- se intestatura
|
||||||
elseif Hcut.Identify( Proc) then
|
elseif Hcut.Identify( Proc) then
|
||||||
@@ -1352,7 +1353,8 @@ local function AddFeatureMachining( Proc, nPhase, nRawId, nPartId, dCurrOvmH, bN
|
|||||||
-- se foratura ( 3/4-040-X)
|
-- se foratura ( 3/4-040-X)
|
||||||
elseif Drill.Identify( Proc) then
|
elseif Drill.Identify( Proc) then
|
||||||
-- esecuzione foratura
|
-- esecuzione foratura
|
||||||
bOk, sErr = Drill.Make( Proc, nPhase, nRawId, nPartId)
|
local bUseMultiDrill = BD.USE_MULTI_DRILL
|
||||||
|
bOk, sErr = Drill.Make( Proc, nPhase, nRawId, nPartId, bUseMultiDrill)
|
||||||
-- se giunzione francese ( 1/2-035-X)
|
-- se giunzione francese ( 1/2-035-X)
|
||||||
elseif FrenchRidgeLap.Identify( Proc) then
|
elseif FrenchRidgeLap.Identify( Proc) then
|
||||||
-- esecuzione giunzione francese
|
-- esecuzione giunzione francese
|
||||||
@@ -2024,30 +2026,44 @@ function GetFeatureInfoAndDependency( vProc, b3Raw)
|
|||||||
-- controllo la feature con tutte le altre per recuperare le dipendenze
|
-- controllo la feature con tutte le altre per recuperare le dipendenze
|
||||||
for j = 1, #vProc do
|
for j = 1, #vProc do
|
||||||
local ProcB = vProc[j]
|
local ProcB = vProc[j]
|
||||||
-- verifico se feature tipo LapJoint è attraversata da almeno un foro
|
-- se non è la stessa feature
|
||||||
if ( Proc.Topology == 'Pocket' or Proc.Topology == 'Tunnel' or Proc.Topology == 'Groove' or Mortise.Identify( Proc)) and Drill.Identify( ProcB) and Overlaps( Proc.Box, ProcB.Box) then
|
if Proc.Id ~= ProcB.Id then
|
||||||
Proc.PassedByHole = true
|
-- verifico se feature tipo LapJoint è attraversata da almeno un foro
|
||||||
ProcB.Dependency = {}
|
if ( Proc.Topology == 'Pocket' or Proc.Topology == 'Tunnel' or Proc.Topology == 'Groove' or Mortise.Identify( Proc)) and Drill.Identify( ProcB) and Overlaps( Proc.Box, ProcB.Box) then
|
||||||
ProcB.Dependency.ExecBefore = Proc
|
Proc.PassedByHole = true
|
||||||
end
|
ProcB.Dependency = {}
|
||||||
-- verifico se feature tipo LapJoint è attraversata da almeno una mortasa a coda di rondine
|
ProcB.Dependency.ExecBefore = Proc
|
||||||
if ( Proc.Topology == 'Pocket' or Proc.Topology == 'Tunnel' or Proc.Topology == 'Groove') and DtMortise.SideIdentify( ProcB) and Overlaps( Proc.Box, ProcB.Box) then
|
end
|
||||||
Proc.PassedByDtMortise = true
|
-- verifico se feature tipo LapJoint è attraversata da almeno una mortasa a coda di rondine
|
||||||
end
|
if ( Proc.Topology == 'Pocket' or Proc.Topology == 'Tunnel' or Proc.Topology == 'Groove') and DtMortise.SideIdentify( ProcB) and Overlaps( Proc.Box, ProcB.Box) then
|
||||||
-- se tenone è attraversato da foro allora il foro deve essere fatto prima
|
Proc.PassedByDtMortise = true
|
||||||
if Tenon.Identify( Proc) and Drill.Identify( ProcB) and Overlaps( Proc.Box, ProcB.Box) then
|
end
|
||||||
Proc.PassedByHole = true
|
-- se tenone è attraversato da foro allora il foro deve essere fatto prima
|
||||||
end
|
if Tenon.Identify( Proc) and Drill.Identify( ProcB) and Overlaps( Proc.Box, ProcB.Box) then
|
||||||
-- se tenone di coda è attraversato da foro allora anche il foro deve essere di coda
|
Proc.PassedByHole = true
|
||||||
if Tenon.Identify( Proc) and Proc.Tail and Drill.Identify( ProcB) and Overlaps( Proc.Box, ProcB.Box) then
|
end
|
||||||
ProcB.Tail = true
|
-- verifiche per specchiature
|
||||||
end
|
if BD.DOWN_HEAD or BD.TWO_EQUAL_HEADS then
|
||||||
-- verifiche per specchiature
|
-- forature
|
||||||
if BD.DOWN_HEAD or BD.TWO_EQUAL_HEADS then
|
if BD.DOUBLE_HEAD_DRILLING and Drill.Identify( Proc) and Drill.Identify( ProcB) and not Proc.Mirror then
|
||||||
-- forature
|
if AreDrillingsMirrored( Proc, ProcB, b3Raw) then
|
||||||
if BD.DOUBLE_HEAD_DRILLING and Drill.Identify( Proc) and Drill.Identify( ProcB) and not Proc.Mirror then
|
Proc.Mirror = ProcB
|
||||||
if AreDrillingsMirrored( Proc, ProcB, b3Raw) then
|
end
|
||||||
Proc.Mirror = ProcB
|
end
|
||||||
|
end
|
||||||
|
-- raggruppamento fori appartenenti allo stesso spezzone di trave
|
||||||
|
if Drill.Identify( Proc) and Proc.Flg ~= 0 and Drill.Identify( ProcB) and ProcB.Flg ~= 0 then
|
||||||
|
local dDrillRange = EgtIf( b3Raw:getDimX() < BD.LEN_SHORT_PART, BD.DRILL_RANGE_SP or BD.LONGCUT_ENDLEN/3, BD.DRILL_RANGE or BD.LONGCUT_ENDLEN)
|
||||||
|
local nXSegmentProc = ceil( ( Proc.Box:getCenter():getX() - b3Raw:getMin():getX()) / dDrillRange)
|
||||||
|
local nXSegmentProcB = ceil( ( ProcB.Box:getCenter():getX() - b3Raw:getMin():getX()) / dDrillRange)
|
||||||
|
-- se fanno parte dello stesso spezzone, scrivo info geometria nella prima e disattivo la seconda
|
||||||
|
if nXSegmentProc == nXSegmentProcB and Proc.Diam == ProcB.Diam and AreSameVectorApprox( Proc.vtDrillDir, ProcB.vtDrillDir) then
|
||||||
|
if not Proc.OtherGeometries then
|
||||||
|
Proc.OtherGeometries = {}
|
||||||
|
end
|
||||||
|
table.insert( Proc.OtherGeometries, ProcB)
|
||||||
|
ProcB.Flg = 0
|
||||||
|
ProcB.bGrouped = true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -275,12 +275,15 @@ local function VerifyFirstOrthoCut( CutTable, OffsetP, BBoxRawPart, dNzLimDwnUp)
|
|||||||
-- normale alla faccia ortogonale
|
-- normale alla faccia ortogonale
|
||||||
local _, vtO = EgtSurfTmFacetCenter( CutOId, 0, GDB_ID.ROOT)
|
local _, vtO = EgtSurfTmFacetCenter( CutOId, 0, GDB_ID.ROOT)
|
||||||
vtO = vtO - vtO * vtN1 * vtN1 ; vtO:normalize()
|
vtO = vtO - vtO * vtN1 * vtN1 ; vtO:normalize()
|
||||||
|
local dMaxElev = EgtSurfTmFacetElevationInBBox( CutOId, 0, BBoxRawPart, true, GDB_ID.ROOT)
|
||||||
-- calcolo lunghezza prima semi-faccia
|
-- calcolo lunghezza prima semi-faccia
|
||||||
local asseX1 = vtO
|
local asseX1 = vtO
|
||||||
local asseY1 = vtN1 ^ asseX1
|
local asseY1 = vtN1 ^ asseX1
|
||||||
local Frame1 = Frame3d( ptC1, ptC1+asseX1, ptC1+asseY1)
|
local Frame1 = Frame3d( ptC1, ptC1+asseX1, ptC1+asseY1)
|
||||||
local Box1 = EgtGetBBoxRef( Cut1Id, GDB_BB.STANDARD, Frame1)
|
local Box1 = EgtGetBBoxRef( Cut1Id, GDB_BB.STANDARD, Frame1)
|
||||||
local x1 = Box1:getDimX()
|
local x1 = Box1:getDimX()
|
||||||
|
-- prendo il massimo tra la lugnhezza della faccia parallela e l'elevazione della corrispondente ortogonale
|
||||||
|
x1 = max( x1, dMaxElev)
|
||||||
-- calcolo lunghezza seconda semi-faccia
|
-- calcolo lunghezza seconda semi-faccia
|
||||||
local asseX2 = vtO
|
local asseX2 = vtO
|
||||||
local asseY2 = vtN2 ^ asseX2
|
local asseY2 = vtN2 ^ asseX2
|
||||||
|
|||||||
+13
-3
@@ -309,7 +309,7 @@ function FacesBySaw.MakeOne( nSurfId, nFacet, sCutting, dSawDiam, Par5, dVzLimDw
|
|||||||
bIsBiLinea = true
|
bIsBiLinea = true
|
||||||
local vtTg1 = ptPm - ptP1 ; vtTg1:normalize()
|
local vtTg1 = ptPm - ptP1 ; vtTg1:normalize()
|
||||||
local vtTg2 = ptP2 - ptPm ; vtTg2:normalize()
|
local vtTg2 = ptP2 - ptPm ; vtTg2:normalize()
|
||||||
local dCosMax = 0.951 -- cos( 18°)
|
local dCosMax = 0.966 -- cos( 15°)
|
||||||
local dLenMin = 30
|
local dLenMin = 30
|
||||||
local dLenMax = max( 0.5 * dSawDiam * 0.17365 + 1, 2 * dLenMin)
|
local dLenMax = max( 0.5 * dSawDiam * 0.17365 + 1, 2 * dLenMin)
|
||||||
dCosAngleL1L2 = vtTg1 * vtTg2
|
dCosAngleL1L2 = vtTg1 * vtTg2
|
||||||
@@ -467,9 +467,19 @@ function FacesBySaw.MakeOne( nSurfId, nFacet, sCutting, dSawDiam, Par5, dVzLimDw
|
|||||||
if BD.C_SIMM and bMaximizeVerticalDepth then
|
if BD.C_SIMM and bMaximizeVerticalDepth then
|
||||||
nSCC = MCH_SCC.ADIR_ZM
|
nSCC = MCH_SCC.ADIR_ZM
|
||||||
elseif abs( vtAux:getX()) > abs( vtAux:getY()) - GEO.EPS_SMALL then
|
elseif abs( vtAux:getX()) > abs( vtAux:getY()) - GEO.EPS_SMALL then
|
||||||
nSCC = EgtIf( ( vtAux:getX() > -GEO.EPS_SMALL), MCH_SCC.ADIR_XP, MCH_SCC.ADIR_XM)
|
-- se il taglio è orizzontale, si gira aggregato lama per facilitare caduta del legno
|
||||||
|
if abs( vtTg:getZ()) < 10 * GEO.EPS_SMALL and not AreSameOrOppositeVectorApprox( vtN, Z_AX()) then
|
||||||
|
nSCC = EgtIf( ( vtAux:getX() > -GEO.EPS_SMALL), MCH_SCC.ADIR_XM, MCH_SCC.ADIR_XP)
|
||||||
|
else
|
||||||
|
nSCC = EgtIf( ( vtAux:getX() > -GEO.EPS_SMALL), MCH_SCC.ADIR_XP, MCH_SCC.ADIR_XM)
|
||||||
|
end
|
||||||
else
|
else
|
||||||
nSCC = EgtIf( ( vtAux:getY() > -GEO.EPS_SMALL), MCH_SCC.ADIR_YP, MCH_SCC.ADIR_YM)
|
-- se il taglio è orizzontale, si gira aggregato lama per facilitare caduta del legno
|
||||||
|
if abs( vtTg:getZ()) < 10 * GEO.EPS_SMALL and not AreSameOrOppositeVectorApprox( vtN, Z_AX()) then
|
||||||
|
nSCC = EgtIf( ( vtAux:getY() > -GEO.EPS_SMALL), MCH_SCC.ADIR_YM, MCH_SCC.ADIR_YP)
|
||||||
|
else
|
||||||
|
nSCC = EgtIf( ( vtAux:getY() > -GEO.EPS_SMALL), MCH_SCC.ADIR_YP, MCH_SCC.ADIR_YM)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
if BD.TURN == 2 then
|
if BD.TURN == 2 then
|
||||||
|
|||||||
@@ -214,7 +214,7 @@ function GetMachinings( MachiningType, sType)
|
|||||||
Machining.Tool.MaxMat = EgtTdbGetCurrToolParam( MCH_TP.MAXMAT)
|
Machining.Tool.MaxMat = EgtTdbGetCurrToolParam( MCH_TP.MAXMAT)
|
||||||
end
|
end
|
||||||
if MachiningType == MCH_MY.DRILLING then
|
if MachiningType == MCH_MY.DRILLING then
|
||||||
if EgtStartsWith( Machining.Type, 'Drill') then
|
if EgtStartsWith( Machining.Type, 'Drill') or EgtStartsWith( Machining.Type, 'MultiDrill') then
|
||||||
Machining.SubType = 'Drill'
|
Machining.SubType = 'Drill'
|
||||||
elseif EgtStartsWith( Machining.Type, 'AngleDrill') then
|
elseif EgtStartsWith( Machining.Type, 'AngleDrill') then
|
||||||
Machining.SubType = 'AngleDrill'
|
Machining.SubType = 'AngleDrill'
|
||||||
@@ -297,7 +297,7 @@ end
|
|||||||
function ReturnParams( MachiningType, MachiningName, sType, ToolParams)
|
function ReturnParams( MachiningType, MachiningName, sType, ToolParams)
|
||||||
if MachiningType == MCH_MY.DRILLING then
|
if MachiningType == MCH_MY.DRILLING then
|
||||||
local _, sOrigType = EgtEndsWith( sType, '_H2')
|
local _, sOrigType = EgtEndsWith( sType, '_H2')
|
||||||
return MachiningName, sType, EgtIf( sOrigType == 'Drill' or sOrigType == 'Drill_AT' or sOrigType == 'AngleDrill' or sOrigType == 'Predrill' , ToolParams.TMaxMat, ToolParams.TMaxDepth), ToolParams.MaxToolLength, ToolParams.ToolDiam, ToolParams.DiamTh, ToolParams.FreeLen
|
return MachiningName, sType, EgtIf( sOrigType == 'Drill' or sOrigType == 'MultiDrill' or sOrigType == 'Drill_AT' or sOrigType == 'AngleDrill' or sOrigType == 'Predrill' , ToolParams.TMaxMat, ToolParams.TMaxDepth), ToolParams.MaxToolLength, ToolParams.ToolDiam, ToolParams.DiamTh, ToolParams.FreeLen
|
||||||
elseif MachiningType == MCH_MY.SAWING then
|
elseif MachiningType == MCH_MY.SAWING then
|
||||||
return MachiningName, ToolParams.H2
|
return MachiningName, ToolParams.H2
|
||||||
elseif MachiningType == MCH_MY.MILLING then
|
elseif MachiningType == MCH_MY.MILLING then
|
||||||
@@ -455,10 +455,13 @@ function MachiningLib.FindCutting( sType, bTopHead, bDownHead)
|
|||||||
end
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
function MachiningLib.FindDrilling( dDiam, dDepth, bTopHead, bDownHead, bExcludeH2, bAngleTransmission, bIsPredrill)
|
function MachiningLib.FindDrilling( dDiam, dDepth, bTopHead, bDownHead, bExcludeH2, bAngleTransmission, bIsPredrill, bIsMultidrill)
|
||||||
local MachiningName, MachiningType, Param1, Param2, Param3, Param4, Param5, sTypeMach
|
local MachiningName, MachiningType, Param1, Param2, Param3, Param4, Param5, sTypeMach
|
||||||
|
-- se la macchina ha gruppi a forare, si prova con quelli
|
||||||
|
if bIsMultidrill then
|
||||||
|
sTypeMach = 'MultiDrill'
|
||||||
-- se il foro è un predrill, cerco solo punte abilitate al Predrill
|
-- se il foro è un predrill, cerco solo punte abilitate al Predrill
|
||||||
if bIsPredrill then
|
elseif bIsPredrill then
|
||||||
sTypeMach = 'Predrill'
|
sTypeMach = 'Predrill'
|
||||||
else
|
else
|
||||||
sTypeMach = EgtIf( bAngleTransmission, 'Drill_AT', 'Drill')
|
sTypeMach = EgtIf( bAngleTransmission, 'Drill_AT', 'Drill')
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ local ML = require( 'MachiningLib')
|
|||||||
-- Riconoscimento della feature
|
-- Riconoscimento della feature
|
||||||
function ProcessCut.Identify( Proc)
|
function ProcessCut.Identify( Proc)
|
||||||
-- se richiesto si forza fresatura
|
-- se richiesto si forza fresatura
|
||||||
Proc.bForceMill = ( Proc.prc == 30 and ( ( EgtGetInfo( Proc.Id, 'Q07', 'd') or 0) == 1))
|
Proc.bForceMill = ( ( ( Proc.Grp == 1 or Proc.Grp == 2) and Proc.Prc == 10) and ( ( EgtGetInfo( Proc.Id, 'Q07', 'd') or 0) == 1))
|
||||||
|
|
||||||
if Proc.bForceMill then
|
if Proc.bForceMill then
|
||||||
return false
|
return false
|
||||||
@@ -274,7 +274,7 @@ local function MakeFromTop( sCutting, Proc, nPhase, nRawId, nPartId, dOvmHead, b
|
|||||||
if bFromBottom == nil then
|
if bFromBottom == nil then
|
||||||
bFromBottom = ( vtN:getZ() > 0.25 and b3Solid:getDimX() < BD.LEN_SHORT_PART and not Proc.AdvTail and vtN:getX() < 0 and abs( vtN:getY()) < 0.259)
|
bFromBottom = ( vtN:getZ() > 0.25 and b3Solid:getDimX() < BD.LEN_SHORT_PART and not Proc.AdvTail and vtN:getX() < 0 and abs( vtN:getY()) < 0.259)
|
||||||
end
|
end
|
||||||
local dMinFeatureLengthForLongCut = 590.000
|
local dMinFeatureLengthForLongCut = EgtIf( BD.C_SIMM, 590, 400)
|
||||||
-- verifico se da considerare taglio lungo ( non da sotto, inclinato non più di 30deg, largo come la trave e abbastanza lungo)
|
-- verifico se da considerare taglio lungo ( non da sotto, inclinato non più di 30deg, largo come la trave e abbastanza lungo)
|
||||||
local bLongCut = ( not bDownCut and vtN:getZ() > 0.865 and
|
local bLongCut = ( not bDownCut and vtN:getZ() > 0.865 and
|
||||||
Proc.Box:getDimY() > b3Solid:getDimY() - 10 * GEO.EPS_SMALL and
|
Proc.Box:getDimY() > b3Solid:getDimY() - 10 * GEO.EPS_SMALL and
|
||||||
|
|||||||
@@ -1190,14 +1190,14 @@ local function Make2Faces( Proc, nPhase, nRawId, nPartId, dOvmHead, b3Raw, b3Sol
|
|||||||
return MakeByBlade( Proc, nPhase, nRawId, nPartId, dOvmHead, b3Raw, b3Solid)
|
return MakeByBlade( Proc, nPhase, nRawId, nPartId, dOvmHead, b3Raw, b3Solid)
|
||||||
-- altrimenti provo con il truciolatore
|
-- altrimenti provo con il truciolatore
|
||||||
else
|
else
|
||||||
|
local sName = 'Mill_' .. ( EgtGetName( Proc.Id) or tostring( Proc.Id))
|
||||||
-- se non ho la lavorazione esco
|
-- se non ho la lavorazione esco
|
||||||
if not sMilling then
|
if not sMilling then
|
||||||
local sErr = 'Error, machining or tool not found ' .. sName .. '-' .. sMilling
|
local sErr = 'Error, machining or tool not found ' .. sName
|
||||||
EgtOutLog( sErr)
|
EgtOutLog( sErr)
|
||||||
return false, sErr
|
return false, sErr
|
||||||
end
|
end
|
||||||
-- inserisco la lavorazione di fresatura
|
-- inserisco la lavorazione di fresatura
|
||||||
local sName = 'Mill_' .. ( EgtGetName( Proc.Id) or tostring( Proc.Id))
|
|
||||||
local nMchFId = EgtAddMachining( sName, sMilling)
|
local nMchFId = EgtAddMachining( sName, sMilling)
|
||||||
if not nMchFId then
|
if not nMchFId then
|
||||||
local sErr = 'Error adding machining ' .. sName .. '-' .. sMilling
|
local sErr = 'Error adding machining ' .. sName .. '-' .. sMilling
|
||||||
|
|||||||
+59
-11
@@ -102,8 +102,8 @@ end
|
|||||||
function ProcessDrill.GetData( Proc, b3Raw)
|
function ProcessDrill.GetData( Proc, b3Raw)
|
||||||
local AuxId = EgtGetInfo( Proc.Id, 'AUXID', 'i')
|
local AuxId = EgtGetInfo( Proc.Id, 'AUXID', 'i')
|
||||||
-- verifico se foro da adattare
|
-- verifico se foro da adattare
|
||||||
|
local nNewAuxId
|
||||||
if EgtExistsInfo( Proc.Id, 'DiamUser') then
|
if EgtExistsInfo( Proc.Id, 'DiamUser') then
|
||||||
local nNewAuxId
|
|
||||||
if AuxId then nNewAuxId = AuxId + Proc.Id end
|
if AuxId then nNewAuxId = AuxId + Proc.Id end
|
||||||
if AuxId and EgtGetType( nNewAuxId) == GDB_TY.CRV_ARC and BD.USER_HOLE_DIAM and BD.USER_HOLE_DIAM > 1 then
|
if AuxId and EgtGetType( nNewAuxId) == GDB_TY.CRV_ARC and BD.USER_HOLE_DIAM and BD.USER_HOLE_DIAM > 1 then
|
||||||
EgtModifyArcRadius( nNewAuxId, BD.USER_HOLE_DIAM / 2)
|
EgtModifyArcRadius( nNewAuxId, BD.USER_HOLE_DIAM / 2)
|
||||||
@@ -115,7 +115,13 @@ function ProcessDrill.GetData( Proc, b3Raw)
|
|||||||
-- recupero faccia di entrata e uscita
|
-- recupero faccia di entrata e uscita
|
||||||
local nFcs = EgtGetInfo( Proc.Id, 'FCS', 'i') or 0
|
local nFcs = EgtGetInfo( Proc.Id, 'FCS', 'i') or 0
|
||||||
local nFce = EgtGetInfo( Proc.Id, 'FCE', 'i') or 0
|
local nFce = EgtGetInfo( Proc.Id, 'FCE', 'i') or 0
|
||||||
return dDiam, dLen, nFcs, nFce
|
|
||||||
|
local vtDrillDir
|
||||||
|
if AuxId then
|
||||||
|
nNewAuxId = AuxId + Proc.Id
|
||||||
|
vtDrillDir = EgtCurveExtrusion( nNewAuxId, GDB_RT.GLOB)
|
||||||
|
end
|
||||||
|
return dDiam, dLen, nFcs, nFce, vtDrillDir
|
||||||
end
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
@@ -252,8 +258,11 @@ function ProcessDrill.Classify( Proc, b3Raw, sDownOrSideOrStd)
|
|||||||
if sDownOrSideOrStd == 'DOWN' then
|
if sDownOrSideOrStd == 'DOWN' then
|
||||||
-- se foro fatto in doppio entrambe le forature (valore assoluto) devono essere sopra al valore limite, se foro singolo deve essere sopra al valore limite se ribaltato
|
-- se foro fatto in doppio entrambe le forature (valore assoluto) devono essere sopra al valore limite, se foro singolo deve essere sopra al valore limite se ribaltato
|
||||||
if ( abs( Proc.Flg) == 2 and ( abs( vtExtr:getZ()) < - BD.DRILL_VZ_MIN) or ( abs( Proc.Flg) ~= 2 and vtExtr:getZ() < - BD.DRILL_VZ_MIN)) then
|
if ( abs( Proc.Flg) == 2 and ( abs( vtExtr:getZ()) < - BD.DRILL_VZ_MIN) or ( abs( Proc.Flg) ~= 2 and vtExtr:getZ() < - BD.DRILL_VZ_MIN)) then
|
||||||
Proc.Down = true
|
-- in doppio non cambio di fase al foro perchè devo garantire il lato master su H1
|
||||||
Proc.Side = false
|
if not( Proc.Double) or Proc.Double == 0 then
|
||||||
|
Proc.Down = true
|
||||||
|
Proc.Side = false
|
||||||
|
end
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -311,7 +320,7 @@ end
|
|||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
-- Applicazione della lavorazione
|
-- Applicazione della lavorazione
|
||||||
function ProcessDrill.Make( Proc, nPhase, nRawId, nPartId)
|
function ProcessDrill.Make( Proc, nPhase, nRawId, nPartId, bUseMultiDrill)
|
||||||
-- default per costanti
|
-- default per costanti
|
||||||
BD.DRILL_VX_MAX_ANGLEDRILL = ( BD.DRILL_VX_MAX_ANGLEDRILL or 0.928)
|
BD.DRILL_VX_MAX_ANGLEDRILL = ( BD.DRILL_VX_MAX_ANGLEDRILL or 0.928)
|
||||||
-- ingombro del pezzo
|
-- ingombro del pezzo
|
||||||
@@ -384,9 +393,9 @@ function ProcessDrill.Make( Proc, nPhase, nRawId, nPartId)
|
|||||||
end
|
end
|
||||||
-- primo gruppo di controlli con lunghezza utensile pari a metà foro se passante
|
-- primo gruppo di controlli con lunghezza utensile pari a metà foro se passante
|
||||||
-- recupero la lavorazione
|
-- recupero la lavorazione
|
||||||
local sDrilling, sType, dMaxDepth, dMaxToolLength, dToolDiam, dDiamTh, dToolFreeLen = ML.FindDrilling( dDiam, dCheckDepth, bDrillUp, bDrillDown, bExcludeH2, bDrillAngTrasm, Proc.IsPredrill)
|
local sDrilling, sType, dMaxDepth, dMaxToolLength, dToolDiam, dDiamTh, dToolFreeLen = ML.FindDrilling( dDiam, dCheckDepth, bDrillUp, bDrillDown, bExcludeH2, bDrillAngTrasm, Proc.IsPredrill, bUseMultiDrill)
|
||||||
if not sDrilling and dCheckDepth then
|
if not sDrilling and dCheckDepth then
|
||||||
sDrilling, sType, dMaxDepth, dMaxToolLength, dToolDiam, dDiamTh, dToolFreeLen = ML.FindDrilling( dDiam, 0, bDrillUp, bDrillDown, bExcludeH2, bDrillAngTrasm, Proc.IsPredrill)
|
sDrilling, sType, dMaxDepth, dMaxToolLength, dToolDiam, dDiamTh, dToolFreeLen = ML.FindDrilling( dDiam, 0, bDrillUp, bDrillDown, bExcludeH2, bDrillAngTrasm, Proc.IsPredrill, bUseMultiDrill)
|
||||||
if sDrilling then dCheckDepth = nil end
|
if sDrilling then dCheckDepth = nil end
|
||||||
end
|
end
|
||||||
if not sDrilling then
|
if not sDrilling then
|
||||||
@@ -551,16 +560,33 @@ function ProcessDrill.Make( Proc, nPhase, nRawId, nPartId)
|
|||||||
return false, sErr
|
return false, sErr
|
||||||
end
|
end
|
||||||
-- aggiungo geometria
|
-- aggiungo geometria
|
||||||
EgtSetMachiningGeometry( {{ AuxId, -1}})
|
if Proc.SkippedGeometries and #Proc.SkippedGeometries > 0 then
|
||||||
|
EgtSetMachiningGeometry( Proc.SkippedGeometries)
|
||||||
|
Proc.SkippedGeometries = nil
|
||||||
|
elseif Proc.OtherGeometries and #Proc.OtherGeometries > 0 then
|
||||||
|
local HolesGeometries = {}
|
||||||
|
-- aggiungo foro principale
|
||||||
|
table.insert( HolesGeometries, { AuxId, -1})
|
||||||
|
-- aggiungo altre geometrie connesse
|
||||||
|
for i = 1, #Proc.OtherGeometries do
|
||||||
|
-- recupero geometria da lavorare
|
||||||
|
local OtherAuxId = Proc.OtherGeometries[i].Id + EgtGetInfo( Proc.OtherGeometries[i].Id, 'AUXID', 'i')
|
||||||
|
local Geometry = { OtherAuxId, -1}
|
||||||
|
table.insert( HolesGeometries, Geometry)
|
||||||
|
end
|
||||||
|
EgtSetMachiningGeometry( HolesGeometries)
|
||||||
|
else
|
||||||
|
EgtSetMachiningGeometry( {{ AuxId, -1}})
|
||||||
|
end
|
||||||
-- eventuale inversione
|
-- eventuale inversione
|
||||||
if sType == 'Drill' or sType == 'Drill_H2' or sType == 'Drill_AT' or sType == 'AngleDrill' or sType == 'Predrill' then
|
if sType == 'Drill' or sType == 'MultiDrill' or sType == 'Drill_H2' or sType == 'Drill_AT' or sType == 'AngleDrill' or sType == 'Predrill' then
|
||||||
EgtSetMachiningParam( MCH_MP.INVERT, bToInvert)
|
EgtSetMachiningParam( MCH_MP.INVERT, bToInvert)
|
||||||
else
|
else
|
||||||
EgtSetMachiningParam( MCH_MP.TOOLINVERT, bToInvert)
|
EgtSetMachiningParam( MCH_MP.TOOLINVERT, bToInvert)
|
||||||
end
|
end
|
||||||
-- imposto posizione braccio porta testa
|
-- imposto posizione braccio porta testa
|
||||||
local nSCC = MCH_SCC.NONE
|
local nSCC = MCH_SCC.NONE
|
||||||
if bDrillAngTrasm then
|
if bDrillAngTrasm or bUseMultiDrill then
|
||||||
nSCC = MCH_SCC.ADIR_NEAR
|
nSCC = MCH_SCC.ADIR_NEAR
|
||||||
elseif not BD.C_SIMM and not BD.TURN then
|
elseif not BD.C_SIMM and not BD.TURN then
|
||||||
nSCC = MCH_SCC.ADIR_YM
|
nSCC = MCH_SCC.ADIR_YM
|
||||||
@@ -601,6 +627,16 @@ function ProcessDrill.Make( Proc, nPhase, nRawId, nPartId)
|
|||||||
end
|
end
|
||||||
-- se lavorazione in doppio
|
-- se lavorazione in doppio
|
||||||
if Proc.Double and Proc.Double > 0 then
|
if Proc.Double and Proc.Double > 0 then
|
||||||
|
-- calcolo gli step reali
|
||||||
|
local dStep = EgtGetMachiningParam( MCH_MP.STEP)
|
||||||
|
local nNumStep = ceil( dDepth/dStep)
|
||||||
|
local dRealStep = dDepth / nNumStep
|
||||||
|
-- Se nel penultimo step le punte si trovano più vicine del minimo ( MinDistX1X2 + Puntina centraggio H1 + puntina centraggio H2) ricalcolo facendo uno step in meno
|
||||||
|
if ( ( dLen / 2) - ( dRealStep * (nNumStep - 1))) * 2 < ( 40 + 10 + 10) then
|
||||||
|
dRealStep = ceil( dDepth / (nNumStep - 1))
|
||||||
|
EgtSetMachiningParam( MCH_MP.STEP, dRealStep)
|
||||||
|
sMyWarn ='Warning in drill-double : step changed to ' .. tostring(dRealStep) .. 'mm'
|
||||||
|
end
|
||||||
sUserNotes = EgtSetValInNotes( sUserNotes, 'DOUBLE', Proc.Double)
|
sUserNotes = EgtSetValInNotes( sUserNotes, 'DOUBLE', Proc.Double)
|
||||||
if Proc.Double ~= Proc.PrevDouble then
|
if Proc.Double ~= Proc.PrevDouble then
|
||||||
sUserNotes = EgtSetValInNotes( sUserNotes, 'StartZmax', 2)
|
sUserNotes = EgtSetValInNotes( sUserNotes, 'StartZmax', 2)
|
||||||
@@ -610,13 +646,25 @@ function ProcessDrill.Make( Proc, nPhase, nRawId, nPartId)
|
|||||||
-- eseguo
|
-- eseguo
|
||||||
local bOk = ML.ApplyMachining( true, false)
|
local bOk = ML.ApplyMachining( true, false)
|
||||||
if not bOk and bDownDrill and bOpen and abs( Proc.Flg) == 1 then
|
if not bOk and bDownDrill and bOpen and abs( Proc.Flg) == 1 then
|
||||||
if sType == 'Drill' or sType == 'Drill_H2' or sType == 'AngleDrill' then
|
if sType == 'Drill' or sType == 'MultiDrill' or sType == 'Drill_H2' or sType == 'AngleDrill' then
|
||||||
EgtSetMachiningParam( MCH_MP.INVERT, true)
|
EgtSetMachiningParam( MCH_MP.INVERT, true)
|
||||||
else
|
else
|
||||||
EgtSetMachiningParam( MCH_MP.TOOLINVERT, true)
|
EgtSetMachiningParam( MCH_MP.TOOLINVERT, true)
|
||||||
end
|
end
|
||||||
bOk = ML.ApplyMachining( true, false)
|
bOk = ML.ApplyMachining( true, false)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- in caso di fori raggruppati, mi faccio restituire gli eventuali fori saltati
|
||||||
|
local SkippedGeometries = {}
|
||||||
|
SkippedGeometries = EgtGetMachiningSkippedGeometry()
|
||||||
|
if SkippedGeometries and #SkippedGeometries > 0 and bUseMultiDrill then
|
||||||
|
if #SkippedGeometries == #Proc.OtherGeometries + 1 then
|
||||||
|
EgtRemoveOperation( nMchId)
|
||||||
|
end
|
||||||
|
Proc.SkippedGeometries = SkippedGeometries
|
||||||
|
ProcessDrill.Make( Proc, nPhase, nRawId, nPartId, false)
|
||||||
|
end
|
||||||
|
|
||||||
if not bOk then
|
if not bOk then
|
||||||
local _, sErr = EgtGetLastMachMgrError()
|
local _, sErr = EgtGetLastMachMgrError()
|
||||||
EgtSetOperationMode( nMchId, false)
|
EgtSetOperationMode( nMchId, false)
|
||||||
|
|||||||
@@ -117,6 +117,7 @@ local ProcessLapJoint = {}
|
|||||||
require( 'EgtBase')
|
require( 'EgtBase')
|
||||||
local BL = require( 'BeamLib')
|
local BL = require( 'BeamLib')
|
||||||
local Fbs = require( 'FacesBySaw')
|
local Fbs = require( 'FacesBySaw')
|
||||||
|
local Fbp = require( 'FaceByPocket')
|
||||||
local Cut = require( 'ProcessCut')
|
local Cut = require( 'ProcessCut')
|
||||||
local DoubleCut = require( 'ProcessDoubleCut')
|
local DoubleCut = require( 'ProcessDoubleCut')
|
||||||
local LongCut = require( 'ProcessLongCut')
|
local LongCut = require( 'ProcessLongCut')
|
||||||
@@ -783,14 +784,16 @@ function ProcessLapJoint.IsTailFeature( Proc, b3Raw)
|
|||||||
local nPartId = EgtGetParent( EgtGetParent( Proc.Id) or GDB_ID.NULL)
|
local nPartId = EgtGetParent( EgtGetParent( Proc.Id) or GDB_ID.NULL)
|
||||||
local b3Solid = EgtGetBBoxGlob( EgtGetFirstNameInGroup( nPartId, 'Box') or GDB_ID.NULL, GDB_BB.STANDARD)
|
local b3Solid = EgtGetBBoxGlob( EgtGetFirstNameInGroup( nPartId, 'Box') or GDB_ID.NULL, GDB_BB.STANDARD)
|
||||||
-- verifico se è in coda
|
-- verifico se è in coda
|
||||||
|
|
||||||
local dEndDist = Proc.Box:getMin():getX() - b3Solid:getMin():getX()
|
local dEndDist = Proc.Box:getMin():getX() - b3Solid:getMin():getX()
|
||||||
if dEndDist > BD.MAX_DIST_HTFEA then
|
if ( dEndDist > BD.MAX_DIST_HTFEA) or bUseBHSideMill then
|
||||||
if not( BD.BH_MACHINE) and bUseBHSideMill and ( Proc.Box:getMax():getX() - b3Solid:getMin():getX()) < 400 then
|
if not( BD.BH_MACHINE) and bUseBHSideMill and ( Proc.Box:getMax():getX() - b3Solid:getMin():getX()) < 400 then
|
||||||
return true
|
return true
|
||||||
else
|
else
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- se lunga come trave, oppure non è trave corta e la sua lunghezza supera il massimo o il 80% della lunghezza della trave
|
-- se lunga come trave, oppure non è trave corta e la sua lunghezza supera il massimo o il 80% della lunghezza della trave
|
||||||
if Proc.Box:getDimX() > b3Solid:getDimX() - 1 or
|
if Proc.Box:getDimX() > b3Solid:getDimX() - 1 or
|
||||||
( b3Solid:getDimX() > BD.LEN_SHORT_PART and Proc.Box:getDimX() > min( BD.MAX_LEN_HTFEA, 0.8 * b3Solid:getDimX())) then
|
( b3Solid:getDimX() > BD.LEN_SHORT_PART and Proc.Box:getDimX() > min( BD.MAX_LEN_HTFEA, 0.8 * b3Solid:getDimX())) then
|
||||||
@@ -6332,6 +6335,7 @@ local function MakeMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead, bSinglePa
|
|||||||
if sMyPocketing and
|
if sMyPocketing and
|
||||||
( dMyTMaxDepth > dFacElev + dCollSic - 10 * GEO.EPS_SMALL or ( dMyTMaxDepth > 0.8 * dFacElev + dCollSic and not bIsU) or
|
( dMyTMaxDepth > dFacElev + dCollSic - 10 * GEO.EPS_SMALL or ( dMyTMaxDepth > 0.8 * dFacElev + dCollSic and not bIsU) or
|
||||||
( bIsL and nUseRoughTool == 0) or
|
( bIsL and nUseRoughTool == 0) or
|
||||||
|
( bIsL and Proc.Prc == 20) or
|
||||||
( Proc.Prc == 25 and not bIsU and not bIsL)) or
|
( Proc.Prc == 25 and not bIsU and not bIsL)) or
|
||||||
( dUserMaxElev and dUserMaxElev > 10 * GEO.EPS_SMALL) then
|
( dUserMaxElev and dUserMaxElev > 10 * GEO.EPS_SMALL) then
|
||||||
sPocketing = sMyPocketing
|
sPocketing = sMyPocketing
|
||||||
@@ -6394,6 +6398,21 @@ local function MakeMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead, bSinglePa
|
|||||||
bUseOtherFace = true
|
bUseOtherFace = true
|
||||||
rfFac, dH, dV = EgtSurfTmFacetMinAreaRectangle( Proc.Id, nFacInd, GDB_ID.ROOT)
|
rfFac, dH, dV = EgtSurfTmFacetMinAreaRectangle( Proc.Id, nFacInd, GDB_ID.ROOT)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- se forma a U (recupero la larghezza della faccia perpendicolarmente alle altre)
|
||||||
|
if Proc.Fct == 3 and bIsU then
|
||||||
|
local vtN2 = EgtSurfTmFacetNormVersor( Proc.Id, EgtIf( nFacInd == 0, 1, 0), GDB_ID.ROOT)
|
||||||
|
local vtX = vtN2 ^ vtN
|
||||||
|
if not vtX:isSmall() then
|
||||||
|
local frRef = Frame3d( ptC, ptC + 100 * vtX, ptC + 100 * vtN2)
|
||||||
|
local b3Ref = EgtSurfTmGetFacetBBoxRef( Proc.Id, nFacInd, GDB_BB.STANDARD, frRef)
|
||||||
|
if b3Ref then
|
||||||
|
dH = b3Ref:getDimX()
|
||||||
|
dV = b3Ref:getDimY()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
-- eseguo
|
-- eseguo
|
||||||
bOk, sWarn, sStat = MakeByChainOrSaw( Proc, nPhase, nRawId, nPartId, nFacInd,
|
bOk, sWarn, sStat = MakeByChainOrSaw( Proc, nPhase, nRawId, nPartId, nFacInd,
|
||||||
rfFac, dH, dV, dFacElev, bForceUseBlade,
|
rfFac, dH, dV, dFacElev, bForceUseBlade,
|
||||||
@@ -7417,6 +7436,14 @@ function ProcessLapJoint.Make( Proc, nPhase, nRawId, nPartId, dOvmHead)
|
|||||||
-- se è una spianatura a una faccia richiamo la LongCut
|
-- se è una spianatura a una faccia richiamo la LongCut
|
||||||
elseif Proc.Prc == 90 then
|
elseif Proc.Prc == 90 then
|
||||||
return LongCut.Make( Proc, nPhase, nRawId, nPartId)
|
return LongCut.Make( Proc, nPhase, nRawId, nPartId)
|
||||||
|
-- se arriva da una cut si applica una svuotatura
|
||||||
|
elseif Proc.Prc == 10 then
|
||||||
|
local dDiam = min( Proc.Face[1].Height, Proc.Face[1].Width) * 3
|
||||||
|
local bMillUp = ( BD.DOWN_HEAD and Proc.Face[1].VtN:getZ() > -0.259)
|
||||||
|
local bMillDown = ( BD.DOWN_HEAD and Proc.Face[1].VtN:getZ() < 0.342)
|
||||||
|
local sMchFindMaster = 'OpenPocket'
|
||||||
|
local _, sPocketing = VerifyPocket( Proc, dDiam, nil, nil, sMchFindMaster, bMillUp, bMillDown)
|
||||||
|
return Fbp.Make( Proc, Proc.Id, 0, sPocketing, nPartId, b3Solid)
|
||||||
-- altrimenti, con lama
|
-- altrimenti, con lama
|
||||||
else
|
else
|
||||||
return Cut.Make( Proc, nPhase, nRawId, nPartId, dOvmHead)
|
return Cut.Make( Proc, nPhase, nRawId, nPartId, dOvmHead)
|
||||||
|
|||||||
+22
-1
@@ -1,7 +1,28 @@
|
|||||||
==== Beam Update Log ====
|
==== Beam Update Log ====
|
||||||
|
|
||||||
|
Versione 2.6k2 (28/11/2024)
|
||||||
|
- Modif : nei tagli migliorati i casi in cui si inverte l'SCC per facilitare la caduta del legno
|
||||||
|
- Modif : nei tagli migliorato controllo rimozione del primo cubetto molto piccolo
|
||||||
|
- Modif : nei tagli migliorati i casi con bilinea
|
||||||
|
- Fixed : in lapjoint corretto un caso in cui si sbagliava a calcolare la dimensione della tasca
|
||||||
|
|
||||||
|
Versione 2.6k1 (15/11/2024)
|
||||||
|
- Modif : in macchine tipo Fast lunghezza minima feature per considerare taglio lungo portata a 400 mm
|
||||||
|
- Modif : in tacche si applica svuotatura anche nel caso di elevazione non raggiunta
|
||||||
|
- Modif : in forature in doppio, se necessario, si aumenta lo step per evitare collisione tra le punte durante lavorazione
|
||||||
|
- Fixed : in L010 correzione in utilizzo Q07 (forzatura frese)
|
||||||
|
- Fixed : in coda di rondine corretto bug che causava un blocco anomalo del programma
|
||||||
|
|
||||||
|
Versione 2.6j4 (06/11/2024)
|
||||||
|
- Fixed : corretto caso in cui i fori passanti fatti con due teste finiviano nella rotazione sbagliata, provocando un errore di chariot collision
|
||||||
|
|
||||||
|
Versione 2.6j3 (18/10/2024)
|
||||||
|
- Modif : nei tagli orizzontali si inverte SCC per evitare problemi di cubetti incastrati
|
||||||
|
- Modif : modifiche in ordinamento fori che intersecano tenoni
|
||||||
|
- Fixed : corretto caso con fori sul tenone spostati in coda nella fase errata
|
||||||
|
|
||||||
Versione 2.6j2 (17/10/2024)
|
Versione 2.6j2 (17/10/2024)
|
||||||
- Fixed : in forature corretto caso in cui il foro viene ripetuto in più rotazioni
|
- Fixed : in forature con precedenza corretto caso in cui il foro veniva ripetuto in rotazioni diverse
|
||||||
|
|
||||||
Versione 2.6j1 (10/10/2024)
|
Versione 2.6j1 (10/10/2024)
|
||||||
- Modif : se la macchina è tipo BlockHaus, i LapJoint vengono fatti prima del taglio di separazione
|
- Modif : se la macchina è tipo BlockHaus, i LapJoint vengono fatti prima del taglio di separazione
|
||||||
|
|||||||
+1
-1
@@ -2,5 +2,5 @@
|
|||||||
-- Gestione della versione di Beam
|
-- Gestione della versione di Beam
|
||||||
|
|
||||||
NAME = 'Beam'
|
NAME = 'Beam'
|
||||||
VERSION = '2.6j2'
|
VERSION = '2.6k2'
|
||||||
MIN_EXE = '2.6e5'
|
MIN_EXE = '2.6e5'
|
||||||
|
|||||||
Reference in New Issue
Block a user