- 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:
+114
-92
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user