目前,我们正在让客户端在页面加载时检索对象状态(这将导致模型中的“待处理”对象变成不同的颜色)。然后我们轮询更改以更新着色(首先:当查看器加载时,挂起的对象会着色,然后我们继续轮询以再次检查和更改状态,以使 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/third.js/issues/790,但我们在 Forge 中找不到一个好的方法来做到这一点,我们尝试了viewer.requestSilentRender(),但没有成功做任何事。
不管怎样,我们已经尝试了一切我们能想到的并且可以在网上找到的材料来使材料发挥作用,但没有任何效果。我们正在寻找对 Forge 工作原理更有经验的人,能够看到材料代码哪里出了问题。
至于内容,这里是您需要了解正在发生的情况的所有代码: DROPBOX LINK
这是设置颜色的“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);
}
Run Code Online (Sandbox Code Playgroud) 以前我使用过这个查看器脚本,用于正确加载dwg
<script src="https://autodeskviewer.com/viewers/2.5/viewer3D.min.js"></script>
现在我按照本教程设置初始查看器:
https://developer.autodesk.com/en/docs/viewer/v2/tutorials/basic-viewer/
现在我的文件都没有加载到查看器上.Viewer只显示动画加载器,无法加载文件.当我改变观众时:
<script src="https://developer.api.autodesk.com/viewingservice/v1/viewers/viewer3D.min.js"></script>
至:
<script src="https://autodeskviewer.com/viewers/2.5/viewer3D.min.js"></script>
该文件在该查看器中加载.
他们不是关于如何使用Markup API的例子.任何人都可以提供一个例子.
当我尝试在autodesk-viewer中为多层 CAD 文件绘制标记时,标记工具的字体大小或粗细比其他 CAD 文件大得多。该标记适用于除多层 3D 文件之外的其他 CAD 文件。这背后的原因是什么?我该如何解决这个问题?

