| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 | 
							- import '@kitware/vtk.js/favicon';
 
- // Load the rendering pieces we want to use (for both WebGL and WebGPU)
 
- import '@kitware/vtk.js/Rendering/Profiles/Geometry';
 
- import '@kitware/vtk.js/Rendering/Profiles/Glyph';
 
- import vtkFullScreenRenderWindow from '@kitware/vtk.js/Rendering/Misc/FullScreenRenderWindow';
 
- import vtkWidgetManager from '@kitware/vtk.js/Widgets/Core/WidgetManager';
 
- import vtkBoxWidget from './BoxWidget';
 
- import controlPanel from './controlPanel.html';
 
- // ----------------------------------------------------------------------------
 
- // Standard rendering code setup
 
- // ----------------------------------------------------------------------------
 
- const fullScreenRenderer = vtkFullScreenRenderWindow.newInstance({
 
-   background: [0, 0, 0],
 
- });
 
- const renderer = fullScreenRenderer.getRenderer();
 
- const renderWindow = fullScreenRenderer.getRenderWindow();
 
- const openGLRenderWindow = fullScreenRenderer.getApiSpecificRenderWindow();
 
- // ----------------------------------------------------------------------------
 
- // 2D overlay rendering
 
- // ----------------------------------------------------------------------------
 
- const overlaySize = 15;
 
- const overlayBorder = 2;
 
- const overlay = document.createElement('div');
 
- overlay.style.position = 'absolute';
 
- overlay.style.width = `${overlaySize}px`;
 
- overlay.style.height = `${overlaySize}px`;
 
- overlay.style.border = `solid ${overlayBorder}px red`;
 
- overlay.style.borderRadius = '50%';
 
- overlay.style.left = '-100px';
 
- overlay.style.pointerEvents = 'none';
 
- document.querySelector('body').appendChild(overlay);
 
- // ----------------------------------------------------------------------------
 
- // Widget manager
 
- // ----------------------------------------------------------------------------
 
- const widgetManager = vtkWidgetManager.newInstance();
 
- widgetManager.setRenderer(renderer);
 
- const widget = vtkBoxWidget.newInstance();
 
- function widgetRegistration(e) {
 
-   const action = e ? e.currentTarget.dataset.action : 'addWidget';
 
-   const viewWidget = widgetManager[action](widget);
 
-   if (viewWidget) {
 
-     viewWidget.setScaleInPixels(false);
 
-     viewWidget.setDisplayCallback((coords) => {
 
-       overlay.style.left = '-100px';
 
-       if (coords) {
 
-         const [w, h] = openGLRenderWindow.getSize();
 
-         overlay.style.left = `${Math.round(
 
-           (coords[0][0] / w) * window.innerWidth -
 
-             overlaySize * 0.5 -
 
-             overlayBorder
 
-         )}px`;
 
-         overlay.style.top = `${Math.round(
 
-           ((h - coords[0][1]) / h) * window.innerHeight -
 
-             overlaySize * 0.5 -
 
-             overlayBorder
 
-         )}px`;
 
-       }
 
-     });
 
-     renderer.resetCamera();
 
-     renderer.resetCameraClippingRange();
 
-   }
 
-   widgetManager.enablePicking();
 
-   renderWindow.render();
 
- }
 
- // Initial widget register
 
- widgetRegistration();
 
- // -----------------------------------------------------------
 
- // UI control handling
 
- // -----------------------------------------------------------
 
- fullScreenRenderer.addController(controlPanel);
 
- function updateFlag(e) {
 
-   const value = !!e.target.checked;
 
-   const name = e.currentTarget.dataset.name;
 
-   widget.set({ [name]: value }); // can be called on either viewWidget or parentWidget
 
-   widgetManager.enablePicking();
 
-   renderWindow.render();
 
- }
 
- const elems = document.querySelectorAll('.flag');
 
- for (let i = 0; i < elems.length; i++) {
 
-   elems[i].addEventListener('change', updateFlag);
 
- }
 
- const buttons = document.querySelectorAll('button');
 
- for (let i = 0; i < buttons.length; i++) {
 
-   buttons[i].addEventListener('click', widgetRegistration);
 
- }
 
 
  |