From 77a3681439c594cb4a90cbaff6c0839308c7c28f Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Sun, 16 Mar 2025 15:46:10 +0100 Subject: [PATCH] =?UTF-8?q?DataBeamWall=20:=20-=20nella=20trasformazione?= =?UTF-8?q?=20di=20Trimesh=20in=20oggetti=20BTL=20ora=20si=20pu=C3=B2=20sc?= =?UTF-8?q?egliere=20di=20spostare=20tutte=20le=20entit=C3=A0=20del=20laye?= =?UTF-8?q?r=20della=20Trimesh.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SolidProcess.lua | 40 ++++++++++++++++++++++++++++++---------- 1 file changed, 30 insertions(+), 10 deletions(-) diff --git a/SolidProcess.lua b/SolidProcess.lua index b5e0234..f345209 100644 --- a/SolidProcess.lua +++ b/SolidProcess.lua @@ -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)