Revit API 正在读取错误的类型参数值
Revit API is Reading the Wrong Type Parameters Values
我开发了一个家庭浏览器,我可以在其中搜索和查找家庭并阅读他们的附加信息。但是,我正在读取的类型参数值与 Revit 2017 中显示的值不同。下面是我的应用程序和 Revit 2017 属性 window 的屏幕截图。这里是 尺寸标注深度的值显示与我在 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 的内部单位英尺 (ft),而您在屏幕上看到的值采用 mm、cm、m 或您为该模型设置的任何其他值。只需从内部转换为显示就可以了。
这是一个进行转换的实用方法:http://www.revitapidocs.com/2018/9cc2c0ea-f59f-9d76-ce19-ae7eede03bbd.htm
干杯!
我开发了一个家庭浏览器,我可以在其中搜索和查找家庭并阅读他们的附加信息。但是,我正在读取的类型参数值与 Revit 2017 中显示的值不同。下面是我的应用程序和 Revit 2017 属性 window 的屏幕截图。这里是 尺寸标注深度的值显示与我在 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 的内部单位英尺 (ft),而您在屏幕上看到的值采用 mm、cm、m 或您为该模型设置的任何其他值。只需从内部转换为显示就可以了。
这是一个进行转换的实用方法:http://www.revitapidocs.com/2018/9cc2c0ea-f59f-9d76-ce19-ae7eede03bbd.htm
干杯!