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:
+30
-10
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user