From b325ebcd32ce69da6e79063643ae52d54e337ec2 Mon Sep 17 00:00:00 2001 From: "luca.mazzoleni" Date: Tue, 29 Oct 2024 13:14:00 +0100 Subject: [PATCH] - in MachiningLib aggiunta funzione GetMachiningSteps per il calcolo degli stepdi lavorazione - in Squaring aggiunti step verticali con lavorazioni aggiuntive - in WallExec gestito default per parametro di squadratura TOOL --- LuaLibs/Squaring.lua | 206 +++++++++++++++++++++----------------- LuaLibs/WMachiningLib.lua | 12 +++ LuaLibs/WallExec.lua | 3 + 3 files changed, 129 insertions(+), 92 deletions(-) diff --git a/LuaLibs/Squaring.lua b/LuaLibs/Squaring.lua index 3115537..5ba3e4c 100644 --- a/LuaLibs/Squaring.lua +++ b/LuaLibs/Squaring.lua @@ -11,6 +11,7 @@ EgtOutLog( ' Squaring started', 1) -- Dati local WD = require( 'WallData') +local WM = require( 'WMachiningLib') ------------------------------------------------------------------------------------------------------------- local function IsToolOk( Tool, dMachiningDepth) @@ -64,7 +65,8 @@ function Squaring.GetTools() Tool.dEndFeed = EgtTdbGetCurrToolParam( MCH_TP.ENDFEED) Tool.dTipFeed = EgtTdbGetCurrToolParam( MCH_TP.TIPFEED) Tool.dMinFeed = EgtTdbGetCurrToolParam( MCH_TP.MINFEED) - Tool.dSideStep = EgtTdbGetCurrToolValInNotes( MCH_TP.USERNOTES, 'SIDESTEP', 'd') or ( Tool.dDiameter / 2) + Tool.dStep = EgtTdbGetCurrToolValInNotes( MCH_TP.USERNOTES, 'STEP', 'd') or ( Tool.dMaxMaterial / 3) + Tool.dSideStep = EgtTdbGetCurrToolValInNotes( MCH_TP.USERNOTES, 'SIDESTEP', 'd') or ( Tool.dDiameter / 6) if bIsToolLoadedOnSetup and Tool.nType and bIsSquaringTool then -- lame @@ -127,7 +129,7 @@ function Squaring.CreateGeometry( sSquaringTool, SquaringTools, RawPart) 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) + local bSquaringStartsOnReference = ( type( WD.SQUARING_STARTS_ON_REFERENCE) == "boolean") and ( WD.SQUARING_STARTS_ON_REFERENCE == true) local dOffsetXY = 0 local dExtendZ = 0 if type( WD.SQUARING_OFFSET_XY) == "number" then @@ -320,106 +322,126 @@ function Squaring.AddMachinings( SquaringGeometries, RawPart, nFirstOperationId) if type( WD.SQUARING_MAX_OVERMATERIAL) == "number" then dMaxOvermaterial = WD.SQUARING_MAX_OVERMATERIAL end + local bUseZigZagStep = ( type( WD.SQUARING_USE_ZIGZAG) == "boolean") and ( WD.SQUARING_USE_ZIGZAG == true) for i = 1, #SquaringGeometries do local dToolRadius = SquaringGeometries[i].Tool.dDiameter / 2 local vtExtr = EgtCurveExtrusion( SquaringGeometries[i].nId, GDB_RT.GLOB) + local bIsVerticalMilling = false + if AreSameVectorApprox( vtExtr, Z_AX()) then + bIsVerticalMilling = true + end + -- calcolo step laterale + local MachiningSteps = { nCount = 1, dStep = 0} + if not bIsVerticalMilling then + MachiningSteps = WM.GetMachiningSteps( dRawPartHeight, SquaringGeometries[i].Tool.dSideStep) + end - local nOperationId = EgtCreateMachining( 'SQUARING_' .. SquaringGeometries[i].sSide, MCH_OY.MILLING, SquaringGeometries[i].Tool.sName) - -- geometria - EgtSetMachiningGeometry( SquaringGeometries[i].nId) - -- profondità di lavoro - EgtSetMachiningParam( MCH_MP.DEPTH_STR, 0) - -- workside e inversione - if SquaringGeometries[i].Tool.bIsPathCw then - if SquaringGeometries[i].Tool.nType == MCH_TY.MILL_STD then - EgtSetMachiningParam( MCH_MP.WORKSIDE, MCH_MILL_WS.LEFT) + for j = 1, MachiningSteps.nCount do + local nOperationId = EgtCreateMachining( 'SQUARING_' .. SquaringGeometries[i].sSide, MCH_OY.MILLING, SquaringGeometries[i].Tool.sName) + -- geometria + EgtSetMachiningGeometry( SquaringGeometries[i].nId) + -- profondità di lavoro + EgtSetMachiningParam( MCH_MP.DEPTH_STR, 0) + -- workside e inversione + if SquaringGeometries[i].Tool.bIsPathCw then + if SquaringGeometries[i].Tool.nType == MCH_TY.MILL_STD then + EgtSetMachiningParam( MCH_MP.WORKSIDE, MCH_MILL_WS.LEFT) + else + EgtSetMachiningParam( MCH_MP.WORKSIDE, MCH_MILL_WS.RIGHT) + end + EgtSetMachiningParam( MCH_MP.INVERT, true) else - EgtSetMachiningParam( MCH_MP.WORKSIDE, MCH_MILL_WS.RIGHT) + if SquaringGeometries[i].Tool.nType == MCH_TY.MILL_STD then + EgtSetMachiningParam( MCH_MP.WORKSIDE, MCH_MILL_WS.RIGHT) + else + EgtSetMachiningParam( MCH_MP.WORKSIDE, MCH_MILL_WS.LEFT) + end + EgtSetMachiningParam( MCH_MP.INVERT, false) end - EgtSetMachiningParam( MCH_MP.INVERT, true) - else - if SquaringGeometries[i].Tool.nType == MCH_TY.MILL_STD then - EgtSetMachiningParam( MCH_MP.WORKSIDE, MCH_MILL_WS.RIGHT) + -- distanza di sicurezza + if bIsVerticalMilling then + EgtSetMachiningParam( MCH_MP.STARTPOS, WD.CUT_SIC + RawPart.b3:getDimZ()) else - EgtSetMachiningParam( MCH_MP.WORKSIDE, MCH_MILL_WS.LEFT) + EgtSetMachiningParam( MCH_MP.STARTPOS, WD.CUT_SIC) end - EgtSetMachiningParam( MCH_MP.INVERT, false) - end - -- distanza di sicurezza - if AreSameVectorApprox( vtExtr, Z_AX()) then - EgtSetMachiningParam( MCH_MP.STARTPOS, WD.CUT_SIC + RawPart.b3:getDimZ()) - else - EgtSetMachiningParam( MCH_MP.STARTPOS, WD.CUT_SIC) - end - -- overlap - EgtSetMachiningParam( MCH_MP.OVERL, 0) - -- tipo di step - EgtSetMachiningParam( MCH_MP.STEPTYPE, MCH_MILL_ST.ONEWAY) - -- step - EgtSetMachiningParam( MCH_MP.STEP, SquaringGeometries[i].Tool.dMaxMaterial) - -- offset radiale - EgtSetMachiningParam( MCH_MP.OFFSR, 0) - -- offset longitudinale - EgtSetMachiningParam( MCH_MP.OFFSL, 0) - -- inversione utensile - EgtSetMachiningParam( MCH_MP.TOOLINVERT, false) - -- faceuse - EgtSetMachiningParam( MCH_MP.FACEUSE, MCH_MILL_FU.NONE) - -- angoli suggeriti - EgtSetMachiningParam( MCH_MP.INITANGS, '') - -- asse bloccato - EgtSetMachiningParam( MCH_MP.BLOCKEDAXIS, '') - -- SCC - EgtSetMachiningParam( MCH_MP.SCC, MCH_SCC.NONE) - -- calcolo estensione percorso - if AreSameVectorApprox( vtExtr, Z_AX()) then - -- per utensili che lavorano di fianco, si deve partire fuori dall'altezza del grezzo - 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)))) - end - -- approccio - EgtSetMachiningParam( MCH_MP.LEADINTYPE, MCH_MILL_LI.LINEAR) - EgtSetMachiningParam( MCH_MP.STARTADDLEN, dExtendPath) - EgtSetMachiningParam( MCH_MP.LITANG, 0) - if AreSameVectorApprox( vtExtr, Z_AX()) then - 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()) - end - EgtSetMachiningParam( MCH_MP.LIELEV, 0) - EgtSetMachiningParam( MCH_MP.LICOMPLEN, 0) - -- retrazione - EgtSetMachiningParam( MCH_MP.LEADOUTTYPE, MCH_MILL_LO.LINEAR) - EgtSetMachiningParam( MCH_MP.ENDADDLEN, dExtendPath) - EgtSetMachiningParam( MCH_MP.LOTANG, 0) - if AreSameVectorApprox( vtExtr, Z_AX()) then - 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()) - end - EgtSetMachiningParam( MCH_MP.LOELEV, 0) - EgtSetMachiningParam( MCH_MP.LOCOMPLEN, 0) - -- note utente - local sUserNotes = '' - sUserNotes = EgtGetMachiningParam( MCH_MP.USERNOTES) - if SquaringGeometries[i].ToolDouble then - sUserNotes = EgtSetValInNotes( sUserNotes, 'DOUBLE', 2) - sUserNotes = EgtSetValInNotes( sUserNotes, 'MirrorAx', dRawPartWidth / 2) - sUserNotes = EgtSetValInNotes( sUserNotes, 'TOOLDOUBLE', SquaringGeometries[i].ToolDouble.sName) - end - EgtSetMachiningParam( MCH_MP.USERNOTES, sUserNotes) + -- overlap + EgtSetMachiningParam( MCH_MP.OVERL, 0) + -- tipo di step + if bIsVerticalMilling and bUseZigZagStep then + EgtSetMachiningParam( MCH_MP.STEPTYPE, MCH_MILL_ST.ZIGZAG) + else + EgtSetMachiningParam( MCH_MP.STEPTYPE, MCH_MILL_ST.ONEWAY) + end + -- step + EgtSetMachiningParam( MCH_MP.STEP, SquaringGeometries[i].Tool.dStep) + -- offset radiale + local dRadialOffset = 0 + if not bIsVerticalMilling then + dRadialOffset = ( MachiningSteps.nCount - j) * MachiningSteps.dStep + end + EgtSetMachiningParam( MCH_MP.OFFSR, dRadialOffset) + -- offset longitudinale + EgtSetMachiningParam( MCH_MP.OFFSL, 0) + -- inversione utensile + EgtSetMachiningParam( MCH_MP.TOOLINVERT, false) + -- faceuse + EgtSetMachiningParam( MCH_MP.FACEUSE, MCH_MILL_FU.NONE) + -- angoli suggeriti + EgtSetMachiningParam( MCH_MP.INITANGS, '') + -- asse bloccato + EgtSetMachiningParam( MCH_MP.BLOCKEDAXIS, '') + -- SCC + EgtSetMachiningParam( MCH_MP.SCC, MCH_SCC.NONE) + -- calcolo estensione percorso + if bIsVerticalMilling then + -- per utensili che lavorano di fianco, si deve partire fuori dall'altezza del grezzo + 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)))) + end + -- approccio + EgtSetMachiningParam( MCH_MP.LEADINTYPE, MCH_MILL_LI.LINEAR) + EgtSetMachiningParam( MCH_MP.STARTADDLEN, dExtendPath) + EgtSetMachiningParam( MCH_MP.LITANG, 0) + if bIsVerticalMilling then + 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()) + end + EgtSetMachiningParam( MCH_MP.LIELEV, 0) + EgtSetMachiningParam( MCH_MP.LICOMPLEN, 0) + -- retrazione + EgtSetMachiningParam( MCH_MP.LEADOUTTYPE, MCH_MILL_LO.LINEAR) + EgtSetMachiningParam( MCH_MP.ENDADDLEN, dExtendPath) + EgtSetMachiningParam( MCH_MP.LOTANG, 0) + if bIsVerticalMilling then + 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()) + end + EgtSetMachiningParam( MCH_MP.LOELEV, 0) + EgtSetMachiningParam( MCH_MP.LOCOMPLEN, 0) + -- note utente + local sUserNotes = '' + sUserNotes = EgtGetMachiningParam( MCH_MP.USERNOTES) + if SquaringGeometries[i].ToolDouble then + sUserNotes = EgtSetValInNotes( sUserNotes, 'DOUBLE', 2) + sUserNotes = EgtSetValInNotes( sUserNotes, 'MirrorAx', dRawPartWidth / 2) + sUserNotes = EgtSetValInNotes( sUserNotes, 'TOOLDOUBLE', SquaringGeometries[i].ToolDouble.sName) + end + EgtSetMachiningParam( MCH_MP.USERNOTES, sUserNotes) - local bOk = EgtApplyMachining( true, false) - EgtRelocateGlob( nOperationId, nFirstOperationId, GDB_IN.BEFORE) - if not bOk then - local _, sMsg = EgtGetLastMachMgrError() - nNotOkCount = nNotOkCount + 1 - sMsgTotal = sMsgTotal ..'\n' .. ( sMsg or '') + local bOk = EgtApplyMachining( true, false) + EgtRelocateGlob( nOperationId, nFirstOperationId, GDB_IN.BEFORE) + if not bOk then + local _, sMsg = EgtGetLastMachMgrError() + nNotOkCount = nNotOkCount + 1 + sMsgTotal = sMsgTotal ..'\n' .. ( sMsg or '') + end end end diff --git a/LuaLibs/WMachiningLib.lua b/LuaLibs/WMachiningLib.lua index d4cbf8d..d5ed5c5 100644 --- a/LuaLibs/WMachiningLib.lua +++ b/LuaLibs/WMachiningLib.lua @@ -266,5 +266,17 @@ function WMachiningLib.IsMachiningOkForDouble( sMachining) return bDoubleOk end +------------------------------------------------------------------------------------------------------------- +function WMachiningLib.GetMachiningSteps( dMachiningDepth, dStep) + local MachiningSteps = {} + MachiningSteps.dStep = 0 + MachiningSteps.nCount = ceil( ( dMachiningDepth - 10 * GEO.EPS_SMALL) / dStep) + if MachiningSteps.nCount > 1 then + MachiningSteps.dStep = ( dMachiningDepth - dStep) / ( MachiningSteps.nCount - 1) + end + + return MachiningSteps +end + ------------------------------------------------------------------------------------------------------------- return WMachiningLib diff --git a/LuaLibs/WallExec.lua b/LuaLibs/WallExec.lua index 81c9750..d8ca49c 100644 --- a/LuaLibs/WallExec.lua +++ b/LuaLibs/WallExec.lua @@ -1268,6 +1268,9 @@ 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 + WD.SQUARING_TOOL = 0 + end if WD.SQUARING_TOOL == 0 or WD.SQUARING_TOOL == 1 then bOk, sMsg = AddSquaring( 'DoubleDiskmill', RawPart)