- in BLADEKEEPWASTE aggiunta pulitura con fresa del raggio lama

This commit is contained in:
luca.mazzoleni
2025-03-25 13:05:21 +01:00
parent 8ed49c5cd1
commit 1dac802cc0
3 changed files with 77 additions and 40 deletions
@@ -19,7 +19,8 @@ local STR0005Data = {
{ sName = 'dMaxWasteVolume', sNameNge = 'MAX_WASTE_VOLUME', sValue = '6000000', sDescriptionShort = '', sDescriptionLong = '', sType = 'd', sMessageId = '', sMinUserLevel = '1'},
{ sName = 'dStripWidth', sNameNge = 'STRIP_WIDTH', sValue = '5', sDescriptionShort = '', sDescriptionLong = '', sType = 'd', sMessageId = '', sMinUserLevel = '1'},
{ sName = 'dMinZAngleTopBlade', sNameNge = 'MIN_Z_ANGLE_TOP_BLADE', sValue = '', sDescriptionShort = '', sDescriptionLong = '', sType = 'd', sMessageId = '', sMinUserLevel = '1'},
{ sName = 'dMaxYAngleTopBlade', sNameNge = 'MAX_Y_ANGLE_TOP_BLADE', sValue = '1', sDescriptionShort = '', sDescriptionLong = '', sType = 'd', sMessageId = '', sMinUserLevel = '1'}
{ sName = 'dMaxYAngleTopBlade', sNameNge = 'MAX_Y_ANGLE_TOP_BLADE', sValue = '1', sDescriptionShort = '', sDescriptionLong = '', sType = 'd', sMessageId = '', sMinUserLevel = '1'},
{ sName = 'bFinishWithMill', sNameNge = 'ALLOW_FINISH_MILL', sValue = '1', sDescriptionShort = 'Clean blade radius with mill', sDescriptionLong = 'Clean blade radius with mill', sType = 'b', sMessageId = '', sMinUserLevel = '1'}
}
}
+46 -21
View File
@@ -13,6 +13,7 @@ local FaceData = require( 'FaceData')
local MachiningLib = require( 'MachiningLib')
-- strategie di base
local FaceByBlade = require('FACEBYBLADE')
local FaceByMill = require('FACEBYMILL')
-- tabella per definizione modulo
@@ -84,8 +85,8 @@ function BLADEKEEPWASTE.Make( Proc, Part, OptionalParameters)
-- il FindBlade dovrà restituire di utilizzare sempre la lama sopra se l'angolo lo permette, ma avendo un'altezza massima (da macchina) oltre cui il DownUp non sarà fattibile (evita collisioni tra asse e pezzo)
local Result = {}
local Blade = {}
Blade.Result = {}
local Machining = {}
Machining.Result = {}
local Cutting1 = {}
local Cutting2 = {}
@@ -108,16 +109,29 @@ function BLADEKEEPWASTE.Make( Proc, Part, OptionalParameters)
end
end
-- parametri opzionali e default
if not OptionalParameters then
OptionalParameters = {}
end
local nToolIndex = OptionalParameters.nToolIndex
local dExtendAfterTail = OptionalParameters.dExtendAfterTail or 10000
local bFinishWithMill
if OptionalParameters.bFinishWithMill == nil then
bFinishWithMill = true
else
bFinishWithMill = OptionalParameters.bFinishWithMill
end
-- si trovano le facce da lavorare
local FaceToMachine = {}
local BottomFace = {}
local LongFaces = {}
if Proc.nFct == 1 then
FaceToMachine = Proc.Faces[1]
BottomFace = Proc.Faces[1]
else
if not Proc.MainFaces then
Proc.MainFaces = FaceData.GetMainFaces( Proc, Part)
end
FaceToMachine = Proc.MainFaces.BottomFaces[1]
BottomFace = Proc.MainFaces.BottomFaces[1]
LongFaces = Proc.MainFaces.LongFaces
end
@@ -125,8 +139,8 @@ function BLADEKEEPWASTE.Make( Proc, Part, OptionalParameters)
-- si trova il lato da lavorare
local EdgeToMachine = {}
local EdgesSorted = {}
for i = 1, #FaceToMachine.Edges do
table.insert( EdgesSorted, FaceToMachine.Edges[i])
for i = 1, #BottomFace.Edges do
table.insert( EdgesSorted, BottomFace.Edges[i])
end
table.sort( EdgesSorted, CompareEdges)
EdgeToMachine = EdgesSorted[1]
@@ -141,27 +155,38 @@ function BLADEKEEPWASTE.Make( Proc, Part, OptionalParameters)
end
-- calcolo lavorazioni
-- primo lato
local OptionalParametersFaceByBlade = { dDepthToMachine = dDepthToMachine, bIsSplitFeature = bIsSplitFeature, dExtendAfterTail = OptionalParameters.dExtendAfterTail}
Cutting1 = FaceByBlade.Make( Proc, Part, FaceToMachine, EdgeToMachine, OptionalParametersFaceByBlade)
table.insert( Blade.Result, Cutting1)
-- secondo lato
OptionalParametersFaceByBlade.bOppositeToolDirection = true
Cutting2 = FaceByBlade.Make( Proc, Part, FaceToMachine, EdgeToMachine, OptionalParametersFaceByBlade)
table.insert( Blade.Result, Cutting2)
-- eventuali facce di chiusura
-- taglio eventuali facce di chiusura
for i = 1, #LongFaces do
local CuttingLongFace = {}
OptionalParametersFaceByBlade = { bIsSplitFeature = bIsSplitFeature, dExtendAfterTail = OptionalParameters.dExtendAfterTail}
local OptionalParametersFaceByBlade = { bIsSplitFeature = bIsSplitFeature, dExtendAfterTail = dExtendAfterTail, nToolIndex = nToolIndex}
CuttingLongFace = FaceByBlade.Make( Proc, Part, Proc.MainFaces.LongFaces[i], Proc.MainFaces.LongFaces[i].MainEdges.BottomEdge, OptionalParametersFaceByBlade)
table.insert( Blade.Result, CuttingLongFace)
table.insert( Machining.Result, CuttingLongFace)
end
-- faccia di fondo
-- primo lato
local OptionalParametersFaceByBlade = { dDepthToMachine = dDepthToMachine, bIsSplitFeature = bIsSplitFeature, dExtendAfterTail = dExtendAfterTail, nToolIndex = nToolIndex}
Cutting1 = FaceByBlade.Make( Proc, Part, BottomFace, EdgeToMachine, OptionalParametersFaceByBlade)
table.insert( Machining.Result, Cutting1)
-- secondo lato
OptionalParametersFaceByBlade.bOppositeToolDirection = true
Cutting2 = FaceByBlade.Make( Proc, Part, BottomFace, EdgeToMachine, OptionalParametersFaceByBlade)
table.insert( Machining.Result, Cutting2)
-- eventuale pulitura raggio lama
if bFinishWithMill then
for i = 1, #LongFaces do
local OptionalParametersFaceByMill = { bIsSplitFeature = bIsSplitFeature, dExtendAfterTail = dExtendAfterTail,
dDepthToMachine = max( Cutting1.dBladeMarkLength, Cutting2.dBladeMarkLength)
}
local MillingClosedSide = FaceByMill.Make( Proc, Part, BottomFace, BottomFace.MainEdges.LongEdges[i], OptionalParametersFaceByMill)
table.insert( Machining.Result, MillingClosedSide)
end
end
-- lavorazioni raggruppate in unica lista
local Machinings = {}
for i = 1, #Blade.Result do
if Blade.Result[i].bIsApplicable then
table.insert( Machinings, Blade.Result[i])
for i = 1, #Machining.Result do
if Machining.Result[i].bIsApplicable then
table.insert( Machinings, Machining.Result[i])
end
end
+29 -18
View File
@@ -207,7 +207,11 @@ function FACEBYMILL.Make( Proc, Part, FaceToMachine, EdgeToMachine, OptionalPara
Milling.nToolIndex = nToolIndex
else
local ToolSearchParameters = {}
ToolSearchParameters.sMillShape = 'TSHAPEMILL'
if OptionalParameters.dPocketHeight then
ToolSearchParameters.sMillShape = 'TSHAPEMILL'
else
ToolSearchParameters.sMillShape = 'STANDARD'
end
ToolSearchParameters.dElevation = dDepthToMachine
-- TODO qui ToolSearchParameters.vtToolDirection andrà sosituito con vtN!!
if Milling.bToolInvert then
@@ -238,7 +242,7 @@ function FACEBYMILL.Make( Proc, Part, FaceToMachine, EdgeToMachine, OptionalPara
-- verifica dimensioni tasca compatibili
-- se tasca meno spessa della fresa la lavorazione non è applicabile
if OptionalParameters.dPocketHeight and ( not TOOLS[Milling.nToolIndex].bIsTMill or ( TOOLS[Milling.nToolIndex].dMaxMaterial > dPocketHeight + 10 * GEO.EPS_SMALL)) then
if OptionalParameters.dPocketHeight and TOOLS[Milling.nToolIndex].dMaxMaterial > dPocketHeight + 10 * GEO.EPS_SMALL then
Milling.sMessage = 'Pocket too narrow for blade thickness'
Milling.bIsApplicable = false
EgtOutLog( Milling.sMessage)
@@ -275,23 +279,30 @@ function FACEBYMILL.Make( Proc, Part, FaceToMachine, EdgeToMachine, OptionalPara
Milling.bInvert = not Milling.bInvert
end
-- profondità da lavorare e offset radiale
if TOOLS[Milling.nToolIndex].dMaxDepth > dDepthToMachine - 10 * GEO.EPS_SMALL then
-- TODO la depth dovrebbe essere quella del machining
if OptionalParameters.dPocketHeight then
if TOOLS[Milling.nToolIndex].dSideDepth > dDepthToMachine - 10 * GEO.EPS_SMALL then
-- TODO la depth dovrebbe essere quella del machining
Milling.dDepthToMachine = dDepthToMachine
Milling.dResidualDepth = 0
if bOppositeToolDirection then
Milling.dRadialOffset = -dDepthToMachine
else
Milling.dRadialOffset = EdgeToMachine.dElevation - dDepthToMachine
end
else
Milling.dDepthToMachine = TOOLS[Milling.nToolIndex].dSideDepth - 1
Milling.dResidualDepth = dDepthToMachine - Milling.dDepthToMachine
if bOppositeToolDirection then
Milling.dRadialOffset = -Milling.dDepthToMachine
else
Milling.dRadialOffset = EdgeToMachine.dElevation - Milling.dDepthToMachine
end
end
-- TODO qui bisogna controllare la profondità di lavoro
else
Milling.dDepthToMachine = dDepthToMachine
Milling.dResidualDepth = 0
if bOppositeToolDirection then
Milling.dRadialOffset = -dDepthToMachine
else
Milling.dRadialOffset = EdgeToMachine.dElevation - dDepthToMachine
end
else
Milling.dDepthToMachine = TOOLS[Milling.nToolIndex].dMaxDepth - 1
Milling.dResidualDepth = dDepthToMachine - Milling.dDepthToMachine
if bOppositeToolDirection then
Milling.dRadialOffset = -Milling.dDepthToMachine
else
Milling.dRadialOffset = EdgeToMachine.dElevation - Milling.dDepthToMachine
end
Milling.dRadialOffset = 0
end
-- completamento
Milling.dCompletionPercentage = 100 - Milling.dResidualDepth / Milling.dDepthToMachine
@@ -323,7 +334,7 @@ function FACEBYMILL.Make( Proc, Part, FaceToMachine, EdgeToMachine, OptionalPara
-- SCC
Milling.nSCC = GetSCC( Milling.vtToolDirection)
-- asse bloccato
Milling.sBlockedAxis = ''BeamLib.GetBlockedAxis( Milling.nToolIndex, 'perpendicular', Part.b3Raw, FaceToMachine.vtN, EgtIf( FaceToMachine.vtN:getX() > 0, X_AX(), -X_AX()))''
Milling.sBlockedAxis = ''
-- eventuale step orizzontale
Milling.CloneStepsHorizontal = {}
if not bDisableHorizontalSteps and TOOLS[Milling.nToolIndex].dSideStep then