DataBeamWall :

- modifiche per utilizzo nuove funzioni lua di BeamMgr.
This commit is contained in:
Dario Sassi
2020-12-16 07:38:12 +00:00
parent af1a4e6819
commit bc716ad0c7
2 changed files with 15 additions and 163 deletions
+5 -51
View File
@@ -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
View File
@@ -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