Revit API 正在读取错误的类型参数值

Posted

技术标签:

【中文标题】Revit API 正在读取错误的类型参数值【英文标题】:Revit API is Reading the Wrong Type Parameters Values 【发布时间】:2018-06-24 22:52:29 【问题描述】:

我开发了一个家庭浏览器,我可以在其中搜索和查找家庭,并可以阅读他们的其他信息。但是,我为 type 参数读取的值与 Revit 2017 中显示的值不同。下面是我的应用程序和 Revit 2017 的属性窗口的屏幕截图。这里显示的 Dimension's Depth 的值不同于我可以在 Revit 中看到。

这是背后的代码

 static string FamilyParamValueString(FamilyType t, FamilyParameter fp, Document doc)
        


            string value = t.AsValueString(fp);


            switch (fp.StorageType)
            
                case StorageType.Double:
                    value = Util.RealString(
                      (double)t.AsDouble(fp))
                      + " (double)";

                    break;

                case StorageType.ElementId:
                    ElementId id = t.AsElementId(fp);
                    Element e = doc.GetElement(id);
                    value = id.IntegerValue.ToString() + " ("
                      + Util.ElementDescription(e) + ")";
                    break;

                case StorageType.Integer:
                    value = t.AsInteger(fp).ToString()
                      + " (int)";
                    break;

                case StorageType.String:
                    value = "'" + t.AsString(fp)
                      + "' (string)";
                    break;
            

            return value;
        

这就是我调用 FamilyParamValueString 方法的方式。

 foreach (FamilyType familytype in mgr.Types)
            

                string name = familytype.Name;
                MultiValueDictionary<string, Tuple<string, string>> Parameters = new MultiValueDictionary<string, Tuple<string, string>>();

                foreach (string key in keys)
                
                    FamilyParameter fp = fps[key];
                    var definition = fp.Definition;
                    string ParameterGroupid = LabelUtils.GetLabelFor(definition.ParameterGroup);

                    if (familytype.HasValue(fp))
                    
                        // Reading type's parameter value
                        string value = FamilyParamValueString(familytype, fp, doc);

                        //store parameter information along with its group
                        Parameters.Add(ParameterGroupid, new Tuple<string, string>(key, value));

                    
                



            

请指导我,如何才能读取与 Revit 类型属性中显示的值完全相同的值。感谢您的支持!

【问题讨论】:

也在 Revit API 论坛中讨论过:forums.autodesk.com/t5/revit-api-forum/… 和 forums.autodesk.com/t5/revit-api-forum/… 【参考方案1】:

与单位有关。参数返回的值以 Revit 的内部单位英尺 (ft) 为单位,而您在屏幕上看到的值以 mm、cm、m 或您为该模型设置的任何其他单位为单位。只需从内部转换为显示即可。

这是一种用于进行转换的实用方法:http://www.revitapidocs.com/2018/9cc2c0ea-f59f-9d76-ce19-ae7eede03bbd.htm

干杯!

【讨论】:

以上是关于Revit API 正在读取错误的类型参数值的主要内容,如果未能解决你的问题,请参考以下文章

Revit API 无效对象

Revit二次开发 族参数的获取

通过 Web 浏览器修改 Revit 族参数

如何在revit api c#中将创建的墙类型转换为族文件

firebase swift 3 转换:无法将类型“(_)->()”的值转换为预期的参数类型“((错误)-> Void)?

如何在Spring中调用存储过程来读取返回值和输出参数?