- 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
This commit is contained in:
luca.mazzoleni
2024-10-29 13:14:00 +01:00
parent f17411326b
commit b325ebcd32
3 changed files with 129 additions and 92 deletions
+114 -92
View File
@@ -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
+12
View File
@@ -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
+3
View File
@@ -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)