Revit API là một công cụ mạnh mẽ cho phép các nhà phát triển tương tác và điều khiển mô hình Revit thông qua lập trình. Một trong những khía cạnh quan trọng của Revit API là cấu trúc phân cấp lớp (class hierarchy), giúp tổ chức các đối tượng trong mô hình một cách hợp lý và dễ dàng thao tác. Hiểu rõ về phân cấp các lớp trong Revit API sẽ giúp các nhà phát triển tạo ra các lệnh tùy chỉnh và tối ưu hóa quy trình làm việc một cách hiệu quả.
Trong bài viết này, chúng ta sẽ khám phá cách phân cấp các lớp trong Revit API từ cơ bản đến các lớp cụ thể như tường (Wall), cột (Column), và nhiều đối tượng khác với các ví dụ minh họa thực tế.
1. Lớp cơ bản: Autodesk.Revit.DB.Element
Autodesk.Revit.DB.Element là lớp cơ bản nhất trong Revit API, đại diện cho mọi đối tượng trong mô hình Revit. Tất cả các phần tử trong mô hình như tường, cột, cửa, dầm, và sàn đều kế thừa từ lớp Element. Điều này có nghĩa là mọi đối tượng trong Revit đều có thể truy cập thông qua lớp này.
Ví dụ truy xuất thông tin của một phần tử trong mô hình:
Element element = doc.GetElement(elementId);
string elementName = element.Name;
2. Phân cấp tiếp theo: ElementType
và Instance
Revit API phân chia các đối tượng dưới lớp Element
thành hai loại chính: ElementType
(kiểu phần tử) và Instance
(phiên bản cụ thể).
ElementType
: Đại diện cho loại phần tử, xác định thuộc tính mặc định của một phần tử. Ví dụ như các loại tường (WallType
), loại sàn (FloorType
), và các loại Family (FamilySymbol
).
Ví dụ tìm kiếm và chọn một loại tường:
WallType wallType = new FilteredElementCollector(doc)
.OfClass(typeof(WallType))
.FirstOrDefault() as WallType;
Instance
: Đại diện cho một phiên bản cụ thể của một phần tử trong mô hình, như tường, cột hoặc cửa cụ thể. Ví dụ nhưWall
,FamilyInstance
, vàFloor
.
Ví dụ tạo một tường từ một loại tường đã chọn:
Wall wall = Wall.Create(doc, line, wallType.Id, level.Id, 10.0, 0.0, false, false);
3. Phần tử kiến trúc trong Revit API
Các phần tử kiến trúc phổ biến trong Revit API bao gồm:
- Tường (
Wall
): Đại diện cho các bức tường trong mô hình. - Sàn (
Floor
): Đại diện cho các sàn. - FamilyInstance: Đại diện cho các đối tượng thuộc Family như cửa, cửa sổ, hoặc đồ nội thất.
Ví dụ thu thập tất cả các tường trong dự án Revit:
FilteredElementCollector collector = new FilteredElementCollector(doc); IList<Element> walls = collector.OfClass(typeof(Wall)).ToElements();
4. Phần tử kết cấu trong Revit API
Ngoài các phần tử kiến trúc, Revit còn hỗ trợ các phần tử kết cấu như:
- Khung kết cấu (
StructuralFraming
): Bao gồm các dầm (Beam
), giằng (Brace
), hoặc giàn (Truss
). - Cột kết cấu (
StructuralColumn
): Đại diện cho cột kết cấu chịu lực. - Móng (
StructuralFoundation
): Đại diện cho các phần tử móng.
Ví dụ tạo một cột kết cấu trong Revit API:
FamilySymbol columnType = new FilteredElementCollector(doc)
.OfClass(typeof(FamilySymbol))
.OfCategory(BuiltInCategory.OST_StructuralColumns)
.FirstOrDefault() as FamilySymbol;
FamilyInstance column = doc.Create.NewFamilyInstance(point, columnType, level, Autodesk.Revit.DB.Structure.StructuralType.Column);
5. Các loại khung nhìn (Views)
Khung nhìn trong Revit được tổ chức thành nhiều loại, bao gồm:
- ViewPlan: Mặt bằng.
- ViewSection: Mặt cắt.
- View3D: Khung nhìn 3D.
- ViewSheet: Các trang in.
Ví dụ tạo khung nhìn 3D:
View3D view3D = View3D.CreateIsometric(doc, viewFamilyType.Id);
6. Phần tử chú thích (Annotation)
Phần tử chú thích bao gồm các đối tượng giúp ghi chú và trình bày thông tin trên bản vẽ:
- Ghi chú văn bản (
TextNote
): Để tạo ghi chú văn bản trong view. - Kích thước (
Dimension
): Đại diện cho các kích thước đo. - Thẻ chú thích (
Tag
): Đại diện cho các thẻ đánh dấu phần tử (ví dụ: thẻ tường, cột, hoặc cửa).
Ví dụ tạo một ghi chú văn bản:
7. Mặt phẳng và lưới (Levels and Grids)
Các phần tử xác định lưới trục và cao độ trong mô hình:
- Level: Đại diện cho các tầng trong mô hình.
- Grid: Đại diện cho các lưới trục.
Ví dụ thu thập tất cả các Level trong dự án:
FilteredElementCollector collector = new FilteredElementCollector(doc); IList<Element> levels = collector.OfClass(typeof(Level)).ToElements();
8. Công cụ lọc phần tử (FilteredElementCollector)
FilteredElementCollector là một công cụ mạnh mẽ trong Revit API để thu thập và lọc các phần tử trong mô hình dựa trên các điều kiện cụ thể.
Ví dụ thu thập tất cả các phần tử tường:
FilteredElementCollector wallCollector = new FilteredElementCollector(doc) .OfClass(typeof(Wall));
9. Kết luận
Cấu trúc phân cấp lớp trong Revit API giúp tổ chức và làm việc với các phần tử trong mô hình một cách rõ ràng, từ lớp cơ bản Element
đến các lớp chi tiết như tường, cột, sàn, và các khung nhìn. Việc hiểu rõ cấu trúc này giúp các nhà phát triển dễ dàng tương tác và lập trình với mô hình Revit, giúp tối ưu hóa quy trình làm việc và phát triển các công cụ tùy chỉnh cho các dự án kiến trúc và xây dựng.
10. Bài viết liên quan
- Khóa học lập trình Revit API/ Pyrevit Dlhouse.
- Python. Kỹ sư xây dựng có cần biết lập trình không?
- Tạo file central trong Revit .
- Add-in DlhouseTool Revit hỗ trợ triển khai và xuất khối lượng.
11. Liên hệ hỗ trợ tư vấn
Để biết thêm thông tin, hãy liên hệ với chúng tôi qua:
Hotline: 0395.316.829 (zalo)
Email: dlhouse.tvxd@gmail.com
Youtube: dlhouse channel