Tìm hiểu về Parameter trong Revit API - Revit API Tutorial

Các Element trong Revit luôn chứa tập hợp các Parameter chứa thông tin đối tượng, là một phần không thể thiếu trong giải pháp BIM.

revit element parameter

Hôm nay bimdevvn xin được phép chia sẻ một ít kiến thức về Parameter trong thư viện Revit API.

tutorial

Parameter Element là gì?

Parameter là kiểu dữ liệu dùng để định nghĩa một tham biến trong thiết lập thông tin của một Element trong dự án Revit. Tập hợp các parameter được hiển thị trong thanh Properties trong giao diện Revit.

revit parameter id

Cách truy xuất tập hợp Parameter của Element bằng công cụ Revit Lookup

revit parameter lookup

Parameter.Id

Tương tự như Element, Parameter cũng có thuộc tính Id (thuộc kiểu dữ liệu ElementId) và GUID (thuộc kiểu Guid) để định danh một Parameter.

Định danh của mỗi Parameter là duy nhất trong dự án đang xét (đối với Id) hoặc bất kì dự án nào (đối với GUID).

Dựa vào thuộc tính định danh Id, ta có thể truy xuất lấy Parameter tương ứng có trong dự án.

Parameter.Definition

Definitionkiểu dữ liệu để định nghĩa thông tin của một Parameter.

public abstract class Definition
{
    // Đơn vị tính toán của Parameter
    public UnitType UnitType { get; }

    // Tên phân nhóm của Parameter trong bảng Properties Elements
    public abstract BuiltInParameterGroup ParameterGroup { get; }

    // Miêu tả công năng của giá trị Parameter (chiều dài, thể tích, ghi chú...)
    public abstract ParameterType ParameterType { get; }

    // Tên gọi của Parameter
    public abstract string Name { get; }
}

Definition.ParameterType

ParameterTypekiểu liệt kê (enum) miêu tả công năng của giá trị Parameter trong mô hình dự án.

public enum ParameterType
{
    // không thể hiện thông tin bằng giá trị
    Invalid = 0,

    // giá trị dạng chuỗi
    Text = 1,

    // giá trị dạng số nguyên
    Integer = 2,

    // giá trị dạng con số
    Number = 3,

    // giá trị thể hiện chiều dài
    Length = 4,

    // giá trị thể hiện diện tích
    Area = 5,

    // giá trị thể hiện thể tích
    Volume = 6,

    // giá trị thể hiện vật liệu
    Material = 9,

    // giá trị thể hiện kiểu đúng sai
    YesNo = 10,
    
    // các giá trị thể hiển thông tin đặc thù khác như:
    // Phân tích kết cấu, MEP, Năng lượng ...
}

Definition.ParameterGroup

Thuộc tính trả về kiểu liệt kệ BuiltInParameterGroup, quy định phân nhóm mà Parameter thuộc về.

public enum BuiltInParameterGroup
{
    // thông tin hình học định vị
    PG_GEO_LOCATION = -5000226,

    // thông tin hình học tiết diện
    PG_STRUCTURAL_SECTION_GEOMETRY = -5000225,

    // thông tin chiều dài
    PG_LENGTH = -5000194,

    // thông tin ẩn hiển đối tượng
    PG_VISIBILITY = -5000186,

    // thông tin chung
    PG_GENERAL = -5000173,

    // thông tin diện tích
    PG_AREA = -5000166,

    // thông tin xuất dữ liệu IFC
    PG_IFC = -5000131,

    // thông tin ghi chú
    PG_TEXT = -5000123,

    // thông tin vật liệu
    PG_MATERIALS = -5000105,

    // thông tin hình học
    PG_GEOMETRY = -5000101,

    // thông tin dữ liệu định danh
    PG_IDENTITY_DATA = -5000100,
}

Parameter.StorageType

StorageTypekiểu liệt kê (enum) xác định loại giá trị lưu trữ. Đối tượng Parameter có thuộc tính StorageType quy định kiểu dữ liệu của giá trị trả về.

public enum StorageType
{
    // Không trả về giá trị, phải sử dụng các cách xử lý đặc thù khác
    None = 0,

    // Trả về kiểu số nguyên
    Integer = 1,    

    // Trả về kiểu số thực
    Double = 2,

    // Trả về kiểu chuỗi
    String = 3,

