DataBeamWall :
- modifiche per utilizzo nuove funzioni lua di BeamMgr.
This commit is contained in:
+5
-51
@@ -1,4 +1,4 @@
|
||||
-- ShowBuilding.lua by Egaltech s.r.l. 2018/11/21
|
||||
-- ShowBuilding.lua by Egaltech s.r.l. 2020/12/12
|
||||
-- Gestione visualizzazione travi come struttura
|
||||
|
||||
-- Intestazioni
|
||||
@@ -6,57 +6,11 @@ require( 'EgtBase')
|
||||
_ENV = EgtProtectGlobal()
|
||||
EgtEnableDebug( false)
|
||||
|
||||
-- recupero il gruppo di assemblaggio
|
||||
local AsseBaseId = EgtGetFirstNameInGroup( GDB_ID.ROOT, 'AsseBase')
|
||||
if not AsseBaseId then return end
|
||||
-- Recupero l'attivazione dell'assemblaggio
|
||||
local bOn = EgtBeamGetBuildingIsOn()
|
||||
|
||||
-- recupero il primo oggetto nel gruppo e verifico se devo assemblare o disassemblare
|
||||
local AsseId = EgtGetFirstInGroup( AsseBaseId)
|
||||
if not AsseId then return end
|
||||
local bMake = ( EgtGetGroupObjs( AsseId) == 0)
|
||||
|
||||
-- ciclo sul gruppo di assemblaggio
|
||||
while AsseId do
|
||||
-- salvo il successivo nel gruppo dell'assemblato
|
||||
local NextId = EgtGetNext( AsseId)
|
||||
-- costruisco l'assemblato
|
||||
if bMake then
|
||||
-- recupero il pezzo sorgente
|
||||
local SouId = EgtGetInfo( AsseId, GDB_SI.SOURCE, 'i')
|
||||
if SouId then
|
||||
EgtSetMode( SouId, GDB_MD.STD)
|
||||
EgtSetStatus( SouId, GDB_ST.ON)
|
||||
-- se già utilizzato, ne faccio una copia
|
||||
if not EgtIsPart( SouId) then
|
||||
local CopyId = EgtCopy( SouId, GDB_ID.ROOT)
|
||||
if CopyId then
|
||||
EgtRemoveInfo( CopyId, GDB_SI.BASE)
|
||||
EgtRemoveInfo( CopyId, GDB_SI.LIST)
|
||||
EgtSetInfo( CopyId, GDB_SI.COPY, SouId)
|
||||
SouId = CopyId
|
||||
EgtSetInfo( AsseId, GDB_SI.SOURCE, SouId)
|
||||
end
|
||||
end
|
||||
EgtSetStatus( EgtGetFirstNameInGroup( SouId, 'Box') or GDB_ID.NULL, GDB_ST.OFF)
|
||||
EgtGroupSwap( SouId, AsseId, true, true)
|
||||
end
|
||||
-- ritorno ai pezzi
|
||||
else
|
||||
local BasId = EgtGetInfo( AsseId, GDB_SI.BASE, 'i')
|
||||
if BasId then
|
||||
EgtGroupSwap( AsseId, BasId, true, true)
|
||||
local CopId = EgtGetInfo( AsseId, GDB_SI.COPY, 'i')
|
||||
if CopId then
|
||||
EgtErase( AsseId)
|
||||
EgtSetInfo( BasId, GDB_SI.SOURCE, CopId)
|
||||
else
|
||||
EgtSetStatus( EgtGetFirstNameInGroup( AsseId, 'Box') or GDB_ID.NULL, GDB_ST.ON)
|
||||
end
|
||||
end
|
||||
end
|
||||
-- passo al successivo
|
||||
AsseId = NextId
|
||||
end
|
||||
-- Modifico lo stato dell'assemblaggio
|
||||
EgtBeamShowBuilding( not bOn)
|
||||
|
||||
EgtZoom( SCE_ZM.ALL)
|
||||
|
||||
|
||||
+10
-112
@@ -1,69 +1,10 @@
|
||||
-- ShowSolid.lua by Egaltech s.r.l. 2020/10/06
|
||||
-- ShowSolid.lua by Egaltech s.r.l. 2020/12/12
|
||||
-- Gestione calcolo solido di una Trave
|
||||
|
||||
require( 'EgtBase')
|
||||
_ENV = EgtProtectGlobal()
|
||||
EgtEnableDebug( false)
|
||||
|
||||
-- Funzione per visualizzazione del solido o standard
|
||||
local function Show( PartId, bSolid)
|
||||
local BoxLy = EgtGetFirstNameInGroup( PartId, 'Box')
|
||||
EgtSetStatus( BoxLy or GDB_ID.NULL, EgtIf( bSolid, GDB_ST.OFF, GDB_ST.ON))
|
||||
local OutlineLy = EgtGetFirstNameInGroup( PartId, 'Outline')
|
||||
EgtSetStatus( OutlineLy or GDB_ID.NULL, EgtIf( bSolid, GDB_ST.OFF, GDB_ST.ON))
|
||||
local ProcessingsLy = EgtGetFirstNameInGroup( PartId, 'Processings')
|
||||
EgtSetStatus( ProcessingsLy or GDB_ID.NULL, EgtIf( bSolid, GDB_ST.OFF, GDB_ST.ON))
|
||||
local SolidLy = EgtGetFirstNameInGroup( PartId, 'Solid')
|
||||
EgtSetStatus( SolidLy or GDB_ID.NULL, EgtIf( bSolid, GDB_ST.ON, GDB_ST.OFF))
|
||||
end
|
||||
|
||||
-- Funzione per regolarizzare, se necessario, la superficie della feature
|
||||
local function RegularizeTriMesh( SurfId, DestGrpId, dStep)
|
||||
---- solo per superfici trimesh con poche facce (max 100)
|
||||
local nFacetCnt = EgtSurfTmFacetCount( SurfId)
|
||||
if nFacetCnt > 100 then
|
||||
return SurfId
|
||||
end
|
||||
-- box della superficie
|
||||
local b3Surf = EgtGetBBox( SurfId, GDB_BB.STANDARD)
|
||||
if not b3Surf or b3Surf:isEmpty() or b3Surf:getDimX() < 4 * dStep then
|
||||
return SurfId
|
||||
end
|
||||
-- recupero le facce e le divido in X
|
||||
local dXmin = b3Surf:getMin():getX() - 1
|
||||
local dXmax = b3Surf:getMax():getX() + 1
|
||||
local nStep = floor( ( dXmax - dXmin) / dStep + 0.9)
|
||||
dStep = ( dXmax - dXmin) / nStep
|
||||
local NewSurfId
|
||||
for nF = 0, nFacetCnt - 1 do
|
||||
local FacId = EgtCopySurfTmFacet( SurfId, nF, DestGrpId)
|
||||
local b3Fac = EgtGetBBox( FacId, GDB_BB.STANDARD)
|
||||
local dX2 = dXmin
|
||||
for nI = 1, nStep do
|
||||
local dX1 = dX2
|
||||
dX2 = dX2 + dStep
|
||||
if b3Fac:getMin():getX() < dX2 - GEO.EPS_SMALL and b3Fac:getMax():getX() > dX1 + GEO.EPS_SMALL then
|
||||
EgtCutSurfTmPlane( FacId, Point3d( dX1, 0, 0), -X_AX(), true)
|
||||
EgtCutSurfTmPlane( FacId, Point3d( dX2, 0, 0), X_AX(), false)
|
||||
local LoopId = EgtExtractSurfTmFacetLoops( FacId, 0, DestGrpId)
|
||||
if LoopId then
|
||||
EgtMergeCurvesInCurveCompo( LoopId, 0.001)
|
||||
local TmpSurfId = EgtSurfTmByFlatContour( DestGrpId, LoopId, 0.01)
|
||||
EgtErase( LoopId)
|
||||
if NewSurfId then
|
||||
NewSurfId = EgtSurfTmBySewing( DestGrpId, {NewSurfId, TmpSurfId})
|
||||
else
|
||||
NewSurfId = TmpSurfId
|
||||
end
|
||||
end
|
||||
EgtErase( FacId)
|
||||
FacId = EgtCopySurfTmFacet( SurfId, nF, DestGrpId)
|
||||
end
|
||||
end
|
||||
EgtErase( FacId)
|
||||
end
|
||||
return NewSurfId
|
||||
end
|
||||
|
||||
-- Recupero il pezzo del primo oggetto selezionato
|
||||
local ObjId = EgtGetFirstSelectedObj()
|
||||
@@ -74,60 +15,17 @@ if not PartId or not EgtIsPart( PartId) then
|
||||
end
|
||||
EgtDeselectAll()
|
||||
|
||||
-- Recupero il Box
|
||||
local BoxLy = EgtGetFirstNameInGroup( PartId, 'Box')
|
||||
local BoxId = EgtGetFirstNameInGroup( BoxLy or GDB_ID.NULL, 'Box')
|
||||
if not BoxId then
|
||||
EgtOutBox( 'Trave senza Box', 'Show Solid', 'ERROR')
|
||||
return
|
||||
end
|
||||
|
||||
-- Verifico esistenza del solido
|
||||
local SolidLy = EgtGetFirstNameInGroup( PartId, 'Solid')
|
||||
if not SolidLy then
|
||||
SolidLy = EgtGroup( PartId)
|
||||
EgtSetName( SolidLy, 'Solid')
|
||||
end
|
||||
local SolidId = EgtGetFirstNameInGroup( SolidLy, 'Solid')
|
||||
if not SolidId then
|
||||
SolidId = EgtSurfTmBBox( SolidLy, EgtGetBBoxGlob( BoxId, GDB_BB.STANDARD), true, GDB_RT.GLOB)
|
||||
EgtSetName( SolidId, 'Solid')
|
||||
EgtSetColor( SolidId, Color3d( 255, 160, 32))
|
||||
Show( PartId, true)
|
||||
else
|
||||
Show( PartId, ( EgtGetStatus( SolidLy) == GDB_ST.OFF))
|
||||
-- Se il solido già esiste, ne aggiorno lo stato di visualizzazione
|
||||
local SolidId = EgtBeamGetSolid( PartId)
|
||||
if SolidId and EgtGetInfo( SolidId, 'VALID') then
|
||||
EgtBeamShowSolid( PartId, ( EgtGetCalcStatus( SolidId) == GDB_ST.OFF))
|
||||
EgtDraw()
|
||||
return
|
||||
end
|
||||
local b3Solid = EgtGetBBox( SolidId, GDB_BB.STANDARD)
|
||||
local dStep = 1.23 * min( max( b3Solid:getDimY(), b3Solid:getDimZ()), 2 * min( b3Solid:getDimY(), b3Solid:getDimZ()))
|
||||
|
||||
-- Ciclo su outline e aperture
|
||||
local OutLy = EgtGetFirstNameInGroup( PartId, 'Outline')
|
||||
local OutId = EgtGetFirstInGroup( OutLy)
|
||||
while OutId do
|
||||
if EgtGetInfo( OutId, 'DO', 'i') ~= 0 and EgtGetType( OutId) == GDB_TY.SRF_MESH then
|
||||
local NewSurfId = RegularizeTriMesh( OutId, SolidLy, dStep)
|
||||
EgtSurfTmIntersect( SolidId, NewSurfId, true)
|
||||
if NewSurfId ~= OutId then
|
||||
EgtErase( NewSurfId)
|
||||
end
|
||||
end
|
||||
OutId = EgtGetNext( OutId)
|
||||
end
|
||||
|
||||
-- Ciclo sulle features
|
||||
local ProcLy = EgtGetFirstNameInGroup( PartId, 'Processings')
|
||||
local ProcId = EgtGetFirstInGroup( ProcLy)
|
||||
while ProcId do
|
||||
if EgtGetInfo( ProcId, 'DO', 'i') ~= 0 and EgtGetInfo( ProcId, 'TRIM', 'i') ~= 0 and EgtGetType( ProcId) == GDB_TY.SRF_MESH then
|
||||
local NewSurfId = RegularizeTriMesh( ProcId, SolidLy, dStep)
|
||||
EgtSurfTmIntersect( SolidId, NewSurfId, true)
|
||||
if NewSurfId ~= ProcId then
|
||||
EgtErase( NewSurfId)
|
||||
end
|
||||
end
|
||||
ProcId = EgtGetNext( ProcId)
|
||||
end
|
||||
|
||||
-- Creazione e visualizzazione del solido
|
||||
EgtBeamCalcSolid( PartId, true)
|
||||
EgtBeamShowSolid( PartId, true)
|
||||
EgtDraw()
|
||||
|
||||
-- end
|
||||
Reference in New Issue
Block a user