terminal Consola

La plataforma bimrocket ofereix actualment les següents aplicacions:

Aquesta secció descriu els usos i el funcionament de l'aplicació de consola.

Usos

L'aplicació de consola (bimrocket-console) està especialment indicada per a aquests casos d'ús:

Instal·lació

Per a instal·lar l'aplicació de consola cal seguir els següents passos:

console

Operació

La consola ofereix dos modes de funcionament:

La majoria de les comandes que ofereix la consola s'expressen en el llenguatge de programació Javascript i segueixen el format comanda(arg1, arg2, ...), si bé hi ha dues comandes especials que tenen una sintaxi diferent:

En mode interactiu, es pot executar una comanda utilitzant la sintaxi simplificada on no és necessari escriure parèntesis, comes ni cometes. Per exemple, la comanda: addPsetRule("ASF_Geometria", "ASF_Volum", "CAT_Volum") es podria llançar així: addPsetRule ASF_Geometria ASF_Volum CAT_Volum. Quan s'utilitza la sintaxi simplificada no és possible referenciar variables ni funcions.

La consola també admet qualsevol expressió vàlida del llenguatge Javascript.

Branques d'un model

La càrrega d'un model IFC es fa invocant la comanda loadIFC:

> loadIFC("/home/realor/model.ifc")
Loading from /home/realor/model.ifc (2,45 MB)...
Load completed in 1.001 seconds.

Aquesta comanda carrega tots els objectes del fitxer IFC a la branca "main", on una branca (branch) es pot veure com una llista d'objectes IFC.

Per a un mateix model, podem crear diferents branques, on cadascuna d'elles pot contenir una selecció diferent d'objectes del model.

Mentre hi hagi un model carregat, sempre existirà:

La majoria de comandes de bimrocket-console actuen sobre la branca o el cursor actual.

Es pot saber quina és la branca actual invocant la comanda branches:

> branches
branches()
main
walls (current)
roots

Aquesta comanda ens mostra totes les branques existents i quina d'elles és l'actual.

Podem veure quin és l'objecte apuntat pel cursor actual mitjançant la comanda list:

> list
list()
  #13410 IfcWallStandardCase:
  [0] GlobalId: 3rPX_Juz59peXXY6wDJl18
  [1] OwnerHistory: IfcOwnerHistory[...]
  [2] Name: Wand-Ext-ERDG-1
  [3] Description: null
  [4] ObjectType: null
  [5] ObjectPlacement: IfcLocalPlacement[...]
  [6] Representation: IfcProductDefinitionShape[...]
  [7] Tag: BEF1E630-DE4B-41C5-AD-66-B87F1A8D67A1
  [8] PredefinedType: null
...

Si el cursor apunta a una entitat ens mostrarà els seus atributs i si apunta a una col·lecció, els elements que aquesta contingui. Podem moure el cursor a un dels objectes interiors mitjançant la comanda enter(<index>) o enter(<attribute>):

> enter 5
> list
list()
#13386 IfcLocalPlacement:
  [0] PlacementRelTo: IfcLocalPlacement[...]
  [1] RelativePlacement: IfcAxis2Placement3D[...]

Per moure el cursor a l'objecte pare cal fer servir la comanda exit().

Podem fer una cerca d'objectes que compleixin una certa condició mitjançant la comanda find:

> find(e => e.isWall("IfcWindow") && e.get("OverallWidth") > 2, "walls")
Matches found: 4
Current branch is walls

Aquesta comanda afegeix a la branca indicada, walls, tots els objectes de la branca actual que compleixin la condició especificada (parets de més de 2 metres d'amplada). Si la branca no existeix, la crea i la fa actual.

Podem canviar de branca mitjançant la comanda branch:

> branch main
branch("main")
current branch is main

Aquesta comanda posiciona el cursor sobre la llista superior de la branca indicada.

És possible saber quants objectes hi ha de cada tipus, a partir del cursor actual, mitjançant la comanda histogram:

> histogram
histogram()
Entities found: 44249
IfcAnnotation: 14
IfcApplication: 1
IfcArbitraryClosedProfileDef: 22
IfcAxis2Placement2D: 94
IfcAxis2Placement3D: 364
...

Exemples

Aquesta seria la seqüència de comandes per a extreure les parets (IfcWall) d'un fitxer IFC:

> loadIFC("/home/realor/model.ifc")
Loading from /home/realor/model.ifc (2,45 MB)...
Load completed in 1.001 seconds.
> find(e => e.is("IfcWall"))
Matches found: 13
Current branch is output
> exportIFC("/home/realor/walls.ifc")
Exporting to /home/realor/walls.ifc...
Export completed in 0.033 seconds.

Per canviar el nom de les propietats d'un IfcPropertySet podríem fer servir aquestes comandes:

> loadIFC("/home/realor/model.ifc")
Loading from /home/realor/model.ifc (2,45 MB)...
Load completed in 1.001 seconds.
> addPsetRule("ASF_Geometria", "ASF_Volum", "CAT_Volum")
> addPsetRule("ASF_Geometria", "ASF_Perimetre", "CAT_Perimetre")
> addPsetRule("ASF_Geometria", "ASF_Alçada", "CAT_Alçada")
> transformPsets()
...
> exportIFC("/home/realor/model_cat.ifc")
Exporting to /home/realor/model_cat.ifc...
Export completed in 0.824 seconds.

El següent programa Javascript es pot executar en mode per lots per transformar les propietats dels IfcPropertySet de tots arxius IFC continguts en un determinat directori:

const inputDir = "/home/realor/Descargas/";
const outputDir = "/home/realor/output_ifc/";

addPsetRule("ASF_Geometria", "ASF_Volum", "CAT_Volum");
addPsetRule("ASF_Geometria", "ASF_Perimetre", "CAT_Perimetre");
addPsetRule("ASF_Geometria", "ASF_Alçada", "CAT_Alçada");

const files = paths(inputDir, "*.ifc");
for (let file of files)
{
  console.info("---------------------");
  try
  {
    loadIFC(inputDir + file);
    transformPsets();
    exportIFC(outputDir + file);
  }
  catch (ex)
  {
    console.error(ex);
  }
}