@thatopen/components 2.4.0-alpha.9 → 2.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core/Components/index.d.ts +1 -1
- package/dist/core/ConfigManager/src/configurator.d.ts +5 -3
- package/dist/core/ShadowedScene/index.d.ts +1 -2
- package/dist/core/Types/src/component-with-ui.d.ts +8 -3
- package/dist/core/Types/src/config-types.d.ts +5 -0
- package/dist/core/Types/src/data-map.d.ts +3 -1
- package/dist/core/Types/src/data-set.d.ts +1 -2
- package/dist/core/Viewpoints/src/viewpoint.d.ts +2 -2
- package/dist/fragments/Classifier/index.d.ts +15 -2
- package/dist/fragments/IfcGeometryTiler/index.d.ts +1 -0
- package/dist/ifc/IfcIsolator/index.d.ts +24 -0
- package/dist/ifc/IfcPropertiesManager/index.d.ts +7 -3
- package/dist/ifc/IfcRelationsIndexer/index.d.ts +8 -18
- package/dist/ifc/IfcRelationsIndexer/src/newVersion.d.ts +51 -0
- package/dist/ifc/IfcRelationsIndexer/src/types.d.ts +16 -0
- package/dist/ifc/index.d.ts +1 -0
- package/dist/index.cjs +416 -240
- package/dist/index.min.cjs +3 -3
- package/dist/index.min.mjs +3 -3
- package/dist/index.mjs +417 -241
- package/dist/namespace.d.ts +3745 -3604
- package/dist/openbim/BCFTopics/index.d.ts +1 -2
- package/dist/openbim/BCFTopics/src/Topic.d.ts +5 -1
- package/dist/openbim/BCFTopics/src/bcf-topics-config.d.ts +1 -2
- package/dist/openbim/IDSSpecifications/index.d.ts +1 -2
- package/dist/openbim/IDSSpecifications/src/Specification.d.ts +4 -3
- package/dist/openbim/IDSSpecifications/src/facets/Attribute.d.ts +1 -0
- package/dist/openbim/IDSSpecifications/src/facets/Classification.d.ts +1 -0
- package/dist/openbim/IDSSpecifications/src/facets/Entity.d.ts +1 -0
- package/dist/openbim/IDSSpecifications/src/facets/Facet.d.ts +2 -1
- package/dist/openbim/IDSSpecifications/src/facets/Material.d.ts +1 -0
- package/dist/openbim/IDSSpecifications/src/facets/PartOf.d.ts +1 -0
- package/dist/openbim/IDSSpecifications/src/facets/Property.d.ts +3 -0
- package/dist/openbim/IDSSpecifications/src/types.d.ts +39 -20
- package/package.json +5 -5
package/dist/index.cjs
CHANGED
|
@@ -3827,7 +3827,9 @@ class DataMap extends Map {
|
|
|
3827
3827
|
this.onCleared.trigger();
|
|
3828
3828
|
}
|
|
3829
3829
|
/**
|
|
3830
|
-
* Sets the value for the specified key in the map
|
|
3830
|
+
* Sets the value for the specified key in the map.
|
|
3831
|
+
* If the item is new, then onItemSet is triggered.
|
|
3832
|
+
* If the item is already in the map, then onItemUpdated is triggered.
|
|
3831
3833
|
*
|
|
3832
3834
|
* @param key - The key of the item to set.
|
|
3833
3835
|
* @param value - The value of the item to set.
|
|
@@ -3877,6 +3879,97 @@ class DataMap extends Map {
|
|
|
3877
3879
|
}
|
|
3878
3880
|
class ComponentWithUI extends Component {
|
|
3879
3881
|
}
|
|
3882
|
+
class ControlsUtils {
|
|
3883
|
+
static isEntry(item) {
|
|
3884
|
+
const types = /* @__PURE__ */ new Set([
|
|
3885
|
+
"Boolean",
|
|
3886
|
+
"Color",
|
|
3887
|
+
"Text",
|
|
3888
|
+
"Number",
|
|
3889
|
+
"Select",
|
|
3890
|
+
"Vector3",
|
|
3891
|
+
"TextSet",
|
|
3892
|
+
"None"
|
|
3893
|
+
]);
|
|
3894
|
+
return types.has(item.type);
|
|
3895
|
+
}
|
|
3896
|
+
static copySchema(schema, copy = {}) {
|
|
3897
|
+
for (const name in schema) {
|
|
3898
|
+
const entry = schema[name];
|
|
3899
|
+
if (this.isEntry(entry)) {
|
|
3900
|
+
copy[name] = this.copyEntry(entry);
|
|
3901
|
+
} else {
|
|
3902
|
+
copy[name] = {};
|
|
3903
|
+
this.copySchema(entry, copy[name]);
|
|
3904
|
+
}
|
|
3905
|
+
}
|
|
3906
|
+
return copy;
|
|
3907
|
+
}
|
|
3908
|
+
static copyEntry(controlEntry) {
|
|
3909
|
+
if (controlEntry.type === "Boolean") {
|
|
3910
|
+
const entry = controlEntry;
|
|
3911
|
+
return {
|
|
3912
|
+
type: entry.type,
|
|
3913
|
+
value: entry.value
|
|
3914
|
+
};
|
|
3915
|
+
}
|
|
3916
|
+
if (controlEntry.type === "Color") {
|
|
3917
|
+
const entry = controlEntry;
|
|
3918
|
+
return {
|
|
3919
|
+
type: entry.type,
|
|
3920
|
+
value: entry.value.clone()
|
|
3921
|
+
};
|
|
3922
|
+
}
|
|
3923
|
+
if (controlEntry.type === "Text") {
|
|
3924
|
+
const entry = controlEntry;
|
|
3925
|
+
return {
|
|
3926
|
+
type: entry.type,
|
|
3927
|
+
value: entry.value
|
|
3928
|
+
};
|
|
3929
|
+
}
|
|
3930
|
+
if (controlEntry.type === "Number") {
|
|
3931
|
+
const entry = controlEntry;
|
|
3932
|
+
return {
|
|
3933
|
+
type: entry.type,
|
|
3934
|
+
value: entry.value,
|
|
3935
|
+
min: entry.min,
|
|
3936
|
+
max: entry.max,
|
|
3937
|
+
interpolable: entry.interpolable
|
|
3938
|
+
};
|
|
3939
|
+
}
|
|
3940
|
+
if (controlEntry.type === "Select") {
|
|
3941
|
+
const entry = controlEntry;
|
|
3942
|
+
return {
|
|
3943
|
+
type: entry.type,
|
|
3944
|
+
value: entry.value,
|
|
3945
|
+
multiple: entry.multiple,
|
|
3946
|
+
options: new Set(entry.options)
|
|
3947
|
+
};
|
|
3948
|
+
}
|
|
3949
|
+
if (controlEntry.type === "Vector3") {
|
|
3950
|
+
const entry = controlEntry;
|
|
3951
|
+
return {
|
|
3952
|
+
type: entry.type,
|
|
3953
|
+
value: entry.value.clone()
|
|
3954
|
+
};
|
|
3955
|
+
}
|
|
3956
|
+
if (controlEntry.type === "TextSet") {
|
|
3957
|
+
const entry = controlEntry;
|
|
3958
|
+
return {
|
|
3959
|
+
type: entry.type,
|
|
3960
|
+
value: new Set(entry.value)
|
|
3961
|
+
};
|
|
3962
|
+
}
|
|
3963
|
+
if (controlEntry.type === "None") {
|
|
3964
|
+
const entry = controlEntry;
|
|
3965
|
+
return {
|
|
3966
|
+
type: entry.type,
|
|
3967
|
+
value: entry.value
|
|
3968
|
+
};
|
|
3969
|
+
}
|
|
3970
|
+
throw new Error("Invalid entry!");
|
|
3971
|
+
}
|
|
3972
|
+
}
|
|
3880
3973
|
class EventManager {
|
|
3881
3974
|
constructor() {
|
|
3882
3975
|
/**
|
|
@@ -5385,7 +5478,7 @@ const _Components = class _Components {
|
|
|
5385
5478
|
/**
|
|
5386
5479
|
* The version of the @thatopen/components library.
|
|
5387
5480
|
*/
|
|
5388
|
-
__publicField(_Components, "release", "2.4.
|
|
5481
|
+
__publicField(_Components, "release", "2.4.1");
|
|
5389
5482
|
let Components = _Components;
|
|
5390
5483
|
class SimpleWorld extends Base {
|
|
5391
5484
|
constructor() {
|
|
@@ -5552,76 +5645,69 @@ class Configurator {
|
|
|
5552
5645
|
configManager.list.set(this.uuid, this);
|
|
5553
5646
|
}
|
|
5554
5647
|
get controls() {
|
|
5555
|
-
|
|
5556
|
-
for (const name in this._config) {
|
|
5557
|
-
const entry = this._config[name];
|
|
5558
|
-
copy[name] = this.copyEntry(entry);
|
|
5559
|
-
}
|
|
5560
|
-
return copy;
|
|
5648
|
+
return ControlsUtils.copySchema(this._config);
|
|
5561
5649
|
}
|
|
5562
|
-
|
|
5563
|
-
|
|
5564
|
-
|
|
5565
|
-
|
|
5566
|
-
|
|
5567
|
-
|
|
5568
|
-
|
|
5569
|
-
|
|
5570
|
-
|
|
5571
|
-
|
|
5572
|
-
|
|
5573
|
-
|
|
5574
|
-
|
|
5575
|
-
|
|
5576
|
-
|
|
5577
|
-
|
|
5578
|
-
|
|
5579
|
-
|
|
5580
|
-
|
|
5581
|
-
|
|
5582
|
-
|
|
5583
|
-
|
|
5584
|
-
|
|
5585
|
-
|
|
5586
|
-
|
|
5587
|
-
|
|
5588
|
-
|
|
5589
|
-
|
|
5590
|
-
|
|
5591
|
-
|
|
5592
|
-
|
|
5593
|
-
|
|
5594
|
-
|
|
5595
|
-
|
|
5596
|
-
|
|
5597
|
-
|
|
5598
|
-
|
|
5599
|
-
|
|
5600
|
-
|
|
5601
|
-
|
|
5602
|
-
|
|
5603
|
-
|
|
5604
|
-
|
|
5605
|
-
|
|
5606
|
-
|
|
5607
|
-
|
|
5608
|
-
|
|
5609
|
-
|
|
5610
|
-
|
|
5611
|
-
|
|
5612
|
-
|
|
5613
|
-
|
|
5614
|
-
|
|
5615
|
-
}
|
|
5650
|
+
set(data) {
|
|
5651
|
+
for (const name in data) {
|
|
5652
|
+
if (name in this) {
|
|
5653
|
+
const key = name;
|
|
5654
|
+
this[key] = data[name].value;
|
|
5655
|
+
}
|
|
5656
|
+
}
|
|
5657
|
+
}
|
|
5658
|
+
export(controls = this._config, exported = {}) {
|
|
5659
|
+
for (const id in controls) {
|
|
5660
|
+
const control = controls[id];
|
|
5661
|
+
const isControl = ControlsUtils.isEntry(control);
|
|
5662
|
+
if (isControl) {
|
|
5663
|
+
if (control.type === "Color") {
|
|
5664
|
+
const { r, g, b } = control.value;
|
|
5665
|
+
exported[id] = { ...control, value: { r, g, b } };
|
|
5666
|
+
} else if (control.type === "Vector3") {
|
|
5667
|
+
const { x, y, z } = control.value;
|
|
5668
|
+
exported[id] = { ...control, value: { x, y, z } };
|
|
5669
|
+
} else if (control.type === "TextSet") {
|
|
5670
|
+
const value = Array.from(control.value);
|
|
5671
|
+
exported[id] = { ...control, value };
|
|
5672
|
+
} else if (control.type === "Select") {
|
|
5673
|
+
const options = Array.from(control.options);
|
|
5674
|
+
exported[id] = { ...control, options };
|
|
5675
|
+
} else {
|
|
5676
|
+
exported[id] = { ...control };
|
|
5677
|
+
}
|
|
5678
|
+
} else {
|
|
5679
|
+
exported[id] = {};
|
|
5680
|
+
this.export(control, exported[id]);
|
|
5681
|
+
}
|
|
5682
|
+
}
|
|
5683
|
+
return exported;
|
|
5684
|
+
}
|
|
5685
|
+
import(exported, imported = {}, first = true) {
|
|
5686
|
+
for (const id in exported) {
|
|
5687
|
+
const control = exported[id];
|
|
5688
|
+
const isControl = ControlsUtils.isEntry(control);
|
|
5689
|
+
if (isControl) {
|
|
5690
|
+
if (control.type === "Color") {
|
|
5691
|
+
const { r, g, b } = control.value;
|
|
5692
|
+
imported[id] = { ...control, value: new THREE__namespace.Color(r, g, b) };
|
|
5693
|
+
} else if (control.type === "Vector3") {
|
|
5694
|
+
const { x, y, z } = control.value;
|
|
5695
|
+
imported[id] = { ...control, value: new THREE__namespace.Vector3(x, y, z) };
|
|
5696
|
+
} else if (control.type === "TextSet") {
|
|
5697
|
+
imported[id] = { ...control, value: new Set(control.value) };
|
|
5698
|
+
} else if (control.type === "Select") {
|
|
5699
|
+
imported[id] = { ...control, options: new Set(control.options) };
|
|
5700
|
+
} else {
|
|
5701
|
+
imported[id] = { ...control };
|
|
5702
|
+
}
|
|
5703
|
+
} else {
|
|
5704
|
+
imported[id] = {};
|
|
5705
|
+
this.import(control, imported[id], false);
|
|
5706
|
+
}
|
|
5616
5707
|
}
|
|
5617
|
-
if (
|
|
5618
|
-
|
|
5619
|
-
return {
|
|
5620
|
-
type: entry.type,
|
|
5621
|
-
value: entry.value
|
|
5622
|
-
};
|
|
5708
|
+
if (first) {
|
|
5709
|
+
this.set(imported);
|
|
5623
5710
|
}
|
|
5624
|
-
throw new Error("Invalid entry!");
|
|
5625
5711
|
}
|
|
5626
5712
|
}
|
|
5627
5713
|
const _ConfigManager = class _ConfigManager extends Component {
|
|
@@ -11089,6 +11175,9 @@ class SimplePlane {
|
|
|
11089
11175
|
* @param {boolean} state - The new enabled state.
|
|
11090
11176
|
*/
|
|
11091
11177
|
set enabled(state) {
|
|
11178
|
+
if (this.world.isDisposing) {
|
|
11179
|
+
return;
|
|
11180
|
+
}
|
|
11092
11181
|
if (!this.world.renderer) {
|
|
11093
11182
|
throw new Error("No renderer found for clipping plane!");
|
|
11094
11183
|
}
|
|
@@ -15331,7 +15420,8 @@ const GeometryTypes = /* @__PURE__ */ new Set([
|
|
|
15331
15420
|
3958567839,
|
|
15332
15421
|
2513912981,
|
|
15333
15422
|
2830218821,
|
|
15334
|
-
427810014
|
|
15423
|
+
427810014,
|
|
15424
|
+
2916149573
|
|
15335
15425
|
]);
|
|
15336
15426
|
const _IfcJsonExporter = class _IfcJsonExporter extends Component {
|
|
15337
15427
|
constructor(components) {
|
|
@@ -15885,7 +15975,7 @@ const _IfcPropertiesManager = class _IfcPropertiesManager extends Component {
|
|
|
15885
15975
|
*/
|
|
15886
15976
|
async newPset(model, name, description) {
|
|
15887
15977
|
const schema = _IfcPropertiesManager.getIFCSchema(model);
|
|
15888
|
-
const { ownerHistoryHandle } = await this.getOwnerHistory(model);
|
|
15978
|
+
const { handle: ownerHistoryHandle } = await this.getOwnerHistory(model);
|
|
15889
15979
|
const psetGlobalId = this.newGUID(model);
|
|
15890
15980
|
const psetName = new WEBIFC__namespace[schema].IfcLabel(name);
|
|
15891
15981
|
const psetDescription = description ? new WEBIFC__namespace[schema].IfcText(description) : null;
|
|
@@ -15897,18 +15987,8 @@ const _IfcPropertiesManager = class _IfcPropertiesManager extends Component {
|
|
|
15897
15987
|
[]
|
|
15898
15988
|
);
|
|
15899
15989
|
pset.expressID = this.getNewExpressID(model);
|
|
15900
|
-
|
|
15901
|
-
|
|
15902
|
-
relGlobalId,
|
|
15903
|
-
ownerHistoryHandle,
|
|
15904
|
-
null,
|
|
15905
|
-
null,
|
|
15906
|
-
[],
|
|
15907
|
-
new WEBIFC__namespace.Handle(pset.expressID)
|
|
15908
|
-
);
|
|
15909
|
-
rel.expressID = this.getNewExpressID(model);
|
|
15910
|
-
await this.setData(model, pset, rel);
|
|
15911
|
-
return { pset, rel };
|
|
15990
|
+
await this.setData(model, pset);
|
|
15991
|
+
return { pset };
|
|
15912
15992
|
}
|
|
15913
15993
|
/**
|
|
15914
15994
|
* Removes a Property Set (Pset) from the given model.
|
|
@@ -16023,7 +16103,7 @@ const _IfcPropertiesManager = class _IfcPropertiesManager extends Component {
|
|
|
16023
16103
|
indexer.addEntitiesRelation(
|
|
16024
16104
|
model,
|
|
16025
16105
|
psetID,
|
|
16026
|
-
{ type: WEBIFC__namespace.IFCRELDEFINESBYPROPERTIES, inv: "
|
|
16106
|
+
{ type: WEBIFC__namespace.IFCRELDEFINESBYPROPERTIES, inv: "DefinesOcurrence" },
|
|
16027
16107
|
...expressIDs
|
|
16028
16108
|
);
|
|
16029
16109
|
}
|
|
@@ -16071,7 +16151,7 @@ const _IfcPropertiesManager = class _IfcPropertiesManager extends Component {
|
|
|
16071
16151
|
if (!relName) {
|
|
16072
16152
|
throw new Error(`IfcPropertiesManager: ${relName} is unsoported.`);
|
|
16073
16153
|
}
|
|
16074
|
-
const schema = model
|
|
16154
|
+
const schema = _IfcPropertiesManager.getIFCSchema(model);
|
|
16075
16155
|
const attributePositions = ifcRelAttrsPosition[relName];
|
|
16076
16156
|
const RelClass = WEBIFC__namespace[schema][relName];
|
|
16077
16157
|
if (!(attributePositions && RelClass)) {
|
|
@@ -16122,7 +16202,9 @@ const _IfcPropertiesManager = class _IfcPropertiesManager extends Component {
|
|
|
16122
16202
|
for (const expressID of changes) {
|
|
16123
16203
|
const data = await model.getProperties(expressID);
|
|
16124
16204
|
if (!data) {
|
|
16125
|
-
ifcApi.
|
|
16205
|
+
const existed = ifcApi.GetLine(modelID, expressID);
|
|
16206
|
+
if (existed)
|
|
16207
|
+
ifcApi.DeleteLine(modelID, expressID);
|
|
16126
16208
|
} else {
|
|
16127
16209
|
ifcApi.WriteLine(modelID, data);
|
|
16128
16210
|
}
|
|
@@ -16219,9 +16301,9 @@ const _IfcPropertiesManager = class _IfcPropertiesManager extends Component {
|
|
|
16219
16301
|
throw new Error("No OwnerHistory was found.");
|
|
16220
16302
|
}
|
|
16221
16303
|
const keys = Object.keys(ownerHistories).map((key) => parseInt(key, 10));
|
|
16222
|
-
const
|
|
16223
|
-
const
|
|
16224
|
-
return {
|
|
16304
|
+
const entity = ownerHistories[keys[0]];
|
|
16305
|
+
const handle = new WEBIFC__namespace.Handle(entity.expressID);
|
|
16306
|
+
return { entity, handle };
|
|
16225
16307
|
}
|
|
16226
16308
|
registerChange(model, ...expressID) {
|
|
16227
16309
|
if (!this.changeMap[model.uuid]) {
|
|
@@ -16326,7 +16408,7 @@ const _IfcRelationsIndexer = class _IfcRelationsIndexer extends Component {
|
|
|
16326
16408
|
__publicField(this, "onFragmentsDisposed", (data) => {
|
|
16327
16409
|
delete this.relationMaps[data.groupID];
|
|
16328
16410
|
});
|
|
16329
|
-
//
|
|
16411
|
+
// Used to create the corresponding IfcRelationship with the IfcPropertiesManager
|
|
16330
16412
|
__publicField(this, "_changeMap", {});
|
|
16331
16413
|
/**
|
|
16332
16414
|
* An event that is triggered when entities are related in a BIM model.
|
|
@@ -16349,43 +16431,26 @@ const _IfcRelationsIndexer = class _IfcRelationsIndexer extends Component {
|
|
|
16349
16431
|
return;
|
|
16350
16432
|
const relatingID = relAttrs[relatingKey].value;
|
|
16351
16433
|
const relatedIDs = relAttrs[relatedKey].map((el) => el.value);
|
|
16352
|
-
const
|
|
16353
|
-
|
|
16354
|
-
|
|
16355
|
-
|
|
16356
|
-
|
|
16357
|
-
|
|
16358
|
-
|
|
16359
|
-
let indexMap = currentMap.get(index);
|
|
16360
|
-
if (!indexMap) {
|
|
16361
|
-
indexMap = [];
|
|
16362
|
-
currentMap.set(index, indexMap);
|
|
16363
|
-
}
|
|
16364
|
-
for (const id of relatedIDs) {
|
|
16365
|
-
indexMap.push(id);
|
|
16366
|
-
}
|
|
16434
|
+
const indexMap = this.getEntityRelations(
|
|
16435
|
+
relationsMap,
|
|
16436
|
+
relatingID,
|
|
16437
|
+
relating
|
|
16438
|
+
);
|
|
16439
|
+
for (const id of relatedIDs) {
|
|
16440
|
+
indexMap.push(id);
|
|
16367
16441
|
}
|
|
16368
16442
|
for (const id of relatedIDs) {
|
|
16369
|
-
const
|
|
16370
|
-
if (index2 === null)
|
|
16371
|
-
continue;
|
|
16372
|
-
let currentMap = relationsMap.get(id);
|
|
16373
|
-
if (!currentMap) {
|
|
16374
|
-
currentMap = /* @__PURE__ */ new Map();
|
|
16375
|
-
relationsMap.set(id, currentMap);
|
|
16376
|
-
}
|
|
16377
|
-
let relations = currentMap.get(index2);
|
|
16378
|
-
if (!relations) {
|
|
16379
|
-
relations = [];
|
|
16380
|
-
currentMap.set(index2, relations);
|
|
16381
|
-
}
|
|
16443
|
+
const relations = this.getEntityRelations(relationsMap, id, related);
|
|
16382
16444
|
relations.push(relatingID);
|
|
16383
16445
|
}
|
|
16384
16446
|
}
|
|
16385
16447
|
getAttributeIndex(inverseAttribute) {
|
|
16386
16448
|
const index = this._inverseAttributes.indexOf(inverseAttribute);
|
|
16387
|
-
if (index === -1)
|
|
16388
|
-
|
|
16449
|
+
if (index === -1) {
|
|
16450
|
+
throw new Error(
|
|
16451
|
+
`IfcRelationsIndexer: ${inverseAttribute} is not a valid IFC Inverse Attribute name or its not supported yet by this component.`
|
|
16452
|
+
);
|
|
16453
|
+
}
|
|
16389
16454
|
return index;
|
|
16390
16455
|
}
|
|
16391
16456
|
/**
|
|
@@ -16419,28 +16484,27 @@ const _IfcRelationsIndexer = class _IfcRelationsIndexer extends Component {
|
|
|
16419
16484
|
* representation of the relations indexed by entity expressIDs and relation types.
|
|
16420
16485
|
* @throws An error if the model does not have properties loaded.
|
|
16421
16486
|
*/
|
|
16422
|
-
async process(model) {
|
|
16487
|
+
async process(model, config) {
|
|
16423
16488
|
if (!model.hasProperties)
|
|
16424
16489
|
throw new Error("FragmentsGroup properties not found");
|
|
16425
16490
|
let relationsMap = this.relationMaps[model.uuid];
|
|
16426
|
-
if (relationsMap) {
|
|
16427
|
-
|
|
16491
|
+
if (!relationsMap) {
|
|
16492
|
+
relationsMap = /* @__PURE__ */ new Map();
|
|
16493
|
+
this.relationMaps[model.uuid] = relationsMap;
|
|
16428
16494
|
}
|
|
16429
|
-
|
|
16430
|
-
|
|
16431
|
-
|
|
16432
|
-
|
|
16495
|
+
const entities = model.getLocalProperties();
|
|
16496
|
+
if (!entities)
|
|
16497
|
+
return relationsMap;
|
|
16498
|
+
const relationsToProcess = (config == null ? void 0 : config.relationsToProcess) ?? this._ifcRels;
|
|
16499
|
+
for (const [_, entity] of Object.entries(entities)) {
|
|
16500
|
+
if (!relationsToProcess.includes(entity.type))
|
|
16433
16501
|
continue;
|
|
16434
|
-
|
|
16435
|
-
const relInverseAttributes = this._relToAttributesMap.get(relType);
|
|
16502
|
+
const relInverseAttributes = this._relToAttributesMap.get(entity.type);
|
|
16436
16503
|
if (!relInverseAttributes) {
|
|
16437
16504
|
continue;
|
|
16438
16505
|
}
|
|
16439
16506
|
const { forRelated: related, forRelating: relating } = relInverseAttributes;
|
|
16440
|
-
|
|
16441
|
-
const relAttrs = relsAttrs[expressID];
|
|
16442
|
-
this.indexRelations(relationsMap, relAttrs, related, relating);
|
|
16443
|
-
}
|
|
16507
|
+
this.indexRelations(relationsMap, entity, related, relating);
|
|
16444
16508
|
}
|
|
16445
16509
|
this.setRelationMap(model, relationsMap);
|
|
16446
16510
|
return relationsMap;
|
|
@@ -16482,26 +16546,33 @@ const _IfcRelationsIndexer = class _IfcRelationsIndexer extends Component {
|
|
|
16482
16546
|
*
|
|
16483
16547
|
* @param model The `FragmentsGroup` model containing the entity, or its UUID.
|
|
16484
16548
|
* @param expressID The unique identifier of the entity within the model.
|
|
16485
|
-
* @param
|
|
16486
|
-
* @returns An array of express IDs representing the related entities
|
|
16487
|
-
|
|
16488
|
-
|
|
16489
|
-
|
|
16490
|
-
|
|
16491
|
-
|
|
16492
|
-
|
|
16493
|
-
|
|
16494
|
-
|
|
16495
|
-
|
|
16549
|
+
* @param attribute The IFC schema inverse attribute of the relation to search for (e.g., "IsDefinedBy", "ContainsElements").
|
|
16550
|
+
* @returns An array of express IDs representing the related entities. If the array is empty, no relations were found.
|
|
16551
|
+
*/
|
|
16552
|
+
getEntityRelations(model, expressID, attribute) {
|
|
16553
|
+
const index = this.getAttributeIndex(attribute);
|
|
16554
|
+
let relationsMap;
|
|
16555
|
+
if (model instanceof FRAGS.FragmentsGroup) {
|
|
16556
|
+
relationsMap = this.relationMaps[model.uuid];
|
|
16557
|
+
} else if (typeof model === "string") {
|
|
16558
|
+
relationsMap = this.relationMaps[model];
|
|
16559
|
+
} else {
|
|
16560
|
+
relationsMap = model;
|
|
16496
16561
|
}
|
|
16497
|
-
|
|
16498
|
-
|
|
16499
|
-
|
|
16500
|
-
|
|
16562
|
+
if (!relationsMap && (model instanceof FRAGS.FragmentsGroup || typeof model === "string")) {
|
|
16563
|
+
relationsMap = /* @__PURE__ */ new Map();
|
|
16564
|
+
const id = model instanceof FRAGS.FragmentsGroup ? model.uuid : model;
|
|
16565
|
+
this.relationMaps[id] = relationsMap;
|
|
16566
|
+
}
|
|
16567
|
+
let entityRelations = relationsMap.get(expressID);
|
|
16568
|
+
if (!entityRelations) {
|
|
16569
|
+
entityRelations = /* @__PURE__ */ new Map();
|
|
16570
|
+
relationsMap.set(expressID, entityRelations);
|
|
16501
16571
|
}
|
|
16502
|
-
|
|
16572
|
+
let relations = entityRelations.get(index);
|
|
16503
16573
|
if (!relations) {
|
|
16504
|
-
|
|
16574
|
+
relations = [];
|
|
16575
|
+
entityRelations.set(index, relations);
|
|
16505
16576
|
}
|
|
16506
16577
|
return relations;
|
|
16507
16578
|
}
|
|
@@ -16622,8 +16693,6 @@ const _IfcRelationsIndexer = class _IfcRelationsIndexer extends Component {
|
|
|
16622
16693
|
const set = /* @__PURE__ */ new Set();
|
|
16623
16694
|
for (const [id, map] of relations) {
|
|
16624
16695
|
const index = this.getAttributeIndex(inv);
|
|
16625
|
-
if (index === null)
|
|
16626
|
-
throw new Error("IfcRelationsIndexer: invalid inverse attribute name");
|
|
16627
16696
|
const rels = map.get(index);
|
|
16628
16697
|
if (rels && rels.includes(expressID))
|
|
16629
16698
|
set.add(id);
|
|
@@ -16649,28 +16718,17 @@ const _IfcRelationsIndexer = class _IfcRelationsIndexer extends Component {
|
|
|
16649
16718
|
);
|
|
16650
16719
|
if (!existingRelations) {
|
|
16651
16720
|
const attributeIndex = this.getAttributeIndex(relationName);
|
|
16652
|
-
if (!attributeIndex) {
|
|
16653
|
-
throw new Error(
|
|
16654
|
-
`IfcRelationsIndexer: ${relationName} is not a valid relation name.`
|
|
16655
|
-
);
|
|
16656
|
-
}
|
|
16657
16721
|
const entityRelations = this.relationMaps[model.uuid].get(expressID);
|
|
16658
16722
|
entityRelations == null ? void 0 : entityRelations.set(attributeIndex, relIDs);
|
|
16659
16723
|
} else {
|
|
16660
16724
|
existingRelations.push(...relIDs);
|
|
16661
16725
|
}
|
|
16662
16726
|
}
|
|
16663
|
-
// removeEntitiesRelation(
|
|
16664
|
-
// model: FragmentsGroup,
|
|
16665
|
-
// relatingID: number,
|
|
16666
|
-
// relationName: InverseAttribute,
|
|
16667
|
-
// ...relatedIDs: number[]
|
|
16668
|
-
// ) {}
|
|
16669
16727
|
/**
|
|
16670
16728
|
* Converts the relations made into actual IFC data.
|
|
16671
16729
|
*
|
|
16672
16730
|
* @remarks This function iterates through the changes made to the relations and applies them to the corresponding BIM model.
|
|
16673
|
-
* It only make sense to use if the relations need to be write in the IFC file.
|
|
16731
|
+
* It only make sense to use it if the relations need to be write in the IFC file.
|
|
16674
16732
|
*
|
|
16675
16733
|
* @returns A promise that resolves when all the relation changes have been applied.
|
|
16676
16734
|
*/
|
|
@@ -16714,9 +16772,11 @@ const _IfcRelationsIndexer = class _IfcRelationsIndexer extends Component {
|
|
|
16714
16772
|
}
|
|
16715
16773
|
addEntitiesRelation(model, relatingID, rel, ...relatedIDs) {
|
|
16716
16774
|
const { type, inv } = rel;
|
|
16717
|
-
|
|
16718
|
-
if (!relationsMap)
|
|
16719
|
-
|
|
16775
|
+
let relationsMap = this.relationMaps[model.uuid];
|
|
16776
|
+
if (!relationsMap) {
|
|
16777
|
+
relationsMap = /* @__PURE__ */ new Map();
|
|
16778
|
+
this.relationMaps[model.uuid] = relationsMap;
|
|
16779
|
+
}
|
|
16720
16780
|
if (!this._ifcRels.includes(type))
|
|
16721
16781
|
return;
|
|
16722
16782
|
const relInvAttrs = relToAttributesMap.get(type);
|
|
@@ -16762,35 +16822,11 @@ const _IfcRelationsIndexer = class _IfcRelationsIndexer extends Component {
|
|
|
16762
16822
|
relatingData.related.add(...relatedExpressID);
|
|
16763
16823
|
}
|
|
16764
16824
|
for (const id of relatingExpressID) {
|
|
16765
|
-
|
|
16766
|
-
|
|
16767
|
-
currentMap = /* @__PURE__ */ new Map();
|
|
16768
|
-
relationsMap.set(id, currentMap);
|
|
16769
|
-
}
|
|
16770
|
-
const index = this.getAttributeIndex(relating);
|
|
16771
|
-
if (index !== null) {
|
|
16772
|
-
let indexMap = currentMap.get(index);
|
|
16773
|
-
if (!indexMap) {
|
|
16774
|
-
indexMap = [];
|
|
16775
|
-
currentMap.set(index, indexMap);
|
|
16776
|
-
}
|
|
16777
|
-
indexMap.push(...relatedExpressID);
|
|
16778
|
-
}
|
|
16825
|
+
const indexMap = this.getEntityRelations(model, id, relating);
|
|
16826
|
+
indexMap.push(...relatedExpressID);
|
|
16779
16827
|
}
|
|
16780
16828
|
for (const id of relatedExpressID) {
|
|
16781
|
-
|
|
16782
|
-
if (!currentMap) {
|
|
16783
|
-
currentMap = /* @__PURE__ */ new Map();
|
|
16784
|
-
relationsMap.set(id, currentMap);
|
|
16785
|
-
}
|
|
16786
|
-
const index = this.getAttributeIndex(related);
|
|
16787
|
-
if (index === null)
|
|
16788
|
-
continue;
|
|
16789
|
-
let relations = currentMap.get(index);
|
|
16790
|
-
if (!relations) {
|
|
16791
|
-
relations = [];
|
|
16792
|
-
currentMap.set(index, relations);
|
|
16793
|
-
}
|
|
16829
|
+
const relations = this.getEntityRelations(model, id, related);
|
|
16794
16830
|
relations.push(...relatingExpressID);
|
|
16795
16831
|
}
|
|
16796
16832
|
}
|
|
@@ -21539,9 +21575,9 @@ const _Topic = class _Topic {
|
|
|
21539
21575
|
__publicField(this, "_type", _Topic.default.type);
|
|
21540
21576
|
__publicField(this, "_status", _Topic.default.status);
|
|
21541
21577
|
__publicField(this, "_priority", _Topic.default.priority);
|
|
21542
|
-
__publicField(this, "_stage", _Topic.default.
|
|
21578
|
+
__publicField(this, "_stage", _Topic.default.stage);
|
|
21543
21579
|
__publicField(this, "_assignedTo", _Topic.default.assignedTo);
|
|
21544
|
-
__publicField(this, "_labels", _Topic.default.labels);
|
|
21580
|
+
__publicField(this, "_labels", _Topic.default.labels ?? /* @__PURE__ */ new Set());
|
|
21545
21581
|
__publicField(this, "_components");
|
|
21546
21582
|
this._components = components;
|
|
21547
21583
|
const manager = components.get(BCFTopics);
|
|
@@ -21867,8 +21903,7 @@ ${tags}
|
|
|
21867
21903
|
__publicField(_Topic, "default", {
|
|
21868
21904
|
title: "BCF Topic",
|
|
21869
21905
|
type: "Issue",
|
|
21870
|
-
status: "Active"
|
|
21871
|
-
labels: /* @__PURE__ */ new Set()
|
|
21906
|
+
status: "Active"
|
|
21872
21907
|
});
|
|
21873
21908
|
let Topic = _Topic;
|
|
21874
21909
|
const extensionsImporter = (manager, extensionsXML) => {
|
|
@@ -22128,8 +22163,9 @@ const _BCFTopics = class _BCFTopics extends Component {
|
|
|
22128
22163
|
if (data) {
|
|
22129
22164
|
topic.guid = data.guid ?? topic.guid;
|
|
22130
22165
|
topic.set(data);
|
|
22166
|
+
} else {
|
|
22167
|
+
this.list.set(topic.guid, topic);
|
|
22131
22168
|
}
|
|
22132
|
-
this.list.set(topic.guid, topic);
|
|
22133
22169
|
return topic;
|
|
22134
22170
|
}
|
|
22135
22171
|
/**
|
|
@@ -23019,6 +23055,84 @@ const _BoundingBoxer = class _BoundingBoxer extends Component {
|
|
|
23019
23055
|
};
|
|
23020
23056
|
__publicField(_BoundingBoxer, "uuid", "d1444724-dba6-4cdd-a0c7-68ee1450d166");
|
|
23021
23057
|
let BoundingBoxer = _BoundingBoxer;
|
|
23058
|
+
const _IfcIsolator = class _IfcIsolator extends Component {
|
|
23059
|
+
constructor(components) {
|
|
23060
|
+
super(components);
|
|
23061
|
+
/** {@link Component.enabled} */
|
|
23062
|
+
__publicField(this, "enabled", true);
|
|
23063
|
+
components.add(_IfcIsolator.uuid, this);
|
|
23064
|
+
}
|
|
23065
|
+
async getIsolatedElements(webIfc, modelID, elementIDs) {
|
|
23066
|
+
const isolatedElementIDs = /* @__PURE__ */ new Set();
|
|
23067
|
+
function addElementAndReferences(elementID) {
|
|
23068
|
+
if (isolatedElementIDs.has(elementID))
|
|
23069
|
+
return;
|
|
23070
|
+
const element = webIfc.GetLine(modelID, elementID);
|
|
23071
|
+
if (!element)
|
|
23072
|
+
return;
|
|
23073
|
+
isolatedElementIDs.add(elementID);
|
|
23074
|
+
for (const prop in element) {
|
|
23075
|
+
const value = element[prop];
|
|
23076
|
+
if (value && value.constructor.name === "Handle" && value.value > 0) {
|
|
23077
|
+
addElementAndReferences(value.value);
|
|
23078
|
+
} else if (Array.isArray(value)) {
|
|
23079
|
+
value.forEach((refID) => {
|
|
23080
|
+
if (refID && refID.constructor.name === "Handle" && refID.value > 0) {
|
|
23081
|
+
addElementAndReferences(refID.value);
|
|
23082
|
+
}
|
|
23083
|
+
});
|
|
23084
|
+
}
|
|
23085
|
+
}
|
|
23086
|
+
}
|
|
23087
|
+
for (const elementID of elementIDs) {
|
|
23088
|
+
addElementAndReferences(elementID);
|
|
23089
|
+
}
|
|
23090
|
+
const arr = [];
|
|
23091
|
+
for (const elementID of isolatedElementIDs) {
|
|
23092
|
+
arr.push(elementID);
|
|
23093
|
+
}
|
|
23094
|
+
arr.sort((a, b) => {
|
|
23095
|
+
return a - b;
|
|
23096
|
+
});
|
|
23097
|
+
const isolatedElements = [];
|
|
23098
|
+
arr.forEach((elementID) => {
|
|
23099
|
+
const element = webIfc.GetLine(modelID, elementID);
|
|
23100
|
+
isolatedElements.push(element);
|
|
23101
|
+
});
|
|
23102
|
+
return isolatedElements;
|
|
23103
|
+
}
|
|
23104
|
+
/**
|
|
23105
|
+
* Exports isolated elements to the new model.
|
|
23106
|
+
* @param webIfc The instance of [web-ifc](https://github.com/ThatOpen/engine_web-ifc) to use.
|
|
23107
|
+
* @param modelID ID of the new IFC model.
|
|
23108
|
+
* @param isolatedElements The array of isolated elements
|
|
23109
|
+
*/
|
|
23110
|
+
async export(webIfc, modelID, isolatedElements) {
|
|
23111
|
+
isolatedElements.forEach((element) => {
|
|
23112
|
+
webIfc.WriteLine(modelID, element);
|
|
23113
|
+
});
|
|
23114
|
+
const data = webIfc.SaveModel(modelID);
|
|
23115
|
+
return data;
|
|
23116
|
+
}
|
|
23117
|
+
async splitIfc(webIfc, ifcFile, idsToExtract) {
|
|
23118
|
+
const ifcBuffer = new Uint8Array(ifcFile);
|
|
23119
|
+
const modelID = webIfc.OpenModel(ifcBuffer);
|
|
23120
|
+
const isolated = await this.getIsolatedElements(
|
|
23121
|
+
webIfc,
|
|
23122
|
+
modelID,
|
|
23123
|
+
idsToExtract
|
|
23124
|
+
);
|
|
23125
|
+
const newModelID = webIfc.CreateModel({ schema: WEBIFC__namespace.Schemas.IFC2X3 });
|
|
23126
|
+
const data = await this.export(webIfc, newModelID, isolated);
|
|
23127
|
+
return data;
|
|
23128
|
+
}
|
|
23129
|
+
};
|
|
23130
|
+
/**
|
|
23131
|
+
* A unique identifier for the component.
|
|
23132
|
+
* This UUID is used to register the component within the Components system.
|
|
23133
|
+
*/
|
|
23134
|
+
__publicField(_IfcIsolator, "uuid", "6eb0ba2f-71c0-464e-bcec-2d7c335186b2");
|
|
23135
|
+
let IfcIsolator = _IfcIsolator;
|
|
23022
23136
|
const _IfcFinderQuery = class _IfcFinderQuery {
|
|
23023
23137
|
constructor(components) {
|
|
23024
23138
|
/**
|
|
@@ -23985,7 +24099,7 @@ const _Classifier = class _Classifier extends Component {
|
|
|
23985
24099
|
`Classifier: model relations of ${model.name || model.uuid} have to exists to group by spatial structure.`
|
|
23986
24100
|
);
|
|
23987
24101
|
}
|
|
23988
|
-
const systemName = "spatialStructures";
|
|
24102
|
+
const systemName = config.systemName ?? "spatialStructures";
|
|
23989
24103
|
const noProps = config.useProperties === void 0;
|
|
23990
24104
|
const useProperties = noProps || config.useProperties;
|
|
23991
24105
|
for (const [expressID] of modelRelations) {
|
|
@@ -24110,19 +24224,18 @@ const _Classifier = class _Classifier extends Component {
|
|
|
24110
24224
|
};
|
|
24111
24225
|
}
|
|
24112
24226
|
}
|
|
24113
|
-
return
|
|
24227
|
+
return exported;
|
|
24114
24228
|
}
|
|
24115
24229
|
/**
|
|
24116
24230
|
* Imports a classification previously exported with .export().
|
|
24117
24231
|
* @param data the serialized classification to import.
|
|
24118
24232
|
*/
|
|
24119
24233
|
import(data) {
|
|
24120
|
-
const
|
|
24121
|
-
for (const systemName in imported) {
|
|
24234
|
+
for (const systemName in data) {
|
|
24122
24235
|
if (!this.list[systemName]) {
|
|
24123
24236
|
this.list[systemName] = {};
|
|
24124
24237
|
}
|
|
24125
|
-
const system =
|
|
24238
|
+
const system = data[systemName];
|
|
24126
24239
|
for (const groupName in system) {
|
|
24127
24240
|
const group = system[groupName];
|
|
24128
24241
|
this.list[systemName][groupName] = {
|
|
@@ -24686,16 +24799,27 @@ const _IfcGeometryTiler = class _IfcGeometryTiler extends Component {
|
|
|
24686
24799
|
this._assets = [];
|
|
24687
24800
|
}
|
|
24688
24801
|
async streamGeometries() {
|
|
24689
|
-
|
|
24802
|
+
const exportMap = /* @__PURE__ */ new Map();
|
|
24803
|
+
for (const [id, value] of this._geometries) {
|
|
24804
|
+
exportMap.set(id, value);
|
|
24805
|
+
if (exportMap.size > this.settings.minGeometrySize) {
|
|
24806
|
+
await this.outputGeometries(exportMap);
|
|
24807
|
+
}
|
|
24808
|
+
}
|
|
24809
|
+
await this.outputGeometries(exportMap);
|
|
24810
|
+
this._geometries.clear();
|
|
24811
|
+
this._geometryCount = 0;
|
|
24812
|
+
}
|
|
24813
|
+
async outputGeometries(exportMap) {
|
|
24814
|
+
let buffer = this._streamSerializer.export(exportMap);
|
|
24690
24815
|
let data = {};
|
|
24691
|
-
for (const [id, { boundingBox: boundingBox2, hasHoles }] of
|
|
24816
|
+
for (const [id, { boundingBox: boundingBox2, hasHoles }] of exportMap) {
|
|
24692
24817
|
data[id] = { boundingBox: boundingBox2, hasHoles };
|
|
24693
24818
|
}
|
|
24694
24819
|
await this.onGeometryStreamed.trigger({ data, buffer });
|
|
24695
24820
|
data = null;
|
|
24696
24821
|
buffer = null;
|
|
24697
|
-
|
|
24698
|
-
this._geometryCount = 0;
|
|
24822
|
+
exportMap.clear();
|
|
24699
24823
|
}
|
|
24700
24824
|
registerGeometryData(group, itemID, geometry, asset, geometryID, transpGeometryID) {
|
|
24701
24825
|
const geometryData = this._visitedGeometries.get(transpGeometryID);
|
|
@@ -25125,8 +25249,8 @@ class Viewpoint {
|
|
|
25125
25249
|
*
|
|
25126
25250
|
* @returns A Promise that resolves when the camera has been set.
|
|
25127
25251
|
*/
|
|
25128
|
-
async go(transition = true) {
|
|
25129
|
-
const { camera } = this.world;
|
|
25252
|
+
async go(world, transition = true) {
|
|
25253
|
+
const { camera } = world ?? this.world;
|
|
25130
25254
|
if (!camera.hasCameraControls()) {
|
|
25131
25255
|
throw new Error(
|
|
25132
25256
|
"Viewpoint: the world's camera need controls to set the viewpoint."
|
|
@@ -25190,8 +25314,8 @@ class Viewpoint {
|
|
|
25190
25314
|
* @throws An error if the world's camera does not have camera controls.
|
|
25191
25315
|
* @throws An error if the world's renderer is not available.
|
|
25192
25316
|
*/
|
|
25193
|
-
updateCamera() {
|
|
25194
|
-
const { camera, renderer } = this.world;
|
|
25317
|
+
updateCamera(world) {
|
|
25318
|
+
const { camera, renderer } = world ?? this.world;
|
|
25195
25319
|
if (!renderer) {
|
|
25196
25320
|
throw new Error("Viewpoint: the world needs to have a renderer!");
|
|
25197
25321
|
}
|
|
@@ -26268,21 +26392,17 @@ class IDSFacet {
|
|
|
26268
26392
|
this.addCheckResult(checkLog, checks);
|
|
26269
26393
|
let pass = false;
|
|
26270
26394
|
if (facetParameter.type === "simple") {
|
|
26271
|
-
|
|
26272
|
-
pass = value === parameter2;
|
|
26395
|
+
pass = value === facetParameter.parameter;
|
|
26273
26396
|
}
|
|
26274
26397
|
if (facetParameter.type === "enumeration") {
|
|
26275
|
-
|
|
26276
|
-
pass = parameter2.includes(value);
|
|
26398
|
+
pass = facetParameter.parameter.includes(value);
|
|
26277
26399
|
}
|
|
26278
26400
|
if (facetParameter.type === "pattern") {
|
|
26279
|
-
const
|
|
26280
|
-
const regex = new RegExp(parameter2);
|
|
26401
|
+
const regex = new RegExp(facetParameter.parameter);
|
|
26281
26402
|
pass = regex.test(String(value));
|
|
26282
26403
|
}
|
|
26283
26404
|
if (facetParameter.type === "length") {
|
|
26284
|
-
const
|
|
26285
|
-
const { min, length, max } = parameter2;
|
|
26405
|
+
const { min, length, max } = facetParameter.parameter;
|
|
26286
26406
|
if (length !== void 0) {
|
|
26287
26407
|
pass = String(value).length === length;
|
|
26288
26408
|
}
|
|
@@ -26366,6 +26486,7 @@ const getParameterXML = (name, parameter) => {
|
|
|
26366
26486
|
class IDSAttribute extends IDSFacet {
|
|
26367
26487
|
constructor(components, name) {
|
|
26368
26488
|
super(components);
|
|
26489
|
+
__publicField(this, "facetType", "Attribute");
|
|
26369
26490
|
__publicField(this, "name");
|
|
26370
26491
|
__publicField(this, "value");
|
|
26371
26492
|
this.name = name;
|
|
@@ -26502,6 +26623,7 @@ class IDSAttribute extends IDSFacet {
|
|
|
26502
26623
|
class IDSClassification extends IDSFacet {
|
|
26503
26624
|
constructor(components, system) {
|
|
26504
26625
|
super(components);
|
|
26626
|
+
__publicField(this, "facetType", "Classification");
|
|
26505
26627
|
__publicField(this, "system");
|
|
26506
26628
|
__publicField(this, "value");
|
|
26507
26629
|
__publicField(this, "uri");
|
|
@@ -26784,6 +26906,7 @@ class IDSClassification extends IDSFacet {
|
|
|
26784
26906
|
class IDSEntity extends IDSFacet {
|
|
26785
26907
|
constructor(components, name) {
|
|
26786
26908
|
super(components);
|
|
26909
|
+
__publicField(this, "facetType", "Entity");
|
|
26787
26910
|
__publicField(this, "name");
|
|
26788
26911
|
__publicField(this, "predefinedType");
|
|
26789
26912
|
this.name = name;
|
|
@@ -26912,11 +27035,13 @@ class IDSEntity extends IDSFacet {
|
|
|
26912
27035
|
class IDSProperty extends IDSFacet {
|
|
26913
27036
|
constructor(components, propertySet, baseName) {
|
|
26914
27037
|
super(components);
|
|
27038
|
+
__publicField(this, "facetType", "Property");
|
|
26915
27039
|
__publicField(this, "propertySet");
|
|
26916
27040
|
__publicField(this, "baseName");
|
|
26917
27041
|
__publicField(this, "value");
|
|
26918
27042
|
__publicField(this, "dataType");
|
|
26919
27043
|
__publicField(this, "uri");
|
|
27044
|
+
// These are defined by the IDS specification
|
|
26920
27045
|
__publicField(this, "_unsupportedTypes", [
|
|
26921
27046
|
WEBIFC__namespace.IFCCOMPLEXPROPERTY,
|
|
26922
27047
|
WEBIFC__namespace.IFCPHYSICALCOMPLEXQUANTITY
|
|
@@ -27112,10 +27237,43 @@ class IDSProperty extends IDSFacet {
|
|
|
27112
27237
|
(name) => name.endsWith("Value") || name.endsWith("Values")
|
|
27113
27238
|
);
|
|
27114
27239
|
}
|
|
27115
|
-
|
|
27116
|
-
|
|
27240
|
+
async getPsetProps(model, attrs, propsListName) {
|
|
27241
|
+
const attrsClone = structuredClone(attrs);
|
|
27242
|
+
const props = [];
|
|
27243
|
+
const list = attrsClone[propsListName];
|
|
27244
|
+
if (!list)
|
|
27245
|
+
return props;
|
|
27246
|
+
for (const { value } of list) {
|
|
27247
|
+
const propAttrs = await model.getProperties(value);
|
|
27248
|
+
if (propAttrs)
|
|
27249
|
+
props.push(propAttrs);
|
|
27250
|
+
}
|
|
27251
|
+
attrsClone[propsListName] = props;
|
|
27252
|
+
return attrsClone;
|
|
27253
|
+
}
|
|
27254
|
+
async getTypePsets(model, expressID) {
|
|
27117
27255
|
const sets = [];
|
|
27118
27256
|
const indexer = this.components.get(IfcRelationsIndexer);
|
|
27257
|
+
const types = indexer.getEntityRelations(model, expressID, "IsTypedBy");
|
|
27258
|
+
if (!(types && types[0]))
|
|
27259
|
+
return sets;
|
|
27260
|
+
const typeAttrs = await model.getProperties(types[0]);
|
|
27261
|
+
if (!(typeAttrs && "HasPropertySets" in typeAttrs && Array.isArray(typeAttrs.HasPropertySets))) {
|
|
27262
|
+
return sets;
|
|
27263
|
+
}
|
|
27264
|
+
for (const { value } of typeAttrs.HasPropertySets) {
|
|
27265
|
+
const psetAttrs = await model.getProperties(value);
|
|
27266
|
+
if (!(psetAttrs && "HasProperties" in psetAttrs && Array.isArray(psetAttrs.HasProperties))) {
|
|
27267
|
+
continue;
|
|
27268
|
+
}
|
|
27269
|
+
const pset = await this.getPsetProps(model, psetAttrs, "HasProperties");
|
|
27270
|
+
sets.push(pset);
|
|
27271
|
+
}
|
|
27272
|
+
return sets;
|
|
27273
|
+
}
|
|
27274
|
+
async getPsets(model, expressID) {
|
|
27275
|
+
const sets = await this.getTypePsets(model, expressID);
|
|
27276
|
+
const indexer = this.components.get(IfcRelationsIndexer);
|
|
27119
27277
|
const definitions = indexer.getEntityRelations(
|
|
27120
27278
|
model,
|
|
27121
27279
|
expressID,
|
|
@@ -27130,15 +27288,8 @@ class IDSProperty extends IDSFacet {
|
|
|
27130
27288
|
const propsListName = this.getItemsAttrName(attrs.type);
|
|
27131
27289
|
if (!propsListName)
|
|
27132
27290
|
continue;
|
|
27133
|
-
const
|
|
27134
|
-
|
|
27135
|
-
for (const { value } of attrsClone[propsListName]) {
|
|
27136
|
-
const propAttrs = await model.getProperties(value);
|
|
27137
|
-
if (propAttrs)
|
|
27138
|
-
props.push(propAttrs);
|
|
27139
|
-
}
|
|
27140
|
-
attrsClone[propsListName] = props;
|
|
27141
|
-
sets.push(attrsClone);
|
|
27291
|
+
const pset = await this.getPsetProps(model, attrs, propsListName);
|
|
27292
|
+
sets.push(pset);
|
|
27142
27293
|
}
|
|
27143
27294
|
return sets;
|
|
27144
27295
|
}
|
|
@@ -27147,8 +27298,9 @@ class IDSProperty extends IDSFacet {
|
|
|
27147
27298
|
// Work must to be done to convert numerical value units to IDS-nominated standard units https://github.com/buildingSMART/IDS/blob/development/Documentation/UserManual/units.md
|
|
27148
27299
|
evalValue(attrs, checks) {
|
|
27149
27300
|
const valueKey = this.getValueKey(attrs);
|
|
27301
|
+
const valueAttr = attrs[valueKey];
|
|
27150
27302
|
if (this.value) {
|
|
27151
|
-
if (!
|
|
27303
|
+
if (!valueAttr) {
|
|
27152
27304
|
checks == null ? void 0 : checks.push({
|
|
27153
27305
|
parameter: "Value",
|
|
27154
27306
|
currentValue: null,
|
|
@@ -27157,17 +27309,16 @@ class IDSProperty extends IDSFacet {
|
|
|
27157
27309
|
});
|
|
27158
27310
|
return false;
|
|
27159
27311
|
}
|
|
27160
|
-
const valueAttr = attrs[valueKey];
|
|
27161
27312
|
const facetValue = structuredClone(this.value);
|
|
27162
27313
|
if (valueAttr.name === "IFCLABEL" && facetValue.type === "simple") {
|
|
27163
27314
|
facetValue.parameter = String(facetValue.parameter);
|
|
27164
27315
|
}
|
|
27165
27316
|
if ((attrs.type === WEBIFC__namespace.IFCPROPERTYLISTVALUE || attrs.type === WEBIFC__namespace.IFCPROPERTYENUMERATEDVALUE) && Array.isArray(valueAttr)) {
|
|
27166
|
-
const values = valueAttr.map((
|
|
27167
|
-
const matchingValue = valueAttr.find((
|
|
27317
|
+
const values = valueAttr.map((value) => value.value);
|
|
27318
|
+
const matchingValue = valueAttr.find((value) => {
|
|
27168
27319
|
if (!facetValue)
|
|
27169
27320
|
return false;
|
|
27170
|
-
return this.evalRequirement(
|
|
27321
|
+
return this.evalRequirement(value.value, facetValue, "Value");
|
|
27171
27322
|
});
|
|
27172
27323
|
checks == null ? void 0 : checks.push({
|
|
27173
27324
|
currentValue: values,
|
|
@@ -27187,8 +27338,7 @@ class IDSProperty extends IDSFacet {
|
|
|
27187
27338
|
}
|
|
27188
27339
|
if (!valueKey)
|
|
27189
27340
|
return true;
|
|
27190
|
-
|
|
27191
|
-
if (value.type === 3 && value.value === 2) {
|
|
27341
|
+
if (valueAttr.type === 3 && valueAttr.value === 2) {
|
|
27192
27342
|
checks == null ? void 0 : checks.push({
|
|
27193
27343
|
parameter: "Value",
|
|
27194
27344
|
currentValue: null,
|
|
@@ -27197,7 +27347,7 @@ class IDSProperty extends IDSFacet {
|
|
|
27197
27347
|
});
|
|
27198
27348
|
return false;
|
|
27199
27349
|
}
|
|
27200
|
-
if (
|
|
27350
|
+
if (valueAttr.type === 1 && valueAttr.value.trim() === "") {
|
|
27201
27351
|
checks == null ? void 0 : checks.push({
|
|
27202
27352
|
parameter: "Value",
|
|
27203
27353
|
currentValue: "",
|
|
@@ -27213,6 +27363,15 @@ class IDSProperty extends IDSFacet {
|
|
|
27213
27363
|
return true;
|
|
27214
27364
|
const valueKey = this.getValueKey(attrs);
|
|
27215
27365
|
const valueAttr = attrs[valueKey];
|
|
27366
|
+
if (!valueAttr) {
|
|
27367
|
+
checks == null ? void 0 : checks.push({
|
|
27368
|
+
parameter: "DataType",
|
|
27369
|
+
currentValue: null,
|
|
27370
|
+
pass: false,
|
|
27371
|
+
requiredValue: this.dataType
|
|
27372
|
+
});
|
|
27373
|
+
return false;
|
|
27374
|
+
}
|
|
27216
27375
|
if ((attrs.type === WEBIFC__namespace.IFCPROPERTYLISTVALUE || attrs.type === WEBIFC__namespace.IFCPROPERTYENUMERATEDVALUE) && Array.isArray(valueAttr) && valueAttr[0]) {
|
|
27217
27376
|
const valueType = valueAttr[0].name;
|
|
27218
27377
|
const result2 = this.evalRequirement(
|
|
@@ -27258,6 +27417,20 @@ class IDSSpecification {
|
|
|
27258
27417
|
this.ifcVersion.add(version);
|
|
27259
27418
|
}
|
|
27260
27419
|
}
|
|
27420
|
+
set(data) {
|
|
27421
|
+
const _data = data;
|
|
27422
|
+
const _this = this;
|
|
27423
|
+
for (const key in data) {
|
|
27424
|
+
if (key === "identifier")
|
|
27425
|
+
continue;
|
|
27426
|
+
const value = _data[key];
|
|
27427
|
+
if (key in this)
|
|
27428
|
+
_this[key] = value;
|
|
27429
|
+
}
|
|
27430
|
+
const manager = this.components.get(IDSSpecifications);
|
|
27431
|
+
manager.list.set(this.identifier, this);
|
|
27432
|
+
return this;
|
|
27433
|
+
}
|
|
27261
27434
|
/**
|
|
27262
27435
|
* Tests the model to test against the specification's requirements.
|
|
27263
27436
|
*
|
|
@@ -27303,8 +27476,9 @@ class IDSSpecification {
|
|
|
27303
27476
|
const getParameterValue = (property) => {
|
|
27304
27477
|
if (!property)
|
|
27305
27478
|
return void 0;
|
|
27306
|
-
const result = {
|
|
27479
|
+
const result = {};
|
|
27307
27480
|
if ("simpleValue" in property) {
|
|
27481
|
+
result.type = "simple";
|
|
27308
27482
|
result.parameter = property.simpleValue;
|
|
27309
27483
|
}
|
|
27310
27484
|
if ("restriction" in property) {
|
|
@@ -27595,6 +27769,7 @@ exports.ComponentWithUI = ComponentWithUI;
|
|
|
27595
27769
|
exports.Components = Components;
|
|
27596
27770
|
exports.ConfigManager = ConfigManager;
|
|
27597
27771
|
exports.Configurator = Configurator;
|
|
27772
|
+
exports.ControlsUtils = ControlsUtils;
|
|
27598
27773
|
exports.CullerRenderer = CullerRenderer;
|
|
27599
27774
|
exports.Cullers = Cullers;
|
|
27600
27775
|
exports.DataMap = DataMap;
|
|
@@ -27623,6 +27798,7 @@ exports.IfcFinder = IfcFinder;
|
|
|
27623
27798
|
exports.IfcFinderQuery = IfcFinderQuery;
|
|
27624
27799
|
exports.IfcFragmentSettings = IfcFragmentSettings;
|
|
27625
27800
|
exports.IfcGeometryTiler = IfcGeometryTiler;
|
|
27801
|
+
exports.IfcIsolator = IfcIsolator;
|
|
27626
27802
|
exports.IfcJsonExporter = IfcJsonExporter;
|
|
27627
27803
|
exports.IfcLoader = IfcLoader;
|
|
27628
27804
|
exports.IfcPropertiesManager = IfcPropertiesManager;
|