DataWall :

- modifiche per nesting cliente belga
- in FreeContour aggiunta gestione marcatura (codice 10).
This commit is contained in:
DarioS
2021-11-04 13:53:36 +01:00
parent 995d8d839f
commit fea5d18c06
11 changed files with 1215 additions and 275 deletions
+145 -1
View File
@@ -175,6 +175,150 @@ function WPL.Classify( Proc, b3Raw)
end
end
-- funzione che verifica se faccia lavorabile da sopra
local function VerifyVtN( ProcId, nFct)
local nFlip0 = 0
local nFlip1 = 0
-- dati della faccia
local vtN = EgtSurfTmFacetNormVersor( ProcId, nFct, GDB_ID.ROOT)
local dVtNZ = vtN:getZ()
-- verifico se è lavorabile da sopra
nFlip0 = EgtIf( dVtNZ >= WD.NZ_MINA, 100, 0)
-- verifico se e' lavorabile da fliped: cambio segno al versore
nFlip1 = EgtIf( -dVtNZ >= WD.NZ_MINA, 100, 0)
return nFlip0, nFlip1
end
-- funzione che fa la media dei versori per assegnare punteggi flip
local function VerifyVtNMedia(ProcId, nFct1, nFct2)
local nFlip0 = 0
local nFlip1 = 0
-- dati delle facce
local vtN = {}
vtN[1] = EgtSurfTmFacetNormVersor( ProcId, nFct1, GDB_ID.ROOT)
vtN[2] = EgtSurfTmFacetNormVersor( ProcId, nFct2, GDB_ID.ROOT)
local dVtN1Z = vtN[1]:getZ()
local dVtN2Z = vtN[2]:getZ()
-- se entrambi i versori positivi
if (dVtN1Z >= - 0.01 and dVtN2Z >= - 0.01) then
-- posso lavorarlo da sopra
nFlip0 = 100
-- se almeno un versore positivo
elseif (dVtN1Z >= - 0.01 or dVtN2Z >= - 0.01) then
-- calcolo media dei versori: se positiva tende verso alto
local dVtNMedia = ( dVtN1Z + dVtN2Z) / 2
if dVtNMedia >= 0 - GEO.EPS_SMALL and dVtNMedia <= 0 + GEO.EPS_SMALL then
nFlip0 = 100
elseif dVtNMedia >= 0 + GEO.EPS_SMALL then
nFlip0 = 75
else
nFlip0 = 25
end
-- se entrambi i versori negativi, impossibile da fare
else
nFlip0 = 0
end
-- verifico se e' lavorabile da fliped: cambio segno ai versori
dVtN1Z = -dVtN1Z
dVtN2Z = -dVtN2Z
-- se entrambi i versori positivi
if (dVtN1Z >= - 0.01 and dVtN2Z >= - 0.01) then
-- posso lavorarlo da sopra
nFlip1 = 100
-- se almeno un versore positivo
elseif (dVtN1Z >= - 0.01 or dVtN2Z >= - 0.01) then
-- calcolo media dei versori: se positiva tende verso alto
local dVtNMedia = ( dVtN1Z + dVtN2Z) / 2
if dVtNMedia >= 0 - GEO.EPS_SMALL and dVtNMedia <= 0 + GEO.EPS_SMALL then
nFlip1 = 100
elseif dVtNMedia >= 0 + GEO.EPS_SMALL then
nFlip1 = 75
else
nFlip1 = 25
end
-- se entrambi i versori negativi, impossibile da fare
else
nFlip0 = 0
end
return nFlip0, nFlip1
end
-- Classificazione del flip della feature per nesting
-- return nFlip0, nFlip1
function WPL.FlipClassify( Proc)
local nFlip0 = -1
local nFlip1 = -1
-- se 1 faccia
if Proc.Fct == 1 then
-- verifico che la normale permetta la lavorazione da sopra ed assegno punteggio di conseguenza
nFlip0, nFlip1 = VerifyVtN( Proc.Id, 0)
-- se 2 facce
elseif Proc.Fct == 2 then
-- calcolo la media delle normali delle facce ed assegno punteggio maggiore se positiva
nFlip0, nFlip1 = VerifyVtNMedia(Proc.Id, 0, 1)
-- se più di 2 facce
else
local nFacInd, dElev, nFacInd2, dElev2 = WL.GetFaceWithMostAdj( Proc.Id, Proc.PartId)
if nFacInd == -2 then return 0, 0 end
-- se 3 facce
if Proc.Fct == 3 then
-- se forma ad U
if not nFacInd2 or nFacInd2 == 0 then
-- verifico che la normale del fondo permetta la lavorazione da sopra ed assegno punteggio di conseguenza
nFlip0, nFlip1 = VerifyVtN( Proc.Id, nFacInd)
-- se non ad U
else
-- calcolo la media delle normali delle facce di fondo ed assegno punteggio maggiore se positiva
nFlip0, nFlip1 = VerifyVtNMedia(Proc.Id, nFacInd, nFacInd2)
end
-- se 4 facce
elseif Proc.Fct == 4 then
-- se senza fondo (tunnel)
if not nFacInd or nFacInd == -1 then
-- dati delle facce
local vtN = {}
vtN[1] = EgtSurfTmFacetNormVersor( Proc.Id, 0, GDB_ID.ROOT)
vtN[2] = EgtSurfTmFacetNormVersor( Proc.Id, 1, GDB_ID.ROOT)
vtN[3] = EgtSurfTmFacetNormVersor( Proc.Id, 2, GDB_ID.ROOT)
vtN[4] = EgtSurfTmFacetNormVersor( Proc.Id, 3, GDB_ID.ROOT)
-- verifico se è lavorabile da sopra
local vtAxN = vtN[1] ^ vtN[2]
if vtAxN:isSmall() then
vtAxN = vtN[1] ^ vtN[3]
end
if ( abs( vtAxN:getZ()) >= WD.NZ_MINA) then
-- calcolo la media dei versori delle facce
local dVtNMedia = ( vtN[1]:getZ() + vtN[2]:getZ() + vtN[3]:getZ() + vtN[4]:getZ()) / 4
if dVtNMedia >= 0 - GEO.EPS_SMALL and dVtNMedia <= 0 + GEO.EPS_SMALL then
nFlip0 = 100
nFlip1 = 100
elseif dVtNMedia >= 0 + GEO.EPS_SMALL then
nFlip0 = 75
nFlip1 = 25
else
nFlip0 = 25
nFlip1 = 75
end
end
-- se con fondo
else
-- calcolo la media delle normali delle facce di fondo ed assegno punteggio maggiore se positiva
local vtN = {}
vtN[1] = EgtSurfTmFacetNormVersor( Proc.Id, nFacInd, GDB_ID.ROOT)
vtN[2] = EgtSurfTmFacetNormVersor( Proc.Id, nFacInd2, GDB_ID.ROOT)
if vtN[1]:getZ() == -1 or vtN[2]:getZ() == -1 then return 0, 100 end
if vtN[1]:getZ() == 1 or vtN[2]:getZ() == 1 then return 100, 0 end
nFlip0, nFlip1 = VerifyVtNMedia(Proc.Id, nFacInd, nFacInd2)
end
-- se 5 facce
elseif Proc.Fct == 5 then
-- verifico che la normale del fondo permetta la lavorazione da sopra ed assegno punteggio di conseguenza
nFlip0, nFlip1 = VerifyVtN( Proc.Id, nFacInd)
end
end
return nFlip0, nFlip1
end
---------------------------------------------------------------------
local function TestElleShape3( nIdGeom, nNumFacet)
-- valida solo nel caso di tre facce
@@ -1268,7 +1412,7 @@ local function MakeSideGrooveByMill( Proc, nFacet, nRawId, b3Raw, sCustomMach, d
EgtOutLog( sErr)
return false, sErr
end
-- verificoo che la lavorazione sia passante dal grezzo
-- verifico che la lavorazione sia passante dal grezzo
local dLongGorge = max( dH, dV)
local dExtraLongExtPlus = 0
local dExtraLongExtNeg = 0