Forge Viewer如何与本地存储库(json文件)交互?

Forge Viewer如何与本地存储库(json文件)交互?,json,autodesk-forge,autodesk-viewer,autodesk-model-derivative,Json,Autodesk Forge,Autodesk Viewer,Autodesk Model Derivative,我需要对autodesk viewer进行一些自定义,要做到这一点,我需要了解与存储库文件的关系是如何工作的,要了解这些关系,我还使用了forge衍生api提供的model.sdb(与提供json文件的相同) 我已经确定了6个文件: objects_ids.json.gz objects_attrs.json.gz objects_avs.json.gz objects_vals.json.gz objects_offs.json.gz objects_viewables.json.gz 其中

我需要对autodesk viewer进行一些自定义,要做到这一点,我需要了解与存储库文件的关系是如何工作的,要了解这些关系,我还使用了forge衍生api提供的model.sdb(与提供json文件的相同)

我已经确定了6个文件:

objects_ids.json.gz
objects_attrs.json.gz
objects_avs.json.gz
objects_vals.json.gz
objects_offs.json.gz
objects_viewables.json.gz
其中一些文件很容易理解:

objects\u ids.json.gz-此文件与_objecs\u id表的内容相同,基本上是外部id和DBID(行号-1)

objects\u attrs.json.gz-同样,该文件相当于sdb数据库上的一个表,非常容易读取。这里我们有modelviewer中使用的属性的定义。它有以下“列”:id、名称、类别、数据类型、数据类型、上下文、描述、显示名称、标志、显示精度

objects_vals.json.gz相当于_objects_val表,这里我们有两个东西,ID和VALUE(对于上一个json文档中定义的属性)

直到现在事情都很简单。。。我们有对象标识、属性和可能的值,但问题是,如何使它们协同工作?现在他们是孤立的,所以他们现在没用。我需要将对象标识与其属性和值联系起来

要在model.mdb中实现这一点,我们可以使用主关系表连接这些表:\u objects\u eav 它有实体id、属性id和值id。因此,要连接数据并获得我们需要的信息,我们只需执行以下操作:

`SELECT * FROM _objects_id
INNER JOIN _objects_eav ON _objects_id.id = _objects_eav.entity_id
INNER JOIN _objects_attr ON _objects_attr.id = _objects_eav.attribute_id
INNER JOIN _objects_val ON _objects_val.id = _objects_eav.value_id`
但是没有与_objects_eav表等效的json文件

相反,我们有以下文件 objects\u avs.json.gz、objects\u offs.json.gz、objects\u viewables.json.gz

现在我不知道如何在这些文件之间合并数据并获得所需的全部信息。关于这件事有什么吹毛求疵的地方吗

其他想法: 或者,我可以使用model.sdb访问数据,但我更喜欢使用JSON,因为它们要小得多(比model.sdb小30倍,这是一个巨大的数量)

我还可以使用JavaScript中查看器对象提供的方法获取一些数据,但是我会被查看器提供的方法和属性所困扰,不幸的是,它们不能满足我的所有要求


然后可以选择使用模型派生API,但我的要求之一是能够处理断开连接的数据(脱机)。

下面是各个.json.gz文件包含的内容:

  • objects\u id.json.gz
    -对象ID
  • objects\u offs.json.gz
    -对于
    objects\u ids.json.gz
    中相同索引处的每个对象ID,此数组在
    objects\u avs.json.gz
  • objects\u avs.json.gz
    -包含属性值对,这些属性值对基本上是偏移到
    objects\u attrs.json.gz
    objects\u vals.json.gz
  • 对象\u attrs.json.gz
    -包含不同的属性(我相信还有它们的元数据)
  • 对象\u vals.json.gz
    -包含重复数据消除的值

话虽如此,我还是建议使用sqlite格式(尽管它更大),而不是专有的.json.gz文件,因为这些文件实际上是由Forge Viewer使用的,将来可能会更改。

Btw。下面是我的(非官方)文档中的一段代码Forge SDK模块,展示如何解析
对象*.json.gz
文件:谢谢Petr!非常好,我将充分利用您的存储库。关于Forge更改格式,我发现在不影响数据库模式的情况下这样做是不太可能的。如果他们需要更改json,几乎肯定也需要更改数据库模式。因此,如果他们正在更改与此相关的任何内容,我将需要更新我的代码。此外,Forge仍然使用threejs的R71,这向我指出了Forge不喜欢进行破坏性更改的方向,这是很好的。在文件objects_attrs.json.gz中,我们有许多第一列的重复项(第一列中的值,更准确地说,attr的名称不是唯一的),这意味着您的代码只公开最后一个具有重复/三次重复名称的attr。例如,在我的非常小的.svf文件中,使用revit 2020的示例项目创建,我用name=“Level”计算了3个属性。我有两个带有category=“Constraints”的属性“Level”。最后两个之间的唯一区别是列标志(第一个为0,第二个为8),即使对于sdb数据库也是如此,因此json文件没有问题。为什么这些数据是重复的?我怎么知道应该使用哪一个属性?谢谢大家@GabrielMarcondes的提醒。是的,有些属性是内部属性(属性类别以两个下划线开头和结尾的属性,例如“\uuuuu child\uuuuu”)。我已经更新了代码,以便更容易区分公共属性和内部属性:。