【问题标题】:How to generate the model browser structure using the sdb database如何使用sdb数据库生成模型浏览器结构
【发布时间】:2019-10-29 11:13:41
【问题描述】:

我需要重新创建模型浏览器结构,但到目前为止我还没有成功,我正在尝试与父母和孩子一起在查看器中重新创建结构。

我的一个要求是使用model.sdb数据库,所以不能使用viewer里面的树形结构。 (查看器 API)或模型衍生 API

所以 SQL 查询和 linq 表达式之间的任何事情都可以解决我的问题。

谢谢!

        var queryBranches = universe.Where(o => o.ObjectsEav.Any(eav => eav.Attribute.Name == "child" && eav.Attribute.Category == "__child__"));
        var queryLeafs = universe.Where(o => o.ObjectsEav.Any(eav => eav.Attribute.Name == "parent" && eav.Attribute.Category == "__parent__")).Except(queryBranches);

//Get Structure
foreach (var leaf in leafs)
{
    var leafAttr = leaf.ObjectsEav.FirstOrDefault(eav => eav.Attribute.Name == "parent");
    if (leafAttr == null)
        leafAttr = leaf.ObjectsEav.FirstOrDefault(eav => eav.Attribute.Name == "parent");

    ...

}

我的一个要求是使用model.sdb数据库,所以不能使用viewer里面的树形结构。 (查看器 API)或模型衍生 API

【问题讨论】:

    标签: autodesk-forge


    【解决方案1】:

    您可以在client browserbackend 中查询属性数据库。

    或者尝试model.getPropertyDb().executeUserFunction():Promise 在工作线程中针对 PropertyDatabase 实例执行函数:

     executeUserFunction(function(pdb) {
             var dbId = 1;
             pdb.enumObjectProperties(dbId, function(propId, valueId) {
                   // do stuff
             });
        })
    

    【讨论】:

    • 在模型浏览器中(在查看器内)我们有一个层次结构,不是数据库中的每个对象都必须出现在模型浏览器中。我们在数据库中有实体,例如模型浏览器中没有出现的表格和元数据。您建议的是数据库中的完整查询。这绝对不是我想要的。
    • One of my requirements is to use the model.sdb database, o anything between a SQL query and a linq expression would solve my problem 因此我的回答是查询 sdb 以获取模型数据并根据您的要求构建它们
    • 关系数据库没有层次结构,这就是为什么我需要进行正确的查询来挂载该结构,就像首先查询所有类别一样。很抱歉,我无法在我的问题上有效地证明这一点。在像 model.sdb 这样复杂的数据库结构中进行这种逆向工程是非常困难的。我们有诸如父/子/类别/RC/RF/RFT之类的属性,而我想要的是我需要使用什么过滤器来获得正确的类别......也许这样我就可以递归地获得孩子并实现所需的结构。
    猜你喜欢
    • 2016-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-24
    • 1970-01-01
    • 2012-07-01
    相关资源
    最近更新 更多