DataBeam :
- modifiche Filippo.
This commit is contained in:
+40
-1
@@ -1,4 +1,4 @@
|
||||
-- BeamLib.lua by Egaltech s.r.l. 2020/11/03
|
||||
-- BeamLib.lua by Egaltech s.r.l. 2020/11/09
|
||||
-- Libreria globale per Travi
|
||||
-- 2020/07/28 Corretto calcolo attacchi e uscite di lame per non uscire dalla faccia sotto.
|
||||
-- 2020/08/18 Aggiunto a GetNearestParalOpposite e GetNearestOrthoOpposite parametro opzionale vtNorm.
|
||||
@@ -513,8 +513,10 @@ function BeamLib.GetFaceWithMostAdj( nSurfId, nPartId, bCompare3Fc, dCosSideAng)
|
||||
-- premio la faccia con minore elevazione
|
||||
local nFacOpt, nFacOpt2
|
||||
local dMinElev, dMinElev2 = GEO.INFINITO, GEO.INFINITO
|
||||
local dtElev = {}
|
||||
for i = 1, #nFacInd do
|
||||
local dElev = BeamLib.GetFaceElevation( nSurfId, nFacInd[i], nPartId)
|
||||
table.insert( dtElev, dElev)
|
||||
if dElev < dMinElev then
|
||||
if dMinElev < dMinElev2 then
|
||||
nFacOpt2 = nFacOpt
|
||||
@@ -527,6 +529,43 @@ function BeamLib.GetFaceWithMostAdj( nSurfId, nPartId, bCompare3Fc, dCosSideAng)
|
||||
dMinElev2 = dElev
|
||||
end
|
||||
end
|
||||
-- faccio una ulteriore verifica
|
||||
-- se le elevazioni di max 3 facce sono in un range minimo o al di sotto dell'elevazione ritenuta fattibile,
|
||||
-- premio quella che non è sottosquadra e che ha la X minore
|
||||
local bDiffSmall = true
|
||||
for i = 1, #dtElev do
|
||||
if dtElev[i] > dMinElev + 5 or dtElev[i] > 80 then
|
||||
bDiffSmall = false
|
||||
end
|
||||
end
|
||||
-- se tutte sono nel range minimo posso prendere la faccia che ha la componente Z magiore, e se sono uguali, prendo quella con componente X minore
|
||||
local dMaxZ, dMaxZ2 = -1.1, -1.1
|
||||
if bDiffSmall and #nFacInd <= 3 then
|
||||
for i = 1, #nFacInd do
|
||||
if vvtN[nFacInd[i]+1]:getZ() > dMaxZ then
|
||||
if dMaxZ > dMaxZ2 then
|
||||
nFacOpt2 = nFacOpt
|
||||
dMinElev2 = dMinElev
|
||||
dMaxZ2 = dMaxZ
|
||||
end
|
||||
nFacOpt = nFacInd[i]
|
||||
dMinElev = dtElev[i]
|
||||
dMaxZ = vvtN[nFacInd[i]+1]:getZ()
|
||||
elseif vvtN[nFacInd[i]+1]:getZ() > dMaxZ2 then
|
||||
nFacOpt2 = nFacInd[i]
|
||||
dMinElev2 = dtElev[i]
|
||||
dMaxZ2 = vvtN[nFacInd[i]+1]:getZ()
|
||||
end
|
||||
end
|
||||
-- se hanno uguale Z premio quella con la componente X minore
|
||||
if abs( dMaxZ - dMaxZ2) < 10*GEO.EPS_SMALL then
|
||||
if abs(vvtN[nFacOpt+1]:getX()) > abs(vvtN[nFacOpt2+1]:getX()) then
|
||||
nFacOpt, nFacOpt2 = nFacOpt2, nFacOpt
|
||||
dMinElev, dMinElev2 = dMinElev2, dMinElev
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return nFacOpt, dMinElev, nFacOpt2, dMinElev2
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user