Mở đầu

Bài này là bài chia sẻ thư viện để mọi người làm việc và lấy thông tin từ parameter hiệu quả hơn và đỡ mất thời gian hơn cho việc suy nghĩ thuộc tính của một parameter mà quên ăn quên ngủ , đôi khi gõ cửa nhầm nhà hàng xóm.Bài này chính là sự giải quyết cho công việc tìm kiếm với hình ảnh mẫu dưới đây.

GetParameterValueByName

Cách xử Lý

RevitAPI

1.C#

public static string GetParameterValue(this Parameter p)
{
if (p == null) return string.Empty;
switch (p.StorageType)
{
case StorageType.Double:
return p.AsDouble().ToString();
case StorageType.ElementId:
try
{
return p.AsElementId().IntegerValue.ToString();
}
catch (Exception)
{
return string.Empty;
}
case StorageType.Integer:
return p.AsInteger().ToString();
case StorageType.String:
return p.AsString();
case StorageType.None:
return p.AsValueString();
}
return String.Empty;
}

DynamoAPI

Đoạn triển khai từ mã nguồn mở

public static object GetParameterValue(Autodesk.Revit.DB.Parameter param)
{
object result;
switch (param.StorageType)
{
case StorageType.ElementId:
int valueId = param.AsElementId().IntegerValue;
if (valueId > 0)
{
var elem = ElementIDLifecycleManager<int>.GetInstance().GetFirstWrapper(valueId) as Element;
result = ElementSelector.ByElementId(valueId, elem == null ? true : elem.IsRevitOwned);
}
else
{
int paramId = param.Id.IntegerValue;
if (paramId == (int)BuiltInParameter.ELEM_CATEGORY_PARAM || paramId == (int)BuiltInParameter.ELEM_CATEGORY_PARAM_MT)
{
var categories = DocumentManager.Instance.CurrentDBDocument.Settings.Categories;
result = new Category(categories.get_Item((BuiltInCategory)valueId));
}
else
{
result = param.AsValueString();
}
}
break;
case StorageType.String:
result = param.AsString();
break;
case StorageType.Integer:
result = param.AsInteger();
break;
case StorageType.Double:
result = param.AsDouble() * Revit.GeometryConversion.UnitConverter.HostToDynamoFactor(param.Definition.GetSpecTypeId());
break;
default:
throw new Exception(string.Format(Properties.Resources.ParameterWithoutStorageType, param));
}
return result;

Thực ra sau khi thu lại với Python để mần ăn thì nó thành thế này đây.😊

def GetParameterValue(parameter):
value= None
if parameter.StorageType == StorageType.Double:
value = parameter.AsDouble()
elif parameter.StorageType == StorageType.Integer:
if parameter.Definition.ParameterType == ParameterType.Integer:
value = parameter.AsInteger()
else:
value = parameter.AsValueString()
elif parameter.StorageType == StorageType.String:
value = parameter.AsString()
elif parameter.StorageType == StorageType.ElementId:
value = parameter.AsElementId()
return value

Mở rộng

Thư viện này giúp các bạn sử dụng để lấy về hàng loạt giá trị trong parameter không phân biệt vùng thuộc tính nào mà chỉ là bắt tất cả trường hợp để chúng ta đỡ những đầu hơn, hy vọng nó mang lại hữu ích cho bạn nào đang cần.

Tham khảo

Dynamo Github

DynamoChat