@@ -14,6 +14,7 @@ import vtkPolyData from 'vtk.js/Sources/Common/DataModel/PolyData';
14
14
import vtkCellArray from 'vtk.js/Sources/Common/Core/CellArray' ;
15
15
import vtkAppendPolyData from 'vtk.js/Sources/Filters/General/AppendPolyData' ;
16
16
import vtkMatrixBuilder from 'vtk.js/Sources/Common/Core/MatrixBuilder' ;
17
+ import { mat3 } from 'gl-matrix' ;
17
18
18
19
const { vtkErrorMacro } = macro ;
19
20
@@ -94,11 +95,16 @@ function vtkIFCImporter(publicAPI, model) {
94
95
. buildFromRadian ( )
95
96
. setMatrix ( userMatrix ) ;
96
97
98
+ const normalMatrix = vtkMatrixBuilder
99
+ . buildFromRadian ( )
100
+ . multiply3x3 ( mat3 . fromMat4 ( mat3 . create ( ) , userMatrix ) ) ;
101
+
97
102
for ( let i = 0 ; i < vertices . length ; i += 6 ) {
98
103
const point = [ vertices [ i ] , vertices [ i + 1 ] , vertices [ i + 2 ] ] ;
99
104
const normal = [ vertices [ i + 3 ] , vertices [ i + 4 ] , vertices [ i + 5 ] ] ;
100
105
101
- transformMatrix . apply ( point ) . apply ( normal ) ;
106
+ transformMatrix . apply ( point ) ;
107
+ normalMatrix . apply ( normal ) ;
102
108
103
109
pointValues [ i / 2 ] = point [ 0 ] ;
104
110
pointValues [ i / 2 + 1 ] = point [ 1 ] ;
@@ -244,32 +250,32 @@ function vtkIFCImporter(publicAPI, model) {
244
250
publicAPI . importActors = ( renderer ) => {
245
251
if ( model . mergeGeometries ) {
246
252
const opaqueMeshes = meshes . filter ( ( mesh ) => mesh . color . w === 1 ) ;
247
- let apd = vtkAppendPolyData . newInstance ( ) ;
253
+ const oapd = vtkAppendPolyData . newInstance ( ) ;
248
254
249
255
opaqueMeshes . forEach ( ( mesh ) => {
250
256
const pd = createColoredPolyDataFromIFCMesh ( mesh ) ;
251
- apd . addInputData ( pd ) ;
257
+ oapd . addInputData ( pd ) ;
252
258
} ) ;
253
259
254
260
let mapper = vtkMapper . newInstance ( ) ;
255
261
mapper . setColorModeToDirectScalars ( ) ;
256
- mapper . setInputConnection ( apd . getOutputPort ( ) ) ;
262
+ mapper . setInputConnection ( oapd . getOutputPort ( ) ) ;
257
263
258
264
let actor = vtkActor . newInstance ( ) ;
259
265
actor . setMapper ( mapper ) ;
260
266
renderer . addActor ( actor ) ;
261
267
262
268
const transparentMeshes = meshes . filter ( ( mesh ) => mesh . color . w < 1 ) ;
263
- apd = vtkAppendPolyData . newInstance ( ) ;
269
+ const tapd = vtkAppendPolyData . newInstance ( ) ;
264
270
265
271
transparentMeshes . forEach ( ( mesh ) => {
266
272
const pd = createColoredPolyDataFromIFCMesh ( mesh ) ;
267
- apd . addInputData ( pd ) ;
273
+ tapd . addInputData ( pd ) ;
268
274
} ) ;
269
275
270
276
mapper = vtkMapper . newInstance ( ) ;
271
277
mapper . setColorModeToDirectScalars ( ) ;
272
- mapper . setInputConnection ( apd . getOutputPort ( ) ) ;
278
+ mapper . setInputConnection ( tapd . getOutputPort ( ) ) ;
273
279
274
280
actor = vtkActor . newInstance ( ) ;
275
281
actor . setMapper ( mapper ) ;
0 commit comments