fdd114a8cd
- in Squaring aggiunte funzioni per ricerca e controllo correttezza utensili in base al caso specifico
244 lines
11 KiB
Lua
244 lines
11 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
|
|
|
|
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
|
|
-- frese standard
|
|
elseif Tool.nType == MCH_TY.MILL_STD then
|
|
SquaringTools.Mill[Tool.sHead] = Tool
|
|
-- truciolatori
|
|
elseif Tool.nType == MCH_TY.MILL_NOTIP then
|
|
SquaringTools.Diskmill[Tool.sHead] = Tool
|
|
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( RawPart, Machining)
|
|
-- 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 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)
|
|
local nFrontLineId = EgtLine( RawPart.nId, pt1, pt2, GDB_RT.GLOB)
|
|
local nRightLineId = EgtLine( RawPart.nId, pt2, pt3, GDB_RT.GLOB)
|
|
local nBackLinedId = EgtLine( RawPart.nId, pt3, pt4, GDB_RT.GLOB)
|
|
local nLeftLineId = EgtLine( RawPart.nId, pt4, pt1, GDB_RT.GLOB)
|
|
if Machining.sType == 'Diskmilling' or Machining.sType == 'Milling' then
|
|
EgtModifyCurveExtrusion( nFrontLineId, -Y_AX(), GDB_RT.GLOB)
|
|
EgtModifyCurveExtrusion( nRightLineId, X_AX(), GDB_RT.GLOB)
|
|
EgtModifyCurveExtrusion( nBackLinedId, Y_AX(), GDB_RT.GLOB)
|
|
EgtModifyCurveExtrusion( nLeftLineId, -X_AX(), GDB_RT.GLOB)
|
|
end
|
|
EgtSetName( nFrontLineId, 'SquaringGeometry' )
|
|
EgtSetName( nRightLineId, 'SquaringGeometry' )
|
|
EgtSetName( nBackLinedId, 'SquaringGeometry' )
|
|
EgtSetName( nLeftLineId, 'SquaringGeometry' )
|
|
|
|
for i = 1, 4 do
|
|
SquaringGeometries[i] = {}
|
|
end
|
|
-- l'ordine di percorrenza delle linee dipende dal verso di percorrenza e, se attivato, dal riferimento utilizzato
|
|
if Machining.bIsPathCW then
|
|
if bSquaringStartsOnReference and ( sOrigCorner == 'BL' or sOrigCorner == 'BM') then
|
|
SquaringGeometries[1].nId = nFrontLineId
|
|
SquaringGeometries[2].nId = nLeftLineId
|
|
SquaringGeometries[3].nId = nBackLinedId
|
|
SquaringGeometries[4].nId = nRightLineId
|
|
elseif bSquaringStartsOnReference and ( sOrigCorner == 'TR' or sOrigCorner == 'TN') then
|
|
SquaringGeometries[1].nId = nBackLinedId
|
|
SquaringGeometries[2].nId = nRightLineId
|
|
SquaringGeometries[3].nId = nFrontLineId
|
|
SquaringGeometries[4].nId = nLeftLineId
|
|
elseif bSquaringStartsOnReference and ( sOrigCorner == 'BR' or sOrigCorner == 'BN') then
|
|
SquaringGeometries[1].nId = nRightLineId
|
|
SquaringGeometries[2].nId = nFrontLineId
|
|
SquaringGeometries[3].nId = nLeftLineId
|
|
SquaringGeometries[4].nId = nBackLinedId
|
|
else
|
|
SquaringGeometries[1].nId = nLeftLineId
|
|
SquaringGeometries[2].nId = nBackLinedId
|
|
SquaringGeometries[3].nId = nRightLineId
|
|
SquaringGeometries[4].nId = nFrontLineId
|
|
end
|
|
else
|
|
if bSquaringStartsOnReference and ( sOrigCorner == 'TL' or sOrigCorner == 'TM') then
|
|
SquaringGeometries[1].nId = nBackLinedId
|
|
SquaringGeometries[2].nId = nLeftLineId
|
|
SquaringGeometries[3].nId = nFrontLineId
|
|
SquaringGeometries[4].nId = nRightLineId
|
|
elseif bSquaringStartsOnReference and ( sOrigCorner == 'TR' or sOrigCorner == 'TN') then
|
|
SquaringGeometries[1].nId = nRightLineId
|
|
SquaringGeometries[2].nId = nBackLinedId
|
|
SquaringGeometries[3].nId = nLeftLineId
|
|
SquaringGeometries[4].nId = nFrontLineId
|
|
elseif bSquaringStartsOnReference and ( sOrigCorner == 'BR' or sOrigCorner == 'BN') then
|
|
SquaringGeometries[1].nId = nFrontLineId
|
|
SquaringGeometries[2].nId = nRightLineId
|
|
SquaringGeometries[3].nId = nBackLinedId
|
|
SquaringGeometries[4].nId = nLeftLineId
|
|
else
|
|
SquaringGeometries[1].nId = nLeftLineId
|
|
SquaringGeometries[2].nId = nFrontLineId
|
|
SquaringGeometries[3].nId = nRightLineId
|
|
SquaringGeometries[4].nId = nBackLinedId
|
|
end
|
|
end
|
|
|
|
return SquaringGeometries
|
|
end
|
|
|
|
-------------------------------------------------------------------------------------------------------------
|
|
function Squaring.AddMachinings( Machining, SquaringGeometries, nFirstOperationId)
|
|
local nNotOkCount = 0
|
|
local 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
|
|
|
|
return ( nNotOkCount < 1), sMsgTotal
|
|
end
|
|
|
|
-------------------------------------------------------------------------------------------------------------
|
|
return Squaring |