如何使用 Autodesk Platform Services v7 查看器 API 以编程方式将所有对象的默认颜色设置为灰色以进行进度跟踪?

问题描述 投票:0回答:1

我正在使用 Autodesk Platform Services v7,我正在尝试找到一种方法来以编程方式将所有对象的默认颜色设置为无颜色或灰色。这是用于建筑施工中的进度跟踪,用户需要手动为已完成施工的对象着色。

问题

我搜索了官方文档,虽然我确实遇到了一种允许我更改所选对象颜色的方法,但这不符合我的需要,因为我想一次更改所有对象的颜色。

https://aps.autodesk.com/en/docs/viewer/v7/reference/Viewing/Viewer3D/#setselectioncolor-color-selectiontype

预期行为

我正在寻找一个代码片段,它可以自动将所有对象的默认颜色设置为无颜色或灰色。

任何帮助将不胜感激。 提前谢谢你!

代码

import * as THREE from "three";

function ProgressMgmtExt(viewer, options) {
    Autodesk.Viewing.Extension.call(this, viewer, options);
}

ProgressMgmtExt.prototype = Object.create(Autodesk.Viewing.Extension.prototype);
ProgressMgmtExt.prototype.constructor = ProgressMgmtExt;

ProgressMgmtExt.prototype.onToolbarCreated = function (toolbar) {
  const viewer = this.viewer;
  const button = new Autodesk.Viewing.UI.Button("show-env-bg-button");

  button.onClick = function (e) {
    const instanceTree = viewer.model.getInstanceTree();
    const rootId = instanceTree.getRootId(); // it was 1
    const color = new THREE.Vector4(1, 0, 0, 1);
    viewer.setThemingColor(rootId, color, viewer.model, true);
  };
}

----------------3 月 14 日,已添加------------------------

我会用截图进一步解释。 首先,我想将这张图片中所有对象的颜色都改为灰色。比如我面前有一个黄色的大盒子,我想把它变成灰色。还有一个蓝色的栅栏,我想把它改成灰色。还有一些黄色的管道,我想把它换成灰色。在我们把所有东西都变成灰色之后,我们想把它们涂成另一种颜色作为施工进度控制。

如果我只是点击这个黄色框来选择它,它会变成浅蓝色。接下来,当我运行你教我的代码,然后点击它,它就变成透明了。

所以,我一直没能达到我想达到的效果。。。我想达到的是让所有涂上各种颜色的物体一劳永逸地变成灰色。

javascript autodesk-forge autodesk-viewer autodesk autodesk-bim360
1个回答
1
投票

一个简单的方法是使用

setThemingColor()
.

您可以在根dbid上设置这个函数(在大多数情况下是dbid 1,用instance treederivative tree确认)并且由于recursive将这个颜色应用到所有对象选项。

NOP_VIEWER.setThemingColor(1, new THREE.Vector4(0.9, 0.9, 0.9, 1), NOP_VIEWER.model, true)

但是,它不会替换对象颜色。因此,如果您减少颜色的 Alpha 通道,原始对象颜色和主题颜色将混合。

“无色”是什么意思?如果您想要透明对象(可能只有轮廓),您可以隐藏这些对象并让Ghost hidden objects选项来完成这项工作?

© www.soinside.com 2019 - 2024. All rights reserved.