diff --git a/package.json b/package.json index c6ac5b9..89a1fc9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "bim-fragment", - "version": "1.0.8", + "version": "1.0.9", "description": "3D BIM Geometry API", "main": "index.js", "scripts": { diff --git a/resources/openbim-components.js b/resources/openbim-components.js index 93166fd..b7d783c 100644 --- a/resources/openbim-components.js +++ b/resources/openbim-components.js @@ -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); @@ -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; @@ -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); @@ -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); @@ -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) { @@ -11840,6 +11879,9 @@ 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); @@ -11847,6 +11889,10 @@ class Serializer { 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); @@ -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(); diff --git a/src/flatbuffers/fragment.fbs b/src/flatbuffers/fragment.fbs index c94bb89..e8045c8 100644 --- a/src/flatbuffers/fragment.fbs +++ b/src/flatbuffers/fragment.fbs @@ -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 { diff --git a/src/flatbuffers/fragments/index/fragments-group.ts b/src/flatbuffers/fragments/index/fragments-group.ts index 63f33ca..3396ff7 100644 --- a/src/flatbuffers/fragments/index/fragments-group.ts +++ b/src/flatbuffers/fragments/index/fragments-group.ts @@ -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) { @@ -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; @@ -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); @@ -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); } } diff --git a/src/fragments-group.ts b/src/fragments-group.ts index 110cb7e..9d21039 100644 --- a/src/fragments-group.ts +++ b/src/fragments-group.ts @@ -1,6 +1,7 @@ import * as THREE from "three"; import { Fragment } from "./fragment"; +// TODO: Document this export class FragmentsGroup extends THREE.Group { items: Fragment[] = []; matrix = new THREE.Matrix4(); @@ -8,6 +9,12 @@ export class FragmentsGroup extends THREE.Group { // 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) { diff --git a/src/serializer.ts b/src/serializer.ts index 6ad1fd7..cabdd4b 100644 --- a/src/serializer.ts +++ b/src/serializer.ts @@ -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); @@ -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); @@ -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();