77 * ════════════════════════════════════════════════════════════════
88 */
99
10- import vtkActor from "@kitware/vtk.js/Rendering/Core/Actor" ;
11- import vtkColorTransferFunction from "@kitware/vtk.js/Rendering/Core/ColorTransferFunction" ;
12- import vtkColorMaps from "@kitware/vtk.js/Rendering/Core/ColorTransferFunction/ColorMaps" ;
13- import vtkDataArray from "@kitware/vtk.js/Common/Core/DataArray" ;
14- import vtkImageData from "@kitware/vtk.js/Common/DataModel/ImageData" ;
15- import vtkImageMarchingSquares from "@kitware/vtk.js/Filters/General/ImageMarchingSquares" ;
16- import vtkGenericRenderWindow from "@kitware/vtk.js/Rendering/Misc/GenericRenderWindow" ;
17- import vtkMapper from "@kitware/vtk.js/Rendering/Core/Mapper" ;
18- import vtkPolyData from "@kitware/vtk.js/Common/DataModel/PolyData" ;
19- import vtkScalarBarActor from "@kitware/vtk.js/Rendering/Core/ScalarBarActor" ;
10+ let _vtkModules = null ;
11+
12+ async function loadVtkModules ( ) {
13+ if ( _vtkModules ) return _vtkModules ;
14+ await import ( "@kitware/vtk.js/Rendering/Profiles/Geometry" ) ;
15+ const [
16+ { default : vtkActor } ,
17+ { default : vtkColorTransferFunction } ,
18+ { default : vtkColorMaps } ,
19+ { default : vtkDataArray } ,
20+ { default : vtkImageData } ,
21+ { default : vtkImageMarchingSquares } ,
22+ { default : vtkGenericRenderWindow } ,
23+ { default : vtkMapper } ,
24+ { default : vtkPolyData } ,
25+ { default : vtkScalarBarActor } ,
26+ ] = await Promise . all ( [
27+ import ( "@kitware/vtk.js/Rendering/Core/Actor" ) ,
28+ import ( "@kitware/vtk.js/Rendering/Core/ColorTransferFunction" ) ,
29+ import ( "@kitware/vtk.js/Rendering/Core/ColorTransferFunction/ColorMaps" ) ,
30+ import ( "@kitware/vtk.js/Common/Core/DataArray" ) ,
31+ import ( "@kitware/vtk.js/Common/DataModel/ImageData" ) ,
32+ import ( "@kitware/vtk.js/Filters/General/ImageMarchingSquares" ) ,
33+ import ( "@kitware/vtk.js/Rendering/Misc/GenericRenderWindow" ) ,
34+ import ( "@kitware/vtk.js/Rendering/Core/Mapper" ) ,
35+ import ( "@kitware/vtk.js/Common/DataModel/PolyData" ) ,
36+ import ( "@kitware/vtk.js/Rendering/Core/ScalarBarActor" ) ,
37+ ] ) ;
38+ _vtkModules = {
39+ vtkActor, vtkColorTransferFunction, vtkColorMaps, vtkDataArray,
40+ vtkImageData, vtkImageMarchingSquares, vtkGenericRenderWindow,
41+ vtkMapper, vtkPolyData, vtkScalarBarActor,
42+ } ;
43+ return _vtkModules ;
44+ }
2045
2146import {
2247 prepareMesh ,
@@ -47,35 +72,35 @@ export function createContourLineOptions(options = {}) {
4772 } ;
4873}
4974
50- export function plotSolution ( model , result , plotType , plotDivId , renderOptions = { } ) {
75+ export async function plotSolution ( model , result , plotType , plotDivId , renderOptions = { } ) {
5176 console . time ( "plottingTime" ) ;
5277
5378 const meshDimension = model . meshConfig . meshDimension ;
5479 const meshData = prepareMesh ( model . meshConfig ) ;
55- const vtkData = transformSolverOutputToVtkData ( model , result , meshData , {
80+ const vtkData = await transformSolverOutputToVtkData ( model , result , meshData , {
5681 mode : meshDimension === "1D" && plotType === "line" ? "line" : "surface" ,
5782 } ) ;
5883
59- renderVtkScene ( vtkData , plotDivId , model . solverConfig , plotType , renderOptions ) ;
84+ await renderVtkScene ( vtkData , plotDivId , model . solverConfig , plotType , renderOptions ) ;
6085 console . timeEnd ( "plottingTime" ) ;
6186}
6287
63- export function plotInterpolatedSolution ( model , result , plotType , plotDivId , renderOptions = { } ) {
88+ export async function plotInterpolatedSolution ( model , result , plotType , plotDivId , renderOptions = { } ) {
6489 console . time ( "plottingTime" ) ;
6590
6691 if ( model . meshConfig . meshDimension !== "2D" || plotType !== "contour" ) {
67- plotSolution ( model , result , plotType , plotDivId , renderOptions ) ;
92+ await plotSolution ( model , result , plotType , plotDivId , renderOptions ) ;
6893 console . timeEnd ( "plottingTime" ) ;
6994 return ;
7095 }
7196
7297 const meshData = prepareMesh ( model . meshConfig ) ;
73- const interpolatedVtkData = buildInterpolatedVtkData ( model , result , meshData ) ;
74- renderVtkScene ( interpolatedVtkData , plotDivId , model . solverConfig , `${ plotType } -interpolated` , renderOptions ) ;
98+ const interpolatedVtkData = await buildInterpolatedVtkData ( model , result , meshData ) ;
99+ await renderVtkScene ( interpolatedVtkData , plotDivId , model . solverConfig , `${ plotType } -interpolated` , renderOptions ) ;
75100 console . timeEnd ( "plottingTime" ) ;
76101}
77102
78- export function transformSolverOutputToVtkData ( model , result , meshData = null , options = { } ) {
103+ export async function transformSolverOutputToVtkData ( model , result , meshData = null , options = { } ) {
79104 const preparedMesh = meshData ?? prepareMesh ( model . meshConfig ) ;
80105 const { nodesXCoordinates, nodesYCoordinates } = result . nodesCoordinates ;
81106 const solutionArray = extractScalarSolution ( result . solutionVector , nodesXCoordinates . length ) ;
@@ -87,7 +112,7 @@ export function transformSolverOutputToVtkData(model, result, meshData = null, o
87112 ? buildLineCellsFromPoints ( nodesXCoordinates . length )
88113 : buildCellArrayFromNop ( preparedMesh . nop ?? [ ] ) ;
89114
90- const polyData = buildPolyData ( points , solutionArray , cells , mode ) ;
115+ const polyData = await buildPolyData ( points , solutionArray , cells , mode ) ;
91116
92117 return {
93118 points,
@@ -104,8 +129,8 @@ export function transformSolverOutputToVtkData(model, result, meshData = null, o
104129 } ;
105130}
106131
107- export function transformSolverOutputToVTP ( model , result , meshData = null , options = { } ) {
108- const vtkData = transformSolverOutputToVtkData ( model , result , meshData , options ) ;
132+ export async function transformSolverOutputToVTP ( model , result , meshData = null , options = { } ) {
133+ const vtkData = await transformSolverOutputToVtkData ( model , result , meshData , options ) ;
109134 return buildVTPString ( vtkData ) ;
110135}
111136
@@ -129,11 +154,12 @@ export function transformSolverOutputToMLBuffers(result) {
129154 } ;
130155}
131156
132- function renderVtkScene ( vtkData , plotDivId , solverConfig , plotType , renderOptions = { } ) {
157+ async function renderVtkScene ( vtkData , plotDivId , solverConfig , plotType , renderOptions = { } ) {
133158 if ( typeof document === "undefined" ) {
134159 errorLog ( "vtk.js visualization requires a browser environment" ) ;
135160 return ;
136161 }
162+ const { vtkActor, vtkColorTransferFunction, vtkColorMaps, vtkGenericRenderWindow, vtkMapper, vtkScalarBarActor } = await loadVtkModules ( ) ;
137163
138164 const container = document . getElementById ( plotDivId ) ;
139165 if ( ! container ) {
@@ -191,7 +217,7 @@ function renderVtkScene(vtkData, plotDivId, solverConfig, plotType, renderOption
191217
192218 const contourLines = createContourLineOptions ( renderOptions . contourLines ?? { enabled : false } ) ;
193219 if ( contourLines . enabled && vtkData . mode !== "line" ) {
194- addContourLinesToRenderer ( renderer , vtkData , scalarRange , contourLines ) ;
220+ await addContourLinesToRenderer ( renderer , vtkData , scalarRange , contourLines ) ;
195221 }
196222
197223 renderer . resetCamera ( ) ;
@@ -200,11 +226,12 @@ function renderVtkScene(vtkData, plotDivId, solverConfig, plotType, renderOption
200226 container . title = `${ plotType } plot - ${ solverConfig } ` ;
201227}
202228
203- function addContourLinesToRenderer ( renderer , vtkData , scalarRange , contourOptions ) {
229+ async function addContourLinesToRenderer ( renderer , vtkData , scalarRange , contourOptions ) {
204230 const gridMeta = vtkData . metadata ?. interpolationGrid ;
205231 if ( ! gridMeta ) {
206232 return ;
207233 }
234+ const { vtkActor, vtkDataArray, vtkImageData, vtkImageMarchingSquares, vtkMapper } = await loadVtkModules ( ) ;
208235
209236 const imageData = vtkImageData . newInstance ( ) ;
210237 imageData . setDimensions ( gridMeta . nx , gridMeta . ny , 1 ) ;
@@ -259,7 +286,8 @@ function reverseColorMapPreset(preset, reverse) {
259286 return { ...preset , RGBPoints : reversed } ;
260287}
261288
262- function buildPolyData ( points , scalars , cells , mode = "surface" ) {
289+ async function buildPolyData ( points , scalars , cells , mode = "surface" ) {
290+ const { vtkPolyData, vtkDataArray } = await loadVtkModules ( ) ;
263291 const polyData = vtkPolyData . newInstance ( ) ;
264292 polyData . getPoints ( ) . setData ( points , 3 ) ;
265293 if ( cells . length > 0 ) {
@@ -422,7 +450,7 @@ function buildVTPString(vtkData) {
422450 ] . join ( "\n" ) ;
423451}
424452
425- function buildInterpolatedVtkData ( model , result , meshData ) {
453+ async function buildInterpolatedVtkData ( model , result , meshData ) {
426454 const { nodesXCoordinates, nodesYCoordinates } = result . nodesCoordinates ;
427455 const basisFunctions = new BasisFunctions ( {
428456 meshDimension : model . meshConfig . meshDimension ,
@@ -527,7 +555,7 @@ function buildInterpolatedVtkData(model, result, meshData) {
527555
528556 const points = buildPointsArray ( visNodeXCoordinates , visNodeYCoordinates ) ;
529557 const cells = buildStructuredGridCells ( visNodesX , visNodesY , insideMask ) ;
530- const polyData = buildPolyData ( points , visSolution , cells , "surface" ) ;
558+ const polyData = await buildPolyData ( points , visSolution , cells , "surface" ) ;
531559
532560 return {
533561 points,
0 commit comments