Revit

Dynamo: cẩm nang lập trình trực quan cho Revit — là gì, làm được gì, so với Revit API và cách học

Dynamo là công cụ lập trình trực quan đi kèm Revit. Cẩm nang: Dynamo là gì, node và graph, package, Dynamo Player, việc kỹ sư dùng hằng ngày, so với Revit API.

  • PGS.TS. Trần Anh Bình
  • 15 phút đọc
Một graph Dynamo điển hình: đọc bảng Excel, chọn cấu kiện trong Revit, ghi giá trị vào tham số. Dữ liệu chảy từ trái sang phải qua các node nối bằng dây Ảnh: Hình vẽ của Viện Tin học Xây dựng

Dynamo là công cụ lập trình trực quan đi kèm Revit. Thay vì viết mã, bạn kéo các khối lệnh gọi là node, nối chúng bằng dây thành một sơ đồ. Revit làm theo sơ đồ đó. Việc lặp đi lặp lại hàng trăm lần bằng tay, Dynamo làm trong vài giây. Tên đầy đủ là Dynamo BIM hay Dynamo for Revit, để khỏi lẫn với máy phát điện cùng tên.

Đây là trang tổng hợp về Dynamo của Viện Tin học Xây dựng. Dynamo được giới thiệu trong các khóa Revit và khóa Robot Structural Analysis của Viện, và được dạy sâu hơn khi doanh nghiệp đặt lớp riêng. Trang trả lời những câu hỏi học viên hay hỏi: Dynamo là gì, có phải cài thêm không, bên trong một graph có gì, kỹ sư dùng nó vào việc gì, khác Revit API ở đâu, và học mất bao lâu.

Dynamo là gì

Dynamo là một ngôn ngữ lập trình trực quan. "Trực quan" nghĩa là bạn nhìn thấy chương trình dưới dạng sơ đồ. Mỗi khối trong sơ đồ là một node, làm một việc nhỏ: chọn tất cả cửa trong mô hình, đọc một tham số, đọc một bảng Excel, cộng hai số. Dây nối giữa các node gọi là wire. Cả sơ đồ gọi là graph. Dữ liệu chảy từ node bên trái sang node bên phải, y như nước chảy trong ống.

Lấy một ví dụ quen thuộc. Một tòa nhà có ba trăm phòng. Kiến trúc sư phải đánh số phòng theo tầng, theo chiều kim đồng hồ. Làm bằng tay mất một buổi, và gần như luôn sót vài phòng. Rồi phương án đổi, phải làm lại. Với Dynamo, graph đánh số đó viết một lần, chạy lại bao nhiêu lần cũng được, mỗi lần vài giây.

Hình đầu bài là một graph như thế, đọc từ trái sang phải. Node File PathData.ImportExcel mở bảng Excel, lấy sheet "Cot". List.GetItemAtIndex rút ra cột số 2 của bảng, là cột mã cấu kiện. Ở nhánh dưới, All Elements of Category lấy mọi cột kết cấu trong mô hình. Node cuối Element.SetParameterByName ghi từng giá trị vào tham số "Mã cấu kiện" của từng cột. Chín node, không một dòng mã. Bảng Excel đổi, bấm chạy lại là xong.

Dynamo do kỹ sư Ian Keough viết khoảng năm 2010. Khi đó anh làm ở công ty tư vấn Buro Happold và phải chuyển dữ liệu qua lại giữa Rhino và Revit mỗi ngày. Năm 2011 anh mở mã nguồn. Sau đó Autodesk tiếp nhận và phát triển Dynamo cho đến nay. Mã nguồn vẫn mở trên GitHub theo giấy phép Apache 2.0, và Dynamo hoàn toàn miễn phí.

Điểm quan trọng nhất về Dynamo: nó không thay Revit, nó điều khiển Revit. Muốn bảo Dynamo làm gì, bạn phải biết Revit làm việc đó ra sao. Người chưa hiểu Family, tham số, category trong Revit thì chưa nên học Dynamo. Nếu bạn còn mới, hãy bắt đầu từ bài Revit: cẩm nang ba nhánh, phiên bản, giá và cách học hoặc một khóa Revit theo bộ môn của Viện.

Dynamo đi với Revit như thế nào

Có bốn cách gặp Dynamo trong bộ phần mềm của Autodesk.

Dynamo for Revit là bản phổ biến nhất. Từ Revit 2020, Dynamo được cài sẵn cùng Revit. Bạn mở nó trong thẻ Manage. Không phải tải thêm gì. Các bản Revit trước đó phải cài Dynamo riêng. Mỗi phiên bản Revit đi kèm một phiên bản Dynamo nhất định, và Autodesk cập nhật cả hai cùng nhịp. Vì thế, khi hỏi "tôi đang dùng Dynamo mấy", câu trả lời gần như luôn là "Revit mấy".

