更改 Forge 中的材料

2023-11-26

目前,我们正在让客户端在页面加载时检索对象状态(这将导致模型中的“待处理”对象变成不同的颜色)。然后我们轮询更改以更新着色(首先:当查看器加载时,挂起的对象会着色,然后我们继续轮询以再次检查和更改状态,以使 Forge 以不同的颜色渲染它们并存储它们的旧颜色/材质。当轮询收到一个对象不应再着色的更改时,它会告诉 Forge 再次使用旧的颜色/材质。

问题:我们已经找到了问题所在,但不知道如何解决。问题是,在 Forge 中更改材质在启动后不再起作用,它只在前 3 秒左右起作用(材质用于显示颜色)。

但是,即使在前约 3 秒后,设置叠加层仍然有效(显示叠加层而不是材质来显示颜色)。 这不是我们想要实现的目标。这看起来未经优化,因为覆盖层将显示在所有内容中。

然而,这些材料似乎被“锁定”,即在前 3 秒后就无法再更改。好像没有刷新什么的

在示例中,我们发现他们使用viewer.impl.invalidate(true) 来刷新Forge 查看器,但在大约3 秒后没有执行任何操作。

我们还尝试了viewer.impl.invalidate(true, true, true) 的每种组合以及将material.needsUpdate 设置为true,以及尝试重新渲染整个场景。

我们还发现了这一点:https://github.com/mrdoob/ Three.js/issues/790,但我们在 Forge 中找不到一个好的方法来做到这一点,我们尝试了viewer.requestSilentRender(),但也没有做任何事情。

不管怎样,我们已经尝试了一切我们能想到的并且可以在网上找到的材料来使材料发挥作用,但没有任何效果。 我们正在寻找对 Forge 工作原理更有经验的人,能够看到材料代码哪里出了问题。

至于内容,以下是您了解正在发生的情况所需的所有代码:投递箱链接

这是设置颜色的“index.html”文件的一小部分:

try
{
   viewer.restoreAllColorOverlays(); //for materials instead of overlays: viewer.restoreAllColorMaterials();
   $.each(colors, function(color, selectionIds)
   {
      viewer.setColorOverlay(selectionIds, color); //for materials instead of overlays: viewer.setColorMaterial(selectionIds, color);
   });
}
catch(error)
{
   console.error(error);
}

我不知道你如何实现你的应用程序,所以我只告诉你我在你的代码中发现的内容。如果您想解决您所解决的问题,您可以考虑提供一个可重现的案例来证明这一点,我很乐意将其传递给我们的开发团队。以下项目应处于可重现的情况下:

  1. 对您想要实现的目标的简短准确描述。您观察到的行为与您期望的行为,以及为什么这是一个问题。
  2. 用于运行测试的完整但最小的示例源模型。
  3. 一个完整但又最小的Forge app可以通过一个简单的过程来运行和调试,以分析其在示例模型中的行为。
  4. 完整而又极简的纯粹three.js app可以运行并演示您想要的着色器效果。笔记。 Forge Viewer 正在使用 r71three.js.
  5. 重现问题的详细分步说明,例如选择哪个元素,启动什么命令等。

如果您的可复制案例无法在此处公开发布,请将其发送至[email protected] and 发送前删除敏感数据或信息.

=== 我在你的代码中发现了一些东西:

我发现这里有一些错误的类型和缺少的操作ColorMaterial扩大。材质的颜色属性应该是THREE.Color。这是我的修改:

Autodesk.Viewing.Viewer3D.prototype.setColorMaterial = function(objectIds, color)
    {
        if( !(color instanceof THREE.Color) ) throw 'Invalid argument: Color';

        var material = new THREE.MeshPhongMaterial
        ({
             color:      color,
             opacity:    0.8,
             transparent: true
         });

        viewer.impl.matman().addMaterial( 'ColorMaterial-' + new Date().getTime(), material, true );

        // ...........
    };

Its' result is here: enter image description here

In the ColorOverlay延伸一下,材质颜色属性的类型也是错误的,应该是THREE.Color, 也。将其改为THREE.Color应该可以正常工作。另外,overlay是覆盖在3D对象上的,所以你应该调用viewer.hide()和你的setColorOverlay()一起。否则,它看起来就不像透明物体了。

Without hidding 3D object of the wall: enter image description here

hide 3D object of the wall: enter image description here

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

更改 Forge 中的材料 的相关文章

  • 使用 Autodesk A360 中的 URN 创建查看器应用程序

    我创建了一个查看器应用程序 它使用两条腿身份验证并显示已上传到我自己的存储桶的项目 现在 我希望能够查看已上传到 Autodesk A360 的项目 而不是查看自己存储桶中的项目 为此 我已完成以下步骤 实现了三足认证 项目中的A360账号
  • 如何检索 Forge Viewer 对象树?

    我的目标是根据我在 Revit 中创建的线条向查看器添加新的几何图形 以突出显示房间 就像他们在此处所做的那样Link 但我不知道如何访问这些线路 ID 我知道它们在 Revit 中是什么 元素 id 但不知道它们如何映射为 dbid 按照
  • 使用三个 CSG 进行 3D 布尔运算

    按照此处的示例 http learning Threejs com blog 2011 12 10 constructive solid geometry with csg js 并使用 Three js 与https github com
  • Autodesk Viewer 中出现 webGL 错误

    我收到如下错误 未捕获的类型错误 无法读取 null 的属性 webglFramebuffer 当我转到与附加了 Autodesk Viewer 的页面链接的另一个页面时 我不知道它为什么会来 我在我的网站上使用 angularjs 并且该
  • 在 v7 中使用 setViewCube 更新视图

    如何在 v7 中使用 setViewCube 更新视图 我在 v6 中使用了以下代码 但它在 v7 中不起作用 viewer setViewCube top front 在 v6 到 v7 的迁移指南中 它说 我应该通过扩展来调用它 ext
  • setThemingColor 仅适用于叶节点 dbId

    从文档看来 您应该能够使用任何 dbId 调用 setThemingColor 但它似乎只有在您传递的 id 是叶节点时才有效 它是否正确 还有什么方法可以批量调用此方法 或者一次只能调用一个叶节点 我想将 dbId 数组传递到该方法中 是
  • 如何用FitToView控制页面和组件之间的距离?

    使用FitToView后 页面和组件之间的距离太近 有什么好的方法可以控制这个距离吗 在此输入图像描述 https i stack imgur com 7yxqV png 您可以获取对象 组件 的边界框 并用该框放大 缩小以形成适当的框并调
  • 如何在 Forge Viewer 中获取交集框的边界框信息?

    使用剖面分析工具对模型进行剖面查看时添加交集框后 能否获取其边界框信息 原始模型 需要提取边界框的相交框视图 您可以通过以下方式访问截面框的几何信息sectionExtension tool const sb viewer getExten
  • 使用 Python 请求将文件数据放入 Autodesk API

    我正在按照描述的过程进行操作here https developer autodesk com en docs data v2 tutorials upload file 但被一个人拦住了403在第 4 步 我有一个令牌data write
  • 使用 Forge 获取 BIM 360 文件的 Revit 版本

    有没有办法在 BIM 360 上查找文件的 Revit 版本而无需下载 rvt 文件 我发现了类似的问题here https stackoverflow com questions 49141340 are any of the forge
  • 如何调整对象大小 - Autodesk Forge Viewer

    我怎样才能改变对象的大小 我需要改变物体的高度 例如 我们需要更改门或窗帘的高度 在此代码中我的对象消失了 let change function const viewer oViewer const model viewer model
  • Forge Viewer 在多模型上下文中选择

    我们的扩展目前利用viewer select 和模型中的dbId 列表 我们的客户希望在同一查看器中看到辅助模型 我们让他们能够在加载第一个模型后加载参考模型 然而 我们遇到了多个模型的问题 观众从其中一个模型中进行选择以外当我们调用vie
  • 如何激活 Autodesk Forge Snapper?

    我正在尝试激活自查看器版本 7 3 以来实施的新 Snapper 扩展 所以我像这样加载扩展 viewer loadExtension Autodesk Snapping 似乎有效 之后 我尝试访问类似的描述方法 但总是收到此错误 getS
  • 使用 Autodesk API 下载文档

    我正在尝试从 BIM 360 Docs 下载文档 如果我想下载类型为 type items autodesk bim360 File 我只需要获取bucketID和objectID projects
  • 扩展 Autodesk Forge:将我自己的扩展添加到包后,我的控制面板无法连接到 Revit 模型

    我用过这个包 https github com petrbroz forge iot extensions demo https github com petrbroz forge iot extensions demo 之后 我添加了自己
  • 为什么在创建模型衍生作业时不考虑 Webhook 工作流程?

    当我创建一个作业时 使用一个 webhook 来完成https developer api autodesk com modelderivative v2 designdata job https developer api autodes
  • 如何从 Autodesk Forge API 按项目获取评论和传输?

    我试图找到一种获取评论和传输的方法 但在 BIM360 API 或数据管理 API 中没有找到它 可以获得吗 目前尚未公开 BIM 360 的审核和传输 API 有一个Review API的愿望 ALEX 37150 API 希望 公开文档
  • Autodesk Forge Viewer 如何获取线起点/终点的坐标

    我正在尝试在 forge 查看器中突出显示房间 在 Revit 中 我创建了代表房间边界的线条 转换为 svf 后 我知道这些行的 dbids 现在我想知道这些线的起点和终点 顶点 以便我可以创建房间边界的 Three Shape 编辑 我
  • 从存储桶中删除文件。 Autodesk-forge

    从 wip dm prod 存储桶中删除文件时出现问题 errorCode AUTH 012 但我可以使用 x GET 而不是 x DELETE 下载当前文件 我使用这个教程 gt https developer autodesk com
  • 使用 Javascript 下载 BIM360 Docs 文件

    我正在尝试使用 javascript 下载 BIM360 文档文件 我能够从 BIM360 获取文件响应 但无法保存具有正确内容的文件 这是我的 JS 代码 document ready function var anchor vcard

随机推荐

  • Postgres 是否支持嵌套或自治事务?

    我遇到的情况是 我必须将一部分代码作为其自己的事务提交 我创建了一个表subtransaction tbl CREATE TABLE subtransaction tbl entryval integer 以及 plpython3u 语言中
  • 如何在 Mac OSX 上安装 PCRE 开发标头

    我刚刚将 MacBook Pro 升级到 Mavericks 当我访问时 我本地的 Ruby on Rails 开发环境并没有立即运行localhost I see It works 并记得我需要启动 Phusion Passenger 所
  • 特征列嵌入查找

    我一直在使用tensorflow中的数据集和feature columns https developers googleblog com 2017 11 introducing tensorflow feature columns htm
  • ModuleNotFoundError:没有名为“pyperclip”的模块

    类似的问题已经发布在 StackOverflow 上 但我没有找到足够的答案来解决这个问题 我在 Windows 7 计算机上运行 Python 3 6 3 在 IDLE 中 我输入以下 import stmt 并收到后续错误 gt gt
  • 如何在VB 2010中通过文件的默认应用程序打开选定的文件?

    我有用 VB 2010 编写的 Windows 应用程序 在这里 用户可以从打开的对话框中选择任何文件 所以 我想在相应的应用程序中打开该文件 例如 假设用户选择 docx 文件 那么我必须使用 msword 打开该文件 假设 如果它是一个
  • 排序哈希表(映射、字典)数据结构设计

    下面是数据结构的描述 它的操作就像一张普通的地图get put and remove方法 但有一个sort可以调用对地图进行排序的方法 然而 地图记得它的排序结构 因此后续调用 sort 可以更快 如果结构在调用之间没有改变太多 sort
  • ImageMagick 转换和 GNU 并行在一起

    我想加快以下命令的速度 convert limit memory 64 limit map 128 antialias delay 1x2 final png movie mp4 我见过其他的博客文章其中并行和转换一起使用 所以我想知道如何
  • 从多个选择列表中获取未选择的选项

    我有一个多选列表 当用户取消选择所选选项时 我想知道用户取消选择的选项的值 我该如何捕捉它 我的示例代码如下
  • 动态地将一组字段添加到反应式表单中

    我有两个输入字段 姓名和姓氏 我有两个按钮 提交和 添加人员 单击 添加人员 应添加一组新字段 姓名 如何实现这一目标 我找到了如何动态添加单个输入字段的解决方案 但在这里我需要添加一组 我的代码现在没有 添加人员 功能 import Fo
  • 为什么在 Windows 上尝试 Socket.connect 失败需要 1 秒?

    使用 net 时 我注意到尝试连接到未侦听的端口总是需要 1 秒 检查这是否是 net 抽象中的问题或者是否是较低级别的问题 并将其与 linux 进行比较 其中不成功telnet大约需要 3 毫秒 我使用了一个 node js 脚本来连接
  • 使用 Angular CLI 和 Angular 5 在运行时动态加载新模块

    目前我正在开发一个托管在客户端服务器上的项目 对于新的 模块 有无意重新编译整个应用程序 也就是说 客户想要在运行时更新路由器 延 迟加载模块 我已经尝试了几种方法 但无法使其发挥作用 我想知道你们中是否有人知道我还可以尝试什么或我错过了什
  • 如何使用 jQuery 发出指定 contentType 的 jsonp POST 请求?

    我需要使用内容类型 application json 发出 jsonp POST 请求 我可以像这样向服务器发出 POST 请求 jQuery ajax type POST url url data data success success
  • Swift 中的#pragma 标记?

    在 Objective C 中 我可以使用 pragma mark在符号导航器中标记我的代码部分 由于这是一个 C 预处理器命令 因此它在 Swift 中不可用 Swift 中是否有替代方案 或者我是否必须使用丑陋的注释 您可以使用 MAR
  • 在scrapy中抓取后发送电子邮件

    pipeline py代码 class Examplepipeline object def init self dispatcher connect self spider opened signal signals spider ope
  • 是否可以使用 Linkedin Api 获取所有 Linkedin 个人资料帖子

    我正在尝试使用 linkedin API 来显示我的个人资料的提要 我从第一天开始就发布了这些内容 帖子包括媒体 图像 视频等 我想知道是否有可用的 Api 我可以在其中传递一些参数并获取我的 linkedin 个人资料的所有帖子 如果有人
  • 是否有必要在 return 语句中使用 std::move ,并且应该返回右值引用吗?

    我试图理解 C 11 的右值引用和移动语义 这些示例之间有什么区别 哪些示例不进行矢量复制 第一个例子 std vector
  • 如何在控制器中不使用 Rails 操作参数

    我正在 Rails 服务器中为 Shipworks 实现第三方 API 并且 Shipworks 客户端应用程序正在发布action具有 Shipworks 特定语义的参数 然而 Rails 路由逻辑会将此参数覆盖为控制器方法的名称 我是否
  • 如何更新 pandas 中的现有数据框?

    给定这两个数据框 gt gt gt df1 pd DataFrame c1 a a b b c2 x y x y val 0 gt gt gt df1 c1 c2 val 0 a x 0 1 a y 0 2 b x 0 3 b y 0 gt
  • Unity3D,从Unity.UI面板构建PNG?

    考虑任何 Unity UICanvas你可能有 想象一个典型的Panel在那张画布上 假设它恰好包含一些图像 也许一些文本等等 如果您可以将该面板 仅面板 转换为屏幕截图 Texture2D 或 PNG 那将非常方便 我唯一能想到的就是使用
  • 更改 Forge 中的材料

    目前 我们正在让客户端在页面加载时检索对象状态 这将导致模型中的 待处理 对象变成不同的颜色 然后我们轮询更改以更新着色 首先 当查看器加载时 挂起的对象会着色 然后我们继续轮询以再次检查和更改状态 以使 Forge 以不同的颜色渲染它们并