DataBeam :

- in gestione LapJoint semplificata gestione diametro minimo utensile per svuotatura
This commit is contained in:
DarioS
2021-05-17 20:34:51 +02:00
parent 580a7cbc17
commit 9bca31c921
+18 -86
View File
@@ -1,4 +1,4 @@
-- ProcessLapJoint.lua by Egaltech s.r.l. 2021/04/27
-- ProcessLapJoint.lua by Egaltech s.r.l. 2021/05/12
-- Gestione calcolo mezzo-legno per Travi
-- 2019/10/08 Agg. gestione OpenPocket.
-- 2021/01/24 Con sega a catena ora sempre impostato asse A.
@@ -13,6 +13,7 @@
-- 2021/04/21 Anche feature lunga con due facce con opzione lama ora si taglia con lama.
-- 2021/04/23 Corretto caso con antischeggia non inseriti perchè inutili.
-- 2021/04/27 Antischeggia solo se feature trasversali.
-- 2021/05/12 Semplificata gestione diametro minimo utensile per svuotatura.
-- Tabella per definizione modulo
local ProcessLapJoint = {}
@@ -2266,6 +2267,7 @@ local function MakeByChainOrSaw( Proc, nPhase, nRawId, nPartId, nFacInd,
--else
-- EgtSetMachiningParam( MCH_MP.FACEUSE, MCH_MILL_FU.PARAL_RIGHT)
end
-- imposto angolo 3° asse rot
EgtSetMachiningParam( MCH_MP.BLOCKEDAXIS, GetChainSawBlockedAxis( 1))
-- imposto offset radiale
local dOffs = ( i - 1) * dStep
@@ -2731,94 +2733,31 @@ local function SetOpenSide( nPathInt, vtOrtho, b3Solid, nAddGrpId, bStartPoint)
end
---------------------------------------------------------------------
local function CheckPocketTool( sMchFind, dDiam, dElev)
local sPocketing = ML.FindPocketing( sMchFind, dDiam, dElev)
if sPocketing then
-- recupero i dati dell'utensile
local dTDiam = 50
if EgtMdbSetCurrMachining( sPocketing) then
local sTuuid = EgtMdbGetCurrMachiningParam( MCH_MP.TUUID)
dTDiam = EgtTdbGetCurrToolParam( MCH_TP.DIAM) or dTDiam
return true, dTDiam
end
end
return false
end
---------------------------------------------------------------------
local function CheckToolDiamByFaces( Proc, nFacInd, bFaceDown, dH, dV, bIsU, bIsL, dElev, nUseRoughTool)
local dMaxDimFace = max( dH, dV)
-- verifico che diametro utensile prende con la openpocket con la massima dimensione faccia
local bUseMaxTool, dMaxDiam
-- classe di lavorazione
local sMach = 'OpenPocket' .. EgtIf( bFaceDown, '_H2', '')
-- se è forzato l'uso del truciolatore non passo l'altezza di elevazione
if nUseRoughTool and nUseRoughTool == 1 then
bUseMaxTool, dMaxDiam = CheckPocketTool( sMach, dMaxDimFace)
else
bUseMaxTool, dMaxDiam = CheckPocketTool( sMach, dMaxDimFace, dElev)
end
-- se non trovato utensile esco
if not bUseMaxTool then
return false
end
local function GetUShapeWidth( Proc, nFacInd)
-- Recupero le facce adiacenti alla principale
local vAdj = EgtSurfTmFacetAdjacencies( Proc.Id, nFacInd)[1]
-- se non ho facce adiacenti esco subito
if not vAdj or #vAdj == 0 then
return false
end
if not vAdj or #vAdj == 0 then return nil end
-- Normale della faccia
local ptC, vtN = EgtSurfTmFacetCenter( Proc.Id, nFacInd, GDB_ID.ROOT)
-- Cerco le facce adiacenti alla principale con angolo concavo >= 90
local tWidth = {}
local tExtremPt = {}
local dWidth = 0
for i = 1, #vAdj do
if vAdj[i] >= 0 then
-- verifico l'angolo tra le facce ( esco se angolo compreso < 90)
local bAdj, ptP1, ptP2, dAng = EgtSurfTmFacetsContact( Proc.Id, nFacInd, vAdj[i], GDB_ID.ROOT)
if bAdj and dAng < -90 - 20 * GEO.EPS_ANG_SMALL then
return false
end
if bAdj and dAng < -90 - 20 * GEO.EPS_ANG_SMALL then return nil end
-- larghezza della faccia ortogonalmente alla adiacente
local vtN2 = EgtSurfTmFacetNormVersor( Proc.Id, vAdj[i], GDB_ID.ROOT)
local vtX = vtN2 ^ vtN
local frRef = Frame3d( ptC, ptC + 100 * vtX, ptC + 100 * vtN2)
local b3Ref = EgtSurfTmGetFacetBBoxRef( Proc.Id, nFacInd, GDB_BB.STANDARD, frRef)
if b3Ref then
table.insert( tWidth, b3Ref:getDimY())
table.insert( tExtremPt, { ptP1, ptP2})
dWidth = max( dWidth, b3Ref:getDimY())
end
end
end
-- se le facce di adiacenza non corrispondono con quelle della forma esco
if ( bIsU and #tWidth ~= 2) or ( bIsL and #tWidth ~= 1) then
return false
end
local dLargeVal = 0
for i = 1, #tWidth do
dLargeVal = max( dLargeVal, tWidth[i])
end
-- se facce U verifico se le distanze tra i punti sono minori delle distanze tra le facce
if bIsU then
local dLen11 = dist( tExtremPt[1][1], tExtremPt[2][1])
local dLen12 = dist( tExtremPt[1][1], tExtremPt[2][2])
local dLen21 = dist( tExtremPt[1][2], tExtremPt[2][1])
local dLen22 = dist( tExtremPt[1][2], tExtremPt[2][2])
dLargeVal = min( dLargeVal, dLen11, dLen12, dLen21, dLen22)
end
-- se forma a L, raggio inferiore alla dimensione minima e flag uso truciolatore, favorisco il suo utilizzo
if bIsL and nUseRoughTool == 1 and dMaxDiam / 2 < dLargeVal then
return dMaxDiam, 'OpenPocket', nUseRoughTool, dMaxDiam
else
-- per essere accettabile, il diametro massimo deve essere minore della larghezza della faccia
if dMaxDiam < dLargeVal + 20 * GEO.EPS_SMALL then
return dMaxDiam, 'OpenPocket', nUseRoughTool, dMaxDiam
else
return false, '', 0, dMaxDiam
end
end
return dWidth
end
---------------------------------------------------------------------
@@ -3484,11 +3423,17 @@ local function MakeMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead, bSinglePa
local bMillDown = ( BD.DOWN_HEAD and vtN:getZ() < 0.342)
-- settaggio voluto da Alessandro/Fabio (per fare angoli con fresa piccola)
sMchFind = 'Pocket'
if ( Proc.Fct == 1) or ( Proc.Fct == 2 and bIsL) or ( Proc.Fct == 3 and bIsU) then sMchFind = 'OpenPocket' end
local dDiam = min( dH, dV)
if bSinglePart and (( Proc.Fct == 1) or ( Proc.Fct == 2 and bIsL) or ( Proc.Fct == 3 and bIsU)) then
sMchFind = 'OpenPocket'
if bIsU then
dDiam = GetUShapeWidth( Proc, nFacInd) or dDiam
else
dDiam = 300
end
end
sMchFindBackUp = sMchFind
local nUseRoughTool = EgtIf( bSinglePart, 0, 1)
local dDiam = min( dH, dV)
local dDiamMax
local nUseRT
-- 04/08/2020 Se settato parametro uso truciolatore (parametro Q), non si devono prendere altre frese, si da errore (Fabio)
-- Questa opzione si scontra facilmente con altre interpretazioni dello stasso parametro Q (per tornare indietro bNewCheck = false)
@@ -3511,24 +3456,11 @@ local function MakeMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead, bSinglePa
nUseRoughTool = 1
end
end
-- verifico dalla forma se posso prendere utensile grande
--if ( Proc.Fct == 3 and bIsU and bSinglePart) or ( Proc.Fct == 2 and bIsL) or Proc.Fct == 1 then
-- sMchFindBackUp = sMchFind
-- --ottengo un diametro utensile opportuno
-- dDiam, sMchFind, nUseRoughTool, dDiamMax = CheckToolDiamByFaces( Proc, nFacInd, bMillDown, dH, dV, bIsU, bIsL, ( dFacElev + dCollSic), nUseRoughTool)
-- if not dDiam then
-- sMchFind = sMchFindBackUp
-- dDiam = min( dH, dV)
-- end
--end
-- se processo 20 e non sto usando il truciolatore
if Proc.Prc == 20 and nUseRoughTool == 0 then
if nUseRT and nUseRT ~= 0 then
sMchFind = 'OpenPocket'
nUseRoughTool = 1
if dDiamMax and Proc.Fct == 2 and bIsL then
dDiam = dDiamMax
end
end
end
-- se da sotto, imposto massima lunghezza secondo la direzione