    // Trả về một ElementId là định dạng của một Element nào đó
    ElementId = 4
}

Parameter.DisplayUnitType

DisplayUnitTypekiểu liệt kê (enum) thể hiện đơn vị hiển thị của giá trị Parameter trong giao diện người dùng Revit.

*Lưu ý: Đối với Việt Nam và một số nước, đơn vị đo lường phổ biến theo hệ SI (m – kg). Do đó, đơn vị hiện thị của Parameter sẽ khác với đơn vị lưu trữ của nó trong phần mềm Revit (sử dụng hệ thông inch-ounce của Mỹ, Anh …)

public enum DisplayUnitType
{
    // đơn vị hiển thị: mét (m)
    DUT_METERS = 0,

    // đơn vị hiển thị: centimét (cm)
    DUT_CENTIMETERS = 1,

    // đơn vị hiển thị: milimét (mm)
    DUT_MILLIMETERS = 2,

    // đơn vị hiển thị: mét vuông (m2)
    DUT_SQUARE_METERS = 12,

    // đơn vị hiển thị: mét khối (m3)
    DUT_CUBIC_METERS = 14,

    // đơn vị hiển thị: centimét vuông (cm2)
    DUT_SQUARE_CENTIMETERS = 21,

    // đơn vị hiển thị: milimét vuông (mm2)
    DUT_SQUARE_MILLIMETERS = 22,

    // đơn vị hiển thị: centimét khối (cm3)
    DUT_CUBIC_CENTIMETERS = 24,

    // đơn vị hiển thị: milimét khối (mm3)
    DUT_CUBIC_MILLIMETERS = 25,

    // đơn vị hiển thị: kg/m3
    DUT_KILOGRAMS_PER_CUBIC_METER = 28,

    // đơn vị hiển thị: kilôgram (kg)
    DUT_KILOGRAMS_MASS = 189,

    // đơn vị hiển thị: kg/m
    DUT_KILOGRAMS_MASS_PER_METER = 212,

    // đơn vị hiển thị: kg/m2
    DUT_KILOGRAMS_MASS_PER_SQUARE_METER = 224,
}

Truy xuất Parameter từ đối tượng Element

Bạn có 3 cách để truy xuất Parameter từ một đối tượng Element bất kì trong mô hình dự án:

  • Truy xuất thông qua thuộc tính Parameters của Element
  • Truy xuất thông qua BuiltInParameter hoặc định danh Id
  • Truy xuất thông qua tên Parameter trong tập hợp Parameter của Element

Truy xuất bằng thuộc tính Element.Parameters

Thuộc tính Parameters thuộc kiểu dữ liệu ParameterSet, đại diện cho tập hợp Parameter của Element đang xét.

Bạn tiến hành lọc qua các phần tử Parameter trong thuộc tính Parameters, và lấy ra tập hợp Parameter hoặc một Parameter theo điều kiện nào đó.

// Truy xuất tập hợp Parameter của Element
List<Parameter> paramList = new List<Parameter>();
foreach (Parameter param in elem.Parameters)
{
    paramList.Add(param);
}

// Truy xuất Parameter theo điều kiện lọc nào đó
Parameter targetParameter = null;
foreach (Parameter param in elem.Parameters)
{
    if (param.Definition.Name == "Comments")
    {
        targetParameter = param;
        break;
    }
}

Bạn áp dụng cách truy xuất này khi muốn xử lý tập hợp Parameter của đối tượng, hoặc tạo bộ lọc các Parameter trong giao diện người dùng.

Truy xuất bằng định danh của Parameter

Một Parameter có thể được truy xuất từ thông tin định danh (Id và GUID), hoặc BuiltInParameter.

BuiltInParameterkiểu liệt kệ (enum) thể hiện danh sách định danh các Parameter được dựng sẵn trong Autodesk Revit.

Element elem = null;
Parameter p1 = null;
            
// truy xuất Parameter từ Id cho trước
// Lưu ý: chỉ áp dụng với các Parameter dựng sẵn nghĩa là có thể chuyển đổi 
// từ đối tưởng kiểu ElementId sang kiểu BuiltInParameter
ElementId paramId = ...;
var bip = (BuiltInParameter)paramId.IntegerValue;
var param1 = elem.get_Parameter(bip);

