- Published on
SonnyRevitExtensions - Thư Viện Mở Rộng Cho Revit API
- Authors

- Name
- Phan Cong Vu Duc
Giới thiệu
SonnyRevitExtensions là một thư viện mã nguồn mở cung cấp các extension methods cho Autodesk Revit API, giúp đơn giản hóa các thao tác hình học phức tạp trong lập trình Revit. Thư viện này được viết từ năm 2021 như một phần của dự án AlphaBIM và mới được open-source vào tháng 11/2025.
Vấn đề
Khi làm việc với Revit API, bạn thường phải viết nhiều code lặp lại cho các thao tác hình học cơ bản như:
- So sánh điểm XYZ với tolerance
- Tính khoảng cách giữa các điểm
- Tìm giao điểm giữa các đường cong
- Kiểm tra điểm có nằm trong mặt phẳng không
- Các phép toán vector...
Những đoạn code này thường dài dòng và dễ mắc lỗi khi tự implement.
Giải pháp
SonnyRevitExtensions cung cấp các extension methods theo phong cách LINQ, giúp code ngắn gọn và dễ đọc hơn:
XYZ Extensions
using SonnyRevitExtensions.Extensions.XYZs;
using SonnyRevitExtensions.Extensions;
var point1 = new XYZ(0, 0, 0);
var point2 = new XYZ(10, 10, 5);
// Tính khoảng cách 2D
double dist2D = point1.DistanceTo2D(point2);
// So sánh điểm với tolerance
bool equal = point1.IsAlmostEqual2D(point2, ToleranceConstants.GeneralTolerance);
// Kiểm tra vector song song
var vec1 = new XYZ(1, 0, 0);
var vec2 = new XYZ(2, 0, 0);
bool parallel = vec1.AreVectorsParallel(vec2);
Curve Extensions
using SonnyRevitExtensions.Extensions.GeometryObjects.Curves;
var curve1 = Line.CreateBound(new XYZ(0, 0, 0), new XYZ(10, 0, 0));
var curve2 = Line.CreateBound(new XYZ(5, -5, 0), new XYZ(5, 5, 0));
// Tìm giao điểm
XYZ? intersection = curve1.GetIntersection(curve2);
// Kiểm tra song song
bool isParallel = curve1.IsParallel(curve2);
// Tính khoảng cách từ điểm đến đường cong
double distance = curve1.Distance(point);
Face Extensions
using SonnyRevitExtensions.Extensions.GeometryObjects.Faces;
// Kiểm tra điểm có nằm trong mặt không
bool isInside = face.IsPointInside(point);
// Tìm các giao điểm giữa hai mặt
List<XYZ> intersectionPoints = face1.GetIntersectionPoints(face2);
// Lấy vector pháp tuyến
XYZ normal = face.GetNormal();
// Với PlanarFace: kiểm tra song song
bool isParallel = planarFace1.IsParallelPlanarFace(planarFace2);
// Với CylindricalFace: lấy bán kính
double? radius = cylindricalFace.GetRadius();
Cài đặt và sử dụng
Bước 1: Build project
Clone repository và build project để tạo SonnyRevitExtensions.dll:
git clone https://github.com/PhanCongVuDuc/SonnyRevitExtensions.git
Bước 2: Reference vào project
Thêm reference SonnyRevitExtensions.dll vào project Revit Add-in của bạn.
Bước 3: Sử dụng
using SonnyRevitExtensions.Extensions.XYZs;
using SonnyRevitExtensions.Extensions.GeometryObjects.Curves;
using SonnyRevitExtensions.Extensions;
Kế hoạch phát triển
Trong tương lai, thư viện sẽ được mở rộng thêm:
- Solid extensions
- Edge extensions
- Các thao tác hình học bổ sung
Đóng góp
Mọi đóng góp đều được chào đón! Hãy follow code style hiện tại, thêm XML documentation và đảm bảo tương thích với tất cả các phiên bản Revit.
Kết luận
SonnyRevitExtensions giúp đơn giản hóa việc làm việc với Revit API, giúp code ngắn gọn và dễ maintain hơn. Đây là một công cụ hữu ích cho các developer làm việc với Revit API, đặc biệt là những người thường xuyên phải xử lý các bài toán hình học phức tạp.
🔗 GitHub Repository: https://github.com/PhanCongVuDuc/SonnyRevitExtensions
Nếu bạn thấy project hữu ích, hãy cho một ⭐ star trên GitHub nhé!