ifc-reader-2 1.0.2 → 1.0.4

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.
@@ -0,0 +1,110 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SpatialStructure = void 0;
4
+ const WEBIFC = require("web-ifc");
5
+ const units_1 = require("./units");
6
+ class SpatialStructure {
7
+ constructor() {
8
+ this.itemsByFloor = {};
9
+ this._units = new units_1.Units();
10
+ }
11
+ // TODO: Maybe make this more flexible so that it also support more exotic spatial structures?
12
+ setUp(webIfc) {
13
+ this._units.setUp(webIfc);
14
+ this.cleanUp();
15
+ try {
16
+ const spatialRels = webIfc.GetLineIDsWithType(0, WEBIFC.IFCRELCONTAINEDINSPATIALSTRUCTURE);
17
+ const allRooms = new Set();
18
+ const rooms = webIfc.GetLineIDsWithType(0, WEBIFC.IFCSPACE);
19
+ for (let i = 0; i < rooms.size(); i++) {
20
+ allRooms.add(rooms.get(i));
21
+ }
22
+ // First add rooms (if any) to floors
23
+ const aggregates = webIfc.GetLineIDsWithType(0, WEBIFC.IFCRELAGGREGATES);
24
+ const aggregatesSize = aggregates.size();
25
+ for (let i = 0; i < aggregatesSize; i++) {
26
+ const id = aggregates.get(i);
27
+ const properties = webIfc.GetLine(0, id);
28
+ if (!properties ||
29
+ !properties.RelatingObject ||
30
+ !properties.RelatedObjects) {
31
+ continue;
32
+ }
33
+ const parentID = properties.RelatingObject.value;
34
+ const childsIDs = properties.RelatedObjects;
35
+ for (const child of childsIDs) {
36
+ const childID = child.value;
37
+ if (allRooms.has(childID)) {
38
+ this.itemsByFloor[childID] = parentID;
39
+ }
40
+ }
41
+ }
42
+ // Now add items contained in floors and rooms
43
+ // If items contained in room, look for the floor where that room is and assign it to it
44
+ const itemsContainedInRooms = {};
45
+ const spatialRelsSize = spatialRels.size();
46
+ for (let i = 0; i < spatialRelsSize; i++) {
47
+ const id = spatialRels.get(i);
48
+ const properties = webIfc.GetLine(0, id);
49
+ if (!properties ||
50
+ !properties.RelatingStructure ||
51
+ !properties.RelatedElements) {
52
+ continue;
53
+ }
54
+ const structureID = properties.RelatingStructure.value;
55
+ const relatedItems = properties.RelatedElements;
56
+ if (allRooms.has(structureID)) {
57
+ for (const related of relatedItems) {
58
+ if (!itemsContainedInRooms[structureID]) {
59
+ itemsContainedInRooms[structureID] = [];
60
+ }
61
+ const id = related.value;
62
+ itemsContainedInRooms[structureID].push(id);
63
+ }
64
+ }
65
+ else {
66
+ for (const related of relatedItems) {
67
+ const id = related.value;
68
+ this.itemsByFloor[id] = structureID;
69
+ }
70
+ }
71
+ }
72
+ for (const roomID in itemsContainedInRooms) {
73
+ const roomFloor = this.itemsByFloor[roomID];
74
+ if (roomFloor !== undefined) {
75
+ const items = itemsContainedInRooms[roomID];
76
+ for (const item of items) {
77
+ this.itemsByFloor[item] = roomFloor;
78
+ }
79
+ }
80
+ }
81
+ // Finally, add nested items (e.g. elements of curtain walls)
82
+ for (let i = 0; i < aggregatesSize; i++) {
83
+ const id = aggregates.get(i);
84
+ const properties = webIfc.GetLine(0, id);
85
+ if (!properties ||
86
+ !properties.RelatingObject ||
87
+ !properties.RelatedObjects) {
88
+ continue;
89
+ }
90
+ const parentID = properties.RelatingObject.value;
91
+ const childsIDs = properties.RelatedObjects;
92
+ for (const child of childsIDs) {
93
+ const childID = child.value;
94
+ const parentStructure = this.itemsByFloor[parentID];
95
+ if (parentStructure !== undefined) {
96
+ this.itemsByFloor[childID] = parentStructure;
97
+ }
98
+ }
99
+ }
100
+ }
101
+ catch (e) {
102
+ console.log("Could not get floors.");
103
+ }
104
+ }
105
+ cleanUp() {
106
+ this.itemsByFloor = {};
107
+ }
108
+ }
109
+ exports.SpatialStructure = SpatialStructure;
110
+ //# sourceMappingURL=spatial-structure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spatial-structure.js","sourceRoot":"","sources":["../../src/models/spatial-structure.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Units = void 0;
4
+ const WEBIFC = require("web-ifc");
5
+ const THREE = require("three");
6
+ class Units {
7
+ constructor() {
8
+ this.factor = 1;
9
+ this.complement = 1;
10
+ }
11
+ apply(matrix) {
12
+ const scale = this.getScaleMatrix();
13
+ const result = scale.multiply(matrix);
14
+ matrix.copy(result);
15
+ }
16
+ setUp(webIfc) {
17
+ var _a;
18
+ this.factor = 1;
19
+ const length = this.getLengthUnits(webIfc);
20
+ if (!length) {
21
+ return;
22
+ }
23
+ const isLengthNull = length === undefined || length === null;
24
+ const isValueNull = length.Name === undefined || length.Name === null;
25
+ if (isLengthNull || isValueNull) {
26
+ return;
27
+ }
28
+ if (length.Name.value === "FOOT") {
29
+ this.factor = 0.3048;
30
+ }
31
+ else if (((_a = length.Prefix) === null || _a === void 0 ? void 0 : _a.value) === "MILLI") {
32
+ this.complement = 0.001;
33
+ }
34
+ }
35
+ getLengthUnits(webIfc) {
36
+ try {
37
+ const allUnitsAssigns = webIfc.GetLineIDsWithType(0, WEBIFC.IFCUNITASSIGNMENT);
38
+ const unitsAssign = allUnitsAssigns.get(0);
39
+ const unitsAssignProps = webIfc.GetLine(0, unitsAssign);
40
+ for (const units of unitsAssignProps.Units) {
41
+ if (!units || units.value === null || units.value === undefined) {
42
+ continue;
43
+ }
44
+ const unitsProps = webIfc.GetLine(0, units.value);
45
+ if (unitsProps.UnitType && unitsProps.UnitType.value === "LENGTHUNIT") {
46
+ return unitsProps;
47
+ }
48
+ }
49
+ return null;
50
+ }
51
+ catch (e) {
52
+ console.log("Could not get units");
53
+ return null;
54
+ }
55
+ }
56
+ getScaleMatrix() {
57
+ const f = this.factor;
58
+ // prettier-ignore
59
+ return new THREE.Matrix4().fromArray([
60
+ f, 0, 0, 0,
61
+ 0, f, 0, 0,
62
+ 0, 0, f, 0,
63
+ 0, 0, 0, 1,
64
+ ]);
65
+ }
66
+ }
67
+ exports.Units = Units;
68
+ //# sourceMappingURL=units.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"units.js","sourceRoot":"","sources":["../../src/models/units.ts"],"names":[],"mappings":";;;AAAA,kCAAkC;AAClC,+BAA+B;AAE/B,MAAa,KAAK;IAAlB;QACE,WAAM,GAAG,CAAC,CAAC;QACX,eAAU,GAAG,CAAC,CAAC;IA4DjB,CAAC;IA1DC,KAAK,CAAC,MAAqB;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,MAAqB;;QACzB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAChB,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAC3C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO;QACT,CAAC;QACD,MAAM,YAAY,GAAG,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI,CAAC;QAC7D,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC;QACtE,IAAI,YAAY,IAAI,WAAW,EAAE,CAAC;YAChC,OAAO;QACT,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;YACjC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACvB,CAAC;aAAM,IAAI,CAAA,MAAA,MAAM,CAAC,MAAM,0CAAE,KAAK,MAAK,OAAO,EAAE,CAAC;YAC5C,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QAC1B,CAAC;IACH,CAAC;IAEO,cAAc,CAAC,MAAqB;QAC1C,IAAI,CAAC;YACH,MAAM,eAAe,GAAG,MAAM,CAAC,kBAAkB,CAC/C,CAAC,EACD,MAAM,CAAC,iBAAiB,CACzB,CAAC;YACF,MAAM,WAAW,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC3C,MAAM,gBAAgB,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;YACxD,KAAK,MAAM,KAAK,IAAI,gBAAgB,CAAC,KAAK,EAAE,CAAC;gBAC3C,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;oBAChE,SAAS;gBACX,CAAC;gBACD,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;gBAClD,IAAI,UAAU,CAAC,QAAQ,IAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,KAAK,YAAY,EAAE,CAAC;oBACtE,OAAO,UAAU,CAAC;gBACpB,CAAC;YACH,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;YACnC,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAEO,cAAc;QACpB,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;QACtB,kBAAkB;QAClB,OAAO,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC;YACnC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;YACV,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;YACV,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;YACV,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;SACX,CAAC,CAAC;IACL,CAAC;CACF;AA9DD,sBA8DC"}
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "ifc-reader-2",
3
- "version": "1.0.2",
3
+ "version": "1.0.4",
4
4
  "description": "",
5
- "main": "dist/index.mjs",
5
+ "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
7
  "files": [
8
8
  "dist",