Forge Viewer 如何与本地存储库(json 个文件)交互?
How does Forge Viewer interacts with the local repository (json files)?
我需要对 Autodesk 查看器进行一些自定义,为此我需要了解与存储库文件的关系是如何工作的,为了了解这些关系,我还使用了 model.sdb 提供的伪造衍生品-api(同样给我们 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_ids.json.gz - 这个文件与 _objecs_id table 的内容相同,基本上是外部 ID 和 dbids(这是行号 -1).
objects_attrs.json.gz - 同样,此文件相当于 sdb 数据库上的 table,非常易于阅读。这里我们定义了模型查看器中使用的属性。它具有以下 "columns": id,name,category,data_type,data_type_context,description,display_name,flags,display_precision
objects_vals.json.gz等价于_objects_valtable,这里我们有两个东西,ID和VALUE(针对前面定义的属性json 文件)。
到现在为止一切都很简单...我们有对象标识、属性及其可能的值,但问题是,如何让它们一起工作?现在他们是孤立的,所以他们现在没用。我需要将对象标识与其属性及其值相关联。
要在 model.mdb 中做到这一点,我们可以加入 tables,主要关系 table:_objects_eav
它有 entity_id、attribute_id 和 value_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`
但是没有 json 文件相当于 _objects_eav table...
相反,我们有以下文件
objects_avs.json.gz、objects_offs.json.gz、objects_viewables.json.gz
现在我不知道如何合并这些文件之间的数据并获得所需的全部信息。有什么困难吗?
其他想法:
或者我可以使用 model.sdb 来访问数据,但我宁愿使用 JSON,因为它们要小得多(比 model.sdb 小 30 倍,这是一个巨大的数量)。
我也可以使用 JavaScript 中的查看器对象提供的方法获取一些数据,但是我会被查看器提供的方法和属性卡住,不幸的是它们不能满足我所有的要求要求。
然后可以选择使用模型导数API,但我的要求之一是能够处理断开连接的数据(离线)。
以下是各个 .json.gz 文件包含的内容:
objects_ids.json.gz
- 对象 ID
objects_offs.json.gz
- 对于 objects_ids.json.gz
中同一索引处的每个对象 ID,此数组定义 objects_avs.json.gz
中属性值列表的偏移量
objects_avs.json.gz
- 包含基本上偏移到 objects_attrs.json.gz
和 objects_vals.json.gz
中的属性值对
objects_attrs.json.gz
- 包含不同的属性(我相信它们的元数据)
objects_vals.json.gz
- 包含去重值
话虽如此,我仍然建议使用 sqlite 格式(即使它更大),而不是专有的 .json.gz 文件,因为这些文件实际上是供 Forge Viewer 使用的,并且将来可能会发生变化。
我需要对 Autodesk 查看器进行一些自定义,为此我需要了解与存储库文件的关系是如何工作的,为了了解这些关系,我还使用了 model.sdb 提供的伪造衍生品-api(同样给我们 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_ids.json.gz - 这个文件与 _objecs_id table 的内容相同,基本上是外部 ID 和 dbids(这是行号 -1).
objects_attrs.json.gz - 同样,此文件相当于 sdb 数据库上的 table,非常易于阅读。这里我们定义了模型查看器中使用的属性。它具有以下 "columns": id,name,category,data_type,data_type_context,description,display_name,flags,display_precision
objects_vals.json.gz等价于_objects_valtable,这里我们有两个东西,ID和VALUE(针对前面定义的属性json 文件)。
到现在为止一切都很简单...我们有对象标识、属性及其可能的值,但问题是,如何让它们一起工作?现在他们是孤立的,所以他们现在没用。我需要将对象标识与其属性及其值相关联。
要在 model.mdb 中做到这一点,我们可以加入 tables,主要关系 table:_objects_eav 它有 entity_id、attribute_id 和 value_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`
但是没有 json 文件相当于 _objects_eav table...
相反,我们有以下文件 objects_avs.json.gz、objects_offs.json.gz、objects_viewables.json.gz
现在我不知道如何合并这些文件之间的数据并获得所需的全部信息。有什么困难吗?
其他想法: 或者我可以使用 model.sdb 来访问数据,但我宁愿使用 JSON,因为它们要小得多(比 model.sdb 小 30 倍,这是一个巨大的数量)。
我也可以使用 JavaScript 中的查看器对象提供的方法获取一些数据,但是我会被查看器提供的方法和属性卡住,不幸的是它们不能满足我所有的要求要求。
然后可以选择使用模型导数API,但我的要求之一是能够处理断开连接的数据(离线)。
以下是各个 .json.gz 文件包含的内容:
objects_ids.json.gz
- 对象 IDobjects_offs.json.gz
- 对于objects_ids.json.gz
中同一索引处的每个对象 ID,此数组定义objects_avs.json.gz
中属性值列表的偏移量
objects_avs.json.gz
- 包含基本上偏移到objects_attrs.json.gz
和objects_vals.json.gz
中的属性值对
objects_attrs.json.gz
- 包含不同的属性(我相信它们的元数据)objects_vals.json.gz
- 包含去重值
话虽如此,我仍然建议使用 sqlite 格式(即使它更大),而不是专有的 .json.gz 文件,因为这些文件实际上是供 Forge Viewer 使用的,并且将来可能会发生变化。