Files
egwwindowlua/CAMAuto/Strategies/Profiling.lua
T
Annamaria Sassi 740fbf6658 Window :
- correzione parametri attacco e uscita profilatura
2026-08-06 12:20:08 +02:00

132 lines
6.1 KiB
Lua

-- Profiling.lua by Egalware s.r.l. 2024/06/13
-- Libreria esecuzione lavorazioni per Serramenti -> Lavorazione di profilatura
-- Tabella per definizione modulo
local Profiling = {}
-- Include
require( 'EgtBase')
-- Carico i dati globali
local WinData = require( 'WinData')
local WinLib = require( 'WinLib')
local MachiningLib = require( 'MachiningLib')
EgtOutLog( ' Profiling started', 1)
EgtMdbSave()
-------------------------------------------------------------------------------------------------------------
function Profiling.Make( Proc, Part)
-- se so che utensili utilizzare, associazione diretta
if Proc.nToolsToUse > 0 then
for i = 1, Proc.nToolsToUse do
-- definizione liste
local Machining = { LeadIn = {}, LeadOut = {}, Steps = {}}
local AuxiliaryData = {}
local ToolSearchParameters = {}
-- ricerca utensile
ToolSearchParameters.sName = Proc.Tools[i].sName
ToolSearchParameters.dElevation = 0
local ToolInfo = MachiningLib.FindMill( Proc, ToolSearchParameters)
-- se trovato utensile
if ToolInfo.nToolIndex then
Machining.nType = MCH_MY.MILLING
Machining.nWorkside = MCH_MILL_WS.RIGHT
Machining.nToolIndex = ToolInfo.nToolIndex
Machining.sDepth = 0
Machining.dRadialOffset = Proc.Tools[i].dRadialOffset
Machining.dLongitudinalOffset = Proc.Tools[i].dLongitudinalOffset
-- se il pezzo ha cambio-profilo
if Proc.sProfileInfo == 'Mixed' then
Machining.LeadIn.nType = MCH_MILL_LI.LINEAR
Machining.LeadOut.nType = MCH_MILL_LO.LINEAR
Machining.LeadIn.dTangentDistance = 0
Machining.LeadIn.dPerpDistance = TOOLS[ToolInfo.nToolIndex].dTotDiameter / 2 + 30
Machining.LeadOut.dTangentDistance = 0
Machining.LeadOut.dPerpDistance = TOOLS[ToolInfo.nToolIndex].dTotDiameter / 2 + 30
-- se profilo di testa
elseif Proc.bHeadProfile then
Machining.nWorkside = MCH_MILL_WS.LEFT
Machining.bInvert = true
Machining.LeadIn.nType = MCH_MILL_LI.TANGENT
Machining.LeadOut.nType = MCH_MILL_LO.TANGENT
Machining.LeadIn.dTangentDistance = TOOLS[ToolInfo.nToolIndex].dTotDiameter / 2 + 1
Machining.LeadIn.dPerpDistance = - ( TOOLS[ToolInfo.nToolIndex].dTotDiameter / 2 + 1)
Machining.LeadOut.dTangentDistance = TOOLS[ToolInfo.nToolIndex].dTotDiameter / 2 + 30
Machining.LeadOut.dPerpDistance = 0
-- se profilo laterale
else
Machining.LeadIn.nType = MCH_MILL_LI.TANGENT
Machining.LeadOut.nType = MCH_MILL_LO.TANGENT
Machining.LeadIn.dTangentDistance = TOOLS[ToolInfo.nToolIndex].dTotDiameter / 2 + 30
Machining.LeadIn.dPerpDistance = 40
Machining.LeadOut.dTangentDistance = TOOLS[ToolInfo.nToolIndex].dTotDiameter / 2 + 30
Machining.LeadOut.dPerpDistance = 40
-- se ho due tool devo spostare maggiormente l'utensile per non farlo alzare in z
if Proc.nToolsToUse > 1 and i > 1 then
Machining.LeadIn.dPerpDistance = 60
end
if Proc.nToolsToUse > 1 then
Machining.LeadOut.dPerpDistance = 60
end
end
Machining.Geometry = Proc.id
AuxiliaryData.bIsProfiling = true
AuxiliaryData.bHeadProfile = Proc.bHeadProfile
if Proc.bHeadProfile then
AuxiliaryData.nGeoId = EgtGetFirstNameInGroup( Part.id, 'Geo')
AuxiliaryData.bProfilingLeft = Proc.AffectedFaces.bLeft
end
AuxiliaryData.nIndexMachining = i
AuxiliaryData.nPhase = MachiningLib.GetPhaseMach( Proc)
MachiningLib.AddNewMachining( Proc, Machining, AuxiliaryData)
else
return false, 'Associated tool not found'
end
end
-- altrimenti cerco tra quelli disponibili
else
-- definizione liste
local Machining = { LeadIn = {}, LeadOut = {}, Steps = {}}
local AuxiliaryData = {}
local ToolSearchParameters = {}
-- se profilatura generica, cerco fresa che possa lavorare la geometria considerando spessore e raggio
if Proc.sProfileInfo == 'Generic' then
ToolSearchParameters.dElevation = abs( EgtCurveThickness( Proc.id))
ToolSearchParameters.dMaxToolDiameter = WinLib.GetPathMinRadius( Proc.id) * 2
ToolSearchParameters.sType = 'MILL_STD'
local ToolInfo = MachiningLib.FindMill( Proc, ToolSearchParameters)
-- se trovato utensile
if ToolInfo.nToolIndex then
Machining.nType = MCH_MY.MILLING
Machining.nWorkside = MCH_MILL_WS.LEFT
Machining.nToolIndex = ToolInfo.nToolIndex
Machining.sDepth = ToolSearchParameters.dElevation
Machining.dRadialOffset = EgtGetInfo( Proc.id, 'OFFR', 'd') or 0
Machining.dLongitudinalOffset = EgtGetInfo( Proc.id, 'OFFL', 'd') or 0
Machining.LeadIn.nType = MCH_MILL_LI.TANGENT
Machining.LeadOut.nType = MCH_MILL_LO.TANGENT
Machining.LeadIn.dTangentDistance = (TOOLS[ToolInfo.nToolIndex].dTotDiameter / 2)
Machining.LeadIn.dPerpDistance = (TOOLS[ToolInfo.nToolIndex].dTotDiameter / 2)
Machining.LeadOut.dTangentDistance = (TOOLS[ToolInfo.nToolIndex].dTotDiameter / 2)
Machining.LeadOut.dPerpDistance = (TOOLS[ToolInfo.nToolIndex].dTotDiameter / 2)
Machining.Geometry = Proc.id
AuxiliaryData.bIsProfiling = true
AuxiliaryData.nIndexMachining = 1
AuxiliaryData.nPhase = MachiningLib.GetPhaseMach( Proc)
MachiningLib.AddNewMachining( Proc, Machining, AuxiliaryData)
else
return false, 'Tool for generic profiling not found'
end
else
return false, 'Tool for profiling not found'
end
end
return true
end
-------------------------------------------------------------------------------------------------------------
return Profiling