From b1dd88789929489cecc78a418e8381c5c1a185a2 Mon Sep 17 00:00:00 2001 From: "luca.mazzoleni" Date: Tue, 29 Oct 2024 17:38:31 +0100 Subject: [PATCH] =?UTF-8?q?-=20in=20Squaring=20implementata=20modalit?= =?UTF-8?q?=C3=A0=20ShrinkToParts;=20manca=20la=20rimozione=20delle=20lavo?= =?UTF-8?q?razioni=20fuori=20dall'area=20squadrata?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- LuaLibs/Squaring.lua | 38 +++++++++++++++++++++++--------------- LuaLibs/WallExec.lua | 20 ++++++++++---------- 2 files changed, 33 insertions(+), 25 deletions(-) diff --git a/LuaLibs/Squaring.lua b/LuaLibs/Squaring.lua index 5ba3e4c..cd0d3e9 100644 --- a/LuaLibs/Squaring.lua +++ b/LuaLibs/Squaring.lua @@ -121,12 +121,9 @@ function Squaring.AreToolsOk( sSquaringTool, SquaringTools, dMachiningDepth) end ------------------------------------------------------------------------------------------------------------- -function Squaring.CreateGeometry( sSquaringTool, SquaringTools, RawPart) +function Squaring.CreateGeometry( sSquaringTool, SquaringTools, RawPart, vPart) -- TODO gestire squadratura sulle dimensioni massime dei pezzi (shrinktoparts) invece che sul master panel local SquaringGeometries = {} - - local dDimX = RawPart.b3:getDimX() - local dDimY = RawPart.b3:getDimY() local sOrigCorner = EgtGetInfo( RawPart.nId, 'ORIGCORNER') local bShrinkToParts = ( WD.SQUARING_TYPE == 2) local bSquaringStartsOnReference = ( type( WD.SQUARING_STARTS_ON_REFERENCE) == "boolean") and ( WD.SQUARING_STARTS_ON_REFERENCE == true) @@ -143,7 +140,16 @@ function Squaring.CreateGeometry( sSquaringTool, SquaringTools, RawPart) local Right = { sSide = 'Right'} local Back = { sSide = 'Back'} local Left = { sSide = 'Left'} - local pt1 = RawPart.b3:getMin() + Point3d( -dOffsetXY, -dOffsetXY, -dExtendZ) + local b3Squaring = BBox3d( RawPart.b3) + if bShrinkToParts then + b3Squaring = BBox3d( RawPart.b3:getCenter()) + for i = 1, #vPart do + b3Squaring:Add( vPart[i].Box) + end + end + local dDimX = b3Squaring:getDimX() + local dDimY = b3Squaring:getDimY() + local pt1 = b3Squaring:getMin() + Point3d( -dOffsetXY, -dOffsetXY, -dExtendZ) local pt2 = pt1 + Point3d( dDimX + 2 * dOffsetXY, 0, 0) local pt3 = pt2 + Point3d( 0, dDimY + 2 * dOffsetXY,0 ) local pt4 = pt3 + Point3d( -dDimX - 2 * dOffsetXY, 0, 0) @@ -308,15 +314,14 @@ function Squaring.CreateGeometry( sSquaringTool, SquaringTools, RawPart) end end - return SquaringGeometries + return SquaringGeometries, b3Squaring end ------------------------------------------------------------------------------------------------------------- -function Squaring.AddMachinings( SquaringGeometries, RawPart, nFirstOperationId) +function Squaring.AddMachinings( SquaringGeometries, b3Squaring, nFirstOperationId) local nNotOkCount = 0 local sMsgTotal = '' - local dRawPartWidth = RawPart.b3:getDimY() - local dRawPartHeight = RawPart.b3:getDimZ() + local dSquaringHeight = b3Squaring:getDimZ() local dExtendPath = 0 local dMaxOvermaterial = 0 if type( WD.SQUARING_MAX_OVERMATERIAL) == "number" then @@ -334,7 +339,7 @@ function Squaring.AddMachinings( SquaringGeometries, RawPart, nFirstOperationId) -- calcolo step laterale local MachiningSteps = { nCount = 1, dStep = 0} if not bIsVerticalMilling then - MachiningSteps = WM.GetMachiningSteps( dRawPartHeight, SquaringGeometries[i].Tool.dSideStep) + MachiningSteps = WM.GetMachiningSteps( dSquaringHeight, SquaringGeometries[i].Tool.dSideStep) end for j = 1, MachiningSteps.nCount do @@ -361,7 +366,7 @@ function Squaring.AddMachinings( SquaringGeometries, RawPart, nFirstOperationId) end -- distanza di sicurezza if bIsVerticalMilling then - EgtSetMachiningParam( MCH_MP.STARTPOS, WD.CUT_SIC + RawPart.b3:getDimZ()) + EgtSetMachiningParam( MCH_MP.STARTPOS, WD.CUT_SIC + dSquaringHeight) else EgtSetMachiningParam( MCH_MP.STARTPOS, WD.CUT_SIC) end @@ -399,7 +404,7 @@ function Squaring.AddMachinings( SquaringGeometries, RawPart, nFirstOperationId) dExtendPath = dMaxOvermaterial + dToolRadius + WD.COLL_SIC else -- si calcola l'impronta utensile per uscire quanto basta a garantire il maxOvermaterial, con una distanza di sicurezza - dExtendPath = dMaxOvermaterial + WD.COLL_SIC + dToolRadius - ( dToolRadius - sqrt( dToolRadius * dToolRadius - ( ( dToolRadius - dRawPartHeight) * ( dToolRadius - dRawPartHeight)))) + dExtendPath = dMaxOvermaterial + WD.COLL_SIC + dToolRadius - ( dToolRadius - sqrt( dToolRadius * dToolRadius - ( ( dToolRadius - dSquaringHeight) * ( dToolRadius - dSquaringHeight)))) end -- approccio EgtSetMachiningParam( MCH_MP.LEADINTYPE, MCH_MILL_LI.LINEAR) @@ -409,7 +414,7 @@ function Squaring.AddMachinings( SquaringGeometries, RawPart, nFirstOperationId) EgtSetMachiningParam( MCH_MP.LIPERP, 0) else -- per utensili che lavorano di fianco, si deve partire fuori dall'altezza del grezzo - EgtSetMachiningParam( MCH_MP.LIPERP, WD.CUT_SIC + RawPart.b3:getDimZ()) + EgtSetMachiningParam( MCH_MP.LIPERP, WD.CUT_SIC + dSquaringHeight) end EgtSetMachiningParam( MCH_MP.LIELEV, 0) EgtSetMachiningParam( MCH_MP.LICOMPLEN, 0) @@ -421,7 +426,7 @@ function Squaring.AddMachinings( SquaringGeometries, RawPart, nFirstOperationId) EgtSetMachiningParam( MCH_MP.LOPERP, 0) else -- per utensili che lavorano di fianco, si deve partire fuori dall'altezza del grezzo - EgtSetMachiningParam( MCH_MP.LOPERP, WD.CUT_SIC + RawPart.b3:getDimZ()) + EgtSetMachiningParam( MCH_MP.LOPERP, WD.CUT_SIC + dSquaringHeight) end EgtSetMachiningParam( MCH_MP.LOELEV, 0) EgtSetMachiningParam( MCH_MP.LOCOMPLEN, 0) @@ -429,8 +434,11 @@ function Squaring.AddMachinings( SquaringGeometries, RawPart, nFirstOperationId) local sUserNotes = '' sUserNotes = EgtGetMachiningParam( MCH_MP.USERNOTES) if SquaringGeometries[i].ToolDouble then + local dYMirrorAx + local b3Tab = EgtGetTableArea() + dYMirrorAx = b3Squaring:getCenter():getY() - b3Tab:getMin():getY() sUserNotes = EgtSetValInNotes( sUserNotes, 'DOUBLE', 2) - sUserNotes = EgtSetValInNotes( sUserNotes, 'MirrorAx', dRawPartWidth / 2) + sUserNotes = EgtSetValInNotes( sUserNotes, 'MirrorAx', dYMirrorAx) sUserNotes = EgtSetValInNotes( sUserNotes, 'TOOLDOUBLE', SquaringGeometries[i].ToolDouble.sName) end EgtSetMachiningParam( MCH_MP.USERNOTES, sUserNotes) diff --git a/LuaLibs/WallExec.lua b/LuaLibs/WallExec.lua index d8ca49c..2e2e458 100644 --- a/LuaLibs/WallExec.lua +++ b/LuaLibs/WallExec.lua @@ -1079,7 +1079,7 @@ local function SetMirroredOperations() end ------------------------------------------------------------------------------------------------------------- -local function AddSquaring( sSquaringTool, RawPart) +local function AddSquaring( sSquaringTool, RawPart, vPart) local nFirstOperationId = EgtGetNextOperation( EgtGetPhaseDisposition( 1)) local dMachiningDepth = RawPart.b3:getDimZ() local bOk @@ -1095,9 +1095,9 @@ local function AddSquaring( sSquaringTool, RawPart) return false, sMsg end - SquaringGeometries = Squaring.CreateGeometry( sSquaringTool, SquaringTools, RawPart) + local SquaringGeometries, b3Squaring = Squaring.CreateGeometry( sSquaringTool, SquaringTools, RawPart, vPart) - bOk, sMsg, OperationsId = Squaring.AddMachinings( SquaringGeometries, RawPart, nFirstOperationId) + bOk, sMsg, OperationsId = Squaring.AddMachinings( SquaringGeometries, b3Squaring, nFirstOperationId) if not bOk then for i = 1, #OperationsId do EgtRemoveOperation( i) @@ -1268,12 +1268,12 @@ function WallExec.ProcessFeatures() if WD.SQUARING_TYPE and WD.SQUARING_TYPE > 0 then local RawPart = { nId = nRawId, b3 = b3Raw} local bOk, sMsg - if type( WD.SQUARING_TOOL ~= "number") then + if type( WD.SQUARING_TOOL) ~= "number" then WD.SQUARING_TOOL = 0 end if WD.SQUARING_TOOL == 0 or WD.SQUARING_TOOL == 1 then - bOk, sMsg = AddSquaring( 'DoubleDiskmill', RawPart) + bOk, sMsg = AddSquaring( 'DoubleDiskmill', RawPart, vPart) end if not bOk and ( WD.SQUARING_TOOL == 0 or WD.SQUARING_TOOL == 2) then -- attualmente non gestito, va modificata la configurazione macchina e non si sa se sia gestito in macchina (PLC) @@ -1282,19 +1282,19 @@ function WallExec.ProcessFeatures() --bOk, sMsg = AddSquaring( 'DoubleDiskmillAndBlade', RawPart) end if not bOk and ( WD.SQUARING_TOOL == 0 or WD.SQUARING_TOOL == 3) then - bOk, sMsg = AddSquaring( 'DoubleBlade', RawPart) + bOk, sMsg = AddSquaring( 'DoubleBlade', RawPart, vPart) end if not bOk and ( WD.SQUARING_TOOL == 0 or WD.SQUARING_TOOL == 4) then - bOk, sMsg = AddSquaring( 'Diskmill', RawPart) + bOk, sMsg = AddSquaring( 'Diskmill', RawPart, vPart) end if not bOk and ( WD.SQUARING_TOOL == 0 or WD.SQUARING_TOOL == 5) then - bOk, sMsg = AddSquaring( 'Blade', RawPart) + bOk, sMsg = AddSquaring( 'Blade', RawPart, vPart) end if not bOk and ( WD.SQUARING_TOOL == 0 or WD.SQUARING_TOOL == 6) then - bOk, sMsg = AddSquaring( 'DoubleMill', RawPart) + bOk, sMsg = AddSquaring( 'DoubleMill', RawPart, vPart) end if not bOk and ( WD.SQUARING_TOOL == 0 or WD.SQUARING_TOOL == 7) then - bOk, sMsg = AddSquaring( 'Mill', RawPart) + bOk, sMsg = AddSquaring( 'Mill', RawPart, vPart) end if not bOk then