Trung Tâm Revit Thực Hành NPD 4.1-Viết lệnh đơn giản cho Revit 601/1 Lô A, CMT8, P15, Q10, TP.HCM 6,000,000VND/Khóa +84-913-875-375 Trung Tâm Revit Thực Hành NPD

Ths.KTS NGUYỄN PHƯỚC DỰ

Tài liệu học Revit, Tác giả : ThS.KTS.Nguyễn Phước Dự

1- Viết lệnh mở hộp thoại thông báo

Sau khi đã hoàn thành các bước khởi tạo, đến chạy thử được lệnh trong Revit, chúng ta bắt đầu bằng lệnh tạo ra thông báo:

 Đoạn Code tạo một hộp thông báo với tiêu đề:
"Xin chào!".
Phần đầu: "Bài tập đầu tiên!"
Phần thân:   "Xin chúc mừng, lần đầu tiên viết code bạn cảm thấy thế nào? \n"
                + "Nếu thấy thật tuyệt thì tiếp tục nhé.\n"
                + "Còn chán quá thì hãy tắt máy đi.";
 Phần chân: ""
Và cuối cùng là phương thức Show hộp thoại thông báo:
            TaskDialogResult tResult = mainDialog.Show();
 
 
 
[Code]
TaskDialog mainDialog = new TaskDialog("Xin chào!");
            mainDialog.MainInstruction = "Bài tập đầu tiên!";
            mainDialog.MainContent =
                "Xin chúc mừng, lần đầu tiên viết code bạn cảm thấy thế nào? \n"
                + "Nếu thấy thật tuyệt thì tiếp tục nhé.\n"
                + "Còn chán quá thì hãy tắt máy đi.";
          
            mainDialog.FooterText =
               ""
 
            TaskDialogResult tResult = mainDialog.Show();
[/Code]
 

Sau khi viết đoạn Code trên,nhấn phím phải vào tên Project chọn Build hay Rebuild:

- Build là biên dịch lần đầu hoặc sau khi Clear.

- Rebuild dùng thương xuyên mỗi khi sửa lệnh.

Sau khi biên dịch thành công, khởi động Revit lên để chạy thử.

Lưu ý phải đóng Revit mới chạy lệnh biên dịch này, vì Revit đang mở và đang đọc file DDL chương trình nên không thể ghi đè lên được.

Thông báo đầu tiên các bạn thường thấy khi Revit phát hiện có ứng dụng mới là:

Thông báo này có ý hỏi lại người dùng rằng file DoDaySan.dll này đã được phát hiện, bạn có biết là bạn đang muốn tải vào để sử dụng nó không?

1- Luôn luôn tải vào để chạy, đừng hỏi nữa.

2- Tải vào chạy một lần này thôi, lần khác sẽ hỏi lại.

3- Không tải. Ngừng lại!

Mở file Test lên, chọn lệnh từ Menu Add-ins:

  1- Tên lệnh.

  2- mô tả lệnh.

Hai thông tin trên được đặt trong file Addin.

 

 

 

 

 

Và đây là kết quả của đoạn Code đầu tiên.

Như vậy chúng ta đã hoàn thành một thông báo đơn giản để chạy thử thành công.

2- Viết lệnh đọc độ dày sàn

Chúng ta đi thêm một chút nữa, hãy bắt đầu với một lệnh hữu ích khác. Trong quá trình làm việc chúng ta thấy rằng có nhiều thông tin cần hiển thị nhưng Revit lại chưa hỗ trợ. Độ dày của sàn hay tường là một trong những ví dụ. Bây giờ chúng ta bắt tay viết một lệnh đọc độ dày sàn và gán giá trị này vào một tham số. Từ giá trị này chúng ta có thể dùng các lệnh khác của Revit để hiển thị ra bản vẽ.

Đầu tiên tạo một file Revit Vẽ một cái sàn, tạo độ dốc cho sàn. Tiếp theo tạo một tham số tên [DoDay] kiểu Instance , đơn vị: Length. Lưu file vào thư mục D:SDK\Test_2017


Mặt bằng sàn
 

Tạo một đối tượng sàn trong File, tạo độ dốc cho sàn. Như vậy độ dày của sàn thay đổi qua từng điểm trên độ dốc.

Mặt cắt ngang sàn

 

Kịch bản:

  • Người dùng chọn lệnh, chương trình sẽ yêu cầu chọn một Floor và tiếp theo chọn một điểm trên sàn.
  • Phần mềm sẽ lấy thông tin của sàn và điểm để xử lý, sau đó gán thông tin tính toán vào tham số DoDay đã tạo trước.
  • Cuối cùng thì hiển thị thông báo kết quả.

