Javascript 如何禁用vtk';s热键
我想禁用vtk上的一些热键。 实际上,我使用的是vtk.js,但是可以用正常的vtk方式告诉我 我想在此处禁用以下热键: “W”:切换感兴趣区域(ROI)选择小部件 “S”:在体渲染模式下切换切片平面 “V”:切换到点形式 “R”:重置摄像机 我尝试在OpenGLRenderwindow上设置InteractiorStyleManipulator, 并尝试了全屏渲染方式。 但是它不起作用 我怎样才能度过难关 谢谢大家!Javascript 如何禁用vtk';s热键,javascript,c++,vtk,vtk.js,Javascript,C++,Vtk,Vtk.js,我想禁用vtk上的一些热键。 实际上,我使用的是vtk.js,但是可以用正常的vtk方式告诉我 我想在此处禁用以下热键: “W”:切换感兴趣区域(ROI)选择小部件 “S”:在体渲染模式下切换切片平面 “V”:切换到点形式 “R”:重置摄像机 我尝试在OpenGLRenderwindow上设置InteractiorStyleManipulator, 并尝试了全屏渲染方式。 但是它不起作用 我怎样才能度过难关 谢谢大家! <div id="container"&g
<div id="container"></div>
<script>
const container = document.querySelector('#container');
//VTK renderwindow/renderer
//const fullScreenRenderer = vtk.Rendering.Misc.vtkFullScreenRenderWindow.newInstance();
const renderWindow = vtk.Rendering.Core.vtkRenderWindow.newInstance();
const renderer = vtk.Rendering.Core.vtkRenderer.newInstance();
renderWindow.addRenderer(renderer);
//webGL/opengl impl
const openGLRenderWindow = vtk.Rendering.OpenGL.vtkRenderWindow.newInstance();
openGLRenderWindow.setContainer(container);
openGLRenderWindow.setSize(1000,1000);
renderWindow.addView(openGLRenderWindow);
//Interactor
const interactor = vtk.Rendering.Core.vtkRenderWindowInteractor.newInstance();
interactor.setView(openGLRenderWindow);
interactor.initialize();
interactor.bindEvents(container);
//Interactor style
const trackball = vtk.Interaction.Style.vtkInteractorStyleTrackballCamera.newInstance();
interactor.setInteractorStyle(trackball);
//disable_shortcuts
let interactorstyle = vtk.Interaction.Style.vtkInteractorStyleManipulator.newInstance();
interactorstyle.handleKeyPress = (callData) => {
const rwi = model.interactor;
let ac = null;
switch (callData.key) {
case 'r':
case 'R':
//callData.pokedRenderer.resetCamera();
//rwi.render();
break;
case 'w':
case 'W':
// ac = callData.pokedRenderer.getActors();
// ac.forEach((anActor) => {
// anActor.getProperty().setRepresentationToWireframe();
// });
//rwi.render();
// break;
break;
case 's':
case 'S':
// ac = callData.pokedRenderer.getActors();
// ac.forEach((anActor) => {
// anActor.getProperty().setRepresentationToSurface();
// });
//rwi.render();
break;
case 'v':
case 'V':
// ac = callData.pokedRenderer.getActors();
// ac.forEach((anActor) => {
// anActor.getProperty().setRepresentationToPoints();
// });
//rwi.render();
break;
default:
break;
}
};
//fullScreenRenderer.getInteractor().setInteractorStyle(interactorstyle);
//Pipeline
const cone = vtk.Filters.Sources.vtkConeSource.newInstance();
const actor = vtk.Rendering.Core.vtkActor.newInstance();
const mapper= vtk.Rendering.Core.vtkMapper.newInstance();
actor.setMapper(mapper);
mapper.setInputConnection(cone.getOutputPort());
renderer.addActor(actor);
//const LUT = vtk.Common.Core.vtkLookUpTable.newInstance();
//Render
renderer.resetCamera();
renderWindow.render();
const container=document.querySelector(“#container”);
//VTK渲染器窗口/渲染器
//const fullScreenRenderer=vtk.Rendering.Misc.vtkFullScreenRenderWindow.newInstance();
const renderWindow=vtk.Rendering.Core.vtkRenderWindow.newInstance();
const renderer=vtk.Rendering.Core.vtkrender.newInstance();
添加渲染器(渲染器);
//webGL/openglimpl
const openGLRenderWindow=vtk.Rendering.OpenGL.vtkRenderWindow.newInstance();
openGLRenderWindow.setContainer(container);
openGLRenderWindow.setSize(10001000);
addView(openGLRenderWindow);
//互动者
const interactitor=vtk.Rendering.Core.vtkrenderWindowInteractior.newInstance();
setView(openGLRenderWindow);
interactior.initialize();
interactior.bindEvents(容器);
//交互者风格
const trackball=vtk.Interaction.Style.vtkInteractorStyleTrackballCamera.newInstance();
互动者。设置互动者风格(轨迹球);
//禁用快捷方式
让interactorstyle=vtk.Interaction.Style.vtkInteractorStyleManipulator.newInstance();
interactorstyle.handleKeyPress=(调用数据)=>{
const rwi=model.interactior;
设ac=null;
开关(callData.key){
案例“r”:
案例“R”:
//callData.pokedrender.resetCamera();
//rwi.render();
打破
案例“w”:
案例“W”:
//ac=callData.pokedrender.getActors();
//ac.forEach((anActor)=>{
//anActor.getProperty().SetRepresentationToDirectFrame();
// });
//rwi.render();
//中断;
打破
案例s:
案例S:
//ac=callData.pokedrender.getActors();
//ac.forEach((anActor)=>{
//anActor.getProperty().setRepresentationToSurface();
// });
//rwi.render();
打破
案例“v”:
案例“V”:
//ac=callData.pokedrender.getActors();
//ac.forEach((anActor)=>{
//anActor.getProperty().setRepresentationToPoints();
// });
//rwi.render();
打破
违约:
打破
}
};
//fullScreenRenderer.getInteractor().setInteractorStyle(interactorstyle);
//管道
const cone=vtk.Filters.Sources.vtkConeSource.newInstance();
const actor=vtk.Rendering.Core.vtkActor.newInstance();
const mapper=vtk.Rendering.Core.vtkMapper.newInstance();
actor.setMapper(mapper);
setInputConnection(cone.getOutputPort());
addActor(actor);
//const LUT=vtk.Common.Core.vtkLookUpTable.newInstance();
//渲染
resetCamera();
renderWindow.render();
< />代码> 我不知道<强> js,但是C++中我必须重写交互类,因为我需要去掉这些加速器。
例如,为了从vtkInteractorStyleTrackballCamera中去掉加速器,我重写了这个类,并重写了键盘处理程序。下面是一个示例实现
您需要创建一个自定义的交互器样式来实现这一点。
子类化interactor样式,通过重写“onKeyPress()”函数处理按键事件,并且不转发按键事件
如果需要转发事件,请调用父类“onKeyPress()”函数
这里共享的代码是C++,可以将其转换为JavaScript。
// Creating the custom interaction style
class CustomInteractorStyle : public vtkInteractorStyleTrackballCamera
{
public:
static CustomInteractorStyle* New();
vtkTypeMacro(CustomInteractorStyle, vtkInteractorStyleTrackballCamera);
// Override onKeyPress Function
virtual void OnKeyPress() override
{
vtkRenderWindowInteractor* renderWindowInteractor = this->Interactor;
switch (rwi->GetKeySym())
{
case "w":
{
// Handle the event on 'w' key press
break;
}
case "s":
{
// Handle the event on 's' key press
break;
}
case "v":
{
// Handle the event on 'v' key press
break;
}
case "r":
{
// Handle the event on 'r' key press
break;
}
default:
break;
}
// If you still want to forward the key press events
// After handling the events. this would be like addition
// Include the below statement
// vtkInteractorStyleTrackballCamera::OnKeyPress();
}
};
vtkStandardNewMacro(CustomInteractorStyle);