DataBeam :
- migliorie e correzioni varie.
This commit is contained in:
+20
-16
@@ -1,4 +1,4 @@
|
||||
-- DiceCut.lua by Egaltech s.r.l. 2018/11/26
|
||||
-- DiceCut.lua by Egaltech s.r.l. 2019/04/13
|
||||
-- Gestione dei piano paralleli nei tagli lunghi
|
||||
|
||||
-- Tabella per definizione modulo
|
||||
@@ -131,7 +131,8 @@ local function GetOrtoCutCenter( FacetId, ptC, vtN, vtO, dOffsetEff)
|
||||
local dLen = Box:getDimX()
|
||||
local dWidth = Box:getDimY()
|
||||
|
||||
if dLen < dOffsetEff + 1.0 or dWidth < dOffsetEff + 1.0 then
|
||||
-- se faccia con un lato piccolo e non diretta troppo verso il basso, non servono dice
|
||||
if ( dLen < dOffsetEff + 1.0 or dWidth < dOffsetEff + 1.0) and vtN:getZ() > -0.5 then
|
||||
return nil, nil, nil
|
||||
end
|
||||
|
||||
@@ -231,43 +232,46 @@ local function SortOrtoCutsByNormalMethod( TabParallelPlanes, TabOrtoPlanes)
|
||||
end
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
-- GetSurfSum:
|
||||
-- VerifyFirstOrthoCut :
|
||||
-- CutTable: tabella dei tagli
|
||||
-- OffsetP: offset della distanza dal punto centrale
|
||||
-- BBoxRawPart: il grezzo della barra
|
||||
-- Verifica se l'asse X del box costruito sopra le 2 facce è più piccolo di un certo offset e quindi la faccia 12 è superflua
|
||||
local function GetSurfSum( CutTable, OffsetP, BBoxRawPart)
|
||||
-- Verifica se l'asse X del box costruito sopra le 2 facce è più piccolo di un certo offset e quindi la faccia O è superflua
|
||||
local function VerifyFirstOrthoCut( CutTable, OffsetP, BBoxRawPart)
|
||||
|
||||
if not CutTable[1] or not CutTable[2] then return end
|
||||
|
||||
local CutOId = CutTable[1][1]
|
||||
local Cut1Id = CutTable[2][1]
|
||||
local Cut2Id = CutTable[2][2]
|
||||
local Cut12Id = CutTable[1][1]
|
||||
|
||||
if Cut1Id and Cut2Id and Cut12Id then
|
||||
if CutOId and Cut1Id and Cut2Id then
|
||||
-- centri e normali delle due semifacce
|
||||
local ptC1, vtN1 = EgtSurfTmFacetCenter( Cut1Id, 0, GDB_ID.ROOT)
|
||||
local _, vtO = EgtSurfTmFacetCenter( Cut12Id, 0, GDB_ID.ROOT)
|
||||
local ptC2, vtN2 = EgtSurfTmFacetCenter( Cut2Id, 0, GDB_ID.ROOT)
|
||||
-- normale alla faccia ortogonale
|
||||
local _, vtO = EgtSurfTmFacetCenter( CutOId, 0, GDB_ID.ROOT)
|
||||
vtO = vtO - vtO * vtN1 * vtN1 ; vtO:normalize()
|
||||
-- calcolo lunghezza prima semi-faccia
|
||||
local asseX1 = vtO
|
||||
local asseY1 = vtN1 ^ asseX1
|
||||
local Frame1 = Frame3d( ptC1, ptC1+asseX1, ptC1+asseY1)
|
||||
local Box1 = EgtGetBBoxRef( Cut1Id, GDB_BB.STANDARD, Frame1)
|
||||
local x1 = Box1:getDimX()
|
||||
|
||||
local ptC2, vtN2 = EgtSurfTmFacetCenter( Cut2Id, 0, GDB_ID.ROOT)
|
||||
-- calcolo lunghezza seconda semi-faccia
|
||||
local asseX2 = vtO
|
||||
local asseY2 = vtN2 ^ asseX2
|
||||
local Frame2 = Frame3d( ptC2, ptC2+asseX2, ptC2+asseY2)
|
||||
local Box2 = EgtGetBBoxRef( Cut2Id, GDB_BB.STANDARD, Frame2)
|
||||
local x2 = Box2:getDimX()
|
||||
|
||||
-- lunghezza totale faccia
|
||||
local dLongSize = x1 + x2
|
||||
|
||||
if dLongSize <= OffsetP + 1.0 then
|
||||
-- se faccia piccola e non orientata verso il basso, elimino ortogonale e unisco le due parti
|
||||
if dLongSize <= OffsetP + 1.0 and vtN1:getZ() > -0.5 then
|
||||
local nParent = EgtGetParent( Cut1Id)
|
||||
local SurfId = EgtSurfTmBySewing( nParent, { Cut1Id, Cut2Id})
|
||||
EgtSetColor( SurfId, Color3d( FUCHSIA(), 60))
|
||||
EgtErase( Cut12Id)
|
||||
EgtErase( CutOId)
|
||||
table.remove( CutTable[1], 1)
|
||||
table.remove( CutTable[2], 1)
|
||||
table.remove( CutTable[2], 1)
|
||||
@@ -296,7 +300,7 @@ function DiceCut.GetDice( nParent, BBoxRawPart, ptCPlanes, vtNPlanes, bGetOrtoPl
|
||||
|
||||
-- se normali senza componenti in Y, uso per offset i limiti dei tagli di testa e coda
|
||||
if abs( vtNPlanes:getY()) < 0.1 and ( not vtNBond or abs( vtNBond:getY()) < 0.1) then
|
||||
OffsetP = BD.MAX_DIM_HTCUT
|
||||
--OffsetP = BD.MAX_DIM_HTCUT
|
||||
OffsetO = BD.MAX_DIM_HTCUT
|
||||
end
|
||||
|
||||
@@ -409,7 +413,7 @@ function DiceCut.GetDice( nParent, BBoxRawPart, ptCPlanes, vtNPlanes, bGetOrtoPl
|
||||
|
||||
-- Se esiste la superficie limitante (nFacet == 2) verifica se il taglio più esterno è superfluo e quindi viene eliminato
|
||||
if not bGetOrtoPlanes then
|
||||
GetSurfSum( UltimateTable, originalOffsetP, BBoxRawPart)
|
||||
VerifyFirstOrthoCut( UltimateTable, originalOffsetP, BBoxRawPart)
|
||||
end
|
||||
|
||||
return UltimateTable
|
||||
|
||||
Reference in New Issue
Block a user