DataBeamWall :
- eliminato modulo SolidProcess pechè già da tempo le sue funzioni sono svolte nel programma - in ShowSolid aggiunta gestione modalità tutti i pezzi mediante riconoscimento pressione tasto Shift.
This commit is contained in:
@@ -1,110 +0,0 @@
|
||||
-- 2023/08/24
|
||||
-- Parti solide gestite come travi BTL
|
||||
|
||||
|
||||
-- Intestazioni
|
||||
require( 'EgtBase')
|
||||
_ENV = EgtProtectGlobal()
|
||||
EgtEnableDebug( false)
|
||||
|
||||
|
||||
-- calcolo del riferimento del minimo box
|
||||
local function SolidMinBox( nId)
|
||||
-- ciclo sulle facce della superficie
|
||||
local nFacCnt = EgtSurfTmFacetCount( nId)
|
||||
local dVolMin
|
||||
local refMin
|
||||
local b3Min
|
||||
for i = 1, nFacCnt do
|
||||
local refFace, dL, dW = EgtSurfTmFacetMinAreaRectangle( nId, i - 1, GDB_ID.ROOT)
|
||||
if refFace and dL * dW > 100 then
|
||||
local b3Box = EgtGetBBoxRef( nId, GDB_BB.STANDARD, refFace)
|
||||
if b3Box then
|
||||
local dVol = b3Box:getDimX() * b3Box:getDimY() * b3Box:getDimZ()
|
||||
if not dVolMin or dVol < dVolMin then
|
||||
dVolMin = dVol
|
||||
refMin = refFace
|
||||
b3Min = b3Box
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
return refMin, b3Min
|
||||
end
|
||||
|
||||
-- Trasformazione di un oggetto solido
|
||||
local function ProcessOneSolid( nId1, ptPos)
|
||||
|
||||
-- Calcolo il riferimento del suo box minimo
|
||||
local refMin, b3Min = SolidMinBox( nId1)
|
||||
if not refMin then
|
||||
EgtOutText( 'Errore nel calcolo del box minimo della superficie')
|
||||
EgtPause( 1000)
|
||||
return
|
||||
end
|
||||
|
||||
-- Modifico il riferimento in modo che X sia sul più lungo, quindi Z e poi Y
|
||||
local dDimX = b3Min:getDimX()
|
||||
local dDimY = b3Min:getDimY()
|
||||
local dDimZ = b3Min:getDimZ()
|
||||
if dDimX < dDimY then
|
||||
refMin:rotate( refMin:getOrigin(), refMin:getVersZ(), 90)
|
||||
dDimX, dDimY = dDimY, dDimX
|
||||
end
|
||||
if dDimX < dDimZ then
|
||||
refMin:rotate( refMin:getOrigin(), refMin:getVersY(), 90)
|
||||
dDimX, dDimZ = dDimZ, dDimX
|
||||
end
|
||||
if dDimZ < dDimY then
|
||||
refMin:rotate( refMin:getOrigin(), refMin:getVersX(), 90)
|
||||
dDimZ, dDimY = dDimY, dDimZ
|
||||
end
|
||||
|
||||
-- Porto il solido nell'origine
|
||||
refMin:invert()
|
||||
EgtTransform( nId1, refMin, GDB_RT.GLOB)
|
||||
local b3Box = EgtGetBBoxGlob( nId1, GDB_BB.STANDARD)
|
||||
local vtMove = ORIG() - b3Box:getMin()
|
||||
EgtMove( nId1, vtMove, GDB_RT.GLOB)
|
||||
b3Box:move( vtMove)
|
||||
|
||||
-- Creo un nuovo pezzo
|
||||
local PzId = EgtGroup( GDB_ID.ROOT)
|
||||
local PartId = EgtGroup( PzId)
|
||||
EgtSetName( PartId or GDB_ID.NULL, 'Part')
|
||||
local BoxId = EgtGroup( PzId)
|
||||
EgtSetName( BoxId or GDB_ID.NULL, 'Box')
|
||||
local ProcId = EgtGroup( PzId)
|
||||
EgtSetName( ProcId or GDB_ID.NULL, 'Proc')
|
||||
|
||||
-- Sposto il solido nel pezzo
|
||||
EgtRelocate( nId1, ProcId)
|
||||
|
||||
-- Calcolo il box
|
||||
local SboxId = EgtSurfTmBBox( BoxId, b3Box)
|
||||
EgtSetColor( SboxId or GDB_ID.NULL, {206,199,113,30})
|
||||
|
||||
-- Assegno il nome
|
||||
local sText = string.format( 'Part%d %.0f x %.0f x %.0f', PzId, dDimX, dDimY, dDimZ)
|
||||
local ptText = b3Box:getCenter() + Vector3d( 0, 0, dDimZ / 2)
|
||||
local TxtId = EgtTextAdv( PartId, ptText, 0, sText, '', 100, 'S', dDimY / 4, 1, 0, GDB_TI.MC)
|
||||
EgtSetColor( TxtId or GDB_ID.NULL, {0,0,0,100})
|
||||
EgtSetName( PzId or GDB_ID.NULL, sText)
|
||||
|
||||
-- Sposto il pezzo
|
||||
if ptPos then
|
||||
EgtMove( PzId, ptPos - ORIG())
|
||||
end
|
||||
|
||||
EgtDraw()
|
||||
end
|
||||
|
||||
-------------------------------------------------------------------
|
||||
local ptIns = ORIG()
|
||||
local nId = EgtGetFirstSelectedObj()
|
||||
while nId do
|
||||
EgtDeselectObj( nId)
|
||||
ProcessOneSolid( nId, ptIns)
|
||||
ptIns = ptIns + Vector3d( 0, 300, 0)
|
||||
nId = EgtGetFirstSelectedObj()
|
||||
end
|
||||
Reference in New Issue
Block a user