diff --git a/Strategies/Standard/STR0002/STR0002.lua b/Strategies/Standard/STR0002/STR0002.lua index f4072b8..1f5389e 100644 --- a/Strategies/Standard/STR0002/STR0002.lua +++ b/Strategies/Standard/STR0002/STR0002.lua @@ -352,45 +352,54 @@ end ------------------------------------------------------------------------------------------------------------- local function GetSplitSurfaces( Proc, Part) local vAddId = {} + local vAddIdTunnel = {} local nAddGrpId = BeamLib.GetAddGroup( Part.id) - local nOriginalTmId = GDB_ID.NULL + local nOriginalTmIdTunnel = GDB_ID.NULL if Proc.MainFaces.TunnelAddedFaces then - nOriginalTmId = Proc.MainFaces.TunnelAddedFaces.MiddleFaceTm.id - else - nOriginalTmId = Proc.id + nOriginalTmIdTunnel = Proc.MainFaces.TunnelAddedFaces.MiddleFaceTm.id end -- recupero punti di spezzatura - da sinistra a destra local vFeatureSplittingPoints = FeatureLib.GetFeatureSplittingPoints( Proc, Part) if #vFeatureSplittingPoints == 0 then - local nAddId = EgtCopyGlob( nOriginalTmId, nAddGrpId) or GDB_ID.NULL + local nAddId = EgtCopyGlob( Proc.id, nAddGrpId) or GDB_ID.NULL + local nAddIdTunnel = EgtCopyGlob( nOriginalTmIdTunnel, nAddGrpId) or GDB_ID.NULL table.insert( vAddId, nAddId) + table.insert( vAddIdTunnel, nAddIdTunnel) else for i = 1, #vFeatureSplittingPoints do - local nAddId = EgtCopyGlob( nOriginalTmId, nAddGrpId) or GDB_ID.NULL + local nAddId = EgtCopyGlob( Proc.id, nAddGrpId) or GDB_ID.NULL + local nAddIdTunnel = EgtCopyGlob( nOriginalTmIdTunnel, nAddGrpId) or GDB_ID.NULL if i == 1 then -- prima superficie, va tagliata solo a destra local ptSplit = vFeatureSplittingPoints[i] + Vector3d( BeamData.MILL_OVERLAP / 2, 0, 0) EgtCutSurfTmPlane( nAddId, ptSplit, X_AX(), true, GDB_RT.GLOB) + EgtCutSurfTmPlane( nAddIdTunnel, ptSplit, X_AX(), true, GDB_RT.GLOB) else -- taglio della superficie corrente - lato sinistro local ptSplit = vFeatureSplittingPoints[i - 1] + Vector3d( -BeamData.MILL_OVERLAP / 2, 0, 0) EgtCutSurfTmPlane( nAddId, ptSplit, -X_AX(), true, GDB_RT.GLOB) + EgtCutSurfTmPlane( nAddIdTunnel, ptSplit, -X_AX(), true, GDB_RT.GLOB) -- taglio della superficie corrente - lato destro ptSplit = vFeatureSplittingPoints[i] + Vector3d( BeamData.MILL_OVERLAP / 2, 0, 0) EgtCutSurfTmPlane( nAddId, ptSplit, X_AX(), true, GDB_RT.GLOB) + EgtCutSurfTmPlane( nAddIdTunnel, ptSplit, X_AX(), true, GDB_RT.GLOB) end table.insert( vAddId, nAddId) + table.insert( vAddIdTunnel, nAddIdTunnel) end -- taglio ultima superficie, va tagliata solo a sinistra - local nAddId = EgtCopyGlob( nOriginalTmId, nAddGrpId) or GDB_ID.NULL + local nAddId = EgtCopyGlob( Proc.id, nAddGrpId) or GDB_ID.NULL + local nAddIdTunnel = EgtCopyGlob( nOriginalTmIdTunnel, nAddGrpId) or GDB_ID.NULL local ptSplit = vFeatureSplittingPoints[#vFeatureSplittingPoints] + Vector3d( -BeamData.MILL_OVERLAP / 2, 0, 0) EgtCutSurfTmPlane( nAddId, ptSplit, -X_AX(), true, GDB_RT.GLOB) + EgtCutSurfTmPlane( nAddIdTunnel, ptSplit, -X_AX(), true, GDB_RT.GLOB) table.insert( vAddId, nAddId) + table.insert( vAddIdTunnel, nAddIdTunnel) end - return vAddId + return vAddId, vAddIdTunnel end ------------------------------------------------------------------------------------------------------------- @@ -423,9 +432,10 @@ function STR0002.Make( bAddMachining, Proc, Part, CustomParameters) if bAddMachining and Strategy.Result.sStatus ~= 'Not-Applicable' then local vAddId = {} + local vAddIdTunnel = {} -- recupero superficie, se necessario trimmata sugli spezzoni - vAddId = GetSplitSurfaces( Proc, Part) + vAddId, vAddIdTunnel = GetSplitSurfaces( Proc, Part) -- si applicano le lavorazioni for i = 1, #vAddId do @@ -455,9 +465,10 @@ function STR0002.Make( bAddMachining, Proc, Part, CustomParameters) -- TODO settare parametro per indicare qual รจ lo spezzone che deve essere fatto dopo il taglio di separazione for k = 1, Proc.nFct do local vtNSplitFace - _, vtNSplitFace = EgtSurfTmFacetCenter( vAddId[i], k - 1, GDB_ID.ROOT) + local nIdTm = EgtIf( Strategy.Machining[j].bMachAppliedToTunnelFace, vAddIdTunnel[i], vAddId[i]) + vtNSplitFace = EgtSurfTmFacetNormVersor( nIdTm, k - 1, GDB_ID.ROOT) if vtNSplitFace and AreSameVectorApprox( vtNSplitFace * EgtIf( Pocketing.bToolInvert, -1, 1), Strategy.Machining[j].vtFaceNormal) then - Pocketing.Geometry = {{ vAddId[i], k - 1}} + Pocketing.Geometry = {{ nIdTm, k - 1}} bAreAllMachiningsAdded = bAreAllMachiningsAdded and MachiningLib.AddNewMachining( Proc, Pocketing) break end