From fc6b50b34580f8bfade7e3caceab9a1531f520b2 Mon Sep 17 00:00:00 2001 From: "luca.mazzoleni" Date: Fri, 17 Jan 2025 18:06:37 +0100 Subject: [PATCH] - in FaceData struttura dati degli Edges della faccia uniformata a quella degli Edges della MainFaces - tutte le chiamate a Edges aggiornate di conseguenza --- LuaLibs/FaceData.lua | 95 ++++++++++++++++--------- Strategies/Standard/HEADCUT/HEADCUT.lua | 8 +-- Strategies/Standard/STR0005/STR0005.lua | 16 ++--- StrategyLibs/FACEBYBLADE.lua | 8 +-- StrategyLibs/SPLITCUT.lua | 8 +-- 5 files changed, 83 insertions(+), 52 deletions(-) diff --git a/LuaLibs/FaceData.lua b/LuaLibs/FaceData.lua index 23d74dc..b9c2c72 100644 --- a/LuaLibs/FaceData.lua +++ b/LuaLibs/FaceData.lua @@ -97,6 +97,37 @@ function FaceData.GetFacesByAdjacencyNumber( Proc) return FacesByAdjacencyNumber end +------------------------------------------------------------------------------------------------------------- +local function GetEdgesInfo( Proc, idFace ) + local Edges = {} + local nFaceType, EdgesEgt = EgtSurfTmGetFacetOutlineInfo( Proc.id, idFace, GDB_ID.ROOT) + + for i = 1, #EdgesEgt do + local nPreviousEdgeIndex = i - 1 + if i == 1 then + nPreviousEdgeIndex = #EdgesEgt + end + local nNextEdgeIndex = i + 1 + if i == #EdgesEgt then + nNextEdgeIndex = 1 + end + + local CurrentEdge = {} + CurrentEdge.idAdjacentFace = EdgesEgt[i].Adj + CurrentEdge.vtToolDirection = Vector3d( EdgesEgt[i].Norm) + CurrentEdge.dLength = EdgesEgt[i].Len + CurrentEdge.dLengthOnX = abs( CurrentEdge.dLength * CurrentEdge.vtToolDirection:getY()) + CurrentEdge.dElevation = EdgesEgt[i].Elev + CurrentEdge.bIsOpen = EdgesEgt[i].Open + CurrentEdge.bIsStartOpen = EdgesEgt[nPreviousEdgeIndex].Open + CurrentEdge.bIsEndOpen = EdgesEgt[nNextEdgeIndex].Open + + table.insert( Edges, CurrentEdge) + end + + return nFaceType, Edges +end + ------------------------------------------------------------------------------------------------------------- function FaceData.GetFacesInfo( Proc, Part) EgtOutLog( '---Faces START---') @@ -129,9 +160,9 @@ function FaceData.GetFacesInfo( Proc, Part) local _, dLongEdgeDimension, dShortEdgeDimension = EgtSurfTmFacetMinAreaRectangle( Proc.id, i - 1, GDB_ID.ROOT) Faces[i].dArea = dShortEdgeDimension * dLongEdgeDimension - local nFaceType, vEdges = EgtSurfTmGetFacetOutlineInfo( Proc.id, i - 1, GDB_ID.ROOT) + local nFaceType, Edges = GetEdgesInfo( Proc, i - 1) Faces[i].bIsOkForMachining = nFaceType < 1 - Faces[i].Edges = vEdges + Faces[i].Edges = Edges -- TODO valutare se fare un output unico alla fine o gestire log in altro modo EgtOutLog( 'Facet ' .. Faces[i].id .. ' of ' .. Proc.nFct - 1) @@ -246,10 +277,10 @@ local function GetBottomFaces( Proc) local ClosedEdgesSortedByGreatestLength = {} for i = 1, #BottomFaces[1].Edges do - if not BottomFaces[1].Edges[i].Open then + if not BottomFaces[1].Edges[i].bIsOpen then table.insert( ClosedEdgesSortedByGreatestLength, {}) ClosedEdgesSortedByGreatestLength[#ClosedEdgesSortedByGreatestLength].nIndex = i - ClosedEdgesSortedByGreatestLength[#ClosedEdgesSortedByGreatestLength].dLength = BottomFaces[1].Edges[i].Len + ClosedEdgesSortedByGreatestLength[#ClosedEdgesSortedByGreatestLength].dLength = BottomFaces[1].Edges[i].dLength end end table.sort( ClosedEdgesSortedByGreatestLength, function (a, b) return a.dLength > b.dLength end) @@ -266,14 +297,14 @@ local function GetBottomFaces( Proc) end local CurrentEdge = {} - CurrentEdge.idAdjacentFace = BottomFaces[1].Edges[i].Adj - CurrentEdge.vtToolDirection = Vector3d( BottomFaces[1].Edges[i].Norm) - CurrentEdge.dLength = BottomFaces[1].Edges[i].Len - CurrentEdge.dLengthOnX = abs( CurrentEdge.dLength * CurrentEdge.vtToolDirection:getY()) - CurrentEdge.dElevation = BottomFaces[1].Edges[i].Elev - CurrentEdge.bIsOpen = BottomFaces[1].Edges[i].Open - CurrentEdge.bIsStartOpen = BottomFaces[1].Edges[nPreviousEdgeIndex].Open - CurrentEdge.bIsEndOpen = BottomFaces[1].Edges[nNextEdgeIndex].Open + CurrentEdge.idAdjacentFace = BottomFaces[1].Edges[i].idAdjacentFace + CurrentEdge.vtToolDirection = BottomFaces[1].Edges[i].vtToolDirection + CurrentEdge.dLength = BottomFaces[1].Edges[i].dLength + CurrentEdge.dLengthOnX = BottomFaces[1].Edges[i].dLengthOnX + CurrentEdge.dElevation = BottomFaces[1].Edges[i].dElevation + CurrentEdge.bIsOpen = BottomFaces[1].Edges[i].bIsOpen + CurrentEdge.bIsStartOpen = BottomFaces[1].Edges[i].bIsStartOpen + CurrentEdge.bIsEndOpen = BottomFaces[1].Edges[i].bIsEndOpen if i == nFirstLongEdgeIndex then BottomFaces[1].MainEdges.LongEdges[1] = CurrentEdge @@ -352,14 +383,14 @@ local function GetLongFaces( Proc, MainFaces) end local CurrentEdge = {} - CurrentEdge.idAdjacentFace = LongFaces[i].Edges[j].Adj - CurrentEdge.vtToolDirection = Vector3d( LongFaces[i].Edges[j].Norm) - CurrentEdge.dLength = LongFaces[i].Edges[j].Len - CurrentEdge.dLengthOnX = abs( CurrentEdge.dLength * CurrentEdge.vtToolDirection:getY()) - CurrentEdge.dElevation = LongFaces[i].Edges[j].Elev - CurrentEdge.bIsOpen = LongFaces[i].Edges[j].Open - CurrentEdge.bIsStartOpen = LongFaces[i].Edges[nPreviousEdgeIndex].Open - CurrentEdge.bIsEndOpen = LongFaces[i].Edges[nNextEdgeIndex].Open + CurrentEdge.idAdjacentFace = LongFaces[i].Edges[j].idAdjacentFace + CurrentEdge.vtToolDirection = LongFaces[i].Edges[j].vtToolDirection + CurrentEdge.dLength = LongFaces[i].Edges[j].dLength + CurrentEdge.dLengthOnX = LongFaces[i].Edges[j].dLengthOnX + CurrentEdge.dElevation = LongFaces[i].Edges[j].dElevation + CurrentEdge.bIsOpen = LongFaces[i].Edges[j].bIsOpen + CurrentEdge.bIsStartOpen = LongFaces[i].Edges[j].bIsStartOpen + CurrentEdge.bIsEndOpen = LongFaces[i].Edges[j].bIsEndOpen if Proc.Topology.sFamily == 'Tunnel' then if CurrentEdge.idAdjacentFace > -1 then @@ -373,10 +404,10 @@ local function GetLongFaces( Proc, MainFaces) if CurrentEdge.idAdjacentFace == BottomFace.id then LongFaces[i].MainEdges.BottomEdge = CurrentEdge LongFaces[i].MainEdges.BottomEdge.sType = 'Bottom' - elseif LongFaces[i].Edges[nNextEdgeIndex].Adj == BottomFace.id then + elseif LongFaces[i].Edges[nNextEdgeIndex].idAdjacentFace == BottomFace.id then LongFaces[i].MainEdges.SideEdges[1] = CurrentEdge LongFaces[i].MainEdges.SideEdges[1].sType = 'Side' - elseif LongFaces[i].Edges[nPreviousEdgeIndex].Adj == BottomFace.id then + elseif LongFaces[i].Edges[nPreviousEdgeIndex].idAdjacentFace == BottomFace.id then LongFaces[i].MainEdges.SideEdges[2] = CurrentEdge LongFaces[i].MainEdges.SideEdges[2].sType = 'Side' else @@ -439,14 +470,14 @@ local function GetSideFaces( Proc, MainFaces) end local CurrentEdge = {} - CurrentEdge.idAdjacentFace = SideFaces[i].Edges[j].Adj - CurrentEdge.vtToolDirection = Vector3d( SideFaces[i].Edges[j].Norm) - CurrentEdge.dLength = SideFaces[i].Edges[j].Len - CurrentEdge.dLengthOnX = abs( CurrentEdge.dLength * CurrentEdge.vtToolDirection:getY()) - CurrentEdge.dElevation = SideFaces[i].Edges[j].Elev - CurrentEdge.bIsOpen = SideFaces[i].Edges[j].Open - CurrentEdge.bIsStartOpen = SideFaces[i].Edges[nPreviousEdgeIndex].Open - CurrentEdge.bIsEndOpen = SideFaces[i].Edges[nNextEdgeIndex].Open + CurrentEdge.idAdjacentFace = SideFaces[i].Edges[j].idAdjacentFace + CurrentEdge.vtToolDirection = SideFaces[i].Edges[j].vtToolDirection + CurrentEdge.dLength = SideFaces[i].Edges[j].dLength + CurrentEdge.dLengthOnX = SideFaces[i].Edges[j].dLengthOnX + CurrentEdge.dElevation = SideFaces[i].Edges[j].dElevation + CurrentEdge.bIsOpen = SideFaces[i].Edges[j].bIsOpen + CurrentEdge.bIsStartOpen = SideFaces[i].Edges[j].bIsStartOpen + CurrentEdge.bIsEndOpen = SideFaces[i].Edges[j].bIsEndOpen if Proc.Topology.sFamily == 'Tunnel' then if CurrentEdge.idAdjacentFace > -1 then @@ -458,10 +489,10 @@ local function GetSideFaces( Proc, MainFaces) if CurrentEdge.idAdjacentFace == BottomFace.id then SideFaces[i].MainEdges.BottomEdge = CurrentEdge SideFaces[i].MainEdges.BottomEdge.sType = 'Bottom' - elseif SideFaces[i].Edges[nNextEdgeIndex].Adj == BottomFace.id then + elseif SideFaces[i].Edges[nNextEdgeIndex].idAdjacentFace == BottomFace.id then SideFaces[i].MainEdges.LongEdges[1] = CurrentEdge SideFaces[i].MainEdges.LongEdges[1].sType = 'Long' - elseif SideFaces[i].Edges[nPreviousEdgeIndex].Adj == BottomFace.id then + elseif SideFaces[i].Edges[nPreviousEdgeIndex].idAdjacentFace == BottomFace.id then SideFaces[i].MainEdges.LongEdges[2] = CurrentEdge SideFaces[i].MainEdges.LongEdges[2].sType = 'Long' else diff --git a/Strategies/Standard/HEADCUT/HEADCUT.lua b/Strategies/Standard/HEADCUT/HEADCUT.lua index 09bcb2e..7d9bd60 100644 --- a/Strategies/Standard/HEADCUT/HEADCUT.lua +++ b/Strategies/Standard/HEADCUT/HEADCUT.lua @@ -46,9 +46,9 @@ local function CalculateLeadInOut( Machining, EdgeToMachine) LeadIn.dTangentDistance = 0 LeadOut.dTangentDistance = 0 -- elevazione sempre in negativo - if EdgeToMachine.Elev < 10 * GEO.EPS_SMALL then - LeadIn.dPerpDistance = BeamData.CUT_SIC - EdgeToMachine.Elev - LeadOut.dPerpDistance = BeamData.CUT_SIC - EdgeToMachine.Elev + if EdgeToMachine.dElevation < 10 * GEO.EPS_SMALL then + LeadIn.dPerpDistance = BeamData.CUT_SIC - EdgeToMachine.dElevation + LeadOut.dPerpDistance = BeamData.CUT_SIC - EdgeToMachine.dElevation else LeadIn.dPerpDistance = BeamData.CUT_SIC LeadOut.dPerpDistance = BeamData.CUT_SIC @@ -72,7 +72,7 @@ end local function GetEdgeToMachine( Proc, vtEdge) local Edge for i = 1, #Proc.Faces[1].Edges do - if AreSameVectorApprox( Proc.Faces[1].Edges[i].Norm, vtEdge) then + if AreSameVectorApprox( Proc.Faces[1].Edges[i].vtToolDirection, vtEdge) then Edge = Proc.Faces[1].Edges[i] end end diff --git a/Strategies/Standard/STR0005/STR0005.lua b/Strategies/Standard/STR0005/STR0005.lua index b67d628..3d4ca22 100644 --- a/Strategies/Standard/STR0005/STR0005.lua +++ b/Strategies/Standard/STR0005/STR0005.lua @@ -21,21 +21,21 @@ Blade.Result = {} ------------------------------------------------------------------------------------------------------------- local function CompareEdges( EdgeA, EdgeB) -- prima i lati orientati lungo X - if abs( EdgeA.Norm:getX()) < abs( EdgeB.Norm:getX()) - 10 * GEO.EPS_SMALL then + if abs( EdgeA.vtToolDirection:getX()) < abs( EdgeB.vtToolDirection:getX()) - 10 * GEO.EPS_SMALL then return true - elseif abs( EdgeA.Norm:getX()) > abs( EdgeB.Norm:getX()) + 10 * GEO.EPS_SMALL then + elseif abs( EdgeA.vtToolDirection:getX()) > abs( EdgeB.vtToolDirection:getX()) + 10 * GEO.EPS_SMALL then return false -- se stessa X si preferiscono i lati più in basso else - if EdgeA.Norm:getZ() > EdgeB.Norm:getZ() + 10 * GEO.EPS_SMALL then + if EdgeA.vtToolDirection:getZ() > EdgeB.vtToolDirection:getZ() + 10 * GEO.EPS_SMALL then return true - elseif EdgeA.Norm:getZ() < EdgeB.Norm:getZ() - 10 * GEO.EPS_SMALL then + elseif EdgeA.vtToolDirection:getZ() < EdgeB.vtToolDirection:getZ() - 10 * GEO.EPS_SMALL then return false -- se stessa Z si preferiscono i lati verso il fronte della trave else - if EdgeA.Norm:getY() > EdgeB.Norm:getY() + 10 * GEO.EPS_SMALL then + if EdgeA.vtToolDirection:getY() > EdgeB.vtToolDirection:getY() + 10 * GEO.EPS_SMALL then return true - elseif EdgeA.Norm:getY() < EdgeB.Norm:getY() - 10 * GEO.EPS_SMALL then + elseif EdgeA.vtToolDirection:getY() < EdgeB.vtToolDirection:getY() - 10 * GEO.EPS_SMALL then return false else return false @@ -82,12 +82,12 @@ function STR0005.Make( bAddMachining, Proc, Part, CustomParameters) end table.sort( EdgesSorted, CompareEdges) - local dDepthToMachine = EdgesSorted[1].Elevation / 2 + BeamData.CUT_EXTRA + local dDepthToMachine = EdgesSorted[1].dElevation / 2 + BeamData.CUT_EXTRA -- ricerca utensile local ToolSearchParameters = {} ToolSearchParameters.dElevation = dDepthToMachine - ToolSearchParameters.vtToolDirection = EdgesSorted[1].Norm + ToolSearchParameters.vtToolDirection = EdgesSorted[1].vtToolDirection ToolSearchParameters.bAllowTopHead = true ToolSearchParameters.bAllowBottomHead = true ToolSearchParameters.bForceLongcutBlade = bForceLongcutBlade diff --git a/StrategyLibs/FACEBYBLADE.lua b/StrategyLibs/FACEBYBLADE.lua index 0375d40..1d093e8 100644 --- a/StrategyLibs/FACEBYBLADE.lua +++ b/StrategyLibs/FACEBYBLADE.lua @@ -23,9 +23,9 @@ local function CalculateLeadInOut( EdgeToMachine) LeadIn.dTangentDistance = 0 LeadOut.dTangentDistance = 0 -- elevazione sempre in negativo - if EdgeToMachine.Elev < 10 * GEO.EPS_SMALL then - LeadIn.dPerpDistance = BeamData.CUT_SIC - EdgeToMachine.Elev - LeadOut.dPerpDistance = BeamData.CUT_SIC - EdgeToMachine.Elev + if EdgeToMachine.dElevation < 10 * GEO.EPS_SMALL then + LeadIn.dPerpDistance = BeamData.CUT_SIC - EdgeToMachine.dElevation + LeadOut.dPerpDistance = BeamData.CUT_SIC - EdgeToMachine.dElevation else LeadIn.dPerpDistance = BeamData.CUT_SIC LeadOut.dPerpDistance = BeamData.CUT_SIC @@ -67,7 +67,7 @@ end function FACEBYBLADE.Make( Proc, Part, FaceToMachine, EdgeToMachine, OptionalParameters) local Cutting = {} - local vtMachiningDirection = EdgeToMachine.Norm + local vtMachiningDirection = EdgeToMachine.vtToolDirection local vtN = Proc.Faces[FaceToMachine.id+1].vtN Cutting.sDepth = OptionalParameters.sDepth or 0 Cutting.dLongitudinalOffset = OptionalParameters.dLongitudinalOffset or 0 diff --git a/StrategyLibs/SPLITCUT.lua b/StrategyLibs/SPLITCUT.lua index a0862c6..8d68db5 100644 --- a/StrategyLibs/SPLITCUT.lua +++ b/StrategyLibs/SPLITCUT.lua @@ -185,7 +185,7 @@ function SPLITCUT.GetStrategy( Proc, Part, OptionalParameters) function SPLITCUT.GetEdgeToMachine( Proc, vtEdge) local Edge for i = 1, #Proc.Faces[1].Edges do - if AreSameVectorApprox( Proc.Faces[1].Edges[i].Norm, vtEdge) then + if AreSameVectorApprox( Proc.Faces[1].Edges[i].vtToolDirection, vtEdge) then Edge = Proc.Faces[1].Edges[i] end end @@ -204,9 +204,9 @@ function SPLITCUT.CalculateLeadInOut( EdgeToMachine) LeadIn.dTangentDistance = 0 LeadOut.dTangentDistance = 0 -- elevazione sempre in negativo - if EdgeToMachine.Elev < 10 * GEO.EPS_SMALL then - LeadIn.dPerpDistance = BeamData.CUT_SIC - EdgeToMachine.Elev - LeadOut.dPerpDistance = BeamData.CUT_SIC - EdgeToMachine.Elev + if EdgeToMachine.dElevation < 10 * GEO.EPS_SMALL then + LeadIn.dPerpDistance = BeamData.CUT_SIC - EdgeToMachine.dElevation + LeadOut.dPerpDistance = BeamData.CUT_SIC - EdgeToMachine.dElevation else LeadIn.dPerpDistance = BeamData.CUT_SIC LeadOut.dPerpDistance = BeamData.CUT_SIC