Dynamo Player là cửa sổ nhỏ để chạy graph có sẵn. Người dùng chọn graph, điền vài ô thông số, bấm chạy. Không cần mở trình soạn, không cần hiểu bên trong. Dynamo Player có từ Revit 2017.1. Đây là cách phần lớn kỹ sư trong một văn phòng dùng Dynamo: một người viết graph, cả phòng chạy.

Dynamo Sandbox là bản chạy độc lập, không cần Revit. Dùng để học hình học và thử graph khi không có Revit trên máy. Nó không có các node Revit.

Dynamo trong phần mềm khác. Civil 3D có Dynamo từ phiên bản 2020, dùng cho tuyến, mặt cắt, hành lang. Robot Structural Analysis có tích hợp Dynamo và bộ node "Structural Analysis": dựng mô hình tính, gán tiết diện, gối, tải, rồi đọc kết quả về. Advance Steel và FormIt cũng có Dynamo. Trong Revit còn có Generative Design, chạy trên nền graph Dynamo để sinh và so sánh nhiều phương án bố trí.

Bên trong một graph có gì

Học Dynamo là học năm thứ. Bốn thứ đầu dễ. Thứ năm là chỗ mọi người vấp.

Node nằm trong thư viện bên trái, chia theo nhóm. Nhóm Revit có node chọn đối tượng, đọc và ghi tham số, tạo view, tạo sheet. Nhóm Geometry dựng điểm, đường, mặt, khối. Nhóm List xử lý danh sách. Nhóm Math và String làm số và chữ. Nhóm Import đọc Excel, CSV, ảnh.

Wire nối cổng ra của node này vào cổng vào của node kia. Cổng có kiểu dữ liệu. Nối sai kiểu, node báo vàng hoặc đỏ. Node Watch cho xem dữ liệu đang chảy ở bất kỳ đoạn dây nào.

Code Block là ô để gõ trực tiếp thay vì kéo node. Gõ một số, một chuỗi, một công thức, một dải số kiểu 0..10. Người quen dần sẽ dùng Code Block thay cho nhiều node lặt vặt, graph gọn đi thấy rõ.

Python Script là node cho phép viết Python bên trong Dynamo. Khi node có sẵn không làm được việc mình cần, bạn viết vài dòng Python gọi thẳng Revit API. Đây là cây cầu từ Dynamo sang lập trình thật.

Một cụm node dùng đi dùng lại có thể gói thành custom node: một node mới do bạn đặt tên, có cổng vào ra như node gốc. Graph gọn lại và đồng nghiệp dùng được mà không cần hiểu bên trong.

List là chỗ vấp. Revit có ba tầng, mỗi tầng hai mươi cột. Dynamo nhìn thấy nó là danh sách ba phần tử, mỗi phần tử là danh sách hai mươi phần tử. Muốn đặt tên cho từng cột, bạn phải nói cho node biết đang làm việc ở tầng danh sách nào. Dynamo gọi đó là levellacing. Hầu hết graph "chạy mà ra sai" là do chỗ này. Người học nên dành riêng vài buổi cho List, đừng lướt qua.

Package: thư viện node của cộng đồng

Node có sẵn trong Dynamo chỉ là phần lõi. Cộng đồng viết thêm hàng nghìn node, đóng gói thành package, và ai cũng cài miễn phí qua Package Manager ngay trong Dynamo.

Vài tên bạn sẽ gặp ngay tuần đầu:

  • Clockworkarchi-lab — hai bộ node đa dụng cho Revit, lấp hầu hết chỗ trống của node gốc.
  • Rhythm — node cho view, sheet, tag và nhiều việc hằng ngày.
  • Data-Shapes — tạo hộp thoại nhập liệu, để graph chạy trong Dynamo Player có giao diện tử tế.
  • Genius Loci — node hình học và cơ điện.
  • MEPover — cho kỹ sư cơ điện: ống, máng cáp, hệ thống.
  • BimorphNodes — kiểm tra va chạm ngay trong Revit.
  • Structural Analysis for Dynamo — của Autodesk, nối Dynamo với Robot Structural Analysis.

Package có mặt trái. Package viết cho một phiên bản Dynamo có thể không chạy trên phiên bản khác. Đổi Revit, graph có thể vỡ. Vì thế, hai thói quen tốt: ghi rõ trong graph mình dùng package nào, phiên bản nào; và ưu tiên node gốc khi node gốc làm được.

