Modifica nomi variabili secondo nuovo standard
This commit is contained in:
+103
-1
@@ -8,11 +8,113 @@ local MachiningLib = {}
|
||||
-- Include
|
||||
require( 'EgtBase')
|
||||
|
||||
-- Carico i dati globali
|
||||
local BeamData = require( 'BeamData')
|
||||
|
||||
EgtOutLog( ' MachiningLib started', 1)
|
||||
|
||||
---------------------------------------------------------------------
|
||||
---
|
||||
---@param Proc table la feature
|
||||
---@param vtTool Vector3d il vettore direzione utensile
|
||||
---@return number dAngle angolo tra la faccia d'ingresso e la direzione utensile
|
||||
local function GetToolEntryAngle( Proc, vtTool)
|
||||
local dSinAngle = -10 * GEO.EPS_SMALL
|
||||
local vtNorm
|
||||
if Proc.AffectedFaces.bTop then
|
||||
vtNorm = Z_AX()
|
||||
dSinAngle = max( dSinAngle, vtTool * vtNorm)
|
||||
end
|
||||
if Proc.AffectedFaces.bBottom then
|
||||
vtNorm = -Z_AX()
|
||||
dSinAngle = max( dSinAngle, vtTool * vtNorm)
|
||||
end
|
||||
if Proc.AffectedFaces.bFront then
|
||||
vtNorm = -Y_AX()
|
||||
dSinAngle = max( dSinAngle, vtTool * vtNorm)
|
||||
end
|
||||
if Proc.AffectedFaces.bBack then
|
||||
vtNorm = Y_AX()
|
||||
dSinAngle = max( dSinAngle, vtTool * vtNorm)
|
||||
end
|
||||
if Proc.AffectedFaces.bLeft then
|
||||
vtNorm = -X_AX()
|
||||
dSinAngle = max( dSinAngle, vtTool * vtNorm)
|
||||
end
|
||||
if Proc.AffectedFaces.bRight then
|
||||
vtNorm = X_AX()
|
||||
dSinAngle = max( dSinAngle, vtTool * vtNorm)
|
||||
end
|
||||
|
||||
local dCosAngle = sqrt( 1 - sqr( dSinAngle))
|
||||
local dAngle = acos( dCosAngle)
|
||||
|
||||
return dAngle
|
||||
|
||||
end
|
||||
|
||||
-------------------------------------------------------------------------------------------------------------
|
||||
-- funzione per cercare utensile tipo FRESA con certe caratteristiche
|
||||
function MachiningLib.FindMill()
|
||||
function MachiningLib.FindMill( Proc, sMillType, sMillShape, dMaxToolDiameter, dElevation, vtToolDir)
|
||||
local ToolInfo = {}
|
||||
|
||||
for nCurrIndex=1, #TOOLS do
|
||||
-- prima verifico che utensile sia compatibile
|
||||
local bCompatibleTool = true
|
||||
if TOOLS[nCurrIndex].sType ~= sMillType then
|
||||
bCompatibleTool = false
|
||||
elseif TOOLS[nCurrIndex].dDiameter > dMaxToolDiameter then
|
||||
bCompatibleTool = false
|
||||
elseif sMillShape == 'STANDARD' and TOOLS[nCurrIndex].dSideAngle ~= 0 then
|
||||
bCompatibleTool = false
|
||||
elseif sMillShape == 'DOVETAIL' and not TOOLS[nCurrIndex].bIsDoveTail then
|
||||
bCompatibleTool = false
|
||||
elseif sMillShape == 'TSHAPEMILL' and not TOOLS[nCurrIndex].bIsTMill then
|
||||
bCompatibleTool = false
|
||||
end
|
||||
|
||||
-- scelgo il migliore
|
||||
if bCompatibleTool then
|
||||
-- calcolo riduzione del massimo materiale utilizzabile
|
||||
local dToolEntryAngle = GetToolEntryAngle( Proc, vtToolDir)
|
||||
-- se ToolHolder più grande dell'utensile, il primo oggetto in collisione è il ToolHolder. Altrimenti il motore.
|
||||
-- TODO Per il momento il motore ha un valore fisso: diametro di 180. Vedere se scrivere il diametro corretto in BeamData
|
||||
local dDimObjToCheck = EgtIf( TOOLS[nCurrIndex].ToolHolder.dDiameter > TOOLS[nCurrIndex].dDiameter, TOOLS[nCurrIndex].ToolHolder.dDiameter, 180)
|
||||
local dCurrMaxMatReduction = BeamData.COLL_SIC or 5
|
||||
|
||||
-- calcolo riduzione per non toccare con ToolHolder / Motore
|
||||
if dToolEntryAngle > 0 and dToolEntryAngle < 90 then
|
||||
dCurrMaxMatReduction = dCurrMaxMatReduction / cos( 90 - dToolEntryAngle) + ( ( dDimObjToCheck - TOOLS[nCurrIndex].dDiameter) / 2) / tan( dToolEntryAngle)
|
||||
end
|
||||
-- dCurrMachReduction = negativo -> limitare, positivo -> mm extra disponibili
|
||||
local dCurrMachReduction = TOOLS[nCurrIndex].dMaxDepth - dElevation - dCurrMaxMatReduction
|
||||
|
||||
-- se non ancora trovato, oppure se completo e il migliore fino ad ora non è completo: corrente è il migliore
|
||||
if not ToolInfo.idTool or ( ToolInfo.dMaxMatReduction <= 0 and dCurrMachReduction > 0) then
|
||||
ToolInfo.idTool = nCurrIndex
|
||||
ToolInfo.dMaxMatReduction = dCurrMachReduction
|
||||
-- altrimenti scelgo il migliore
|
||||
else
|
||||
-- se entrambi completi
|
||||
if ToolInfo.dMaxMatReduction < 0 and dCurrMachReduction < 0 then
|
||||
-- scelgo utensile con rapporto lunghezza / diametro minore
|
||||
if ( TOOLS[nCurrIndex].dLength / TOOLS[nCurrIndex].dDiameter) < ( TOOLS[ToolInfo.idTool].dLength / TOOLS[ToolInfo.idTool].dDiameter) then
|
||||
ToolInfo.idTool = nCurrIndex
|
||||
ToolInfo.dMaxMatReduction = dCurrMachReduction
|
||||
end
|
||||
-- se entrambi incompleti
|
||||
elseif ToolInfo.dMaxMatReduction < 0 and dCurrMachReduction < 0 then
|
||||
--scelgo quello che lavora di più
|
||||
if dCurrMachReduction > ToolInfo.dMaxMatReduction then
|
||||
ToolInfo.idTool = nCurrIndex
|
||||
ToolInfo.dMaxMatReduction = dCurrMachReduction
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
return ToolInfo
|
||||
end
|
||||
|
||||
-------------------------------------------------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user