Chào mừng các bác đã ghé thăm blog của mình.😄

Các tệp PCF thường được sử dụng trong ngành công nghiệp đường ống để tự động hóa một loạt quy trình, chẳng hạn như phân tích ứng suất, tạo ra các tài liệu (như isometrics) và thậm chí để tự động hóa thiết bị của cửa hàng.

Công cụ tạo PCF trong Revit giống như những gì đã được sử dụng trong Autodesk Fabrication CADmep và được một số người dùng sử dụng để tạo ra hình học. Miễn là các bác đang sử dụng các đường ống dựa trên Fabrication trong Revit, các bác có thể sử dụng macro tương đối đơn giản để xuất tệp PCF, bao gồm ống ác các kiểu, phụ kiện, van và ti treo.


Cách 1 : Sử dụng Dynamo Scripts

#Khai báo thư viện
import clr
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
clr.AddReference('RevitAPI')
import Autodesk
from Autodesk.Revit.DB import *
FU = Autodesk.Revit.DB.Fabrication.FabricationUtils
clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
clr.AddReference('RevitAPI')
from Autodesk.Revit.DB import *
clr.AddReference('RevitAPIUI')
import Autodesk
from Autodesk.Revit.UI import *
doc = DocumentManager.Instance.CurrentDBDocument
uidoc = DocumentManager.Instance.CurrentUIApplication.ActiveUIDocument
# Mã chính
path = IN[1]
def get_selected_elements():
ids = uidoc.Selection.GetElementIds()
if isinstance(ids, list) == True:
ids=[ids]
els = []
for id in ids:
el = doc.GetElement(id)
els.append(el.Id)
return els
# Khởi tạo một Transaction để can thiệp vào Revit
TransactionManager.Instance.EnsureInTransaction(doc)
els = get_selected_elements()
FU.ExportToPCF(doc,els,path)
TransactionManager.Instance.TransactionTaskDone()
OUT = "Done"
view raw ExportPCF.py hosted with ❤ by GitHub

Cuối cùng ta sẽ có một cái gì đó như này với Path đầu vào chính là đường dẫn các bác muốn xuất ra

Cách 2 : Sử dụng Revit API Viết mã với C#

[Transaction(TransactionMode.Manual)]
[Regeneration(RegenerationOption.Manual)]
public class ExportPCF : IExternalCommand
{
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
var uiapp = commandData.Application;
var uidoc = uiapp.ActiveUIDocument;
var app = uiapp.Application;
var doc = uidoc.Document
var dummyFileName = "IsoMetric.PCF";
var sf = new SaveFileDialog();
// Feed the dummy name to the save dialog
sf.FileName = dummyFileName;
sf.Filter = @"PCF file (*.PCF)|*.PCF";
try
{
if (sf.ShowDialog() == DialogResult.OK)
{
ICollection<ElementId> selection = uidoc.Selection.GetElementIds();
var savePath = sf.FileName;
FabricationUtils.ExportToPCF(doc, selection.ToList(), savePath);
}
MessageBox.Show("Successful", "Export PCF");
}
catch (Exception e)
{
//MessageBox.Show("Please Design to Fabrication", "Message");
//return Result.Cancelled;
throw new Exception(e.Message);
}
return Result.Succeeded;
}
}
view raw ExportPCF.cs hosted with ❤ by GitHub

Kết quả của cả hai cách trên

Mở rộng

Hiện đang có một dự án phát triển bời nhà phát triển shtirlitsDva, các bác có thể xem tại đây hoặc nếu cám thấy hứng thú với chủ đề này thì phụ bác ấy một tay nhé, mã nguồn mở mà 😍

Tổng kết

Vậy là mình đã kể cho các bác nghe xong hết câu chuyện nữa rồi đó, cứ thấy gì đó vui vui hay hay là mình lại viết lên cho a e tham khảo và góp ý, nếu có ý tưởng gì giúp cải thiện nhanh hơn thì các bác bình luận bên dưới nhé, mình sẽ bổ sung để bài viết được hoàn thiện hơn.Cám ơn các bác đã ghé thăm blog của mình !

Tham khảo :

Autodesk Blog