DataBeamWall :

- nella trasformazione di Trimesh in oggetti BTL ora si può scegliere di spostare tutte le entità del layer della Trimesh.
This commit is contained in:
Dario Sassi
2025-03-16 15:46:10 +01:00
parent d568808608
commit 77a3681439
+30 -10
View File
@@ -1,4 +1,4 @@
-- 2025/01/13
-- 2025/03/16
-- Parti solide gestite come travi BTL
@@ -34,18 +34,27 @@ local function SolidMinBox( nId, dMinFaceArea)
end
-- Trasformazione di un oggetto solido
local function ProcessOneSolid( nId1, ptPos)
local function ProcessOneSolid( nId, ptPos, bFullLayer)
-- Calcolo il riferimento del suo box minimo
local refMin, b3Min = SolidMinBox( nId1, 100)
local refMin, b3Min = SolidMinBox( nId, 100)
if not refMin then
refMin, b3Min = SolidMinBox( nId1)
refMin, b3Min = SolidMinBox( nId)
end
if not refMin then
EgtOutText( 'Errore nel calcolo del box minimo della superficie (' .. tostring( nId1) .. ')')
EgtOutText( 'Errore nel calcolo del box minimo della superficie (' .. tostring( nId) .. ')')
EgtPause( 1000)
return false, 0
end
-- Se tutto il layer ricalcolo il box minimo sul layer e determino tutti i suoi oggetti
local LayId
local vAllId = { nId}
if bFullLayer then
LayId = EgtGetParent( nId)
vAllId = EgtGetAllInGroup( LayId)
b3Min = EgtGetBBoxRef( LayId, GDB_BB.STANDARD, refMin)
end
-- Modifico il riferimento in modo che X sia sul più lungo
local dDimX = b3Min:getDimX()
@@ -62,10 +71,10 @@ local function ProcessOneSolid( nId1, ptPos)
-- Porto il solido nell'origine
refMin:invert()
EgtTransform( nId1, refMin, GDB_RT.GLOB)
local b3Box = EgtGetBBoxGlob( nId1, GDB_BB.STANDARD)
EgtTransform( vAllId, refMin, GDB_RT.GLOB)
local b3Box = EgtGetBBoxGlob( LayId or nId, GDB_BB.STANDARD)
local vtMove = ORIG() - b3Box:getMin()
EgtMove( nId1, vtMove, GDB_RT.GLOB)
EgtMove( vAllId, vtMove, GDB_RT.GLOB)
b3Box:move( vtMove)
-- Creo un nuovo pezzo
@@ -78,7 +87,9 @@ local function ProcessOneSolid( nId1, ptPos)
EgtSetName( ProcId or GDB_ID.NULL, 'Proc')
-- Sposto il solido nel pezzo
EgtRelocate( nId1, ProcId)
for i = 1, #vAllId do
EgtRelocate( vAllId[i], ProcId)
end
-- Calcolo il box
local SboxId = EgtSurfTmBBox( BoxId, b3Box)
@@ -99,12 +110,21 @@ local function ProcessOneSolid( nId1, ptPos)
end
-------------------------------------------------------------------
-- Chiedo se spostare tutti gli oggetti del layer degli oggetti
local vsVal = EgtDialogBox( 'SolidProcess',
{ 'Full Layer', ' CB:*true,false'})
if not vsVal then
return
end
local bFullLayer = ( vsVal[1] == 'true')
-- Eseguo
local ptIns = ORIG()
local bOk = true
local nId = EgtGetFirstSelectedObj()
while nId do
EgtDeselectObj( nId)
local bOneOk, dDimY = ProcessOneSolid( nId, ptIns)
local bOneOk, dDimY = ProcessOneSolid( nId, ptIns, bFullLayer)
EgtDraw()
bOk = bOk and bOneOk
ptIns = ptIns + Vector3d( 0, dDimY + 200, 0)