6fda7f818f
- Correzioni a squadratura
494 lines
22 KiB
Lua
494 lines
22 KiB
Lua
-- Squaring.lua by Egaltech s.r.l. 2024/10/15
|
|
-- Libreria squadratura pareti
|
|
|
|
-- Tabella per definizione modulo
|
|
local Squaring = {}
|
|
|
|
-- Include
|
|
require( 'EgtBase')
|
|
|
|
EgtOutLog( ' Squaring started', 1)
|
|
|
|
-- Dati
|
|
local WD = require( 'WallData')
|
|
local WM = require( 'WMachiningLib')
|
|
|
|
-------------------------------------------------------------------------------------------------------------
|
|
local function IsToolOk( Tool, dRawPartHeight)
|
|
local bIsToolOk = false
|
|
local bToolExists = false
|
|
local bToolCanReachDepth = false
|
|
local dMaxOvermaterial = 0
|
|
if type( WD.SQUARING_MAX_OVERMATERIAL) == "number" then
|
|
dMaxOvermaterial = WD.SQUARING_MAX_OVERMATERIAL
|
|
end
|
|
|
|
bToolExists = ( next( Tool) ~= nil)
|
|
if bToolExists then
|
|
if Tool.nType == MCH_TY.MILL_NOTIP then
|
|
bToolCanReachDepth = ( Tool.dThickness > dMaxOvermaterial - 10 * GEO.EPS_SMALL)
|
|
and ( Tool.dSideDepth > dRawPartHeight - 10 * GEO.EPS_SMALL)
|
|
else
|
|
bToolCanReachDepth = Tool.dMaxDepth > dRawPartHeight - 10 * GEO.EPS_SMALL
|
|
end
|
|
end
|
|
bIsToolOk = bToolExists and bToolCanReachDepth
|
|
|
|
return bIsToolOk
|
|
end
|
|
|
|
-------------------------------------------------------------------------------------------------------------
|
|
function Squaring.GetTools()
|
|
-- TODO vedere se questo valore è coerente sulle diverse macchine
|
|
local dHeadEncumberance = 130
|
|
|
|
local Tool = {}
|
|
local SquaringTools = {}
|
|
SquaringTools.Blade = {}
|
|
SquaringTools.Diskmill = {}
|
|
SquaringTools.Mill = {}
|
|
SquaringTools.Blade.H1 = {}
|
|
SquaringTools.Blade.H2 = {}
|
|
SquaringTools.Blade.H7 = {}
|
|
SquaringTools.Diskmill.H1 = {}
|
|
SquaringTools.Diskmill.H7 = {}
|
|
SquaringTools.Mill.H1 = {}
|
|
SquaringTools.Mill.H7 = {}
|
|
|
|
Tool.sName = EgtTdbGetFirstTool( MCH_TF.SAWBLADE + MCH_TF.MILL + MCH_TF.MORTISE)
|
|
while Tool.sName ~= '' do
|
|
EgtTdbSetCurrTool( Tool.sName)
|
|
local bIsToolLoadedOnSetup = EgtFindToolInCurrSetup( Tool.sName)
|
|
local bIsSquaringTool = EgtTdbGetCurrToolValInNotes( MCH_TP.USERNOTES, 'SQUARING', 'b') or false
|
|
|
|
Tool.nType = EgtTdbGetCurrToolParam( MCH_TP.TYPE)
|
|
Tool.dDiameter = EgtTdbGetCurrToolParam( MCH_TP.DIAM)
|
|
Tool.dMaxMaterial = EgtTdbGetCurrToolParam( MCH_TP.MAXMAT)
|
|
Tool.dThickness = EgtIf( ( Tool.nType == MCH_TY.SAW_FLAT or Tool.nType == MCH_TY.SAW_STD), EgtTdbGetCurrToolParam( MCH_TP.THICK), Tool.dMaxMaterial)
|
|
Tool.dMaxDepth = EgtTdbGetCurrToolMaxDepth() or Tool.dMaxMaterial
|
|
Tool.sHead = EgtTdbGetCurrToolParam( MCH_TP.HEAD)
|
|
Tool.bIsCcw = EgtTdbGetCurrToolParam( MCH_TP.SPEED) < 0
|
|
Tool.dFeed = EgtTdbGetCurrToolParam( MCH_TP.FEED)
|
|
Tool.dStartFeed = EgtTdbGetCurrToolParam( MCH_TP.STARTFEED)
|
|
Tool.dEndFeed = EgtTdbGetCurrToolParam( MCH_TP.ENDFEED)
|
|
Tool.dTipFeed = EgtTdbGetCurrToolParam( MCH_TP.TIPFEED)
|
|
Tool.dMinFeed = EgtTdbGetCurrToolParam( MCH_TP.MINFEED)
|
|
Tool.dStep = EgtTdbGetCurrToolValInNotes( MCH_TP.USERNOTES, 'STEP', 'd') or EgtIf( ( Tool.nType == MCH_TY.SAW_FLAT or Tool.nType == MCH_TY.SAW_STD), ( Tool.dDiameter / 3), ( Tool.dMaxMaterial / 3))
|
|
Tool.dSideStep = EgtTdbGetCurrToolValInNotes( MCH_TP.USERNOTES, 'SIDESTEP', 'd') or ( Tool.dDiameter / 3)
|
|
Tool.dSideDepth = Tool.dDiameter / 2 - dHeadEncumberance
|
|
|
|
if bIsToolLoadedOnSetup and Tool.nType and bIsSquaringTool then
|
|
-- lame
|
|
if Tool.nType == MCH_TY.SAW_FLAT or Tool.nType == MCH_TY.SAW_STD then
|
|
SquaringTools.Blade[Tool.sHead] = Tool
|
|
Tool.bIsPathCw = Tool.bIsCcw
|
|
Tool.dSideStep = Tool.dStep
|
|
Tool.dStep = Tool.dThickness
|
|
-- frese standard
|
|
elseif Tool.nType == MCH_TY.MILL_STD then
|
|
SquaringTools.Mill[Tool.sHead] = Tool
|
|
Tool.bIsPathCw = not Tool.bIsCcw
|
|
-- truciolatori
|
|
elseif Tool.nType == MCH_TY.MILL_NOTIP then
|
|
SquaringTools.Diskmill[Tool.sHead] = Tool
|
|
Tool.bIsPathCw = Tool.bIsCcw
|
|
end
|
|
end
|
|
|
|
Tool = {}
|
|
Tool.sName = EgtTdbGetNextTool( MCH_TF.SAWBLADE + MCH_TF.MILL + MCH_TF.MORTISE)
|
|
end
|
|
|
|
return SquaringTools
|
|
end
|
|
|
|
-------------------------------------------------------------------------------------------------------------
|
|
function Squaring.AreToolsOk( sSquaringTool, SquaringTools, dRawPartHeight)
|
|
local bAreToolsOk = false
|
|
|
|
if sSquaringTool == 'DoubleDiskmill' then
|
|
bAreToolsOk = ( IsToolOk( SquaringTools.Blade.H2, dRawPartHeight)
|
|
and IsToolOk( SquaringTools.Diskmill.H1, dRawPartHeight)
|
|
and IsToolOk( SquaringTools.Diskmill.H7, dRawPartHeight))
|
|
elseif sSquaringTool == 'DoubleDiskmillAndBlade' then
|
|
bAreToolsOk = ( IsToolOk( SquaringTools.Blade.H2, dRawPartHeight)
|
|
and ( IsToolOk( SquaringTools.Diskmill.H1, dRawPartHeight) or IsToolOk( SquaringTools.Diskmill.H7, dRawPartHeight)))
|
|
elseif sSquaringTool == 'DoubleBlade' then
|
|
bAreToolsOk = ( IsToolOk( SquaringTools.Blade.H2, dRawPartHeight)
|
|
and ( IsToolOk( SquaringTools.Blade.H1, dRawPartHeight) or IsToolOk( SquaringTools.Blade.H7, dRawPartHeight)))
|
|
elseif sSquaringTool == 'Diskmill' then
|
|
bAreToolsOk = IsToolOk( SquaringTools.Diskmill.H1, dRawPartHeight) or IsToolOk( SquaringTools.Diskmill.H7, dRawPartHeight)
|
|
elseif sSquaringTool == 'Blade' then
|
|
bAreToolsOk = IsToolOk( SquaringTools.Blade.H2, dRawPartHeight)
|
|
elseif sSquaringTool == 'DoubleMill' then
|
|
bAreToolsOk = IsToolOk( SquaringTools.Mill.H1, dRawPartHeight) and IsToolOk( SquaringTools.Mill.H7, dRawPartHeight)
|
|
elseif sSquaringTool == 'Mill' then
|
|
bAreToolsOk = IsToolOk( SquaringTools.Mill.H1, dRawPartHeight) or IsToolOk( SquaringTools.Mill.H7, dRawPartHeight)
|
|
else
|
|
error( 'Squaring Tool not recognized')
|
|
end
|
|
|
|
return bAreToolsOk
|
|
end
|
|
|
|
-------------------------------------------------------------------------------------------------------------
|
|
function Squaring.CalculateParameters( sSquaringTool, SquaringTools, RawPart, vPart)
|
|
local SquaringParameters = {}
|
|
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 dOffsetXY = 0
|
|
local dExtendZ = 0
|
|
if type( WD.SQUARING_OFFSET_XY) == "number" and ( WD.SQUARING_TYPE < 2) then
|
|
dOffsetXY = WD.SQUARING_OFFSET_XY
|
|
end
|
|
if type( WD.SQUARING_EXTEND_Z) == "number" then
|
|
dExtendZ = WD.SQUARING_EXTEND_Z
|
|
end
|
|
|
|
local Front = { sSide = 'Front'}
|
|
local Right = { sSide = 'Right'}
|
|
local Back = { sSide = 'Back'}
|
|
local Left = { sSide = 'Left'}
|
|
local b3Squaring = BBox3d( RawPart.b3)
|
|
-- se squadratura sui pezzi invece che sul master panel, si costruisce il box minimo che contiene tutti i pezzi
|
|
if bShrinkToParts then
|
|
b3Squaring = BBox3d( vPart[1].Box: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)
|
|
b3Squaring:Add( pt1)
|
|
b3Squaring:Add( pt2)
|
|
b3Squaring:Add( pt3)
|
|
b3Squaring:Add( pt4)
|
|
Front.nId = EgtLine( RawPart.nId, pt1, pt2, GDB_RT.GLOB)
|
|
Right.nId = EgtLine( RawPart.nId, pt2, pt3, GDB_RT.GLOB)
|
|
Back.nId = EgtLine( RawPart.nId, pt3, pt4, GDB_RT.GLOB)
|
|
Left.nId = EgtLine( RawPart.nId, pt4, pt1, GDB_RT.GLOB)
|
|
if not ( sSquaringTool == 'DoubleMill') and not ( sSquaringTool == 'Mill') then
|
|
EgtModifyCurveExtrusion( Front.nId, -Y_AX(), GDB_RT.GLOB)
|
|
EgtModifyCurveExtrusion( Right.nId, X_AX(), GDB_RT.GLOB)
|
|
EgtModifyCurveExtrusion( Back.nId, Y_AX(), GDB_RT.GLOB)
|
|
EgtModifyCurveExtrusion( Left.nId, -X_AX(), GDB_RT.GLOB)
|
|
end
|
|
EgtSetName( Front.nId, 'SquaringGeometry')
|
|
EgtSetName( Right.nId, 'SquaringGeometry')
|
|
EgtSetName( Back.nId, 'SquaringGeometry')
|
|
EgtSetName( Left.nId, 'SquaringGeometry')
|
|
|
|
-- in base al caso si assegna l'utensile al lato
|
|
if sSquaringTool == 'DoubleDiskmill' then
|
|
Left.Tool = SquaringTools.Diskmill.H1
|
|
Right.Tool = SquaringTools.Blade.H2
|
|
Front.Tool = SquaringTools.Diskmill.H1
|
|
Front.ToolDouble = SquaringTools.Diskmill.H7
|
|
Front.sSide = 'Front+Back'
|
|
elseif sSquaringTool == 'DoubleDiskmillAndBlade' then
|
|
Left.Tool = SquaringTools.Diskmill.H1 or SquaringTools.Diskmill.H7
|
|
Right.Tool = SquaringTools.Blade.H2
|
|
Front.Tool = SquaringTools.Blade.H2
|
|
Front.ToolDouble = SquaringTools.Diskmill.H1 or SquaringTools.Diskmill.H7
|
|
Front.sSide = 'Front+Back'
|
|
elseif sSquaringTool == 'DoubleBlade' then
|
|
Left.Tool = SquaringTools.Blade.H2
|
|
Right.Tool = SquaringTools.Blade.H2
|
|
Front.Tool = SquaringTools.Blade.H2
|
|
Front.ToolDouble = SquaringTools.Blade.H1 or SquaringTools.Blade.H7
|
|
Front.sSide = 'Front+Back'
|
|
elseif sSquaringTool == 'Diskmill' then
|
|
Left.Tool = SquaringTools.Diskmill.H1 or SquaringTools.Diskmill.H7
|
|
Back.Tool = SquaringTools.Diskmill.H1 or SquaringTools.Diskmill.H7
|
|
Right.Tool = SquaringTools.Blade.H2
|
|
Front.Tool = SquaringTools.Diskmill.H1 or SquaringTools.Diskmill.H7
|
|
elseif sSquaringTool == 'Blade' then
|
|
Left.Tool = SquaringTools.Blade.H2
|
|
Back.Tool = SquaringTools.Blade.H2
|
|
Right.Tool = SquaringTools.Blade.H2
|
|
Front.Tool = SquaringTools.Blade.H2
|
|
elseif sSquaringTool == 'DoubleMill' then
|
|
Left.Tool = SquaringTools.Mill.H1
|
|
Right.Tool = SquaringTools.Mill.H1
|
|
Front.Tool = SquaringTools.Mill.H1
|
|
Front.ToolDouble = SquaringTools.Mill.H7
|
|
Front.sSide = 'Front+Back'
|
|
elseif sSquaringTool == 'Mill' then
|
|
Left.Tool = SquaringTools.Mill.H1 or SquaringTools.Mill.H7
|
|
Back.Tool = SquaringTools.Mill.H1 or SquaringTools.Mill.H7
|
|
Right.Tool = SquaringTools.Mill.H1 or SquaringTools.Mill.H7
|
|
Front.Tool = SquaringTools.Mill.H1 or SquaringTools.Mill.H7
|
|
end
|
|
|
|
-- l'ordinamento delle linee dipende dal verso di percorrenza e, se attivato, dal riferimento utilizzato
|
|
-- con doppio l'ordine cambia
|
|
-- lato lungo lavorato in doppio
|
|
if not Back.Tool then
|
|
for i = 1, 3 do
|
|
SquaringParameters[i] = {}
|
|
end
|
|
if Front.Tool.bIsPathCw then
|
|
if bSquaringStartsOnReference and ( sOrigCorner == 'BL' or sOrigCorner == 'BM') then
|
|
SquaringParameters[1] = Front
|
|
SquaringParameters[2] = Left
|
|
SquaringParameters[3] = Right
|
|
elseif bSquaringStartsOnReference and ( sOrigCorner == 'TR' or sOrigCorner == 'TN') then
|
|
SquaringParameters[1] = Right
|
|
SquaringParameters[2] = Front
|
|
SquaringParameters[3] = Left
|
|
elseif bSquaringStartsOnReference and ( sOrigCorner == 'BR' or sOrigCorner == 'BN') then
|
|
SquaringParameters[1] = Right
|
|
SquaringParameters[2] = Front
|
|
SquaringParameters[3] = Left
|
|
elseif bSquaringStartsOnReference and ( sOrigCorner == 'TL' or sOrigCorner == 'TM') then
|
|
SquaringParameters[1] = Left
|
|
SquaringParameters[2] = Front
|
|
SquaringParameters[3] = Right
|
|
else
|
|
SquaringParameters[1] = Right
|
|
SquaringParameters[2] = Front
|
|
SquaringParameters[3] = Left
|
|
end
|
|
else
|
|
if bSquaringStartsOnReference and ( sOrigCorner == 'BL' or sOrigCorner == 'BM') then
|
|
SquaringParameters[1] = Left
|
|
SquaringParameters[2] = Front
|
|
SquaringParameters[3] = Right
|
|
elseif bSquaringStartsOnReference and ( sOrigCorner == 'TR' or sOrigCorner == 'TN') then
|
|
SquaringParameters[1] = Front
|
|
SquaringParameters[2] = Right
|
|
SquaringParameters[3] = Left
|
|
elseif bSquaringStartsOnReference and ( sOrigCorner == 'BR' or sOrigCorner == 'BN') then
|
|
SquaringParameters[1] = Front
|
|
SquaringParameters[2] = Right
|
|
SquaringParameters[3] = Left
|
|
elseif bSquaringStartsOnReference and ( sOrigCorner == 'TL' or sOrigCorner == 'TM') then
|
|
SquaringParameters[1] = Left
|
|
SquaringParameters[2] = Front
|
|
SquaringParameters[3] = Right
|
|
else
|
|
SquaringParameters[1] = Left
|
|
SquaringParameters[2] = Front
|
|
SquaringParameters[3] = Right
|
|
end
|
|
end
|
|
-- doppio non attivo
|
|
else
|
|
for i = 1, 4 do
|
|
SquaringParameters[i] = {}
|
|
end
|
|
if Front.Tool.bIsPathCw then
|
|
if bSquaringStartsOnReference and ( sOrigCorner == 'BL' or sOrigCorner == 'BM') then
|
|
SquaringParameters[1] = Front
|
|
SquaringParameters[2] = Left
|
|
SquaringParameters[3] = Back
|
|
SquaringParameters[4] = Right
|
|
elseif bSquaringStartsOnReference and ( sOrigCorner == 'TR' or sOrigCorner == 'TN') then
|
|
SquaringParameters[1] = Back
|
|
SquaringParameters[2] = Right
|
|
SquaringParameters[3] = Front
|
|
SquaringParameters[4] = Left
|
|
elseif bSquaringStartsOnReference and ( sOrigCorner == 'BR' or sOrigCorner == 'BN') then
|
|
SquaringParameters[1] = Right
|
|
SquaringParameters[2] = Front
|
|
SquaringParameters[3] = Left
|
|
SquaringParameters[4] = Back
|
|
else
|
|
SquaringParameters[1] = Left
|
|
SquaringParameters[2] = Back
|
|
SquaringParameters[3] = Right
|
|
SquaringParameters[4] = Front
|
|
end
|
|
else
|
|
if bSquaringStartsOnReference and ( sOrigCorner == 'TL' or sOrigCorner == 'TM') then
|
|
SquaringParameters[1] = Back
|
|
SquaringParameters[2] = Left
|
|
SquaringParameters[3] = Front
|
|
SquaringParameters[4] = Right
|
|
elseif bSquaringStartsOnReference and ( sOrigCorner == 'TR' or sOrigCorner == 'TN') then
|
|
SquaringParameters[1] = Right
|
|
SquaringParameters[2] = Back
|
|
SquaringParameters[3] = Left
|
|
SquaringParameters[4] = Front
|
|
elseif bSquaringStartsOnReference and ( sOrigCorner == 'BR' or sOrigCorner == 'BN') then
|
|
SquaringParameters[1] = Front
|
|
SquaringParameters[2] = Right
|
|
SquaringParameters[3] = Back
|
|
SquaringParameters[4] = Left
|
|
else
|
|
SquaringParameters[1] = Left
|
|
SquaringParameters[2] = Front
|
|
SquaringParameters[3] = Right
|
|
SquaringParameters[4] = Back
|
|
end
|
|
end
|
|
end
|
|
|
|
return SquaringParameters, b3Squaring
|
|
end
|
|
|
|
-------------------------------------------------------------------------------------------------------------
|
|
function Squaring.AddMachinings( SquaringParameters, b3Squaring, nFirstOperationId)
|
|
local nNotOkCount = 0
|
|
local sMsgTotal = ''
|
|
local dSquaringHeight = b3Squaring:getDimZ()
|
|
local dExtendPath = 0
|
|
local dMaxOvermaterial = 0
|
|
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, #SquaringParameters do
|
|
local dToolRadius = SquaringParameters[i].Tool.dDiameter / 2
|
|
local vtExtr = EgtCurveExtrusion( SquaringParameters[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( dSquaringHeight, SquaringParameters[i].Tool.dSideStep)
|
|
end
|
|
|
|
for j = 1, MachiningSteps.nCount do
|
|
local nOperationId = EgtCreateMachining( 'SQUARING_' .. SquaringParameters[i].sSide, MCH_OY.MILLING, SquaringParameters[i].Tool.sName)
|
|
-- geometria
|
|
EgtSetMachiningGeometry( SquaringParameters[i].nId)
|
|
-- profondità di lavoro
|
|
EgtSetMachiningParam( MCH_MP.DEPTH_STR, 0)
|
|
-- workside e inversione
|
|
if SquaringParameters[i].Tool.bIsPathCw then
|
|
if SquaringParameters[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
|
|
if SquaringParameters[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
|
|
-- distanza di sicurezza
|
|
if bIsVerticalMilling then
|
|
EgtSetMachiningParam( MCH_MP.STARTPOS, WD.CUT_SIC + dSquaringHeight)
|
|
else
|
|
EgtSetMachiningParam( MCH_MP.STARTPOS, WD.CUT_SIC)
|
|
end
|
|
-- 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
|
|
if bIsVerticalMilling then
|
|
EgtSetMachiningParam( MCH_MP.STEP, SquaringParameters[i].Tool.dStep)
|
|
else
|
|
EgtSetMachiningParam( MCH_MP.STEP, 0)
|
|
end
|
|
-- 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 - dSquaringHeight) * ( dToolRadius - dSquaringHeight))))
|
|
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 + dSquaringHeight)
|
|
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 + dSquaringHeight)
|
|
end
|
|
EgtSetMachiningParam( MCH_MP.LOELEV, 0)
|
|
EgtSetMachiningParam( MCH_MP.LOCOMPLEN, 0)
|
|
-- note utente
|
|
local sUserNotes = ''
|
|
sUserNotes = EgtGetMachiningParam( MCH_MP.USERNOTES)
|
|
if SquaringParameters[i].ToolDouble then
|
|
local dYMirrorAx
|
|
local b3Tab = EgtGetTableArea()
|
|
dYMirrorAx = b3Squaring:getCenter():getY() - b3Tab:getMin():getY()
|
|
sUserNotes = EgtSetValInNotes( sUserNotes, 'DOUBLE', 2)
|
|
sUserNotes = EgtSetValInNotes( sUserNotes, 'MirrorAx', dYMirrorAx)
|
|
sUserNotes = EgtSetValInNotes( sUserNotes, 'TOOLDOUBLE', SquaringParameters[i].ToolDouble.sName)
|
|
end
|
|
if not bIsVerticalMilling then
|
|
sUserNotes = EgtSetValInNotes( sUserNotes, 'MaxElev', 0)
|
|
end
|
|
EgtSetMachiningParam( MCH_MP.USERNOTES, sUserNotes)
|
|
|
|
local bOk = EgtApplyMachining( true, false)
|
|
-- la squadratura va sempre prima delle eventuali altre lavorazioni
|
|
if nFirstOperationId then
|
|
EgtRelocateGlob( nOperationId, nFirstOperationId, GDB_IN.BEFORE)
|
|
end
|
|
if not bOk then
|
|
local _, sMsg = EgtGetLastMachMgrError()
|
|
nNotOkCount = nNotOkCount + 1
|
|
sMsgTotal = sMsgTotal ..'\n' .. ( sMsg or '')
|
|
end
|
|
end
|
|
end
|
|
|
|
return ( nNotOkCount < 1), sMsgTotal
|
|
end
|
|
|
|
-------------------------------------------------------------------------------------------------------------
|
|
function Squaring.AddScrapRemoval( nFirstOperationId)
|
|
-- pulizia sfridi alla prima lavorazione dopo la squadratura
|
|
EgtSetCurrMachining( nFirstOperationId)
|
|
local sMachiningNotes = EgtGetMachiningParam( MCH_MP.USERNOTES)
|
|
sMachiningNotes = sMachiningNotes .. 'ScrapRemove=1;'
|
|
EgtSetMachiningParam( MCH_MP.USERNOTES, sMachiningNotes)
|
|
end
|
|
|
|
-------------------------------------------------------------------------------------------------------------
|
|
return Squaring |