Skip to content

Commit

Permalink
fix vtk js renderer example
Browse files Browse the repository at this point in the history
  • Loading branch information
Krande committed Jan 27, 2024
1 parent efb906b commit 8dd9d33
Show file tree
Hide file tree
Showing 5 changed files with 56 additions and 12 deletions.
9 changes: 5 additions & 4 deletions examples/experiments/vtk_js/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion examples/experiments/vtk_js/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@
"dependencies": {
"@types/react": "^18.0.27",
"@vitejs/plugin-react": "^4.2.1",
"vtk.js": "^29.4.4",
"archiver": "^6.0.1",
"shader-loader": "1.3.1",
"autoprefixer": "^10.4.17",
"esbuild-helpers": "^1.0.0",
"postcss": "^8.4.21",
Expand All @@ -21,6 +21,7 @@
"tailwindcss": "^3.2.6",
"typescript": "^4.9.5",
"vite": "^5.0.10",
"vtk.js": "^29.4.5",
"zustand": "^4.4.7"
},
"devDependencies": {
Expand Down
4 changes: 3 additions & 1 deletion examples/experiments/vtk_js/src/app.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,9 @@ function App() {

return (
<div className={"flex flex-col h-full w-full"}>
<VTKRenderer/>
<div className={"flex-1 border-2 border-black"}>
<VTKRenderer/>
</div>
</div>


Expand Down
45 changes: 39 additions & 6 deletions examples/experiments/vtk_js/src/components/VTKRenderer.tsx
Original file line number Diff line number Diff line change
@@ -1,16 +1,29 @@
import React, {useEffect} from 'react';
import React, {useEffect, useRef} from 'react';

// Load the rendering pieces we want to use (for both WebGL and WebGPU)
import 'vtk.js/Sources/Rendering/Profiles/Geometry';

import vtkFullScreenRenderWindow from 'vtk.js/Sources/Rendering/Misc/FullScreenRenderWindow';
import vtkActor from 'vtk.js/Sources/Rendering/Core/Actor';
import vtkMapper from 'vtk.js/Sources/Rendering/Core/Mapper';
import vtkConeSource from "vtk.js/Sources/Filters/Sources/ConeSource";
import vtkConeSource from 'vtk.js/Sources/Filters/Sources/ConeSource';

function VTKRenderer() {
const vtkContainerRef = useRef<HTMLDivElement | null>(null);
const vtkContext = useRef<any | null>(null);

useEffect(() => {
const fullScreenRenderer = vtkFullScreenRenderWindow.newInstance();
if (!vtkContainerRef.current || vtkContext.current) {
return;
}

const fullScreenRenderer = vtkFullScreenRenderWindow.newInstance({
container: vtkContainerRef.current,
controllerVisibility: true,
});
const renderer = fullScreenRenderer.getRenderer();
const renderWindow = fullScreenRenderer.getRenderWindow();

// Create a sphere
const coneSource = vtkConeSource.newInstance();
const mapper = vtkMapper.newInstance();
mapper.setInputConnection(coneSource.getOutputPort());
Expand All @@ -21,9 +34,29 @@ function VTKRenderer() {
renderer.addActor(actor);
renderer.resetCamera();
renderWindow.render();

vtkContext.current = {
fullScreenRenderer,
renderer,
renderWindow,
coneSource,
actor,
mapper,
};

return () => {
if (vtkContext.current) {
const {fullScreenRenderer, actor, mapper, coneSource} = vtkContext.current;
actor.delete();
mapper.delete();
coneSource.delete();
fullScreenRenderer.delete();
vtkContext.current = null;
}
};
}, []);

return <div className={"h-screen w-full h-full"} />;
return <div ref={vtkContainerRef}/>;
}

export default VTKRenderer;
export default VTKRenderer;
7 changes: 7 additions & 0 deletions examples/experiments/vtk_js/vite.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,11 @@ export default defineConfig({
}
},
base: './',
optimizeDeps: {
esbuildOptions: {
loader: {
".glsl": "text",
},
},
},
});

0 comments on commit 8dd9d33

Please sign in to comment.