Window :
- modificato ordinamento lavorazioni profili longitudinali - aggiunte lavorazioni di svuotatura.
This commit is contained in:
@@ -37,6 +37,12 @@ end
|
||||
-------------------------------------------------------------------------------------------------------------
|
||||
-- Recupero dati svuotatura
|
||||
function FeatureData.GetPocketingData( Proc)
|
||||
local vtDir = EgtCurveExtrusion( Proc.id)
|
||||
local Frame = EgtGetGlobFrame( Proc.id)
|
||||
|
||||
Proc.dLength = abs( EgtCurveThickness( Proc.id)) or 0
|
||||
Proc.vtDir = vtDir
|
||||
Proc.sReferenceSide = EgtGetInfo( Proc.id, 'REFERENCE_SIDE', 's') or nil
|
||||
|
||||
return Proc
|
||||
end
|
||||
|
||||
@@ -303,9 +303,9 @@ local function SortByChangeToolOpt( MACHININGS)
|
||||
for i = 1, #vProcToSortToolOpt do
|
||||
for j = i + 1, #vProcToSortToolOpt do
|
||||
-- se sono su stessa fase
|
||||
if vProcToSortToolOpt[i].AuxiliaryData.nPhase == vProcToSortToolOpt[j].AuxiliaryData.nPhase then
|
||||
if vProcToSortToolOpt[i].AuxiliaryData.nPhase == vProcToSortToolOpt[j].AuxiliaryData.nPhase and not vProcToSortToolOpt[i].AuxiliaryData.bHeadProfile and not vProcToSortToolOpt[j].AuxiliaryData.bHeadProfile then
|
||||
-- se stesso utensile
|
||||
if vProcToSortToolOpt[i].Machining.nToolIndex == vProcToSortToolOpt[j].Machining.nToolIndex then
|
||||
if vProcToSortToolOpt[i].Machining.nToolIndex == vProcToSortToolOpt[j].Machining.nToolIndex and vProcToSortToolOpt[i].Machining.dLongitudinalOffset == vProcToSortToolOpt[j].Machining.dLongitudinalOffset then
|
||||
if i + 1 == j then
|
||||
-- il confronto riparte dall'ultimo spostato
|
||||
i = j
|
||||
@@ -578,6 +578,10 @@ function WinExec.ProcessFeatures( PARTS)
|
||||
for i = 1, #PARTS do
|
||||
maxOffsetX[i] = 80 - PARTS[i].RawOffset.dOverMatRight
|
||||
end
|
||||
|
||||
-- variabile per offset aggiuntivo in X a causa di una lavorazione sul Top vicino alla testa
|
||||
local addOffsetX = 0
|
||||
|
||||
-- scrivo lavorazioni seconda fase
|
||||
EgtSetCurrPhase( 2)
|
||||
UpdateRawPosition( PARTS)
|
||||
@@ -585,6 +589,9 @@ function WinExec.ProcessFeatures( PARTS)
|
||||
if MACHININGS[i].AuxiliaryData.nPhase == 2 then
|
||||
-- aggiunge effettivamente la lavorazione
|
||||
local bIsApplyOk, sErr, b3MachEncumbrance = MachiningLib.AddOperation( MACHININGS[i])
|
||||
if MACHININGS[i].Proc.AffectedFaces.bTop and b3MachEncumbrance:getMin():getX() > (PARTS[MACHININGS[i].Proc.nIndexPart].b3Part:getMax():getX() - maxOffsetX[MACHININGS[i].Proc.nIndexPart] - 10) then
|
||||
addOffsetX = b3MachEncumbrance:getMin():getX() - (PARTS[MACHININGS[i].Proc.nIndexPart].b3Part:getMax():getX() - maxOffsetX[MACHININGS[i].Proc.nIndexPart] - 5)
|
||||
end
|
||||
-- se feature di testa, sposto testa in base a ingombro lavorazione
|
||||
if MACHININGS[i].Proc.bHeadProfile and b3MachEncumbrance then
|
||||
-- profilo di testa obliquo
|
||||
@@ -600,7 +607,7 @@ function WinExec.ProcessFeatures( PARTS)
|
||||
-- sposto pezzo per permettere pinzaggio migliore e non aver colisione in testa
|
||||
for i = 1, #PARTS do
|
||||
-- TODO controllare calcolo ingombro
|
||||
local vtMove = Vector3d( PARTS[i].DispOffsets.Phase2.dOffsetX, 0, 0)
|
||||
local vtMove = Vector3d( PARTS[i].DispOffsets.Phase2.dOffsetX + addOffsetX, 0, 0)
|
||||
if vtMove ~= V_NULL() then
|
||||
CheckAndMoveRawPart( PARTS[i].idRaw, vtMove)
|
||||
end
|
||||
|
||||
@@ -9,13 +9,55 @@ require( 'EgtBase')
|
||||
|
||||
-- Carico i dati globali
|
||||
local WinData = require( 'WinData')
|
||||
local MachiningLib = require( 'MachiningLib')
|
||||
|
||||
EgtOutLog( ' Pocketing started', 1)
|
||||
EgtMdbSave()
|
||||
|
||||
-------------------------------------------------------------------------------------------------------------
|
||||
-- funzione che decide se eseguire le forature dopo le profilature. Solo forature di testa inclinate. Altrimenti sempre prima.
|
||||
local function IsPocketToMachineAfterProfile( Proc)
|
||||
local bExecAfterProfile = false
|
||||
if Proc.AffectedFaces.bTop then
|
||||
bExecAfterProfile = true
|
||||
end
|
||||
return bExecAfterProfile
|
||||
end
|
||||
|
||||
-------------------------------------------------------------------------------------------------------------
|
||||
function Pocketing.Make( Proc, Part)
|
||||
return true
|
||||
local Machining = { LeadIn = {}, LeadOut = {}, Steps = {}}
|
||||
local AuxiliaryData = {}
|
||||
local ToolSearchParameters = {}
|
||||
|
||||
-- cerco utensile svuotatura
|
||||
ToolSearchParameters.sType = 'MILL_STD'
|
||||
ToolSearchParameters.dElevation = Proc.dLength
|
||||
ToolSearchParameters.vDirection = Proc.vtDir
|
||||
ToolSearchParameters.bIsVerticalHead = AreSameVectorApprox( Proc.vtDir, Vector3d(0,0,1))
|
||||
ToolSearchParameters.bIsHorizontalHead = not ToolSearchParameters.bIsVerticalHead
|
||||
local ToolInfo = MachiningLib.FindMill( Proc, ToolSearchParameters)
|
||||
-- se trovato utensile
|
||||
if ToolInfo.nToolIndex then
|
||||
Machining.nType = MCH_OY.POCKETING
|
||||
Machining.nSubType = MCH_POCK_SUB.SPIRALOUT
|
||||
Machining.LeadIn.nType = MCH_POCK_LI.HELIX
|
||||
Machining.Steps.dStep = TOOLS[ToolInfo.nToolIndex].dStep
|
||||
Machining.Steps.dSideStep = TOOLS[ToolInfo.nToolIndex].dSideStep
|
||||
Machining.nToolIndex = ToolInfo.nToolIndex
|
||||
Machining.LeadIn.dTangentDistance = TOOLS[ToolInfo.nToolIndex].dDiameter/2
|
||||
Machining.LeadIn.dElevation = TOOLS[ToolInfo.nToolIndex].dDiameter/2
|
||||
Machining.sDepth = Proc.dLength
|
||||
Machining.Geometry = Proc.id
|
||||
AuxiliaryData.nIndexMachining = 1
|
||||
AuxiliaryData.nPhase = MachiningLib.GetPhaseMach( Proc)
|
||||
AuxiliaryData.bExecAfterProfile = IsPocketToMachineAfterProfile( Proc)
|
||||
MachiningLib.AddNewMachining( Proc, Machining, AuxiliaryData)
|
||||
return true
|
||||
end
|
||||
|
||||
-- non ha trovato un utensile valido
|
||||
return false
|
||||
end
|
||||
|
||||
-------------------------------------------------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user