插入3D模型

:information_source: 摘要 Insert Model 3D 添加了一个作曲家按钮,可简化将 3D 模型添加到 Discourse 帖子的过程。
:hammer_and_wrench: 代码库 https://github.com/Beholder-Vision/discourse-insert-model-3d
:open_book: Discourse 主题新手? Discourse 主题使用入门指南

Install this theme component

大家好,
此组件允许您的用户使用 Google model viewer component 将 3D 模型添加到他们的帖子中。我创建此组件是为了让我的 Photogrammetry SaaS Beholder 用户能够在其全新的 Discourse 论坛 上分享他们创建的模型,并认为如果对其他人有用,也可以在此处分享。我没有找到其他类似的组件,但我只进行了非常快速的搜索……

使用说明和截图如下。

非常感谢您对此组件的任何反馈或意见。我用来显示模型的模型查看器组件具有相当多的功能,因此很可能可以通过将其中一些功能暴露给用户来扩展此组件的范围。我通过复制、粘贴和修改 insert videomermaid 组件来创建此组件,因此如果您有更多编写 Discourse 组件的经验,请帮忙看看代码,告诉我我犯了哪些错误。:slight_smile:

此致
Alan

用法

安装组件后,用户可以通过单击作曲家中的新立方体图标将 3D 模型添加到他们的帖子中。

composer_toolbar

目前,3D 查看器不会立即下载和显示 3D 模型,而是会显示一个海报(可自定义),并且仅在用户单击“加载 3D 模型”按钮时才加载模型。这样做的目的是帮助带宽有限的用户。

管理员设置

为了让用户能够使用此组件上传模型,您需要将 .gltf 和 .glb 添加到授权扩展列表中。

您可能还需要提高最大附件大小的限制。

settings_max_attachment_size

这可能是此组件在托管 Discourse 上使用的主要限制,因为在较低的订阅计划中,最大大小限制为 30MB。不过,公平地说,您可能不希望用户上传过大的文件,并且如果 .glb 和 .gltf 文件是通过支持 Draco 网格压缩的程序生成的,它们的大小可以大大减小。

20 个赞

谢谢,这在几天内奏效了,但现在加载按钮不再起作用了(已在 Firefox、Chrome 和 Firefox 移动版上测试过)

2 个赞

糟糕!这可不好。感谢告知。

我的论坛也发生过同样的事情。查看帖子后,我认为发生的情况是,几天后 Discourse 决定不再需要上传的海报图片和 3D 模型,因此已将其从服务器删除。:frowning:

我已通过重新上传模型和海报“临时”修复了我的网站,但现在我将去阅读 Discourse 主题文档,看看是否能正确修复它。在我编写主题组件时快速浏览了一下,我看到文档说,只要帖子引用了资源,它就会保留在服务器上,但显然该组件放入帖子中的 URL 出于某种原因并未做到这一点。如果其他插件开发者能提供建议,将不胜感激……:slight_smile:

2 个赞

那是个奇怪的行为。

1 个赞

是的,我目前的理论是,当我创建用于引用模型查看器的 markdown 时,某种程度上上传模型的 URL 形式不正确,以至于用于扫描帖子以识别已使用的上传的逻辑无法识别。

目前我正在查看 Discourse 中另外两个文件上传的地方。在图像/文件上传模态框中,会保留一个对“short_url”的引用,其形式为 upload://,而不是浏览器将用于下载资源的最终 URL。所以也许我需要弄清楚如何使用它?或者,我所基于的 GitHub - discourse/discourse-insert-video 组件直接使用了资源 URL。要么该组件存在相同的错误(不太可能 :)),要么那些 URL 被识别是因为它们被插入到 markdown 消息中作为 HTML 标签(我无法对模型查看器标签这样做,因为它不在 HTML 标签白名单中)。

这就是我目前的想法,或者也可能是其他原因。现在我要去看看能否找到识别 Discourse 网站上孤立上传文件的代码……

2 个赞

您好,

抱歉这么晚才回复。我上周忙于合同工作。

无论如何,我现在又看了一遍,我认为我已经找到了决定上传文件生死存亡的代码。在处理帖子的服务器端代码中,有一个名为 ['each_upload_url']https://github.com/discourse/discourse/blob/03bb43f7468d3aa6e73bba0805193ae50c7ec2d5/app/models/post.rb#L1137)的例程,它会生成帖子中引用的已上传文件的列表。

虽然我不是 Ruby 开发者,但从我能理解的来看,它正在查找由预定义 HTML 标签列表引用的 URL。因此,对于我复制的插入视频主题组件,任何 <source> HTML 元素的 src 属性都被识别为上传文件,任何 <video> HTML 元素的 poster 属性也被识别为上传文件。但对于我的插入 3D 模型主题组件,<model-viewer> HTML 元素不在列表中,因此它引用的资源未被识别为上传文件,几天后它们就会被清除。

长期的解决方案可能是更改服务器端代码,以便将 model-viewer 属性识别为上传文件的来源,但我认为现在也可以通过插入显式的 HTML <a> 标签来链接上传文件来解决此问题。

我将在 Bug 类别中发帖,以确认我的理解是否正确,但万一我的理解是正确的,我已经向“插入 3D 模型”主题组件提交了一个修复程序,该程序在帖子中插入了一些隐藏的 <a> 标签,这些标签引用了上传的模型和海报。@patrickemin 如果您有时间,能否请您检查一下这是否能解决您的问题?您需要更新该组件,然后重新上传任何已被清除的 3D 模型资源。

艾伦,不确定这是否能解开谜团,但过去我们遇到过这方面的问题,这可能对我们有影响。

孤立的上传文件会定期删除。作为上传的一部分,您应该在 uploads 表中获得一个条目。如果由于任何原因该条目丢失,上传的文件最终会被删除。

这可能是一个调查方向。

要检查 Upload 模型,您可以从 Discourse 目录进入 rails 控制台,例如:

./launcher enter app
rails c
Upload.last(3)

祝好!

1 个赞

Robert,这很有用,谢谢。您知道是否可以在托管的 Discourse 上执行此检查或等效操作吗?我猜不行,所以 @patrickemin,如果您的服务器是自托管的,那么这可能是一件值得检查的事情。
或者,我有一个基于 Docker 的本地 Discourse 设置,我一直在尝试,直到我放弃并转向托管的 Discourse。这可能是一个重新开始的好理由。:slight_smile:

2 个赞

您需要联系支持部门来解决这个问题。

但如果很明显有多个用户遇到此问题,我建议在提交工单之前,先自行排查自托管实例。

您好,几个月后我回来了……我抓住了微软发布其 Copilot 2D 到 3D 模型(将您的 2D 模型转换为 3D 模型)的机会进行测试,您的 TC 现在运行正常,添加代码后模型应该不会消失,请参见此处

1 个赞