Sáu việc kỹ sư Việt Nam dùng Dynamo hằng ngày

Sáu việc kỹ sư dùng Dynamo: đánh số hàng loạt, Excel vào ra mô hình, đặt cấu kiện theo tọa độ, tạo view và sheet, kiểm tra mô hình, hình học phức tạp Ảnh: Hình vẽ của Viện Tin học Xây dựng

Từ những lớp Revit của Viện, đây là sáu việc học viên hỏi về Dynamo nhiều nhất. Mỗi việc đều có graph mẫu trên diễn đàn Dynamo, sửa vài node là dùng được.

  1. Đánh số và đặt tên hàng loạt. Phòng, cửa, cột, cọc, sheet theo quy tắc của công ty. Đổi quy tắc thì chạy lại.
  2. Đưa dữ liệu từ Excel vào mô hình, và ngược lại. Mã cấu kiện, cao độ, thông số thiết bị nằm trong bảng Excel của bộ phận khác. Dynamo đọc bảng, ghi vào tham số đúng đối tượng. Chiều ngược lại, Dynamo xuất khối lượng theo đúng mẫu bảng của công ty.
  3. Đặt cấu kiện theo tọa độ. Lưới cột, cọc, bu lông neo, thiết bị theo bảng tọa độ khảo sát. Vài trăm điểm, vài giây.
  4. Tạo view và sheet hàng loạt. Tám mươi bản vẽ chi tiết cột, mỗi tờ đúng khung tên, đúng tỷ lệ, đúng tên. Việc mất một ngày thành mười phút.
  5. Kiểm tra mô hình. Tìm đối tượng chưa gán tham số, phòng chưa đặt tên, cấu kiện đặt sai tầng, rồi tô màu để người dựng sửa. Đây là việc người quản lý BIM chạy trước mỗi lần phát hành hồ sơ.
  6. Hình học phức tạp. Mặt dựng cong, mái vỏ, lam chắn nắng xoay theo hướng nắng, lan can theo đường cong. Những thứ dựng tay gần như không làm nổi.

Kỹ sư kết cấu có thêm việc thứ bảy: đưa mô hình từ Revit sang Robot để tính, rồi đọc nội lực về, tất cả qua Dynamo. Khóa Robot Structural Analysis của Viện có giới thiệu quy trình này.

Ba lỗi người mới hay gặp

Phần lớn câu hỏi trên diễn đàn Dynamo quy về ba tình huống.

  • Graph chạy xong mà mô hình không đổi. Thường vì đang ở chế độ Manual mà chưa bấm Run, hoặc một node phía trước cho ra null nên node ghi không có gì để ghi. Cách dò: đặt node Watch sau từng node, đi ngược từ phải sang trái cho tới chỗ dữ liệu biến mất.
  • Node báo vàng hoặc hiện chữ Unresolved. Máy này thiếu package mà graph đang dùng, hoặc package không đúng phiên bản Dynamo. Cài lại đúng bản trong Package Manager. Đây là lý do nên ghi tên và phiên bản package ngay trong graph.
  • Chạy êm, kết quả sai. Gần như luôn là level hoặc lacing: đúng giá trị nhưng ghi nhầm vào tầng danh sách khác. Thử với ba bốn cấu kiện trước khi chạy cả mô hình.

Thêm một thói quen: graph lớn thì chuyển sang chế độ Manual. Ở chế độ Automatic, Dynamo chạy lại toàn bộ graph mỗi lần bạn chạm vào một node, mô hình nặng sẽ treo.

Dynamo, Revit API hay Grasshopper

Ba cái tên này hay bị đặt cạnh nhau. Chúng giải ba bài toán khác nhau.