假设我想创建一个基于云的服务,它可以连接到 Revit Server 并获取模型数据、处理它,并在基于 Web 的界面中向用户返回一些有用的信息。然后用户修改模型并将更改提交到服务器。我的应用程序收到一个通知,其中包含有关已修改内容的详细信息(自动避免差异),处理更改并继续循环。在这个例子中,我避免使用我的应用程序修改模型,但可能只是应用程序需要修改模型的情况。让我举一个假设的用例。
架构师想要优化设计解决方案的性能。他/他一直在研究模型的不同部分,并对模型进行一些(很可能是次要的)更改。更改将发送到中央 BIM 360 服务器或任何其他中央 Revit 服务器。我的应用程序将从服务器检索修改信息并评估模型的性能并在网页中向架构师提供反馈。
我的应用程序使用在 linux 上运行的 Python(sklearn、Tensorflow 等)来处理 BIM 模型,因此独立于 Revit 环境和 Windows 至关重要。为了向用户显示信息,它使用了 Web 技术(例如 d3.js 可视化库)。
Model Derivative Forge API提供RVT 到 IFC(和 SVF)的转换。所有这些(查询和编写 BIM)都可以在 IFC 上实现,但是,每次转换都意味着更多的复杂性、数据丢失(IFC 和 RVT 不是 100% 兼容)、计算和时间。
这是这个问题的一个更简单的形式(文件格式)。如果您对这些 API 感兴趣,请对这两个问题进行投票。它可能有助于获得一些关注。
我已将 Revit 模型上传到我的 OSS 存储桶并尝试将文件转换为 svf,但我收到以下信息:
400 错误请求 {"diagnostic":"无效的 'design' 参数。"}
我是 Forge API 的新手,不确定哪里需要设计参数或它指的是哪里,因此我们将不胜感激。
POST https://developer.api.autodesk.com/modelderivative/v2/designdata/job
Headers
Authorization: Bearer {AccessToken}
Content-Type: application/json
Body
{
"input": {
"urn": "{MyDesignBase64Urn}",
"compressedUrn": false,
"rootFilename": "test-project.rvt"
},
"output": {
"destination": {
"region": "us"
},
"formats": [
{
"type": "svf",
"views": [
"2d",
"3d"
]
}
]
}
}
Run Code Online (Sandbox Code Playgroud) 我正在创建一个ASP.NET Core WebApi,它使用Autodesk Model Derivative API将Revit文件转换为另一种文件格式。上传文件后,Autodesk API将在后台开始工作,可能需要几分钟才能完成其工作。
我想监视Autodesk API的状态,以了解转换是否已经完成并通知用户。我正在寻找监视作业状态的最佳方法,而无需“等待”并使请求挂起几分钟。
我试过只是异步运行任务而不等待结果。直到我想要在数据库上下文中更新一个值的时候,该方法才起作用,因为由于请求结束,该值已被删除。
我还研究了实现后台服务的几种方法,但是还没有找到一种清晰的方法。
public async Task<ActionResult<Response<JobResponse>>> UploadFile(string bucketKey, IFormFile file)
{
// ....
// File has been uploaded
Response<JobResponse> response
= await NetworkManager.PostAsync<JobResponse>(URI.Job.Url, JsonConvert.SerializeObject(jobData));
// The job has been created in the Autodesk API, so I create a record in my own database
var job = new Job(urn, file.FileName);
context.Jobs.Add(job);
await context.SaveChangesAsync();
// This method is what I want to do in the background
MonitorStatus(job);
return Respond(response);
}
private async Task MonitorStatus(Job …Run Code Online (Sandbox Code Playgroud) c# entity-framework-core asp.net-core autodesk-forge asp.net-core-webapi
好吧,我认为我们有一个在 Forge 中运行的 DA for Revit 应用程序,但下一个问题是如何支持多个 Revit 版本,但我找不到大量相关文档。这是我的理解(或者我认为无论如何)以及我的问题:
每个应用程序包和活动只能定义一个引擎,因此您似乎需要为每个受支持的 Revit 版本创建一个包,并为每个 Revit 版本创建一个相关活动。对此的疑问:
应用程序包通过其 ID 引用。大多数示例将 ID 显示为“DeleteWallsApp”或其他类似内容。但是,如果您确实需要多个 Revit 版本的多个应用程序包,那么您是否真的想要使用“DeleteWallsApp2018”和“DeleteWallsApp2020”等 ID?您不能拥有多个相同的 ID,因此这似乎是最相关的方法。它是否正确?
捆绑包和活动也通过其别名进行引用。如果我理解它们是用于测试与生产代码等的开发/登台/生产别名。如果是这样,是否建议每个包都使用这些别名?
这似乎有很多东西需要上传到很多不同的地方,但我想如果你使系统自动化,这也不算太糟糕。我只是想确保我没有遗漏结构的某些部分。
https://forge.autodesk.com/en/docs/data/v2/tutorials/download-file/#step-6-download-the-item
我已经按照教程成功获取了文件的内容,但是下载的文件在哪里。另外,如何指定下载文件的位置?
我有一个嵌入到 Angular 9 应用程序中的Forge Viewer。除了标准的全屏按钮之外,一切似乎都按预期工作。单击时,它会抛出一个未捕获的 JavaScript 错误,可以在浏览器的开发控制台中看到该错误:
\nUncaught (in promise) TypeError: fullscreen error\n at u (compat.js:87)\n at h.doScreenModeChange (ScreenModeDelegate.js:231)\n at h.u.setMode (ScreenModeDelegate.js:83)\n at T.setScreenMode (ScreenModeDelegate.js:337)\n at T.nextScreenMode (ScreenModeDelegate.js:354)\n at s.n.onClick (GuiViewer3D.js:737)\n at HTMLDivElement.<anonymous> (Button.js:33)\nRun Code Online (Sandbox Code Playgroud)\n我查看了调用堆栈中引用的代码,得出的结论是,错误很可能发生在调用浏览器全屏 API 期间,并中断了切换到全屏模式的正确顺序。查看器容器的样式已成功应用,但未进入浏览器全屏。此外,未附加退出处理程序,因此从全屏退出也不起作用。
\n我还没有在任何 Autodesk Forge 示例中看到过这样的问题,因此我推测该错误是由我的应用程序中的不同内容触发的。从控制台日志可以看出,错误明显发生在查看器代码中。
\n当绘图上传到 Forge 时,我想在查看器中显示一些默认情况下未显示的参考线。
我知道模型中定义的线的确切端点,但是,似乎查看器中的模型已被平移,因此 0,0 位于边界的中心。
有没有办法获得应用于模型的变换矩阵,以便我可以将参考线的坐标与查看器中模型的坐标对齐?
autodesk-forge ×10
asp.net-core ×1
autodesk ×1
c# ×1
download ×1
ifc ×1
javascript ×1
postman ×1
revit ×1
revit-api ×1