Files
andrea.villa 62aa67f46d Sistemazioni varie
Commentato momentaneamente ordinamento su cambio utensile
2025-03-19 18:33:26 +01:00

142 lines
5.7 KiB
Lua

-- WinLib.lua by Egalware s.r.l. 2024/06/14
-- Libreria globale per Serramenti
-- Tabella per definizione modulo
local WinLib = {}
-- Include
require( 'EgtBase')
local WinData = require( 'WinData')
EgtOutLog( ' WinLib started', 1)
-------------------------------------------------------------------------------------------------------------
-- restituisce le facce della parte interessate dalla feature Proc
function WinLib.GetAffectedFaces( Proc, Part)
local vtFacesAffected = { bTop = false, bBottom = false, bFront = false, bBack = false, bLeft = false, bRight = false}
if Proc.b3Box and not Proc.b3Box:isEmpty() then
-- caso speciale foro
if Proc.sType == 'Hole' and Proc.sReferenceSide then
if Proc.sReferenceSide == Part.SideNames.sLeft then
vtFacesAffected.bLeft = true
elseif Proc.sReferenceSide == Part.SideNames.sRight then
vtFacesAffected.bRight = true
elseif Proc.sReferenceSide == Part.SideNames.sFront then
vtFacesAffected.bFront = true
elseif Proc.sReferenceSide == Part.SideNames.sBack then
vtFacesAffected.bBack = true
end
-- caso speciale profili per pezzo con cambio-profilo
elseif Proc.sType == 'Profiling' and Proc.sProfileInfo == 'Mixed' then
if Proc.sReferenceSide == Part.SideNames.sLeft then
vtFacesAffected.bLeft = true
elseif Proc.sReferenceSide == Part.SideNames.sRight then
vtFacesAffected.bRight = true
elseif Proc.sReferenceSide == Part.SideNames.sFront then
vtFacesAffected.bFront = true
elseif Proc.sReferenceSide == Part.SideNames.sBack then
vtFacesAffected.bBack = true
end
-- caso speciale profili
elseif Proc.sType == 'Profiling' then
if not Part.SideNames then
Part.SideNames = {}
end
-- quando si settano i lati interessati, mi salvo anche il nome.
-- se c'è una rotazione di 180°, potrebbe essere che il lato LEFT del pezzo corrisponda al lato RIGHT della lavorazione. Stesso per IN/OUT
if Proc.b3Box:getMax():getX() < Part.b3Part:getCenter():getX() then
vtFacesAffected.bLeft = true
Part.SideNames.sLeft = Proc.sEntityName
elseif Proc.b3Box:getMin():getX() > Part.b3Part:getCenter():getX() then
vtFacesAffected.bRight = true
Part.SideNames.sRight = Proc.sEntityName
elseif Proc.b3Box:getMax():getY() < Part.b3Part:getCenter():getY() then
vtFacesAffected.bFront = true
Part.SideNames.sFront = Proc.sEntityName
elseif Proc.b3Box:getMin():getY() > Part.b3Part:getCenter():getY() then
vtFacesAffected.bBack = true
Part.SideNames.sBack = Proc.sEntityName
end
-- caso standard
else
if Proc.b3Box:getMax():getZ() > Part.b3Part:getMax():getZ() - 500 * GEO.EPS_SMALL then
vtFacesAffected.bTop = true
end
if Proc.b3Box:getMin():getZ() < Part.b3Part:getMin():getZ() + 500 * GEO.EPS_SMALL then
vtFacesAffected.bBottom = true
end
if Proc.b3Box:getMin():getY() < Part.b3Part:getMin():getY() + 500 * GEO.EPS_SMALL then
vtFacesAffected.bFront = true
end
if Proc.b3Box:getMax():getY() > Part.b3Part:getMax():getY() - 500 * GEO.EPS_SMALL then
vtFacesAffected.bBack = true
end
if Proc.b3Box:getMin():getX() < Part.b3Part:getMin():getX() + 500 * GEO.EPS_SMALL then
vtFacesAffected.bLeft = true
end
if Proc.b3Box:getMax():getX() > Part.b3Part:getMax():getX() - 500 * GEO.EPS_SMALL then
vtFacesAffected.bRight = true
end
end
end
return vtFacesAffected
end
-------------------------------------------------------------------------------------------------------------
function WinLib.SwapElements( Table, Pos1, Pos2)
Table[Pos1], Table[Pos2] = Table[Pos2], Table[Pos1]
return Table
end
-------------------------------------------------------------------------------------------------------------
function WinLib.ChangeElementPositionInTable( Table, nCurrentPosition, nTargetPosition)
-- se indici uguali esco subito
if nTargetPosition == nCurrentPosition then
return Table
end
local Item = Table[nCurrentPosition]
if nTargetPosition > nCurrentPosition then
nTargetPosition = nTargetPosition - 1
end
table.remove( Table, nCurrentPosition)
table.insert( Table, nTargetPosition, Item)
return Table
end
-------------------------------------------------------------------------------------------------------------
function WinLib.GetAddGroup( PartId)
-- recupero il nome del gruppo di lavoro corrente
local sMchGrp = EgtGetMachGroupName( EgtGetCurrMachGroup() or GDB_ID.NULL)
if not sMchGrp then
return nil, nil
end
-- cerco il gruppo aggiuntivo omonimo nel pezzo e se esiste lo restituisco
local AddGrpId = EgtGetFirstNameInGroup( PartId or GDB_ID.NULL, sMchGrp)
-- restituisco Id e Nome
return AddGrpId, sMchGrp
end
-------------------------------------------------------------------------------------------------------------
function WinLib.GetPathMinRadius( IdCurve)
local dSmallRadius = 9999
local InitIdEntity, LastIdEntity = EgtCurveDomain(IdCurve)
for i = InitIdEntity, LastIdEntity do
local dRadius = EgtCurveCompoRadius( IdCurve, i)
-- se è un arco ed è più piccolo del minimo, lo salvo
if dRadius and dRadius > 0 and dRadius < dSmallRadius then
dSmallRadius = dRadius
end
end
return dSmallRadius
end
-------------------------------------------------------------------------------------------------------------
return WinLib