Compare commits

...

14 Commits

Author SHA1 Message Date
daniele.nicoli 6a54d2315b NON completamente funzionante - Ingressi e uscite Saw per Slot. Ticket#3045 2026-07-23 17:19:17 +02:00
daniele.nicoli b6ee713fa8 Merge remote-tracking branch 'origin/master' into develop 2026-07-22 11:43:36 +02:00
andrea.villa a60edc26b5 Merge branch 'develop' 2026-07-17 11:31:42 +02:00
andrea.villa 7b3db01f03 Cambio versione per rilascio a cliente 2026-07-17 11:30:57 +02:00
daniele.nicoli d837625d9a In BeamExec aggiunta ScarfJoint tra le feature da eseguire dopo i fori che la attraversano. 2026-07-17 11:15:27 +02:00
daniele.nicoli b562938867 In Drill - Diminuito LastStep forature in doppio (distanza alla quale smette foratura speculare e inizia alternata). 2026-07-15 09:49:39 +02:00
luca.mazzoleni 7bd07d8bfd Merge branch 'master' into develop 2026-07-14 09:22:55 +02:00
luca.mazzoleni 511ea1e7fb - update log e version 2026-07-14 09:22:12 +02:00
luca.mazzoleni 38135f12a8 Merge branch 'develop' 2026-07-14 09:19:03 +02:00
daniele.nicoli b812addab3 Merge branch 'Test_CpS_LeadIO' into develop 2026-07-09 09:50:18 +02:00
daniele.nicoli a56e8761d0 LapJoint - CleanCorner piccola correzione 2026-07-09 09:48:34 +02:00
daniele.nicoli 771a56d832 - BeamLib - aumentati parametri che salva la funzione Edges
- LapJoint - Modifiche LeadInOut per SawPlusChain
- LapJoint - Aggiunto casi CleanCorner
2026-07-08 16:56:25 +02:00
daniele.nicoli f9a9c2412a Aggiunto To do nella selezione utensile/ottimizzazione teste 2026-06-26 14:55:29 +02:00
daniele.nicoli 0e1e27dc50 Merge branch 'master' into develop 2026-06-26 14:49:32 +02:00
8 changed files with 292 additions and 114 deletions
+4 -4
View File
@@ -996,12 +996,12 @@ local function OrderFeatures( vProc, b3Raw, nPartId)
return true return true
end end
-- se primo è foro e secondo è un ribasso o tenone, il foro va sempre prima a meno che il ribasso non sia di testa -- se primo è foro e secondo è un ribasso o tenone, il foro va sempre prima a meno che il ribasso non sia di testa
if Drill.Identify(B1) and ( LapJoint.Identify(B2) or Mortise.Identify(B2) or Tenon.Identify(B2)) and B2.PassedByHole and if Drill.Identify(B1) and ( LapJoint.Identify(B2) or Mortise.Identify(B2) or Tenon.Identify(B2) or ScarfJoint.Identify(B2)) and B2.PassedByHole and
B1.Box:getCenter():getX() > B2.Box:getMin():getX() and B1.Box:getCenter():getX() < B2.Box:getMax():getX() then B1.Box:getCenter():getX() > B2.Box:getMin():getX() and B1.Box:getCenter():getX() < B2.Box:getMax():getX() then
return true return true
end end
-- se primo è un ribasso e secondo è un foro o tenone, il ribasso va sempre dopo a meno che il ribasso non sia di testa -- se primo è un ribasso e secondo è un foro o tenone, il ribasso va sempre dopo a meno che il ribasso non sia di testa
if ( LapJoint.Identify(B1) or Mortise.Identify(B1) or Tenon.Identify(B1)) and B1.PassedByHole and Drill.Identify(B2) and if ( LapJoint.Identify(B1) or Mortise.Identify(B1) or Tenon.Identify(B1) or ScarfJoint.Identify(B1)) and B1.PassedByHole and Drill.Identify(B2) and
B2.Box:getCenter():getX() > B1.Box:getMin():getX() and B2.Box:getCenter():getX() < B1.Box:getMax():getX() then B2.Box:getCenter():getX() > B1.Box:getMin():getX() and B2.Box:getCenter():getX() < B1.Box:getMax():getX() then
return false return false
end end
@@ -2227,8 +2227,8 @@ function GetFeatureInfoAndDependency( vProc, b3Raw, nPartId)
and DtMortise.SideIdentify( ProcB) and Overlaps( Proc.Box, ProcB.Box) and DtMortise.IsDeeper( ProcB, b3Raw) then and DtMortise.SideIdentify( ProcB) and Overlaps( Proc.Box, ProcB.Box) and DtMortise.IsDeeper( ProcB, b3Raw) then
Proc.PassedByDtMortise = true Proc.PassedByDtMortise = true
end end
-- se tenone è attraversato da foro allora il foro deve essere fatto prima -- se tenone o ScarfJoint sono attraversati da foro allora il foro deve essere fatto prima
if Tenon.Identify( Proc) and Drill.Identify( ProcB) and Overlaps( Proc.Box, ProcB.Box) then if ( Tenon.Identify( Proc) or ScarfJoint.Identify( Proc)) and Drill.Identify( ProcB) and Overlaps( Proc.Box, ProcB.Box) then
Proc.PassedByHole = true Proc.PassedByHole = true
end end
-- se taglio attraversato da foro, si definisce precedenza in base ad angolo -- se taglio attraversato da foro, si definisce precedenza in base ad angolo
+29 -12
View File
@@ -1307,29 +1307,46 @@ function BeamLib.GetFacetsInfo( Proc, b3Raw)
end end
--------------------------------------------------------------------- ---------------------------------------------------------------------
function BeamLib.GetEdgesInfo( Proc, Face) function BeamLib.GetEdgesInfo( ProcOrId, FaceId)
-- disambiguazione feature vs id trimesh
local Proc = {}
if type( ProcOrId) == "table" then
Proc = ProcOrId
elseif type( ProcOrId) == "number" then
Proc.Id = ProcOrId
else
error( 'GetEdgesInfo : Only feature or trimesh supported')
end
local Edges = {} local Edges = {}
local nFaceType, vEdges = EgtSurfTmGetFacetOutlineInfo( Proc.Id, Face.Id, GDB_ID.ROOT) local nFaceType, vEdges = EgtSurfTmGetFacetOutlineInfo( Proc.Id, FaceId, GDB_ID.ROOT)
if nFaceType < 1 then if nFaceType < 1 then
for j = 1, #vEdges do for i = 1, #vEdges do
local nPreviousEdgeIndex = j - 1 local nPreviousEdgeIndex = i - 1
if j == 1 then if i == 1 then
nPreviousEdgeIndex = #vEdges nPreviousEdgeIndex = #vEdges
end end
local nNextEdgeIndex = j + 1 local nNextEdgeIndex = i + 1
if j == #vEdges then if i == #vEdges then
nNextEdgeIndex = 1 nNextEdgeIndex = 1
end end
local CurrentEdge = {} local CurrentEdge = {}
CurrentEdge.AdjacentFaceId = vEdges[j].Adj CurrentEdge.AdjacentFaceId = vEdges[i].Adj
CurrentEdge.ToolDirection = Vector3d( vEdges[j].Norm) CurrentEdge.ToolDirection = Vector3d( vEdges[i].Norm)
CurrentEdge.Length = vEdges[j].Len CurrentEdge.Length = vEdges[i].Len
CurrentEdge.Elevation = vEdges[j].Elev CurrentEdge.Elevation = vEdges[i].Elev
CurrentEdge.IsOpen = vEdges[j].Open CurrentEdge.IsOpen = vEdges[i].Open
CurrentEdge.IsStartOpen = ( vEdges[nPreviousEdgeIndex].Open) CurrentEdge.IsStartOpen = ( vEdges[nPreviousEdgeIndex].Open)
CurrentEdge.IsEndOpen = ( vEdges[nNextEdgeIndex].Open) CurrentEdge.IsEndOpen = ( vEdges[nNextEdgeIndex].Open)
CurrentEdge.ptStart = Point3d( vEdges[i].Start)
CurrentEdge.ptEnd = Point3d( vEdges[nNextEdgeIndex].Start)
CurrentEdge.vtEdge = CurrentEdge.ptEnd - CurrentEdge.ptStart ; CurrentEdge.vtEdge:normalize()
CurrentEdge.Id = i - 1
CurrentEdge.PreviousEdgeIndex = nPreviousEdgeIndex
CurrentEdge.NextEdgeIndex = nNextEdgeIndex
table.insert( Edges, CurrentEdge) table.insert( Edges, CurrentEdge)
end end
+2 -2
View File
@@ -931,7 +931,7 @@ function FacesBySaw.MakeTwo( Proc, nPhase, nRawId, nPartId, dOvmHead, sCutType,
end end
--------------------------------------------------------------------- ---------------------------------------------------------------------
function FacesBySaw.CalcLeadInOutPerpGeom( ptP1, ptP2, vtV1, vtV2, vtN, dRad, vtRef, dCutExtra, b3Box) function FacesBySaw.CalcLeadInOutPerpGeom( ptP1, ptP2, vtV1, vtV2, vtN, dRad, vtRef, dCutExtra, b3Box, bIsRightWorkside)
-- Mi assicuro che i vettori ingresso/uscita giacciano nel piano -- Mi assicuro che i vettori ingresso/uscita giacciano nel piano
vtV1 = vtV1 - vtV1 * vtN * vtN ; vtV1:normalize() vtV1 = vtV1 - vtV1 * vtN * vtN ; vtV1:normalize()
vtV2 = vtV2 - vtV2 * vtN * vtN ; vtV2:normalize() vtV2 = vtV2 - vtV2 * vtN * vtN ; vtV2:normalize()
@@ -941,7 +941,7 @@ function FacesBySaw.CalcLeadInOutPerpGeom( ptP1, ptP2, vtV1, vtV2, vtN, dRad, vt
-- Sistema di riferimento intrinseco al taglio -- Sistema di riferimento intrinseco al taglio
local vtX = vtTg ^ vtN local vtX = vtTg ^ vtN
local frFace = Frame3d( ptP1, vtX, vtTg, vtN) local frFace = Frame3d( ptP1, vtX, vtTg, vtN)
local bRight = ( vtX * vtRef > 0) local bRight = EgtIf( bIsRightWorkside == nil, ( vtX * vtRef > 0), bIsRightWorkside)
EgtOutLog( 'LioPerp --> Vref=' .. tostring( vtRef) .. ' V1=' .. tostring( vtV1) .. ' V2=' .. tostring( vtV2), 3) EgtOutLog( 'LioPerp --> Vref=' .. tostring( vtRef) .. ' V1=' .. tostring( vtV1) .. ' V2=' .. tostring( vtV2), 3)
-- Versore di attacco e uscita -- Versore di attacco e uscita
+1
View File
@@ -409,6 +409,7 @@ local function FindMachining( MachiningType, sType, Params, bTopHead, bDownHead,
if nActiveHead == 0 then if nActiveHead == 0 then
return ReturnParams( MachiningType, Machining.Name, Machining.Type, ToolParams) return ReturnParams( MachiningType, Machining.Name, Machining.Type, ToolParams)
-- verifico se posso usare lo stesso utensile della testa attiva -- verifico se posso usare lo stesso utensile della testa attiva
--TODO - se arrivano altri ticket come 3044, valutare rimozione controllo nActiveHead e usare l'utensile già caricato anche se non è sulla testa attiva (ultima utilizzata)
elseif ( nActiveHead == 1 and not bH2 and sToolName == H1_TOOL) or ( nActiveHead == 2 and bH2 and sToolName == H2_TOOL) then elseif ( nActiveHead == 1 and not bH2 and sToolName == H1_TOOL) or ( nActiveHead == 2 and bH2 and sToolName == H2_TOOL) then
-- se l'utensile sulla testa attiva è molto più piccolo rispetto a quelli salvati non lo scelgo, a meno che non siano entrambi grandi (truciolatori) -- se l'utensile sulla testa attiva è molto più piccolo rispetto a quelli salvati non lo scelgo, a meno che non siano entrambi grandi (truciolatori)
if ( not sH1Param or not sH1Param.TDiam or ( sH1Param.TDiam < 75 and ToolParams.TDiam < 75 and sH1Param.TDiam < dBiggerToolTolerance * ToolParams.TDiam)) and ( not sH2Param or not sH2Param.TDiam or ( sH2Param.TDiam < 75 and ToolParams.TDiam < 75 and sH2Param.TDiam < 1.25 * ToolParams.TDiam)) then if ( not sH1Param or not sH1Param.TDiam or ( sH1Param.TDiam < 75 and ToolParams.TDiam < 75 and sH1Param.TDiam < dBiggerToolTolerance * ToolParams.TDiam)) and ( not sH2Param or not sH2Param.TDiam or ( sH2Param.TDiam < 75 and ToolParams.TDiam < 75 and sH2Param.TDiam < 1.25 * ToolParams.TDiam)) then
+1 -1
View File
@@ -667,7 +667,7 @@ function ProcessDrill.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH)
end end
end end
else else
sUserNotes = EgtSetValInNotes( sUserNotes, 'LastStep', MIRROR_DRILLINGS_MIN_DISTANCE / 2 + 15) sUserNotes = EgtSetValInNotes( sUserNotes, 'LastStep', MIRROR_DRILLINGS_MIN_DISTANCE / 2 + 10)
end end
if dDepth > Proc.MachDepthDouble + 10 * GEO.EPS_SMALL then 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' sMyWarn = 'Warning in double head drilling : depth (' .. EgtNumToString( dDepth, 1) .. ') reduced to (' .. EgtNumToString( Proc.MachDepthDouble, 1) .. ') to match H2 max tool depth'
+246 -94
View File
@@ -3570,7 +3570,7 @@ local function MakeByChainOrSaw( Proc, nPhase, nRawId, nPartId, nFacInd,
-- se necessario, avverto limitazione dell'affondamento -- se necessario, avverto limitazione dell'affondamento
if dElev > dMaxDepth + 10 * GEO.EPS_SMALL then if dElev > dMaxDepth + 10 * GEO.EPS_SMALL then
if Proc.Fct == 3 and Proc.Topology == 'Groove' and Proc.IsThrough and (Proc.AffectedFaces.Left or Proc.AffectedFaces.Right) and not Proc.IsParallel then if Proc.Fct == 3 and Proc.Topology == 'Groove' and Proc.IsThrough and (Proc.AffectedFaces.Left or Proc.AffectedFaces.Right) and not Proc.IsParallel then
local Edges = BL.GetEdgesInfo( Proc, Proc.Face[nFacAdj+1]) local Edges = BL.GetEdgesInfo( Proc, Proc.Face[nFacAdj+1].Id)
local dWorkEdgeWidth local dWorkEdgeWidth
for i = 1, #Edges do for i = 1, #Edges do
if Edges[i].AdjacentFaceId == nFacInd then if Edges[i].AdjacentFaceId == nFacInd then
@@ -3701,7 +3701,7 @@ local function MakeByChainOrSaw( Proc, nPhase, nRawId, nPartId, nFacInd,
EgtSetMachiningParam( MCH_MP.DEPTH, dMachiningDepth) EgtSetMachiningParam( MCH_MP.DEPTH, dMachiningDepth)
-- si decidono lato di lavoro, inversione e estensione in base al lato aperto -- si decidono lato di lavoro, inversione e estensione in base al lato aperto
local nEdgeIndex = BL.GetEdgeToMachineFromVector( Proc.Id, nFacAdj, vtRef) local nEdgeIndex = BL.GetEdgeToMachineFromVector( Proc.Id, nFacAdj, vtRef)
local EdgesEgt = BL.GetEdgesInfo( Proc, Proc.Face[nFacAdj+1]) local EdgesEgt = BL.GetEdgesInfo( Proc, Proc.Face[nFacAdj+1].Id)
local CurrentEdge = EdgesEgt[nEdgeIndex+1] local CurrentEdge = EdgesEgt[nEdgeIndex+1]
local dStartAddLen = 0 local dStartAddLen = 0
local dEndAddLen = 0 local dEndAddLen = 0
@@ -4052,7 +4052,7 @@ local function MachineByMill( Proc, nPhase, nRawId, nPartId, b3Solid, tvtN, nBas
-- faccia principale e quindi la componente X del versore della faccia potrebbe dare un valore non coerente -- faccia principale e quindi la componente X del versore della faccia potrebbe dare un valore non coerente
local dDiffFromSqAng = dAng + 90 local dDiffFromSqAng = dAng + 90
-- informazioni sul lato da lavorare -- informazioni sul lato da lavorare
local Edges = BL.GetEdgesInfo( Proc, Proc.Face[nSideFace + 1]) local Edges = BL.GetEdgesInfo( Proc, Proc.Face[nSideFace + 1].Id)
local EdgeToMachine = {} local EdgeToMachine = {}
for i = 1, #Edges do for i = 1, #Edges do
local CurrentEdge = Edges[i] local CurrentEdge = Edges[i]
@@ -4823,7 +4823,7 @@ local function ManageAntiSplintBySaw( Proc, b3Raw, b3Solid, bIsU, vtN, nFacInd,
local dMaxDepth = 200 local dMaxDepth = 200
local bAdj, dAng, dExtraOffs, sWarn2, nIdMach local bAdj, dAng, dExtraOffs, sWarn2, nIdMach
-- Se faccia sulla quale cerca di applicare l'antisplint è chiusa e limitata da altre facce non lo applica -- Se faccia sulla quale cerca di applicare l'antisplint è chiusa e limitata da altre facce non lo applica
local FacetEdge = BL.GetEdgesInfo( Proc, Proc.Face[nFacet+1]) local FacetEdge = BL.GetEdgesInfo( Proc, Proc.Face[nFacet+1].Id)
for nEdge = 1, #FacetEdge do for nEdge = 1, #FacetEdge do
if AreSameVectorApprox( FacetEdge[nEdge].ToolDirection, vtN) and ( not FacetEdge[nEdge].IsStartOpen or not FacetEdge[nEdge].IsEndOpen) and not FacetEdge[nEdge].IsOpen then if AreSameVectorApprox( FacetEdge[nEdge].ToolDirection, vtN) and ( not FacetEdge[nEdge].IsStartOpen or not FacetEdge[nEdge].IsEndOpen) and not FacetEdge[nEdge].IsOpen then
sWarn2 = 'Warning : antisplint not applicable on closed face' sWarn2 = 'Warning : antisplint not applicable on closed face'
@@ -5555,25 +5555,31 @@ function SawPlusChain.GetBottomFaceEdges( Proc, Face)
local nFaceType, vEdges = EgtSurfTmGetFacetOutlineInfo( Proc.Id, Face.Id, GDB_ID.ROOT) local nFaceType, vEdges = EgtSurfTmGetFacetOutlineInfo( Proc.Id, Face.Id, GDB_ID.ROOT)
if nFaceType < 1 then if nFaceType < 1 then
for j = 1, #vEdges do for i = 1, #vEdges do
local nPreviousEdgeIndex = j - 1 local nPreviousEdgeIndex = i - 1
if j == 1 then if i == 1 then
nPreviousEdgeIndex = #vEdges nPreviousEdgeIndex = #vEdges
end end
local nNextEdgeIndex = j + 1 local nNextEdgeIndex = i + 1
if j == #vEdges then if i == #vEdges then
nNextEdgeIndex = 1 nNextEdgeIndex = 1
end end
local CurrentEdge = {} local CurrentEdge = {}
CurrentEdge.AdjacentFaceId = vEdges[j].Adj CurrentEdge.AdjacentFaceId = vEdges[i].Adj
CurrentEdge.ToolDirection = Vector3d( vEdges[j].Norm) CurrentEdge.ToolDirection = Vector3d( vEdges[i].Norm)
CurrentEdge.Length = vEdges[j].Len CurrentEdge.Length = vEdges[i].Len
CurrentEdge.Elevation = vEdges[j].Elev CurrentEdge.Elevation = vEdges[i].Elev
CurrentEdge.IsOpen = vEdges[j].Open CurrentEdge.IsOpen = vEdges[i].Open
CurrentEdge.IsStartOpen = ( vEdges[nPreviousEdgeIndex].Open) CurrentEdge.IsStartOpen = ( vEdges[nPreviousEdgeIndex].Open)
CurrentEdge.IsEndOpen = ( vEdges[nNextEdgeIndex].Open) CurrentEdge.IsEndOpen = ( vEdges[nNextEdgeIndex].Open)
CurrentEdge.Id = j - 1 CurrentEdge.Id = i - 1
CurrentEdge.ptStart = Point3d( vEdges[i].Start)
CurrentEdge.ptEnd = Point3d( vEdges[nNextEdgeIndex].Start)
CurrentEdge.vtEdge = CurrentEdge.ptEnd - CurrentEdge.ptStart ; CurrentEdge.vtEdge:normalize()
CurrentEdge.Id = i - 1
CurrentEdge.PreviousEdgeIndex = nPreviousEdgeIndex
CurrentEdge.NextEdgeIndex = nNextEdgeIndex
if CurrentEdge.AdjacentFaceId == Proc.MainFaces.LongFace.Id then if CurrentEdge.AdjacentFaceId == Proc.MainFaces.LongFace.Id then
table.insert( Edges.LongEdges, CurrentEdge) table.insert( Edges.LongEdges, CurrentEdge)
@@ -5601,25 +5607,30 @@ function SawPlusChain.GetLongFaceEdges( Proc, Face)
local nFaceType, vEdges = EgtSurfTmGetFacetOutlineInfo( Proc.Id, Face.Id, GDB_ID.ROOT) local nFaceType, vEdges = EgtSurfTmGetFacetOutlineInfo( Proc.Id, Face.Id, GDB_ID.ROOT)
if nFaceType < 1 then if nFaceType < 1 then
for j = 1, #vEdges do for i = 1, #vEdges do
local nPreviousEdgeIndex = j - 1 local nPreviousEdgeIndex = i - 1
if j == 1 then if i == 1 then
nPreviousEdgeIndex = #vEdges nPreviousEdgeIndex = #vEdges
end end
local nNextEdgeIndex = j + 1 local nNextEdgeIndex = i + 1
if j == #vEdges then if i == #vEdges then
nNextEdgeIndex = 1 nNextEdgeIndex = 1
end end
local CurrentEdge = {} local CurrentEdge = {}
CurrentEdge.AdjacentFaceId = vEdges[j].Adj CurrentEdge.AdjacentFaceId = vEdges[i].Adj
CurrentEdge.ToolDirection = Vector3d( vEdges[j].Norm) CurrentEdge.ToolDirection = Vector3d( vEdges[i].Norm)
CurrentEdge.Length = vEdges[j].Len CurrentEdge.Length = vEdges[i].Len
CurrentEdge.Elevation = vEdges[j].Elev CurrentEdge.Elevation = vEdges[i].Elev
CurrentEdge.IsOpen = vEdges[j].Open CurrentEdge.IsOpen = vEdges[i].Open
CurrentEdge.IsStartOpen = ( vEdges[nPreviousEdgeIndex].Open) CurrentEdge.IsStartOpen = ( vEdges[nPreviousEdgeIndex].Open)
CurrentEdge.IsEndOpen = ( vEdges[nNextEdgeIndex].Open) CurrentEdge.IsEndOpen = ( vEdges[nNextEdgeIndex].Open)
CurrentEdge.Id = j - 1 CurrentEdge.ptStart = Point3d( vEdges[i].Start)
CurrentEdge.ptEnd = Point3d( vEdges[nNextEdgeIndex].Start)
CurrentEdge.vtEdge = CurrentEdge.ptEnd - CurrentEdge.ptStart ; CurrentEdge.vtEdge:normalize()
CurrentEdge.Id = i - 1
CurrentEdge.PreviousEdgeIndex = nPreviousEdgeIndex
CurrentEdge.NextEdgeIndex = nNextEdgeIndex
if Proc.Topology == 'Tunnel' then if Proc.Topology == 'Tunnel' then
if CurrentEdge.AdjacentFaceId > -1 then if CurrentEdge.AdjacentFaceId > -1 then
@@ -5651,7 +5662,7 @@ function SawPlusChain.GetLongFaceEdges( Proc, Face)
end end
function SawPlusChain.CalculateLeadInOut( Machining, EdgeToMachine) function SawPlusChain.CalculateLeadInOut( Machining, EdgeToMachine, FaceToMachine, b3Raw, Proc)
-- TODO implementare le funzioni di Tool Collision Avoidance (vedi wiki e FacesBysaw -> CalcLeadInOutPerpGeom) -- TODO implementare le funzioni di Tool Collision Avoidance (vedi wiki e FacesBysaw -> CalcLeadInOutPerpGeom)
-- si determina l'eventuale riduzione da applicare in caso di inizio o fine chiusi -- si determina l'eventuale riduzione da applicare in caso di inizio o fine chiusi
@@ -5702,6 +5713,49 @@ function SawPlusChain.CalculateLeadInOut( Machining, EdgeToMachine)
LeadIn.StartAddLength = BD.CUT_EXTRA LeadIn.StartAddLength = BD.CUT_EXTRA
LeadOut.EndAddLength = BD.CUT_EXTRA LeadOut.EndAddLength = BD.CUT_EXTRA
end end
local vtN = Vector3d( FaceToMachine.VtN)
local vtOrthO
if EdgeToMachine.Elevation > - 10 * GEO.EPS_SMALL then
vtOrthO = Vector3d( EdgeToMachine.ToolDirection)
else
vtOrthO = -Vector3d( EdgeToMachine.ToolDirection)
end
local ptP1 = Point3d( EdgeToMachine.ptStart)
local ptP2 = Point3d( EdgeToMachine.ptEnd)
local Edges = BL.GetEdgesInfo( Proc, FaceToMachine.Id)
local vtV1 = -Vector3d( Edges[EdgeToMachine.PreviousEdgeIndex].vtEdge)
local vtV2 = Vector3d( Edges[EdgeToMachine.NextEdgeIndex].vtEdge)
local bInvert = Machining.Invert
if bInvert then
ptP1, ptP2 = ptP2, ptP1
vtV1, vtV2 = vtV2, vtV1
end
local vtTg = ptP2 - ptP1 ; vtTg:normalize()
-- Versore di riferimento
local vtRef = Vector3d( vtTg)
vtRef:rotate( vtN, EgtIf( bInvert, -90, 90))
local bIsRightWorkside = Machining.Workside == MCH_MILL_WS.RIGHT
if bIsRightWorkside ~= bInvert--[[ and EdgeToMachine.Id ~= FaceToMachine.Edges.BottomEdge.Id]] then
vtV1 = -vtV1
vtV2 = -vtV2
end
local b3Box = BBox3d( b3Raw)
b3Box:expand( BD.CUT_SIC)
local ptPa1 = ptP1 + LeadIn.StartAddLength * -vtTg
local ptPa2 = ptP2 + LeadOut.EndAddLength * vtTg
Machining.vtTg = vtTg
LeadIn.vtV1 = vtV1
LeadOut.vtV2 = vtV2
LeadIn.ptP1 = ptP1
LeadOut.ptP2 = ptP2
Machining.vtOffset = vtRef
LeadIn.TangentDistance, LeadIn.PerpDistance, LeadOut.TangentDistance, LeadOut.PerpDistance = Fbs.CalcLeadInOutPerpGeom( ptPa1, ptPa2, vtV1, vtV2, vtN, ( Machining.Tool.Diameter / 2), vtRef, -Machining.RadialOffset, b3Box, bIsRightWorkside)
else else
if Machining.IsStartClosed then if Machining.IsStartClosed then
LeadIn.StartAddLength = -dAddLengthToReduce LeadIn.StartAddLength = -dAddLengthToReduce
@@ -5835,11 +5889,12 @@ function SawPlusChain.Saw.GetSCC( vtMachiningDirection)
end end
function SawPlusChain.Saw.CalculateMachiningParameters( Proc, FaceToMachine, EdgeToMachine) function SawPlusChain.Saw.CalculateMachiningParameters( Proc, FaceToMachine, EdgeToMachine, b3Raw)
local Cutting = {} local Cutting = {}
Cutting.CanApply = true Cutting.CanApply = true
Cutting.Message = '' Cutting.Message = ''
Cutting.ProcId = Proc.Id Cutting.ProcId = Proc.Id
EdgeToMachine.FaceId = FaceToMachine.Id
local dPocketHeight = 0 local dPocketHeight = 0
if Proc.Topology == 'Tunnel' then if Proc.Topology == 'Tunnel' then
@@ -5959,7 +6014,7 @@ function SawPlusChain.Saw.CalculateMachiningParameters( Proc, FaceToMachine, Edg
Cutting.BlockedAxis.VtN = FaceToMachine.VtN Cutting.BlockedAxis.VtN = FaceToMachine.VtN
Cutting.BlockedAxis.VtOut = EgtIf( FaceToMachine.VtN:getX() > 0, X_AX(), -X_AX()) Cutting.BlockedAxis.VtOut = EgtIf( FaceToMachine.VtN:getX() > 0, X_AX(), -X_AX())
-- approccio e retrazione -- approccio e retrazione
Cutting.LeadIn, Cutting.LeadOut = SawPlusChain.CalculateLeadInOut( Cutting, EdgeToMachine) Cutting.LeadIn, Cutting.LeadOut = SawPlusChain.CalculateLeadInOut( Cutting, EdgeToMachine, FaceToMachine, b3Raw, Proc)
-- eventuale step orizzontale -- eventuale step orizzontale
Cutting.HorizontalSteps = {} Cutting.HorizontalSteps = {}
if Cutting.Tool.SideStep then if Cutting.Tool.SideStep then
@@ -5993,15 +6048,38 @@ function SawPlusChain.Saw.ApplyAllSteps( Cutting, b3Raw)
local bIsCuttingOk = false local bIsCuttingOk = false
local sCuttingOriginalMessage = Cutting.Message or '' local sCuttingOriginalMessage = Cutting.Message or ''
local sCuttingApplyMessage = '' local sCuttingApplyMessage = ''
local vtTg = Cutting.vtTg
local bInvert = Cutting.Invert
local dOriginalRadialOffset = Cutting.RadialOffset local dOriginalRadialOffset = Cutting.RadialOffset
local dOriginalLeadInPerpDistance = Cutting.LeadIn.PerpDistance local dOriginalLeadInPerpDistance = Cutting.LeadIn.PerpDistance
local dOriginalLeadInTangDistance = Cutting.LeadIn.TangentDistance
local dOriginalLeadOutPerpDistance = Cutting.LeadOut.PerpDistance local dOriginalLeadOutPerpDistance = Cutting.LeadOut.PerpDistance
local dOriginalLeadOutTangDistance = Cutting.LeadOut.TangentDistance
for i = Cutting.HorizontalSteps.Count, 1, -1 do for i = Cutting.HorizontalSteps.Count, 1, -1 do
Cutting.RadialOffset = dOriginalRadialOffset + Cutting.HorizontalSteps.StepLength * ( i - 1) local dRadialStep = Cutting.HorizontalSteps.StepLength * ( i - 1)
local dDirectionProportion = ( Cutting.LeadIn.vtV1 * vtTg)
Cutting.RadialOffset = dOriginalRadialOffset + dRadialStep
local dStepOffset = Cutting.RadialOffset - dOriginalRadialOffset
local dTangOffsetStep = ( Cutting.RadialOffset * dDirectionProportion)
local bTiltedSlot = abs( dDirectionProportion) > 0 + 10 * GEO.EPS_SMALL
local bIsRightWorkside = Cutting.Workside == MCH_MILL_WS.RIGHT
-- update distanza perpendicolare attacco per contemplare l'offset applicato -- update distanza perpendicolare attacco per contemplare l'offset applicato
Cutting.LeadIn.PerpDistance = dOriginalLeadInPerpDistance - Cutting.RadialOffset
Cutting.LeadOut.PerpDistance = dOriginalLeadOutPerpDistance - Cutting.RadialOffset local b3Box = BBox3d( b3Raw)
b3Box:expand( BD.CUT_SIC)
local ptPa1 = Cutting.LeadIn.ptP1 + ( Cutting.LeadIn.StartAddLength - dTangOffsetStep) * -vtTg + dStepOffset * Cutting.LeadIn.vtV1
local ptPa2 = Cutting.LeadOut.ptP2 + ( Cutting.LeadOut.EndAddLength + dTangOffsetStep) * vtTg + dStepOffset * Cutting.LeadOut.vtV2
Cutting.LeadIn.TangentDistance, Cutting.LeadIn.PerpDistance, Cutting.LeadOut.TangentDistance, Cutting.LeadOut.PerpDistance = Fbs.CalcLeadInOutPerpGeom( ptPa1, ptPa2, Cutting.LeadIn.vtV1, Cutting.LeadOut.vtV2, Cutting.BlockedAxis.VtN, ( Cutting.Tool.Diameter / 2), Cutting.vtOffset, -Cutting.RadialOffset, b3Box, bIsRightWorkside)
--Cutting.LeadIn.PerpDistance = dOriginalLeadInPerpDistance - dRadialStep --dOriginalLeadInPerpDistance - Cutting.RadialOffset
--Cutting.LeadIn.TangentDistance = dOriginalLeadInTangDistance + dTangOffsetStep --+ Cutting.LeadIn.StartAddLength
--Cutting.LeadOut.PerpDistance = dOriginalLeadOutPerpDistance - dRadialStep --- Cutting.RadialOffset
--Cutting.LeadOut.TangentDistance = dOriginalLeadOutTangDistance - dTangOffsetStep --- Cutting.LeadOut.EndAddLength
Cutting.LeadIn.StartAddLength = Cutting.LeadIn.StartAddLength + EgtIf( bTiltedSlot, - ( dTangOffsetStep + Cutting.LeadIn.StartAddLength), 0)
Cutting.LeadOut.EndAddLength = Cutting.LeadOut.EndAddLength + EgtIf( bTiltedSlot, ( dTangOffsetStep + Cutting.LeadOut.EndAddLength), 0)
-- applicazione lavorazione -- applicazione lavorazione
bIsCuttingOk, sCuttingApplyMessage = SawPlusChain.ApplyMachining( Cutting, b3Raw) bIsCuttingOk, sCuttingApplyMessage = SawPlusChain.ApplyMachining( Cutting, b3Raw)
-- update messaggi -- update messaggi
@@ -6243,9 +6321,9 @@ function SawPlusChain.Make( bOnlySaw, Proc, nRawId)
-- lavorazione di lama - fondo della tasca o fino a massimo materiale se tunnel -- lavorazione di lama - fondo della tasca o fino a massimo materiale se tunnel
local Cutting = {} local Cutting = {}
if Proc.Topology == 'Tunnel' then if Proc.Topology == 'Tunnel' then
Cutting = SawPlusChain.Saw.CalculateMachiningParameters( Proc, Proc.MainFaces.LongFace, Proc.MainFaces.LongFace.Edges.OppositeEdges[1]) Cutting = SawPlusChain.Saw.CalculateMachiningParameters( Proc, Proc.MainFaces.LongFace, Proc.MainFaces.LongFace.Edges.OppositeEdges[1], b3Raw)
else else
Cutting = SawPlusChain.Saw.CalculateMachiningParameters( Proc, Proc.MainFaces.LongFace, Proc.MainFaces.LongFace.Edges.BottomEdge) Cutting = SawPlusChain.Saw.CalculateMachiningParameters( Proc, Proc.MainFaces.LongFace, Proc.MainFaces.LongFace.Edges.BottomEdge, b3Raw)
end end
local bIsCuttingOk = false local bIsCuttingOk = false
if Cutting.CanApply then if Cutting.CanApply then
@@ -6257,7 +6335,7 @@ function SawPlusChain.Make( bOnlySaw, Proc, nRawId)
local dBottomDepthToMachine = Cutting.RadialOffset local dBottomDepthToMachine = Cutting.RadialOffset
-- lato opposto del tunnel -- lato opposto del tunnel
if Proc.Topology == 'Tunnel' then if Proc.Topology == 'Tunnel' then
Cutting = SawPlusChain.Saw.CalculateMachiningParameters( Proc, Proc.MainFaces.LongFace, Proc.MainFaces.LongFace.Edges.OppositeEdges[2]) Cutting = SawPlusChain.Saw.CalculateMachiningParameters( Proc, Proc.MainFaces.LongFace, Proc.MainFaces.LongFace.Edges.OppositeEdges[2], b3Raw)
bIsCuttingOk = false bIsCuttingOk = false
if Cutting.CanApply then if Cutting.CanApply then
bIsCuttingOk, Cutting.Message = SawPlusChain.Saw.ApplyAllSteps( Cutting, b3Raw) bIsCuttingOk, Cutting.Message = SawPlusChain.Saw.ApplyAllSteps( Cutting, b3Raw)
@@ -6270,7 +6348,7 @@ function SawPlusChain.Make( bOnlySaw, Proc, nRawId)
if Cutting.CanApply and Cutting.RadialOffset > 10 * GEO.EPS_SMALL then if Cutting.CanApply and Cutting.RadialOffset > 10 * GEO.EPS_SMALL then
-- eventuale lavorazione di lama - lato della tasca da cui inizia la lavorazione -- eventuale lavorazione di lama - lato della tasca da cui inizia la lavorazione
if Proc.MainFaces.LongFace.Edges.BottomEdge.IsStartOpen then if Proc.MainFaces.LongFace.Edges.BottomEdge.IsStartOpen then
Cutting = SawPlusChain.Saw.CalculateMachiningParameters( Proc, Proc.MainFaces.LongFace, Proc.MainFaces.LongFace.Edges.SideEdges.StartEdge) Cutting = SawPlusChain.Saw.CalculateMachiningParameters( Proc, Proc.MainFaces.LongFace, Proc.MainFaces.LongFace.Edges.SideEdges.StartEdge, b3Raw)
bIsCuttingOk = false bIsCuttingOk = false
if Cutting.CanApply then if Cutting.CanApply then
bIsCuttingOk, Cutting.Message = SawPlusChain.Saw.ApplyAllSteps( Cutting, b3Raw) bIsCuttingOk, Cutting.Message = SawPlusChain.Saw.ApplyAllSteps( Cutting, b3Raw)
@@ -6281,7 +6359,7 @@ function SawPlusChain.Make( bOnlySaw, Proc, nRawId)
end end
-- eventuale lavorazione di lama - lato della tasca in cui finisce la lavorazione -- eventuale lavorazione di lama - lato della tasca in cui finisce la lavorazione
if Proc.MainFaces.LongFace.Edges.BottomEdge.IsEndOpen then if Proc.MainFaces.LongFace.Edges.BottomEdge.IsEndOpen then
Cutting = SawPlusChain.Saw.CalculateMachiningParameters( Proc, Proc.MainFaces.LongFace, Proc.MainFaces.LongFace.Edges.SideEdges.EndEdge) Cutting = SawPlusChain.Saw.CalculateMachiningParameters( Proc, Proc.MainFaces.LongFace, Proc.MainFaces.LongFace.Edges.SideEdges.EndEdge, b3Raw)
bIsCuttingOk = false bIsCuttingOk = false
if Cutting.CanApply then if Cutting.CanApply then
bIsCuttingOk, Cutting.Message = SawPlusChain.Saw.ApplyAllSteps( Cutting, b3Raw) bIsCuttingOk, Cutting.Message = SawPlusChain.Saw.ApplyAllSteps( Cutting, b3Raw)
@@ -6710,60 +6788,74 @@ local function AddMillCorner( vFace, Proc, dToolDiam, nAddGrpId, nMasterNewProc,
-- aggiungo geometria -- aggiungo geometria
local j = EgtIf( i < #vFace, i + 1, EgtIf( bClosed, 1, nil)) local j = EgtIf( i < #vFace, i + 1, EgtIf( bClosed, 1, nil))
if not j then return true end if not j then return true end
local nFace2 = vFace[j].Fac if vFace[j].PPrev then
-- punto in comune tra le due facce (punto precedente della faccia [j]) local nFace2 = vFace[j].Fac
ptLoc1 = vFace[j].PPrev -- punto in comune tra le due facce (punto precedente della faccia [j])
-- punto precedente (punto precedente della faccia [i]) ptLoc1 = vFace[j].PPrev
if vFace[i].PPrev then -- punto precedente (punto precedente della faccia [i])
ptLoc3 = vFace[i].PPrev if vFace[i].PPrev then
else ptLoc3 = vFace[i].PPrev
if abs( vtN:getZ()) > abs( vtN:getY()) then elseif vFace[i].PNoPrev then
ptLoc3 = Point3d( vFace[i].Cen:getX(), vFace[i].Cen:getY(), ptLoc1:getZ()) ptLoc3 = vFace[i].PNoPrev
else else
ptLoc3 = Point3d( vFace[i].Cen:getX(), ptLoc1:getY(), vFace[i].Cen:getZ()) if abs( vtN:getZ()) > abs( vtN:getY()) then
ptLoc3 = Point3d( vFace[i].Cen:getX(), vFace[i].Cen:getY(), ptLoc1:getZ())
else
ptLoc3 = Point3d( vFace[i].Cen:getX(), ptLoc1:getY(), vFace[i].Cen:getZ())
end
end end
end -- punto successivo ( precedente della faccia successiva)
-- punto successivo ( precedente della faccia successiva) local k = EgtIf( j < #vFace, j + 1, EgtIf( bClosed, 1, nil))
local k = EgtIf( j < #vFace, j + 1, EgtIf( bClosed, 1, nil)) -- se è un percorso aperto prendo il punto medio della seconda faccia come punto locale 2
-- se è un percorso aperto prendo il punto medio della seconda faccia come punto locale 2 if not k then
if not k then if vFace[j].PNoSucc then
if abs( vtN:getZ()) > abs( vtN:getY()) then ptLoc2 = vFace[j].PNoSucc
ptLoc2 = Point3d( vFace[j].Cen:getX(), vFace[j].Cen:getY(), ptLoc1:getZ()) elseif abs( vtN:getZ()) > abs( vtN:getY()) then
ptLoc2 = Point3d( vFace[j].Cen:getX(), vFace[j].Cen:getY(), ptLoc1:getZ())
else
ptLoc2 = Point3d( vFace[j].Cen:getX(), ptLoc1:getY(), vFace[j].Cen:getZ())
end
else else
ptLoc2 = Point3d( vFace[j].Cen:getX(), ptLoc1:getY(), vFace[j].Cen:getZ()) if vFace[j].PNoSucc then
ptLoc2 = vFace[j].PNoSucc
elseif vFace[k].PPrev then
ptLoc2 = vFace[k].PPrev
elseif abs( vtN:getZ()) > abs( vtN:getY()) then
ptLoc2 = Point3d( vFace[j].Cen:getX(), vFace[j].Cen:getY(), ptLoc1:getZ())
else
ptLoc2 = Point3d( vFace[j].Cen:getX(), ptLoc1:getY(), vFace[j].Cen:getZ())
end
end end
else -- ricavo i punti e l'angolo interno
ptLoc2 = vFace[k].PPrev local _, ptP1, ptP2, dAng = EgtSurfTmFacetsContact( nNewProc.Id, nFace1, nFace2, GDB_ID.ROOT)
end -- se punti validi e angolo è interno e non è quasi piatto e >= 90 creo istanza
-- ricavo i punti e l'angolo interno local tFacAdj = {}
local _, ptP1, ptP2, dAng = EgtSurfTmFacetsContact( nNewProc.Id, nFace1, nFace2, GDB_ID.ROOT) if ptP1 and ptP2 and dAng < 0 and dAng < -6 and dAng > -( 90 + 10 * GEO.EPS_SMALL) then
-- se punti validi e angolo è interno e non è quasi piatto e >= 90 creo istanza local dLen = dist( ptP1, ptP2)
local tFacAdj = {} tFacAdj = { nFace1, nFace2, dLen, ptP1, ptP2, dAng, ptLoc1, ptLoc2, ptLoc3}
if ptP1 and ptP2 and dAng < 0 and dAng < -6 and dAng > -( 90 + 10 * GEO.EPS_SMALL) then end
local dLen = dist( ptP1, ptP2) -- se ho un elemento creo percorso o percorsi in base al tipo di cono e all'apertura dall'angolo rispetto ai 90°
tFacAdj = { nFace1, nFace2, dLen, ptP1, ptP2, dAng, ptLoc1, ptLoc2, ptLoc3} -- con una tolleranza di 2 gradi
end if #tFacAdj > 0 then
-- se ho un elemento creo percorso o percorsi in base al tipo di cono e all'apertura dall'angolo rispetto ai 90° if (dAng + 90) > 2 then
-- con una tolleranza di 2 gradi local dAngOffs = (dAng + 90) / 2
if #tFacAdj > 0 then -- primo taglio
if (dAng + 90) > 2 then local bOk, sErr = AddMillCornerMachining( Proc.PartId, nNewProc, nFacInd, tFacAdj, nAddGrpId,
local dAngOffs = (dAng + 90) / 2 dToolDiam, sMilling, -dAngOffs,
-- primo taglio ToolData, bMakeLocSurf, vFace, vtN)
local bOk, sErr = AddMillCornerMachining( Proc.PartId, nNewProc, nFacInd, tFacAdj, nAddGrpId, if not bOk then return bOk, sErr end
dToolDiam, sMilling, -dAngOffs, -- secondo taglio
ToolData, bMakeLocSurf, vFace, vtN) bOk, sErr = AddMillCornerMachining( Proc.PartId, nNewProc, nFacInd, tFacAdj, nAddGrpId,
if not bOk then return bOk, sErr end dToolDiam, sMilling, dAngOffs,
-- secondo taglio ToolData, bMakeLocSurf, vFace, vtN)
bOk, sErr = AddMillCornerMachining( Proc.PartId, nNewProc, nFacInd, tFacAdj, nAddGrpId, if not bOk then return bOk, sErr end
dToolDiam, sMilling, dAngOffs, -- altrimenti ho un solo percorso
ToolData, bMakeLocSurf, vFace, vtN) else
if not bOk then return bOk, sErr end local bOk, sErr = AddMillCornerMachining( Proc.PartId, nNewProc, nFacInd, tFacAdj, nAddGrpId,
-- altrimenti ho un solo percorso dToolDiam, sMilling, 0,
else ToolData, bMakeLocSurf, vFace, vtN)
local bOk, sErr = AddMillCornerMachining( Proc.PartId, nNewProc, nFacInd, tFacAdj, nAddGrpId, if not bOk then return bOk, sErr end
dToolDiam, sMilling, 0, end
ToolData, bMakeLocSurf, vFace, vtN)
if not bOk then return bOk, sErr end
end end
end end
end end
@@ -6799,7 +6891,60 @@ local function GetOtherRegions( nPartId)
end end
--------------------------------------------------------------------- ---------------------------------------------------------------------
local function GetFacesData( nNewProc, dToolDiam, dToolMaxDepth, dToolThick, nAddGrpId, nPartId, vtNBottom) local function GetCleanCornerFacesData( nNewProc, dToolDiam, dToolMaxDepth, dToolThick, nAddGrpId, nPartId, vtNBottom, Proc)
local function GetCleanCornerPointIfNoAdj( nNewProc, Proc, nFac, vFace, ptAdjP1, ptAdjP2)
local ptPNoPrev
local bAdj, ptLocP1, ptLocP2, dAng
if not ptAdjP1 and not ptAdjP2 then
bAdj, ptLocP1, ptLocP2, dAng = EgtSurfTmFacetsContact( nNewProc, nFac+1, nFac, GDB_ID.ROOT)
else
bAdj = true
ptLocP1 = ptAdjP1
ptLocP2 = ptAdjP2
end
if bAdj then
local vEdges = BL.GetEdgesInfo( nNewProc, nFac)
for j = 1, #vEdges do
if #vEdges == 4 and ( not AreSamePointApprox( vEdges[j].ptStart, ptLocP1) and not AreSamePointApprox( vEdges[j].ptStart, ptLocP2)) and
( not AreSamePointApprox( vEdges[j].ptEnd, ptLocP1) and not AreSamePointApprox( vEdges[j].ptEnd, ptLocP2)) then
-- se rivolto verso Z
if abs( vtNBottom:getZ()) > abs( vtNBottom:getY()) then
if vEdges[j].ptStart:getZ() < vEdges[j].ptEnd:getZ() then
ptPNoPrev = vEdges[j].ptStart
break
else
ptPNoPrev = vEdges[j].ptEnd
break
end
else
if vtNBottom:getY() > 0 then
ptPNoPrev = EgtIf( vEdges[j].ptStart:getY() < vEdges[j].ptEnd:getY(), vEdges[j].ptStart, vEdges[j].ptEnd)
break
else
ptPNoPrev = EgtIf( vEdges[j].ptStart:getY() > vEdges[j].ptEnd:getY(), vEdges[j].ptStart, vEdges[j].ptEnd)
break
end
end
elseif #vEdges == 3 then
if not AreSamePointApprox( vEdges[j].ptStart, ptLocP1) then
ptPNoPrev = vEdges[j].ptStart
break
elseif not AreSamePointApprox( vEdges[j].ptStart, ptLocP2) then
ptPNoPrev = vEdges[j].ptStart
break
elseif not AreSamePointApprox( vEdges[j].ptEnd, ptLocP1) then
ptPNoPrev = vEdges[j].ptEnd
break
elseif not AreSamePointApprox( vEdges[j].ptEnd, ptLocP2) then
ptPNoPrev = vEdges[j].ptEnd
break
end
end
end
end
return ptPNoPrev
end
local nNumFacet = EgtSurfTmFacetCount( nNewProc) local nNumFacet = EgtSurfTmFacetCount( nNewProc)
local vFace = {} local vFace = {}
@@ -6816,14 +6961,17 @@ local function GetFacesData( nNewProc, dToolDiam, dToolMaxDepth, dToolThick, nAd
local _, dLen, dWidth = BL.GetFaceHvRefDim( nNewProc, nFac) local _, dLen, dWidth = BL.GetFaceHvRefDim( nNewProc, nFac)
-- recupero l'angolo con la faccia precedente -- recupero l'angolo con la faccia precedente
local bAdj, ptLocP1, ptLocP2, dAng = EgtSurfTmFacetsContact( nNewProc, nPrecFac, nFac, GDB_ID.ROOT) local bAdj, ptLocP1, ptLocP2, dAng = EgtSurfTmFacetsContact( nNewProc, nPrecFac, nFac, GDB_ID.ROOT)
-- salvo i dati
vFace[i] = { Fac = nFac, Cen = ptCen, Norm = vtN, Len = dLen, Width = dWidth, AngPrev = EgtIf( bAdj, dAng, 0)}
if not bAdj and Proc.Fct > 3 then
vFace[i].PNoPrev = GetCleanCornerPointIfNoAdj( nNewProc, Proc, nFac, vFace[i], nil, nil)
end
-- verifico che l'adiacenza sia veramente con il precedente (percorro con normale a destra) -- verifico che l'adiacenza sia veramente con il precedente (percorro con normale a destra)
if bAdj then if bAdj then
if ( vtN ^ ( ptLocP1 - ptCen)) * vtNBottom > 0 then if ( vtN ^ ( ptLocP1 - ptCen)) * vtNBottom > 0 then
bAdj = false bAdj = false
end end
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 if bAdj then
-- se rivolto verso Z -- se rivolto verso Z
if abs( vtNBottom:getZ()) > abs( vtNBottom:getY()) then if abs( vtNBottom:getZ()) > abs( vtNBottom:getY()) then
@@ -6839,6 +6987,10 @@ local function GetFacesData( nNewProc, dToolDiam, dToolMaxDepth, dToolThick, nAd
vFace[i].PPrev = EgtIf( ptLocP1:getY() > ptLocP2:getY(), ptLocP1, ptLocP2) vFace[i].PPrev = EgtIf( ptLocP1:getY() > ptLocP2:getY(), ptLocP1, ptLocP2)
end end
end end
local bAdj_2, ptLocP1_2, ptLocP2_2, dAng_2 = EgtSurfTmFacetsContact( nNewProc, nFac, nFac+1, GDB_ID.ROOT)
if not bAdj_2 and Proc.Fct > 3 then
vFace[i].PNoSucc = GetCleanCornerPointIfNoAdj( nNewProc, Proc, nFac, vFace[i], ptLocP1, ptLocP2)
end
end end
end end
-- analizzo le facce -- analizzo le facce
@@ -7545,7 +7697,7 @@ local function MakeMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead, bSinglePa
if sPocketing then if sPocketing then
nChoosenFacInd = nFacInd nChoosenFacInd = nFacInd
dChoosenFacElev = dFacElev dChoosenFacElev = dFacElev
local Edges = BL.GetEdgesInfo( Proc, Proc.Face[nFacInd+1]) local Edges = BL.GetEdgesInfo( Proc, Proc.Face[nFacInd+1].Id)
local nSideInd local nSideInd
for i = 1, #Edges do for i = 1, #Edges do
if Edges[i].AdjacentFaceId == nFacInd2 then if Edges[i].AdjacentFaceId == nFacInd2 then
@@ -8185,7 +8337,7 @@ local function MakeMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead, bSinglePa
-- normale della lavorazione clean corner -- normale della lavorazione clean corner
vtN = vtSpec vtN = vtSpec
end end
local vFace, dDepth = GetFacesData( nNewProc, dDiamTool, dMaxToolMaterial, ( dDiamTool/2), nAddGrpId, Proc.PartId, vtN) local vFace, dDepth = GetCleanCornerFacesData( nNewProc, dDiamTool, dMaxToolMaterial, ( dDiamTool/2), nAddGrpId, Proc.PartId, vtN, Proc)
local bCleanCornerOk, sCleanCornerWarn = AddMillCorner( vFace, Proc, dDiamTool, nAddGrpId, nNewProc, vtN) local bCleanCornerOk, sCleanCornerWarn = AddMillCorner( vFace, Proc, dDiamTool, nAddGrpId, nNewProc, vtN)
if not bCleanCornerOk then return false, sCleanCornerWarn end if not bCleanCornerOk then return false, sCleanCornerWarn end
if sCleanCornerWarn then if sCleanCornerWarn then
@@ -8428,7 +8580,7 @@ local function MakeMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead, bSinglePa
-- normale della lavorazione clean corner -- normale della lavorazione clean corner
vtN = vtSpec vtN = vtSpec
end end
local vFace, dDepth = GetFacesData( nNewProc, dToolDiameter, dMaxToolMaterial, ( dToolDiameter/2), nAddGrpId, Proc.PartId, vtN) local vFace, dDepth = GetCleanCornerFacesData( nNewProc, dToolDiameter, dMaxToolMaterial, ( dToolDiameter/2), nAddGrpId, Proc.PartId, vtN, Proc)
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
if sCleanCornerWarn then if sCleanCornerWarn then
+8
View File
@@ -1,5 +1,13 @@
==== Beam Update Log ==== ==== Beam Update Log ====
Versione 3.1g2 (17/07/2026)
- Modif : Diminuito LastStep forature in doppio
- Modif : ScarfJoint tra le feature da eseguire dopo i fori che la attraversano
Versione 3.1g1 (14/07/2026)
- Modif : in slot con lama migliorati attacchi inclinati
- Modif : in CleanCorner migliorie
Versione 3.1f3 (25/06/2026) Versione 3.1f3 (25/06/2026)
- Modif : LapJoint - migliorata gestione BirdsMouth con più di 3 facce - Modif : LapJoint - migliorata gestione BirdsMouth con più di 3 facce
- Modif : Per identificare feature di testa, oltre che verificare se sia troncante, si controlla anche la feature taglio - Modif : Per identificare feature di testa, oltre che verificare se sia troncante, si controlla anche la feature taglio
+1 -1
View File
@@ -2,5 +2,5 @@
-- Gestione della versione di Beam -- Gestione della versione di Beam
NAME = 'Beam' NAME = 'Beam'
VERSION = '3.1f3' VERSION = '3.1g2'
MIN_EXE = '3.1b1' MIN_EXE = '3.1b1'