Skip to content

Commit

Permalink
Add IFC metadata to fragmentsgroup
Browse files Browse the repository at this point in the history
  • Loading branch information
agviegas committed Jul 14, 2023
1 parent b0ab2f0 commit ad671b6
Show file tree
Hide file tree
Showing 6 changed files with 130 additions and 5 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "bim-fragment",
"version": "1.0.8",
"version": "1.0.9",
"description": "3D BIM Geometry API",
"main": "index.js",
"scripts": {
Expand Down
56 changes: 54 additions & 2 deletions resources/openbim-components.js
Original file line number Diff line number Diff line change
Expand Up @@ -11603,8 +11603,24 @@ let FragmentsGroup$1 = class FragmentsGroup {
const offset = this.bb.__offset(this.bb_pos, 20);
return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;
}
ifcName(optionalEncoding) {
const offset = this.bb.__offset(this.bb_pos, 22);
return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;
}
ifcDescription(optionalEncoding) {
const offset = this.bb.__offset(this.bb_pos, 24);
return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;
}
ifcSchema(optionalEncoding) {
const offset = this.bb.__offset(this.bb_pos, 26);
return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;
}
maxExpressId() {
const offset = this.bb.__offset(this.bb_pos, 28);
return offset ? this.bb.readUint32(this.bb_pos + offset) : 0;
}
static startFragmentsGroup(builder) {
builder.startObject(9);
builder.startObject(13);
}
static addItems(builder, itemsOffset) {
builder.addFieldOffset(0, itemsOffset, 0);
Expand Down Expand Up @@ -11703,6 +11719,18 @@ let FragmentsGroup$1 = class FragmentsGroup {
static addId(builder, idOffset) {
builder.addFieldOffset(8, idOffset, 0);
}
static addIfcName(builder, ifcNameOffset) {
builder.addFieldOffset(9, ifcNameOffset, 0);
}
static addIfcDescription(builder, ifcDescriptionOffset) {
builder.addFieldOffset(10, ifcDescriptionOffset, 0);
}
static addIfcSchema(builder, ifcSchemaOffset) {
builder.addFieldOffset(11, ifcSchemaOffset, 0);
}
static addMaxExpressId(builder, maxExpressId) {
builder.addFieldInt32(12, maxExpressId, 0);
}
static endFragmentsGroup(builder) {
const offset = builder.endObject();
return offset;
Expand All @@ -11713,7 +11741,7 @@ let FragmentsGroup$1 = class FragmentsGroup {
static finishSizePrefixedFragmentsGroupBuffer(builder, offset) {
builder.finish(offset, undefined, true);
}
static createFragmentsGroup(builder, itemsOffset, matrixOffset, idsOffset, itemsKeysOffset, itemsKeysIndicesOffset, itemsRelsOffset, itemsRelsIndicesOffset, fragmentKeysOffset, idOffset) {
static createFragmentsGroup(builder, itemsOffset, matrixOffset, idsOffset, itemsKeysOffset, itemsKeysIndicesOffset, itemsRelsOffset, itemsRelsIndicesOffset, fragmentKeysOffset, idOffset, ifcNameOffset, ifcDescriptionOffset, ifcSchemaOffset, maxExpressId) {
FragmentsGroup.startFragmentsGroup(builder);
FragmentsGroup.addItems(builder, itemsOffset);
FragmentsGroup.addMatrix(builder, matrixOffset);
Expand All @@ -11724,10 +11752,15 @@ let FragmentsGroup$1 = class FragmentsGroup {
FragmentsGroup.addItemsRelsIndices(builder, itemsRelsIndicesOffset);
FragmentsGroup.addFragmentKeys(builder, fragmentKeysOffset);
FragmentsGroup.addId(builder, idOffset);
FragmentsGroup.addIfcName(builder, ifcNameOffset);
FragmentsGroup.addIfcDescription(builder, ifcDescriptionOffset);
FragmentsGroup.addIfcSchema(builder, ifcSchemaOffset);
FragmentsGroup.addMaxExpressId(builder, maxExpressId);
return FragmentsGroup.endFragmentsGroup(builder);
}
};

// TODO: Document this
class FragmentsGroup extends THREE.Group {
constructor() {
super(...arguments);
Expand All @@ -11736,6 +11769,12 @@ class FragmentsGroup extends THREE.Group {
this.keyFragments = {};
// data: [expressID: number]: [keys, rels]
this.data = {};
this.ifcMetadata = {
name: "",
description: "",
schema: "",
maxExpressId: 0,
};
}
dispose(disposeResources = true) {
for (const fragment of this.items) {
Expand Down Expand Up @@ -11840,13 +11879,20 @@ class Serializer {
relsCounter += rels.length;
}
const groupID = builder.createString(group.uuid);
const ifcName = builder.createString(group.ifcMetadata.name);
const ifcDescription = builder.createString(group.ifcMetadata.description);
const ifcSchema = builder.createString(group.ifcMetadata.schema);
const keysIVector = G.createItemsKeysIndicesVector(builder, keyIndices);
const keysVector = G.createItemsKeysVector(builder, itemsKeys);
const relsIVector = G.createItemsRelsIndicesVector(builder, relsIndices);
const relsVector = G.createItemsRelsVector(builder, itemsRels);
const idsVector = G.createIdsVector(builder, ids);
G.startFragmentsGroup(builder);
G.addId(builder, groupID);
G.addIfcName(builder, ifcName);
G.addIfcDescription(builder, ifcDescription);
G.addIfcSchema(builder, ifcSchema);
G.addMaxExpressId(builder, group.ifcMetadata.maxExpressId);
G.addItems(builder, itemsVector);
G.addFragmentKeys(builder, fragmentKeysRef);
G.addIds(builder, idsVector);
Expand Down Expand Up @@ -11933,6 +11979,12 @@ class Serializer {
constructFragmentGroup(group) {
const fragmentsGroup = new FragmentsGroup();
fragmentsGroup.uuid = group.id() || fragmentsGroup.uuid;
fragmentsGroup.ifcMetadata = {
name: group.ifcName() || "",
description: group.ifcDescription() || "",
schema: group.ifcSchema() || "",
maxExpressId: group.maxExpressId() || 0,
};
const matrixArray = group.matrixArray() || new Float32Array();
const ids = group.idsArray() || new Uint32Array();
const keysIndices = group.itemsKeysIndicesArray() || new Uint32Array();
Expand Down
4 changes: 4 additions & 0 deletions src/flatbuffers/fragment.fbs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,10 @@ table FragmentsGroup {
items_rels_indices: [uint];
fragment_keys: string;
id: string;
ifc_name: string;
ifc_description: string;
ifc_schema: string;
max_express_id: uint;
}

table Fragment {
Expand Down
50 changes: 48 additions & 2 deletions src/flatbuffers/fragments/index/fragments-group.ts
Original file line number Diff line number Diff line change
Expand Up @@ -137,8 +137,34 @@ id(optionalEncoding?:any):string|Uint8Array|null {
return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;
}

ifcName():string|null
ifcName(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null
ifcName(optionalEncoding?:any):string|Uint8Array|null {
const offset = this.bb!.__offset(this.bb_pos, 22);
return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;
}

ifcDescription():string|null
ifcDescription(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null
ifcDescription(optionalEncoding?:any):string|Uint8Array|null {
const offset = this.bb!.__offset(this.bb_pos, 24);
return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;
}

ifcSchema():string|null
ifcSchema(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null
ifcSchema(optionalEncoding?:any):string|Uint8Array|null {
const offset = this.bb!.__offset(this.bb_pos, 26);
return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;
}

maxExpressId():number {
const offset = this.bb!.__offset(this.bb_pos, 28);
return offset ? this.bb!.readUint32(this.bb_pos + offset) : 0;
}

static startFragmentsGroup(builder:flatbuffers.Builder) {
builder.startObject(9);
builder.startObject(13);
}

static addItems(builder:flatbuffers.Builder, itemsOffset:flatbuffers.Offset) {
Expand Down Expand Up @@ -291,6 +317,22 @@ static addId(builder:flatbuffers.Builder, idOffset:flatbuffers.Offset) {
builder.addFieldOffset(8, idOffset, 0);
}

static addIfcName(builder:flatbuffers.Builder, ifcNameOffset:flatbuffers.Offset) {
builder.addFieldOffset(9, ifcNameOffset, 0);
}

static addIfcDescription(builder:flatbuffers.Builder, ifcDescriptionOffset:flatbuffers.Offset) {
builder.addFieldOffset(10, ifcDescriptionOffset, 0);
}

static addIfcSchema(builder:flatbuffers.Builder, ifcSchemaOffset:flatbuffers.Offset) {
builder.addFieldOffset(11, ifcSchemaOffset, 0);
}

static addMaxExpressId(builder:flatbuffers.Builder, maxExpressId:number) {
builder.addFieldInt32(12, maxExpressId, 0);
}

static endFragmentsGroup(builder:flatbuffers.Builder):flatbuffers.Offset {
const offset = builder.endObject();
return offset;
Expand All @@ -304,7 +346,7 @@ static finishSizePrefixedFragmentsGroupBuffer(builder:flatbuffers.Builder, offse
builder.finish(offset, undefined, true);
}

static createFragmentsGroup(builder:flatbuffers.Builder, itemsOffset:flatbuffers.Offset, matrixOffset:flatbuffers.Offset, idsOffset:flatbuffers.Offset, itemsKeysOffset:flatbuffers.Offset, itemsKeysIndicesOffset:flatbuffers.Offset, itemsRelsOffset:flatbuffers.Offset, itemsRelsIndicesOffset:flatbuffers.Offset, fragmentKeysOffset:flatbuffers.Offset, idOffset:flatbuffers.Offset):flatbuffers.Offset {
static createFragmentsGroup(builder:flatbuffers.Builder, itemsOffset:flatbuffers.Offset, matrixOffset:flatbuffers.Offset, idsOffset:flatbuffers.Offset, itemsKeysOffset:flatbuffers.Offset, itemsKeysIndicesOffset:flatbuffers.Offset, itemsRelsOffset:flatbuffers.Offset, itemsRelsIndicesOffset:flatbuffers.Offset, fragmentKeysOffset:flatbuffers.Offset, idOffset:flatbuffers.Offset, ifcNameOffset:flatbuffers.Offset, ifcDescriptionOffset:flatbuffers.Offset, ifcSchemaOffset:flatbuffers.Offset, maxExpressId:number):flatbuffers.Offset {
FragmentsGroup.startFragmentsGroup(builder);
FragmentsGroup.addItems(builder, itemsOffset);
FragmentsGroup.addMatrix(builder, matrixOffset);
Expand All @@ -315,6 +357,10 @@ static createFragmentsGroup(builder:flatbuffers.Builder, itemsOffset:flatbuffers
FragmentsGroup.addItemsRelsIndices(builder, itemsRelsIndicesOffset);
FragmentsGroup.addFragmentKeys(builder, fragmentKeysOffset);
FragmentsGroup.addId(builder, idOffset);
FragmentsGroup.addIfcName(builder, ifcNameOffset);
FragmentsGroup.addIfcDescription(builder, ifcDescriptionOffset);
FragmentsGroup.addIfcSchema(builder, ifcSchemaOffset);
FragmentsGroup.addMaxExpressId(builder, maxExpressId);
return FragmentsGroup.endFragmentsGroup(builder);
}
}
7 changes: 7 additions & 0 deletions src/fragments-group.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,20 @@
import * as THREE from "three";
import { Fragment } from "./fragment";

// TODO: Document this
export class FragmentsGroup extends THREE.Group {
items: Fragment[] = [];
matrix = new THREE.Matrix4();
keyFragments: { [key: number]: string } = {};
// data: [expressID: number]: [keys, rels]
data: { [expressID: number]: [number[], number[]] } = {};
properties: any;
ifcMetadata = {
name: "",
description: "",
schema: "",
maxExpressId: 0,
};

dispose(disposeResources = true) {
for (const fragment of this.items) {
Expand Down
16 changes: 16 additions & 0 deletions src/serializer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,10 @@ export class Serializer {

const groupID = builder.createString(group.uuid);

const ifcName = builder.createString(group.ifcMetadata.name);
const ifcDescription = builder.createString(group.ifcMetadata.description);
const ifcSchema = builder.createString(group.ifcMetadata.schema);

const keysIVector = G.createItemsKeysIndicesVector(builder, keyIndices);
const keysVector = G.createItemsKeysVector(builder, itemsKeys);
const relsIVector = G.createItemsRelsIndicesVector(builder, relsIndices);
Expand All @@ -122,6 +126,10 @@ export class Serializer {

G.startFragmentsGroup(builder);
G.addId(builder, groupID);
G.addIfcName(builder, ifcName);
G.addIfcDescription(builder, ifcDescription);
G.addIfcSchema(builder, ifcSchema);
G.addMaxExpressId(builder, group.ifcMetadata.maxExpressId);
G.addItems(builder, itemsVector);
G.addFragmentKeys(builder, fragmentKeysRef);
G.addIds(builder, idsVector);
Expand Down Expand Up @@ -231,6 +239,14 @@ export class Serializer {
const fragmentsGroup = new FragmentsGroup();

fragmentsGroup.uuid = group.id() || fragmentsGroup.uuid;

fragmentsGroup.ifcMetadata = {
name: group.ifcName() || "",
description: group.ifcDescription() || "",
schema: group.ifcSchema() || "",
maxExpressId: group.maxExpressId() || 0,
};

const matrixArray = group.matrixArray() || new Float32Array();
const ids = group.idsArray() || new Uint32Array();
const keysIndices = group.itemsKeysIndicesArray() || new Uint32Array();
Expand Down

0 comments on commit ad671b6

Please sign in to comment.