Trung Tâm Revit Thực Hành NPD 4.4.1-Tạo đối tượng 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ự

TẠO MỘT ĐỐI TƯỢNG TRONG FILE REVIT

Hầu như tất cả các cấu kiện kiến trúc xây dựng được vẽ trong file Revit và các kiểu hay loại cửa cấu kiện được định nghĩa thì chương trình đều gọi là đối tượng. Việc tạo một đối tượng thì tùy theo loại đối tượng nhưng những cấu kiện Family  đa số là chúng ta phải dùng phương thức Create. Ứng với mỗi loại đối tượng, chương trình yêu cầu chúng ta các tham số khác nhau để thể hiện.
Học lập trình thì tốt nhất làm làm bài tập và chiêm nghiệm dần. Chúng ta tiếp tục với bài tập tạo ra một bức tường trong file Revit trên View đang mở:
 
Kịch bản:
Mở một View mặt bằng, chọn 2 điểm để vẽ bức tường, kiểu tường là đang được chọn mặc định.
Giải pháp:
  • Dùng thủ tục  Wall.Create(       Document document, 
Curve curve, 
ElementId wallTypeId,
ElementId levelId,
double height,
double offset, 
bool flip,
bool structural)
 
Trong thủ tục này có các tham số theo thứ tự là Dữ liệu File Revit, một hoặc nhiều đường thẳng hoặc cung, ID của kiểu tường, ID của lưới cao độ, Cao đỉnh tường, Cao chân tường, đối xứng mặt chọn hướng mặt ngoài và trong, thuộc loại tường kết cấu hay kiến trúc.
  • Đường thẳng tạo ra bởi 2 điểm do người dùng chọn
  • WallTypeId được đọc từ kiểu tường mạc định băng phương thức doc.GetDefaultElementTypeId
  • Đọc levelId từ view đang mở. Một view mặt bằng đang mở chắc chắn phải liên kết với một lưới cao độ. Phương thức lấy Level View.GenLevel.
  • Chiều cao đỉnh tường và chân tường do người dùng nhập qua hộp thoại
Chúng ta bắt đầu với cấu trúc lệnh:
Trong Class Command, và Code như sau:
 
[Code]
using System.Collections.Generic;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
 
namespace Plugin_2017
{
    [Autodesk.Revit.Attributes.Transaction( Autodesk.Revit.Attributes.TransactionMode.Manual)]
    [Autodesk.Revit.Attributes.Regeneration( Autodesk.Revit.Attributes.RegenerationOption.Manual)]
    [Autodesk.Revit.Attributes.Journaling( Autodesk.Revit.Attributes.JournalingMode.NoCommandData)]
 
    public class Command : IExternalCommand
    {
        Document doc;
        UIApplication uiApp = null;
        public Autodesk.Revit.UI.Result Execute( ExternalCommandData commandData,
            ref string message,  Autodesk.Revit.DB.ElementSet elements)
        {
            doc = commandData. Application.ActiveUIDocument.Document;
            uiApp = new UIApplication( commandData.Application.Application);
 
Transaction transaction = new Transaction( doc, "NPD_ThickFloor");
           transaction.Start();
           VeTuongTu2Diem( doc);
          transaction.Commit();
 
 return Autodesk. Revit.UI.Result.Succeeded; // Trả về kết quả thành công.
        }
[/Code]
Phần này chúng ta đã thực hành trong phần trước không cần giải thích lại.
 
//========Phần thủ tục vẽ tường
 
Tiếp theo tạo thủ tục vẽ tường bên trong Class Command
[Code]
public Wall VeTuongTu2Diem( Autodesk.Revit.DB.Document doc)
        {
          
            ObjectSnapTypes snapTypes = ObjectSnapTypes.Nearest;
            XYZ start =  uiApp.ActiveUIDocument.Selection.PickPoint( snapTypes, "Chọn điểm thứ nhất");           
            XYZ end =  uiApp.ActiveUIDocument.Selection.PickPoint( snapTypes, "Chọn điểm thứ hai");
         
            FilteredElementCollector TatCaDoiTuongTrongFile =  new FilteredElementCollector(doc);
            ICollection List_level =  TatCaDoiTuongTrongFile.OfClass(typeof( Autodesk.Revit.DB.Level)). WhereElementIsNotElementType().ToElements();
// Lấy ID Level của View đang mở:
            ElementId level_Id = doc.ActiveView.GenLevel.Id; 
//Đọc ID Kiểu tường mặc định:
            ElementId wallType_Id = doc.GetDefaultElementTypeId( ElementTypeGroup.WallType);
            
//Tạo một đoạn thẳng qua hai điểm :
            Line TaoDuongThang = Line.CreateBound(start, end);
//Mở hộp thoại Để người dùng nhập số liệu:
            using (frm_Input f_Input = new frm_Input())
            {
                if (System.Windows.Forms.DialogResult.OK == f_Input.ShowDialog())                {
// gán số liệu lấy từ hộp thoại. Có thể đưa trực tiếp vào vị trí tham số:
                    double height = f_Input.f_height;
                    double offset = f_Input.f_offset;   
//Tạo một đối tượng tường với các tham số đã nhận được  bên trên rồi kết thức lệnh, trả về kết quả:              
                    return  Wall.Create(doc, TaoDuongThang, wallType_Id, level_Id, height, offset, true, false);
                }
 
            }
// Nếu đoạn mã trên gặp lỗi, chương trình chạy đến cuối và kết thúc với biến trả về là Null:
            return null;
}
[/Code]
//================Code của Form lấy thông tin
Tạo một Form nhập số liệu:. Nhấn chuột phải vào Project. Chọn New Item:
Trong hộp thoại Add New Item, làm 2 bước như hình bên dưới:
 

Nhấp đúp chuột vào Form vừa tạo để mở giao diện Design Form. Vào Menu View\Toolbox, hộp công cụ hiện ra. Chọn ba công cụ: Button, TextBoxLabel để Design Form như hình:

 
 
 
 
 


Sau khi được tạo, nhấn phím phải vào Form, chọn View Code chúng ta mở trang Code Form đã tạo sẵn:
 
 
 
 
 
 
 
 
 
 
 
 

Tiếp theo chúng ta thêm các đoạn Code như hình bên dưới:

[Code]
using System;
using System.Collections.Generic;
using System.Windows.Forms;
 
namespace Plugin_2017
{
    
    public partial class frm_Input : Form
    {
// Khai báo hai biến toàn cục:
        public double f_height = 0;
        public double f_offset = 0;
 //Thủ tục khởi tạo Form chương trình tự tạo:      
        public frm_Input()
        {
            InitializeComponent();
           
        }
//Sự kiện Click chuột vào nút OK:
        private void tb_OK_Click(object sender, EventArgs e)
        {
//Đọc hai biến người dùng nhập, gán vào hai biến khai báo:
            f_height =Convert.ToDouble(tb_Height.Text) /(12*25.4);
            f_offset = Convert.ToDouble( tb_Ofset.Text) / (12 * 25.4);
 // Đóng hộp thoại và trả kết quả OK:          
            this.DialogResult = DialogResult.OK;
        }
//Sự kiện Click chuột vào nút Cancel:
        private void tb_Cancel_Click(object sender, EventArgs e)
        {
 // Đóng hộp thoại và trả kết quả Hủy, không làm gì cả: 
            this.DialogResult = DialogResult.Cancel;
        }
    }
}
[/Code]
 

 

 


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