Nhập môn Revit Add-in với C#

Sharing is caring!

Xin chào các bạn, tui lại tái xuất giang hồ đây. Lần trở lại này, tui sẽ viết một số bài về lập trình Add-in cho Revit với ngôn ngữ C#. Bài đầu tiên này, tui sẽ hướng dẫn các bạn cách tạo một project cho Add-in theo template có sẳn. Xuyên suốt các bài viết, tui sẽ sử dụng Revit 2016 và Visual Studio 2015 (các bạn có thể dùng Visual Studio 2013 cũng được).

Đây là bài “nhập môn”, cho nên tui sẽ chỉ các bạn cách cài template để tạo một project add-in, sau đó tui sẽ viết thử một cái add-in để cho nó chạy cho các bạn coi nhé.

1. Cài đặt các công cụ cần thiết:

Như đã nói, các bạn phải có Autodesk Revit 2016 và Visual Studio 2015 nhé. Tiếp theo, các bạn vào đường link sau để download cái project template cho add-in:

Tiếp theo, với C# thì bạn copy cái file revit2016addinwizardcs0.zip vào thư mục sau:

“C:\Users\[YOUR_USERNAME]\Documents\Visual Studio 2015\Templates\ProjectTemplates\Visual C#”

Tương tự vậy cho VB.NET, copy file revit2016addinwizardvb0.zip vào thư mục sau:

“C:\Users\[YOUR_USERNAME]\Documents\Visual Studio 2015\Templates\ProjectTemplates\Visual Basic”

Chổ này dễ ha, các bạn có thể làm được.  Happy-Grin

2. Tạo một project và viết thử một add-in cho Revit:

Sau khi các bạn làm các bước trên kia xong. Tiếp theo, tui sẽ làm một cái demo nho nhỏ nhưng mà “kinh điển”, ngôn ngữ nào cũng bắt phải làm được đó là hiển thị câu “Hello World” ra màn hình.  Overjoy

Đầu tiên, bạn phải Open cái Visual Studio 2015 lên và tạo project: File => New => Project

new_project

B1: Chọn ngôn ngữ là C#.

B2: Chọn Project Template là Revit 2016 Addin

B3: Đặt tên cho project là HelloWorld

B4: Chọn thư mục để tạo project.

B5: Đặt tên Solution(theo kinh nghiệm chinh chiến của tui thì tên Solution là lấy tên project + thêm đuôi Sln). Như ví dụ trên thì tui lấy HelloWorld + với Sln tạo thành HelloWorldSln

Đối với .NET, một solution có thể chứa nhiều project nhé các bạn(khái niệm solution nó to hơn project.)

Click nút OK, các bạn sẽ ra màn hình chính để code:

coding_screen

Chú ý cái tab “Solution Explorer”, click vào cái mục References, các bạn sẽ thấy nó có 2 cái file DLL rất quan trọng đó là RevitAPIRevitAPIUI

sln_explorer

Hai cái file này chính là 2 file DLL của Revit 2016 khi các bạn cài đặt trước đó. Nếu khi tạo project Addin, các bạn thấy 2 cái file này nó có cái dấu tam giác màu vàng như hình trên thì các bạn sẽ phải tham chiếu lại 2 cái file này thì nó mới hiểu các thư viện của Revit mà bạn sử dụng sau này. Nếu không, Visual Studio nó “la làng” lên là không thấy thư viện của Revit đó nha.

Để tham chiếu lại 2 file DLL này, đầu tiên các bạn remove nó đi bằng cách chọn 2 đứa nó rồi click chuột phải, chọn Remove(hoặc nhấn nút Del):

re_references_dll

Sau khi xóa xong, bạn click chuột phải vào References, chọn Add Reference:

add_ref

Chọn mục Browse bên phía trái, sau đó click nút Browse:

browes_dll

Khi đó, bạn chọn thư mục là: C:\Program Files\Autodesk\Revit 2016, rồi tìm và chọn 2 cái file RevitAPI.dll và RevitAPIUI.dll như hình sau:

browes_dll_2

