Mở đầu
Chắc hẳn bài này sẽ rất nhiều bác cần lắm đây, quả là dạo này gần đây rất nhiều anh em hỏi về vụ family share và tự động gán parameter hàng loạt vào family thật không nhanh tí nào.Họ phải mờ từng family rồi chọn share parameter từ file share sau đó nhét vào family rồi tải vào dự án.Hôm nay thấy thêm đồng nghiệp của mình lại đi làm cái công việc nhàm chán này.Và điều đó đã dẫn đến mình cần viết bài này.
Sau bài viết này có cả ngàn family cần gán vào bạn cũng không ngán.
Tổng quan
Ta khởi đầu với một số thư viện
#Copyright(c)2020,chuongho | |
#@chuongmep,https://chuongmep.com/ | |
import clr | |
clr.AddReference('ProtoGeometry') | |
clr.AddReference('RevitAPI') | |
clr.AddReference("RevitServices") | |
from Autodesk.DesignScript.Geometry import * | |
from Autodesk.Revit.DB import * | |
from RevitServices.Persistence import DocumentManager | |
from RevitServices.Transactions import TransactionManager | |
# Document | |
doc = DocumentManager.Instance.CurrentDBDocument | |
uiapp = DocumentManager.Instance.CurrentUIApplication | |
app = uiapp.Application |
Giờ ta sẽ mở cái share prarameter lên và đọc thông tin defGroup của chúng.
spfile = app.OpenSharedParameterFile() | |
def defFile(spfile, group, param): | |
defGroup = spfile.Groups.get_Item(group) | |
return defGroup.Definitions.get_Item(param) |
Một số tham biến truyền vào sẽ như sau bao gồm : Đối tượng family, Parameter Name, Parameter Group, instance đại diện cho parameter instance hoặc parameter type
Được rồi, bây giờ mình sẽ làm việc với một số family truyền vào để xử lý nhé, thông thường để giải quyết cho một family , ta phải chuyển đổi sang một document mới nên việc chuyển đổi này cần trải qua một bước gọi là đóng document cũ sau đó mới sử dụng được document mới trong family thực tại đang làm việc.Kết quả sẽ trả về lỗi thông báo cho người dùng biết là đã thành công hay chưa.
Cuối cùng ta ghép nối lại với một cú đúp như sau :
Giành cho người dùng không chuyên
Ta cần chuẩn bị một file share parameter cụ thể ăn sẵn như thế này trước.
Tải về gói DynaMEP bản mới nhất mình đã giới thiệu tại các bài trước.
Kiểm tra tệp shareparameter.txt dã được gán vào dự án chưa
Thử gán một tham số parameter có trong file share với một cái đèn và bao gồm các node như sau.Lưu ý là các node mình viết trong DynaMEP nhé.Nếu không tải về thì tìm sẽ không có
Kết quả như trên thành công với 1 parameter và 1 đối tượng phải không, vậy thì với một đống parameter và một đống family thì làm sao.Tất nhiên ta chỉ cần sửa đổi thêm một chút trong node của mình.Một ví dụ trong dự án thật mình đang làm cho các bạn dễ hình dung.Biến bool chính là bạn muốn tạo parameter instance hay không, nếu muốn instane thì để true.Bên dưới là mình tạo hai biến cho cả Instance và cả Type.
Kết quả
Download : Here
Mở rộng
với bài viết này, Hy vọng sẽ giúp phần nào những bạn đang rơi vào tình trạng tiến thoái lưỡng nam này , có thể bây giờ bạn đang không dùng nhưng biết đâu một ngày đẹp trời bạn nhận dự án lớn và khách hàng yêu cầu bạn phải làm hàng loạt như vậy để kịp tiến độ thì sao.Cám ơn các bạn đã ghé thăm và đọc bài viết trên blog.Nếu có thắc mắc hãy để lại bình luận bên dưới bài viết nhé.
Thêm một trường hợp mở rộng mà mình phải xem xét đến thời điểm này có người hỏi mình đó là chỉ những family được đặt mới chọn được, vậy những family có trong dự án chưa được đặt thì làm thế nào.Rất đơn giản hãy đổi node Select Model element sang node GetSelection trong gói DynaMEP nhé.Chọn cái gì làm cái đó :D
Hiện tại công cụ này đã được phát triển mở rộng hơn , nếu bạn nào cần có thể liên hệ riêng với mình.Tất nhiên hàng nào của đó phải không, dùng được cho tất cả các trường hợp trên trời dưới đất :D
Cập nhật
Kể từ phiên bản cập nhật DynaMEP 1.2.2 trở đi, mình sẽ sử dụng mở rộng này cho các đối tượng với doc có thể là dự án hiện tại đang mở hoặc từ dự án đã được linked