为啥我无法悬停并单击 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 转换工具?的主要内容,如果未能解决你的问题,请参考以下文章

鼠标悬停时的 SVG 地图工具提示,可单击

Selenium-Webdriver (Java) 无法始终执行“悬停和单击”功能

word转换成PDF格式 为啥部分字没了呢

单击“a”元素时,触发它的悬停处理程序,而不是转到链接

请教一下ofd转word怎么转

浏览器调整大小时的CSS转换“触发器”