DataWall :
- modifiche per nesting cliente belga - in FreeContour aggiunta gestione marcatura (codice 10).
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user