Skip to content

Commit 439a826

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

File tree

1 file changed

+40
-46
lines changed

1 file changed

+40
-46
lines changed

Sources/IO/Geometry/IFCImporter/index.js

Lines changed: 40 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -45,14 +45,14 @@ 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; i += 6, p += 3) {
49+
pointValues[p] = vertices[i];
50+
pointValues[p + 1] = vertices[i + 1];
51+
pointValues[p + 2] = vertices[i + 2];
52+
53+
normalsArray[p] = vertices[i + 3];
54+
normalsArray[p + 1] = vertices[i + 4];
55+
normalsArray[p + 2] = vertices[i + 5];
5656
}
5757

5858
const nCells = indices.length;
@@ -91,48 +91,42 @@ function vtkIFCImporter(publicAPI, model) {
9191
const colorArray = new Float32Array(vertices.length / 2);
9292

9393
if (userMatrix) {
94-
const transformMatrix = vtkMatrixBuilder
95-
.buildFromRadian()
96-
.setMatrix(userMatrix);
94+
for (let i = 0, p = 0; i < vertices.length; i += 6, p += 3) {
95+
pointValues[p] = vertices[i];
96+
pointValues[p + 1] = vertices[i + 1];
97+
pointValues[p + 2] = vertices[i + 2];
98+
99+
normalsArray[p] = vertices[i + 3];
100+
normalsArray[p + 1] = vertices[i + 4];
101+
normalsArray[p + 2] = vertices[i + 5];
102+
103+
colorArray[p] = color.x;
104+
colorArray[p + 1] = color.y;
105+
colorArray[p + 2] = color.z;
106+
}
97107

98-
const normalMatrix = vtkMatrixBuilder
108+
vtkMatrixBuilder
99109
.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]];
105-
106-
transformMatrix.apply(point);
107-
normalMatrix.apply(normal);
110+
.setMatrix(userMatrix)
111+
.apply(pointValues);
108112

109-
pointValues[i / 2] = point[0];
110-
pointValues[i / 2 + 1] = point[1];
111-
pointValues[i / 2 + 2] = point[2];
112-
113-
normalsArray[i / 2] = normal[0];
114-
normalsArray[i / 2 + 1] = normal[1];
115-
normalsArray[i / 2 + 2] = normal[2];
116-
117-
const colorIndex = i / 2;
118-
colorArray[colorIndex] = color.x;
119-
colorArray[colorIndex + 1] = color.y;
120-
colorArray[colorIndex + 2] = color.z;
121-
}
113+
vtkMatrixBuilder
114+
.buildFromRadian()
115+
.multiply3x3(mat3.fromMat4(mat3.create(), userMatrix))
116+
.apply(normalsArray);
122117
} 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;
118+
for (let i = 0, p = 0; i < vertices.length; i += 6, p += 3) {
119+
pointValues[p] = vertices[i];
120+
pointValues[p + 1] = vertices[i + 1];
121+
pointValues[p + 2] = vertices[i + 2];
122+
123+
normalsArray[p] = vertices[i + 3];
124+
normalsArray[p + 1] = vertices[i + 4];
125+
normalsArray[p + 2] = vertices[i + 5];
126+
127+
colorArray[p] = color.x;
128+
colorArray[p + 1] = color.y;
129+
colorArray[p + 2] = color.z;
136130
}
137131
}
138132

0 commit comments

Comments
 (0)