diff --git a/LuaLibs/MachiningLib.lua b/LuaLibs/MachiningLib.lua index 555e551..75294e5 100644 --- a/LuaLibs/MachiningLib.lua +++ b/LuaLibs/MachiningLib.lua @@ -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) diff --git a/LuaLibs/ProcessDrill.lua b/LuaLibs/ProcessDrill.lua index e73cd59..03206cf 100644 --- a/LuaLibs/ProcessDrill.lua +++ b/LuaLibs/ProcessDrill.lua @@ -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)