Files
DataWall/LuaLibs/Squaring.lua
T

369 lines
15 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 function IsToolOk( Tool, dMachiningDepth)
local bIsToolOk = false
local bToolExists = false
local dToolMaxDepth = 0
bToolExists = Tool ~= {}
if bToolExists then
if Tool.nType == MCH_TY.MILL_NOTIP then
dToolMaxDepth = Tool.dThickness
else
dToolMaxDepth = Tool.dMaxDepth
end
end
bIsToolOk = bToolExists and ( dToolMaxDepth > dMachiningDepth - 10 * GEO.EPS_SMALL)
return bIsToolOk
end
-------------------------------------------------------------------------------------------------------------
function Squaring.GetTools()
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 bToolLoadedOnSetup = EgtFindToolInCurrSetup( Tool.sName)
local bIsSquaringTool = EgtTdbGetCurrToolValInNotes( MCH_TP.USERNOTES, 'SQUARING', 'b') or false
Tool.nType = EgtTdbGetCurrToolParam( MCH_TP.TYPE)
Tool.dThickness = EgtTdbGetCurrToolParam( MCH_TP.THICK)
Tool.dMaxMaterial = EgtTdbGetCurrToolParam( MCH_TP.MAXMAT)
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)
if bToolLoadedOnSetup 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 = not Tool.bIsCcw
-- frese standard
elseif Tool.nType == MCH_TY.MILL_STD then
SquaringTools.Mill[Tool.sHead] = Tool
Tool.bIsPathCw = Tool.bIsCcw
-- truciolatori
elseif Tool.nType == MCH_TY.MILL_NOTIP then
SquaringTools.Diskmill[Tool.sHead] = Tool
Tool.bIsPathCw = not 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, dMachiningDepth)
local bAreToolsOk = false
if sSquaringTool == 'DoubleDiskmill' then
bAreToolsOk = ( IsToolOk( SquaringTools.Blade.H2, dMachiningDepth)
and IsToolOk( SquaringTools.Diskmill.H1, WD.SQUARING_MAX_OVERMATERIAL)
and IsToolOk( SquaringTools.Diskmill.H7, WD.SQUARING_MAX_OVERMATERIAL))
elseif sSquaringTool == 'DoubleDiskmillAndBlade' then
bAreToolsOk = ( IsToolOk( SquaringTools.Blade.H2, dMachiningDepth)
and ( IsToolOk( SquaringTools.Diskmill.H1, WD.SQUARING_MAX_OVERMATERIAL) or IsToolOk( SquaringTools.Diskmill.H7, WD.SQUARING_MAX_OVERMATERIAL)))
elseif sSquaringTool == 'DoubleBlade' then
bAreToolsOk = ( IsToolOk( SquaringTools.Blade.H2, dMachiningDepth)
and ( IsToolOk( SquaringTools.Blade.H1, dMachiningDepth) or IsToolOk( SquaringTools.Blade.H7, dMachiningDepth)))
elseif sSquaringTool == 'Diskmill' then
bAreToolsOk = IsToolOk( SquaringTools.Diskmill.H1, WD.SQUARING_MAX_OVERMATERIAL) or IsToolOk( SquaringTools.Diskmill.H7, WD.SQUARING_MAX_OVERMATERIAL)
elseif sSquaringTool == 'Blade' then
bAreToolsOk = IsToolOk( SquaringTools.Blade.H2, dMachiningDepth)
elseif sSquaringTool == 'DoubleMill' then
bAreToolsOk = IsToolOk( SquaringTools.Mill.H1, dMachiningDepth) and IsToolOk( SquaringTools.Mill.H7, dMachiningDepth)
elseif sSquaringTool == 'Mill' then
bAreToolsOk = IsToolOk( SquaringTools.Mill.H1, dMachiningDepth) or IsToolOk( SquaringTools.Mill.H7, dMachiningDepth)
else
error( 'Squaring Tool not recognized')
end
return bAreToolsOk
end
-------------------------------------------------------------------------------------------------------------
function Squaring.CreateGeometry( sSquaringTool, SquaringTools, RawPart)
-- 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)
local dOffsetXY = 0
local dExtendZ = 0
if type( WD.SQUARING_OFFSET_XY) == "number" then
dOffsetXY = WD.SQUARING_OFFSET_XY
end
if type( WD.SQUARING_EXTEND_Z) == "number" then
dExtendZ = WD.SQUARING_EXTEND_Z
end
local Front = { Side = 'Front'}
local Right = { Side = 'Right'}
local Back = { Side = 'Back'}
local Left = { Side = 'Left'}
local pt1 = RawPart.b3: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)
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)
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)
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
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
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
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
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
SquaringGeometries[i] = {}
end
if Front.Tool.bIsPathCw then
if bSquaringStartsOnReference and ( sOrigCorner == 'BL' or sOrigCorner == 'BM') then
SquaringGeometries[1] = Front
SquaringGeometries[2] = Left
SquaringGeometries[3] = Right
elseif bSquaringStartsOnReference and ( sOrigCorner == 'TR' or sOrigCorner == 'TN') then
SquaringGeometries[1] = Right
SquaringGeometries[2] = Front
SquaringGeometries[3] = Left
elseif bSquaringStartsOnReference and ( sOrigCorner == 'BR' or sOrigCorner == 'BN') then
SquaringGeometries[1] = Right
SquaringGeometries[2] = Front
SquaringGeometries[3] = Left
elseif bSquaringStartsOnReference and ( sOrigCorner == 'TL' or sOrigCorner == 'TM') then
SquaringGeometries[1] = Left
SquaringGeometries[2] = Front
SquaringGeometries[3] = Right
else
SquaringGeometries[1] = Right
SquaringGeometries[2] = Front
SquaringGeometries[3] = Left
end
else
if bSquaringStartsOnReference and ( sOrigCorner == 'BL' or sOrigCorner == 'BM') then
SquaringGeometries[1] = Left
SquaringGeometries[2] = Front
SquaringGeometries[3] = Right
elseif bSquaringStartsOnReference and ( sOrigCorner == 'TR' or sOrigCorner == 'TN') then
SquaringGeometries[1] = Front
SquaringGeometries[2] = Right
SquaringGeometries[3] = Left
elseif bSquaringStartsOnReference and ( sOrigCorner == 'BR' or sOrigCorner == 'BN') then
SquaringGeometries[1] = Front
SquaringGeometries[2] = Right
SquaringGeometries[3] = Left
elseif bSquaringStartsOnReference and ( sOrigCorner == 'TL' or sOrigCorner == 'TM') then
SquaringGeometries[1] = Left
SquaringGeometries[2] = Front
SquaringGeometries[3] = Right
else
SquaringGeometries[1] = Left
SquaringGeometries[2] = Front
SquaringGeometries[3] = Right
end
end
-- doppio non attivo
else
for i = 1, 4 do
SquaringGeometries[i] = {}
end
if Front.Tool.bIsPathCw then
if bSquaringStartsOnReference and ( sOrigCorner == 'BL' or sOrigCorner == 'BM') then
SquaringGeometries[1] = Front
SquaringGeometries[2] = Left
SquaringGeometries[3] = Back
SquaringGeometries[4] = Right
elseif bSquaringStartsOnReference and ( sOrigCorner == 'TR' or sOrigCorner == 'TN') then
SquaringGeometries[1] = Back
SquaringGeometries[2] = Right
SquaringGeometries[3] = Front
SquaringGeometries[4] = Left
elseif bSquaringStartsOnReference and ( sOrigCorner == 'BR' or sOrigCorner == 'BN') then
SquaringGeometries[1] = Right
SquaringGeometries[2] = Front
SquaringGeometries[3] = Left
SquaringGeometries[4] = Back
else
SquaringGeometries[1] = Left
SquaringGeometries[2] = Back
SquaringGeometries[3] = Right
SquaringGeometries[4] = Front
end
else
if bSquaringStartsOnReference and ( sOrigCorner == 'TL' or sOrigCorner == 'TM') then
SquaringGeometries[1] = Back
SquaringGeometries[2] = Left
SquaringGeometries[3] = Front
SquaringGeometries[4] = Right
elseif bSquaringStartsOnReference and ( sOrigCorner == 'TR' or sOrigCorner == 'TN') then
SquaringGeometries[1] = Right
SquaringGeometries[2] = Back
SquaringGeometries[3] = Left
SquaringGeometries[4] = Front
elseif bSquaringStartsOnReference and ( sOrigCorner == 'BR' or sOrigCorner == 'BN') then
SquaringGeometries[1] = Front
SquaringGeometries[2] = Right
SquaringGeometries[3] = Back
SquaringGeometries[4] = Left
else
SquaringGeometries[1] = Left
SquaringGeometries[2] = Front
SquaringGeometries[3] = Right
SquaringGeometries[4] = Back
end
end
end
return SquaringGeometries
end
-------------------------------------------------------------------------------------------------------------
function Squaring.AddMachinings( MachiningGeometries)
local nNotOkCount = 0
local sMsgTotal = ''
for i = 1, #MachiningGeometries do
local nOperationId = EgtCreateMachining( 'SQUARING', MCH_AT.LINEAR, MACHININGS[i].Machining.sToolName)
end
return ( nNotOkCount < 1), sMsgTotal
-- for i = 1, #SquaringGeometries do
-- local nSquaringOperationId = EgtAddMachining('SQUARING', Machining.sSquaring)
-- EgtSetMachiningGeometry( SquaringGeometries[i].nId)
-- -- in base al verso di percorrenza modifico i parametri significativi di lavorazione
-- if Machining.bIsPathCw then
-- if Machining.sType == 'Sawing'then
-- EgtSetMachiningParam( MCH_MP.WORKSIDE, MCH_SAW_WS.LEFT)
-- EgtSetMachiningParam( MCH_MP.HEADSIDE, MCH_SAW_HS.LEFT)
-- elseif Machining.sType == 'Milling' then
-- EgtSetMachiningParam( MCH_MP.WORKSIDE, MCH_MILL_WS.LEFT)
-- elseif Machining.sType == 'Diskmilling' then
-- EgtSetMachiningParam( MCH_MP.WORKSIDE, MCH_MILL_WS.RIGHT)
-- end
-- EgtSetMachiningParam( MCH_MP.INVERT, true)
-- else
-- if Machining.sType == 'Sawing' then
-- EgtSetMachiningParam( MCH_MP.WORKSIDE, MCH_SAW_WS.RIGHT)
-- EgtSetMachiningParam( MCH_MP.HEADSIDE, MCH_SAW_HS.RIGHT)
-- elseif Machining.sType == 'Milling' then
-- EgtSetMachiningParam( MCH_MP.WORKSIDE, MCH_MILL_WS.RIGHT)
-- elseif Machining.sType == 'Diskmilling' then
-- EgtSetMachiningParam( MCH_MP.WORKSIDE, MCH_MILL_WS.LEFT)
-- end
-- EgtSetMachiningParam( MCH_MP.INVERT, false)
-- end
-- local bOk = EgtApplyMachining( true, false)
-- EgtRelocateGlob( nSquaringOperationId, nFirstOperationId, GDB_IN.BEFORE)
-- if not bOk then
-- local _, sMsg = EgtGetLastMachMgrError()
-- nNotOkCount = nNotOkCount + 1
-- sMsgTotal = sMsgTotal ..'\n' .. ( sMsg or '')
-- end
-- end
end
-------------------------------------------------------------------------------------------------------------
return Squaring