<template>

    <div id="vtkContainer"  />
</template>

<script>
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 { onMounted } from 'vue';
import vtkRenderWindowWithControlBar from '@kitware/vtk.js/Rendering/Misc/RenderWindowWithControlBar';
import vtkSlider from '@kitware/vtk.js/Interaction/UI/Slider';
import vtkCornerAnnotation from '@kitware/vtk.js/Interaction/UI/CornerAnnotation';

import vtkActor from '@kitware/vtk.js/Rendering/Core/Actor';
import vtkConeSource from '@kitware/vtk.js/Filters/Sources/ConeSource';
import vtkMapper from '@kitware/vtk.js/Rendering/Core/Mapper';
export default {
  name: 'HelloWorld',
 

  //体制
  setup() {
    
    onMounted(() => {
      // Define container size/position
const body = document.querySelector('body');
// const rootContainer = document.createElement('div');
// rootContainer.style.position = 'relative';
// rootContainer.style.width = '500px';
// rootContainer.style.height = '500px';

// body.appendChild(rootContainer);
body.style.margin = '0';

// Create render window inside container
const rootContainer =document.getElementById("vtkContainer");
rootContainer.style.position = 'relative';
rootContainer.style.width = '500px';
rootContainer.style.height = '500px';
console.log("rootContainer:",rootContainer);    

const renderWindow = vtkRenderWindowWithControlBar.newInstance({
  controlSize: 25,
});
renderWindow.setContainer(rootContainer);

// Add some content to the renderer
const coneSource = vtkConeSource.newInstance();
const mapper = vtkMapper.newInstance();
const actor = vtkActor.newInstance();

mapper.setInputConnection(coneSource.getOutputPort());
actor.setMapper(mapper);

renderWindow.getRenderer().addActor(actor);
renderWindow.getRenderer().resetCamera();
renderWindow.getRenderWindow().render();

// Set control bar to be red so we can see it + layout setup...
renderWindow.getControlContainer().style.background = '#eee';
renderWindow.getControlContainer().style.display = 'flex';
renderWindow.getControlContainer().style.alignItems = 'stretch';
renderWindow.getControlContainer().style.justifyContent = 'stretch';
renderWindow.getControlContainer().innerHTML = `
  <button alt="Left"   title="Left"   value="left">L</button>
  <button alt="Top"    title="Top"    value="top">T</button>
  <button alt="Right"  title="Right"  value="right">R</button>
  <button alt="Bottom" title="Bottom" value="bottom">B</button>
  <div class="js-slider"></div>
`;

// Add corner annotation
const cornerAnnotation = vtkCornerAnnotation.newInstance();
cornerAnnotation.setContainer(renderWindow.getRenderWindowContainer());
cornerAnnotation.getAnnotationContainer().style.color = 'white';
cornerAnnotation.updateMetadata(coneSource.get('resolution', 'mtime'));
cornerAnnotation.updateTemplates({
  nw(meta) {
    return `<b>Resolution: </b> ${meta.resolution}`;
  },
  se(meta) {
    return `<span style="font-size: 50%"><i style="color: red;">mtime:</i>${meta.mtime}</span><br/>Annotation Corner`;
  },
});

// Add slider to the control bar
const sliderContainer = renderWindow
  .getControlContainer()
  .querySelector('.js-slider');
sliderContainer.style.flex = '1';
sliderContainer.style.position = 'relative';
sliderContainer.style.minWidth = '25px';
sliderContainer.style.minHeight = '25px';

const slider = vtkSlider.newInstance();
slider.generateValues(6, 60, 55);
slider.setValue(6);
slider.setContainer(sliderContainer);
slider.onValueChange((resolution) => {
  coneSource.set({ resolution });
  renderWindow.getRenderWindow().render();
  cornerAnnotation.updateMetadata(coneSource.get('resolution', 'mtime'));
});

function updateSizeAndOrientation() {
  renderWindow.resize();
  slider.resize();
  renderWindow.getControlContainer().style.flexFlow = slider.getOrientation()
    ? 'row'
    : 'column';
  setTimeout(slider.resize, 0);
}
updateSizeAndOrientation();

// Handle UI to change bar location
function onClick(e) {
  renderWindow.setControlPosition(e.target.value);
  updateSizeAndOrientation();
}

const list = document.querySelectorAll('button');
let count = list.length;
while (count--) {
  list[count].style.width = '25px';
  list[count].style.height = '25px';
  list[count].style.flex = 'none';
  list[count].addEventListener('click', onClick);
}
    });
    return ;
  }
}


</script>

<style scoped>
.controls {
  position: absolute;
  top: 25px;
  left: 25px;
  background: white;
  padding: 12px;
}
</style>