DynamoRevit API (C#)Grasshopper
Là gìLập trình trực quan, đi kèm RevitViết mã C#, biên dịch thành add-in cài vào RevitLập trình trực quan của Rhino
Cần biết lập trình?Không, để bắt đầuCó, nền C# cơ bảnKhông, để bắt đầu
Đến kết quả đầu tiênVài giờVài tuầnVài giờ
Hợp với việc gìTự động hóa việc của mình, xử lý dữ liệu, hình học tham sốCông cụ dùng lặp lại cho cả công ty, chạy nhanh với mô hình lớnTìm hình khối ở giai đoạn ý tưởng, thiết kế tham số trong Rhino
Hạn chếChậm với mô hình lớn; graph phình to thì khó bảo trìTốn công học; phải biên dịch lại theo phiên bản RevitKhông sống trong Revit; chuyển sang Revit cần cầu nối như Rhino.Inside.Revit

Lời khuyên của Viện không đổi từ nhiều năm nay. Bắt đầu bằng Dynamo. Chuyển sang C# khi công cụ cần dùng nhiều lần hoặc cho nhiều người. Bài Revit API là gì? nói kỹ về con đường C# và mức lập trình cần biết. Còn Grasshopper là chuyện của kiến trúc sư làm hình khối trong Rhino; ai làm việc chính trong Revit thì chọn Dynamo.

Học Dynamo: có cần biết lập trình không, mất bao lâu

Không cần biết lập trình để bắt đầu. Cần hai thứ khác.

Thứ nhất, biết Revit khá. Dynamo chỉ điều khiển Revit. Bạn không biết Revit lưu tên phòng ở tham số nào thì không thể bảo Dynamo đổi tên phòng. Người học Dynamo hiệu quả là người đã dựng vài mô hình thật.

Thứ hai, chịu nghĩ theo kiểu danh sách. Không phải "cột này", mà "tất cả cột ở tầng ba có tiết diện 300×300". Tư duy đó mất vài tuần mới quen. Sau khi quen, phần còn lại của Dynamo học rất nhanh.

Lộ trình mà giảng viên của Viện thường gợi ý:

  • Hai tuần đầu: giao diện, node cơ bản, chạy graph mẫu bằng Dynamo Player, đọc Excel vào mô hình. Kết thúc bằng một graph tự viết cho một việc mình đang phải làm tay.
  • Một đến hai tháng tiếp: List, level, lacing; cài và dùng package; viết graph cho ba bốn việc lặp lại ở công ty. Đây là chặng quyết định. Qua được List là dùng Dynamo được.
  • Sau đó: node Python Script để làm việc node gốc không làm được. Khi graph bắt đầu dài quá một màn hình và cả phòng cùng chạy, đó là lúc cân nhắc chuyển sang C#.

Nguồn học miễn phí đủ tốt: Dynamo Primer của Autodesk đi từ đầu đến package, và diễn đàn Dynamo có lời giải cho gần như mọi lỗi bạn gặp. Cái thiếu khi tự học là người chỉ ra graph của mình sai ở chỗ nào, nhất là ở phần List.

Tại Viện Tin học Xây dựng, Dynamo được giới thiệu trong các khóa Revit theo bộ môn và trong khóa Robot Structural Analysis. Đó là phần nói về tự động hóa của mỗi khóa. Người muốn đi tiếp sang C# có khóa Lập trình Revit API. Doanh nghiệp cần lớp Dynamo riêng có thể đặt lớp tại công ty. Nội dung được soạn theo đúng những việc phòng kỹ thuật đang phải làm tay.

Câu hỏi thường gặp

Dynamo có miễn phí không?

Có. Dynamo đi kèm Revit, không tính phí thêm, và mã nguồn mở theo giấy phép Apache 2.0. Bản Dynamo Sandbox tải riêng cũng miễn phí.

Dynamo có cần biết lập trình không?

Không, để bắt đầu. Bạn kéo node và nối dây, không viết mã. Lập trình chỉ cần khi bạn muốn dùng node Python Script hoặc chuyển sang C#.

Dynamo và Revit API khác nhau thế nào?

Cả hai đều đi qua cùng một cửa: Revit API. Dynamo là cách đi bằng sơ đồ, nhanh có kết quả, hợp với việc của cá nhân. C# là cách đi bằng mã, tốn công hơn nhưng cho ra công cụ dùng lâu dài cho cả công ty. Bài Revit API là gì? có bảng so sánh chi tiết.

Dynamo Player là gì?

Là cửa sổ để chạy graph có sẵn mà không cần mở trình soạn Dynamo. Người dùng chọn graph, điền thông số, bấm chạy. Nhờ nó, một người viết graph và cả văn phòng dùng được.

Graph viết trên Revit này có chạy trên Revit khác không?

Graph dùng toàn node gốc thường chạy được. Graph dùng package thì phụ thuộc package đó có bản cho phiên bản Dynamo mới hay chưa. Đó là lý do nên ghi rõ package và phiên bản ngay trong graph.

Dynamo có dùng cho Civil 3D và Robot không?

Có. Civil 3D có Dynamo từ phiên bản 2020. Robot Structural Analysis tích hợp Dynamo với bộ node dựng mô hình tính, gán tải và đọc kết quả.

Bài viết liên quan

Về tác giả

PGS.TS. Trần Anh Bình — Viện trưởng Viện Tin học Xây dựng – Trường Đại học Xây dựng Hà Nội