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")
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.
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.
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.
Và thư mục output chính là toàn bộ dll đã được deploy
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.
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 :
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.
Ngoài ra , tài liệu trực tuyến cũng được đăng tại revit-with-revitpythonshell
Bạn cũng có thể tham khảo một số ví dụ mẫu tại samples-Python-RPS