Skip to content

Commit 76d8542

Browse files
committed
fix(IFCImporter): optimize IFC parsing
1 parent 8ecd009 commit 76d8542

File tree

1 file changed

+44
-44
lines changed

1 file changed

+44
-44
lines changed

Sources/IO/Geometry/IFCImporter/index.js

Lines changed: 44 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -45,14 +45,16 @@ function vtkIFCImporter(publicAPI, model) {
4545
const pointValues = new Float32Array(vertices.length / 2);
4646
const normalsArray = new Float32Array(vertices.length / 2);
4747

48-
for (let i = 0; i < vertices.length; i += 6) {
49-
pointValues[i / 2] = vertices[i];
50-
pointValues[i / 2 + 1] = vertices[i + 1];
51-
pointValues[i / 2 + 2] = vertices[i + 2];
52-
53-
normalsArray[i / 2] = vertices[i + 3];
54-
normalsArray[i / 2 + 1] = vertices[i + 4];
55-
normalsArray[i / 2 + 2] = vertices[i + 5];
48+
for (let i = 0, p = 0; i < vertices.length;) {
49+
pointValues[p] = vertices[i++];
50+
pointValues[p + 1] = vertices[i++];
51+
pointValues[p + 2] = vertices[i++];
52+
53+
normalsArray[p] = vertices[i++];
54+
normalsArray[p + 1] = vertices[i++];
55+
normalsArray[p + 2] = vertices[i++];
56+
57+
p += 3;
5658
}
5759

5860
const nCells = indices.length;
@@ -91,48 +93,46 @@ function vtkIFCImporter(publicAPI, model) {
9193
const colorArray = new Float32Array(vertices.length / 2);
9294

9395
if (userMatrix) {
94-
const transformMatrix = vtkMatrixBuilder
95-
.buildFromRadian()
96-
.setMatrix(userMatrix);
96+
for (let i = 0, p = 0; i < vertices.length;) {
97+
pointValues[p] = vertices[i++];
98+
pointValues[p + 1] = vertices[i++];
99+
pointValues[p + 2] = vertices[i++];
97100

98-
const normalMatrix = vtkMatrixBuilder
99-
.buildFromRadian()
100-
.multiply3x3(mat3.fromMat4(mat3.create(), userMatrix));
101-
102-
for (let i = 0; i < vertices.length; i += 6) {
103-
const point = [vertices[i], vertices[i + 1], vertices[i + 2]];
104-
const normal = [vertices[i + 3], vertices[i + 4], vertices[i + 5]];
101+
normalsArray[p] = vertices[i++];
102+
normalsArray[p + 1] = vertices[i++];
103+
normalsArray[p + 2] = vertices[i++];
105104

106-
transformMatrix.apply(point);
107-
normalMatrix.apply(normal);
105+
colorArray[p] = color.x;
106+
colorArray[p + 1] = color.y;
107+
colorArray[p + 2] = color.z;
108108

109-
pointValues[i / 2] = point[0];
110-
pointValues[i / 2 + 1] = point[1];
111-
pointValues[i / 2 + 2] = point[2];
109+
p += 3;
110+
}
112111

113-
normalsArray[i / 2] = normal[0];
114-
normalsArray[i / 2 + 1] = normal[1];
115-
normalsArray[i / 2 + 2] = normal[2];
112+
vtkMatrixBuilder
113+
.buildFromRadian()
114+
.setMatrix(userMatrix)
115+
.apply(pointValues);
116116

117-
const colorIndex = i / 2;
118-
colorArray[colorIndex] = color.x;
119-
colorArray[colorIndex + 1] = color.y;
120-
colorArray[colorIndex + 2] = color.z;
121-
}
117+
vtkMatrixBuilder
118+
.buildFromRadian()
119+
.multiply3x3(mat3.fromMat4(mat3.create(), userMatrix))
120+
.apply(normalsArray);
122121
} else {
123-
for (let i = 0; i < vertices.length; i += 6) {
124-
pointValues[i / 2] = vertices[i];
125-
pointValues[i / 2 + 1] = vertices[i + 1];
126-
pointValues[i / 2 + 2] = vertices[i + 2];
127-
128-
normalsArray[i / 2] = vertices[i + 3];
129-
normalsArray[i / 2 + 1] = vertices[i + 4];
130-
normalsArray[i / 2 + 2] = vertices[i + 5];
131-
132-
const colorIndex = i / 2;
133-
colorArray[colorIndex] = color.x;
134-
colorArray[colorIndex + 1] = color.y;
135-
colorArray[colorIndex + 2] = color.z;
122+
for (let i = 0, p = 0; i < vertices.length;) {
123+
pointValues[p] = vertices[i++];
124+
pointValues[p + 1] = vertices[i++];
125+
pointValues[p + 2] = vertices[i++];
126+
127+
normalsArray[p] = vertices[i++];
128+
normalsArray[p + 1] = vertices[i++];
129+
normalsArray[p + 2] = vertices[i++];
130+
131+
colorArray[p] = color.x;
132+
colorArray[p + 1] = color.y;
133+
colorArray[p + 2] = color.z;
134+
135+
p += 3;
136136
}
137137
}
138138

0 commit comments

Comments
 (0)