如何为模型制作放置工具?

Posted

技术标签:

【中文标题】如何为模型制作放置工具?【英文标题】:How to make a placementment tool for a model? 【发布时间】:2021-12-11 11:33:49 【问题描述】:

我按照blog 中的教程进行操作,并希望创建一个像 TransformationExtension 这样的工具。

我发现我选择的模型没有立即在光标上居中,拖动时有间隙。

document.onmousemove = (event) => 
    if (!event.ctrlKey) return;

    let res = this.viewer.impl.hitTest(
        event.clientX,
        event.clientY,
        true,
        null,
        [this.viewer.model.getModelId()]
    );
    let pt = null;

    if (res) 
        pt = res.intersectPoint;
     else 
        pt = viewer.impl.intersectGround(event.clientX, event.clientY);
    

    let tr = this.selectedModel.getPlacementTransform();
    tr.elements[12] = pt.x;
    tr.elements[13] = pt.y;
    tr.elements[14] = pt.z;
    this.selectedModel.setPlacementTransform(tr);
    this.viewer.impl.invalidate(true, true, true);
;

【问题讨论】:

也许您需要从event.clientXevent.clientY 中减去画布偏移量,如下所示:function getMousePos(canvas, e) var rect = canvas.getBoundingClientRect(); return x: e.clientX - rect.left, y: e.clientY - rect.top ; 是的.. 它的作品。谢谢! 【参考方案1】:

正如@AlexAR 提到的,当使用clientXclientY 值查找相对于特定DOM 元素的光标位置时,您必须记住减去元素的客户端边界矩形:Find mouse position relative to element。

顺便说一句。我最近构建了另一个示例 Forge 应用程序,可用于将新模型拖放到您可能会发现有用的查看器中:https://github.com/petrbroz/forge-assembly-configurator。主要的拖放逻辑在setupDragDrop函数中实现。

【讨论】:

以上是关于如何为模型制作放置工具?的主要内容,如果未能解决你的问题,请参考以下文章

如何为 Spark MLlib 模型提供服务?

[iPhone]你将如何为下面给出的结构设计核心数据对象模型

django:DetailView 如何为两个模型工作或基于类的视图如何为两个模型工作?

如何为 MySQL 模型制作 GraphQL 模式?

如何为下拉菜单制作 CSS 边框?

如何为 Visual Studio Express 2013 桌面项目创建安装程序