为啥我无法悬停并单击 Threejs 转换工具?
Posted
技术标签:
【中文标题】为啥我无法悬停并单击 Threejs 转换工具?【英文标题】:Why can't I hover and click the Threejs transformation tools?为什么我无法悬停并单击 Threejs 转换工具? 【发布时间】:2021-12-13 12:09:49 【问题描述】:我正在尝试制作一个能够移动我创建的自定义模型的工具。我做的第一步是显示转换工具并执行更改操作。但我无法悬停或单击转换工具。我的代码中是否缺少某些内容?
activateTheTransformTool()
let bbox = this.viewer.model.getBoundingBox();
this.viewer.impl.createOverlayScene("Dotty.Viewing.Tool.TransformTool");
this.transformControlTx = new THREE.TransformControls(
this.viewer.impl.camera,
this.viewer.impl.canvas,
"translate"
);
this.transformControlTx.setSize(bbox.getBoundingSphere().radius * 5);
this.transformControlTx.visible = false;
this.viewer.impl.addOverlay(
"Dotty.Viewing.Tool.TransformTool",
this.transformControlTx
);
this.transformMesh = this.createTransformMesh();
this.transformControlTx.attach(this.transformMesh);
this.onItemSelected();
handleMouseMove(event)
if (this.transformControlTx)
if (this.isDragging)
console.log(this.transformControlTx);
if (this.transformControlTx.onPointerMove(event))
return true;
return false;
if (this.transformControlTx.onPointerHover(event)) return true;
//return _transRotControl.onPointerHover(event);
onTxChange()
console.log("onTx change");
this.viewer.impl.sceneUpdated(true);
onItemSelected()
if (this.hitPoint)
this.transformControlTx.visible = true;
this.transformControlTx.setPosition(this.hitPoint);
this.transformControlTx.addEventListener("change", this.onTxChange);
this.hitPoint = null;
else
this.transformControlTx.visible = false;
【问题讨论】:
【参考方案1】:您共享的代码似乎没问题(可能取自TransformationExtension,对吗?)但由于它只是实现的一部分,因此很难说出那里出了什么问题。您是否在控制台中看到任何错误或警告?
顺便说一句。我最近在我的一个代码示例中实现了一个类似的转换工具/扩展:https://github.com/petrbroz/forge-simple-viewer-nodejs/tree/experiment/xform-tool。您应该能够将 TransformToolExtension.js 放入您的 Forge 应用程序,在初始化查看器时包含扩展程序的 ID(就像我做的 here),然后一切顺利。
【讨论】:
嗨,彼得。现在我可以悬停我的自定义转换。但不能用 onPointerMove 移动它。我想知道handleButtonDown,handleButtonUp上使用了什么事件。是否等同于 onmousedown / onmouseup ? 这些方法(在工具中)应该抽象任何特定类型的输入。例如,应该为鼠标事件和触摸事件调用handleButtonDown
。以上是关于为啥我无法悬停并单击 Threejs 转换工具?的主要内容,如果未能解决你的问题,请参考以下文章