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
+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)