Feature/AngledDrillings:

implemento foratura tipo AngleDrill per fori molto inclinati
This commit is contained in:
luca.mazzoleni
2022-07-27 17:54:59 +02:00
parent 8b560421f7
commit 358dee8808
2 changed files with 42 additions and 5 deletions
+11 -2
View File
@@ -1,6 +1,7 @@
-- MachiningLib.lua by Egaltech s.r.l. 2022/05/07
-- Libreria ricerca lavorazioni per Travi
-- 2022/05/07 ES Profonde modifiche per scelta ottimale lavorazioni in macchine con più teste.
-- 2022/07/27 Aggiunta la gestione del tipo di foratura "AngleDrill" per fori molto inclinati
-- Tabella per definizione modulo
local MachiningLib = {}
@@ -188,7 +189,7 @@ end
---------------------------------------------------------------------
function VerifyTool( MachiningType, sType, Params, bH2)
if MachiningType == MCH_MY.DRILLING then
if StartsWith( sType, 'Drill') then
if StartsWith( sType, 'Drill') or StartsWith( sType, 'AngleDrill') then
return VerifyDrill( Params.Diam, Params.Depth, bH2)
elseif StartsWith( sType, 'Pocket') then
return VerifyDrillPocket( Params.Diam, Params.Depth, bH2)
@@ -225,7 +226,7 @@ end
function ReturnParams( MachiningType, MachiningName, sType, ToolParams)
if MachiningType == MCH_MY.DRILLING then
local _, sOrigType = EndsWith( sType, '_H2')
return MachiningName, sType, EgtIf( sOrigType == 'Drill', ToolParams.TMaxMat, ToolParams.TMaxDepth), ToolParams.MaxToolLength, ToolParams.ToolDiam, ToolParams.DiamTh, ToolParams.FreeLen
return MachiningName, sType, EgtIf( sOrigType == 'Drill' or sOrigType == 'AngleDrill' , ToolParams.TMaxMat, ToolParams.TMaxDepth), ToolParams.MaxToolLength, ToolParams.ToolDiam, ToolParams.DiamTh, ToolParams.FreeLen
elseif MachiningType == MCH_MY.SAWING then
return MachiningName, ToolParams.H2
elseif MachiningType == MCH_MY.MILLING then
@@ -377,6 +378,14 @@ function MachiningLib.FindDrilling( dDiam, dDepth, bTopHead, bDownHead)
end
end
---------------------------------------------------------------------
function MachiningLib.FindAngleDrilling( dDiam, dDepth, bTopHead, bDownHead)
local MachiningName, MachiningType, Param1, Param2, Param3, Param4, Param5 = FindMachining( MCH_MY.DRILLING, 'AngleDrill', { Diam = dDiam, Depth = dDepth}, bTopHead, bDownHead)
if MachiningName and MachiningName ~= '' then
return MachiningName, MachiningType, Param1, Param2, Param3, Param4, Param5
end
end
---------------------------------------------------------------------
function MachiningLib.FindMilling( sType, dDepth, sTuuidMstr, dMaxDiam, dMaxTotLen, bTopHead, bDownHead)
return FindMachining( MCH_MY.MILLING, sType, { Depth = dDepth, TuuidMstr = sTuuidMstr, MaxDiam = dMaxDiam, MaxTotLen = dMaxTotLen}, bTopHead, bDownHead)
+31 -3
View File
@@ -11,6 +11,7 @@
-- 2022/07/01 Aggiunta gestione allungamento percorsi fori in caso di materiale già rimosso da lavorazioni precedenti
-- 2022/07/07 Aggiunta la gestione delle forature migliorate in presenza di feature testa/coda che tagliano tutta la sezione; gli Id delle feature sono nelle proprietà MachineAfterHeadCutId e MachineAfterTailCutId.
-- 2022/07/12 Aggiunto un valore minimo (10) per la distanza di sicurezza.
-- 2022/07/27 Aggiunta la gestione del tipo di foratura "AngleDrill" per fori molto inclinati
-- Tabella per definizione modulo
local ProcessDrill = {}
@@ -171,6 +172,8 @@ end
---------------------------------------------------------------------
-- Applicazione della lavorazione
function ProcessDrill.Make( Proc, nPhase, nRawId, nPartId)
-- default per costanti
BD.DRILL_VX_MAX_ANGLEDRILL = ( BD.DRILL_VX_MAX_ANGLEDRILL or 0.921)
-- ingombro del pezzo
local b3Solid = EgtGetBBoxGlob( EgtGetFirstNameInGroup( nPartId, 'Box') or GDB_ID.NULL, GDB_BB.STANDARD)
if not b3Solid then
@@ -323,6 +326,7 @@ function ProcessDrill.Make( Proc, nPhase, nRawId, nPartId)
-- se foro non su testa o coda e inclinato
local bInMid = false
local bInvertFcse = ( bToInvert and Proc.Flg ~= -2)
local bTryAngleDrill = false
if ( not bInvertFcse and Proc.Fcs ~= 5 and Proc.Fcs ~= 6) or ( bInvertFcse and Proc.Fce ~= 5 and Proc.Fce ~= 6) then
bInMid = true
local CosB = abs( vtExtr:getX())
@@ -330,7 +334,12 @@ function ProcessDrill.Make( Proc, nPhase, nRawId, nPartId)
local TgA = CosB / sqrt( 1 - CosB * CosB)
dSubL1 = ( dDiamTh / 2 + dDeltaRad + 2) * TgA
else
-- settando dMaxDepth a 0 la lavorazione verrà disattivata
dMaxDepth = 0
-- se il foro è molto inclinato ma entro un certo limite, si cercheranno le forature speciali AngleDrill
if CosB < BD.DRILL_VX_MAX_ANGLEDRILL then
bTryAngleDrill = true
end
end
end
-- se foro davanti o dietro e inclinato
@@ -343,7 +352,12 @@ function ProcessDrill.Make( Proc, nPhase, nRawId, nPartId)
local TgA = CosB / sqrt( 1 - CosB * CosB)
dSubL2 = ( dDiamTh / 2 + dDeltaRad + 2) * TgA
else
-- settando dMaxDepth a 0 la lavorazione verrà disattivata
dMaxDepth = 0
-- se il foro è molto inclinato ma entro un certo limite, si cercheranno le forature speciali AngleDrill
if CosB < BD.DRILL_VX_MAX_ANGLEDRILL then
bTryAngleDrill = true
end
end
end
-- se foro sopra o sotto e inclinato
@@ -356,13 +370,27 @@ function ProcessDrill.Make( Proc, nPhase, nRawId, nPartId)
local TgA = CosB / sqrt( 1 - CosB * CosB)
dSubL3 = ( dDiamTh / 2 + dDeltaRad + 2) * TgA
else
-- settando dMaxDepth a 0 la lavorazione verrà disattivata
dMaxDepth = 0
-- se il foro è molto inclinato ma entro un certo limite, si cercheranno le forature speciali AngleDrill
if CosB < BD.DRILL_VX_MAX_ANGLEDRILL then
bTryAngleDrill = true
end
end
end
local dSubL = max( dSubL1, dSubL2, dSubL3)
if dMaxDepth > 0 then
dMaxDepth = min( dMaxDepth, dToolFreeLen - dSubL)
end
if bTryAngleDrill then
-- cerco le forature speciali AngleDrill
local sDrilling3, sType3, dMaxDepth3 = ML.FindAngleDrilling( dDiam, dCheckDepth, bDrillUp, bDrillDown)
if sDrilling3 then
sDrilling = sDrilling3
sType = sType3
dMaxDepth = dMaxDepth3
end
end
-- inserisco la lavorazione
local sName = 'Drill_' .. ( EgtGetName( Proc.Id) or tostring( Proc.Id))
local nMchId = EgtAddMachining( sName, sDrilling)
@@ -374,7 +402,7 @@ function ProcessDrill.Make( Proc, nPhase, nRawId, nPartId)
-- aggiungo geometria
EgtSetMachiningGeometry( {{ AuxId, -1}})
-- eventuale inversione
if sType == 'Drill' or sType == 'Drill_H2' then
if sType == 'Drill' or sType == 'Drill_H2' or sType == 'AngleDrill' then
EgtSetMachiningParam( MCH_MP.INVERT, bToInvert)
else
EgtSetMachiningParam( MCH_MP.TOOLINVERT, bToInvert)
@@ -458,7 +486,7 @@ function ProcessDrill.Make( Proc, nPhase, nRawId, nPartId)
-- aggiungo alle note massima elevazione (coincide con affondamento)
sUserNotes = sUserNotes .. 'MaxElev=' .. EgtNumToString( dMaxElev, 1) .. ';'
-- se foro passante, aggiungo questa qualifica alle note
if ( sType == 'Drill' or sType == 'Drill_H2') and bOpen then
if ( sType == 'Drill' or sType == 'Drill_H2' or sType == 'AngleDrill') and bOpen then
sUserNotes = sUserNotes .. 'Open=1;'
end
-- se lavorazione in doppio
@@ -471,7 +499,7 @@ function ProcessDrill.Make( Proc, nPhase, nRawId, nPartId)
-- eseguo
local bOk = ML.ApplyMachining( true, false)
if not bOk and BD.DOWN_HEAD then
if sType == 'Drill' or sType == 'Drill_H2' then
if sType == 'Drill' or sType == 'Drill_H2' or sType == 'AngleDrill' then
EgtSetMachiningParam( MCH_MP.INVERT, true)
else
EgtSetMachiningParam( MCH_MP.TOOLINVERT, true)