Giải thuật:

  • Phần mềm nhận 2 đối tượng từ người dùng.
  • Đọc giao điểm giữa giữa hình chiếu thẳng góc của điểm với  mặt trên : Tp
  • Đọc giao điểm giữa giữa hình chiếu thẳng góc của điểm với mặt trên: Bt
  • Độ dày của Sàn tại điểm chiếu  bằng Cao độ điểm Tp trừ Cao độ điểm Bt
  • Đọc tham số DoDay và gán biến vào tham số.

Với mỗi giải thuật chúng ta thu được một kết quả có mức độ sai số khác nhau. Vì tính độ dày cho một bản nghiêng tại một điểm, chúng ta phải hiểu rõ qui ước cách xác định độ dày trong hình học của ngành. Giải thuật vừa nêu chỉ tính gần đúng theo cách từ một điểm ở mặt phẳng nghiêng phía trên chiếu vuông góc xuống mặt phẳng bằng phía dưới. Điểm được chọn từ người dùng trùng trên mặt trên. Trong trường hợp người dùng chọn điểm của mặt dưới hay ngoài hai mặt phẳng trên và dưới, chúng ta sẽ có kết quả khác nhau.

 

Trên đây là một đoạn code đọc chiều dày sàn.

Diễn giải:

 public double DocDoDay_San()
        {
  • Nhận 2 đối tượng người dùng chọn:
           // chọn đối tượng sàn (Floor). Trong đó Reference là kiểu dữ liệu đối tượng đại diện chung. PickObject là kiểu chọn bằng click chuột.
            Reference elem = uiApp.ActiveUIDocument.Selection. PickObject(ObjectType.Element,  "Select a Floor");
// Sau khi chọn
            Floor floor = (Floor)doc.GetElement(elem.ElementId);
 
            ObjectSnapTypes snapTypes = ObjectSnapTypes.Nearest;
            XYZ pt = uiApp.ActiveUIDocument.Selection. PickPoint(snapTypes, "Select point on Floor");
  • Đọc điểm chiếu mặt dưới
            XYZ Bt = floor.GetVerticalProjectionPoint(pt, FloorFace.Bottom);
  • Đọc điểm chiếu mặt trên
            XYZ Tp = floor.GetVerticalProjectionPoint(pt, FloorFace.Top);
  • Đặt biến và tìm hiệu Cao độ
            double DoDay = (Tp.Z - Bt.Z);
  • Khai báo truy cập dữ liệu, khai báo này chỉ hợp lệ khi trong Class lệnh này dùng :

Autodesk.Revit.Attributes.TransactionMode.Manual

            Transaction transaction = new Transaction(doc, "NPD_ThickFloor");
            transaction.Start();
  • Tìm tham số DoDay của sàn
            Parameter para = floor.LookupParameter("DoDay");
  • Nếu tìm được thì gán biến
            if (para != null) para.Set(DoDay);
  • Khai báo hoàn tất truy cập dữ liệu
            transaction.Commit();
  • Trả về kết quả
            return DoDay;
        }
[Code]
 public double DocDoDay_San()
        {
           
            Reference elem = uiApp.ActiveUIDocument.Selection. PickObject(ObjectType.Element,  "Select a Floor");
            Floor floor = (Floor)doc.GetElement(elem.ElementId);
 
            ObjectSnapTypes snapTypes = ObjectSnapTypes.Nearest;
            XYZ pt = uiApp.ActiveUIDocument.Selection. PickPoint(snapTypes, "Select point on Floor");
 
            XYZ Bt = floor.GetVerticalProjectionPoint(pt, FloorFace.Bottom);
            XYZ Tp = floor.GetVerticalProjectionPoint(pt, FloorFace.Top);
            double DoDay = (Tp.Z - Bt.Z);
 
            Transaction transaction = new Transaction(doc, "NPD_ThickFloor");
            transaction.Start();
            Parameter para = floor.LookupParameter("DoDay");
 
            if (para != null) para.Set(DoDay);
 
            transaction.Commit();
            return DoDay;
        }
[/Code]
Chạy lệnh biên dịch Build và khởi động Revit để thử. Như vậy chúng ta đã kết thúc với 2 lệnh tuy đơn giản cũng có vấn đề cơ bản để làm quen: Thông báo, chọn đối tượng, chọn điểm, khai báo truy cập dữ liệu, đọc tham số của đối tượng, gán biến cho tham số.
 

 


Sách học Revit, Tác giả : ThS.KTS.Nguyễn Phước Dự

(Nhấn Ctrl+V để Paste ảnh từ Clipboard)
Khách Đăng nhập