// truy xuất Parameter bằng BuiltInParameter
var bip2 = BuiltInParameter.HOST_VOLUME_COMPUTED;
var param2 = elem.get_Parameter(bip2);

// truy xuất Parameter từ GUID cho trước
Guid paramGuid = ...;
var param3 = elem.get_Parameter(paramGuid);

Cách truy xuất Parameter này chủ yếu áp dụng với các Parameter dựng sẵn, khi bạn đã quen và thành thạo với việc xử lý kiểu dữ liệu Parameter. Cách xử lý này sẽ hạn chế sai sót khi có nhiều Parameter trùng tên trong tập hợp.

Truy xuất bằng tên của Parameter

Bạn cũng có thể truy xuất Parameter dựa vào tên Parameter (Parameter Name) cho trước.

// Truy xuất Parameter bằng tên cho trước
var paramName1 = "Comments";
var param1 = elem.LookupParameter(paramName1);
var paramName2 = "Category";
var param2 = elem.LookupParameter(paramName2);

Theo ý kiến của bimdevvn, đây là cách nhanh và gọn nhất để truy xuất một Parameter.

Truy xuất và thiết lập giá trị Parameter

Giá trị tương ứng của các Parameter có thể được truy xuất hoặc thiết lập.

Tùy thuộc vào kiểu lưu trữ của giá trị Parameter có trong thuộc tính StorageType, thư viện Revit API cung cấp các phương thức riêng biệt.

Truy xuất giá trị Parameter

Bạn có thể truy xuất giá trị của Parameter bằng các phương thức AsInteger(), AsDouble(), AsString(), AsElementId() AsValueString() của đối tượng Parameter.

Parameter param1 = ...;
// giá trị lưu trữ kiểu số nguyên
// chỉ đúng với param.StorageType == StorageType.Integer
var val1 = param1.AsInteger();


Parameter param2 = ...;
// giá trị lưu trữ kiểu số thực
// chỉ đúng với param.StorageType == StorageType.Double
var val2 = param1.AsDouble();

Parameter param3 = ...;
// giá trị lưu trữ kiểu chuỗi
// chỉ đúng với param.StorageType == StorageType.String
var val3 = param1.AsString();

Parameter param4 = ...;
// giá trị lưu trữ kiểu ElementId -> định danh của một Element nào đó
// chỉ đúng với param.StorageType == StorageType.ElementId
var elemId = param1.AsElementId();
// truy xuất Element với định danh Id tương ứng
var elem = doc.GetElement(elemId);

// Phương thức Parameter.AsValueString()
// dùng để truy xuất thông tin giá trị Parameter 
// thể hiện trong bảng Properties trong giao diện Revit

// Lưu ý: Phương thức Parameter.AsValueString() chỉ đúng với
// StorageType là Integer, Double, ElementId
var valString1 = param1.AsValueString();
var valString2 = param2.AsValueString();
var valString4 = param4.AsValueString();
// đối với StorageType, giá trị trả về rỗng
// var valString3 = param3.AsValueString();

Thiết lập giá trị Parameter

Bạn có thể thiết lập giá trị Parameter bằng phương thức Set() và truyền vào tham số phù hợp thuộc các kiểu dữ liệu: int, double, string và ElementId.

Parameter param1 = ...;
// chỉ đúng với param.StorageType == StorageType.Integer
param1.Set(1);

Parameter param2 = ...;
// chỉ đúng với param.StorageType == StorageType.Double
param2.Set(3.79);

Parameter param3 = ...;
// chỉ đúng với param.StorageType == StorageType.String
param3.Set("bimdevvn - Giải pháp và ứng dụng BIM");

Parameter param4 = ...;
// chỉ đúng với param.StorageType == StorageType.ElementId
Element elem = ...;
var elemId = elem.Id;
param4.Set(elemId);

Kết luận

Kiểu dữ liệu Parametermột thành phần cơ bản trong bộ thư viện Revit API, có trong mọi Element trong dự án. Bimdevvn nghĩ rẳng bất kì developer nào cũng phải biết và sử dụng thành thạo trong quá trình xây dựng add-in Revit.

Cảm ơn bạn đã quan tâm bài viết của mình, nếu thấy hữu ích, bạn có thể chia sẻ đến những người khác.

Chúc bạn thành công!

success

Bạn có thích bài viết này ?

Tin cùng thể loại