Mở đầu

Trước đó mình đã viết một bài Hướng dẫn cơ bản về cách tiếp cận với RevitPythonShell, hôm nay sẽ là một bài dẫn dẵn bạn tiếp tục khám phá công cụ thú vị này. Ở đây chúng ta sẽ bắt đầu đi vào tìm hiểu sâu hơn để hiểu rõ cách khai thác cũng như sử dụng nhé.

Cụ thể thì RevitPythonShell có ưu điểm gì ?

RevitPythonShell là một bổ trợ Revit được tạo bởi Daren Thomas, nó cho phép bạn truy cập toàn quyền vào API Revit bằng ngôn ngữ lập trình Python. Nó là một trình bao tương tác cho phép bạn thử nghiệm với các đoạn mã ngắn trong Autodesk Revit khi đang chạy. Điều này cung cấp một cách thiết thực hơn để tạo tiện ích bổ sung cho Revit, v.v.

Các chức năng chính của RevitPythonShell :

1.Tập lệnh ngôn ngữ Python (IronPython)

2.Cú pháp nổi bật

3.Toàn quyền truy cập vào API Revit

4.Tập lệnh RevitPythonShell có thể được xuất dưới dạng các addin độc lập

5.Thư viện chuẩn Python và thư viện khung công tác .NET có sẵn

6.Chỉnh sửa và chạy các tập lệnh mà không cần khởi động lại Revit

Các khởi tạo truy cập sẵn có

__revit__ : Điều này tương tự với Autodesk.Revit.Application khi bạn bắt đầu chạy một ExternalCommandData để khởi tạo một Document : `

Ví dụ :

from Autodesk.Revit.DB import *
from Autodesk.Revit.DB.Architecture import *
from Autodesk.Revit.DB.Analysis import *
uidoc = __revit__.ActiveUIDocument
document = doc = __revit__.ActiveUIDocument.Document

__commandData__ : Tương đương với một ExternalCommandData

__elements__ : ElementSet được chuyển đến RevitPythonShell khi bạn đã nhấp vào "Open Python Shell" hoặc khởi chạy một tập lệnh từ thanh Ribbon

__result__ : Tương đương với kết quả trả về từ tập lệnh ExternalCommandData ví dụ như kết quả trả về thành công IExternalCommand.Result.Succeeded.

__vars__ được gọi như một biến chung chung bao gồm các kiểu như string,int,double,v.v..

__uiControlledApplication__ : một tham chiếu đến một UIControlledApplication instance và chỉ trong lúc bắt đầu tệp lệnh.

__window__ : Tham chiếu đến một cửa sổ đầu ra .

Ví dụ thoát chương trình cửa sổ :

def quit():
__window__.Close()
exit = quit

__file__ : Hỗ trợ một tập lệnh python thực thi đường dẫn từ bên ngoài, ví dụ như C:\Rundemo.py

Như vậy tổng kể lại chúng ta sẽ có một số biến định nghĩa khai báo như sau :

uidoc = __revit__.ActiveUIDocument
doc = __revit__.ActiveUIDocument.Document
selection = __revit__.ActiveUIDocument.Selection.Elements
alert(msg) = UI.TaskDialog.Show('RevitPythonShell', msg)
quit() hoặc exit() = __window__.Close()

Xin chào thế giới

Như vậy rất dễ để ta có thể hiển thị lên màn hình revit một thông báo xin chào thế giới đơn giản với câu lệnh:

alert("Hello Word")

 Image 3ff74619 5bc0 42b2 b8f0 74829fb83a60

Nếu màn hình chính hiện lên như thế này tức là bạn đã thành công.

 Image ce79225f ddc3 4b0f a4e8 f3b917de1a71

Lọc tường hiển thị tên và Id

Lần này chúng ta sẽ thử lọc ra tất cả các tường có trong dự án, hiển thị tên và Id định danh của chúng.

from Autodesk.Revit.DB import *
uidoc = __revit__.ActiveUIDocument
doc = __revit__.ActiveUIDocument.Document
from Autodesk.Revit.UI import TaskDialog
from Autodesk.Revit.UI import UIApplication
walls = FilteredElementCollector(doc).OfClass(Wall)
for c in walls:
	print(c.Name+"_"+c.Id.ToString())
	

Nếu màn console của tệp lệnh thực thi hiển thị lên gần giống như thế này tức là bạn đã thành công.

 Image 7fcd21e0 b6cd 4deb bf7b 54a2bdb45f4c

Tạo một nút chọn tương tác

Nếu là một người dùng bình thường không cần thiết phải biết đến mã nhưng chúng ta lại muốn họ có thể sử dụng và tương tác được.Như vậy ta phải bắt đầu suy nghĩ đến việc tạo ra một nút chọn tương tác người dùng.

Đầu tiên cần chuẩn bị một xml như sau:

<?xml version="1.0" encoding="utf-8" ?>
<RpsAddin>
<RibbonPanel text="GetWall">
<PushButton text="GetWall" src="InfoWall.py"/>
</RibbonPanel>
</RpsAddin>

Như vậy tệp xml và tệp lệnh python InfoWall.py phải cùng nằm trong một vị trí đường dẫn.Lúc này ta chọn đến deploy và tiến hành deploy

Nếu hiện lên thông báo này tức là bạn đã deploy thành công.

 Image bf2a5323 86bf 4985 8073 aa55ad92dfce

Và thư mục output chính là toàn bộ dll đã được deploy

 Image 73e678be f746 4d0f bee2 393d0f1434b6

Kiểm tra Addin Đã Deploy

Nếu dùng các công cụ kiểm tra mã đã deploy, ta sẽ thấy như sau, điều này cũng cho ta biết rằng mã đã đƯợc deploy chuẩn mà không vướng bất cứ lỗi nào trong quá trình build.

 Image 2a01bad9 557a 4a12 aa87 deb294c7cac2

Lúc này ta sẽ dùng đến công cụ thứ hai chính là Addinmanager để hoàn tất khởi chạy tệp lệnh người dùng chính xác :

 Image 7f09a862 13d2 431e b233 f82a3c4ea571

Xuất bản cài đặt

Việc xuất bản cài đặt này hoàn toàn tương tự với bài viết tham chiếu dll Bắt đầu viết mã với RevitAPI nên mình sẽ không hướng dẫn ở đây nữa, thật đơn giản phải không nào :D.

Mở rộng

Bài viết được thực hiện trên phiên bản revit 2021, nếu bạn có câu hỏi thắc mắc hoặc bất cứ lỗi nào hãy để lại bình luận bên dưới bài viết nhé.Cám ơn đã ghé thăm và đọc bài viết.