Click nút Add, Visual Studio nó sẽ trả về cái cửa sổ Reference trước đó với 2 cái file dll trên đã được chọn:

selected_dll

Sau đó click nút OK, kiểm tra lại mục References trong cửa sổ Solution Explorer, các bạn sẽ thấy 2 file RevitAPI và RevitAPIUI nó mất 2 cái tam giác màu vàng rồi, điều đó có nghĩa là các bạn đã tham chiếu đúng đến 2 file dll của Revit

selected_dll_2

Xong, vậy là đạn đã lên nòng, giờ chuyển qua chiến nhá các bạn, cũng dễ thôi à  Happy-Grin

3. Viết Command “Hello World”:

Đầu tiên, ngó qua cái Solution Explorer cái, các bạn thấy có 3 file gồm: App.cs, Command.csHelloWorld.addin thì các bạn chỉ quan tâm đế 2 file là Command.csHelloWorld.addin thôi, tui sẽ giải thích ý nghĩa của từng file này:

Để mở file trong Visual Studio, chỉ cần double click vào cái file đó là được

3.1 File HelloWorld.addin:

File này có nội dung như sau:

Các bạn nhìn từ dòng 3 đến dòng 11, đây là nội dung cấu hình để Revit nó hiểu là mình đang có một cái add-in command và command này có:

Tên là “Command HelloWorld” với mô tả là “Some description for HelloWorld”. Command này nằm trong file HelloWorld.dll với cái class name để thực thi là HelloWorld.Command.

Giải thích tiếp:

Do cái project tui tạo là HelloWorld cho nên khi build ra thì cái dll nó sẽ có tên là HelloWorld.dll với namespace là HelloWorld luôn. Trong namespace này, nó tự tao ra cái class tên là Command, cái class này chính là nơi một lát nữa tui sẽ viết lệnh trong đó để thực thi câu lên xuất câu “Hello World”.

Những mục như: <Text></Text>,  <Description></Description>, <Assembly><Assembly/>, <FullClassName></FullClassName>, chúng ta có thể thay đổi được nha các bạn, tùy thuộc vào lúc các bạn đặt tên project, cũng như các bạn không thích cái class Command đó và tạo mới lại cái class khác thì các bạn phải cập nhật cái file .addin này, nếu không Revit nó sẽ không tìm thấy cái file dll của mình.

Thôi, nói dài dòng quá chắc các bạn cũng “ngộp”, thôi cứ viết và trong các bài kế, tui sẽ giải thích thêm.

3.2 File Command.cs:

Trong file này có một class tên là Command luôn, class này nó được implement từ một interface tên là IExternalCommand (cái interface này là của Revit nó tạo cho mình để mình sử dụng nha mấy bạn). Xem qua nội dung mà cái template nó tạo sẳn cho mình nha các bạn:

Các bạn thấy, trong cái class này nó có cái hàm là Execute, cái hàm này là của cái interface IExternalCommand đó mấy bạn và đây chính là nơi các bạn thỏa sức tung hoành ngang dọc, sáng tạo đủ thứ luôn  Happy-Grin . Rồi, giờ tui sẽ “tung hoành ngang dọc” cho các bạn coi. Sau đây là đoạn code của tui:

Giải thích nà  Tired  :

Đâu tiên, các bạn phải using một số namespace các thư viện của Revit thì mới sử dụng được các class như: UIApplication, UIDocument, Application, Document, TaskDialog, Result…

Để biết cái class nào thuộc cái namspace nào thì các bạn rê con chuột vào cái class đó thì nó sẽ hiện cái cái tooltip cho bạn thấy cái namespace tương ứng của class đó

Mặc định khi tạo project Revit Addin thì nó đã làm sẳn cho các bạn các namespace trên, các bài sau này, khi dùng thêm cái namespace nào nữa thì tui sẽ nói rõ thêm.

Giờ, các bạn đừng chú ý đến mấy cái khác, chỉ chú ý đển cái thằng TaskDialog thoai nhá, tại vì khi run command này, cái hàm Show của nó nó sẽ popup cái dialog có dòng chữ “Hello World!” đấy. Khi rê chuột vào cái chữ TaskDialog, các bạn sẽ thấy cái namspace của nó là Autodesk.Revit.UI:

