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.
Cách xử Lý
RevitAPI
1.C#
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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ở
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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.😊
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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
DynamoChat