Mở đầu

Xin chào các bạn đã quay lại, hôm nay mình có chuyện mới để nói đây.Chẳng là được chuyển qua phòng kiến trúc ngồi gần một cô kiến trúc đang vướng vụ chuyển đổi lưới trục của Levels và Grids từ 3D sang 2D.Nguyên nhân ở đây chính là việc dim và di chuyển ảnh hưởng ở các view khác.Khi đó thì phải đổi hàng loạt 3D sang 2D thì mới có thể điều chỉnh được độc lập.Ok, vậy là có cái để làm rồi, bài này mình sẽ hướng dẫn làm với dynamo hàng loạt nhé.

Cách xử Lý

Thử lấy về view hiện hành

#Copyright(c) 2016, Dimitar Venkov
# @5devene, dimitar.ven@gmail.com
import clr
clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager
doc = DocumentManager.Instance.CurrentDBDocument
clr.AddReference("RevitNodes")
import Revit
clr.ImportExtensions(Revit.Elements)
OUT = doc.ActiveView.ToDSType(True)

Chuyển đổi 3D sang 2D

  1. Csharp

public static string Convert3DTo2D(Revit.Elements.Views.View view, List<Element> GridorLevel)
{
Document doc = DocumentManager.Instance.CurrentDBDocument;
View v = view.InternalElement as View;
TransactionManager.Instance.EnsureInTransaction(doc);
List<DatumPlane> planes = GridorLevel.Select(x => x.InternalElement).Cast<DatumPlane>().ToList();
foreach (DatumPlane datumPlane in planes)
{
datumPlane.SetDatumExtentType(DatumEnds.End0, v, DatumExtentType.ViewSpecific);
datumPlane.SetDatumExtentType(DatumEnds.End1, v, DatumExtentType.ViewSpecific);
}
TransactionManager.Instance.TransactionTaskDone();
TransactionManager.Instance.ForceCloseTransaction();
return "Execute";
}

  1. Python

import clr
clr.AddReference('RevitAPI')
from Autodesk.Revit.DB import *
import Autodesk
clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument
uiapp = DocumentManager.Instance.CurrentUIApplication
app = uiapp.Application
a = UnwrapElement(IN[0])
v = UnwrapElement(IN[1])
TransactionManager.Instance.EnsureInTransaction(doc)
for i in a:
i.SetDatumExtentType(DatumEnds.End0,v, DatumExtentType.ViewSpecific)
i.SetDatumExtentType(DatumEnds.End1,v, DatumExtentType.ViewSpecific)
TransactionManager.Instance.TransactionTaskDone()
OUT = v

Kết quả

Grids2DTo3D

Video hướng dẫn chi tiết :


Mở rộng

Vấn đề đã được xử lý nhanh chóng phải không nào, ngoài ra mình cũng có thể dùng ý tưởng này làm công cụ chuyên dụng chẳng hạn.Chúc các bạn thành công.

Tham khảo

Dynamo Forum