namespace

4. Build và chạy thử command:

Sau khi code xong (có 1 dòng code thoai, làm thấy ghê ha Who-s-the-man ), các bạn phải build nó ra thành file dll, sau đó copy nó vào thư mục chứa addin của Revit 2016, rồi chạy Revit lên, tìm command Hello World mà thử.

4.1 Thư mục chứa Addin của revit 2016:

Theo kinh nghiệm tình trường, à nhầm kinh nghiệm lập trình với bạn Revit 2016 này thì chúng ta có 2 chổ để nhét cái file Helloworld.dll và file Helloworld.addin của chúng ta vào đó là:

  • Cách 1: C:\Users\[YOUR_USERNAME]\AppData\Roaming\Autodesk\REVIT\Addins\2016
  • Cách 2: C:\ProgramData\Autodesk\Revit\Addins\2016

với cách 1 thì user nào thì sẽ có riêng thư mục Addin của user đó, cho nên nếu nhiều user trên một máy mà dùng chung 1 cái addin thì phải install 2 lần. Với cách 2 thì chỉ cần install 1 lần cho mọi user luôn, khỏe re

Khi test, hay debug, ta dùng cách 1, cái này thì project template có hỗ trợ luôn. Khi dùng chính thức thì nên theo cách 2

4.2 Tạo file dll và copy vào thư mục Addin:

Như tui đã nói, ta dùng cách 1 hen. để vừa build file xong mà copy luôn, trong project mà tui tạo đó, nó có sẳn cái lệnh copy vào cái thư mục user tương ứng luôn, các bạn xem nha:

Ở của sổ Solution Explorer, click chuột phải vào cái project HelloWorld, chọn Properties (hoặc chọn project, click cái icon hình cờ-lê ở góc phải trên của của sổ):

build_dll

Nó dẫn các bạn qua cái tab, các bạn chọn cái mục Build Events:

build_events

Chú ý cái ô Post Build, các ban sẽ thấy 2 cái lệnh copy cái file .dll và file .addin trong project vào cái thư mục Addin của cái user hiện tại.

$(AppData) chính là C:\Users\[YOUR_USERNAME]\AppData\Roaming nha các bạn

Hiểu cái chổ để nhét addin của mình vào rồi, giờ là build ra file dll nha, dễ lắm  Happy-Grin . Các chọn project HelloWorld, chuột phải nó, chọn Build

build_dll_2

Sau khi build xong mà thành công thì của sổ output nó hiển ra vầy

build_output

Nếu có lỗi khi build thì nó sẽ báo cho bạn biết là chổ nào, Visual Studio nó “giỏi” về khoản này lắm, các bạn yên tâm.  Overjoy . Súng đã lên nòng, chiến thôi.

Lúc này các bạn mới chạy Revit 2016, mở đại một file revit nào đó (tốt nhật là file mẫu có sẳn cho nhanh). Mở file xong, tìm cái tab Add-ins, click External Tool thì các bạn sẽ thấy cái command HelloWorld nó được load lên đó.

tab_add-ins

Rồi xong, tới đây, chỉ cần click vào cái Command HelloWorld là nó popup cái dialog lên liền à

result_2

Ổn, vậy là bài nhập môn coi như xong, hy vọng các bạn xem bài viết và hiểu được tí xiu cách hoạt động của 1 add-in trong Revit 2016.  Bye

 

Sharing is caring!

Cài đặt AddinManager, sử dụng class FilteredElementCollector để truy xuất đến các element trong Revit

Vincent Le

Tui là Lê Minh Đạt, tên tiếng anh là Vincent(do thích nhân vật Vincent Valentine, ai từng là fan của trò Final Fantasy VII thì sẽ biết nhân vật này, hehe). Đang tập tành làm một blogger viết về mảng lập trình, mong muốn được chia sẻ những gì đã học được, tích góp được trong 10 năm đi làm thợ code.

shares