Professional Documents
Culture Documents
Keldar67@gmail.com
Machine Translated by Google
Mục lục
• Giới thiệu
Bạn có thể làm gì với API nền tảng Revit Yêu cầu
Cài đặt
o Bắt đầu
xuất các phần tử đã chọn Hướng dẫn: Truy xuất các phần
tử đã lọc
Tổng quan
Thuộc tính
Revit Exceptions
Đơn vị
o Lọc
o Lựa chọn
o Các thông số
o Bộ sưu tập
Giao diện
Phần tử di chuyển
o Lượt xem
Về lượt xem
• Tổng quan
• View3D
• ViewPlan
• ViewDrafting
• ViewSelection
• ViewSheet
• ViewSchedule
TableData
Xem bộ lọc
UIView
Tường
Rèm cửa
Biểu mẫu
Các cấp độ
Lưới
Giai đoạn
Thẻ
Văn bản
Hình học
hình học
• Đường cong
cong o Các biểu diễn toán học của các loại đường cong
• GeometryInstances • Meshes
• Điểm
• PolyLines •
o Khuôn mặt
dạng khuôn mặt o Biểu diễn toán học của các dạng khuôn
Ví dụ: Lấy dữ liệu hình học từ chùm tia Phân tích đùn
vật rắn Tìm hình học bằng phép chiếu tia Các lớp tiện
o Phác thảo
o Chất liệu
Phòng
Tải trọng
o Revit MEP
• Hệ thống
Đầu nối
Ràng buộc
o Giao dịch
o Sự kiện
Sự kiện cơ sở dữ liệu
• Sự kiện DocumentChanged
sự kiện
thức Execute
o Lệnh
hiệu suất
o Mây điểm
Địa điểm
Thành
phố Vị trí dự án
Vị trí dự án o Chia sẻ
hợp
Trang tính
Các bộ phận
tùy chỉnh
thuật ngữ
Mảng
BIM
Lớp
Sự kiện
Phương pháp
Nạp chồng
Thuộc tính
Tham số Revit
Bộ
Yếu tố ED
UID phần tử
Giới thiệu
Lưu ý: Nội dung của tài liệu này được sao chép từ http://wikihelp.autodesk.com/Revit/enu/2014/Help/3665-Developers trang web vào ngày 16 & 17/11/2013 và được cập nhật cho đến thời điểm đó. Bản
quyền và quyền sở hữu của thông tin chứa bên trong vẫn theo các thông báo bản quyền ban đầu trên trang web. Tài liệu này đã được tập hợp lại cho mục đích đọc ngoại tuyến và mục đích giáo dục
và chỉ nên được sử dụng cho mục đích này. Bằng cách đọc thêm, bạn đồng ý tôn trọng tất cả luật bản quyền và quyền sở hữu. Cảm ơn bạn
Hầu hết các liên kết được sao chép sẽ trực tiếp quay trở lại vị trí nguồn ban đầu trên internet thay vì nội bộ trong tài liệu, do đó, sự khác biệt có thể xảy ra tùy thuộc vào cập nhật thông tin
Machine Translated by Google
Hướng dẫn dành cho nhà phát triển API này mô tả cách sử dụng giao diện lập trình ứng dụng (API) cho Autodesk Revit 2014.
• Giới thiệu
Giới thiệu
Tất cả các sản phẩm dựa trên Revit đều là các công cụ Mô hình Thông tin Xây dựng Tham số (BIM). Các công cụ này tương tự như các chương trình Thiết kế có sự hỗ trợ
của Máy tính (CAD) nhưng được sử dụng để xây dựng các mô hình 3D cũng như các bản vẽ 2D. Trong Revit, bạn đặt các yếu tố trong thế giới thực như cột và tường vào
mô hình. Sau khi xây dựng mô hình, bạn có thể tạo các dạng xem mô hình chẳng hạn như các phần và chú thích. Chế độ xem được tạo ra từ mô hình vật lý 3D; do đó, các
thay đổi được thực hiện trong một chế độ xem sẽ tự động lan truyền qua tất cả các chế độ xem. Điều này hầu như loại bỏ nhu cầu cập nhật nhiều bản vẽ và chi tiết khi
bạn thực hiện các thay đổi đối với mô hình.
Revit .NET API cho phép bạn lập trình với bất kỳ ngôn ngữ tuân thủ .NET nào bao gồm Visual Basic.NET, C # và C ++ / CLI.
Revit Architecture 2013, Revit Structure 2013 và Revit MEP 2013 đều chứa API Nền tảng Revit để bạn có thể tích hợp các ứng dụng của mình vào Revit. Ba API
rất giống nhau và được gọi chung là API Nền tảng Revit. Trước khi sử dụng API, hãy tìm hiểu cách sử dụng Revit và các tính năng của nó để bạn có thể hiểu rõ hơn
về các lĩnh vực liên quan liên quan đến lập trình của bạn. Học Revit có thể giúp bạn:
• Duy trì tính nhất quán với giao diện người dùng Revit và các lệnh.
• Thiết kế ứng dụng bổ trợ của bạn một cách liền mạch.
• Làm chủ các lớp API và các thành viên trong lớp một cách hiệu quả và hiệu quả.
Nếu bạn chưa quen với Revit hoặc BIM, hãy tìm hiểu thêm trong trung tâm sản phẩm Revit tại www.autodesk.com/revit.
• Tạo, chỉnh sửa và xóa các phần tử mô hình như sàn, tường, cột, v.v.
• Tạo phần bổ trợ để tự động hóa các tác vụ lặp đi lặp lại.
• Tích hợp các ứng dụng vào các sản phẩm dọc dựa trên Revit. Các ví dụ bao gồm liên kết cơ sở dữ liệu quan hệ bên ngoài với Revit hoặc gửi
dữ liệu mô hình cho một ứng dụng phân tích.
Yêu cầu
1. Hiểu biết về Revit Architecture 2013, Revit Structure 2013 hoặc Revit MEP 2013.
2. Quen thuộc với ngôn ngữ tuân thủ Thông số ngôn ngữ chung như C # hoặc VB.NET.
3. Microsoft Visual Studio 2010 hoặc Microsoft Visual Studio 2010 Express Edition. Ngoài ra, bạn có thể sử dụng SharpDevelop cài sẵn
môi trường phát triển trong Revit.
5. Bộ công cụ dành cho nhà phát triển phần mềm Revit (SDK) mà bạn có thể tải xuống từ Mạng nhà phát triển Autodesk (ADN) hoặc Revit
CD / DVD cài đặt (<DVD_Drive>: \ Utilities \ Common \ Software Development Kit).
Cài đặt
API Nền tảng Revit được cài đặt với Kiến trúc Revit, Cấu trúc Revit và Revit MEP. Mọi ứng dụng dựa trên .NET sẽ tham chiếu đến RevitAPI.dll và RevitAPIUI.dll nằm
trong thư mục Chương trình Revit. RevitAPI.dll chứa các phương thức được sử dụng để truy cập ứng dụng, tài liệu, phần tử và tham số của Revit ở cấp cơ sở dữ
liệu. RevitAPIUI.dll chứa các giao diện liên quan đến thao tác và tùy chỉnh giao diện người dùng Revit.
Machine Translated by Google
API nền tảng Revit hoàn toàn có thể truy cập được bằng bất kỳ ngôn ngữ nào tương thích với Microsoft .NET Framework 4.0, chẳng hạn như Visual Basic .NET hoặc Visual C #.
Tài liệu này là một phần của Revit SDK. Nó cung cấp giới thiệu về việc triển khai các ứng dụng bổ trợ Revit bằng cách sử dụng API Nền tảng Revit.
Trước khi tạo ứng dụng bổ trợ Revit Platform API, hãy đọc kỹ hướng dẫn sử dụng và thử mã mẫu. Nếu bạn đã có một số kinh nghiệm với API Nền tảng Revit, bạn có thể chỉ muốn xem
lại phần Ghi chú và Khắc phục sự cố.
Hai chương đầu tiên giới thiệu về API Nền tảng Revit và cung cấp tổng quan về Hướng dẫn sử dụng.
Chào mừng bạn đến với API nền tảng Revit - Trình bày phần giới thiệu về API Nền tảng Revit và kiến thức tiên quyết cần thiết trước khi bạn tạo phần bổ
trợ đầu tiên của mình.
Bắt đầu - Hướng dẫn từng bước để tạo ứng dụng bổ trợ Hello World đầu tiên của bạn bằng Visual Studio 2010 và bốn hướng dẫn khác bao gồm các chức năng bổ trợ chính.
Chủ đề cơ bản
Các chương này bao gồm các cơ chế và chức năng cơ bản của API Nền tảng Revit.
Tích hợp bổ trợ - Thảo luận về cách một phần bổ trợ được tích hợp vào Revit UI và được gọi bằng lệnh của người dùng hoặc các sự kiện Revit cụ thể như khởi
động chương trình.
Ứng dụng và Tài liệu - Các lớp Ứng dụng và Tài liệu tương ứng đại diện cho ứng dụng Revit và tệp dự án trong API Nền tảng Revit. Chương này giải thích các khái niệm cơ bản và các
liên kết đến các chương và phần thích hợp.
Yếu tố cơ bản - Phần lớn dữ liệu trong một dự án Revit nằm trong tập hợp các Phần tử. Chương này thảo luận về cơ chế, phân loại và các tính năng thiết yếu của Phần tử.
Lọc - Lọc được sử dụng để lấy một tập hợp các phần tử từ tài liệu.
Lựa chọn - Làm việc với tập hợp các phần tử đã chọn trong một tài liệu
Thông số - Hầu hết thông tin Phần tử được lưu trữ dưới dạng Tham số. Chương này thảo luận về chức năng của Tham số.
Bộ sưu tập - Các loại bộ sưu tập tiện ích như Mảng, Bản đồ, Bộ sưu tập và các Bộ lặp có liên quan.
Chủ đề yếu tố
Các phần tử được giới thiệu dựa trên phân loại phần tử. Đảm bảo rằng bạn đã đọc các chương Yếu tố cần thiết và Thông số trước khi đọc về các yếu tố riêng lẻ.
Phần tử chỉnh sửa - Học cách di chuyển, xoay, xóa, nhân bản, nhóm và các phần tử mảng.
Tường, Sàn, Mái và Khe hở - Thảo luận về các Phần tử, các Loại phần tử tương ứng của chúng đại diện cho cấu trúc địa điểm được tích hợp sẵn và các loại Mở khác nhau trong API.
Phiên bản gia đình - Tìm hiểu về mối quan hệ giữa gia đình và bản sao gia đình, các tính năng của bản sao gia đình và gia đình cũng như cách tải hoặc tạo chúng.
Tạo gia đình - Tìm hiểu về việc tạo và sửa đổi các tài liệu Revit Family.
Thiết kế mẫu - Thảo luận về cách tạo các dạng và hình học phức tạp trong tài liệu Revit Conceptual Mass.
Datum và phần tử thông tin - Tìm hiểu cách thiết lập lưới, thêm cấp độ, sử dụng các tùy chọn thiết kế, v.v.
Phần tử chú thích - Thảo luận về chú thích tài liệu bao gồm thêm kích thước, đường cong chi tiết, thẻ và ký hiệu chú thích.
Phác thảo - Các chức năng phác thảo bao gồm các lớp phác thảo 2D và 3D như SketchPlane, ModelCurve, GenericForm, v.v.
Lượt xem - Tìm hiểu về các cách khác nhau để xem các mô hình và thành phần cũng như cách thao tác với chế độ xem trong API.
Vật chất - Dữ liệu vật liệu là một Yếu tố xác định các vật liệu vật lý được sử dụng trong dự án cũng như kết cấu, màu sắc và hơn thế nữa.
Machine Translated by Google
Hình học - Thảo luận về các loại liên quan đến đồ họa trong API được sử dụng để mô tả biểu diễn đồ họa của mô hình bao gồm ba lớp mô tả và lưu trữ
thông tin hình học.
Địa điểm và Vị trí - Xác định vị trí dự án bao gồm thành phố, quốc gia, vĩ độ và kinh độ.
Các thông số được chia sẻ - Tham số dùng chung là các tệp văn bản bên ngoài chứa các đặc tả tham số. Chương này giới thiệu cách truy cập vào các tham số được
chia sẻ thông qua API Nền tảng Revit.
Giao dịch - Giới thiệu hai cách sử dụng cho Giao dịch và các giới hạn mà bạn phải xem xét khi sử dụng Giao dịch.
Cập nhật mô hình động - Học cách sử dụng các trình cập nhật để sửa đổi mô hình theo những thay đổi trong tài liệu.
Đăng và xử lý lỗi - Học cách đăng lỗi và tương tác với cơ chế xử lý lỗi của Revit.
Hình ảnh phân tích - Cách hiển thị kết quả phân tích trong một dự án Revit.
Các sản phẩm Revit bao gồm Revit Architecture, Revit Structure và Revit MEP. Một số API chỉ hoạt động trong các sản phẩm cụ thể.
Kiến trúc Revit - Thảo luận về các API cụ thể cho Revit Architecture.
Cấu trúc Revit - Thảo luận về các API cụ thể cho Revit Structure.
Revit MEP - Thảo luận về các API cụ thể cho Revit MEP.
Khác
ruột thừa - Thông tin bổ sung như Câu hỏi thường gặp, Sử dụng Visual Basic.Net để lập trình, v.v.
Tài liệu này chứa các tên lớp ở định dạng không gian tên, chẳng hạn như Autodesk.Revit.DB.Element. Trong C ++ / CLI Autodesk.Revit.Element là Autodesk ::
Revit :: DB :: Element. Vì chỉ C # được sử dụng cho mã mẫu trong sách hướng dẫn này, nên không gian tên mặc định là Autodesk.Revit.DB. Nếu bạn muốn xem mã
trong Visual Basic, bạn sẽ tìm thấy một số ứng dụng VB.NET trong thư mục Mẫu SDK.
Một số thuộc tính lớp API nền tảng Revit được "lập chỉ mục" hoặc được mô tả là quá tải trong tệp trợ giúp API (RevitAPI.chm). Ví dụ, thuộc tính
Element.Geometry. Trong văn bản của tài liệu này, chúng được gọi là thuộc tính, mặc dù bạn truy cập chúng như thể chúng là các phương thức trong mã C #
bằng cách chờ trước tên thuộc tính bằng "get_" hoặc "set_". Ví dụ, để sử dụng thuộc tính Element.Geometry (Options), bạn sử dụng Element.get_Geometry (Options).
Vui lòng xem phần "Có gì mới" trong Revit 2012 API.chm để biết thông tin về các thay đổi và tính năng mới.
Machine Translated by Google
Bắt đầu
API nền tảng Revit hoàn toàn có thể truy cập được bằng bất kỳ ngôn ngữ nào tương thích với Microsoft .NET Framework 4.0, chẳng hạn như Visual C # hoặc Visual
Basic .NET (VB.NET). Cả Visual C # và VB.NET đều thường được sử dụng để phát triển các ứng dụng Revit Platform API. Tuy nhiên, trọng tâm của sách hướng dẫn này là
phát triển các ứng dụng bằng Visual C #.
Hướng dẫn
Nếu bạn chưa quen với API Nền tảng Revit, các chủ đề sau là điểm khởi đầu tốt để giúp bạn hiểu sản phẩm. Hướng dẫn cung cấp hướng dẫn từng bước cho các tình
huống phổ biến, giúp bạn tìm hiểu về sản phẩm hoặc một tính năng cụ thể. Các hướng dẫn sau đây sẽ giúp bạn bắt đầu sử dụng API nền tảng Revit:
Hướng dẫn: Hello World - Minh họa cách tạo bổ trợ bằng API Nền tảng Revit.
Hướng dẫn: Thêm Bảng điều khiển ruy-băng Hello World - Minh họa cách thêm bảng điều khiển ruy-băng tùy chỉnh.
Hướng dẫn: Truy xuất các phần tử đã chọn - Minh họa cách lấy các phần tử đã chọn.
Hướng dẫn: Truy xuất các phần tử đã lọc - Minh họa cách lấy các phần tử dựa trên các tiêu chí của bộ lọc.
Machine Translated by Google
Sử dụng API nền tảng Revit và C # để tạo chương trình Hello World theo hướng dẫn được cung cấp. Để biết thông tin về cách tạo ứng dụng bổ trợ bằng
VB.NET, hãy tham khảo Hello World dành cho VB.NET.
• Viết mã
• Gỡ lỗi bổ trợ.
Tất cả các hoạt động và mã trong phần này được tạo bằng Visual Studio 2010.
Bước đầu tiên khi viết một chương trình C # với Visual Studio là chọn một loại dự án và tạo một Thư viện Lớp mới.
3. Trong khung bên phải, nhấp vào Thư viện Lớp (xem Hình 1: Thêm dự án mới bên dưới). Hướng dẫn này giả định rằng dự án
vị trí là: D: \ Mẫu.
5. Bấm OK.
o Từ menu View, chọn Solution Explorer nếu cửa sổ Solution Explorer không mở.
o Trong Trình khám phá Giải pháp, bấm chuột phải vào Tham chiếu để hiển thị menu ngữ cảnh.
o Từ menu ngữ cảnh, nhấp vào Thêm tài liệu tham khảo. Hộp thoại Thêm tham chiếu xuất hiện.
o Trong hộp thoại Thêm Tham chiếu, nhấp vào tab Duyệt qua. Định vị thư mục nơi Revit được cài đặt và nhấp vào RevitAPI.dll. Ví dụ, vị trí thư mục
được cài đặt thường là C: \ Program Files \ Autodesk \ Revit Architecture 2012 \ Program \ RevitAPI.dll.
o Bấm OK để chọn .dll và đóng hộp thoại. RevitAPI xuất hiện trong cây tham chiếu Solution Explorer.
o Lưu ý: Bạn nên luôn đặt thuộc tính Copy Local của RevitAPI.dll thành false cho các dự án mới. Điều này giúp tiết kiệm dung lượng ổ đĩa và
ngăn trình gỡ lỗi Visual Studio nhầm lẫn về việc sử dụng bản sao DLL nào. Bấm chuột phải vào RevitAPI.dll, chọn Thuộc tính và thay đổi cài đặt
Sao chép cục bộ từ true (mặc định) thành false.
Thêm mã
sử dụng Hệ thống;
sử dụng Autodesk.Revit.UI;
sử dụng Autodesk.Revit.DB;
không gian tên HelloWorld
[Autodesk.Revit.Attributes.Transaction (Autodesk.Revit.Attributes.TransactionMode.Automatic)]
lớp công khai Class1: IExternalCommand
{
{
public Autodesk.Revit.UI.Result Execute (ExternalCommandData revit,
thông báo chuỗi tham chiếu, các phần tử ElementSet)
{
TaskDialog.Show ("Revit", "Hello World");
trả về Autodesk.Revit.UI.Result.Succeeded;
}
}
}
Mẹo: Tính năng Visual Studio Intellisense có thể tạo ra một giao diện triển khai khung cho bạn, thêm phần sơ khai cho tất cả các phương thức được yêu cầu.
Sau khi bạn thêm ": IExternaCommand" sau Class1 trong ví dụ trên, bạn có thể chọn "Triển khai IExternalCommand" từ menu Intellisense để lấy mã:
Mọi ứng dụng bổ trợ Revit phải có một lớp điểm đầu vào triển khai giao diện IExternalCommand và bạn phải triển khai phương thức Execute (). Phương thức
Execute () là điểm vào của ứng dụng bổ trợ tương tự như phương thức Main () trong các chương trình khác.
Định nghĩa lớp điểm nhập bổ trợ được chứa trong một hợp ngữ. Để biết thêm chi tiết, hãy tham khảo Tích hợp bổ trợ.
Sau khi hoàn thành mã, bạn phải xây dựng tệp. Từ menu Xây dựng, nhấp vào Giải pháp Xây dựng. Đầu ra từ bản dựng xuất hiện trong cửa sổ Đầu ra cho biết rằng dự
án được biên dịch không có lỗi.
Tệp HelloWorld.dll xuất hiện trong thư mục đầu ra của dự án. Nếu bạn muốn gọi ứng dụng trong Revit, hãy tạo tệp kê khai để đăng ký ứng dụng đó vào Revit.
1. Để tạo tệp kê khai, hãy tạo tệp văn bản mới trong Notepad.
Machine Translated by Google
Vùng mã 2-2: Tạo tệp kê khai .addin cho lệnh bên ngoài
<? xml version = "1.0" encoding = "utf-8" standalone = "no"?>
<RevitAddIns>
</RevitAddIns>
o Đối với Windows XP - C: \ Documents and Settings \ All Users \ Application Data \ Autodesk \ Revit \ Addins \ 2012 \
o Nếu dll lắp ráp ứng dụng của bạn nằm trên một mạng chia sẻ thay vì ổ cứng cục bộ của bạn, bạn phải sửa đổi Revit.exe.config để cho phép các
cụm .NET bên ngoài máy cục bộ của bạn được tải. Trong nút "thời gian chạy" trong Revit.exe.config, thêm phần tử <loadFromRemoteSources
enable = "true" /> "như được hiển thị bên dưới. O <runtime>
Tham khảo Tích hợp bổ trợ để biết thêm chi tiết bằng cách sử dụng tệp kê khai.
Gỡ lỗi bổ trợ
Chạy chương trình ở chế độ Gỡ lỗi sử dụng các điểm ngắt để tạm dừng chương trình để bạn có thể kiểm tra trạng thái của các biến và đối tượng. Nếu có lỗi,
bạn có thể kiểm tra các biến khi chương trình chạy để suy ra lý do tại sao giá trị không như bạn mong đợi.
1. Trong cửa sổ Solution Explorer, nhấp chuột phải vào dự án HelloWorld để hiển thị menu ngữ cảnh.
2. Từ menu ngữ cảnh, nhấp vào Thuộc tính. Cửa sổ Thuộc tính xuất hiện.
4. Trong phần Bắt đầu Hành động, bấm Khởi động chương trình bên ngoài và duyệt đến tệp Revit.exe. Theo mặc định, tệp nằm ở đường dẫn sau, C: \ Program
Files \ Autodesk \ Revit Structure 2012 \ Program \ Revit.exe.
Machine Translated by Google
5. Từ menu Gỡ lỗi, chọn Toggle Breakpoint (hoặc nhấn F9) để đặt điểm ngắt trên dòng sau.
• Trên tab Phần bổ trợ, HelloWorld xuất hiện trong nút menu Công cụ Bên ngoài.
• Nhấp vào HelloWorld để thực thi chương trình, kích hoạt điểm ngắt.
• Nhấn F5 để tiếp tục thực hiện chương trình. Thông báo hệ thống sau sẽ xuất hiện.
Xử lý sự cố
Đáp: Nếu lỗi xuất hiện khi bạn biên dịch mã mẫu, thì vấn đề có thể là với phiên bản RevitAPI được sử dụng để biên dịch phần bổ trợ.
Xóa tham chiếu RevitAPI cũ và tải tham chiếu mới. Để biết thêm chi tiết, hãy tham khảo Thêm tài liệu tham khảo.
H: Tại sao không có tab Bổ trợ hoặc tại sao ứng dụng bổ trợ của tôi không được hiển thị trong Công cụ bên ngoài?
Đ: Trong nhiều trường hợp, nếu một ứng dụng bổ trợ không tải được, Revit sẽ hiển thị hộp thoại lỗi khi khởi động với thông tin về lỗi đó. Ví dụ: nếu không
tìm thấy DLL bổ trợ ở vị trí được chỉ định trong tệp kê khai, một thông báo tương tự như sau sẽ xuất hiện.
Thông báo lỗi cũng sẽ được hiển thị nếu không tìm thấy tên lớp được chỉ định trong ECClassName hoặc không kế thừa từ IExternalCommand.
Machine Translated by Google
Tuy nhiên, trong một số trường hợp, một ứng dụng bổ trợ có thể không tải mà không có bất kỳ thông báo nào. Các nguyên nhân có thể bao gồm:
• Ứng dụng bổ trợ được biên dịch với một phiên bản RevitAPI khác
H: Tại sao ứng dụng bổ trợ của tôi không hoạt động?
Đ: Mặc dù ứng dụng bổ trợ của bạn có sẵn trong Công cụ bên ngoài, nó có thể không hoạt động. Điều này thường được gây ra bởi một ngoại lệ trong mã.
Ví dụ:
Lệnh: IExternalCommand
{
A a = new A (); // dòng x
public IExternalCommand.Result Execute () {
//…
}
}
Hạng A
{
//…
• Lỗi ở dòng x
Revit sẽ hiển thị hộp thoại báo lỗi với thông tin về ngoại lệ chưa được thực hiện khi lệnh không thành công.
Điều này nhằm mục đích hỗ trợ gỡ lỗi lệnh của bạn; các lệnh được triển khai cho người dùng nên sử dụng try..catch..finally trong phương thức nhập ví dụ để
ngăn ngoại lệ bị Revit bắt. Đây là một ví dụ:
Machine Translated by Google
public IExternalCommand.Result Execute (ExternalCommandData commandData, thông báo chuỗi ref, các phần tử ElementSet) {
Autodesk.Revit.ApplicationServices.Application = cdata.Application;
thử
{
// Làm một số thứ
}
trả về Autodesk.Revit.UI.Result.Succeeded;
}
Machine Translated by Google
Trong phần Walkthrough: Hello World, bạn học cách tạo một ứng dụng bổ trợ và gọi nó trong Revit. Bạn cũng học cách tạo tệp kê khai .addin để đăng ký ứng
dụng bổ trợ làm công cụ bên ngoài. Một cách khác để gọi ứng dụng bổ trợ trong Revit là thông qua bảng điều khiển ruy-băng tùy chỉnh.
1. Tạo một dự án C # trong Visual Studio bằng cách sử dụng mẫu Thư viện Lớp.
3. Thêm các tham chiếu đến RevitAPI.dll và RevitAPIUI.dll bằng cách sử dụng các hướng dẫn trong hướng dẫn trước, Walkthrough: Hello World.
o Trong Trình khám phá Giải pháp, bấm chuột phải vào Tham chiếu để hiển thị menu ngữ cảnh.
o Từ menu ngữ cảnh, nhấp vào Thêm tài liệu tham khảo. Hộp thoại Thêm tham chiếu xuất hiện.
o Trong hộp thoại Thêm Tham chiếu, nhấp vào Tab .NET.
o Bấm OK để đóng hộp thoại. PresentationCore xuất hiện trong cây tham chiếu Solution Explorer.
5. Thêm tham chiếu WindowsBase cũng như System.Xaml theo các bước tương tự như trên.
Để thay đổi tên lớp, hãy hoàn thành các bước sau:
1. Trong cửa sổ xem lớp, nhấp chuột phải vào Class1 để hiển thị menu ngữ cảnh.
2. Từ menu ngữ cảnh, chọn Đổi tên và đổi tên lớp thành CsAddPanel.
3. Trong Trình khám phá Giải pháp, bấm chuột phải vào tệp Class1.cs để hiển thị ngữ cảnh.
4. Từ menu ngữ cảnh, chọn Đổi tên và đổi tên tệp thành CsAddPanel.cs.
Thêm mã
Machine Translated by Google
Dự án Add Panel khác với Hello World vì nó tự động được gọi khi Revit chạy. Sử dụng giao diện IExternalApplication cho dự án này. Giao diện IExternalApplication
chứa hai phương thức trừu tượng, OnStartup () và OnShutdown (). Để biết thêm thông tin về IExternalApplication, hãy tham khảo Tích hợp bổ trợ.
sử dụng Autodesk.Revit.UI; sử
dụng Autodesk.Revit.DB; sử dụng
System.Windows.Media.Imaging; lớp CsAddpanel:
Autodesk.Revit.UI.IExternalApplication {
// Tạo nút nhấn trong bảng điều khiển ruy-băng "NewRibbonPanel" // ứng dụng bổ
trợ "HelloWorld" sẽ được kích hoạt khi nhấn nút
// Đặt hình ảnh lớn hiển thị trên nút Uri uriImage
= new Uri (@ "D: \ Sample \ HelloWorld \ bin \ Debug \ 39-Globe_32x32.png"); BitmapImage LargeImage =
new BitmapImage (uriImage); pushButton.LargeImage = largeImage;
}
}
Sau khi hoàn thành mã, hãy xây dựng ứng dụng. Từ menu Xây dựng, nhấp vào Giải pháp Xây dựng. Đầu ra từ bản dựng xuất hiện trong cửa sổ Đầu ra cho biết rằng dự án
được biên dịch không có lỗi. AddPanel.dll nằm trong thư mục đầu ra của dự án.
Để gọi ứng dụng trong Revit, hãy tạo tệp kê khai để đăng ký ứng dụng đó vào Revit.
Vùng mã 2-6: Tạo tệp .addin cho ứng dụng bên ngoài
F742-4951-8576-C261D1993107 </AddInId>
</RevitAddIns>
o Đối với Windows XP - C: \ Documents and Settings \ All Users \ Application Data \ Autodesk \ Revit \ Addins \ 2012 \
Lưu ý Tệp AddPanel.dll nằm trong thư mục tệp mặc định trong thư mục mới được gọi là Gỡ lỗi (D: \ Sample \ HelloWorld \ bin \ Debug \ AddPanel.dll). Sử dụng
đường dẫn tệp để đánh giá Assembly.
Tham khảo Tích hợp bổ trợ để biết thêm thông tin về tệp kê khai .addin.
Gỡ lỗi
Để bắt đầu gỡ lỗi, hãy xây dựng dự án và chạy Revit. Một bảng điều khiển ruy-băng mới xuất hiện trên tab Phần bổ trợ có tên là NewRibbonPanel và Hello
World xuất hiện dưới dạng nút duy nhất trên bảng, với hình ảnh quả địa cầu lớn.
Hình 9: Thêm một bảng điều khiển ribbon mới vào Revit
Nhấp vào Hello World để chạy ứng dụng và hiển thị hộp thoại sau.
Phần này giới thiệu cho bạn một ứng dụng bổ trợ lấy các phần tử được chọn từ Revit.
Trong các ứng dụng bổ trợ, bạn có thể thực hiện một thao tác cụ thể trên một phần tử cụ thể. Ví dụ: bạn có thể lấy hoặc thay đổi giá trị tham số của một
phần tử. Hoàn thành các bước sau để nhận giá trị tham số:
1. Tạo một dự án mới và thêm các tham chiếu như đã tóm tắt trong hướng dẫn trước.
Đối tượng được chọn là Revit SelElementSet. Sử dụng giao diện IEnumerator hoặc vòng lặp foreach để tìm kiếm ElementSet.
Đoạn mã sau đây là một ví dụ về cách truy xuất các phần tử đã chọn.
if (0 == collection.Size)
{
// Nếu không có phần tử nào được chọn.
{
String info = "Id của các phần tử được chọn trong tài liệu là:";
foreach (Phần tử elem trong bộ sưu tập)
{
thông tin + = "\ n \ t" + elem.Id.IntegerValue;
}
trả về Autodesk.Revit.UI.Result.Succeeded;
}
}
Sau khi bạn có được các phần tử đã chọn, bạn có thể lấy các thuộc tính hoặc tham số cho các phần tử. Để biết thêm thông tin, hãy xem Thông số.
Machine Translated by Google
Bạn có thể sử dụng bộ lọc để chỉ chọn các phần tử đáp ứng các tiêu chí nhất định. Để biết thêm thông tin về cách tạo và sử dụng bộ lọc phần tử, hãy
xem Lặp lại bộ sưu tập phần tử.
Ví dụ này truy xuất tất cả các cửa trong tài liệu và hiển thị hộp thoại liệt kê id của chúng.
// Tạo một Bộ lọc để lấy tất cả các cửa trong tài liệu ElementClassFilter
familyInstanceFilter = new ElementClassFilter (typeof (FamilyInstance)); ElementCategoryFilter doorCategoryfilter
= new ElementCategoryFilter (BuiltInCategory.OST_Doors);
Cửa LogicalAndFilterInstancesFilter =
mới LogicalAndFilter (familyInstanceFilter, doorCategoryfilter);
FilteredElementCollector collector = new FilteredElementCollector (tài liệu); ICollection
<ElementId> door = collector.WherePasses (doorInstancesFilter) .ToElementIds ();
String prompt = "Id của các cửa trong tài liệu hiện tại là:"; foreach (id ElementId
trong cửa) {
Các nhà phát triển thêm chức năng bằng cách tạo và triển khai Lệnh bên ngoài và Ứng dụng bên ngoài. Revit xác định các lệnh và ứng dụng mới bằng cách
sử dụng tệp kê khai .addin.
• Các Lệnh Bên ngoài xuất hiện dưới nút menu Công cụ Bên ngoài trên tab Phần bổ trợ.
• Ứng dụng bên ngoài được gọi khi Revit khởi động và không tải khi Revit tắt
• Tìm hiểu cách thêm chức năng bằng Lệnh bên ngoài và Ứng dụng bên ngoài.
Tổng quan
API nền tảng Revit dựa trên chức năng của ứng dụng Revit. API nền tảng Revit bao gồm hai Thư viện lớp chỉ hoạt động khi Revit đang chạy.
RevitAPI.dll chứa các phương thức được sử dụng để truy cập ứng dụng, tài liệu, phần tử và tham số của Revit ở cấp cơ sở dữ liệu. Nó cũng chứa
IExternalDBApplication và các giao diện liên quan.
RevitAPIUI.dll chứa tất cả các giao diện API liên quan đến thao tác và tùy chỉnh giao diện người dùng Revit, bao gồm:
• Lựa chọn
• TaskDialogs
Như hình dưới đây cho thấy, Revit Architecture, Revit Structure và Revit MEP lần lượt dành riêng cho Architecture, Structure và MEP.
Machine Translated by Google
Để tạo một bổ trợ dựa trên RevitAPI, bạn phải cung cấp các loại điểm nhập cụ thể trong DLL bổ trợ của mình. Các lớp entrypoint này triển khai các giao
diện, IExternalCommand, IExternalApplication hoặc IExternalDBApplication. Bằng cách này, phần bổ trợ được chạy tự động trên các sự kiện nhất định hoặc, trong
trường hợp IExternalCommand và IExternalApplication, theo cách thủ công từ nút menu Công cụ bên ngoài.
IExternalCommand, IExternalApplication, IExternalDBApplication và các sự kiện Revit có sẵn khác để tích hợp add-in được giới thiệu trong chương này.
Các nhà phát triển có thể thêm chức năng bằng cách triển khai các Lệnh bên ngoài xuất hiện trong nút menu Công cụ bên ngoài.
Khi không có lệnh hoặc chế độ chỉnh sửa nào khác đang hoạt động trong Revit, các lệnh bên ngoài đã đăng ký sẽ được bật. Khi một lệnh được chọn, một đối
tượng lệnh sẽ được tạo và phương thức Execute () của nó được gọi. Khi phương thức này quay trở lại Revit, đối tượng lệnh sẽ bị phá hủy. Do đó, dữ liệu không
thể tồn tại trong đối tượng giữa các lần thực thi lệnh. Tuy nhiên, có những cách khác để lưu dữ liệu giữa các lần thực thi lệnh; ví dụ, bạn có thể sử dụng cơ
chế chia sẻ thông số Revit để lưu trữ dữ liệu trong dự án Revit.
Bạn có thể thêm Lệnh bên ngoài vào Bảng công cụ bên ngoài trong nút menu Công cụ bên ngoài hoặc dưới dạng bảng điều khiển ruy-băng tùy chỉnh trên tab Thêm nội
dung, tab Phân tích hoặc tab ruy-băng tùy chỉnh mới. Xem hướng dẫn : Hello World và Walkthrough: Thêm Hello World Bảng điều khiển Ruy-băng cho các ví dụ về hai
cách tiếp cận này.
Các công cụ bên ngoài, tab ruy-băng và bảng ruy-băng được khởi tạo khi khởi động. Các bước khởi tạo như sau:
o Công cụ bên ngoài có thể được thêm vào nút menu Công cụ bên ngoài của Revit.
• Phiên Ứng dụng Bên ngoài thêm các bảng và nội dung vào tab Bổ trợ.
Machine Translated by Google
IExternalCommand
Bạn tạo một lệnh bên ngoài bằng cách tạo một đối tượng triển khai giao diện IExternalCommand. Giao diện IExternalCommand có một phương thức trừu tượng,
Execute, là phương thức chính cho các lệnh bên ngoài.
• commandData (ExternalCommandData)
• phần tử (ElementSet)
commandData (ExternalCommandData)
Đối tượng ExternalCommandData chứa các tham chiếu đến Ứng dụng và Dạng xem được lệnh bên ngoài yêu cầu. Tất cả dữ liệu Revit được lấy trực tiếp hoặc gián tiếp
từ tham số này trong lệnh bên ngoài.
Ví dụ: câu lệnh sau minh họa cách truy xuất Autodesk.Revit.Document từ tham số commandData:
Bảng sau minh họa các thuộc tính công cộng ExternalCommandData
Tài sản Sự mô tả
Ứng dụng (Autodesk.Revit.UI.UIApplication) Truy xuất một đối tượng đại diện cho Ứng dụng UIA hiện tại cho lệnh bên ngoài.
JournalData Một bản đồ dữ liệu có thể được sử dụng để đọc và ghi dữ liệu vào tệp tạp chí Revit.
Xem (Autodesk.Revit.DB.View) Truy xuất một đối tượng đại diện cho các lệnh bên ngoài View hoạt động.
Thông báo lỗi được trả về bởi một lệnh bên ngoài bằng cách sử dụng thông báo tham số đầu ra. Tham số kiểu chuỗi được đặt trong quy trình lệnh bên ngoài. Khi
trả về Autodesk.Revit.UI.Result.Failed hoặc Autodesk.Revit.UI.Result.Cancell và thông số thông báo được đặt, hộp thoại lỗi sẽ xuất hiện.
Mẫu mã sau đây minh họa cách sử dụng tham số thông báo.
Việc triển khai lệnh bên ngoài trước đó sẽ làm xuất hiện hộp thoại sau:
phần tử (ElementSet):
Bất cứ khi nào trả về Autodesk.Revit.UI.Result.Failed hoặc Autodesk.Revit.UI.Result.Canceled và thông báo tham số không trống, hộp thoại lỗi hoặc cảnh báo
sẽ xuất hiện. Ngoài ra, nếu bất kỳ phần tử nào được thêm vào tham số phần tử, các phần tử này sẽ được đánh dấu trên màn hình. Một thực tiễn tốt là đặt tham
số thông báo bất cứ khi nào lệnh không thành công, cho dù các phần tử có được trả về hay không.
Đoạn mã sau làm nổi bật các bức tường được chọn trước:
Hình ảnh sau đây hiển thị kết quả của mã trước đó.
Machine Translated by Google
Hình 13: Hộp thoại thông báo lỗi và các phần tử được đánh dấu
Trở về
Kết quả Trả về cho biết rằng việc thực thi không thành công, thành công hoặc bị hủy bỏ bởi người dùng. Nếu không thành công, Revit sẽ đảo ngược các thay đổi
được thực hiện bởi lệnh bên ngoài.
Bảng 2: IExternalCommand.Result
Autodesk.Revit.UI.Result.Succeeded Lệnh bên ngoài đã hoàn tất thành công. Revit giữ tất cả các thay đổi được thực hiện bởi lệnh bên ngoài.
Autodesk.Revit.UI.Result.Failed Lệnh bên ngoài không thể hoàn thành tác vụ. Revit đảo ngược các hoạt động được thực hiện bởi lệnh bên ngoài. Nếu thông số
thông báo của Execute được thiết lập, Revit sẽ hiển thị hộp thoại với nội dung "Lỗi - không thể bỏ qua".
Autodesk.Revit.UI.Result.Cancell Người dùng đã hủy lệnh bên ngoài. Revit đảo ngược các thay đổi được thực hiện bởi lệnh bên ngoài. Nếu thông số thông
báo của Execute được thiết lập, Revit sẽ hiển thị hộp thoại có nội dung "Cảnh báo - có thể bỏ qua".
Machine Translated by Google
Ví dụ sau đây hiển thị thông báo chào mừng và cho phép người dùng chọn giá trị trả về. Sử dụng phương thức Execute () làm lối vào ứng dụng Revit.
IExternalCommandAvailable
Giao diện này cho phép bạn kiểm soát xem có thể nhấn nút lệnh bên ngoài hay không. Phương thức giao diện IsCommandAvailable chuyển ứng dụng và một tập
hợp các danh mục phù hợp với các danh mục của các mục đã chọn trong Revit để bạn triển khai. Cách sử dụng điển hình là kiểm tra các danh mục đã chọn để xem liệu
chúng có đáp ứng các tiêu chí để chạy lệnh của bạn hay không.
Trong ví dụ này, kiểm tra khả năng tiếp cận cho phép nhấp vào một nút khi không có lựa chọn nào đang hoạt động hoặc khi ít nhất một bức tường được chọn:
IExternalApplication
Để thêm Ứng dụng bên ngoài vào Revit, bạn tạo một đối tượng triển khai giao diện IExternalApplication.
Giao diện IExternalApplication có hai phương thức trừu tượng, OnStartup () và OnShutdown (), mà bạn ghi đè trong ứng dụng bên ngoài của mình. Revit gọi
OnStartup () khi nó khởi động và OnShutdown () khi nó đóng.
Tham số UIControlledApplication cung cấp quyền truy cập vào các sự kiện Revit nhất định và cho phép tùy chỉnh các bảng điều khiển và bảng điều khiển ruy-băng cũng như
việc bổ sung các tab dải băng. Ví dụ, sự kiện công khai DialogBoxShowing của UIControlledApplication có thể được sử dụng để nắm bắt sự kiện hộp thoại được hiển thị. Đoạn
mã sau đăng ký hàm xử lý được gọi ngay trước khi hộp thoại được hiển thị.
application.DialogBoxShowing + = new
EventHandler <Autodesk.Revit.Events.DialogBoxShowingEventArgs> (AppDialogShowing);
Mẫu mã sau minh họa cách sử dụng loại UIControlledApplication để đăng ký một trình xử lý sự kiện và xử lý sự kiện khi nó
xảy ra.
// Thực hiện phương thức OnStartup để đăng ký các sự kiện khi Revit khởi động. Kết quả công
khai OnStartup (ứng dụng UIControlledApplication) {
// Triển khai phương thức này để hủy đăng ký các sự kiện đã đăng ký khi Revit thoát. công khai kết quả
OnShutdown (ứng dụng UIControlledApplication) {
// Lấy id trợ giúp của hộp thoại đang hiển thị int
DialId = args.HelpId;
// Hiển thị thông báo nhắc và cho phép người dùng đóng hộp thoại trực tiếp.
TaskDialog taskDialog = new TaskDialog ("Revit");
taskDialog.MainContent = promptInfo; Các nút
TaskDialogCommonButtons = TaskDialogCommonButtons.Ok |
TaskDialogCommonButtons.Cancel;
taskDialog.CommonButtons = các nút; Kết quả TaskDialogResult =
taskDialog.Show (); if (TaskDialogResult.Cancel == kết quả) {
} khác
{
// Tiếp tục hiện hộp thoại Revit
args.OverrideResult (0);
}
}
}
Machine Translated by Google
Đăng ký bổ trợ
Các lệnh bên ngoài và các ứng dụng bên ngoài cần được đăng ký để xuất hiện bên trong Revit. Chúng có thể được đăng ký bằng cách thêm chúng vào tệp kê khai .addin.
Thứ tự mà các lệnh và ứng dụng bên ngoài được liệt kê trong Revit được xác định bởi thứ tự mà chúng được đọc khi Revit khởi động.
Tệp kê khai
Bắt đầu với Revit 2011, API Revit cung cấp khả năng đăng ký các ứng dụng API thông qua tệp kê khai .addin. Các tệp kê khai được Revit đọc tự động khi chúng được đặt ở
một trong hai vị trí trên hệ thống của người dùng:
Ở một vị trí không dành riêng cho người dùng trong "dữ liệu ứng dụng":
• Đối với Windows XP - C: \ Documents and Settings \ All Users \ Application Data \ Autodesk \ Revit \ Addins \ 2014 \
Ở vị trí dành riêng cho người dùng trong "dữ liệu ứng dụng":
• Đối với Windows XP - C: \ Documents and Settings \ <user> \ Application Data \ Autodesk \ Revit \ Addins \ 2014 \
• Đối với Vista / Windows 7 - C: \ Users \ <user> \ AppData \ Roaming \ Autodesk \ Revit \ Addins \ 2014 \
Tất cả các tệp có tên .addin ở các vị trí này sẽ được Revit đọc và xử lý trong quá trình khởi động. Tất cả các tệp ở cả vị trí dành riêng cho người dùng và vị trí của tất cả
người dùng đều được xem xét cùng nhau và được tải theo thứ tự bảng chữ cái. Nếu tệp kê khai của tất cả người dùng có cùng tên với tệp kê khai của người dùng cụ thể, thì tệp kê
khai của tất cả người dùng sẽ bị bỏ qua. Trong mỗi tệp kê khai, các lệnh bên ngoài và ứng dụng bên ngoài được tải theo thứ tự mà chúng được liệt kê.
Một tệp cơ bản thêm một Lệnh bên ngoài trông giống như sau:
21. </RevitAddIns>
Một tệp cơ bản thêm một Ứng dụng bên ngoài trông giống như sau:
Tệp cơ bản thêm một Ứng dụng bên ngoài cấp DB trông giống như sau:
Machine Translated by Google
Nhiều phần tử AddIn có thể được cung cấp trong một tệp kê khai.
Nhãn Sự mô tả
Cuộc họp Đường dẫn đầy đủ đến tệp lắp ráp bổ trợ. Bắt buộc đối với tất cả các Lệnh bên ngoài và Ứng dụng Bên ngoài.
FullClassName Tên đầy đủ của lớp trong tệp hợp ngữ triển khai IExternalCommand hoặc IExternalApplication. Bắt buộc đối với tất cả các Lệnh bên ngoài và
AddInId GUID đại diện cho id của ứng dụng cụ thể này. AddInIds phải là duy nhất cho một phiên Revit nhất định.
Autodesk khuyên bạn nên tạo một GUID duy nhất cho mỗi ứng dụng hoặc lệnh đã đăng ký. Bắt buộc đối với tất cả các Lệnh bên ngoài
Tên Tên của ứng dụng. Yêu cầu; chỉ dành cho Ứng dụng bên ngoài.
Chữ Tên của nút. Không bắt buộc; chỉ sử dụng thẻ này cho các Lệnh bên ngoài. Mặc định là "Công cụ bên ngoài".
Đăng ký chuỗi id nhà cung cấp của bạn với Autodesk tại http://www.autodesk.com/symbreg.
VendorDescription Mô tả có chứa tên pháp lý của nhà cung cấp và / hoặc thông tin thích hợp khác. Không bắt buộc.
Sự mô tả Mô tả ngắn gọn về lệnh, sẽ được sử dụng làm chú giải công cụ của nút. Không bắt buộc; chỉ sử dụng thẻ này cho các Lệnh bên ngoài.
Mặc định là một chú giải công cụ chỉ với văn bản lệnh.
VisibilityMode Các chế độ mà lệnh bên ngoài sẽ hiển thị. Nhiều giá trị có thể được đặt cho tùy chọn này. Không bắt buộc; chỉ sử dụng thẻ này cho các Lệnh
bên ngoài.
Mặc định là hiển thị lệnh ở tất cả các chế độ, kể cả khi không có tài liệu nào hoạt động. Các lệnh bên ngoài đã viết trước đây cần chạy
trên tài liệu đang hoạt động nên được sửa đổi để đảm bảo rằng mã xử lý lệnh gọi khi không có tài liệu hoạt động hoặc áp dụng chế độ
Kỷ luật Các quy tắc mà lệnh bên ngoài sẽ hiển thị. Nhiều giá trị có thể được đặt cho tùy chọn này. Không bắt buộc; chỉ sử dụng thẻ này cho các Lệnh
bên ngoài.
Mặc định là hiển thị lệnh trong tất cả các ngành. Nếu bất kỳ ngành cụ thể nào được liệt kê, lệnh sẽ chỉ hiển thị trong các ngành đó. Xem bảng
Tên miền sẵn có Tên đầy đủ của lớp trong tệp hợp ngữ đã triển khai IExternalCommandAv Khả dụng. Lớp này cho phép nút lệnh được chuyển sang màu xám
một cách chọn lọc tùy thuộc vào ngữ cảnh. Không bắt buộc; chỉ sử dụng thẻ này cho các Lệnh bên ngoài.
Mặc định là một lệnh có sẵn bất cứ khi nào nó được hiển thị.
Hình ảnh lớn Biểu tượng để sử dụng cho nút trong trình đơn Công cụ Bên ngoài kéo xuống. Không bắt buộc; chỉ sử dụng thẻ này cho các Lệnh bên ngoài.
SmallImage Biểu tượng để sử dụng nếu nút được thăng cấp trên Thanh công cụ Truy nhập Nhanh. Không bắt buộc; chỉ sử dụng thẻ này cho các Lệnh bên ngoài.
Mặc định là hiển thị nút Thanh công cụ truy cập nhanh mà không có biểu tượng, điều này có thể gây nhầm lẫn cho người dùng.
Mô tả dài Mô tả dài của lệnh, sẽ được sử dụng như một phần của chú giải công cụ mở rộng của nút, được hiển thị khi con chuột di chuột qua
Machine Translated by Google
lệnh trong một khoảng thời gian dài hơn. Không bắt buộc; chỉ sử dụng thẻ này cho các Lệnh bên ngoài. Nếu thuộc tính này và TooltipImage
không được cung cấp, nút sẽ không có chú giải công cụ mở rộng.
TooltipImage Tệp hình ảnh sẽ hiển thị dưới dạng một phần của chú giải công cụ mở rộng nút, được hiển thị khi chuột di chuột qua lệnh trong một khoảng
thời gian dài hơn. Không bắt buộc; chỉ sử dụng thẻ này cho các Lệnh bên ngoài. Nếu thuộc tính này và TooltipImage không được cung cấp,
LanguageType Cài đặt bản địa hóa cho các nút Văn bản, Mô tả, Hình ảnh lớn, Mô tả dài và Hình ảnh công cụ của các nút công cụ bên ngoài. Revit sẽ tải
các giá trị tài nguyên từ dll tài nguyên ngôn ngữ được chỉ định. Giá trị có thể là một trong mười một ngôn ngữ được Revit hỗ trợ. Nếu
không có LanguageType nào được chỉ định, tài nguyên ngôn ngữ mà phiên hiện tại của Revit đang sử dụng sẽ được tải tự động. Để biết thêm
chi tiết, hãy xem phần Bản địa hóa.
AllowLoadIntoExistingSession Cờ cho phép tải. Đặt thành false để ngăn Revit tự động tải các bổ trợ trong .addin mới được thêm vào
tệp kê khai mà không cần khởi động lại. Không bắt buộc. Theo mặc định. Revit sẽ tự động tải các bổ trợ từ các tệp kê khai .addin mới được thêm
Luôn luôn có thể Lệnh có sẵn ở tất cả các chế độ có thể được hỗ trợ bởi API Revit.
Không thể phân chia được trong dự án Lệnh ẩn khi có tài liệu dự án đang hoạt động.
Không thể tìm thấy trong gia đình Lệnh ẩn khi có một tài liệu gia đình đang hoạt động.
Không tí nào Lệnh có sẵn trong tất cả các nguyên tắc có thể được hỗ trợ bởi API Revit.
Ngành kiến trúc Lệnh hiển thị trong Autodesk Revit Architecture.
StructuralAnalysis Lệnh hiển thị khi có sẵn các công cụ chỉnh sửa kỷ luật Phân tích cấu trúc.
MassingAndSite
Lệnh này hiển thị khi có sẵn các công cụ chỉnh sửa Khối lượng và Quy tắc trang web.
Phân tích năng lượng Lệnh hiển thị khi có sẵn các công cụ chỉnh sửa kỷ luật Phân tích năng lượng.
Cơ khí Lệnh hiển thị khi có sẵn các công cụ chỉnh sửa kỷ luật Cơ khí, ví dụ như trong Autodesk Revit MEP.
Điện Lệnh hiển thị khi có sẵn các công cụ chỉnh sửa kỷ luật Điện, ví dụ như trong Autodesk Revit MEP.
Đường ống Lệnh hiển thị khi có sẵn các công cụ chỉnh sửa kỷ luật Đường ống, ví dụ như trong Autodesk Revit MEP.
MechanicalAnalysis Lệnh hiển thị khi các công cụ chỉnh sửa kỷ luật Phân tích Cơ học khả dụng.
PipingAnalysis Lệnh hiển thị khi có sẵn các công cụ chỉnh sửa kỷ luật Phân tích đường ống.
Phân tích điện Lệnh này hiển thị khi có sẵn các công cụ chỉnh sửa kỷ luật Phân tích Điện.
Tiện ích .NET DLL RevitAddInUtility.dll cung cấp một API chuyên dụng có khả năng đọc, ghi và sửa đổi tệp kê khai Revit Add-In. Nó được thiết kế để sử dụng
từ trình cài đặt sản phẩm và tập lệnh. Tham khảo tài liệu API trong tệp trợ giúp RevitAddInUtility.chm trong thư mục cài đặt SDK.
Machine Translated by Google
20. // thêm cả (các) lệnh và (các) ứng dụng vào tệp kê khai 21.
Manifest.AddInCommands.Add (command1); 22. Manifest.AddInApplication.Add
(application1);
23.
24. // lưu tệp kê khai vào một tệp
25. RevitProduct revitProduct1 = RevitProductUtility.GetAllInstalledRevitProducts () [0]; 26.
Manifest.SaveAs (revitProduct1.AllUsersAddInFolder + "\\ RevitAddInUtilitySample.addin");
3. RevitAddInManifest revitAddInManifest =
4. Autodesk.RevitAddIns.AddInManifestUtility.GetRevitAddInManifest (
5. revitProduct1.AllUsersAddInFolder + "\\ RevitAddInUtilitySample.addin");
Đăng ký bổ trợ
Các lệnh bên ngoài và các ứng dụng bên ngoài cần được đăng ký để xuất hiện bên trong Revit. Chúng có thể được đăng ký bằng cách thêm chúng vào tệp kê khai .addin.
Thứ tự mà các lệnh và ứng dụng bên ngoài được liệt kê trong Revit được xác định bởi thứ tự mà chúng được đọc khi Revit khởi động.
Tệp kê khai
Bắt đầu với Revit 2011, API Revit cung cấp khả năng đăng ký các ứng dụng API thông qua tệp kê khai .addin. Các tệp kê khai được Revit đọc tự động khi chúng được đặt ở
một trong hai vị trí trên hệ thống của người dùng:
Ở một vị trí không dành riêng cho người dùng trong "dữ liệu ứng dụng":
• Đối với Windows XP - C: \ Documents and Settings \ All Users \ Application Data \ Autodesk \ Revit \ Addins \ 2014 \
Ở vị trí dành riêng cho người dùng trong "dữ liệu ứng dụng":
• Đối với Windows XP - C: \ Documents and Settings \ <user> \ Application Data \ Autodesk \ Revit \ Addins \ 2014 \
• Đối với Vista / Windows 7 - C: \ Users \ <user> \ AppData \ Roaming \ Autodesk \ Revit \ Addins \ 2014 \
Tất cả các tệp có tên .addin ở các vị trí này sẽ được Revit đọc và xử lý trong quá trình khởi động. Tất cả các tệp ở cả vị trí dành riêng cho người dùng và vị trí của tất cả
người dùng đều được xem xét cùng nhau và được tải theo thứ tự bảng chữ cái. Nếu tệp kê khai của tất cả người dùng có cùng tên với tệp kê khai của người dùng cụ thể, thì tệp kê
khai của tất cả người dùng sẽ bị bỏ qua. Trong mỗi tệp kê khai, các lệnh bên ngoài và ứng dụng bên ngoài được tải theo thứ tự mà chúng được liệt kê.
Machine Translated by Google
Một tệp cơ bản thêm một Lệnh bên ngoài trông giống như sau:
Một tệp cơ bản thêm một Ứng dụng bên ngoài trông giống như sau:
10. </AddIn>
11. </RevitAddIns>
Tệp cơ bản thêm một Ứng dụng bên ngoài cấp DB trông giống như sau:
Nhiều phần tử AddIn có thể được cung cấp trong một tệp kê khai.
Nhãn Sự mô tả
Cuộc họp Đường dẫn đầy đủ đến tệp lắp ráp bổ trợ. Bắt buộc đối với tất cả các Lệnh bên ngoài và Ứng dụng Bên ngoài.
FullClassName Tên đầy đủ của lớp trong tệp hợp ngữ triển khai IExternalCommand hoặc IExternalApplication. Bắt buộc đối với tất cả các Lệnh bên ngoài và
AddInId GUID đại diện cho id của ứng dụng cụ thể này. AddInIds phải là duy nhất cho một phiên Revit nhất định.
Autodesk khuyên bạn nên tạo một GUID duy nhất cho mỗi ứng dụng hoặc lệnh đã đăng ký. Bắt buộc đối với tất cả các Lệnh bên ngoài
Tên Tên của ứng dụng. Yêu cầu; chỉ dành cho Ứng dụng bên ngoài.
Chữ Tên của nút. Không bắt buộc; chỉ sử dụng thẻ này cho các Lệnh bên ngoài. Mặc định là "Công cụ bên ngoài".
Đăng ký chuỗi id nhà cung cấp của bạn với Autodesk tại http://www.autodesk.com/symbreg.
VendorDescription Mô tả có chứa tên pháp lý của nhà cung cấp và / hoặc thông tin thích hợp khác. Không bắt buộc.
Sự mô tả Mô tả ngắn gọn về lệnh, sẽ được sử dụng làm chú giải công cụ của nút. Không bắt buộc; chỉ sử dụng thẻ này cho các Lệnh bên ngoài.
Mặc định là một chú giải công cụ chỉ với văn bản lệnh.
VisibilityMode Các chế độ mà lệnh bên ngoài sẽ hiển thị. Nhiều giá trị có thể được đặt cho tùy chọn này. Không bắt buộc; chỉ sử dụng thẻ này cho các Lệnh
bên ngoài.
Mặc định là hiển thị lệnh ở tất cả các chế độ, kể cả khi không có tài liệu nào hoạt động. Các lệnh bên ngoài đã viết trước đây cần chạy
trên tài liệu đang hoạt động nên được sửa đổi để đảm bảo rằng mã xử lý lệnh gọi khi không có tài liệu hoạt động hoặc áp dụng chế độ
Kỷ luật Các quy tắc mà lệnh bên ngoài sẽ hiển thị. Nhiều giá trị có thể được đặt cho tùy chọn này. Không bắt buộc; chỉ sử dụng thẻ này cho các Lệnh
bên ngoài.
Mặc định là hiển thị lệnh trong tất cả các ngành. Nếu bất kỳ ngành cụ thể nào được liệt kê, lệnh sẽ chỉ hiển thị trong các ngành đó. Xem bảng
Tên miền sẵn có Tên đầy đủ của lớp trong tệp hợp ngữ đã triển khai IExternalCommandAv Khả dụng. Lớp này cho phép nút lệnh được chuyển sang màu xám
một cách chọn lọc tùy thuộc vào ngữ cảnh. Không bắt buộc; chỉ sử dụng thẻ này cho các Lệnh bên ngoài.
Mặc định là một lệnh có sẵn bất cứ khi nào nó được hiển thị.
Hình ảnh lớn Biểu tượng để sử dụng cho nút trong trình đơn Công cụ Bên ngoài kéo xuống. Không bắt buộc; chỉ sử dụng thẻ này cho các Lệnh bên ngoài.
SmallImage Biểu tượng để sử dụng nếu nút được thăng cấp trên Thanh công cụ Truy nhập Nhanh. Không bắt buộc; chỉ sử dụng thẻ này cho các Lệnh bên ngoài.
Mặc định là hiển thị nút Thanh công cụ truy cập nhanh mà không có biểu tượng, điều này có thể gây nhầm lẫn cho người dùng.
Mô tả dài Mô tả dài của lệnh, sẽ được sử dụng như một phần của chú giải công cụ mở rộng nút, được hiển thị khi chuột di chuột qua lệnh trong một khoảng
thời gian dài hơn. Không bắt buộc; chỉ sử dụng thẻ này cho các Lệnh bên ngoài. Nếu thuộc tính này và TooltipImage không được cung cấp, nút sẽ
TooltipImage Tệp hình ảnh sẽ hiển thị dưới dạng một phần của chú giải công cụ mở rộng nút, được hiển thị khi chuột di chuột qua lệnh trong một khoảng thời
gian dài hơn. Không bắt buộc; chỉ sử dụng thẻ này cho các Lệnh bên ngoài. Nếu thuộc tính này và TooltipImage không được cung cấp, nút sẽ không
LanguageType Cài đặt bản địa hóa cho các nút Văn bản, Mô tả, Hình ảnh lớn, Mô tả dài và Hình ảnh công cụ của các nút công cụ bên ngoài. Revit sẽ tải các
giá trị tài nguyên từ dll tài nguyên ngôn ngữ được chỉ định. Giá trị có thể là một trong mười một ngôn ngữ được Revit hỗ trợ. Nếu không có
LanguageType nào được chỉ định, tài nguyên ngôn ngữ mà phiên hiện tại của Revit đang sử dụng sẽ được tải tự động. Để biết thêm chi tiết, hãy
AllowLoadIntoExistingSession Cờ cho phép tải. Đặt thành false để ngăn Revit tự động tải các bổ trợ trong .addin mới được thêm vào
tệp kê khai mà không cần khởi động lại. Không bắt buộc. Theo mặc định. Revit sẽ tự động tải các bổ trợ từ các tệp kê khai .addin mới được thêm
Luôn luôn có thể Lệnh có sẵn ở tất cả các chế độ có thể được hỗ trợ bởi API Revit.
Không thể phân chia được trong dự án Lệnh ẩn khi có tài liệu dự án đang hoạt động.
Không thể tìm thấy trong gia đình Lệnh ẩn khi có một tài liệu gia đình đang hoạt động.
Không tí nào Lệnh có sẵn trong tất cả các nguyên tắc có thể được hỗ trợ bởi API Revit.
Ngành kiến trúc Lệnh hiển thị trong Autodesk Revit Architecture.
StructuralAnalysis Lệnh hiển thị khi có sẵn các công cụ chỉnh sửa kỷ luật Phân tích cấu trúc.
MassingAndSite
Lệnh này hiển thị khi có sẵn các công cụ chỉnh sửa Khối lượng và Quy tắc trang web.
Phân tích năng lượng Lệnh hiển thị khi có sẵn các công cụ chỉnh sửa kỷ luật Phân tích năng lượng.
Cơ khí Lệnh hiển thị khi có sẵn các công cụ chỉnh sửa kỷ luật Cơ khí, ví dụ như trong Autodesk Revit MEP.
Điện Lệnh hiển thị khi có sẵn các công cụ chỉnh sửa kỷ luật Điện, ví dụ như trong Autodesk Revit MEP.
Đường ống Lệnh hiển thị khi có sẵn các công cụ chỉnh sửa kỷ luật Đường ống, ví dụ như trong Autodesk Revit MEP.
MechanicalAnalysis Lệnh hiển thị khi các công cụ chỉnh sửa kỷ luật Phân tích Cơ học khả dụng.
PipingAnalysis Lệnh hiển thị khi có sẵn các công cụ chỉnh sửa kỷ luật Phân tích đường ống.
Phân tích điện Lệnh này hiển thị khi có sẵn các công cụ chỉnh sửa kỷ luật Phân tích Điện.
Tiện ích .NET DLL RevitAddInUtility.dll cung cấp một API chuyên dụng có khả năng đọc, ghi và sửa đổi tệp kê khai Revit Add-In. Nó được thiết kế để sử dụng
từ trình cài đặt sản phẩm và tập lệnh. Tham khảo tài liệu API trong tệp trợ giúp RevitAddInUtility.chm trong thư mục cài đặt SDK.
10. // lệnh này chỉ hiển thị trong Revit MEP, Structure, và chỉ hiển thị 11. // trong
tài liệu Dự án hoặc khi không có tài liệu nào cả 12. command1.Discipline =
Discipline.Mechanical | Kỷ luật.Electrical | 13.
Kỷ luật.Piping | Kỷ luật, Kiến trúc; 14.
command1.VisibilityMode = VisibilityMode.NotVosystemInFamily;
15.
16. // tạo ứng dụng bên ngoài 17.
RevitAddInApplication application1 = new RevitAddInApplication ("appName", "full path \\
assemblyName.dll", Guid.NewGuid (), "namespace.className"); 18.
19. 20. // thêm cả (các) lệnh và (các) ứng dụng vào tệp kê khai 21.
Manifest.AddInCommands.Add (command1); 22. Manifest.AddInApplication.Add
(application1); 23. 24. // lưu tệp kê khai vào một tệp 25.
RevitProduct revitProduct1 = RevitProductUtility.GetAllInstalledRevitProducts
() [0]; 26. Manifest.SaveAs (revitProduct1.AllUsersAddInFolder + "\\
RevitAddInUtilitySample.addin");
Machine Translated by Google
Bạn có thể cho phép Revit bản địa hóa các tài nguyên mà người dùng có thể nhìn thấy của nút lệnh bên ngoài (bao gồm Văn bản, hình ảnh biểu tượng lớn,
mô tả dài và ngắn và hình ảnh chú giải công cụ). Bạn sẽ cần tạo một DLL vệ tinh .NET chứa các chuỗi, hình ảnh và biểu tượng cho nút.
Sau đó, thay đổi giá trị của các thẻ trong tệp .addin để tương ứng với tên của tài nguyên trong dll Vệ tinh, nhưng được thêm vào trước ký tự @. Vì vậy,
thẻ:
Vùng mã 3-13: Mục nhập Văn bản không được bản địa hóa
Trở thành:
Vùng mã 3-14: Mục nhập văn bản được bản địa hóa
trong đó ExtensionText là tên của tài nguyên được tìm thấy trong Satellite DLL.
Các DLL vệ tinh được mong đợi sẽ nằm trong một thư mục với tên của ngôn ngữ của ngôn ngữ-văn hóa, chẳng hạn như en hoặc en-US. Thư mục phải được
đặt trong thư mục chứa hợp ngữ bổ trợ. Xem http://msdn.microsoft.com/en-us/library/e9zazcx5.aspx
để tạo các DLL vệ tinh được quản lý.
Bạn có thể buộc Revit sử dụng DLL tài nguyên ngôn ngữ cụ thể, bất kể ngôn ngữ của phiên Revit là gì, bằng cách chỉ định rõ ràng ngôn ngữ và văn hóa bằng thẻ
LanguageType.
Ví dụ: mục nhập ở trên sẽ buộc Revit luôn tải các giá trị từ en-US Satellite DLL và bỏ qua cài đặt ngôn ngữ và văn hóa Revit hiện tại khi xem xét các
thành viên có thể bản địa hóa của tệp kê khai lệnh bên ngoài.
Revit hỗ trợ 11 ngôn ngữ được định nghĩa trong Autodesk.Revit.ApplicationServices.LanguageType kiểu liệt kê: English_USA, German, Spanish, French, Italian,
Dutch, Chinese_Simplified, Chinese_Traditional, Japanese, Korean và Russian.
Machine Translated by Google
Thuộc tính
API Revit cung cấp một số thuộc tính để định cấu hình hành vi ExternalCommand và ExternalApplication.
Giao dịch
Thuộc tính tùy chỉnh Autodesk.Revit.Attributes.TransactionMode phải được áp dụng cho lớp triển khai của giao diện IExternalCommand của bạn để kiểm soát hành vi giao
dịch cho lệnh bên ngoài. Không có mặc định cho tùy chọn này. Chế độ này kiểm soát cách khung API mong đợi các giao dịch được sử dụng khi lệnh được gọi. Các giá trị
được hỗ trợ là:
• TransactionMode.Automatic - Revit sẽ tạo một giao dịch trong tài liệu đang hoạt động trước khi lệnh bên ngoài được thực thi và
giao dịch sẽ được cam kết hoặc quay trở lại sau khi lệnh hoàn thành (dựa trên giá trị trả về của lệnh gọi lại Bên ngoài). Lệnh không thể tạo
và bắt đầu các Giao dịch của riêng nó, nhưng nó có thể tạo các Giao dịch con. Lệnh phải báo cáo trạng thái thành công hoặc thất bại của nó với giá trị trả
về Kết quả.
• TransactionMode.Manual - Revit sẽ không tạo một giao dịch (nhưng nó sẽ tạo một nhóm giao dịch bên ngoài để khôi phục tất cả các thay đổi nếu
lệnh bên ngoài trả về lỗi). Thay vào đó, bạn có thể sử dụng kết hợp Giao dịch, Giao dịch con và Nhóm giao dịch tùy ý. Bạn sẽ phải tuân theo
tất cả các quy tắc liên quan đến việc sử dụng các giao dịch và các lớp liên quan. Bạn sẽ phải cung cấp tên giao dịch của mình sau đó sẽ xuất hiện trong menu Hoàn
tác. Revit sẽ kiểm tra xem tất cả các giao dịch (cũng như các nhóm và giao dịch phụ) đã được đóng đúng cách khi trả về từ một lệnh bên ngoài hay chưa. Nếu
không, Revit sẽ loại bỏ tất cả các thay đổi được thực hiện đối với mô hình.
• TransactionMode.ReadOnly - Không có giao dịch (cũng như nhóm) nào được tạo và không có giao dịch nào có thể được tạo trong thời gian tồn tại của lệnh. Lệnh bên
ngoài chỉ có thể sử dụng các phương thức đọc từ mô hình. Các ngoại lệ sẽ được ném ra nếu lệnh cố gắng bắt đầu một giao dịch (hoặc nhóm) hoặc cố gắng ghi vào mô
hình.
Trong cả ba chế độ, TransactionMode chỉ áp dụng cho tài liệu đang hoạt động. Bạn có thể mở các tài liệu khác trong quá trình thực hiện lệnh và bạn có thể có toàn
quyền kiểm soát việc tạo và sử dụng Giao dịch, Giao dịch con và Nhóm giao dịch trên các tài liệu khác đó (ngay cả trong chế độ ReadOnly).
Ví dụ: để đặt lệnh bên ngoài để sử dụng chế độ giao dịch tự động:
}
}
JournalingAttribute
Thuộc tính tùy chỉnh Autodesk.Revit.Attributes.JournalingAttribute có thể được tùy chọn áp dụng cho lớp triển khai của giao diện IExternalCommand của bạn để
kiểm soát hành vi ghi nhật ký trong quá trình thực thi lệnh bên ngoài. Có hai lựa chọn để viết nhật ký:
• JournalMode.NoCommandData - Nội dung của bản đồ ExternalCommandData.JournalData không được ghi vào tạp chí Revit. Tùy chọn này cho phép các lệnh gọi Revit API ghi
vào nhật ký khi cần thiết. Tùy chọn này cho phép các lệnh gọi giao diện người dùng Revit để lựa chọn hoặc phản hồi cho hộp thoại tác vụ phát lại một cách chính
xác.
• JournalMode.UsingCommandData - Sử dụng IDictionary <String, String> được cung cấp trong dữ liệu lệnh. Thao tác này sẽ ẩn tất cả các mục nhật ký Revit giữa lệnh
gọi bên ngoài và mục nhập IDictionary <String, String>. Các lệnh gọi giao diện người dùng Revit để lựa chọn hoặc phản hồi cho hộp thoại tác vụ có thể không
phát lại chính xác. Đây là mặc định nếu JournalingAttribute không được chỉ định.
Machine Translated by Google
Revit Exceptions
Khi các phương thức API gặp lỗi không nghiêm trọng, chúng sẽ đưa ra một ngoại lệ. Các trường hợp ngoại lệ nên được bổ sung Revit. Tệp trợ giúp Revit API
chỉ định các ngoại lệ thường gặp cho các phương pháp cụ thể. Tất cả các phương thức Revit API đều ném một lớp con của
Autodesk.Revit.Exceptions.ApplicationException. Các ngoại lệ này phản ánh chặt chẽ các ngoại lệ .NET tiêu chuẩn như:
• ArgumentException
• Không hợp lệ
• FileNotFoundException
Tuy nhiên, một số lớp con này là duy nhất đối với Revit:
• AutoJoinFailedException
• RegenerationFailedException
• ModificationOutsideTransactionException
Ngoài ra, có một loại ngoại lệ đặc biệt được gọi là InternalException, đại diện cho một đường dẫn lỗi không được dự đoán trước. Các trường hợp ngoại lệ
của loại này mang thông tin chẩn đoán bổ sung có thể được chuyển lại cho Autodesk để chẩn đoán.
Machine Translated by Google
Revit cung cấp các giải pháp API để tích hợp các bảng điều khiển và bảng điều khiển ruy-băng tùy chỉnh. Các API này được sử dụng với IExternalApplication. Các
bảng ruy-băng tùy chỉnh có thể được thêm vào tab Bổ trợ, tab Phân tích hoặc vào tab ruy-băng tùy chỉnh mới.
Bảng điều khiển có thể bao gồm các nút, cả lớn và nhỏ, có thể là nút nhấn đơn giản, nút kéo xuống chứa nhiều lệnh hoặc nút tách là nút kéo xuống có gắn nút nhấn mặc
định. Ngoài các nút, bảng điều khiển có thể bao gồm các nhóm radio, hộp tổ hợp và hộp văn bản. Bảng điều khiển cũng có thể bao gồm các dấu phân cách dọc để giúp phân
tách các lệnh thành các nhóm hợp lý. Cuối cùng, các bảng có thể bao gồm một điều khiển trượt ra được truy cập bằng cách nhấp vào cuối bảng.
Vui lòng xem Nguyên tắc về ruy-băng trong Nguyên tắc giao diện người dùng API để biết thông tin về cách phát triển giao diện người dùng tuân thủ các tiêu chuẩn
được sử dụng bởi Autodesk.
Mặc dù bảng điều khiển ruy-băng có thể được thêm vào tab Bổ trợ hoặc Phân tích, chúng cũng có thể được thêm vào tab ruy-băng tùy chỉnh mới. Tùy chọn này chỉ nên
được sử dụng nếu cần thiết. Để đảm bảo rằng các tab ruy-băng Revit tiêu chuẩn vẫn hiển thị, giới hạn 20 tab ruy-băng tùy chỉnh được áp dụng. Hình ảnh sau đây cho
thấy một tab ruy-băng mới với một bảng điều khiển ruy-băng và một vài điều khiển đơn giản.
Hình ảnh sau đây hiển thị bảng điều khiển ruy-băng trên tab Phần bổ trợ bằng cách sử dụng các điều khiển bảng điều khiển ruy-băng khác nhau. Các phần sau đây mô
tả chi tiết hơn các điều khiển này và cung cấp các mẫu mã để tạo từng phần của dải băng.
Hình 14: Bảng điều khiển và bảng điều khiển ribbon mới
Machine Translated by Google
Đoạn mã sau đây phác thảo các bước thực hiện để tạo bảng điều khiển ruy-băng như hình trên. Mỗi hàm được gọi trong mẫu này được cung cấp trong các mẫu tiếp theo
ở phần sau của phần này. Những mẫu đó giả định rằng có một tổ hợp đặt tại D: \
Sample \ HelloWorld \ bin \ Debug \ Hello.dll có chứa các loại lệnh bên ngoài:
• Xin chào.HelloButton
• Xin chào.HelloOne
• Xin chào.HelloTwo
• Xin chào.HelloThree
• Xin chào.HelloA
• Xin chào.HelloB
• Xin chào.HelloC
• Xin chào.HelloRed
• Xin chào.HelloBlue
• Xin chào.HelloGreen
Bảng điều khiển RibbonPanel = app.CreateRibbonPanel (" Bảng điều khiển Ribbon mới");
Bảng điều khiển ruy-băng tùy chỉnh có thể được thêm vào tab Bổ trợ (mặc định) hoặc tab Phân tích hoặc chúng có thể được thêm vào tab ruy-băng tùy chỉnh mới.
Có nhiều loại điều khiển ruy-băng khác nhau có thể được thêm vào bảng điều khiển ruy-băng sẽ được thảo luận chi tiết hơn trong phần tiếp theo. Tất cả các
điều khiển ruy-băng có một số thuộc tính và chức năng chung.
Mỗi điều khiển ruy-băng có hai lớp được liên kết với nó - một lớp bắt nguồn từ RibbonItemData được sử dụng để tạo điều khiển (tức là
SplitButtonData) và thêm nó vào bảng điều khiển ruy-băng và một bảng dẫn xuất từ RibbonItem (tức là SplitButton) đại diện cho mục sau khi nó được thêm vào bảng.
Các thuộc tính có sẵn từ RibbonItemData (và các lớp dẫn xuất) cũng có sẵn từ RibbonItem (và các lớp dẫn xuất tương ứng). Các thuộc tính này có thể được đặt trước
khi thêm điều khiển vào bảng hoặc có thể được đặt bằng cách sử dụng lớp RibbonItem sau khi nó đã được thêm vào bảng.
Hầu hết các điều khiển có thể có một bộ chú giải công cụ (sử dụng thuộc tính ToolTip) được hiển thị khi người dùng di chuyển chuột qua điều khiển. Khi người dùng
di chuột qua điều khiển trong một khoảng thời gian dài, chú giải công cụ mở rộng sẽ được hiển thị bằng cách sử dụng thuộc tính LongDescription và ToolTipImage. Nếu
cả LongDescription và ToolTipImage đều không được đặt, chú giải công cụ mở rộng sẽ không được hiển thị. Nếu không có ToolTip nào được cung cấp, thì văn bản của
điều khiển (RibbonItem.ItemText) được hiển thị khi chuột di chuyển qua điều khiển.
Các điều khiển có thể có trợ giúp theo ngữ cảnh được liên kết với chúng. Khi người dùng di chuột qua điều khiển và nhấn F1, trợ giúp theo ngữ cảnh sẽ được kích hoạt. Các
tùy chọn trợ giúp theo ngữ cảnh bao gồm liên kết đến một URL bên ngoài, khởi chạy tệp trợ giúp (chm) được cài đặt cục bộ hoặc liên kết đến một chủ đề trên wiki trợ giúp
Autodesk. Lớp ContextualHelp được sử dụng để tạo một loại trợ giúp theo ngữ cảnh và sau đó RibbonItem.SetContextualHelp () (hoặc RibbonItemData.SetContextualHelp ()) liên
kết nó với một điều khiển. Khi một phiên bản ContextualHelp được liên kết với một điều khiển, văn bản "Nhấn F1 để được trợ giúp thêm" sẽ xuất hiện bên dưới chú giải công
cụ khi con chuột di chuột qua điều khiển, như được hiển thị bên dưới.
Ví dụ sau liên kết Trợ giúp theo ngữ cảnh mới với điều khiển nút nhấn. Nhấn F1 khi di chuột qua nút nhấn sẽ mở trang chủ Autodesk trong cửa sổ trình duyệt mới.
Lớp ContextualHelp có phương thức Launch () có thể được gọi để hiển thị chủ đề trợ giúp được chỉ định bởi nội dung của đối tượng ContextualHelp này bất kỳ lúc nào, giống
như khi phím F1 được nhấn khi điều khiển đang hoạt động. Điều này cho phép liên kết các chủ đề trợ giúp với các thành phần giao diện người dùng bên trong hộp thoại được
tạo bởi một ứng dụng bổ trợ.
Tất cả các điều khiển này có thể có một hình ảnh được liên kết với chúng bằng cách sử dụng thuộc tính LargeImage. Kích thước tốt nhất cho hình ảnh được liên kết với các
nút điều khiển lớn, chẳng hạn như dải băng và nút thả xuống không xếp chồng lên nhau, là 32 × 32 pixel, nhưng hình ảnh lớn hơn sẽ được điều chỉnh để vừa với nút. Các nút
xếp chồng và các điều khiển nhỏ như hộp văn bản và hộp tổ hợp phải có tập hợp hình ảnh 16 × 16 pixel. Các nút lớn cũng phải có hình ảnh 16 × 16 pixel được đặt cho thuộc
tính Hình ảnh. Hình ảnh này được sử dụng nếu lệnh được chuyển đến Thanh công cụ Truy nhập Nhanh. Nếu thuộc tính Hình ảnh không được đặt, sẽ không có hình ảnh nào được
hiển thị nếu lệnh được chuyển đến Thanh công cụ Truy nhập Nhanh. Lưu ý rằng nếu sử dụng hình ảnh lớn hơn 16 × 16 pixel, nó sẽ KHÔNG được điều chỉnh để vừa với thanh công
cụ.
ToolTipImage sẽ được hiển thị bên dưới LongDescription trong chú giải công cụ mở rộng, nếu được cung cấp. Không có kích thước được khuyến nghị cho hình ảnh này.
Các điều khiển ruy-băng có thể được bật hoặc tắt với thuộc tính RibbonItem.Enabled hoặc được hiển thị hoặc ẩn với thuộc tính RibbonItem.Vither.
Machine Translated by Google
Ngoài các điều khiển sau, dấu phân cách dọc có thể được thêm vào bảng dải băng để nhóm các bộ điều khiển có liên quan.
Nút ấn
Có ba loại nút bạn có thể thêm vào bảng điều khiển: nút nhấn đơn giản, nút thả xuống và nút chia nhỏ. Nút HelloWorld trong Hình 13 là một nút nhấn. Khi nhấn
nút, lệnh tương ứng sẽ được kích hoạt.
Ngoài thuộc tính Enabled, PushButton có thuộc tính Av AvailableClassName có thể được sử dụng để đặt tên của giao diện IExternalCommandAv Khả dụng
điều khiển khi lệnh có sẵn.
Các nút thả xuống mở rộng để hiển thị hai hoặc nhiều lệnh trong menu thả xuống. Trong Revit API, các nút thả xuống được gọi là PulldownButtons. Các dấu phân
cách ngang có thể được thêm vào giữa các mục trong menu thả xuống.
Mỗi lệnh trong trình đơn thả xuống cũng có thể có một LargeImage được liên kết như thể hiện trong ví dụ trên.
Các nút tách là các nút thả xuống có gắn một nút nhấn mặc định. Nửa trên của nút hoạt động giống như một nút nhấn trong khi nửa dưới hoạt động như một
nút thả xuống. Nút Tùy chọn Một trong Hình 13 là một nút tách.
Ban đầu, nút nhấn sẽ là mục hàng đầu trong danh sách thả xuống. Tuy nhiên, bằng cách sử dụng thuộc tính IsSynchronizedWithCurrentItem, lệnh mặc định (được
hiển thị dưới dạng nút nhấn nửa trên của nút tách) có thể được đồng bộ hóa với lệnh được sử dụng cuối cùng. Theo mặc định, nó sẽ được đồng bộ hóa. Chọn
Tùy chọn Hai trong nút tách từ Hình 13 sản lượng trên:
Hình 16: Nút tách được đồng bộ hóa với mục hiện tại
Lưu ý rằng các thuộc tính ToolTip, ToolTipImage và LongDescription cho SplitButton bị bỏ qua. Chú giải công cụ cho nút nhấn hiện tại được hiển thị thay thế.
Machine Translated by Google
// tạo nút nhấn cho nút chia nhỏ thả xuống PushButtonData bOne =
5. 6. new PushButtonData ("ButtonNameA", "Option One", assembly, "Hello.HelloOne"); bOne.LargeImage
= new BitmapImage (new Uri (@ "D: \ Sample \ HelloWorld \ bin \ Debug \ One.bmp"));
7. 8.
9.
10.
11. PushButtonData bTwo = new PushButtonData ("ButtonNameB", "Tùy chọn Hai", assembly,
12. "Hello.HelloTwo"); bTwo.LargeImage = new BitmapImage (new Uri (@ "D: \ Sample \
13. HelloWorld \ bin \ Debug \ Two.bmp"));
14.
15.
16. PushButtonData bThree = new PushButtonData ("ButtonNameC", "Tùy chọn Ba", assembly,
17. "Hello.HelloThree"); bThree.LargeImage = new BitmapImage (new Uri (@ "D: \ Sample \ HelloWorld \
18. bin \ Debug \ Three.bmp"));
19.
20.
21. SplitButtonData sb1 = new SplitButtonData ("splitButton1", "Split"); SplitButton sb =
22. panel.AddItem (sb1) dưới dạng SplitButton; sb.AddPushButton (bOne); sb.AddPushButton
23. (bTwo); sb.AddPushButton (bThree);
24.
25.
26. }
Nhóm nút radio là một tập hợp các nút bật tắt loại trừ lẫn nhau; mỗi lần chỉ có thể chọn một. Sau khi thêm RadioButtonGroup vào một bảng điều khiển, hãy sử dụng các phương thức
AddItem () hoặc AddItems () để thêm các nút bật tắt vào nhóm. Các nút chuyển đổi có nguồn gốc từ PushButton. Thuộc tính RadioButtonGroup.Current có thể được sử dụng để truy cập
vào nút hiện đang được chọn.
Lưu ý rằng chú giải công cụ không áp dụng cho các nhóm nút radio. Thay vào đó, chú giải công cụ cho mỗi nút bật tắt được hiển thị khi chuột di chuyển qua các nút riêng lẻ.
// tạo nút bật tắt và thêm vào nhóm nút radio ToggleButtonData tb1 = new
7. 8. ToggleButtonData ("toggleButton1", "Red"); tb1.ToolTip = "Tùy chọn màu đỏ"; tb1.LargeImage
= new BitmapImage (new Uri (@ "D: \ Sample \ HelloWorld \ bin \ Debug \ Red.bmp"));
9. 10. ToggleButtonData tb2 = new ToggleButtonData ("toggleButton2", "Xanh lục"); tb2.ToolTip = "Tùy chọn màu xanh lá
11. cây"; tb2.LargeImage = new BitmapImage (new Uri (@ "D: \ Sample \ HelloWorld \ bin \ Debug \ Green.bmp"));
12. ToggleButtonData tb3 = new ToggleButtonData ("toggleButton3", "Xanh lam"); tb3.ToolTip = "Tùy chọn màu xanh lam";
13. tb3.LargeImage = new BitmapImage (new Uri (@ "D: \ Sample \ HelloWorld \ bin \ Debug \ Blue.bmp"));
14. radioButtonGroup.AddItem (tb1); radioButtonGroup.AddItem (tb2); radioButtonGroup.AddItem (tb3);
15.
16.
17.
18.
19.
20. }
Hộp văn bản là một điều khiển đầu vào để người dùng nhập văn bản. Hình ảnh cho hộp văn bản có thể được sử dụng như một nút có thể nhấp bằng cách đặt thuộc
tính ShowImageAsButton thành true. Mặc định này sai. Hình ảnh được hiển thị ở bên trái của hộp văn bản khi ShowImageAsButton là false và được hiển thị ở cuối bên phải của
hộp văn bản khi nó hoạt động như một nút, như trong Hình 13.
Văn bản được nhập vào hộp văn bản chỉ được chấp nhận nếu người dùng nhấn phím Enter hoặc nếu họ nhấp vào hình ảnh được liên kết khi hình ảnh được hiển thị dưới dạng nút. Nếu
không, văn bản sẽ trở lại giá trị trước đó của nó.
Ngoài việc cung cấp chú giải công cụ cho hộp văn bản, thuộc tính PromptText có thể được sử dụng để cho người dùng biết loại thông tin cần nhập vào hộp văn bản. Văn bản
lời nhắc được hiển thị khi hộp văn bản trống và không có tiêu điểm bàn phím. Văn bản này được hiển thị ở dạng nghiêng.
Hộp văn bản trong Hình 13 có dòng chữ nhắc "Nhập nhận xét".
Chiều rộng của hộp văn bản có thể được đặt bằng cách sử dụng thuộc tính Chiều rộng. Giá trị mặc định là 200 đơn vị độc lập với thiết bị.
Machine Translated by Google
Sự kiện TextBox.EnterPressed được kích hoạt khi người dùng nhấn enter hoặc khi họ nhấp vào hình ảnh được liên kết cho hộp văn bản khi ShowImageAsButton được đặt thành true. Khi triển
khai một trình xử lý sự kiện EnterPressed, hãy truyền đối tượng người gửi tới TextBox để nhận giá trị mà người dùng đã nhập như được hiển thị trong ví dụ sau.
// ép kiểu người gửi dưới dạng TextBox để lấy giá trị văn bản
TextBox textBox = sender as TextBox; string strText =
textBox.Value as string;
4. 5. 6. }
Thuộc tính ItemText kế thừa không có tác dụng đối với TextBox. Văn bản do người dùng nhập có thể được lấy từ thuộc tính Giá trị, thuộc tính này phải được chuyển đổi thành chuỗi.
Xem phần về các mục ruy-băng xếp chồng lên nhau để biết ví dụ về cách thêm TextBox vào bảng điều khiển ruy-băng, bao gồm cách đăng ký sự kiện ở trên.
Hộp tổ hợp là một hộp kéo xuống với một tập hợp các mục có thể chọn. Sau khi thêm ComboBox vào bảng điều khiển, hãy sử dụng phương thức AddItem () hoặc AddItems () để thêm ComboBoxMembers
vào danh sách.
Dấu phân tách cũng có thể được thêm vào các mục riêng biệt trong danh sách hoặc các thành viên có thể được nhóm tùy ý bằng cách sử dụng thuộc tính ComboBoxMember.GroupName. Tất cả các
thành viên có cùng Tên nhóm sẽ được nhóm lại với nhau với tiêu đề hiển thị tên nhóm. Bất kỳ mục nào không được gán GroupName sẽ được đặt ở đầu danh sách. Lưu ý rằng khi nhóm các mục,
không nên sử dụng dấu phân cách vì chúng sẽ được đặt ở cuối nhóm hơn là theo thứ tự chúng được thêm vào.
ComboBox có ba sự kiện:
• CurrentChanged - được kích hoạt khi mục hiện tại của ComboBox được thay đổi
• DropDownClosed - được kích hoạt khi menu thả xuống của ComboBox đóng lại
• DropDownClosed - được kích hoạt khi menu thả xuống của ComboBox được mở
Xem vùng mã trong phần sau trên các mục ruy-băng xếp chồng lên nhau để biết mẫu thêm ComboBox vào bảng điều khiển ruy-băng.
Để tiết kiệm không gian bảng điều khiển, bạn có thể thêm các mục bảng điều khiển nhỏ thành chồng hai hoặc ba. Mỗi mục trong ngăn xếp có thể là một nút nhấn, một nút thả xuống, một hộp tổ
hợp hoặc một hộp văn bản. Không thể xếp chồng lên nhau các nhóm nút radio và nút tách. Các nút xếp chồng phải có hình ảnh được liên kết thông qua thuộc tính Hình ảnh của chúng, thay vì Hình
ảnh lớn. Hình ảnh 16 × 16 là lý tưởng cho các nút nhỏ xếp chồng lên nhau.
Machine Translated by Google
Ví dụ sau tạo hộp văn bản và hộp tổ hợp xếp chồng trong Hình 13.
Vùng mã: Thêm hộp văn bản và hộp tổ hợp dưới dạng các mục xếp chồng lên nhau
Sử dụng phương thức RibbonPanel.AddSlideOut () để thêm một trang trình bày vào cuối bảng điều khiển ruy-băng. Khi một trang trình bày được thêm vào,
một mũi tên sẽ hiển thị ở cuối bảng điều khiển, khi được nhấp vào sẽ hiển thị trang trình bày. Sau khi gọi AddSlideOut (), các lệnh gọi tiếp theo để thêm
các mục mới vào bảng sẽ được thêm vào slide-out, do đó, slide-out phải được thêm sau khi tất cả các điều khiển khác đã được thêm vào bảng ribbon.
5. panel.AddSlideOut ();
6.
7. // tạo một số điều khiển cho trang trình bày
số 8.
PushButtonData b1 = new PushButtonData ("ButtonName1", "Nút 1",
9. assembly, "Hello.HelloButton");
10. b1.LargeImage = new BitmapImage (new Uri (@
11. "D: \ Sample \ HelloWorld \ bin \ Debug \ 39-Globe_32x32.png"));
12. PushButtonData b2 = new PushButtonData ("ButtonName2", "Nút 2", assembly,
13. "Hello.HelloTwo"); b2.LargeImage = new BitmapImage (new Uri (@ "D: \ Sample \
14. HelloWorld \ bin \ Debug \ 39-Globe_16x16.png"));
15.
16.
17. // các mục được thêm vào sau khi gọi AddSlideOut () được thêm vào bảng điều khiển tự động slide-
18. out.AddItem (b1); panel.AddItem (b2);
19.
Machine Translated by Google
TaskDialog là một sự thay thế kiểu Revit cho một MessageBox đơn giản của Windows. Nó có thể được sử dụng để hiển thị thông tin và nhận đầu vào đơn giản từ người dùng.
Nó có một bộ điều khiển chung được sắp xếp theo thứ tự tiêu chuẩn để đảm bảo giao diện nhất quán với phần còn lại của Revit.
Có hai cách để tạo và hiển thị hộp thoại tác vụ cho người dùng. Tùy chọn đầu tiên là xây dựng TaskDialog, đặt các thuộc tính của nó riêng lẻ và sử dụng phương
thức thể hiện Show () để hiển thị nó cho người dùng. Cách thứ hai là sử dụng một trong các phương thức Show () tĩnh để tạo và hiển thị hộp thoại trong một bước. Khi bạn
sử dụng các phương thức tĩnh, chỉ một tập hợp con của các tùy chọn có thể được chỉ định.
Vui lòng xem Hộp thoại Tác vụ trong Nguyên tắc giao diện người dùng API để biết thông tin về cách phát triển hộp thoại tác vụ tuân thủ các tiêu chuẩn được sử dụng
bởi Autodesk.
Ví dụ sau đây cho thấy cách tạo và hiển thị hộp thoại tác vụ được hiển thị ở trên.
[Autodesk.Revit.Attributes.Transaction (Autodesk.Revit.Attributes.TransactionMode.Automatic)]
lớp TaskDialogExample: IExternalCommand
{
public Autodesk.Revit.UI.Result Execute (ExternalCommandData commandData, ref string message, Autodesk.Revit.DB.ElementSet element)
{
// Lấy ứng dụng và tài liệu từ dữ liệu lệnh bên ngoài.
Ứng dụng ứng dụng = commandData.Application.Application;
Tài liệu activeDoc = commandData.Application.ActiveUIDocument.Document;
// Tạo hộp thoại tác vụ Revit để truyền đạt thông tin cho người dùng.
TaskDialog mainDialog = new TaskDialog ("Xin chào, Revit!");
mainDialog.MainInstruction = "Xin chào, Revit!";
mainDialog.MainContent =
"Mẫu này cho thấy cách sử dụng hộp thoại tác vụ Revit để giao tiếp với người dùng."
+ "Lệnh liên kết bên dưới mở hộp thoại nhiệm vụ bổ sung với nhiều thông tin hơn.";
// Đặt các nút thông thường và nút mặc định. Nếu không có CommonButton hoặc CommandLink nào được thêm vào,
// hộp thoại tác vụ sẽ hiển thị nút Đóng theo mặc định
mainDialog.CommonButtons = TaskDialogCommonButtons.Close;
mainDialog.DefaultButton = TaskDialogResult.Close;
// Đặt văn bản chân trang. Văn bản chân trang thường được sử dụng để liên kết đến tài liệu trợ giúp.
mainDialog.FooterText =
"<a href=\"http://usa.autodesk.com/adsk/servlet/index?siteID=123112&id=2484975 \">"
+ "Nhấp vào đây để xem Trung tâm nhà phát triển API Revit </a>";
Machine Translated by Google
// Nếu người dùng nhấp vào liên kết lệnh đầu tiên, Hộp thoại Tác vụ đơn giản // chỉ
với một nút Đóng sẽ hiển thị thông tin về cài đặt Revit. if (TaskDialogResult.CommandLink1 ==
tResult)
{
Hộp thoại TaskDialog_CommandLink1 = new TaskDialog ("Thông tin bản dựng Revit");
Dial_CommandLink1.MainInstruction =
"Tên Phiên bản Revit là:" + app.VersionName + "\ n"
+ "Số Phiên bản Revit là:" + app.VersionNumber + "\ n" +
+ "Phiên bản Revit Build là:" app.VersionBuild;
// Nếu người dùng nhấp vào liên kết lệnh thứ hai, Hộp thoại Tác vụ đơn giản // được tạo
bằng phương thức tĩnh hiển thị thông tin về tài liệu đang hoạt động
else if (TaskDialogResult.CommandLink2 == tResult)
{
TaskDialog.Show ("Thông tin Tài liệu Hoạt động", "Tài liệu
đang hoạt động:" + activeDoc.Title + "\ n"
"
+ "Tên chế độ xem đang kích hoạt:
+ activeDoc.ActiveView.Name);
}
trả về Autodesk.Revit.UI.Result.Succeeded;
}
}
Machine Translated by Google
của ứng dụng là gán các sự kiện và / hoặc các trình cập nhật cho phiên Revit.
Để thêm Ứng dụng bên ngoài cấp DB vào Revit, bạn tạo một đối tượng triển khai giao diện IExternalDBApplication.
Giao diện IExternalDBApplication có hai phương thức trừu tượng, OnStartup () và OnShutdown (), mà bạn ghi đè trong ứng dụng bên ngoài cấp DB của mình. Revit gọi OnStartup () khi
nó khởi động và OnShutdown () khi nó đóng. Điều này rất giống với IExternalApplication, nhưng lưu ý rằng các phương thức này trả về Autodesk.Revit.DB.ExternalDBApplicationResult
Tham số Kiểm soát ứng dụng cung cấp quyền truy cập vào các sự kiện cơ sở dữ liệu Revit . Các sự kiện và bản cập nhật mà ứng dụng cấp cơ sở dữ liệu sẽ phản hồi có thể được đăng
• Đối tượng ứng dụng đề cập đến một phiên Revit riêng lẻ, cung cấp quyền truy cập vào tài liệu, tùy chọn và dữ liệu toàn ứng dụng khác
và cài đặt.
o Autodesk.Revit.UI.UIApplication - cung cấp quyền truy cập vào các giao diện cấp UI cho ứng dụng, bao gồm khả năng thêm
RibbonPanels cho giao diện người dùng và khả năng lấy tài liệu hoạt động trong giao diện người dùng.
o Autodesk.Revit.ApplicationServices.Application - cung cấp quyền truy cập vào tất cả các thuộc tính cấp ứng dụng khác.
• Đối tượng tài liệu là một tệp dự án Revit duy nhất đại diện cho một mô hình xây dựng. Revit có thể mở nhiều dự án và nhiều
lượt xem cho một dự án.
o Autodesk.Revit.UI.UIDocument - cung cấp quyền truy cập vào các giao diện cấp UI cho tài liệu, chẳng hạn như nội dung của
lựa chọn và khả năng nhắc người dùng thực hiện các lựa chọn và chọn điểm
o Autodesk.Revit.DB.Document - cung cấp quyền truy cập vào tất cả các thuộc tính cấp tài liệu khác
• Nếu nhiều tài liệu đang mở, tài liệu đang hoạt động là tài liệu có chế độ xem đang hoạt động trong phiên Revit.
Chương này xác định tất cả các chức năng của Ứng dụng và Tài liệu, sau đó tập trung vào quản lý tệp, cài đặt và đơn vị. Để biết thêm chi tiết về lớp Element,
hãy tham khảo Elements Essentials và các phần tử chỉnh sửa và tham khảo Chế độ xem để biết thêm chi tiết về các phần tử xem.
Đăng kí
Lớp này đại diện cho Ứng dụng Autodesk Revit, cung cấp quyền truy cập vào tài liệu, tùy chọn và dữ liệu và cài đặt toàn ứng dụng khác.
Thuộc tính ứng dụng bao gồm VersionBuild, VersionNumber và VersionName. Chúng có thể được sử dụng để cung cấp hành vi bổ trợ dựa trên việc phát hành và xây
dựng Revit, như được hiển thị trong Cách sử dụng thuộc tính Ứng dụng để thực thi một phiên bản chính xác cho bổ trợ của bạn.
Thuộc tính SharedParametersFilename và các phương thức GetLibraryPaths () và SetLibraryPaths () cung cấp quyền truy cập vào các cài đặt toàn ứng dụng này.
Lớp Ứng dụng cung cấp các phương thức để tạo các loại tài liệu sau:
• Tài liệu dự án
• Mẫu dự án
Phương thức OpenDocumentFile () có thể được sử dụng để mở bất kỳ loại tài liệu nào trong số này.
Tất cả các tài liệu đang mở có thể được truy xuất bằng cách sử dụng thuộc tính Documents.
Để biết thêm chi tiết, hãy xem Tài liệu và Quản lý.
Các thuộc tính như UserName và các phương thức như GetRevitServerNetworkHosts () cung cấp quyền truy cập chỉ đọc vào thông tin cụ thể của phiên này.
Revit sử dụng một tệp thông số được chia sẻ tại một thời điểm. Phương thức Application.OpenSharedParameterFile () truy cập tệp tham số được chia sẻ có
đường dẫn được đặt trong thuộc tính SharedParametersFilename. Để biết thêm chi tiết, hãy xem Thông số được chia sẻ.
Machine Translated by Google
Sự kiện
Lớp Ứng dụng hiển thị các sự kiện tài liệu và ứng dụng như mở và lưu tài liệu. Đăng ký các sự kiện này sẽ thông báo cho ứng dụng khi các sự kiện được bật
và hoạt động tương ứng. Để biết thêm chi tiết, hãy xem Truy cập vào Sự kiện Revit trong Tích hợp bổ trợ tiết diện.
Tạo ra
Thuộc tính Create trả về Object Factory được sử dụng để tạo các đối tượng hình học và tiện ích cho toàn ứng dụng trong Revit Platform API. Tạo được sử dụng
khi bạn muốn tạo một đối tượng trong bộ nhớ ứng dụng Revit hơn là bộ nhớ ứng dụng của bạn.
Đăng và xử lý lỗi
FailureDefinitionRegistry, chứa tất cả các FailureDefinitions đã đăng ký có sẵn từ phương thức GetFailureDefinitionRegistry () tĩnh. Phương thức tĩnh
RegisterFailuresProcessor () có thể được sử dụng để đăng ký IFailuresProcessor tùy chỉnh. Để biết thêm thông tin về việc đăng và xử lý lỗi, hãy xem Đăng và xử
lý lỗi.
Lớp này đại diện cho một phiên hoạt động của giao diện người dùng Autodesk Revit, cung cấp quyền truy cập vào các phương pháp, sự kiện tùy chỉnh giao diện người dùng và
tài liệu đang hoạt động.
Ứng dụng UIA cung cấp quyền truy cập vào tài liệu đang hoạt động bằng thuộc tính UIActiveDocument. Ngoài ra, tài liệu Revit có thể được mở bằng phương
thức OpenAndActivateDocument () đã quá tải. Tài liệu sẽ được mở với chế độ xem mặc định đang hoạt động. Phương thức này có thể không được gọi bên trong một
giao dịch và chỉ có thể được gọi trong một sự kiện khi không có tài liệu đang hoạt động nào được mở trong Revit và sự kiện này không được lồng trong một sự
kiện khác.
Quản lý bổ trợ
Thuộc tính ActiveAddInId nhận ứng dụng bên ngoài đang hoạt động hiện tại hoặc id lệnh bên ngoài, trong khi thuộc tính LoadedApplication trả về một mảng
các ứng dụng bên ngoài được tải thành công.
Sử dụng đối tượng UIApplication để thêm các bảng điều khiển và bảng ribbon mới vào Revit.
Để biết thêm chi tiết, hãy xem Bảng điều khiển và Bảng điều khiển Ruy-băng trong Tích hợp bổ trợ tiết diện.
Phạm vi
Thuộc tính DrawingAreaExtents trả về một hình chữ nhật đại diện cho tọa độ pixel trên màn hình của khu vực vẽ, trong khi
Thuộc tính MainWindowExtents trả về hình chữ nhật đại diện cho tọa độ pixel màn hình của cửa sổ chính Revit
Sự kiện
Lớp UIApplication hiển thị các sự kiện liên quan đến giao diện người dùng, chẳng hạn như khi hộp thoại được hiển thị. Đăng ký các sự kiện này sẽ thông báo cho
ứng dụng khi các sự kiện được bật và hoạt động tương ứng. Để biết thêm chi tiết, hãy xem Truy cập vào Sự kiện Revit trong Tích hợp bổ trợ tiết diện.
Machine Translated by Google
• Application.IsArchitectureEnabled
• Application.IsStructureEnabled
• Application.IsStructuralAnalysisEnabled
• Application.IsMassingEnabled
• Application.IsEnergyAnalysisEnabled
• Application.IsSystemsEnabled
• Application.IsMechanicalEnabled
• Application.IsMechanicalAnalysisEnabled
• Application.IsElectricalEnabled
• Application.IsElectricalAnalysisEnabled
• Application.IsPipingEnabled
• Application.IsPipingAnalysisEnabled
cung cấp quyền truy cập đọc và sửa đổi đối với các lĩnh vực có sẵn. Một ứng dụng có thể đọc các thuộc tính để xác định thời điểm bật hoặc tắt các khía cạnh của giao diện người dùng của nó.
Khi trạng thái của kỷ luật được bật, giao diện người dùng của Revit sẽ được điều chỉnh và một số hoạt động và tính năng nhất định sẽ được bật hoặc tắt khi thích
hợp. Việc bật chế độ phân tích sẽ chỉ có hiệu lực nếu chế độ tương ứng được bật. Ví dụ: việc bật phân tích cơ học sẽ không có hiệu lực trừ khi tính năng cơ học
Cách sử dụng thuộc tính Ứng dụng để thực thi một phiên bản chính xác cho bổ trợ
của bạn
Đôi khi bạn cần bổ trợ của mình chỉ hoạt động khi có Bản phát hành cập nhật Revit cụ thể do sự hiện diện của các bản sửa lỗi cụ thể hoặc các API tương thích. Mã
mẫu sau đây trình bày một kỹ thuật để xác định xem phiên bản Revit có phải là bất kỳ Bản phát hành Cập nhật nào sau bản phát hành Revit đã biết ban đầu hay không.
Vùng mã: Sử dụng VersionBuild để xác định xem bổ trợ của bạn có tương thích không
// 20110309_2315 là mã dữ liệu của bản phát hành đầu tiên của Revit 2012 if (app.VersionNumber
4. == "2012" && String.Compare (app.VersionBuild, "20110309_2315") > 0)
5.
6. {
7. TaskDialog.Show (" Phiên bản được hỗ trợ", "Ứng
số 8.
dụng này được hỗ trợ trong phiên bản này.");
9. 10. }
11. khác {
12. Hộp thoại TaskDialog = new TaskDialog ("Phiên bản không được hỗ trợ."); hộp
13. thoại.MainIcon = TaskDialogIcon.TaskDialogIconWarning; Hộp thoại.MainInstruction
14. = "Ứng dụng này chỉ được hỗ trợ trong Revit 2012 UR1 trở lên."; hộp thoại.Show ();
15.
16. }
Machine Translated by Google
Tài liệu lưu trữ Phần tử Revit, quản lý dữ liệu và cập nhật nhiều chế độ xem dữ liệu. Lớp Document chủ yếu cung cấp các chức năng sau.
Tài liệu
Lớp Tài liệu đại diện cho một dự án Autodesk Revit đang mở.
Thuộc tính Cài đặt trả về một đối tượng cung cấp quyền truy cập vào các thành phần chung trong các dự án Revit. Để biết thêm chi tiết, hãy xem Cài đặt.
Mỗi dự án chỉ có một vị trí địa điểm xác định vị trí thực tế của dự án trên Trái đất. Có thể có một số vị trí dự án cho một dự án. Mỗi vị trí là một phần bù
hoặc vòng quay của vị trí trang web. Để biết thêm chi tiết, hãy xem Địa điểm và Vị trí.
Document cung cấp các thuộc tính như FloorTypes, WallTypes, v.v. Tất cả các thuộc tính trả về một đối tượng tập hợp chứa các kiểu tương ứng
được tải vào dự án.
Xem quản lý
Một tài liệu dự án có thể có nhiều dạng xem. Thuộc tính ActiveView trả về một đối tượng View đại diện cho chế độ xem hiện hoạt. Bạn có thể lọc các phần tử
trong dự án để lấy các khung nhìn khác. Để biết thêm chi tiết, hãy xem Chế độ xem.
Đối tượng Document lưu trữ các phần tử trong dự án. Truy xuất các phần tử cụ thể theo ElementId hoặc UniqueId bằng cách sử dụng thuộc tính Element.
Quản lý tệp
Mỗi đối tượng Document đại diện cho một tệp dự án Revit. Tài liệu cung cấp các chức năng sau:
• Truy xuất thông tin tệp như tên đường dẫn tệp và tiêu đề dự án.
• Cung cấp các phương thức Close () và Save () để đóng và lưu tài liệu.
Để biết thêm chi tiết, hãy xem Quản lý tài liệu và tệp.
Quản lý yếu tố
Revit duy trì tất cả các đối tượng Element trong một dự án. Để tạo các phần tử mới, hãy sử dụng thuộc tính Create trả về một Object Factory được sử dụng
để tạo các phiên bản phần tử dự án mới trong Revit Platform API, chẳng hạn như FamilyInstance hoặc Group.
Lớp Document cũng có thể được sử dụng để xóa các phần tử. Sử dụng phương thức Delete () để xóa một phần tử trong dự án. Các phần tử đã xóa và bất kỳ phần tử phụ
thuộc nào không được hiển thị và bị xóa khỏi Tài liệu. Các tham chiếu đến các phần tử đã xóa không hợp lệ và gây ra một ngoại lệ. Để biết thêm chi tiết, hãy xem
phần Chỉnh sửa.
Sự kiện
Sự kiện được đưa ra trên một số hành động nhất định, chẳng hạn như khi bạn lưu dự án bằng Lưu hoặc Lưu dưới dạng. Để nắm bắt các sự kiện và phản hồi
trong ứng dụng, bạn phải đăng ký trình xử lý sự kiện. Để biết thêm chi tiết, hãy xem Sự kiện.
Machine Translated by Google
Một số thuộc tính cung cấp thông tin về trạng thái của tài liệu:
• IsModifiable - liệu tài liệu có thể được sửa đổi hay không
• IsModified - liệu tài liệu đã được thay đổi kể từ khi nó được mở hay được lưu hay chưa
• IsReadOnly - cho dù tài liệu hiện chỉ được đọc hay có thể được sửa đổi
• IsFamilyDocument - liệu tài liệu có phải là tài liệu gia đình hay không
• IsWorkshared - các trang tính đã được bật trong tài liệu chưa
Khác
• Thuộc tính ParameterBindings - Ánh xạ giữa các định nghĩa tham số và danh mục. Để biết thêm chi tiết, hãy xem Thông số được chia sẻ.
• Thuộc tính ReactionsAreUpToDate - Báo cáo xem tải phản động có thay đổi hay không. Để biết thêm chi tiết, hãy xem Tải trong Cấu trúc Revit
tiết diện.
UIDocument
Lớp UIDocument đại diện cho một dự án Autodesk Revit được mở trong giao diện người dùng Revit.
Truy xuất các phần tử đã chọn bằng cách sử dụng thuộc tính Lựa chọn trong UIDocument. Thuộc tính này trả về một đối tượng đại diện cho lựa chọn đang hoạt
động có chứa các phần tử dự án đã chọn. Nó cũng cung cấp các phương pháp tương tác UI để chọn các đối tượng trong mô hình Revit.
Phương thức ShowElements () sử dụng thu phóng để vừa với tập trung vào một phần tử nữa.
Xem quản lý
Lớp UIDocument có thể được sử dụng để làm mới dạng xem hiện hoạt trong tài liệu hiện hoạt bằng cách gọi phương thức RefreshActiveView (). Thuộc tính
ActiveView có thể được sử dụng để truy xuất hoặc đặt chế độ xem hiện hoạt cho tài liệu. Thay đổi chế độ xem hiện hoạt có một số hạn chế. Nó chỉ có thể được
sử dụng trong một tài liệu đang hoạt động, tài liệu này không được ở trạng thái chỉ đọc và không được ở bên trong một giao dịch. Ngoài ra, chế độ xem hiện
hoạt không được thay đổi trong sự kiện Kích hoạt hoặc Chế độ xem đã kích hoạt hoặc trong bất kỳ sự kiện trước hành động nào, chẳng hạn như Lưu tài liệu, Khoá
tài liệu hoặc các sự kiện tương tự khác.
UIDocument cũng có thể được sử dụng để lấy danh sách tất cả các cửa sổ dạng xem đang mở trong giao diện người dùng Revit. Phương thức GetOpenUIViews trả về
danh sách các UIView chứa dữ liệu về các cửa sổ xem trong giao diện người dùng Revit.
Machine Translated by Google
Quản lý tài liệu và tệp giúp bạn dễ dàng tạo và tìm tài liệu của mình.
Lớp Ứng dụng duy trì tất cả các tài liệu. Như đã đề cập trước đây, bạn có thể mở nhiều tài liệu trong một phiên. Tài liệu hoạt động được truy xuất bằng thuộc tính lớp UIApplication,
ActiveUIDocument.
Tất cả các tài liệu đang mở, bao gồm cả tài liệu đang hoạt động, được truy xuất bằng thuộc tính Tài liệu lớp Ứng dụng. Thuộc tính trả về một tập hợp chứa tất cả các tài liệu đang mở trong
phiên Revit.
Lớp Document cung cấp hai thuộc tính cho mỗi tệp tương ứng, PathName và Title.
• PathName trả về đường dẫn tệp đủ điều kiện của tài liệu. PathName trả về một chuỗi trống nếu dự án chưa được lưu
kể từ khi nó được tạo ra.
• Title là tiêu đề dự án, thường bắt nguồn từ tên tệp dự án. Giá trị trả về thay đổi tùy theo cài đặt hệ thống của bạn.
Mở tài liệu
Lớp Ứng dụng cung cấp một phương thức được nạp chồng để mở tệp dự án hiện có:
Khi bạn chỉ định một chuỗi có đường dẫn tệp đủ điều kiện, Revit sẽ mở tệp và tạo một cá thể Tài liệu. Sử dụng phương pháp này để mở tệp trên máy tính khác bằng cách gán tên Chuyển đổi đặt
tên chung (UNC) tệp cho phương pháp này.
Tệp có thể là tệp dự án có phần mở rộng .rvt, tệp gia đình có phần mở rộng .rfa hoặc tệp mẫu có phần mở rộng .rte.
Quá tải thứ hai đưa một đường dẫn đến mô hình dưới dạng ModelPath chứ không phải là một chuỗi và tham số OpenOptions cung cấp các tùy chọn để mở tệp,
chẳng hạn như khả năng tách tài liệu đã mở khỏi trung tâm nếu có, cũng như các tùy chọn liên quan đến chia sẻ công việc. Để biết thêm thông tin về cách mở
tài liệu chia sẻ công việc, hãy xem Mở tài liệu chia sẻ công việc.
Các phương pháp này đưa ra các trường hợp ngoại lệ được ghi lại bằng văn bản cụ thể trong trường hợp không thành công. Các trường hợp ngoại lệ được chia thành 4 loại chính.
Lỗi đĩa Tệp không tồn tại hoặc là phiên bản sai
Lỗi tài nguyên Không đủ bộ nhớ hoặc dung lượng đĩa để mở tệp
Mô hình trung tâm / lỗi máy chủ Lỗi giao tiếp mạng với máy chủ
Nếu tài liệu được mở thành công, sự kiện DocumentOpened sẽ xuất hiện.
Tạo tài liệu mới bằng cách sử dụng các phương pháp Ứng dụng trong bảng sau.
Mỗi phương thức yêu cầu một tên tệp mẫu làm tham số. Tài liệu đã tạo được trả về dựa trên tệp mẫu.
Lớp Tài liệu cung cấp các phương thức để lưu hoặc đóng các thể hiện.
SaveAs () DocumentSavedAs
Save () có 2 quá tải, một không có đối số và một có đối số SaveOptions có thể chỉ định xem có buộc HĐH xóa tất cả dữ liệu đã chết khỏi tệp trên đĩa hay không. Nếu tệp chưa được
lưu trước đó, thay vào đó, SaveAs () phải được gọi.
SaveAs () có 3 lần quá tải. Một quá tải chỉ lấy tên tệp làm đối số và một ngoại lệ sẽ được ném ra nếu một tệp khác tồn tại với tên tệp đã cho. 2 quá tải khác lấy tên tệp làm
đối số (ở dạng ModelPath trong một trường hợp) cũng như đối số SaveAsOptions thứ hai chỉ định xem có đổi tên tệp hay không và / hoặc có ghi đè và tệp hiện có hay không, nếu nó
tồn tại. SaveAsOptions cũng có thể được sử dụng để chỉ định các tùy chọn liên quan khác, chẳng hạn như có xóa dữ liệu đã chết trên đĩa liên quan đến tệp hay không và các tùy
chọn chia sẻ công việc.
Save () và SaveAs () ném các ngoại lệ cụ thể đã được lập thành tài liệu vào 4 danh mục giống như khi mở một tài liệu và được liệt kê trong Bảng 4 ở trên.
Close () có hai quá tải. Một lấy đối số Boolean cho biết có nên lưu tệp trước khi đóng nó hay không. Quá tải thứ hai không có đối số và nếu tài liệu đã được sửa đổi, người dùng
sẽ được hỏi xem họ có muốn lưu tệp trước khi đóng hay không. Phương thức này sẽ đưa ra một ngoại lệ nếu tên đường dẫn của tài liệu chưa được đặt hoặc nếu tệp đích đang lưu ở
chế độ chỉ đọc.
Ghi chú
Phương thức Close () không ảnh hưởng đến tài liệu đang hoạt động hoặc làm tăng sự kiện DocumentClosed, vì tài liệu được sử dụng bởi một ứng dụng bên ngoài. Bạn chỉ có thể gọi
phương thức này trên các tài liệu không hoạt động.
Lớp UIDocument cũng cung cấp các phương thức để lưu và đóng các thể hiện.
SaveAndClose () đóng tài liệu sau khi lưu nó. Nếu tên đường dẫn của tài liệu chưa được đặt, hộp thoại "Lưu dưới dạng" sẽ được hiển thị cho người dùng Revit để đặt tên và vị
trí của nó.
Phương thức SaveAs () lưu tài liệu vào tên tệp và đường dẫn thu được từ người dùng Revit thông qua hộp thoại "Lưu dưới dạng".
Lớp DocumentPreviewSettings có thể được lấy từ Tài liệu và chứa các cài đặt liên quan đến việc lưu hình ảnh xem trước cho một tài liệu nhất định.
Machine Translated by Google
Lớp Tài liệu cung cấp cho bạn khả năng tải toàn bộ họ và tất cả các ký hiệu của nó vào dự án. Bởi vì việc tải toàn bộ họ có thể mất nhiều thời gian và nhiều
bộ nhớ, lớp Tài liệu cung cấp một phương thức tương tự, LoadFamilySymbol () để chỉ tải các ký hiệu được chỉ định.
Cài đặt
Bảng sau xác định các lệnh trong tab Quản lý giao diện người dùng Revit Platform và các API tương ứng.
Lệnh giao diện người dùng API được liên kết Tài liệu tham khảo
Cài đặt Tham số dự án Document.ParameterBindings (Chỉ dành cho tham số được chia sẻ) Xem thông số được chia sẻ
Document.ActiveProjectLocation
Cài đặt Cài đặt bổ sung Mẫu điền Lọc FilteredElementCollector trên lớp FillPatternElement Xem ghi chú sau
Cài đặt Kiểu đối tượng Document.Settings.Categories Xem ghi chú sau
Cài đặt Cài đặt cấu trúc Tải các cài đặt kết cấu liên quan có sẵn trong API Xem Cấu trúc Revit
Tính toán Diện tích và Thể tích (trên bảng Room & Area) Xem ghi chú sau
Ghi chú
• Thông tin dự án - API cung cấp lớp ProjectInfo được truy xuất bằng cách sử dụng Document.ProjectInformation để đại diện
thông tin dự án trong dự án Revit. Bảng sau xác định các API tương ứng cho các tham số Thông tin dự án.
Số dự án ProjectInfo.Number PROJECT_NUMBER
Sử dụng các thuộc tính được ProjectInfo hiển thị để truy xuất và đặt tất cả các chuỗi. Các thuộc tính này được thực hiện bởi các tham số tích hợp sẵn tương ứng. Bạn có thể lấy
hoặc đặt trực tiếp các giá trị thông qua các tham số tích hợp sẵn. Để biết thêm thông tin về cách có quyền truy cập vào các tham số này thông qua các tham số tích hợp, hãy xem
Tham số trong Elements Essential tiết diện. Cách được khuyến nghị để lấy thông tin dự án là sử dụng các thuộc tính ProjectInfo.
• Fill Patterns - Lấy tất cả các mẫu Fill trong tài liệu hiện tại bằng cách sử dụng bộ lọc FilteredElementCollector trên lớp FillPatternElement.
FillPatterns cụ thể có thể được truy xuất bằng các phương thức tĩnh FillPatternElement.GetFillPattern (Document, ElementId) hoặc FillPatternElement.GetFillPatternByName
(Document, string).
• Kiểu đối tượng - Sử dụng Settings.Categories để truy xuất tất cả thông tin trong các đối tượng Category ngoại trừ Kiểu dòng. Để biết thêm chi tiết, hãy xem Danh mục trong Elements
• Các giai đoạn - Revit duy trì thời gian tồn tại của phần tử theo các giai đoạn, đó là các khoảng thời gian riêng biệt trong vòng đời của dự án. Tất cả các giai đoạn trong một
tài liệu được truy xuất bằng cách sử dụng thuộc tính Document.Phases. Thuộc tính trả về một mảng chứa các cá thể của lớp Pha.
Tuy nhiên, API Revit không hiển thị các chức năng từ lớp Giai đoạn.
• Tùy chọn - Lệnh Tùy chọn cấu hình cài đặt chung của dự án. Bạn có thể truy xuất một cá thể Options.Application bằng cách sử dụng
Thuộc tính Application.Options. Hiện tại, lớp Options.Application chỉ hỗ trợ quyền truy cập vào đường dẫn thư viện và tệp tham số được chia sẻ.
• Tính toán diện tích và thể tích - Document.Settings.VolumeCalculationSetting cho phép bạn bật hoặc tắt tính toán thể tích,
Các đơn vị
Hai lớp chính trong Revit API để làm việc với các đơn vị là Units và FormatOptions. Lớp Units đại diện cho cài đặt mặc định của tài liệu để định dạng số với đơn vị
là chuỗi. Nó chứa một đối tượng FormatOptions cho từng loại đơn vị cũng như các cài đặt liên quan đến ký hiệu thập phân và nhóm chữ số.
Lớp Units lưu trữ một đối tượng FormatOptions cho mọi loại đơn vị hợp lệ, nhưng không phải tất cả chúng đều có thể được sửa đổi trực tiếp. Một số, như UT_Number
và UT_SiteAngle, có các định nghĩa cố định. Những người khác có các định nghĩa được tự động bắt nguồn từ các loại đơn vị khác. Ví dụ: UT_SheetLength có nguồn gốc
từ UT_Length và UT_ForceScale có nguồn gốc từ UT_Force.
Lớp FormatOptions chứa các cài đặt kiểm soát cách định dạng số với đơn vị là chuỗi. Nó chứa những cài đặt thường được chọn bởi người dùng cuối trong hộp
thoại Định dạng và được lưu trữ trong tài liệu, chẳng hạn như làm tròn, độ chính xác, đơn vị hiển thị và xem có loại bỏ dấu cách hoặc số không ở đầu hoặc ở cuối
hay không.
Lớp FormatOptions được sử dụng theo hai cách khác nhau. Một đối tượng FormatOptions trong lớp Units đại diện cho cài đặt mặc định cho tài liệu. Một đối tượng
FormatOptions được sử dụng ở nơi khác đại diện cho các cài đặt có thể tùy chọn ghi đè cài đặt mặc định.
Thuộc tính UseDefault kiểm soát xem một đối tượng FormatOptions đại diện cho định dạng mặc định hay tùy chỉnh. Nếu UseDefault là true, định dạng sẽ theo cài đặt mặc
định trong lớp Đơn vị và không có cài đặt nào khác trong đối tượng là có ý nghĩa. Nếu UseDefault là false, đối tượng chứa cài đặt tùy chỉnh ghi đè cài đặt mặc định
trong lớp Đơn vị. UseDefault luôn sai đối với các đối tượng FormatOptions trong lớp Units.
Các bảng liệt kê quan trọng liên quan đến đơn vị trong API Revit bao gồm:
• UnitType - loại đại lượng vật lý cần đo, ví dụ như chiều dài hoặc lực (UT_Length hoặc UT_Force)
• DisplayUnitType - đơn vị và định dạng hiển thị được sử dụng để định dạng số dưới dạng chuỗi hoặc chuyển đổi đơn vị (tức là DUT_METERS)
• UnitSymbolType - biểu tượng đơn vị được hiển thị trong biểu diễn chuỗi được định dạng của một số để biểu thị các đơn vị của giá trị (tức là
UST_M)
API Revit cung cấp các lớp tiện ích để tạo điều kiện làm việc với số lượng trong Revit. Lớp UnitUtils giúp dễ dàng chuyển đổi dữ liệu đơn vị đến và từ các đơn vị
nội bộ của Revit.
Revit có bảy đại lượng cơ bản, mỗi đại lượng có đơn vị bên trong riêng. Các đơn vị nội bộ này được xác định trong bảng sau.
Khối lượng
Kg (kg) Hệ mét
Lưu ý: Vì Revit lưu trữ độ dài bằng feet và các đại lượng cơ bản khác theo đơn vị hệ mét, nên một đơn vị dẫn xuất liên quan đến độ dài sẽ là một đơn vị không chuẩn
dựa trên cả hệ thống Hệ đo lường Anh và Hệ mét. Ví dụ: vì một lực được đo bằng "độ dài khối lượng trên bình phương thời gian", nó được lưu trữ bằng kg-ft / s2 .
Ví dụ sau sử dụng phương thức UnitUtils.ConvertFromInternalUnits () để nhận ứng suất chảy tối thiểu cho vật liệu tính bằng kips trên inch vuông.
Machine Translated by Google
9. 10.
11. Tài sản StructuralAsset = pse.GetStructuralAsset ();
12.
13. // Lấy ứng suất năng suất tối thiểu và chuyển đổi thành ksi
14. dMinYieldSosystem = asset.MinimumYieldSosystem;
15. dMinYieldSosystem = UnitUtils.ConvertFromInternalUnits (dMinYieldSosystem,
16. DisplayUnitType.DUT_KIPS_PER_SQUARE_INCH);
17. }
18. }
19.
20. trả lại dMinYieldS Stress;
21. }
UnitUtils cũng có thể được sử dụng để chuyển đổi giá trị từ loại đơn vị này sang loại đơn vị khác, chẳng hạn như bộ vuông sang mét vuông. Trong ví dụ sau, giá trị offset trên cùng của bức
tường được nhập bằng inch được chuyển đổi thành feet, đơn vị dự kiến để đặt giá trị đó.
3. // chuyển đổi giá trị offset do người dùng xác định thành feet từ inch trước khi đặt double
4. dOffsetFeet = UnitUtils.Convert (dOffsetIffs, DisplayUnitType.DUT_DECIMAL_INCHES,
5. DisplayUnitType.DUT_DECIMAL_FEET);
6.
Một lớp tiện ích khác, UnitFormatUtils, có thể định dạng dữ liệu hoặc phân tích cú pháp dữ liệu đơn vị được định dạng.
Phương thức nạp chồng FormatValueToString () có thể được sử dụng để định dạng một giá trị thành một chuỗi dựa trên các tùy chọn định dạng như ví dụ sau minh họa. Mật độ vật liệu được truy
xuất và sau đó giá trị được chuyển đổi thành giá trị thân thiện với người dùng với đơn vị bằng phương thức FormatValueToString ().
9. 10.
11. Tài sản StructuralAsset = pse.GetStructuralAsset ();
12.
13. dDensity = tài sản. // chuyển đổi
14. giá trị mật độ thành một chuỗi người dùng có thể đọc được bao gồm các đơn vị Units units =
15. material.Document.GetUnits (); string strDensity = UnitFormatUtils.FormatValueToString (unit,
16. UnitType.UT_UnitWeight, dDensity, false, false); string msg = string.Format (" Giá trị thô: {0} \ r \ n Giá trị định dạng: {1}", dDensity, strDensity);
17. TaskDialog.Show (" Mật độ vật liệu", msg);
18.
19. }
20. }
21. }
Phương thức UnitFormatUtils.TryParse () được nạp chồng sẽ phân tích cú pháp một chuỗi được định dạng, bao gồm các đơn vị, thành một giá trị nếu có thể, bằng cách sử dụng các đơn vị nội bộ Revit của
loại đơn vị được chỉ định. Ví dụ sau đây nhận một giá trị độ dài do người dùng nhập, giả sử là một số và đơn vị độ dài, và cố gắng phân tích cú pháp nó thành một giá trị độ dài. Kết quả được so
sánh với chuỗi đầu vào trong TaskDialog cho mục đích trình diễn.
Machine Translated by Google
7. 8.
9. string msg = string.Format ("User Input: {0} \ r \ nParsed value: {1}" , userInputLength, dParsedLength); TaskDialog.Show ("
10. Dữ liệu được phân tích cú pháp", msg);
11. }
12.
13. trả về dParsedLength;
Machine Translated by Google
Yếu tố cơ bản
Phần tử tương ứng với một tòa nhà hoặc thành phần bản vẽ, chẳng hạn như cửa, tường hoặc một kích thước. Ngoài ra, Phần tử có thể là kiểu cửa, khung nhìn hoặc định nghĩa vật liệu.
Phần tử Revit được chia thành sáu nhóm: Mô hình, Phác thảo, Chế độ xem, Nhóm, Chú thích và Thông tin. Mỗi nhóm chứa các Phần tử liên quan và các ký hiệu tương ứng của chúng.
Phần tử mô hình
Phần tử Mô hình đại diện cho các hạng mục vật lý tồn tại trong một dự án xây dựng. Các phần tử trong nhóm Phần tử Mô hình có thể được chia nhỏ thành các phần sau:
• Phiên bản gia đình - Phiên bản gia đình chứa các đối tượng cá thể gia đình. Bạn có thể tải các đối tượng gia đình vào dự án của mình hoặc tạo chúng từ
các mẫu gia đình. Để biết thêm thông tin, hãy xem Phiên bản gia đình.
• Phần tử Máy chủ - Phần tử Máy chủ chứa các đối tượng họ hệ thống có thể chứa các phần tử mô hình khác, chẳng hạn như tường, mái nhà, trần nhà và
sàn nhà. Để biết thêm thông tin về Phần tử Chủ, hãy xem Tường, Sàn, Mái và Khoảng hở.
• Yếu tố cấu trúc. - Phần tử Structure chứa các phần tử chỉ được sử dụng trong Revit Structure. Để biết thêm thông tin về
Phần tử Cấu trúc, xem Cấu trúc Revit.
Xem các phần tử
View Elements đại diện cho cách bạn xem và tương tác với các đối tượng khác trong Revit. Để biết thêm thông tin, hãy xem Chế độ xem.
Các phần tử nhóm đại diện cho các phần tử trợ lý như các đối tượng Mảng và Nhóm trong Revit. Để biết thêm thông tin, hãy xem Phần tử chỉnh sửa.
Chú thích và Phần tử dữ liệu chứa các mục phi vật lý có thể nhìn thấy được.
• Phần tử chú thích đại diện cho các thành phần 2D duy trì tỷ lệ trên giấy và chỉ hiển thị trong một chế độ xem. Để biết thêm thông tin
về Phần tử chú thích, hãy xem Phần tử chú thích.
Lưu ý Phần tử chú thích đại diện cho các thành phần 2D không chỉ tồn tại trong dạng xem 2D. Ví dụ: kích thước có thể được vẽ trong chế độ xem 3D
trong khi hình dạng mà chúng đề cập đến chỉ tồn tại trong một mặt phẳng 2D.
• Phần tử Datum đại diện cho các hạng mục phi vật lý được sử dụng để thiết lập bối cảnh dự án. Các yếu tố này có thể tồn tại trong các khung nhìn. Datum
Các phần tử được chia thành những phần sau:
• Phần tử dữ liệu chung - Phần tử dữ liệu chung đại diện cho các mục có thể nhìn thấy phi vật lý được sử dụng để lưu trữ dữ liệu để mô hình hóa.
• Datum FamilyInstance - Datum FamilyInstance đại diện cho các mục hiển thị phi vật lý được tải vào dự án của bạn hoặc được tạo từ gia đình
các mẫu.
Lưu ý Để biết thêm thông tin về Phần tử Datum Chung và Datum FamilyInstance, hãy xem Datum và Phần tử Thông tin; để biết các nội dung liên quan đến ModelCurve, hãy xem Phác
thảo.
• Phần tử dữ liệu cấu trúc - Phần tử dữ liệu cấu trúc đại diện cho các mục hiển thị phi vật lý được sử dụng để lưu trữ dữ liệu cho cấu trúc
làm mẫu. Để biết thêm thông tin về các phần tử dữ liệu cấu trúc, hãy xem Revit Structure.
Yếu tố phác thảo
Sketch Elements đại diện cho các mục tạm thời được sử dụng để phác thảo dạng 2D / 3D. Nhóm này chứa các đối tượng sau được sử dụng trong mô hình hóa gia đình và khối lượng:
• SketchPlane
• Phác thảo
• Path3D
• GenericForm.
Phần tử thông tin chứa các mục vô hình phi vật lý được sử dụng để lưu trữ dữ liệu dự án và ứng dụng. Các phần tử thông tin được tách ra thành những phần
sau:
• Phần tử dữ liệu dự án
Để biết thêm thông tin về Phần tử Datum, hãy xem Datum và Phần tử Thông tin.
• Loại
• Gia đình
• Biểu tượng
• Ví dụ
• Bạn có thể phân biệt các loại FamilyInstances khác nhau theo danh mục. Các mục như cột cấu trúc nằm trong Cấu trúc
Danh mục cột, dầm và thanh giằng nằm trong danh mục Khung kết cấu, v.v.
• Bạn có thể phân biệt các Phần tử FamilyInstance cấu trúc bằng ký hiệu của chúng.
Loại
Thuộc tính Element.Category đại diện cho danh mục hoặc danh mục con mà một Phần tử thuộc về. Nó được sử dụng để xác định loại phần tử.
Ví dụ, bất cứ thứ gì trong danh mục tường đều được coi là tường. Các hạng mục khác bao gồm cửa và phòng.
Danh mục là lớp chung nhất. Thuộc tính Document.Settings.Categories là một bản đồ chứa tất cả các đối tượng Category trong tài liệu và được chia thành
các phần sau:
• Hạng mục Mô hình - Hạng mục Mô hình bao gồm dầm, cột, cửa ra vào, cửa sổ và tường.
• Danh mục chú thích. Danh mục chú thích bao gồm kích thước, lưới, cấp độ và chú thích văn bản.
Ghi chú
• Nói chung, các quy tắc sau áp dụng cho các danh mục:
o Các đối tượng không thuộc gia đình, như vật liệu và khung cảnh, không thuộc về một danh mục
o Có những ngoại lệ như ProjectInfo, thuộc danh mục Thông tin dự án.
• Một phần tử và các ký hiệu tương ứng của nó thường thuộc cùng một loại. Ví dụ: tường cơ bản và loại tường Chung - 8 "
đều nằm trong danh mục Tường.
• Cùng một loại Phần tử có thể thuộc các danh mục khác nhau. Ví dụ: SpotDimensions có SpotDimensionType, nhưng nó có thể
thuộc hai danh mục khác nhau: Độ cao Điểm và Tọa độ Điểm.
• Các Phần tử khác nhau có thể nằm trong cùng một danh mục vì sự giống nhau của chúng hoặc vì lý do kiến trúc. ModelLine và DetailLine là
trong danh mục Dòng.
Để có quyền truy cập vào các danh mục trong tài liệu 'Lớp thiết lập (ví dụ: để chèn một tập hợp danh mục mới), hãy sử dụng một trong các kỹ thuật sau:
• Nhận một danh mục cụ thể một cách nhanh chóng từ bản đồ danh mục bằng cách sử dụng kiểu liệt kê BuiltInCategory.
// Nhận tất cả các danh mục của tài liệu hiện tại
Nhóm danh mục = documentSettings.Categories;
// Hiển thị số lượng tất cả các danh mục cho người dùng
String prompt = "Số lượng tất cả các danh mục trong tài liệu Revit hiện tại:" + groups.Size;
// lấy danh mục Tầng theo OST_Floors và hiển thị tên của nó
Category floorCategory = groups.get_Item (BuiltInCategory.OST_Floors);
nhắc + = floorCategory.Name;
• Category được sử dụng để phân loại các phần tử. Loại phần tử xác định các hành vi nhất định. Ví dụ: tất cả các phần tử trong cùng một
danh mục có thể được bao gồm trong cùng một lịch trình.
• Các phần tử có các tham số dựa trên danh mục của chúng.
• Các danh mục cũng được sử dụng để kiểm soát khả năng hiển thị và giao diện đồ họa trong Revit.
Machine Translated by Google
Danh mục của một phần tử được xác định bởi ID Danh mục.
• ID danh mục đã nhập tương ứng với các phần tử trong tài liệu.
• Hầu hết các danh mục đều được tích hợp sẵn và ID của chúng là các hằng số được lưu trữ trong các ElementIds.
• Mỗi ID danh mục cài sẵn có một giá trị tương ứng trong Danh sách danh mục được xây dựng. Chúng có thể được chuyển đổi thành tương ứng
Các kiểu liệt kê được xây dựng trongCategory.
• Nếu danh mục không được tích hợp sẵn, ID sẽ được chuyển đổi thành giá trị null.
Lưu ý Để tránh các vấn đề Toàn cầu hóa khi sử dụng Category.Name, BuiltInCategory là lựa chọn tốt hơn. Category.Name có thể khác nhau ở các ngôn ngữ
khác nhau.
Gia đình
Gia đình là các lớp của các phần tử trong một danh mục. Các gia đình có thể nhóm các Phần tử theo cách sau:
Hầu hết các gia đình là các tệp Gia đình thành phần, có nghĩa là bạn có thể tải chúng vào dự án của mình hoặc tạo chúng từ các mẫu Gia đình. Bạn xác định
tập hợp thuộc tính và biểu diễn đồ họa Gia đình.
Một kiểu gia đình khác là Gia đình hệ thống. Hệ thống họ không có sẵn để tải hoặc tạo. Revit xác định trước các thuộc tính Family của hệ thống và biểu
diễn đồ họa; chúng bao gồm các bức tường, kích thước, mái nhà, sàn (hoặc tấm) và các cấp.
Ngoài chức năng hoạt động như một lớp Phần tử, Gia đình còn là một khuôn mẫu được sử dụng để tạo ra các mục mới thuộc Gia đình.
Trong API nền tảng Revit, cả lớp Family và FamilyInstance đều thuộc Họ thành phần. Các yếu tố khác bao gồm Họ hệ thống.
Các họ trong API nền tảng Revit được đại diện bởi ba đối tượng:
• Gia đình
• FamilySymbol
• FamilyInstance.
Mỗi đối tượng đóng một vai trò quan trọng trong cấu trúc Gia đình.
Đối tượng FamilySymbol đại diện cho một tập hợp các thiết lập cụ thể trong Family chẳng hạn như Type, Concrete-Rectangular Beam: 16 × 32.
Đối tượng FamilyInstance là một cá thể FamilySymbol đại diện cho một cá thể duy nhất trong dự án Revit. Ví dụ, FamilyInstance có thể là một phiên bản đơn lẻ
của một chùm hình chữ nhật bê tông 16 × 32 trong dự án.
Lưu ý Hãy nhớ rằng FamilyInstance tồn tại trong FamilyInstance Elements, Datum Elements và Annotation Elements.
Để biết thêm thông tin chi tiết, hãy xem Phiên bản gia đình.
Loại nguyên tố
Trong API nền tảng Revit, Biểu tượng thường là các phần tử không hiển thị được sử dụng để xác định các phiên bản. Các ký hiệu được gọi là Kiểu trong giao diện người dùng.
• Một loại có thể là một kích thước cụ thể trong một gia đình, chẳng hạn như cửa 1730 × 2032 hoặc góc 8 × 4 × 1/2.
• Một kiểu có thể là một kiểu, chẳng hạn như kiểu đường thẳng mặc định hoặc kiểu góc mặc định cho các kích thước.
Các biểu tượng đại diện cho các Phần tử chứa dữ liệu được chia sẻ cho một tập hợp các phần tử tương tự. Trong một số trường hợp, Biểu tượng đại diện cho các thành
phần của tòa nhà mà bạn có thể lấy từ nhà kho, chẳng hạn như cửa ra vào hoặc cửa sổ và có thể được đặt nhiều lần trong cùng một tòa nhà. Trong các trường hợp khác, Biểu
tượng chứa các tham số đối tượng chủ hoặc các phần tử khác. Ví dụ, một Biểu tượng WallType chứa độ dày, số lớp, vật liệu cho mỗi lớp và các thuộc tính khác cho một loại
tường cụ thể.
FamilySymbol là một biểu tượng trong API. Nó còn được gọi là Family Type trong giao diện người dùng Revit. FamilySymbol là một lớp các phần tử trong một họ có cùng giá
trị chính xác cho tất cả các thuộc tính. Ví dụ, tất cả các cửa sáu tấm 32 × 78 thuộc một loại, trong khi tất cả các cửa sáu tấm 24 × 80 thuộc về một loại khác. Giống như
Family, FamilySymbol cũng là một mẫu. Đối tượng FamilySymbol có nguồn gốc từ đối tượng ElementType và đối tượng Element.
Ví dụ
Đối tượng là các mục có vị trí cụ thể trong tòa nhà (đối tượng mô hình) hoặc trên trang bản vẽ (đối tượng chú thích). Phiên bản đại diện cho các bản sao
giống hệt nhau đã được chuyển đổi của một ElementType. Ví dụ: nếu một tòa nhà chứa 20 cửa sổ thuộc một loại cụ thể, thì sẽ có một ElementType với 20 Phiên bản. Các phiên
bản được gọi là Thành phần trong giao diện người dùng.
Ghi chú
Đối với FamilyInstance, thuộc tính Symbol có thể được sử dụng thay cho phương thức GetTypeId () để nhận FamilySymbol tương ứng. Nó là thuận tiện và an toàn vì
bạn không cần phải thực hiện chuyển đổi loại.
Machine Translated by Google
Các phần tử trong Revit rất phổ biến. Việc lấy các phần tử mà bạn muốn từ Revit là cần thiết trước khi sử dụng API cho bất kỳ lệnh Phần tử nào. Có một số cách để truy xuất các phần tử
bằng API Revit:
• ElementId - Nếu ElementId của phần tử được biết, phần tử có thể được truy xuất từ tài liệu.
• Lọc và lặp phần tử - đây là một cách tốt để lấy một tập hợp các phần tử liên quan trong tài liệu.
• Các phần tử đã chọn - truy xuất tập hợp các phần tử mà người dùng đã chọn
• Các phần tử cụ thể - một số phần tử có sẵn dưới dạng thuộc tính của tài liệu
Mỗi phương pháp truy xuất phần tử này sẽ được thảo luận chi tiết hơn trong các phần sau.
Khi biết ElementId của phần tử mong muốn, hãy sử dụng thuộc tính Document.Element để lấy phần tử.
Cách phổ biến nhất để lấy các phần tử trong tài liệu là sử dụng tính năng lọc để truy xuất một tập hợp các phần tử. API Revit cung cấp lớp FilteredElementCollector và các lớp hỗ trợ, để
tạo các bộ sưu tập phần tử đã lọc mà sau đó có thể được lặp lại. Xem Lọc để biết thêm thông tin.
Lựa chọn
Thay vì nhận được một bộ sưu tập đã lọc của tất cả các phần tử trong mô hình, bạn có thể chỉ truy cập các phần tử đã được chọn. Bạn có thể lấy các đối tượng đã chọn từ tài liệu hoạt
động hiện tại bằng cách sử dụng thuộc tính UIDocument.Selection.Elements. Để biết thêm thông tin về cách sử dụng lựa chọn đang hoạt động, hãy xem Lựa chọn.
Ngoài việc sử dụng cách chung để truy cập các Phần tử, API Nền tảng Revit có các thuộc tính trong lớp Tài liệu để lấy các Phần tử được chỉ định từ tài liệu đang hoạt động hiện tại mà
không cần lặp lại tất cả các Phần tử. Các phần tử được chỉ định mà bạn có thể truy xuất được liệt kê trong bảng sau.
Bảng 11: Truy xuất các phần tử từ thuộc tính tài liệu
Yếu tố Quyền truy cập vào thuộc tính của Tài liệu
ProjectInfo Document.ProjectInformation
Document.ActiveProjectLocation
SiteLocation Document.SiteLocation
thể loại
Tất cả các loại phần tử Document.AnnotationSymbolTypes / BeamSystemTypes / ContFootingTypes / DimensionTypes / FloorTypes / GridTypes /
ElementId
Mọi phần tử trong tài liệu đang hoạt động đều có một số nhận dạng duy nhất được đại diện bởi kiểu lưu trữ ElementId. Các đối tượng ElementId là dự án rộng.
Nó là một số duy nhất không bao giờ thay đổi trong mô hình phần tử, cho phép nó được lưu trữ bên ngoài để truy xuất phần tử khi cần thiết.
Để xem ID phần tử trong Revit, hãy hoàn thành các bước sau:
1. Từ tab Sửa đổi, trên bảng Điều tra, chọn ID Phần tử. Menu thả xuống ID yếu tố xuất hiện.
Trong API nền tảng Revit, bạn có thể tạo trực tiếp một ElementId, sau đó liên kết một giá trị số nguyên duy nhất với ElementId mới. Giá trị ElementId mới là
0 theo mặc định.
• Sử dụng ElementId để lấy một phần tử cụ thể từ Revit. Từ lớp Ứng dụng Revit, có quyền truy cập vào tài liệu đang hoạt động, sau đó lấy phần tử được
chỉ định bằng phương thức Document.GetElement (ElementId).
// Lấy phần tử
Autodesk.Revit.DB.Element first = document.GetElement (id);
Nếu số ID không tồn tại trong dự án, phần tử bạn truy xuất là null.
• Sử dụng ElementId để kiểm tra xem hai Phần tử trong một dự án có bằng nhau hay không. Không nên sử dụng Object.Equal ()
phương pháp.
UniqueId
Mọi phần tử đều có UniqueId, được đại diện bởi kiểu lưu trữ Chuỗi. UniqueId tương ứng với ElementId. Tuy nhiên, không giống như ElementId, UniqueId
hoạt động giống như một GUID (Định danh duy nhất trên toàn cầu), là mã duy nhất trên các dự án Revit riêng biệt. UniqueId có thể giúp bạn theo dõi các phần
tử khi bạn xuất các tệp dự án Revit sang các định dạng khác.
Machine Translated by Google
Lưu ý ElementId chỉ là duy nhất trong dự án hiện tại. Nó không phải là duy nhất trên các dự án Revit riêng biệt. UniqueId luôn là duy nhất trong các dự án riêng biệt.
Địa điểm
Vị trí của một đối tượng là quan trọng trong quá trình xây dựng mô hình. Trong Revit, một số đối tượng có vị trí điểm. Ví dụ một bảng có một vị trí điểm. Các đối tượng khác có một vị trí đường
thẳng, đại diện cho một đường cong vị trí hoặc không có vị trí nào cả. Tường là một phần tử có vị trí đường thẳng.
API Nền tảng Revit cung cấp lớp Vị trí và chức năng vị trí cho hầu hết các phần tử. Ví dụ, nó có các phương thức Move () và Rotate () để dịch và xoay các phần tử. Tuy nhiên, lớp Vị trí không có
thuộc tính nào mà từ đó bạn có thể lấy thông tin như tọa độ. Trong trường hợp này, hãy hạ đối tượng Location xuống lớp con của nó giống như LocationPoint hoặc LocationCurve-để có thông tin vị
trí chi tiết hơn và kiểm soát bằng cách sử dụng các dẫn xuất đối tượng.
Việc truy xuất vị trí thực của một phần tử trong một dự án rất hữu ích khi bạn có được hình học của một đối tượng. Các quy tắc sau áp dụng khi bạn truy xuất vị trí:
• Wall, Beam và Brace được điều khiển theo đường cong bằng cách sử dụng LocationCurve.
• Room, RoomTag, SpotDimension, Group, FamilyInstances không theo hướng đường cong và tất cả đều sử dụng In-Place-FamilyInstances
Điểm vị trí.
Trong API nền tảng Revit, hướng theo đường cong có nghĩa là hình dạng hoặc vị trí của một phần tử được xác định bởi một hoặc nhiều đường cong liên quan.
Hầu hết tất cả các phần tử của mô hình phân tích đều hướng theo đường cong - tải trọng tuyến tính và diện tích, các bức tường, các phần tử khung, v.v.
Các phần tử khác không thể truy xuất LocationCurve hoặc LocationPoint. Họ trả về Vị trí mà không có thông tin.
LocationCurve Tường, dầm, nẹp, giàn kết cấu, LineLoad (không có máy chủ)
Chỉ vị trí Tầng, Tầng, một số Thẻ, Hệ thống dầm, Thanh cốt thép, Gia cố, Điểm tải, Khu vực tải (không có Máy chủ), Hướng Span (Thẻ độc lập)
Không có vị trí View, LineLoad (với máy chủ), AreaLoad (với Host), BoundaryCondition
Lưu ý Có các phần tử khác không có thông tin Vị trí. Ví dụ: một LineLoad (với máy chủ) hoặc một AreaLoad (với máy chủ) không có Vị trí.
Một số điểm Vị trí FamilyInstance, chẳng hạn như tất cả các điểm FamilyInstance tại chỗ và khối lượng, được chỉ định thành điểm (0, 0, 0) khi chúng được tạo. Tọa độ LocationPoint
được thay đổi nếu bạn chuyển đổi hoặc di chuyển phiên bản.
Để thay đổi Điểm vị trí của Nhóm, hãy thực hiện một trong các thao tác sau:
• Kéo nguồn gốc Nhóm trong giao diện người dùng Revit để thay đổi tọa độ LocationPoint. Trong trường hợp này, Group LocationPoint được thay đổi
• Di chuyển Nhóm bằng phương thức ElementTransformUtils.MoveElement () để thay đổi LocationPoint. Điều này thay đổi cả vị trí Nhóm và LocationPoint.
Mức độ
Mặt bằng là mặt phẳng ngang hữu hạn hoạt động như một tham chiếu cho các phần tử được lưu trữ theo cấp hoặc dựa trên cấp, chẳng hạn như mái nhà, sàn nhà và trần nhà. API nền tảng Revit cung
cấp một lớp Cấp độ để thể hiện các đường cấp độ trong Revit. Nhận đối tượng Cấp mà phần tử được gán bằng API nếu phần tử dựa trên cấp.
Một số phần tử, chẳng hạn như một cột, sử dụng một cấp làm tham chiếu cơ bản. Khi bạn nhận được cấp độ cột, cấp độ bạn lấy được là Cấp độ cơ bản.
Ghi chú
Nhận mức Beam hoặc Brace bằng cách sử dụng tham số Mức tham chiếu. Từ thuộc tính Cấp, bạn chỉ nhận được null thay vì thông tin cấp tham chiếu.
Cấp độ là yếu tố được sử dụng phổ biến nhất trong Revit. Trong Revit Platform API, tất cả các cấp trong dự án được định vị bằng cách lặp lại toàn bộ dự án và tìm
kiếm các đối tượng Elements.Level.
Để biết thêm chi tiết Cấp, hãy xem Dữ liệu và Yếu tố Thông tin.
Tham số
Mỗi phần tử đều có một tập hợp các tham số mà người dùng có thể xem và chỉnh sửa trong Revit. Các tham số hiển thị trong hộp thoại Thuộc tính phần tử (chọn bất kỳ
phần tử nào và nhấp vào nút Thuộc tính bên cạnh bộ chọn loại). Ví dụ, hình ảnh sau đây hiển thị các thông số Phòng.
Trong Revit Platform API, mỗi đối tượng Phần tử có thuộc tính Tham số, là một tập hợp của tất cả các thuộc tính được gắn vào Phần tử.
Bạn có thể thay đổi các giá trị thuộc tính trong bộ sưu tập. Ví dụ, bạn có thể lấy diện tích của một căn phòng từ các tham số đối tượng phòng; Ngoài ra,
bạn có thể đặt số phòng bằng cách sử dụng các thông số đối tượng phòng. Tham số là một cách khác để cung cấp quyền truy cập vào thông tin thuộc tính không được
hiển thị trong đối tượng phần tử.
Nói chung, mọi thông số phần tử đều có một ID thông số được liên kết. ID tham số được đại diện bởi lớp ElementId. Đối với các tham số do người dùng tạo,
các ID tương ứng với các phần tử thực trong tài liệu. Tuy nhiên, hầu hết các tham số đều được tích hợp sẵn và ID của chúng là các hằng số được lưu trữ
trong các ElementIds.
Tham số là một dạng lưu trữ dữ liệu chung trong các phần tử. Trong API nền tảng Revit, tốt nhất là sử dụng ID thông số tích hợp để lấy thông số. Revit có
sẵn một số lượng lớn các tham số tích hợp bằng cách sử dụng kiểu liệt kê BuiltInParameter.
Lọc
API Revit cung cấp cơ chế lọc và lặp lại các phần tử trong tài liệu Revit. Đây là cách tốt nhất để lấy một tập hợp các yếu tố liên quan, chẳng hạn như tất cả
các bức tường hoặc cửa ra vào trong tài liệu. Bộ lọc cũng có thể được sử dụng để tìm một tập hợp các phần tử rất cụ thể, chẳng hạn như tất cả các chùm có kích
thước cụ thể.
Các bước cơ bản để đưa các phần tử vượt qua một bộ lọc được chỉ định như sau:
3. Nhận các phần tử hoặc id phần tử đã lọc (sử dụng một trong một số phương pháp)
Mẫu sau bao gồm các bước cơ bản để lọc và lặp lại các phần tử trong tài liệu.
Vùng mã 6-1: Sử dụng tính năng lọc phần tử để lấy tất cả các phiên bản tường trong tài liệu
// Tìm tất cả các phiên bản Wall trong tài liệu bằng cách sử dụng bộ lọc danh mục
Bộ lọc ElementCategoryFilter = new ElementCategoryFilter (BuiltInCategory.OST_Walls);
// Áp dụng bộ lọc cho các phần tử trong tài liệu đang hoạt động
// Sử dụng phím tắt WhereElementIsNotElementType () để chỉ tìm các phiên bản tường
FilteredElementCollector collector = new FilteredElementCollector (tài liệu);
IList <Element> wall =
1. Từ một tài liệu - sẽ tìm kiếm và lọc tập hợp các phần tử trong một tài liệu
2. Từ một tài liệu và tập hợp các ElementIds - sẽ tìm kiếm và lọc một tập hợp các phần tử cụ thể
3. Từ một tài liệu và một chế độ xem - sẽ tìm kiếm và lọc các phần tử hiển thị trong một chế độ xem
Lưu ýLuôn kiểm tra xem một dạng xem có hợp lệ để lặp lại phần tử khi lọc các phần tử trong một dạng xem được chỉ định hay không bằng cách sử
dụng static FilteredElementCollector.IsViewValidForElementIteration ().
Khi đối tượng được tạo lần đầu tiên, không có bộ lọc nào được áp dụng. Lớp này yêu cầu ít nhất một điều kiện được đặt trước khi cố gắng truy cập các phần tử, nếu
không một ngoại lệ sẽ được ném ra.
Áp dụng bộ lọc
Bộ lọc có thể được áp dụng cho FilteredElementCollector bằng cách sử dụng ElementFilters. ElementFilter là một lớp kiểm tra một phần tử để xem nó có đáp ứng một
tiêu chí nhất định hay không. Lớp cơ sở ElementFilter có ba lớp dẫn xuất chia các bộ lọc phần tử thành ba loại.
• ElementQuickFilter - Bộ lọc nhanh chỉ hoạt động trên ElementRecord, một lớp bộ nhớ thấp có giao diện hạn chế để đọc
thuộc tính phần tử. Các phần tử bị bộ lọc nhanh từ chối sẽ không được mở rộng trong bộ nhớ.
• ElementSlowFilter - Bộ lọc chậm yêu cầu phần tử phải được lấy và mở rộng trong bộ nhớ trước. Do đó, tốt hơn là kết hợp các bộ lọc chậm với ít nhất một
ElementQuickFilter, điều này sẽ giảm thiểu số lượng Phần tử được mở rộng để
đánh giá dựa trên các tiêu chí do bộ lọc này đặt ra.
• ElementLogicalFilter - Bộ lọc logic kết hợp hai hoặc nhiều bộ lọc một cách hợp lý. Các bộ lọc thành phần có thể được Revit sắp xếp lại thứ tự thành
khiến các bộ lọc hoạt động nhanh nhất được đánh giá đầu tiên.
Hầu hết các bộ lọc có thể được đảo ngược bằng cách sử dụng một hàm tạo quá tải lấy đối số Boolean chỉ ra để đảo ngược bộ lọc để các phần tử thường được bộ lọc chấp
nhận sẽ bị từ chối và các phần tử thường bị từ chối sẽ được chấp nhận. Các bộ lọc không thể đảo ngược được ghi chú trong các phần tương ứng của chúng bên dưới.
Machine Translated by Google
Có một tập hợp các bộ lọc được xác định trước có sẵn cho các mục đích sử dụng phổ biến. Nhiều bộ lọc tích hợp này cung cấp cơ sở cho các phương thức phím tắt
FilteredElementCollector được đề cập trong phần FilteredElementCollector ở trên. Ba phần tiếp theo cung cấp thêm thông tin về các bộ lọc tích hợp.
Khi một bộ lọc được tạo, nó cần được áp dụng cho FilteredElementCollector. Phương thức chung WherePasses () được sử dụng để áp dụng một ElementFilter duy nhất cho
FilteredElementCollector.
Bộ lọc cũng có thể được áp dụng bằng một số phương pháp tắt do FilteredElementCollector cung cấp. Một số áp dụng một bộ lọc cụ thể mà không cần thêm đầu vào, chẳng
hạn như WhereElementIsCurveDriven (), trong khi những người khác áp dụng một bộ lọc cụ thể với một phần đầu vào đơn giản, chẳng hạn như phương thức OfCategory () lấy
một BuiltInCategory làm tham số. Và cuối cùng có các phương thức như UnionWith () nối các bộ lọc lại với nhau. Tất cả các phương pháp này đều trả về cùng một bộ thu
cho phép các bộ lọc dễ dàng được xâu chuỗi lại với nhau.
Bộ lọc nhanh
Bộ lọc nhanh chỉ hoạt động trên ElementRecord, một lớp bộ nhớ thấp có giao diện hạn chế để đọc các thuộc tính của phần tử. Các phần tử bị bộ lọc nhanh từ chối sẽ không
được mở rộng trong bộ nhớ. Bảng sau đây tóm tắt các bộ lọc nhanh được tích hợp sẵn và một số ví dụ sau đây cho một số bộ lọc.
Bộ lọc tích hợp Những gì nó vượt qua (Các) Phương pháp Phím tắt
điểm
BoundBoxIntersectsFilter Các phần tử có một hộp giới hạn giao với một đường viền nhất định Không có
BoundBoxIsInsideFilter Các phần tử có một hộp giới hạn bên trong một Không có
đề cương
ElementCategoryFilter Các phần tử khớp với id danh mục đầu vào OfCategoryId ()
ElementClassFilter Các phần tử phù hợp với lớp thời gian chạy đầu vào (hoặc các lớp Của Lớp()
dẫn xuất)
ElementDesignOptionFilter Các yếu tố trong một tùy chọn thiết kế cụ thể ContainedInDesignOption ()
ElementIsCurveDrivenFilter Các phần tử được điều khiển theo đường cong WhereElementIsCurveDriven ()
WhereElementIsNotElementType ()
ElementMulticategoryFilter Các phần tử phù hợp với bất kỳ tập hợp danh mục nào trong số các danh mục nhất định Không có
ElementMulticlassFilter Các phần tử phù hợp với một tập hợp các lớp nhất định (hoặc các Không có
ElementOwnerViewFilter Các phần tử dành riêng cho từng chế độ xem OwnedByView () WhereElementIsViewIndependent ()
ElementStructuralTypeFilter Các phần tử phù hợp với một kiểu cấu trúc nhất định Không có
Loại trừ Tất cả các phần tử ngoại trừ id phần tử được nhập vào bộ lọc Loại trừ ()
Lưu ý Bộ lọc hộp giới hạn loại trừ tất cả các đối tượng có nguồn gốc từ Chế độ xem và các đối tượng bắt nguồn từ ElementType.
Ví dụ sau tạo một đường viền trong tài liệu và sau đó sử dụng một BoundBoxIntersectsFilter để tìm các phần tử trong tài liệu với một hộp giới hạn giao với đường viền đó.
Sau đó, nó chỉ ra cách sử dụng bộ lọc đảo ngược để tìm tất cả các bức tường có hộp giới hạn không giao với đường viền đã cho. Lưu ý rằng việc sử dụng phương thức OfClass
() cũng áp dụng ElementClassFilter cho bộ sưu tập.
// Sử dụng bộ lọc BoundBoxIntersects để tìm các phần tử có hộp giới hạn giao nhau // Đường viền đã cho trong tài liệu.
// Tạo phác thảo, sử dụng điểm XYZ tối thiểu và tối đa để khởi tạo phác thảo.
Machine Translated by Google
Outline myOutLn = new Outline (new XYZ (0, 0, 0), new XYZ (100, 100, 100));
// Áp dụng bộ lọc cho các phần tử trong tài liệu đang hoạt động // Bộ lọc
này loại trừ tất cả các đối tượng có nguồn gốc từ View và các đối tượng có nguồn gốc từ ElementType
FilteredElementCollector collector = new FilteredElementCollector (document); IList <Element> Elements =
collector.WherePasses (filter) .ToElements ();
// Tìm tất cả các bức tường không giao nhau với BoundBox: sử dụng bộ lọc đảo ngược // để khớp các
phần tử // Sử dụng lệnh tắt OfClass () để chỉ tìm các bức tường BoundBoxIntersectsFilter invertFilter
Ví dụ tiếp theo sử dụng bộ lọc loại trừ để tìm tất cả các bức tường hiện không được chọn trong tài liệu.
// Tìm tất cả các bức tường hiện chưa được chọn, // Lấy tất
cả các id phần tử được người dùng chọn hiện tại, loại trừ các id này khi lọc ICollection <ElementId> removees = new
List <ElementId> (); ElementSetIterator elemIter = uiDocument.Selection.Elements.ForwardIterator (); elemIter.Reset
(); while (elemIter.MoveNext ()) {
// Áp dụng bộ lọc cho các phần tử trong tài liệu đang hoạt động, // Sử dụng
phương thức tắt OfClass () để tìm Walls only FilteredElementCollector
collector = new FilteredElementCollector (uiDocument.Document); IList <Element> wall = collector.WherePasses
(bộ lọc) .OfClass (typeof (Wall)). ToElements ();
Lưu ý rằng ElementClassFilter sẽ so khớp các phần tử có lớp là đối sánh chính xác với lớp đầu vào hoặc các phần tử có lớp được dẫn xuất từ lớp đầu vào. Ví dụ
sau sử dụng ElementClassFilter để tải tất cả các tải trong tài liệu.
// Áp dụng bộ lọc cho các phần tử trong tài liệu đang hoạt động
FilteredElementCollector collector = new FilteredElementCollector (document); ICollection
<Element> allLoads = collector.WherePasses (filter) .ToElements ();
Có một tập hợp nhỏ các lớp con Phần tử trong API không được bộ lọc lớp phần tử hỗ trợ. Các loại này tồn tại trong API, nhưng không tồn tại trong mô hình đối
tượng gốc của Revit, có nghĩa là bộ lọc này không hỗ trợ chúng. Để sử dụng bộ lọc lớp để tìm các phần tử của các loại này, cần phải sử dụng một lớp cấp cao hơn
và sau đó xử lý kết quả thêm để tìm các phần tử chỉ phù hợp với kiểu con. Lưu ý rằng các bộ lọc chuyên dụng tồn tại cho một số loại này. Các loại sau bị ảnh hưởng
bởi hạn chế này:
Machine Translated by Google
Autodesk.Revit.DB.Architecture.Room RoomFilter
Autodesk.Revit.DB.Mechanical.Space SpaceFilter
Autodesk.Revit.DB.Area AreaFilter
Autodesk.Revit.DB.Architecture.RoomTag RoomTagFilter
Autodesk.Revit.DB.Mechanical.SpaceTag SpaceTagFilter
Autodesk.Revit.DB.AreaTag AreaTagFilter
Autodesk.Revit.DB.CombinableElement Không có
Autodesk.Revit.DB.Mullion Không có
Autodesk.Revit.DB.Panel Không có
Autodesk.Revit.DB.AnnotationSymbol Không có
Autodesk.Revit.DB.Structure.AreaReinforcementType Không có
Autodesk.Revit.DB.Structure.PathReinforcementType Không có
Autodesk.Revit.DB.AnnotationSymbolType Không có
Autodesk.Revit.DB.Architecture.RoomTagType Không có
Autodesk.Revit.DB.Mechanical.SpaceTagType Không có
Autodesk.Revit.DB.AreaTagType Không có
Autodesk.Revit.DB.Structure.TrussType Không có
Bộ lọc chậm
Bộ lọc chậm yêu cầu phần tử phải được lấy và mở rộng trong bộ nhớ trước. Vì vậy, tốt hơn là kết hợp các bộ lọc chậm với ít nhất một ElementQuickFilter, điều này sẽ giảm thiểu số lượng Phần
tử được mở rộng để đánh giá dựa trên các tiêu chí do bộ lọc này đặt ra. Bảng sau đây tóm tắt các bộ lọc chậm được tích hợp sẵn, trong khi một số ví dụ sau để cung cấp cái nhìn chuyên sâu về
một số bộ lọc.
Machine Translated by Google
Bộ lọc tích hợp Những gì nó vượt qua (Các) Phương pháp Phím tắt
ElementLevelFilter Các phần tử được liên kết với một id cấp nhất định Không có
ElementParameterFilter Các phần tử chuyển một hoặc nhiều quy tắc lọc tham số Không có
ElementPhaseStatusFilter Các phần tử có trạng thái pha nhất định trên một pha nhất định Không có
FamilyInstanceFilter Các phiên bản của một phiên bản gia đình cụ thể Không có
FamilyStructuralMaterialTypeFilter Các yếu tố gia đình của loại vật liệu kết cấu nhất định Không có
Phần tử PrimaryDesignOptionMemberFilter thuộc sở hữu của bất kỳ tùy chọn thiết kế chính nào Không có
StructuralInstanceUsageFilter Các trường hợp sử dụng cấu trúc nhất định Không có
StructuralMaterialTypeFilter Các đặc điểm của loại vật liệu kết cấu nhất định Không có
ElementIntersectsElementFilter Các phần tử giao nhau giữa hình dạng khối của một phần tử nhất định Không có
ElementIntersectsSolidFilter Các phần tử giao nhau giữa hình khối đã cho Không có
• RoomFilter
• RoomTagFilter
• Bộ lọc vùng
• AreaTagFilter
• SpaceTagFilter
• FamilyInstanceFilter
Như đã đề cập trong phần bộ lọc nhanh, một số lớp không hoạt động với ElementClassFilter. Một số lớp đó, chẳng hạn như Room và RoomTag có bộ lọc chuyên dụng của
riêng chúng.
// Áp dụng bộ lọc cho các phần tử trong tài liệu đang hoạt động
FilteredElementCollector collector = new FilteredElementCollector (tài liệu);
IList <Element> Rooms = collector.WherePasses (bộ lọc) .ToElements ();
ElementParameterFilter là một bộ lọc mạnh mẽ có thể tìm thấy các phần tử dựa trên các giá trị của thông số mà chúng có thể có. Nó có thể tìm các phần tử có giá
trị tham số khớp với một giá trị cụ thể hoặc lớn hơn hoặc nhỏ hơn một số giá trị. ElementParameterFilter cũng có thể được sử dụng để tìm các phần tử hỗ trợ một
tham số được chia sẻ cụ thể.
Machine Translated by Google
Ví dụ bên dưới sử dụng ElementParameterFilter để tìm các phòng có diện tích hơn 100 bộ vuông và các phòng có diện tích nhỏ hơn 100 bộ vuông.
// Tạo bộ lọc ElementParameter để tìm các phòng có diện tích // lớn hơn giá trị đã chỉ
định
// Tạo bộ lọc theo nhà cung cấp và người đánh giá
BuiltInParameter areaParam = BuiltInParameter.ROOM_AREA;
// các nhà cung cấp
tắc double ruleValue = 100.0f; // // phòng lọc có diện tích lớn hơn 100 SF
qui định
// Áp dụng bộ lọc cho các phần tử trong tài liệu đang hoạt động
FilteredElementCollector collector = new FilteredElementCollector (tài liệu);
IList <Element> Rooms = collector.WherePasses (bộ lọc) .ToElements ();
// Tìm các phòng có diện tích nhỏ hơn hoặc bằng 100: // Sử dụng bộ lọc
đảo ngược để khớp các phần tử
Ví dụ sau đây cho thấy cách sử dụng FamilyStructuralMaterialTypeFilter để tìm tất cả các gia đình có loại vật liệu là gỗ. Nó cũng
cho biết cách sử dụng bộ lọc đảo ngược để tìm tất cả các gia đình có loại vật liệu không phải là gỗ.
// Áp dụng bộ lọc cho các phần tử trong tài liệu đang hoạt động
FilteredElementCollector collector = new FilteredElementCollector (tài liệu);
ICollection <Element> woodFamiles = collector.WherePasses (bộ lọc) .ToElements ();
// Tìm các gia đình không phải là Gỗ: Sử dụng bộ lọc đảo ngược để so khớp các gia đình
FamilyStructuralMaterialTypeFilter notWoodFilter =
new FamilyStructuralMaterialTypeFilter (StructuralMaterialType.Wood, true);
collector = new FilteredElementCollector (tài liệu);
ICollection <Element> notWoodFamilies = collector.WherePasses (notWoodFilter) .ToElements ();
Hai bộ lọc chậm cuối cùng bắt nguồn từ ElementIntersectsFilter, là một lớp cơ sở cho các bộ lọc được sử dụng để đối sánh các phần tử giao nhau với
hình học. Xem Vùng mã: Tìm Tường lân cận trong phần Lớp tiện ích hình học cho một ví dụ về việc sử dụng loại bộ lọc này.
Bộ lọc logic
Bộ lọc logic kết hợp hai hoặc nhiều bộ lọc một cách hợp lý. Bảng sau đây tóm tắt các bộ lọc logic được tích hợp sẵn.
Bộ lọc tích hợp Những gì nó vượt qua (Các) Phương pháp Phím tắt
Phần tử LogicalAndFilter vượt qua 2 bộ lọc trở lên WherePasses () - thêm một bộ lọc bổ sung
LogicalOrFilter Các phần tử vượt qua ít nhất một trong 2 bộ lọc trở lên UnionWith () - tham gia hai bộ bộ lọc độc lập
Machine Translated by Google
Trong ví dụ bên dưới, hai bộ lọc nhanh được kết hợp bằng bộ lọc logic để lấy tất cả các phần tử FamilyInstance cửa trong tài liệu.
Vùng mã 6-8: Sử dụng LogicalAndFilter để tìm tất cả các trường hợp cửa
// Tìm tất cả các phiên bản cửa trong dự án bằng cách tìm tất cả các phần tử thuộc về
// danh mục cửa và là các trường hợp gia đình.
ElementClassFilter familyInstanceFilter = new ElementClassFilter (typeof (FamilyInstance));
// Áp dụng bộ lọc cho các phần tử trong tài liệu đang hoạt động
FilteredElementCollector collector = new FilteredElementCollector (tài liệu);
IList <Element> door = collector.WherePasses (doorInstancesFilter) .ToElements ();
o ToElements () - trả về tất cả các phần tử vượt qua tất cả các bộ lọc được áp dụng
o ToElementIds () - trả về các ElementIds của tất cả các phần tử vượt qua tất cả các bộ lọc được áp dụng
2. Lấy Element hoặc ElementId đầu tiên phù hợp với bộ lọc.
o FirstElement () - trả về phần tử đầu tiên để vượt qua tất cả các bộ lọc được áp dụng
o FirstElementId () - trả về id của phần tử đầu tiên để vượt qua tất cả các bộ lọc được áp dụng
o GetEnumerator () - trả về một IEnumerator <Element> lặp qua tập hợp các phần tử đi qua
Bạn chỉ nên sử dụng một trong các phương pháp từ các nhóm này tại một thời điểm; bộ sưu tập sẽ đặt lại nếu bạn gọi một phương thức khác để trích xuất các phần tử.
Do đó, nếu trước đó bạn đã lấy được một trình lặp, nó sẽ bị dừng lại và không duyệt qua phần tử nào nữa nếu bạn gọi một phương thức khác để trích xuất các
phần tử.
Phương pháp nào là tốt nhất phụ thuộc vào ứng dụng. Nếu chỉ cần một phần tử phù hợp, FirstElement () hoặc FirstElementId () là lựa chọn tốt nhất. Nếu tất cả
các phần tử phù hợp là bắt buộc, hãy sử dụng ToElements (). Nếu cần một số biến, hãy sử dụng một trình lặp.
Nếu ứng dụng sẽ xóa các phần tử hoặc thực hiện các thay đổi đáng kể đối với các phần tử trong danh sách đã lọc, thì ToElementIds () hoặc một trình lặp id phần
tử là những lựa chọn tốt nhất. Điều này là do việc xóa các phần tử hoặc thực hiện các thay đổi quan trọng đối với một phần tử có thể làm mất hiệu lực của một
phần tử xử lý. Với id phần tử, lệnh gọi Document.GetElement () với ElementId sẽ luôn trả về Phần tử hợp lệ (hoặc tham chiếu rỗng nếu phần tử đã bị xóa).
Machine Translated by Google
Việc sử dụng phương thức ToElements () để nhận kết quả bộ lọc dưới dạng một tập hợp các phần tử cho phép sử dụng foreach để kiểm tra từng phần tử trong tập
hợp, như được hiển thị bên dưới:
10. String prompt = "Tải trong tài liệu hiện tại là: \ n"; 11. foreach (Phần tử
loadElem trong allLoads) 12. { 13.
Khi chỉ cần một phần tử đi qua, hãy sử dụng FirstElement ():
Trong một số trường hợp, FirstElement () là không đủ. Ví dụ tiếp theo này cho thấy cách sử dụng các phương thức mở rộng để có được chế độ xem 3D không phải mẫu
đầu tiên (hữu ích cho việc nhập vào các hàm tạo ReferenceIntersector).
Vùng mã 6-11: Nhận phần tử chuyển đầu tiên bằng các phương pháp mở rộng
5.
6. // áp dụng ElementClassFilter 7.
collector.OfClass (typeof (View3D)); 8. 9. //
sử dụng các phương thức mở rộng để lấy View3D
không phải mẫu đầu tiên 10. View3D view3D = collector.Cast <View3D> () .First
<View3D> (isNotTemplate);
Machine Translated by Google
Ví dụ sau minh họa việc sử dụng phương thức FirstElementId () để lấy một phần tử đi qua (chế độ xem 3d trong trường hợp này) và việc sử dụng ToElementIds ()
để nhận kết quả bộ lọc dưới dạng tập hợp id phần tử (để xóa một tập hợp của các phần tử trong trường hợp này).
Vùng mã 6-12: Sử dụng Nhận kết quả bộ lọc dưới dạng id phần tử
9. // Kiểm tra xem khung nhìn có hợp lệ để lọc phần tử không 10. if
(FilteredElementCollector.IsViewValidForElementIteration (document, viewId)) 11. { 12. 13.
Phương thức GetElementIterator () được sử dụng trong ví dụ sau để lặp qua các phần tử được lọc để kiểm tra trạng thái dòng chảy của một số đường ống.
Vùng mã 6-13: Nhận kết quả dưới dạng một trình lặp phần tử
3. // Áp dụng một bộ lọc để lấy tất cả các đường ống trong tài liệu
4. collector.OfClass (typeof (Autodesk.Revit.DB.Plumbing.Pipe)); 5.
6. // Nhận kết quả dưới dạng trình lặp phần tử và tìm kiếm một đường ống có 7. //
trạng thái luồng cụ thể 8. FilteredElementIterator elemItr = collector.GetElementIterator
(); 9. elemItr.Reset (); 10. trong khi (elemItr.MoveNext ()) 11. { 12. 13.
Ngoài ra, kết quả bộ lọc có thể được trả về dưới dạng một trình lặp id phần tử:
Vùng mã 6-14: Nhận kết quả dưới dạng trình lặp id phần tử
1. // Sử dụng RoomFilter để tìm tất cả các phần tử phòng trong tài liệu.
4. // Áp dụng bộ lọc cho các phần tử trong tài liệu đang hoạt động 5.
FilteredElementCollector collector = new FilteredElementCollector (document); 6. bộ sưu tập.WherePasses
(bộ lọc); 7.
Trong một số trường hợp, có thể hữu ích khi kiểm tra một phần tử duy nhất dựa trên một bộ lọc nhất định, thay vì lấy tất cả các phần tử vượt qua bộ lọc. Có hai quá tải cho
ElementFilter.PassesFilter () kiểm tra một Phần tử nhất định, hoặc ElementId, so với bộ lọc, trả về true nếu phần tử vượt qua bộ lọc.
Trong .NET, lớp FilteredElementCollector hỗ trợ giao diện IEnumerable cho các phần tử. Bạn có thể sử dụng lớp này với các truy vấn và hoạt động LINQ để xử lý danh sách
các phần tử. Lưu ý rằng vì ElementFilters và các phương thức phím tắt được cung cấp bởi lớp này xử lý các phần tử trong mã gốc trước khi tạo trình bao bọc được quản
lý của chúng, nên hiệu suất tốt hơn sẽ đạt được bằng cách sử dụng càng nhiều bộ lọc gốc càng tốt trên bộ sưu tập trước khi cố gắng xử lý kết quả bằng cách sử dụng truy
vấn LINQ .
Ví dụ sau sử dụng ElementClassFilter để lấy tất cả các phần tử FamilyInstance trong tài liệu, sau đó sử dụng truy vấn LINQ để thu hẹp kết quả cho các FamilyInstance đó với
một tên cụ thể.
// Sử dụng ElementClassFilter để tìm các phiên bản gia đình có tên là 60 "x 30" Student
Bộ lọc ElementClassFilter = new ElementClassFilter (typeof (FamilyInstance));
// Áp dụng bộ lọc cho các phần tử trong tài liệu đang hoạt động
FilteredElementCollector collector = new FilteredElementCollector (tài liệu);
bộ sưu tập.WherePasses (bộ lọc);
// Sử dụng truy vấn Linq để tìm các phiên bản gia đình có tên là 60 "x 30" Student
var query = from phần tử trong bộ sưu tập
where element.Name == "60 \" x 30 \ "Sinh viên"
// Truyền các phần tử được tìm thấy đến các phiên bản
gia đình, // truyền dữ liệu này tới FamilyInstance là an toàn vì ElementClassFilter cho FamilyInstance đã được sử dụng
Danh sách <FamilyInstance> familyInstances = query.Cast <FamilyInstance> () .ToList <FamilyInstance> ();
Bộ lọc BoundBox:
BoundBoxIsInsideFilter
BoundBoxIntersectsFilter
BoundBoxContainsPointFilter
giúp bạn tìm các phần tử có các hộp giới hạn đáp ứng một tiêu chí nhất định. Bạn có thể kiểm tra xem hộp giới hạn của mỗi phần tử có bên trong một tập nhất định, giao với một tập
nhất định hay chứa một điểm nhất định hay không. Bạn cũng có thể đảo ngược việc kiểm tra này để tìm các phần tử không giao nhau giữa một tập hoặc chứa một điểm nhất định.
Bộ lọc BoundBox sử dụng Outline làm đầu vào của chúng. Outline là một lớp đại diện cho một lăng trụ hình chữ nhật bên phải có các trục được căn chỉnh với tọa độ Revit world
hệ thống.
Các bộ lọc này hoạt động tốt nhất cho các hình có hình dạng thực tế khớp với hình dạng của hộp giới hạn của nó. Các ví dụ có thể bao gồm các bức tường tuyến tính có đường cong thẳng
hàng với hướng X hoặc Y, các phòng hình chữ nhật được tạo bởi các bức tường, sàn nhà hoặc mái nhà như vậy được căn chỉnh với các bức tường đó hoặc các đình hình chữ nhật hợp lý.
Nếu không, có khả năng dương tính giả vì hộp giới hạn của phần tử có thể lớn hơn nhiều so với hình dạng thực tế. (Trong những trường hợp này, bạn có thể sử dụng hình học thực tế của
phần tử để xác định xem phần tử có thực sự đáp ứng tiêu chí hay không).
• ElementIntersectsElementFilter
• ElementIntersectsSolidFilter
vượt qua các phần tử có hình học 3D thực tế giao với hình học 3D của đối tượng đích.
Với ElementIntersectsElementFilter, đối tượng đích là một phần tử khác. Giao điểm được xác định với cùng một logic được Revit sử dụng để xác định xem có tồn tại nhiễu trong quá trình
tạo Báo cáo giao thoa hay không. (Điều này có nghĩa là một số tổ hợp các phần tử sẽ không bao giờ vượt qua bộ lọc này, chẳng hạn như các thành phần cụ thể được ghép tự động tại các
giao điểm của chúng). Ngoài ra, các phần tử không có hình dạng rắn, chẳng hạn như Rebar, sẽ không vượt qua bộ lọc này.
Machine Translated by Google
Với ElementIntersectsSolidFilter, đối tượng đích là bất kỳ vật rắn nào. Chất rắn này có thể được lấy từ một phần tử hiện có, được tạo từ đầu bằng cách sử dụng các quy trình trong GeometryCreationUtilities,
hoặc kết quả của một phép toán thứ cấp chẳng hạn như phép toán Boolean. Tương tự như ElementIntersectsElementFilter, bộ lọc này sẽ không chuyển các phần tử thiếu hình dạng rắn.
Cả hai bộ lọc đều có thể được đảo ngược để khớp với các phần tử bên ngoài khối lượng đối tượng mục tiêu.
Cả hai bộ lọc đều là bộ lọc chậm và do đó được kết hợp tốt nhất với một hoặc nhiều bộ lọc nhanh như bộ lọc lớp hoặc danh mục.
Vùng mã: sử dụng ElementIntersectsSolidFilter để khớp các phần tử chặn lối ra vào cửa bị vô hiệu hóa
1. /// <summary>
2. /// Tìm bất kỳ phần tử vật lý Revit nào cản trở mục tiêu 3. /// vùng rắn xung quanh cửa. </
summary> 4. /// <remarks> Quy trình này rất hữu ích để phát hiện các nhiễu 5. /// vi phạm Đạo
luật Người Mỹ Khuyết tật hoặc các mã truy cập 6. /// bị khuyết tật ở địa phương khác. </remarks>
7. /// <param name = "doorInstance"> Trường hợp cửa. </param> 8. /// <param name = "doorAccessibilityRegion">
Vùng khả năng tiếp cận được tính toán 9. /// để bao quanh lối tiếp cận của cánh cửa.
10. /// Bởi vì các tham số hình học của vùng này là mã và 11. /// cửa cụ thể, tính toán
hình học của vùng không phải là 12. /// được minh họa trong ví dụ này. </param> 13. ///
<returns> Tập hợp các id phần tử gây nhiễu. </returns> 14. private ICollection <ElementId>
FindElementsInterferingWithDoor (FamilyInstance doorInstance, Solid doorAccessibilityRegion)
15. { 16.
// Thiết lập bộ thu thập phần tử đã lọc cho tất cả các phần tử tài liệu.
17. FilteredElementCollector can thiệpCollector =
18. mới FilteredElementCollector (doorInstance.Document);
19.
20. // Chỉ chấp nhận các cá thể phần tử
21. interferingCollector.WhereElementIsNotElementType ();
22.
23. // Loại trừ các điểm giao cắt với cửa chính hoặc tường chủ đối với cửa.
24. Danh sách <ElementId> bị loại trừElements = new Danh sách <ElementId> ();
25. loại trừElements.Add (doorInstance.Id); loại trừElements.Add
26. (doorInstance.Host.Id); ExcludeFilter ExclusiveionFilter = new
27. ExclusiveFilter (loại trừ các công cụ này); interferingCollector.WherePasses (loại trừ bộ lọc);
28.
29.
30. // Thiết lập bộ lọc khớp với các phần tử có hình dạng rắn giao nhau // với vùng hỗ trợ tiếp cận
31.
32. Giao điểm ElementIntersectsSolidFilterFilter =
33. ElementIntersectsSolidFilter mới (doorAccessibilityRegion);
34. interferingCollector.WherePasses (Bộ lọc giao nhau);
35.
36. // Trả về tất cả các phần tử đi qua bộ sưu tập return
37. interferingCollector.ToElementIds ();
38. }
Machine Translated by Google
Lựa chọn
Bạn có thể lấy các đối tượng đã chọn từ tài liệu hoạt động hiện tại bằng cách sử dụng thuộc tính UIDocument.Selection.Elements. Các đối tượng được chọn nằm trong một ElementSet trong
Revit. Từ tập hợp Phần tử này, tất cả các Phần tử đã chọn sẽ được truy xuất. Đối tượng Selection cũng có thể được sử dụng để thay đổi lựa chọn hiện tại theo chương trình.
Ngoài ra, phương thức Selection.GetElementIds () truy xuất cùng một tập hợp các phần tử như thuộc tính Selection.Elements. Bộ sưu tập được trả về bởi phương thức này có thể được sử
dụng trực tiếp với FilteredElementCollector để lọc các phần tử đã chọn.
// Lấy các phần tử đã chọn tạo thành tài liệu hiện tại.
4. UIDocument uidoc = new UIDocument (tài liệu); Bộ sưu tập
5. Autodesk.Revit.UI.Selection.SelElementSet = uidoc.Selection.Elements;
6.
7. // Hiển thị số phần tử được chọn hiện tại TaskDialog.Show
số 8.
("Revit", "Số phần tử được chọn:" + collection.Size.ToString ());
9.
10. // Tạo một SelElementSet SelElementSet
11. newSelectedElementSet = SelElementSet.Create ();
12.
13. // Thêm tường vào tập phần tử đã tạo. foreach (Các
14. phần tử Autodesk.Revit.DB.Element trong bộ sưu tập) {
15.
16. if (các phần tử là Wall) {
17.
18. newSelectedElementSet.Add (phần tử);
19. }
20. }
21.
22. // Đặt tập hợp phần tử đã tạo thành tập hợp phần tử chọn hiện tại.
23. uidoc.Selection.Elements = newSelectedElementSet;
24.
25. // Cung cấp cho người dùng một số thông
26. tin. if (0! = newSelectedElementSet.Size) {
27.
28. TaskDialog.Show ("Revit", uidoc.Selection.Elements.Size.ToString () + "Tường được
29. chọn!");
30.
31. }
32. khác {
33. TaskDialog.Show ("Revit", "Không có Tường nào được chọn!");
34. }
35. }
Lớp Selection cũng có các phương thức cho phép người dùng chọn các đối tượng mới, hoặc thậm chí một điểm trên màn hình. Điều này cho phép người dùng chọn một hoặc nhiều Phần tử (hoặc các
đối tượng khác, chẳng hạn như cạnh hoặc mặt) bằng cách sử dụng con trỏ và sau đó trả lại quyền điều khiển cho ứng dụng của bạn. Các chức năng này không tự động thêm vùng chọn mới vào bộ sưu
tập vùng chọn đang hoạt động.
• Phương thức PickObject () nhắc người dùng chọn một đối tượng trong mô hình Revit.
• Phương thức PickObjects () nhắc người dùng chọn nhiều đối tượng trong mô hình Revit.
• Phương thức PickElementsByRectangle () nhắc người dùng chọn nhiều phần tử bằng cách sử dụng một hình chữ nhật.
• Phương thức PickPoint () nhắc người dùng chọn một điểm trong mặt phẳng phác thảo đang hoạt động.
• Phương thức PickBox () gọi một trình soạn thảo bằng hai cú nhấp chuột cho mục đích chung cho phép người dùng chỉ định một vùng hình chữ nhật trên màn hình.
Loại đối tượng được chọn được chỉ định khi gọi PickObject () hoặc PickObjects. Các loại đối tượng có thể được chỉ định là: Element, PointOnElement, Edge hoặc Face.
Machine Translated by Google
Thuộc tính StatusbarTip hiển thị thông báo trên thanh trạng thái khi ứng dụng của bạn nhắc người dùng chọn đối tượng hoặc phần tử. Mỗi hàm Pick có quá tải
có tham số Chuỗi trong đó có thể cung cấp thông báo trạng thái tùy chỉnh.
12. IList <Element> hasPickSome = styles.PickElementsByRectangle ("Chọn theo hình chữ nhật"); 13. if (hasPickSome.Count>
0) 14. {
Phương thức PickPoint () có 2 quá tải với tham số ObjectSnapTypes được sử dụng để chỉ định loại kiểu snap được sử dụng cho vùng chọn. Nhiều hơn một có
thể được chỉ định, như được hiển thị trong ví dụ tiếp theo.
Phương thức PickBox () nhận một liệt kê PickBoxStyle. Các tùy chọn là Chéo, kiểu được sử dụng khi chọn các đối tượng hoàn toàn hoặc một phần bên trong
hộp, Bao bọc, kiểu được sử dụng để chọn các đối tượng được bao bọc hoàn toàn bởi hộp và Hướng, trong đó kiểu của hộp phụ thuộc vào hướng hộp đang được
vẽ. Nó sử dụng kiểu Chéo nếu nó được vẽ từ phải sang trái hoặc kiểu Bao quanh khi được vẽ theo hướng ngược lại.
Machine Translated by Google
PickBox () trả về một PickedBox chứa các điểm Tối thiểu và Tối đa được chọn. Ví dụ sau minh họa việc sử dụng PickBox () trong lựa chọn Point Cloud.
36. }
37.
38. bool tĩnh riêng IsPointAbovePlane (XYZ normal, XYZ planePoint, XYZ point) 39. { 40.
PickObject (), PickObjects () và PickElementsByRectangle () đều có quá tải lấy ISelectionFilter làm tham số. ISelectionFilter là một giao diện có thể được
thực hiện để lọc các đối tượng trong một hoạt động lựa chọn. Nó có hai phương thức có thể được ghi đè: AllowElement () được sử dụng để chỉ định xem một phần
tử có được phép chọn hay không và AllowReference () được sử dụng để chỉ định xem có cho phép chọn một tham chiếu đến một phần hình học hay không.
Machine Translated by Google
Ví dụ sau minh họa cách sử dụng giao diện ISelectionFilter để giới hạn lựa chọn của người dùng đối với các phần tử trong danh mục Khối lượng. Nó không cho phép bất kỳ
tham chiếu nào đến hình học được chọn.
trả về true;
} trả về false; }
trả về sai;
}
}
Ví dụ tiếp theo minh họa việc sử dụng ISelectionFilter để cho phép chỉ các mặt phẳng được chọn.
Vùng mã 7-5: Sử dụng ISelectionFilter để giới hạn lựa chọn hình học
trả về true;
// Chỉ trả về true cho các mặt phẳng. Các mặt không phẳng sẽ không thể chọn được trả về true;
} trả về false;
}
}
Để biết thêm thông tin về cách truy xuất các Phần tử từ các Phần tử đã chọn, hãy xem Hướng dẫn: Lấy các Phần tử đã Chọn trong phần Bắt đầu tiết diện.
Machine Translated by Google
Thông số
Revit cung cấp một cơ chế chung để cung cấp cho mỗi phần tử một tập hợp các tham số mà bạn có thể chỉnh sửa. Trong giao diện người dùng Revit, các thông số
hiển thị trong hộp thoại Thuộc tính phần tử. Chương này mô tả cách lấy và sử dụng các thông số tích hợp bằng API nền tảng Revit. Để biết thêm thông tin về
thông số được chia sẻ do người dùng xác định, hãy xem Thông số được chia sẻ.
Trong API nền tảng Revit, các Tham số được quản lý trong lớp Phần tử. Bạn có thể truy cập Tham số theo những cách sau:
• Bằng cách lặp qua bộ sưu tập Element.Parameters của tất cả các tham số cho một Phần tử (ví dụ: xem mã mẫu trong
Hướng dẫn Nhận thông số phần tử đã chọn).
• Bằng cách truy cập trực tiếp tham số thông qua thuộc tính Element.Parameter đã được nạp chồng. Nếu Tham số không tồn tại, thuộc tính
trả về null.
• Bằng cách truy cập một tham số theo tên thông qua bộ sưu tập Element.ParametersMap.
Bạn có thể truy xuất đối tượng Tham số từ một Phần tử nếu bạn biết chuỗi tên, ID tích hợp, định nghĩa hoặc GUID. Quá tải thuộc tính Parameter [String] nhận
một tham số dựa trên tên bản địa hóa của nó, vì vậy mã của bạn phải xử lý các ngôn ngữ khác nhau nếu nó sẽ tìm kiếm các tham số theo tên và cần chạy ở nhiều
ngôn ngữ.
Quá tải thuộc tính Parameter [GUID] nhận một tham số được chia sẻ dựa trên ID duy nhất toàn cầu (GUID) của nó, được gán cho tham số được chia sẻ khi nó
được tạo.
Các Tham số Phần tử được truy xuất bằng cách lặp lại Thông qua Bộ Tham số Phần tử. Mẫu mã sau đây minh họa cách lấy Tham số từ một phần tử đã chọn.
Lưu ý Ví dụ này sử dụng một số thành viên Tham số, chẳng hạn như AsValueString và StorageType, được đề cập ở phần sau của chương này.
Machine Translated by Google
{
" "
defName + = : + id.Value.ToString ();
}
phá vỡ;
case StorageType.Integer:
if (ParameterType.YesNo == para.Definition.ParameterType)
{
if (para.AsInteger () == 0)
{
" "
defName + = : + "Sai";
}
khác
{
" "
defName + = : + "Đúng";
}
}
khác
{
" "
defName + = : + para.AsInteger (). toString ();
}
phá vỡ;
case StorageType.String:
" "
defName + = : + para.AsString ();
phá vỡ;
mặc định:
trả về defName;
}
Machine Translated by Google
Lưu ý Trong Revit , một số tham số có giá trị trong danh sách thả xuống trong hộp thoại Thuộc tính phần tử. Bạn có thể nhận các giá trị số tương ứng với
kiểu liệt kê cho Tham số bằng cách sử dụng API nền tảng Revit, nhưng bạn không thể lấy biểu diễn chuỗi cho các giá trị bằng phương thức Parameter.AsValueString
().
Sự định nghĩa
Đối tượng Định nghĩa mô tả kiểu dữ liệu, tên và các chi tiết Tham số khác. Có hai loại đối tượng định nghĩa bắt nguồn từ đối tượng này.
• InternalDefinition đại diện cho tất cả các loại định nghĩa tồn tại hoàn toàn trong cơ sở dữ liệu Revit.
• ExternalDefinition đại diện cho các định nghĩa được lưu trữ trên đĩa trong một tệp tham số được chia sẻ.
Bạn nên viết mã để sử dụng lớp cơ sở Định nghĩa để mã có thể áp dụng cho cả Định nghĩa tham số bên trong và bên ngoài.
Mẫu mã sau đây cho thấy cách tìm một tham số cụ thể bằng cách sử dụng kiểu định nghĩa.
Vùng mã 8-2: Tìm một tham số dựa trên kiểu định nghĩa
1. // Tìm tham số bằng kiểu định nghĩa của Tham số. 2. public Parameter
FindParameter (Phần tử phần tử) 3. { 4.
ParameterType
Thuộc tính này trả về kiểu dữ liệu tham số, loại dữ liệu này ảnh hưởng đến cách tham số được hiển thị trong giao diện người dùng Revit. Các thành viên liệt kê
ParameterType là:
Con số Dữ liệu tham số phải được hiểu là một số thực, có thể bao gồm cả dấu thập phân.
Khoa ng khăc Giá trị dữ liệu sẽ được biểu diễn dưới dạng thời điểm.
AreaForce Giá trị dữ liệu sẽ được biểu diễn dưới dạng lực diện tích.
LinearForce Giá trị dữ liệu sẽ được biểu diễn dưới dạng lực tuyến tính.
Lực lượng Giá trị dữ liệu sẽ được biểu diễn dưới dạng lực lượng.
Machine Translated by Google
Có không Một giá trị boolean sẽ được biểu thị là Có hoặc Không.
Vật chất Giá trị của tài sản này được coi là vật chất.
URL Một chuỗi văn bản đại diện cho một địa chỉ web.
Góc Dữ liệu tham số đại diện cho một góc. Biểu diễn bên trong sẽ tính bằng radian. Phần trình bày người dùng có thể nhìn thấy sẽ ở trong
Âm lượng Dữ liệu tham số đại diện cho một khối lượng. Biểu diễn bên trong sẽ ở dạng feet khối thập phân. Phần trình bày người dùng có thể nhìn
Diện tích Dữ liệu tham số đại diện cho một khu vực. Biểu diễn bên trong sẽ ở dạng bộ vuông thập phân. Phần trình bày người dùng có thể nhìn thấy
Số nguyên Dữ liệu tham số phải được hiểu là một số nguyên, dương hoặc âm.
Không hợp lệ Loại tham số không hợp lệ. Giá trị này không nên được sử dụng.
Chiều dài Dữ liệu tham số đại diện cho độ dài. Biểu diễn bên trong sẽ ở dạng bộ thập phân. Biểu diễn hiển thị của người dùng sẽ nằm trong hệ thống đơn vị mà
Chữ Dữ liệu tham số phải được hiểu là một chuỗi văn bản.
ParameterGroup
Thuộc tính ParameterGroup lớp Định nghĩa trả về ID nhóm định nghĩa tham số. BuildInParameterGroup là một kiểu liệt kê liệt kê tất cả các nhóm tham số tích hợp
được Revit hỗ trợ. Nhóm tham số được sử dụng để sắp xếp các tham số trong hộp thoại Thuộc tính phần tử.
VariesAcrossGroups
Thuộc tính này, dành riêng cho lớp con InternalDefinition và phương thức SetAllowVaryBetweenGroups () tương ứng xác định liệu các giá trị của tham số này có
thể khác nhau giữa các thành viên liên quan của các trường hợp nhóm hay không. Nếu Sai, các giá trị sẽ nhất quán giữa các thành viên liên quan trong các trường
hợp nhóm. Điều này chỉ có thể được đặt cho các tham số không được tích hợp sẵn.
BuiltInParameter
API nền tảng Revit có một số lượng lớn các tham số tích hợp, được định nghĩa trong kiểu liệt kê Autodesk.Revit.Parameters.BuiltInParameter (xem tệp RevitAPI
Help.chm để biết định nghĩa về kiểu liệt kê này). Bảng liệt kê này đã tạo ra tài liệu có thể nhìn thấy từ Visual Studio intellisense như được hiển thị bên
dưới. Tài liệu cho mỗi id bao gồm tên tham số, như được tìm thấy trong hộp thoại Thuộc tính phần tử trong phiên bản tiếng Anh của Autodesk Revit. Lưu ý rằng
nhiều id tham số riêng biệt có thể ánh xạ đến cùng một tên tiếng Anh; trong những trường hợp đó, bạn phải kiểm tra các tham số được liên kết với một phần tử cụ
thể để xác định id tham số nào sẽ sử dụng.
ID tham số được sử dụng để truy xuất tham số cụ thể từ một phần tử, nếu nó tồn tại, bằng cách sử dụng thuộc tính Element.Parameter. Tuy nhiên, không phải tất
cả các tham số đều có thể được truy xuất bằng ID. Ví dụ: các thông số gia đình không được hiển thị trong API nền tảng Revit, do đó, bạn không thể lấy chúng
bằng cách sử dụng ID thông số tích hợp sẵn.
Mẫu mã sau đây cho thấy cách lấy tham số cụ thể bằng Id BuiltInParameter:
tham số trả về ;
7. 8. 9. }
Lưu ý Với quá tải tham số, bạn có thể sử dụng kiểu Enumerated BuiltInParameter làm tham số phương thức. Ví dụ: sử dụng BuiltInParameter.GENERIC_WIDTH.
Machine Translated by Google
Nếu bạn không biết ID BuiltInParameter chính xác, hãy lấy tham số bằng cách lặp lại bộ sưu tập ParameterSet. Một cách tiếp cận khác cho các mục đích kiểm
tra hoặc nhận dạng là kiểm tra từng BuiltInParameter bằng cách sử dụng phương thức get_Parameter (). Khi bạn sử dụng phương pháp này, có thể bộ sưu tập
ParameterSet có thể không chứa tất cả các tham số được trả về từ phương thức get_Parameter (), mặc dù điều này là không thường xuyên.
StorageType mô tả loại giá trị tham số được lưu trữ bên trong.
Dựa trên giá trị thuộc tính, sử dụng các phương thức get và set tương ứng để truy xuất và đặt giá trị dữ liệu tham số.
StorageType là một kiểu liệt kê liệt kê tất cả các kiểu lưu trữ dữ liệu thông số nội bộ được Revit hỗ trợ:
Sợi dây Dữ liệu nội bộ được lưu trữ dưới dạng một chuỗi ký tự.
ElementId Kiểu dữ liệu đại diện cho một phần tử và được lưu trữ dưới dạng ID phần tử.
Kép Dữ liệu được lưu trữ bên trong dưới dạng số dấu phẩy động 8 byte.
Số nguyên Dữ liệu nội bộ được lưu trữ dưới dạng số nguyên 32 bit có dấu.
Không có Không có nào đại diện cho một loại lưu trữ không hợp lệ. Chỉ sử dụng nội bộ.
Trong hầu hết các trường hợp, giá trị ElementId là một số dương. Tuy nhiên, nó có thể là một số âm. Khi giá trị ElementId là âm, nó không đại diện cho một Phần tử mà có
một ý nghĩa khác. Ví dụ, tham số kiểu lưu trữ cho Phép chiếu dọc của chùm là ElementId. Khi giá trị tham số là Mức 1 hoặc Mức 2, giá trị ElementId là dương và tương ứng
với ElementId của mức đó.
Tuy nhiên, khi giá trị tham số được đặt thành Tự động phát hiện, Trung tâm của chùm hoặc Đầu chùm, giá trị ElementId là âm.
Mẫu mã sau đây cho thấy cách kiểm tra xem giá trị của một tham số có thể được đặt thành giá trị kép hay không, dựa trên StorageType của nó:
// nếu tham số chỉ đọc, bạn không thể thay đổi giá trị của nó
if (null! = tham số &&! tham số.IsReadOnly)
{
StorageType tham sốType = tham số.StorageType;
if (StorageType.Double! = parameterType)
{
ném ngoại lệ mới ("Các kiểu lưu trữ của giá trị và tham số là khác nhau!");
}
}
Machine Translated by Google
Giá trị trả về của phương thức Set () chỉ ra rằng giá trị Tham số đã được thay đổi. Phương thức Set () trả về true nếu giá trị Tham số đã được thay đổi, nếu không, nó
trả về false.
Không phải tất cả các Tham số đều có thể ghi được. Một Ngoại lệ được ném ra nếu Tham số ở chế độ chỉ đọc.
AsValueString () và SetValueString ()
AsValueString () và SetValueString () là các phương thức của lớp Tham số. Hai phương pháp này chỉ được áp dụng cho các tham số kiểu giá trị, là các tham số kép hoặc số
nguyên đại diện cho một đại lượng được đo.
Sử dụng phương thức AsValueString () để nhận giá trị tham số là một chuỗi với đơn vị đo lường. Ví dụ, giá trị Base Offset, một tham số tường, là một giá trị Double.
Thông thường giá trị được hiển thị dưới dạng chuỗi như -20'0 "trong hộp thoại Thuộc tính phần tử:
Sử dụng phương thức AsValueString (), bạn nhận trực tiếp giá trị chuỗi -20'0 ". Nếu không, bạn sẽ nhận được giá trị kép như -20 mà không có đơn vị đo lường nếu bạn
sử dụng phương thức AsDouble ().
Sử dụng phương thức SetValueString () để thay đổi giá trị của một tham số kiểu giá trị thay vì sử dụng phương thức Set (). Mẫu mã sau minh họa cách thay đổi giá
trị tham số bằng phương thức SetValueString ():
if (! foundParameter.IsReadOnly)
{
// Nếu thành công, kết quả là true
• liệu một Thông số khác có thể được đặt hay ở chế độ chỉ đọc
Một số thông số được tính toán trong Revit, chẳng hạn như thông số Chiều dài và Diện tích tường. Các tham số này luôn ở chế độ chỉ đọc vì chúng phụ thuộc vào trạng
thái bên trong của phần tử.
Trong mẫu mã này, thông số Chiều cao ống cho lỗ mở được điều chỉnh, dẫn đến thông số Chiều cao đầu được tính toán lại:
// Chỉ thay đổi Chiều cao đầu ống và lưu ý rằng Chiều cao đầu được tính toán lại
sillPara.Set (sillHeight + 2.0);
double newHeadHeight = headPara.AsDouble ();
MessageBox.Show ("Chiều cao đầu cũ:" + origHeadHeight + "; chiều cao đầu mới:" + newHeadHeight);
Trong API Nền tảng Revit, bạn có thể sử dụng tất cả các thông số đã xác định và bạn có thể thêm các thông số tùy chỉnh mà bạn xác định bằng cách sử dụng giao diện
người dùng Revit và API Nền tảng Revit.
Để biết thêm chi tiết, hãy tham khảo Thông số được chia sẻ.
Bộ sưu tập
Hầu hết các thuộc tính và phương thức API Nền tảng Revit sử dụng các lớp thu thập .NET Framework khi cung cấp quyền truy cập vào một nhóm các mục có liên quan.
Các giao diện IEnumerable và IEnumerator được triển khai trong các loại bộ sưu tập Revit được định nghĩa trong không gian tên System.Collection.
Giao diện
Các phần sau đây thảo luận về các loại bộ sưu tập liên quan đến giao diện.
IEnumerable
Giao diện IEnumerable nằm trong không gian tên System.Collections. Nó hiển thị trình điều tra, hỗ trợ một phép lặp đơn giản trên một tập hợp không chung chung. Phương
thức GetEnumerator () nhận một điều tra viên triển khai giao diện này. IEnumerator được trả lại đối tượng được lặp lại trong suốt bộ sưu tập. Phương thức GetEnumerator
() được sử dụng ngầm bởi các vòng lặp foreach trong C #.
IEnumerator
Giao diện IEnumerator nằm trong không gian tên System.Collections. Nó hỗ trợ lặp lại đơn giản trên một tập hợp không chung chung. IEnumerator là giao diện cơ sở cho tất cả
các điều tra viên không chung chung. Câu lệnh foreach trong C # ẩn tính phức tạp của điều tra viên.
Lưu ý Nên sử dụng foreach thay vì thao tác trực tiếp với điều tra viên.
Điều tra viên được sử dụng để đọc dữ liệu thu thập, nhưng chúng không thể được sử dụng để sửa đổi tập hợp cơ bản. Sử dụng IEnumerator như sau:
Machine Translated by Google
• Ban đầu, điều tra viên được định vị trước phần tử đầu tiên trong tập hợp. Tuy nhiên, bạn nên luôn gọi Reset ()
khi bạn có được điều tra viên lần đầu tiên.
o Phương thức Reset () di chuyển điều tra viên trở lại vị trí ban đầu. Tại vị trí này, gọi thuộc tính Hiện tại ném
một ngoại lệ.
o Gọi phương thức MoveNext () để nâng cao trình điều tra đến phần tử đầu tiên của bộ sưu tập trước khi đọc trình lặp hiện tại
giá trị.
• Thuộc tính Hiện tại trả về cùng một đối tượng cho đến khi phương thức MoveNext () hoặc phương thức Reset () được gọi. MoveNext ()
phương thức đặt trình vòng lặp hiện tại thành phần tử tiếp theo.
• Nếu MoveNext đi qua phần cuối của bộ sưu tập, thì điều tra viên sẽ được đặt sau phần tử cuối cùng trong bộ sưu tập và MoveNext
trả về false.
o Khi điều tra viên ở vị trí này, các lệnh gọi tiếp theo tới MoveNext cũng trả về false.
o Nếu lần gọi cuối cùng tới MoveNext trả về false, việc gọi thuộc tính Hiện tại sẽ ném ra một ngoại lệ.
o Để thiết lập lại trình lặp hiện tại thành phần tử đầu tiên trong bộ sưu tập, hãy gọi phương thức Reset () theo sau là MoveNext ().
• Điều tra viên vẫn có giá trị miễn là việc thu thập không thay đổi.
o Nếu các thay đổi được thực hiện đối với tập hợp, chẳng hạn như thêm, sửa đổi hoặc xóa các phần tử, thì điều tra viên sẽ bị vô hiệu và
lệnh gọi tiếp theo tới MoveNext () hoặc phương thức Reset () ném ra một lỗi không hợp lệ.
o Nếu tập hợp được sửa đổi giữa MoveNext và trình vòng lặp hiện tại, thuộc tính Hiện tại sẽ trở về phần tử được chỉ định, ngay cả khi trình điều tra đã bị vô hiệu.
Lưu ý Tất cả các lệnh gọi đến phương thức Reset () phải dẫn đến cùng một trạng thái cho điều tra viên. Cách triển khai ưu tiên là di chuyển điều tra viên đến đầu tập hợp,
trước phần tử đầu tiên. Điều này làm mất hiệu lực của điều tra viên nếu tập hợp được sửa đổi sau khi điều tra viên được tạo, điều này phù hợp với thuộc tính MoveNext () và hiện
tại.
Trong API nền tảng Revit, Bộ sưu tập và Trình lặp lại là chung và loại an toàn. Ví dụ, ElementSet luôn chứa Element và có thể được sử dụng như sau:
Tất cả các tập hợp triển khai giao diện IEnumerable và tất cả các trình vòng lặp có liên quan triển khai giao diện IEnumerator. Do đó, tất cả các phương pháp và thuộc tính đều được triển
khai trong API Nền tảng Revit và có thể đóng một vai trò nào đó trong các bộ sưu tập có liên quan.
Machine Translated by Google
Thực hiện tất cả các bộ sưu tập là tương tự. Ví dụ sau sử dụng ElementSet và ModelCurveArray để trình bày cách sử dụng các thuộc tính bộ sưu tập chính:
"
+ lineArray.Size + "trong lineArray.");
41.
42. TaskDialog.Show ("Revit
Trong Revit, bạn có thể di chuyển, sao chép, xoay, căn chỉnh, xóa, nhân bản, nhóm và mảng một phần tử hoặc một tập hợp các phần tử với API Nền tảng Revit.
Sử dụng chức năng chỉnh sửa trong API tương tự như các lệnh trong Revit UI.
Lớp ElementTransformUtils cung cấp hai phương thức tĩnh để di chuyển một hoặc nhiều phần tử từ nơi này sang nơi khác.
Thành viên Sự mô tả
MoveElement (Tài liệu, ElementId, XYZ) Di chuyển một phần tử trong tài liệu theo một vectơ được chỉ định.
MoveElements (Document, ICollection <ElementId>, XYZ) Di chuyển một số phần tử theo một tập hợp các ID trong tài liệu bằng một vectơ được chỉ định.
Lưu ý Khi bạn sử dụng phương thức MoveElement () hoặc MoveElements (), các quy tắc sau sẽ được áp dụng.
• Các phương thức không thể di chuyển một phần tử dựa trên cấp độ lên hoặc xuống so với cấp độ. Khi phần tử dựa trên mức, bạn không thể thay đổi giá trị
tọa độ Z. Tuy nhiên, bạn có thể đặt phần tử ở bất kỳ vị trí nào trong cùng một cấp. Ngoài ra, một số phần tử dựa trên mức có tham số phiên bản offset
mà bạn có thể sử dụng để di chuyển chúng theo hướng Z.
Ví dụ: nếu bạn tạo một cột mới tại vị trí ban đầu (0, 0, 0) trong Cấp độ 1, rồi di chuyển nó đến vị trí mới (10, 20, 30), cột sẽ được đặt tại vị
trí (10, 20 , 0) thay vì (10, 20, 30).
Machine Translated by Google
• Khi bạn di chuyển một hoặc nhiều phần tử, các phần tử liên quan sẽ được di chuyển. Ví dụ, nếu một bức tường có cửa sổ bị di chuyển, thì cửa sổ
cũng được di chuyển.
Một cách khác để di chuyển một phần tử trong Revit là sử dụng Vị trí và các đối tượng phái sinh của nó. Trong API Nền tảng Revit, đối tượng Vị trí cung cấp khả năng dịch và xoay các phần tử. Có thêm
thông tin vị trí và kiểm soát bằng cách sử dụng các dẫn xuất của đối tượng Vị trí như LocationPoint hoặc LocationCurve. Nếu phần tử Vị trí được chiếu xuống đối tượng LocationCurve hoặc đối tượng
LocationPoint, hãy di chuyển trực tiếp đường cong hoặc điểm đến một vị trí mới.
5. 6. }
Khi bạn di chuyển phần tử, hãy lưu ý rằng vectơ (10, 20, 0) không phải là điểm đến mà là phần bù. Hình sau minh họa vị trí tường trước và sau khi di chuyển.
Ngoài ra, bạn có thể sử dụng thuộc tính LocationCurve Curve hoặc thuộc tính LocationPoint Point để di chuyển một phần tử trong Revit.
Sử dụng thuộc tính Curve để di chuyển phần tử hướng theo đường cong đến bất kỳ vị trí cụ thể nào. Nhiều yếu tố được định hướng theo đường cong, chẳng hạn như tường, dầm và nẹp. Cũng sử dụng
thuộc tính để thay đổi kích thước độ dài của phần tử.
Machine Translated by Google
Bạn cũng có thể lấy hoặc đặt các thuộc tính nối của phần tử dựa trên đường cong với thuộc tính LocationCurve.JoinType.
Sử dụng thuộc tính Điểm LocationPoint để đặt vị trí thực của phần tử.
Lớp ElementTransformUtils cung cấp một số phương thức tĩnh để sao chép một hoặc nhiều phần tử từ nơi này sang nơi khác, trong cùng một tài liệu hoặc dạng xem, hoặc sang một tài liệu hoặc dạng
xem khác.
Thành viên Sự mô tả
Sao chép một phần tử và đặt bản sao tại một vị trí được chỉ ra bởi một phép biến đổi
CopyElement (Tài liệu, ElementId, XYZ)
nhất định ..
Sao chép một tập hợp các phần tử và đặt các bản sao tại một vị trí được chỉ định bởi
Tất cả các phương thức trả về một tập hợp các ElementIds của các phần tử mới được tạo, bao gồm CopyElement (). Bộ sưu tập bao gồm bất kỳ phần tử nào được tạo ra do phụ thuộc.
Phương pháp sao chép từ tài liệu này sang tài liệu khác chỉ có thể được sử dụng để sao chép các phần tử cụ thể không xem. Các bản sao được đặt tại vị trí ban đầu tương ứng của chúng hoặc các
Các phần tử dành riêng cho chế độ xem phải được sao chép bằng phương pháp sao chép từ chế độ xem này sang chế độ xem khác. Phương pháp đó có thể được sử dụng cho cả các phần tử mô hình và
chế độ xem cụ thể, tuy nhiên, các khung nhìn phác thảo không thể được sử dụng làm đích cho các phần tử mô hình. Các phần tử đã dán được định vị lại để đảm bảo vị trí thích hợp trong chế độ
xem đích. Ví dụ, độ cao bị thay đổi khi sao chép từ cấp độ này sang cấp độ khác. Một phép chuyển đổi bổ sung trong dạng xem đích có thể được thực hiện bằng cách cung cấp đối số Biến đổi tùy
chọn. Phép biến đổi bổ sung này phải nằm trong mặt phẳng của khung nhìn đích.
Khi sao chép từ chế độ xem này sang chế độ xem khác, cả chế độ xem nguồn và đích phải là chế độ xem đồ họa 2D có khả năng vẽ chi tiết và các yếu tố dành riêng cho chế độ xem, chẳng hạn
như sơ đồ sàn và trần, độ cao, mặt cắt hoặc chế độ xem phác thảo. Phương thức ElementTransformUtils.GetTransformFromViewToView () sẽ trả về phép biến đổi được áp dụng cho các phần tử
khi sao chép từ chế độ xem nguồn sang chế độ xem đích.
Machine Translated by Google
Khi sao chép giữa các dạng xem hoặc giữa các tài liệu, một tham số CopyPasteOptions tùy chọn có thể được đặt để ghi đè cài đặt sao chép / dán mặc định. Theo mặc định, trong
trường hợp tên loại trùng lặp trong quá trình dán, Revit sẽ hiển thị hộp thoại phương thức với các tùy chọn để sao chép các loại chỉ có tên duy nhất hoặc để hủy thao tác.
CopyPasteOptions có thể được sử dụng để chỉ định một trình xử lý tùy chỉnh, sử dụng giao diện IDuplicateTypeNamesHandler, để xử lý loại trùng lặp
những cái tên.
Xem mẫu Chế độ xem trùng lặp trong Revit SDK để biết ví dụ chi tiết về việc sao chép giữa các tài liệu và giữa các chế độ xem.
Phần tử xoay
Lớp ElementTransformUtils cung cấp hai phương thức tĩnh để xoay một hoặc một số phần tử trong dự án.
Thành viên Sự mô tả
RotateElement (Document, ElementId, Line, double) Xoay một phần tử trong tài liệu theo một số radian được chỉ định xung quanh một trục nhất định.
RotateElements (Document, ICollection <ElementId>, Line, double) Xoay một số phần tử theo ID trong dự án theo một số radian được chỉ định xung quanh một trục
nhất định.
Trong các phương pháp này, góc quay tính bằng radian. Radian dương có nghĩa là quay ngược chiều kim đồng hồ quanh trục xác định, trong khi radian âm có nghĩa là
theo chiều kim đồng hồ, như các hình sau minh họa.
Lưu ý rằng các phần tử được ghim không thể xoay được.
Nếu phần tử Vị trí có thể được đưa xuống LocationCurve hoặc LocationPoint, bạn có thể xoay trực tiếp đường cong hoặc điểm.
16. }
Phương thức ItemFactoryBase.NewAlignment () có thể tạo một liên kết bị khóa mới giữa hai tham chiếu. Hai tham chiếu này phải là một trong những nội dung sau
kết hợp:
• 2 mặt phẳng
• 2 dòng
• 2 vòng cung
Các tham chiếu này phải được căn chỉnh về mặt hình học vì chức năng này sẽ không buộc chúng phải được căn chỉnh. Nếu căn chỉnh có thể được tạo, một đối tượng
Thứ nguyên mới sẽ được trả về đại diện cho căn chỉnh bị khóa. Nếu không, một ngoại lệ sẽ được ném ra.
Phương thức NewAlignment () cũng yêu cầu một dạng xem sẽ xác định hướng của căn chỉnh.
Xem ví dụ CreateTruss trong thư mục FamilyCreation đi kèm với Mẫu SDK. Nó có một số ví dụ về việc sử dụng NewAlignment (), chẳng hạn như khóa hợp âm dưới cùng của giàn
Lớp ElementTransformUtils cung cấp hai phương thức tĩnh để phản chiếu một hoặc nhiều phần tử trong dự án.
Thành viên Sự mô tả
MirrorElement (Document, ElementId, Plane) Phản chiếu một phần tử về một mặt phẳng hình học.
MirrorElements (Document, ICollection <ElementId>, Plane) Phản chiếu một số phần tử về một mặt phẳng hình học.
Sau khi thực hiện thao tác nhân bản, bạn có thể truy cập các phần tử mới từ Bộ phần tử lựa chọn.
ElementTransformUtils.CanMirrorElement () và ElementTransformUtils.CanMirrorElements () có thể được sử dụng để xác định xem một hoặc nhiều phần tử có thể được sao chép trước khi
cố gắng sao chép một phần tử.
Đoạn mã sau đây minh họa cách phản chiếu một bức tường bằng cách sử dụng một mặt phẳng được tính toán dựa trên một mặt bên của bức tường.
Mỗi FamilyInstance đều có thuộc tính Mirrored. Nó cho biết liệu FamilyInstance (ví dụ một cột) có được sao chép hay không.
Machine Translated by Google
Ban đầu, nhóm có tên chung, chẳng hạn như Nhóm 1. Có thể sửa đổi tên này bằng cách thay đổi tên của loại nhóm như sau:
Có ba loại nhóm trong Revit; Nhóm mô hình, Nhóm chi tiết và Nhóm chi tiết đính kèm. Tất cả đều được tạo bằng phương thức NewGroup (). Loại của Nhóm được tạo phụ thuộc
vào các Phần tử được truyền vào.
• Nếu không có Phần tử chi tiết nào được chuyển, Nhóm Mô hình sẽ được tạo.
• Nếu tất cả các Phần tử là các phần tử chi tiết, thì một Nhóm chi tiết sẽ được tạo.
• Nếu cả hai loại Phần tử được bao gồm, một Nhóm mô hình có chứa Nhóm chi tiết đính kèm sẽ được tạo và trả về.
Lưu ý Khi các phần tử được nhóm lại, chúng có thể bị xóa khỏi dự án.
• Khi một phần tử mô hình trong nhóm mô hình bị xóa, nó vẫn hiển thị khi con trỏ chuột di chuột qua hoặc nhấp vào nhóm, ngay cả khi ứng dụng trả về Giao diện người dùng
thành công. Trên thực tế, phần tử mô hình bị xóa và bạn không thể chọn hoặc truy cập phần tử đó.
• Khi thành viên cuối cùng của một cá thể nhóm bị xóa, bị loại trừ hoặc bị loại bỏ khỏi dự án, cá thể nhóm mô hình sẽ bị xóa.
Khi các phần tử được nhóm lại, chúng không thể được di chuyển hoặc xoay. Nếu bạn thực hiện các thao tác này trên các phần tử được nhóm, không có gì xảy ra với các phần tử, mặc
dù phương thức Move () hoặc Rotate () trả về true.
Bạn không thể nhóm các thứ nguyên và thẻ mà không nhóm các phần tử mà chúng tham chiếu. Nếu bạn làm vậy, lệnh gọi API sẽ không thành công.
Bạn có thể nhóm các thứ nguyên và thẻ tham chiếu đến các phần tử mô hình trong một nhóm mô hình. Kích thước và thẻ được thêm vào một nhóm chi tiết đính kèm. Nhóm chi tiết đính
kèm không thể được di chuyển, sao chép, xoay, phân mảng hoặc nhân bản mà không thực hiện tương tự với nhóm mẹ.
Ví dụ về việc sử dụng một mảng, bạn có thể chọn một cửa ra vào và các cửa sổ nằm trong cùng một bức tường, sau đó tạo nhiều phiên bản của cấu hình cửa, tường và cửa sổ.
Cả LinearArray và RadialArray cũng cung cấp các phương thức để mảng một hoặc một số phần tử mà không cần được nhóm và liên kết. Mặc dù tương tự như các phương thức Create
() để sắp xếp các phần tử, mỗi phần tử kết quả là độc lập với các phần tử khác và có thể được thao tác mà không ảnh hưởng đến các phần tử khác. Xem bảng bên dưới để biết thêm
thông tin về các phương pháp có sẵn để tạo mảng tuyến tính hoặc mảng xuyên tâm.
Machine Translated by Google
Thành viên Sự mô tả
Tạo (Document, View, ElementId, int, XYZ, ArrayAnchorMember) Mảng một phần tử trong dự án theo một số cụ thể.
Tạo (Document, View, ICollection <ElementId>, int, XYZ, ArrayAnchorMember) Mảng một tập hợp các phần tử trong dự án theo một số xác định.
ArrayElementWithoutAssosystem (Document, View, ElementId, int, XYZ, Mảng một phần tử trong dự án theo một số cụ thể. Các phần tử kết quả
ArrayAnchorMember) không được liên kết với một mảng tuyến tính.
ArrayElementsWithoutAssinity (Document, View, ICollection <ElementId>, int, Mảng một tập hợp các phần tử trong dự án theo một số xác định. Các phần tử
XYZ, ArrayAnchorMember) kết quả không được liên kết với một mảng tuyến tính.
Thành viên Sự mô tả
Tạo (Document, View, ElementId, int, Line, double, ArrayAnchorMember) Mảng một phần tử trong dự án dựa trên trục xoay đầu vào.
Tạo (Document, View, ICollection <ElementId>, int, Line, double, Mảng một tập hợp các phần tử trong dự án dựa trên một trục xoay đầu vào.
ArrayAnchorMember)
ArrayElementWithoutAssosystem (Document, View, ElementId, int, Line, double, Mảng một phần tử trong dự án dựa trên trục xoay đầu vào .. Các phần tử
ArrayAnchorMember) kết quả không được liên kết với một mảng tuyến tính.
ArrayElementsWithoutAssinity (Document, View, ICollection <ElementId>, int, Mảng một tập hợp các phần tử trong dự án dựa trên trục xoay đầu vào ..
Dòng, đôi, ArrayAnchorMember) Các phần tử kết quả không được liên kết với một mảng tuyến tính.
Các phương pháp sắp xếp các phần tử rất hữu ích nếu bạn cần tạo một số thể hiện của một thành phần và thao tác chúng đồng thời.
Mọi cá thể trong một mảng có thể là thành viên của một nhóm.
Lưu ý Khi sử dụng các phương pháp để sắp xếp các phần tử, các quy tắc sau sẽ được áp dụng:
• Khi thực hiện các phép toán Mảng tuyến tính và Mảng hướng tâm, các phần tử phụ thuộc vào các phần tử được mảng cũng được phân mảng.
• Một số phần tử không thể được phân chia thành mảng vì chúng không thể được nhóm lại. Xem Hướng dẫn sử dụng Revit để biết thêm thông tin về
hạn chế đối với nhóm và mảng.
• Mảng không được hỗ trợ bởi hầu hết các ký hiệu chú thích.
Thành viên Sự mô tả
Xóa (ElementId) Xóa một phần tử khỏi dự án bằng cách sử dụng ID phần tử
Xóa (ICollection <ElementId>) Xóa một số yếu tố khỏi dự án theo ID của chúng.
Machine Translated by Google
Phương pháp đầu tiên xóa một phần tử duy nhất dựa trên Id của nó, như được hiển thị trong ví dụ bên dưới.
9. ném ngoại lệ mới ("Không xóa được phần tử đã chọn trong Revit.");
10. }
11.
12. String prompt = "Phần tử được chọn đã bị xóa và "; nhắc + = deleteIdSet.Count
13. - 1; nhiều phần tử phụ thuộc hơn cũng đã bị loại bỏ. "; prompt + =
"
14.
15.
16. // Cung cấp cho người dùng một số thông
17. tin TaskDialog.Show ("Revit", prompt);
18. }
Lưu ýKhi một phần tử bị xóa, bất kỳ phần tử con nào được liên kết với phần tử đó cũng bị xóa, như được chỉ ra trong mẫu ở trên.
API cũng cung cấp một cách để xóa một số phần tử.
1. // Xóa tất cả các phần tử đã chọn thông qua tập hợp các id phần tử.
2. ICollection <Autodesk.Revit.DB.ElementId> idSelection = null ; 3. UIDocument
uidoc = new UIDocument (tài liệu); 4. foreach (Autodesk.Revit.DB.Element elem
trong uidoc.Selection.Elements) 5. {
6. Autodesk.Revit.DB.ElementId id = elem.Id;
idSelection.Add (id);
7.
8. } 9.
10. ICollection <Autodesk.Revit.DB.ElementId> deleteIdSet = document.Delete (idSelection); 11. 12. if (0 ==
deleteIdSet.Count) 13. { 14. 15. } 16.
ném ngoại lệ mới ("Không xóa được các phần tử đã chọn trong Revit.");
Lưu ý Sau khi bạn xóa các phần tử, bất kỳ tham chiếu nào đến các phần tử đã xóa sẽ trở nên không hợp lệ và ném ra một ngoại lệ nếu chúng được truy cập.
Các phần tử có thể được ghim để ngăn chúng di chuyển. Thuộc tính Element.Pinned có thể được sử dụng để kiểm tra xem một Phần tử được ghim hay để ghim hoặc bỏ ghim
Khi Element.Pinned được đặt thành true, không thể di chuyển hoặc xoay phần tử.
Lượt xem
Chế độ xem là hình ảnh được tạo ra từ mô hình Revit với quyền truy cập đặc quyền vào dữ liệu được lưu trữ trong tài liệu. Chúng có thể là đồ họa, chẳng hạn như
kế hoạch hoặc văn bản, chẳng hạn như lịch trình. Mỗi tài liệu dự án có một hoặc nhiều dạng xem khác nhau. Cửa sổ tập trung cuối cùng là chế độ xem đang hoạt động.
Lớp Autodesk.Revit.DB.View là lớp cơ sở cho tất cả các kiểu xem trong tài liệu Revit. Lớp Autodesk.Revit.UI.UIView đại diện cho dạng xem cửa sổ trong giao diện người
dùng Revit.
Trong các phần tiếp theo, bạn tìm hiểu cách tạo các khung nhìn, các loại khung nhìn được Revit hỗ trợ, các tính năng cho mỗi chế độ xem, cũng như chức năng có sẵn
cho các cửa sổ chế độ xem trong giao diện người dùng.
Machine Translated by Google
Về lượt xem
Phần này là tổng quan cấp cao thảo luận về những điều sau:
Mỗi khung nhìn được tạo ra bằng cách chiếu một vật thể ba chiều lên một mặt phẳng hình chiếu hai chiều. Phép chiếu được chia thành hai lớp cơ bản:
• Luật xa gần
• Song song
Sau khi loại hình chiếu được xác định, bạn phải chỉ định các điều kiện mà theo đó mô hình 3D là cần thiết và cảnh sẽ được hiển thị. Để biết thêm
thông tin về phép chiếu, hãy tham khảo View3D tiết diện.
Các tọa độ trên thế giới bao gồm các điểm sau:
• Vị trí mặt phẳng quan sát nơi hình chiếu được hiển thị.
• Tọa độ toàn cầu hoặc không gian mô hình nơi tòa nhà tồn tại
Hệ tọa độ quan sát biểu thị cách mô hình được trình bày trong tầm nhìn của người quan sát. Điểm gốc của nó là vị trí mắt của người xem có tọa độ trong
không gian mô hình được truy xuất bởi thuộc tính View.Origin. Các trục X, Y và Z được đại diện bởi các thuộc tính View.RightDirection, View.UpDirection và
View.ViewDirection tương ứng.
Hệ thống tọa độ xem là thuận tay phải. Để biết thêm thông tin, hãy xem hình ảnh Phép chiếu Phối cảnh và hình chiếu song song trong View3D.
Machine Translated by Google
Một số phần của không gian mô hình 3D không hiển thị, chẳng hạn như phần ở phía sau người xem hoặc quá xa để hiển thị rõ ràng, sẽ bị loại trừ trước khi được
chiếu lên mặt phẳng chiếu. Hành động này yêu cầu cắt chế độ xem. Các quy tắc sau áp dụng cho việc cắt xén:
• Các phần tử bên ngoài vùng cắt không còn trong chế độ xem.
• Phương thức View.GetCropRegionShapeManager trả về một ViewCropRegionShapeManager cung cấp thông tin ranh giới cho
vùng cây trồng, có thể có hoặc không có hình chữ nhật.
• Thuộc tính View.CropBoxVosystem xác định xem hộp cắt có hiển thị trong dạng xem hay không.
• Thuộc tính View.CropBoxActive xác định xem hộp cắt có thực sự được sử dụng để cắt chế độ xem hay không.
Sau khi cắt, mô hình được chiếu lên mặt phẳng chiếu. Các quy tắc sau áp dụng cho phép chiếu:
• Nội dung chiếu được ánh xạ tới cổng xem màn hình để hiển thị.
• Trong quá trình lập bản đồ, nội dung chiếu được chia tỷ lệ để chúng được hiển thị chính xác trên màn hình.
• Thuộc tính View.Scale là tỷ lệ giữa kích thước mô hình thực tế với kích thước khung nhìn.
• Ranh giới xem trên giấy là vùng cắt, là hình chiếu của hình cắt trên mặt phẳng hình chiếu.
• Kích thước và vị trí của vùng cắt được xác định bởi thuộc tính View.OutLine.
Bởi vì việc đặt kiểu hiển thị của chế độ xem thành raytrace đi vào chế độ hạn chế đặc biệt với các khả năng hạn chế, nên không được phép chỉ định trực tiếp
kiểu hiển thị cho giá trị này.
Thuộc tính View.DetailLevel sử dụng kiểu liệt kê ViewDetailLevel và tương ứng với các tùy chọn mức chi tiết có sẵn ở cuối cửa sổ Revit như được hiển thị bên
dưới.
Liệt kê ViewDetailLevel bao gồm Không xác định trong trường hợp Chế độ xem đã cho không sử dụng mức chi tiết.
Machine Translated by Google
Lớp View cho phép kiểm soát các chế độ xem tạm thời. Phương thức View.EnableRevealHiddenMode () bật chế độ hiển thị các phần tử ẩn cho chế độ xem.
View.EnableTemporaryAnalyticalDisplayMode () chỉ cho phép hiển thị tạm thời các danh mục Mô hình phân tích.
Và View.DisableTemporaryViewMode () sẽ tắt chế độ xem tạm thời được chỉ định. Phương thức DisableTemporaryViewMode () nhận một enum TemporaryViewMode. Các tùy chọn khả
thi được hiển thị bên dưới.
WorksharingDisplay Một trong những chế độ hiển thị chia sẻ công việc
Phương thức View.IsInTemporaryViewMode có thể được sử dụng để xác định xem chế độ xem hiện đang ở trong Chế độ xem tạm thời được chỉ định hay không.
Chế độ xem theo dõi các yếu tố hiển thị. Tất cả các phần tử có dạng đồ họa và hiển thị trong dạng xem có thể được truy xuất bằng cách sử dụng FilteredElementCollector được
tạo bằng tài liệu và id của dạng xem. Tuy nhiên, một số phần tử trong tập hợp có thể bị ẩn hoặc bị che bởi các phần tử khác. Bạn có thể nhìn thấy chúng bằng cách xoay chế
độ xem hoặc loại bỏ các phần tử che chúng. Việc truy cập các phần tử hiển thị này có thể yêu cầu Revit xây dựng lại hình dạng của khung nhìn. Lần đầu tiên mã của bạn sử
dụng hàm tạo này cho một chế độ xem nhất định hoặc lần đầu tiên mã của bạn sử dụng hàm tạo này cho một chế độ xem có cài đặt hiển thị vừa được thay đổi, bạn có thể bị giảm
hiệu suất đáng kể.
Các phần tử được hiển thị hoặc ẩn trong chế độ xem theo danh mục.
• Phương thức View.GetVisiblility () truy vấn một danh mục để xác định xem nó có thể nhìn thấy hay không nhìn thấy trong khung nhìn.
• Phương thức View.SetVisibility () đặt tất cả các phần tử trong một danh mục cụ thể thành hiển thị hoặc không nhìn thấy.
FilteredElementCollector dựa trên một dạng xem sẽ chỉ chứa các phần tử hiển thị trong dạng xem hiện tại. Bạn không thể truy xuất các phần tử không
đồ họa hoặc các yếu tố không nhìn thấy được. FilteredElementCollector dựa trên một tài liệu sẽ truy xuất tất cả các phần tử trong tài liệu bao gồm các phần tử vô hình
và các phần tử phi đồ họa. Ví dụ: khi tạo chế độ xem 3D mặc định trong một dự án trống, không có phần tử nào trong chế độ xem nhưng có nhiều phần tử trong tài liệu, tất
cả đều ẩn.
Mẫu mã sau đây đếm số lượng phần tử danh mục tường trong tài liệu hiện hoạt và chế độ xem hiện hoạt. Số phần tử trong chế độ xem hiện hoạt khác với số phần tử trong tài
liệu vì tài liệu chứa các phần tử danh mục tường không phải đồ họa.
Vùng mã: Đếm các phần tử trong chế độ xem hiện hoạt
Chế độ xem tạm thời có thể ảnh hưởng đến khả năng hiển thị của phần tử. Phương thức View.IsInTemporaryViewMode () có thể được sử dụng để xác định xem một Chế độ xem có
ở chế độ xem tạm thời hay không. Phương thức View.IsElementVosystemInTemporaryViewMode () xác định xem một phần tử có nên hiển thị trong chế độ xem được chỉ định hay
không. Điều này chỉ áp dụng cho chế độ xem TemporaryHideIsolate và AnalyticalModel. Các chế độ khác sẽ dẫn đến một ngoại lệ.
API Nền tảng Revit cung cấp nhiều phương pháp để tạo các phần tử chế độ xem tương ứng có nguồn gốc từ lớp Autodesk.Revit.DB.View.
Hầu hết các kiểu xem được tạo bằng cách sử dụng các phương thức tĩnh của các lớp chế độ xem dẫn xuất. Nếu một dạng xem được tạo thành công, các phương thức
này trả về một tham chiếu đến dạng xem, nếu không chúng sẽ trả về null. Các phương thức được mô tả trong các phần sau cụ thể cho từng lớp chế độ xem.
Các khung nhìn cũng có thể được tạo bằng phương thức View.Duplicate (). Chế độ xem mới có thể được tạo từ chế độ xem hiện có với các tùy chọn cho chế độ xem
mới phụ thuộc hoặc có chi tiết.
Xóa một dạng xem bằng cách sử dụng phương pháp Document.Delete với ID dạng xem. Bạn cũng có thể xóa các phần tử được liên kết với một dạng xem. Ví dụ: việc xóa
phần tử mức khiến Revit xóa hình chiếu bằng tương ứng hoặc xóa phần tử máy ảnh khiến Revit xóa chế độ xem 3D tương ứng.
Các loại khung nhìn Revit khác nhau được đại diện bởi các lớp khác nhau trong API Revit. Xem các chủ đề sau để biết thêm thông tin về từng loại chế độ xem.
Tổng quan
Một mô hình dự án có thể có một số kiểu xem. Hình sau minh họa các kiểu xem khác nhau trong trình duyệt Dự án.
Hình 95: Các khung nhìn khác nhau trong trình duyệt Dự án
Trong API, có ba cách để phân loại các chế độ xem. Cách đầu tiên là sử dụng thuộc tính View.ViewType của phần tử chế độ xem. Nó trả về một giá trị được liệt kê cho
biết kiểu xem. Bảng sau liệt kê tất cả các kiểu xem có sẵn.
Machine Translated by Google
Chưa xác định Chế độ xem không xác định / không xác định.
Cách thứ hai để phân loại các khung nhìn là theo loại lớp.
Bảng sau liệt kê các kiểu xem và các dạng xem tương ứng trong trình duyệt Dự án.
Machine Translated by Google
Ví dụ này cho thấy cách sử dụng thuộc tính ViewType của một dạng xem để xác định kiểu của dạng xem.
Machine Translated by Google
// Lấy kiểu xem của dạng xem đã cho và định dạng chuỗi lời nhắc
4. String prompt = "Chế độ xem là ";
5.
6. switch (view.ViewType) {
7.
Cách thứ ba để phân loại các khung nhìn là sử dụng lớp ViewFamilyType. Hầu hết các phương pháp tạo chế độ xem đều yêu cầu Id của ViewFamilyType cho
chế độ xem mới. Id của ViewFamilyType có thể được truy xuất từ phương thức View.GetTypeId (). Thuộc tính ViewFamilyType.ViewFamily trả về một kiểu
liệt kê ViewFamily chỉ định họ của ViewFamilyType và tương tự như enum ViewType đã nêu ở trên. Ví dụ sau đây cho thấy cách lấy ViewFamily từ một
View.
View3D
View3D là một chế độ xem ba chiều được định hướng tự do. Có hai loại chế độ xem 3D, phối cảnh và isometric, còn được gọi là orthographic trong
giao diện người dùng Revit. Sự khác biệt dựa trên quan hệ tia chiếu. Thuộc tính View3D.IsPerspective cho biết chế độ xem 3D là phối cảnh hay isometric.
Hình ảnh sau đây minh họa cách tạo một chế độ xem phối cảnh.
• Các tia chiếu thẳng đi qua từng điểm trong mô hình và cắt mặt phẳng hình chiếu để tạo thành nội dung hình chiếu.
• Để tạo điều kiện thuận lợi cho việc chuyển đổi từ tọa độ thế giới lên mặt phẳng xem, hệ tọa độ xem dựa trên người xem.
• Nguồn gốc của nó, được đại diện bởi thuộc tính View.Origin, là vị trí của người xem.
• Tọa độ thế giới của người xem được truy xuất bằng cách sử dụng thuộc tính ViewOrientation3D.EyePosition (truy xuất từ
View3D.GetOrientation ()). Do đó, trong các chế độ xem 3D, View.Origin luôn bằng ViewOrientation3D.EyePosition tương ứng.
• Như đã mô tả, hệ tọa độ quan sát được xác định như sau:
• Hướng xem là từ điểm đích đến người xem trong không gian 3D và từ màn hình đến người xem trong không gian màn hình.
Phương thức tĩnh Phương thức View3D.CreatePerspective () có thể được sử dụng để tạo các khung nhìn phối cảnh mới.
Mẫu mã sau minh họa cách tạo chế độ xem 3D phối cảnh.
Machine Translated by Google
5. 6.
Hộp cắt chế độ xem phối cảnh là một phần của hình chóp với đỉnh ở vị trí của người xem. Nó là hình học giữa hai mặt phẳng clip song song. Hộp xén giới hạn
phần của mô hình được cắt ra và chiếu lên mặt phẳng xem.
• Hộp cắt xén được đại diện bởi thuộc tính View.CropBox, trả về một đối tượng BoundBoxXYZ.
• Các điểm CropBox.Min và CropBox.Max được đánh dấu trong hình trước. Lưu ý rằng điểm CropBox.Min trong chế độ xem phối cảnh
được tạo ra bằng cách chiếu mặt phẳng clip trước của hộp cắt lên mặt phẳng clip sau.
Tọa độ hộp cắt dựa trên hệ tọa độ xem. Sử dụng Transform.OfPoint () để chuyển đổi CropBox.Min và CropBox.Max sang hệ tọa độ thế giới. Để biết thêm chi tiết về
Transform, hãy tham khảo Geometry.Transform trong Hình học tiết diện.
Mặt phẳng dự án cộng với mặt phẳng clip phía trước và mặt sau đều phù hợp với hướng xem. Đường giữa CropBox.Max và CropBox.Min song song với hướng xem. Với
những yếu tố này, có thể tính toán được hình dạng hộp cắt xén.
Hình trước cho thấy mặt phẳng chiếu trên màn hình sau khi cắt. Vùng cắt là giao điểm hình chữ nhật của mặt phẳng chiếu và hộp cắt.
• Thông tin hình học được truy xuất bằng thuộc tính View.CropRegion. Thuộc tính này trả về một phiên bản BoundBoxUV.
• Giống như hộp cắt, tọa độ vùng cắt dựa trên hệ tọa độ xem. Các biểu thức sau đây là bằng nhau.
View.CropBox.Max.X (Y) / View.OutLine.Max.X (Y) == View.CropBox.Min.X (Y) / View.OutLine.Min.X (Y)
Vì kích thước của hình chiếu phối cảnh của một vật thể thay đổi tỷ lệ nghịch với khoảng cách từ vật thể đó đến tâm của hình chiếu, nên tỷ lệ là vô nghĩa đối với
các hình chiếu phối cảnh. Chế độ xem 3D phối cảnh Thuộc tính tỷ lệ luôn trả về 0.
Isometric View
Một chế độ xem isometric mới có thể được tạo bằng phương thức View3D.CreateIsometric () tĩnh.
Hình chiếu đẳng áp được tạo ra bằng cách sử dụng các tia chiếu song song bằng cách chiếu mô hình lên một mặt phẳng pháp tuyến với các tia. Hệ tọa độ xem
tương tự như hình chiếu phối cảnh, nhưng hộp cắt là một hình song song với các mặt song song hoặc pháp tuyến với các tia chiếu. Thuộc tính View.CropBox
trỏ đến hai góc chéo có tọa độ dựa trên hệ tọa độ xem.
Hình 99: Chia tỷ lệ cửa sổ trên mặt phẳng xem thành chế độ xem màn hình
Mô hình được chiếu lên một mặt phẳng xem và sau đó được thu nhỏ trên màn hình. Thuộc tính View.Scale đại diện cho tỷ lệ giữa kích thước mô hình thực tế với
kích thước chế độ xem. Các biểu thức liên quan như sau:
Tham số viewFamilyTypeId cần phải là một ViewType ba chiều. Revit xác định những điều sau:
Khi chế độ xem được tạo, bạn có thể thay đổi kích thước hộp cắt để xem các phần khác nhau của mô hình. Bạn cũng có thể thay đổi hướng mặc định.
API không hỗ trợ sửa đổi hệ tọa độ xem.
Mẫu mã sau đây minh họa cách tạo chế độ xem 3D đẳng hướng.
3. IEnumerable <ViewFamilyType> viewFamilyTypes = from elem in newFilteredElementCollector (document) .OfClass (typeof (ViewFamilyType)) 4. let type = elem as
ViewFamilyType where type.ViewFamily == ViewFamily.ThreeDimensional chọn loại;
5.
6.
7.
8. // Tạo một View3D mới 9.
View3D view3D = View3D.CreateIsometric (document, viewFamilyTypes.First (). Id); 10. if (null ! =
View3D) 11. { 12. 13.
Mỗi chế độ xem có một hộp cắt. Hộp cắt tập trung vào một phần của mô hình để chiếu và hiển thị trong chế độ xem. Đối với chế độ xem 3D, có một hộp khác có
tên là hộp phần.
• Hộp phần xác định phần mô hình nào xuất hiện trong chế độ xem 3D.
• Hộp phần được sử dụng để cắt phần có thể nhìn thấy của mô hình 3D.
• Phần bên ngoài hộp không thể nhìn thấy ngay cả khi nó nằm trong hộp cắt.
• Hộp phần khác với hộp cắt ở chỗ nó có thể được xoay và di chuyển cùng với mô hình.
Hộp phần đặc biệt hữu ích cho các mô hình lớn. Ví dụ: nếu bạn muốn kết xuất một tòa nhà lớn, hãy sử dụng hộp mặt cắt. Hộp phần giới hạn phần mô hình được sử dụng để tính toán. Để hiển
thị hộp phần, trong hộp thoại Thuộc tính phần tử chế độ xem 3D, hãy chọn Phần
Hộp trong phần Extents. Bạn cũng có thể đặt nó bằng cách sử dụng API:
Thuộc tính View3D.SectionBox được sử dụng để lấy và thay đổi các phạm vi của hộp. Trong một số trường hợp, việc đặt View3D.SectionBox có thể có tác dụng
phụ. Đặt thuộc tính thành các giá trị nhất định có thể thay đổi dung lượng hộp và hiển thị nó trong dạng xem. Tuy nhiên, bạn có thể gán giá trị null cho
SectionBox để giữ giá trị đã sửa đổi và làm cho hộp section ẩn trong dạng xem. Để tránh hiển thị hộp phần, hãy thay đổi giá trị hộp phần, sau đó đặt hộp phần
thành rỗng. Mẫu mã sau đây minh họa quá trình này. Lưu ý rằng nó chỉ hoạt động khi hộp kiểm Section Box được chọn trong hộp thoại thuộc tính View.
Lưu ý Nếu bạn đặt view.SectionBox thành null, nó có tác dụng tương tự như ẩn hộp phần bằng tham số Hộp phần. Hộp phần hiện tại được lưu trữ theo
dạng xem và được khôi phục khi bạn hiển thị hộp phần bằng tham số SectionBox.
Tọa độ các điểm Tối đa và Tối thiểu của BoundBoxXYZ được trả về từ thuộc tính SectionBox không phải là WCS. Để chuyển đổi tọa độ của Max và Min thành WCS, bạn
cần chuyển đổi điểm thông qua phép biến đổi thu được từ thuộc tính BoundBoxXYZ.Transform.
private void ConvertMaxMinToWCS (View3D view, out XYZ max, out XYZ min)
{BoundBoxXYZ sectionbox = view.SectionBox; Biến đổi biến
đổi = sectionbox.Transform; max = biến đổi.OfPoint
(sectionbox.Max); min = biến đổi.OfPoint
(sectionbox.Min);
}
Machine Translated by Google
Xem khóa
Lớp View3D có các phương thức và thuộc tính tương ứng với tính năng khóa có sẵn trong giao diện người dùng Revit.
Phương thức View3D.SaveOrientationAndLock () sẽ lưu hướng và khóa chế độ xem trong khi View3D.RestoreOrientationAndLock () sẽ khôi phục hướng của chế độ
xem và khóa nó. View3D.Unlock () sẽ mở khóa chế độ xem nếu nó hiện đang bị khóa. Thuộc tính IsLocked sẽ trả về cho dù chế độ xem 3D hiện đang bị khóa.
ViewPlan
Chế độ xem kế hoạch dựa trên cấp độ. Có ba loại chế độ xem mặt bằng, chế độ xem mặt bằng, chế độ xem mặt bằng trần và chế độ xem mặt bằng khu vực.
• Nói chung, dạng xem sơ đồ mặt bằng là dạng xem mặc định được mở trong một dự án mới.
• Hầu hết các dự án đều có ít nhất một mặt bằng tầng và một mặt bằng trần.
• Dạng xem kế hoạch thường được tạo sau khi thêm các cấp mới vào dự án.
Việc thêm các cấp độ mới bằng cách sử dụng API không tự động thêm các chế độ xem kế hoạch. Sử dụng phương thức ViewPlan.Create () tĩnh để tạo các khung
nhìn sơ đồ sàn và trần mới. Sử dụng phương thức ViewPlan.CreateAreaPlan () tĩnh để tạo một dạng xem sơ đồ khu vực mới.
1. công khai tĩnh ViewPlan ViewPlan.Create (Tài liệu tài liệu, ElementId viewFamilyTypeId, ElementId levelId); 2.
3. public static ViewPlan ViewPlan.CreateAreaPlan (Document document, ElementId areaSchemeId, ElementId levelId);
Tham số viewFamilyTypeId trong ViewPlan.Create () cần phải là một FloorPlan, CeilingPlan, AreaPlan hoặc StructuralPlan ViewType. Tham số levelId đại diện
cho Id của phần tử mức trong dự án mà chế độ xem kế hoạch được liên kết.
Đoạn mã sau tạo sơ đồ mặt bằng và sơ đồ trần dựa trên một cấp độ nhất định.
12. // Tạo một Tầng khác và một Sơ đồ trần dựa trên nó 13. // Tìm kiểu
xem sơ đồ trần 14. viewFamilyTypes = from elem trong new
FilteredElementCollector (document) .OfClass (typeof (ViewFamilyType)) 15. let type = elem as ViewFamilyType 16. where type.ViewFamily
== ViewFamily.CeilingPlan 17. select type; 18.
Sau khi tạo chế độ xem kế hoạch mới, có thể đặt Kỷ luật cho chế độ xem bằng cách sử dụng tham số Kỷ luật là loại ViewDiscipline. Các tùy chọn bao gồm Kiến trúc, Kết cấu, Cơ khí, Điện, Hệ
Đối với các khung nhìn mặt bằng cấu trúc, hướng xem có thể được đặt thành Lên hoặc Xuống bằng cách sử dụng thuộc tính ViewFamilyType.PlanViewDirection.
Mặc dù nó là một thuộc tính của lớp ViewFamilyType, một ngoại lệ sẽ được ném ra nếu thuộc tính được truy cập cho các khung nhìn không phải là các khung nhìn StructuralPlan.
Phạm vi chế độ xem cho các chế độ xem kế hoạch có thể được truy xuất thông qua phương thức ViewPlan.GetViewRange (). Đối tượng PlanViewRange trả về có thể được sử dụng để tìm các mức mà một
mặt phẳng có liên quan và độ lệch của mỗi mặt phẳng từ mức đó. Đó là thông tin tương tự có sẵn trong hộp thoại Phạm vi xem trong giao diện người dùng Revit:
Ví dụ sau đây cho thấy cách lấy mặt phẳng clip trên cùng và độ lệch được liên kết cho chế độ xem mặt bằng
ViewDrafting
Chế độ xem soạn thảo không được liên kết với mô hình. Nó cho phép người dùng tạo các bản vẽ chi tiết không có trong mô hình.
• Trong dạng xem soạn thảo, người dùng có thể tạo các chi tiết ở các thang dạng xem khác nhau (thô, mịn hoặc trung bình).
• Bạn có thể sử dụng các công cụ chi tiết 2D, bao gồm:
Những công cụ này giống như những công cụ được sử dụng để tạo một dạng xem chi tiết.
• Chế độ xem soạn thảo không hiển thị các phần tử mô hình.
Sử dụng phương thức Autodesk.Revit.Creation.NewViewDrafting () để tạo dạng xem soạn thảo. Các phần tử mô hình không được hiển thị trong dạng xem soạn thảo.
Machine Translated by Google
ImageView
Lớp ImageView có nguồn gốc từ ViewDrafting. Nó có thể được sử dụng để tạo các khung nhìn kết xuất có chứa hình ảnh được nhập từ đĩa. Sử dụng phương thức ImageView.Create () tĩnh để tạo
các khung nhìn kết xuất mới.
ViewSection
Lớp ViewSection có thể được sử dụng để tạo dạng xem phần, dạng xem chi tiết, dạng xem chú thích, chú thích tham chiếu và các phần tham chiếu. Nó cũng đại diện cho các chế độ xem độ
cao.
Hình chiếu mặt cắt cắt qua mô hình để lộ cấu trúc bên trong. Phương thức ViewSection.CreateSection () tạo dạng xem mặt cắt.
Tham số viewFamilyTypeId là Id cho ViewFamilyType sẽ được ViewSection mới sử dụng. Loại cần phải là một Section ViewFamily. Tham số sectionBox là hộp cắt chế độ xem phần. Nó cung
cấp hướng và phạm vi cần thiết cho chế độ xem mặt cắt. Thông thường, hộp cắt của chế độ xem khác được sử dụng làm tham số. Bạn cũng có thể xây dựng một phiên bản BoundBoxXYZ tùy chỉnh
để đại diện cho hướng và phạm vi.
Machine Translated by Google
Đoạn mã sau đây cho biết cách tạo dạng xem phần. Một hộp giới hạn cho chế độ xem mặt cắt được tạo ở tâm của một bức tường. Chế độ xem mặt cắt kết quả sẽ nằm trong
nút Phần (Phần xây dựng) trong Trình duyệt dự án.
5. 6.
7. // Tạo một cá thể BoundBoxXYZ tập trung vào bức tường 8. LocationCurve
lc = wall.Location as LocationCurve; 9. Transform curveTransform =
lc.Curve.ComputeDeriuctor (0,5, true); 10. // sử dụng 0,5 và "true" (để chỉ định rằng tham
số được chuẩn hóa) 11. // đặt điểm gốc của biến đổi ở tâm của đường cong vị trí)
12.
13. XYZ origin = curveTransform.Origin; // điểm giữa của đường cong vị trí 14. XYZ
viewDirection = curveTransform.BasisX.Normalize (); // vector tiếp tuyến dọc theo đường cong vị trí 15. XYZ normal =
viewDirection.CrossProduct (XYZ.BasisZ) .Normalize (); // đường cong vị trí normal @ mid-point
16.
22. // có thể sử dụng đơn giản hóa này vì "lên" của bức tường là thẳng đứng.
23. // Đối với tình huống không thẳng đứng (chẳng hạn như mặt cắt qua sàn dốc, bề mặt bình thường sẽ là cần thiết) 24. biến đổi.BasisZ =
normal.CrossProduct (XYZ.BasisZ);
25.
26. BoundBoxXYZ sectionBox = new BoundBoxXYZ (); 27. sectionBox.Transform
= biến đổi; 28. sectionBox.Min = new XYZ (-10,0,0); 29. sectionBox.Max
= new XYZ (10,12,5); 30. // Các giá trị Min & Max X (-10 & 10) xác
định chiều dài đoạn thẳng trên mỗi cạnh của bức tường 31. // Max Y
(12) là chiều cao của hộp tiết diện // Max Z (5) là độ lệch clip xa 32.
Phần tham chiếu là các phần tham chiếu đến một dạng xem hiện có. Revit không thêm một dạng xem mới khi bạn tạo một phần tham chiếu mới.
Tham số parentViewId là Id của chế độ xem trong đó điểm đánh dấu phần tham chiếu mới sẽ xuất hiện. Các phần tham chiếu có thể được tạo trong các dạng xem
FloorPlan, CeilingPlan, StructuralPlan, Section, Elevation, Drafting và Detail. ViewIdToReference có thể là Id của dạng xem Chi tiết, Bản thảo hoặc Phần.
ViewFamilyType của dạng xem được tham chiếu sẽ được phần tham chiếu mới sử dụng. Hai điểm XYZ sẽ xác định vị trí của đầu điểm đánh dấu phần trong chế độ xem chính.
Chế độ xem chi tiết là chế độ xem mô hình xuất hiện dưới dạng chú thích hoặc phần trong các chế độ xem khác. Loại chế độ xem này thường đại diện cho mô hình tại
tỷ lệ chi tiết tốt hơn so với trong chế độ xem gốc. Nó được sử dụng để bổ sung thêm thông tin cho các phần cụ thể của mô hình. Binh yên
Phương thức ViewSection.CreateDetail () được sử dụng để tạo một ViewSection chi tiết mới.
1. public ViewSection ViewSection.CreateDetail (Tài liệu tài liệu, ElementId viewFamilyTypeId, BoundBoxXYZ sectionBox);
Machine Translated by Google
Tham số viewFamilyTypeId là Id cho ViewFamilyType sẽ được ViewSection mới sử dụng. Loại cần phải là Detail ViewFamily. Cũng giống như đối với chế độ xem mặt cắt chuẩn, tham
số sectionBox là hộp cắt xén của chế độ xem mặt cắt. Nó cung cấp hướng và phạm vi cần thiết cho chế độ xem mặt cắt.
Khi một ViewSection chi tiết mới được thêm vào, nó sẽ xuất hiện trong nút Detail Views (Chi tiết) trong Project Browser.
Chế độ xem độ cao là một mặt cắt của mô hình nơi các đường cao độ được hiển thị. Chế độ xem độ cao được biểu diễn bởi lớp ViewSection.
Tuy nhiên, không giống như các kiểu mặt cắt khác, bạn không thể tạo dạng xem độ cao bằng phương thức tĩnh trên lớp ViewSection. Để tạo chế độ xem độ cao, trước tiên hãy tạo
điểm đánh dấu độ cao, sau đó sử dụng điểm đánh dấu để tạo chế độ xem độ cao. Chế độ xem độ cao mới được tạo sẽ xuất hiện trong nút Độ cao (Độ cao tòa nhà) trong Trình duyệt dự án.
Nó sẽ được chỉ định một tên duy nhất.
Ví dụ sau đây tạo chế độ xem độ cao dựa trên vị trí của chùm tia.
6. 7.
Phương thức ElevationMarker.CreateElevation () lấy một id của ViewPlan làm tham số. Đó là ViewPlan trong đó ElevationMarker được hiển thị. ViewSection độ cao mới sẽ lấy các phạm
vi của nó và kế thừa các cài đặt từ ViewPlan. Tham số cuối cùng là chỉ mục trên ElevationMarker nơi chế độ xem độ cao mới sẽ được đặt. Chỉ mục trên ElevationMarker phải hợp lệ và
không được sử dụng. Quan điểm
hướng được xác định bởi chỉ số.
Chú thích hiển thị một phần của chế độ xem khác ở quy mô lớn hơn. Các dạng xem chú thích có thể được tạo bằng phương thức tĩnh ViewSection.CreateCallout ().
Chú thích có thể được tạo trong các chế độ xem FloorPlan, CeilingPlan, StructuralPlan, Section, Elevation, Drafting và Detail. Dạng xem kết quả sẽ là ViewSection, ViewPlan
hoặc ViewDetail tùy thuộc vào ViewFamilyType được sử dụng và sẽ xuất hiện trong nút tương ứng trong Trình duyệt dự án.
Tham số Id chế độ xem chính có thể là Id của bất kỳ loại Chế độ xem nào có thể tạo chú thích. Các tham số điểm xác định phạm vi của biểu tượng chú thích trong chế độ xem
chính.
Chú thích tham chiếu là chú thích đề cập đến chế độ xem hiện có. Khi bạn thêm chú thích tham chiếu, Revit không tạo một dạng xem trong dự án.
Thay vào đó, nó tạo một con trỏ đến một dạng xem hiện có, được chỉ định. Nhiều chú thích tham chiếu có thể trỏ đến cùng một chế độ xem.
Tạo chú thích tham chiếu tương tự như tạo chú thích. Nhưng thay vì có Id của ViewFamilyType cho chú thích dưới dạng tham số, phương thức CreateReferenceCallout () lấy Id
của khung nhìn để tham chiếu. ViewFamilyType của dạng xem được tham chiếu sẽ được sử dụng bởi chú thích tham chiếu mới.
Machine Translated by Google
Chỉ các chế độ xem đã cắt mới có thể được tham chiếu, trừ khi chế độ xem được tham chiếu là chế độ xem Soạn thảo. Chế độ xem soạn thảo luôn có thể được tham chiếu bất
kể loại chế độ xem chính là gì. Chế độ xem độ cao có thể được tham chiếu từ chế độ xem phụ huynh Độ cao và Soạn thảo. Các dạng xem phần có thể được tham chiếu từ các
dạng xem cha của Phần và Soạn thảo. Chế độ xem chi tiết có thể được tham chiếu từ tất cả các chế độ xem gốc ngoại trừ trong các chế độ xem chính FloorPlan, CeilingPlan
và StructuralPlan nơi chỉ có thể tham chiếu các chế độ xem Chi tiết được định hướng theo chiều ngang. Các chế độ xem FloorPlan, CeilingPlan và StructuralPlan có thể
được tham chiếu từ các chế độ xem chính của FloorPlan, CeilingPlan và StructuralPlan.
Ví dụ sau tạo chú thích mới bằng cách sử dụng Detail ViewFamilyType và sau đó sử dụng chế độ xem chú thích mới để tạo chú thích tham chiếu.
7. 8.
ViewSheet
Một trang tính chứa các dạng xem và một khối tiêu đề. Khi tạo dạng xem trang tính bằng phương thức ViewSheet.Create (), ký hiệu họ khối tiêu đề Id là tham số bắt buộc
cho phương thức. Thuộc tính Autodesk.Revit.Document TitleBlocks chứa tất cả các khối tiêu đề trong tài liệu. Chọn một khối tiêu đề để tạo trang tính.
1. công khai tĩnh ViewSheet ViewSheet.Create (Tài liệu tài liệu, ElementId titleBlockTypeId);
Trang tính mới tạo không có chế độ xem. Phương thức Viewport.Create () được sử dụng để thêm các khung nhìn. Lớp Viewport được sử dụng để thêm các dạng xem thông thường
vào một dạng xem, tức là mặt bằng, độ cao, bản phác thảo và ba chiều. Để thêm lịch biểu vào một dạng xem, hãy sử dụng ScheduleInstance.Create () để thay thế.
1. công khai tĩnh Viewport Viewport.Create (Tài liệu tài liệu, ElementId viewSheetId, ElementId viewId, điểm XYZ); 2.
• Tham số vị trí XYZ xác định vị trí của các khung nhìn được thêm vào. Nó trỏ đến tọa độ trung tâm của chế độ xem đã thêm (được đo
theo số inch).
• Các tọa độ, [0, 0], có liên quan đến góc dưới bên trái của trang tính.
Mỗi trang tính có một số trang duy nhất trong tập bản vẽ hoàn chỉnh. Số được hiển thị trước tên trang tính trong Trình duyệt Dự án.
Thật tiện lợi khi sử dụng số trang trong tiêu đề dạng xem để tham chiếu chéo các trang trong tập bản vẽ của bạn. Bạn có thể truy xuất hoặc sửa đổi số bằng thuộc tính
SheetNumber. Số phải là duy nhất; nếu không, một ngoại lệ sẽ được đưa ra khi bạn đặt số thành một giá trị trùng lặp.
Machine Translated by Google
Ví dụ sau minh họa cách tạo và in dạng xem trang tính. Bắt đầu bằng cách tìm một khối tiêu đề có sẵn trong tài liệu (sử dụng bộ lọc trong trường hợp này) và sử dụng nó
để tạo chế độ xem trang tính. Tiếp theo, thêm chế độ xem 3D. Chế độ xem được đặt với góc dưới bên trái của nó ở giữa trang tính. Cuối cùng, in trang tính bằng cách gọi
phương thức View.Print ().
Lưu ý Bạn không thể thêm dạng xem trang tính vào một trang tính khác và bạn không thể thêm dạng xem vào nhiều hơn một trang tính; nếu không thì một ngoại lệ đối số
xảy ra.
Bạn có thể muốn thay đổi cài đặt của máy in trước khi in trang tính. API hiển thị các cài đặt cho máy in với lớp PrintManager và các lớp Autodesk.Revit.DB
liên quan:
Autodesk.Revit.DB.PrintManager Biểu diễn thông tin In trong Hộp thoại In (Tệp-> In) trong Giao diện người dùng Revit.
Autodesk.Revit.DB.PrintParameters Một đối tượng chứa các cài đặt được sử dụng để in tài liệu.
Autodesk.Revit.DB.PrintSetup Đại diện cho Thiết lập In (Tệp-> Thiết lập In ...) trong Revit UI.
Autodesk.Revit.DB.PaperSize Một đối tượng đại diện cho Khổ giấy của Thiết lập In trong dự án Autodesk Revit.
Autodesk.Revit.DB.PaperSizeSet Một tập hợp có thể chứa bất kỳ số lượng đối tượng kích thước giấy nào.
Autodesk.Revit.DB.PaperSource Một đối tượng đại diện cho Nguồn giấy của Thiết lập In trong dự án Autodesk Revit.
Autodesk.Revit.DB.PaperSourceSet Một tập hợp có thể chứa bất kỳ số lượng đối tượng nguồn giấy nào.
Autodesk.Revit.DB.ViewSheetSetting đại diện cho View / Sheet Set (File-> Print) trong Revit UI.
Autodesk.Revit.DB.PrintSetting Đại diện cho Thiết lập In (Tệp-> Thiết lập In ...) trong Revit UI.
Machine Translated by Google
Để biết ví dụ về mã sử dụng các đối tượng này, hãy xem ứng dụng mẫu ViewPrinter được bao gồm trong Revit Platform SDK.
ViewSchedule
Lịch biểu là một biểu diễn dữ liệu dạng bảng. Một lịch biểu điển hình hiển thị tất cả các phần tử của một danh mục (cửa, phòng, v.v.) với mỗi hàng đại diện cho một
Lớp ViewSchedule đại diện cho lịch biểu và các dạng xem giống như lịch biểu khác, bao gồm lịch biểu một danh mục và nhiều danh mục, lịch biểu chính, xuất
vật liệu, danh sách xem, danh sách trang tính, chú thích chính, lịch sửa đổi và khối ghi chú.
Phương thức ViewSchedule.Export () sẽ xuất dữ liệu lịch biểu sang tệp văn bản.
Phương thức ScheduleSheetInstance.Create () tĩnh tạo ra một thể hiện của một lịch biểu trên một trang tính. Nó yêu cầu ID của trang tính nơi lịch trình sẽ
được đặt, ID của chế độ xem lịch biểu và vị trí XYZ trên trang tính nơi lịch trình sẽ được đặt. Đối tượng ScheduleSheetInstance có các thuộc tính để truy
cập ID của lịch biểu "chính" tạo ra ScheduleSheetInstance này, vòng quay của lịch biểu trên trang tính, vị trí trên trang tính nơi đặt lịch biểu (trong tọa độ trang
tính), cũng như cờ xác định xem ScheduleSheetInstance có phải là một lịch trình sửa đổi trong họ khối tiêu đề hay không.
biểu mới hoặc dạng xem lịch biểu sẽ được thêm vào. Các dạng xem lịch biểu mới được tạo sẽ xuất hiện dưới nút Lịch biểu / Số lượng trong Trình duyệt dự án.
Có thể tạo lịch biểu một danh mục hoặc nhiều danh mục tiêu chuẩn bằng phương thức ViewSchedule.CreateSchedule () tĩnh.
Tham số thứ hai là ID của danh mục có các phần tử sẽ được bao gồm trong lịch biểu, hoặc InvalidElementId cho lịch biểu nhiều danh mục.
Phương thức CreateSchedule () thứ hai có thể được sử dụng để tạo một lịch trình vùng và nhận một tham số bổ sung là ID của lược đồ vùng cho lịch biểu.
Một lịch khóa hiển thị các phần tử "khóa" trừu tượng có thể được sử dụng để điền các tham số của các phần tử mô hình thông thường và có thể được tạo
bằng phương thức ViewSchedule.CreateKeySchedule () tĩnh có tham số thứ hai là ID của danh mục phần tử mà các khóa của lịch trình sẽ sử dụng. Được liên kết.
Vật liệu cất cánh là một lịch trình hiển thị thông tin về các vật liệu tạo nên các phần tử trong mô hình. Không giống như lịch trình thông thường trong đó
mỗi hàng (trước khi nhóm) đại diện cho một phần tử duy nhất, mỗi hàng trong lần cất cánh vật liệu đại diện cho một cặp <phần tử, vật liệu> duy nhất. Phương thức
ViewSchedule.CreateMaterialTakeoff () có các tham số giống như phương thức ViewSchedule.CreateSchedule () và cho phép cả lịch trình cất cánh vật liệu đơn và
nhiều loại.
Danh sách xem, danh sách trang tính và chú thích chính được liên kết với một danh mục được chỉ định và do đó các phương pháp tạo của chúng lấy ID danh mục làm
tham số. Một danh sách chế độ xem là một lịch trình của các chế độ xem trong dự án. Nó là một lịch biểu của danh mục Chế độ xem và được tạo bằng
ViewSchedule.CreateViewList ().
Machine Translated by Google
Danh sách trang tính là lịch trình của các trang tính trong dự án. Nó là một lịch biểu của danh mục Trang tính và được tạo bằng phương thức
ViewSchedule.CreateSheetList ().
Chú giải bài phát biểu chính là lịch biểu của danh mục Thẻ bài phát biểu và được tạo bằng ViewSchedule.CreateKeynoteLegend ().
Lịch sửa đổi được thêm vào họ tiêu đề và hiển thị như một phần của tiêu đề trên trang tính. Phương thức
ViewSchedule.CreateRevisionSchedule () sẽ ném ra một ngoại lệ nếu tài liệu được truyền vào không phải là một họ tiêu đề.
Khối ghi chú là một lịch biểu của danh mục Chú thích chung hiển thị các phần tử của một họ thay vì tất cả các phần tử trong một danh mục.
Tham số thứ hai là ID của họ có các phần tử sẽ được đưa vào lịch biểu.
annotationSymbolTypeId = type.Family.Id;
7. 8. phá vỡ;
}
9.
10. } 11.
12. // Tạo lịch xem noteblock.
13. ViewSchedule noteBlockSchedule = ViewSchedule.CreateNoteBlock (doc, annotationSymbolTypeId);
• Danh mục của lịch biểu và các thuộc tính cơ bản khác xác định loại lịch trình.
• Một tập hợp các trường trở thành các cột của lịch biểu.
Hầu hết các lịch trình đều chứa một ScheduleDefinition duy nhất được truy xuất thông qua thuộc tính ViewSchedule.Definition. Trong Revit MEP, lịch trình
của một số danh mục nhất định có thể chứa một "lịch trình nhúng" chứa các phần tử được liên kết với các phần tử trong lịch biểu chính, ví dụ: lịch trình
phòng hiển thị các phần tử bên trong mỗi phòng hoặc lịch trình hệ thống ống dẫn hiển thị các phần tử được liên kết với mỗi hệ thống. Một lịch biểu được
nhúng có danh mục, trường, bộ lọc riêng của nó, v.v. Những cài đặt đó được lưu trữ trong đối tượng ScheduleDefinition thứ hai. Khi hiện tại,
ScheduleDefinition được nhúng sẽ được lấy từ thuộc tính ScheduleDefinition.EmbeddedDefinition.
Thêm trường
Khi một ViewSchedule được tạo, các trường có thể được thêm vào. Phương thức ScheduleDefinition.GetSchedulableFields () sẽ trả về danh sách các đối
tượng SchedulableField đại diện cho các trường không được tính toán có thể có trong lịch biểu. Một trường mới có thể được thêm vào từ một đối tượng
SchedulableField hoặc sử dụng một ScheduleFieldType. Bảng sau đây mô tả các tùy chọn có sẵn từ kiểu liệt kê ScheduleFieldType.
Machine Translated by Google
Một tham số cá thể của các phần tử đã lên lịch. Tất cả các thông số được chia sẻ cũng sử dụng kiểu này, bất kể chúng là phiên bản hay kiểu
Ví dụ
thông số.
Loại nguyên tố Một tham số kiểu của các phần tử đã lên lịch.
Một loại trường chuyên biệt được sử dụng cho một số tham số có giá trị được hiển thị có thể thay đổi dựa trên cài đặt của chế độ xem:
KEYNOTE_NUMBER trong chú giải bài phát biểu được đánh số theo trang tính.
Công thức Một công thức được tính toán từ các giá trị của các trường khác trong lịch biểu.
Phần trăm Một giá trị cho biết phần trăm của tổng số trường khác mà mỗi phần tử đại diện.
FromRoom Một thông số của phòng ở phía "từ" của cửa ra vào hoặc cửa sổ.
Tới phòng Một thông số của phòng ở phía "tới" của cửa ra vào hoặc cửa sổ.
Một tham số của phần tử Thông tin dự án trong dự án mà phần tử đã lên lịch thuộc về, có thể là một tệp được liên kết. Chỉ được phép trong lịch trình bao gồm
ProjectInfo
các phần tử từ các tệp được liên kết.
Vật chất Trong một lần cất cánh vật liệu, một tham số của một trong những vật liệu của phần tử đã lên lịch.
Trong quá trình cất cánh vật liệu, một giá trị đại diện cho cách một vật liệu cụ thể được sử dụng trong một phần tử đã lên lịch. ID thông số có thể là
Chất lượng
MATERIAL_AREA, MATERIAL_VOLUME hoặc MATERIAL_ASPAINT.
Một tham số của RevitLinkInstance mà một phần tử trong tệp được liên kết thuộc về. Hiện tại RVT_LINK_INSTANCE_NAME là thông số duy nhất được hỗ trợ. Chỉ được phép
RevitLinkInstance
trong lịch trình bao gồm các phần tử từ các tệp được liên kết.
Một tham số của RevitLinkType mà một phần tử trong tệp được liên kết thuộc về. Hiện tại RVT_LINK_FILE_NAME_WITHOUT_EXT là thông số duy nhất được hỗ trợ. Chỉ
RevitLinkType
được phép trong lịch trình bao gồm các phần tử từ các tệp được liên kết.
StructuralMaterial Một tham số của vật liệu cấu trúc của một phần tử đã lên lịch.
Không gian Một tham số của không gian mà một phần tử đã lên lịch thuộc về.
Sử dụng một trong các phương thức ScheduleDefinition.AddField () sẽ thêm trường vào cuối danh sách trường. Để đặt một trường mới vào một vị trí cụ thể trong danh sách
trường, hãy sử dụng một trong các phương thức ScheduleDefinition.InsertField (). Các trường cũng có thể được sắp xếp theo thứ tự bằng cách sử dụng
ScheduleDefinition.SetFieldOrder ().
Machine Translated by Google
Sau đây là một ví dụ đơn giản cho thấy cách thêm các trường vào dạng xem nếu chúng chưa có trong lịch xem.
1. /// <summary>
2. /// Thêm trường để xem lịch biểu. 3. ///
</summary> 4. /// <param name = "boards ">
Danh sách lịch xem. </param> 5. public void AddFieldToSchedule (List
<ViewSchedule> Schedule) 6. { 7.
Lớp ScheduleField đại diện cho một trường duy nhất trong danh sách các trường của ScheduleDefinition. Mỗi trường (không ẩn) sẽ trở thành một cột trong lịch biểu.
Thông thường nhất, một trường đại diện cho một thể hiện hoặc tham số kiểu của các phần tử xuất hiện trong lịch biểu. Một số trường đại diện cho các tham số của các
phần tử liên quan khác, như phòng chứa phần tử đã lên lịch. Các trường cũng có thể đại diện cho dữ liệu được tính toán từ các trường khác trong lịch biểu, cụ thể là
Lớp ScheduleField có các thuộc tính để kiểm soát các tiêu đề cột, cả văn bản cũng như hướng. Chiều rộng cột và căn lề ngang của văn bản trong một cột cũng có thể
Thuộc tính ScheduleField.IsHidden có thể được sử dụng để ẩn một trường. Trường ẩn không được hiển thị trong lịch biểu, nhưng nó có thể được sử dụng để lọc, sắp xếp,
nhóm và định dạng có điều kiện và có thể được tham chiếu bởi các trường Công thức và Phần trăm.
Một số Trường lịch biểu có thể được tính tổng và nếu thuộc tính HasTotals được đặt thành true, tổng số sẽ được hiển thị nếu một hàng chân trang được bật nơi tổng số sẽ
được hiển thị. Nó có thể là một hàng tổng lớn ở cuối lịch biểu hoặc một hàng chân trang cho một trong các trường được nhóm của lịch biểu. Trong một lịch biểu không được
chia thành từng khoản mục, tổng số cũng được hiển thị trong các hàng thông thường khi nhiều phần tử xuất hiện trên cùng một hàng.
ScheduleField.GetStyle () và ScheduleField.SetStyle () sử dụng lớp TableCellStyle để làm việc với kiểu của các trường trong lịch biểu. Sử dụng SetStyle (), có thể đặt
các thuộc tính khác nhau của trường, bao gồm kiểu đường cho đường viền của ô cũng như phông chữ, màu sắc và kích thước văn bản.
ScheduleField.SetFormatOptions () và ScheduleField.GetFormatOptions () sử dụng lớp FormatOptions để làm việc với việc định dạng dữ liệu của một trường. Lớp FormatOptions
chứa các cài đặt kiểm soát cách định dạng số với đơn vị là chuỗi. Nó chứa những cài đặt thường được người dùng cuối chọn trong hộp thoại Định dạng và được lưu trữ
Trong ví dụ sau, tất cả các trường độ dài trong ViewSchedule được định dạng để hiển thị theo feet và inch phân số.
1. // định dạng đơn vị độ dài để hiển thị ở định dạng feet và inch 2. public
void FormatLengthFields (Lịch biểu ViewSchedule) 3. { 4. 5.
Lịch biểu có thể được sắp xếp hoặc nhóm theo một hoặc nhiều trường của lịch biểu. Một số phương pháp có thể được sử dụng để kiểm soát việc nhóm và sắp xếp các
trường. Lớp ScheduleSortGroupField đại diện cho một trong các trường mà lịch biểu được sắp xếp hoặc nhóm theo. Sắp xếp và nhóm là các hoạt động liên quan. Trong cả
hai trường hợp, các phần tử xuất hiện trong lịch biểu được sắp xếp dựa trên giá trị của chúng cho trường mà lịch biểu được sắp xếp / nhóm lại, điều này tự động khiến
các phần tử có giá trị giống hệt nhau được nhóm lại với nhau. Bằng cách kích hoạt thêm các hàng đầu trang, chân trang hoặc trống, có thể đạt được sự phân tách trực
Nếu thuộc tính ScheduleDefinition.IsItemized là false, các phần tử có cùng giá trị cho tất cả các trường được sử dụng để sắp xếp / nhóm sẽ được kết hợp vào
cùng một hàng. Nếu không, lịch trình sẽ hiển thị từng phần tử trên một hàng riêng biệt
Một lịch biểu có thể được sắp xếp hoặc nhóm theo dữ liệu không được hiển thị trong lịch biểu bằng cách đánh dấu trường được sử dụng để sắp xếp / nhóm là ẩn bằng
Tiêu đề cũng có thể được nhóm lại. Phương thức ViewSchedule.GroupHeaders () được nạp chồng có thể được sử dụng để chỉ định những hàng và cột nào cần bao gồm trong một
nhóm của phần tiêu đề. Một trong các phương thức nạp chồng lấy một chuỗi ký tự cho chú thích của các hàng và cột được nhóm.
Trong ví dụ sau, hai hoặc nhiều cột được nhóm bằng chú thích. Sau đó, nếu văn bản chú thích xuất hiện trong tiêu đề cột, nó sẽ bị loại bỏ.
1. // Nhóm các cột dữ liệu liên quan và loại bỏ văn bản thừa khỏi tiêu đề cột 2. public void
GroupRelatedData (ViewSchedule colSchedule, int startIndex, int endIndex, string groupText) 3. { 4. 5.
Lọc
Một ScheduleFilter có thể được sử dụng để lọc các phần tử sẽ được hiển thị trong một lịch biểu. Bộ lọc là một điều kiện phải được thỏa mãn để một phần tử xuất hiện
trong lịch trình. Tất cả các bộ lọc phải được đáp ứng để một phần tử xuất hiện trong lịch biểu.
Lịch biểu có thể được lọc theo dữ liệu không được hiển thị trong lịch biểu bằng cách đánh dấu trường được sử dụng để lọc là ẩn bằng thuộc tính
ScheduleField.IsHidden.
ViewSchedule.GetTableData () trả về một đối tượng TableData chứa hầu hết dữ liệu mô tả kiểu và nội dung của các hàng, cột và ô trong bảng. Thông tin thêm có thể được
tìm thấy trong TableView và TableData.
Machine Translated by Google
TableView và TableData
TableView là một lớp đại diện cho một khung nhìn hiển thị một bảng và nó là lớp cơ sở cho ViewSchedule và PanelScheduleView.
Dữ liệu thực tế cho một bảng được chứa trong lớp TableData. Mặc dù không thể lấy đối tượng TableData trực tiếp từ lớp TableView, nhưng cả hai lớp con đều
có phương thức GetTableData (). Đối với ViewSchedule, phương thức này trả về một đối tượng TableData. Đối với PanelScheduleView, GetTableData () trả về
một đối tượng PanelScheduleData, dẫn xuất từ lớp cơ sở TableData. Lớp TableData chứa hầu hết dữ liệu mô tả kiểu của hàng, cột và ô trong bảng. PanelScheduleData
cung cấp các phương pháp bổ sung liên quan cụ thể đến lịch bảng.
Dữ liệu trong bảng được chia thành nhiều phần. Để làm việc với các hàng, cột và ô của TableData, cần phải lấy đối tượng TableSectionData.
TableData.GetSectionData () có thể được gọi bằng một số nguyên đối với dữ liệu phần được yêu cầu hoặc sử dụng SectionType (tức là Header hoặc
Body).
Lớp TableSectionData có thể được sử dụng để chèn hoặc xóa hàng hoặc cột, định dạng ô và để lấy chi tiết về các ô tạo nên phần đó của lịch biểu, chẳng hạn như
loại ô (tức là Văn bản hoặc Hình ảnh) hoặc id danh mục của ô.
Trong ví dụ sau, một hàng mới được thêm vào phần tiêu đề của lịch biểu và văn bản được đặt cho ô mới được tạo. Lưu ý rằng hàng đầu tiên của phần tiêu đề
mặc định là tiêu đề khi được tạo bằng giao diện người dùng.
Lưu ý: Chỉ có thể thêm hàng và cột trong phần tiêu đề của một lịch biểu thông thường.
Cũng lưu ý, trong ví dụ mã ở trên, nó sử dụng các thuộc tính FirstRowNumber và FirstColumnNumber. Trong một số phần, số hàng hoặc cột có thể bắt đầu
bằng 0 hoặc chúng có thể bắt đầu bằng 1. Những thuộc tính này phải luôn được sử dụng thay cho 0 hoặc 1 được mã hóa cứng.
Kiểu của hàng, cột hoặc ô riêng lẻ có thể được tùy chỉnh cho lịch biểu. Điều này bao gồm khả năng đặt kiểu đường viền cho tất cả bốn cạnh của ô, cũng như màu
ô và hình thức văn bản (nghĩa là màu sắc, phông chữ, kích thước). Đối với lịch trình thông thường, điều này chỉ có thể được thực hiện trong phần tiêu đề của
bảng.
Trong ví dụ bên dưới, phông chữ của phụ đề của ViewSchedule (giả định là hàng thứ hai của phần tiêu đề) được đặt thành đậm và kích thước phông chữ được đặt
thành 10.
Xem bộ lọc
Bộ lọc có thể được áp dụng cho Chế độ xem bằng cách sử dụng lớp ParameterFilterElement. ParameterFilterElement lọc các phần tử dựa trên danh mục của nó và một loạt các quy tắc lọc. Một hoặc nhiều danh
Khi bộ lọc đã được xác định (với một hoặc nhiều danh mục và một hoặc nhiều quy tắc bộ lọc), nó có thể được áp dụng cho Chế độ xem bằng một trong số các phương pháp. Phương thức View.AddFilter
() sẽ áp dụng bộ lọc cho dạng xem, nhưng với các ghi đè mặc định, nghĩa là hiển thị của dạng xem sẽ không thay đổi. View.SetFilterOverrides () sẽ đặt ghi đè đồ họa được liên kết với một bộ lọc. Và
View.SetFilterVisibility () sẽ thiết lập xem các phần tử vượt qua bộ lọc có hiển thị trong chế độ xem hay không.
AddFilter () và SetFilterVisibility () đều sẽ áp dụng bộ lọc cho chế độ xem nếu nó chưa được áp dụng, do đó không cần gọi riêng AddFilter ().
Ví dụ sau tạo một bộ lọc bao gồm tất cả các bức tường có thuộc tính Nhận xét được đặt thành "foo". Sau đó, bộ lọc được áp dụng cho Chế độ xem để bất kỳ bức tường nào đáp ứng tiêu chí này đều được tô
màu đỏ.
Danh sách các danh mục <ElementId> = new Danh sách <ElementId>
4. (); Category.Add (ElementId mới (BuiltInCategory.OST_Walls));
5. ParameterFilterElement tham sốFilterElement = ParameterFilterElement.Create (doc, "Comments = foo", category);
6.
7. FilteredElementCollector tham sốCollector = new FilteredElementCollector (doc); Tham số tham số = tham
số 8.
sốCollector.OfClass (typeof (Tường)). FirstElement (). Get_Parameter ("Nhận xét");
9.
10. List <FilterRule> filterRules = new List <FilterRule> ();
11. filterRules.Add (ParameterFilterRuleFactory.CreateEqualsRule (tham số.Id, "foo", true)); tham
12. sốFilterElement.SetRules (filterRules);
13.
14.
15. OverrideGraphicSettings filterSettings = new OverrideGraphicSettings (); // phác các bức
16. tường bằng màu đỏ filterSettings.SetProjectionLineColor (new Color (255, 0, 0));
17. view.SetFilterOverrides (tham sốFilterElement.Id, filterSettings);
18.
19. }
Tất cả các bộ lọc được áp dụng cho một chế độ xem có thể được truy xuất bằng cách sử dụng phương thức View.GetFilters (), phương thức này sẽ trả về một danh sách các id bộ lọc. Khả năng hiển thị bộ lọc
và ghi đè đồ họa có thể được kiểm tra cho một bộ lọc cụ thể bằng cách sử dụng các phương thức View.GetFilterVisibility () và View.GetFilterOverrides () tương ứng. View.RemoveFilter sẽ xóa một bộ lọc khỏi
quang cảnh.
Vùng cắt cho một số chế độ xem có thể được sửa đổi bằng cách sử dụng API Revit. Thuộc tính ViewCropRegionShapeManager.Valid cho biết chế độ xem có được phép quản lý hình dạng vùng cắt hay không trong khi
thuộc tính ShapeSet cho biết liệu một hình dạng đã được thiết lập hay chưa. Ví dụ sau đây cắt một chế độ xem xung quanh ranh giới của một căn phòng.
if (view! = null) {
4.
5. IList <IList <Autodesk.Revit.DB.BoundarySegment >> segment = room.GetBoundarySegment (new SpatialElementBoundaryOptions ());
6.
7. if (null ! = segment) // phòng có thể không bị ràng buộc {
Tạo một dạng xem đã thay thế bằng cách sử dụng lớp DisplacementElement. DisplacementElement là một phần tử dành riêng cho chế độ xem có thể được sử dụng để làm cho các phần tử có vẻ bị
dịch chuyển khỏi vị trí thực của chúng. Các khung nhìn lệch vị trí rất hữu ích để minh họa các phần tử của mô hình mối quan hệ phải có đối với mô hình nói chung. DisplacementElement không
thực sự thay đổi vị trí của bất kỳ phần tử mô hình nào; nó chỉ khiến chúng được hiển thị ở một vị trí khác.
Để biết ví dụ chi tiết về việc tạo các chế độ xem bị dịch chuyển, hãy xem mẫu DisplacementElementAnimation trong Revit SDK.
Phương thức DisplacementElement.Create () tĩnh tạo ra một DisplacementElement mới. DisplacementElement mới có thể là con của DisplacementElement cha nếu tham số
parentDisplacementElement không rỗng. Nếu một phần tử gốc được chỉ định, thì biến đổi DisplacementElement con sẽ được nối với biến đổi của cha mẹ và chuyển vị của các phần tử liên quan
Phương thức Create () cũng yêu cầu một tài liệu, danh sách các phần tử được dịch chuyển, chế độ xem chủ sở hữu và bản dịch được áp dụng cho đồ họa của các phần tử bị dịch chuyển.
Một phần tử chỉ có thể bị thay thế bởi một DisplacementElement duy nhất trong bất kỳ chế độ xem nào. Việc gán một phần tử cho nhiều hơn một DisplacementElement sẽ dẫn đến một ngoại lệ.
Các phương thức tĩnh khác của DisplacementElement có thể được sử dụng trước khi gọi Create () để giúp ngăn chặn bất kỳ ngoại lệ nào. CanCategoryBeDisplaced () kiểm tra xem các phần tử
thuộc một danh mục cụ thể có thể được thay thế hay không, trong khi phương thức tĩnh quá tải CanElementsBeDisplaced () cho biết liệu các phần tử cụ thể có thể được gán cho một
DisplacementElement mới hay không. IsAllowedAsDisplacedElement () kiểm tra một phần tử duy nhất xem có đủ điều kiện để bị thay thế hay không.
Phương thức GetAdditionalElementsToDisplace () tĩnh sẽ trả về bất kỳ phần tử bổ sung nào cần được thay thế cùng với phần tử được chỉ định trong một dạng xem được chỉ định. Ví dụ:
khi một bức tường bị dịch chuyển, bất kỳ phần chèn hoặc phần tử được lưu trữ nào cũng phải bị dịch chuyển.
Khi tạo một DisplacementElement con, IsValidAsParentInView () tĩnh có thể được sử dụng để xác minh một DisplacementElement cụ thể có thể được sử dụng làm cha mẹ trong một View cụ thể.
Các phương thức tĩnh khác của DisplacementElement có thể được sử dụng để tìm DisplacementElement bao gồm một phần tử cụ thể, để lấy danh sách tất cả các phần tử bị dịch chuyển trong
một Chế độ xem hoặc để lấy tất cả các DisplacementElements thuộc sở hữu của một Chế độ xem đã chỉ định.
Khi một DisplacementElement mới đã được tạo, các phương thức có sẵn để lấy bất kỳ DisplacementElements con nào, để lấy id của tất cả các phần tử bị ảnh hưởng bởi DisplacementElement hoặc
để lấy id của tất cả các phần tử bị ảnh hưởng bởi DisplacementElement cũng như bất kỳ DisplacementElements nào. Thuộc tính ParentId sẽ trả về id phần tử của DisplacementElement cha, nếu có.
Sau khi tạo, tập hợp các phần tử bị ảnh hưởng bởi DisplacementElement có thể được sửa đổi bằng cách sử dụng SetDisplacedElementIds () hoặc RemoveDisplacedElement ().
Ngoài ra, độ dịch chuyển tương đối có thể được thay đổi.
Phương thức ResetDisplacedElements () sẽ đặt bản dịch của DisplacementElement thành (0, 0, 0). DisplacementElement tiếp tục tồn tại, nhưng các phần tử của nó được hiển
DisplacementPath là một chú thích dành riêng cho chế độ xem liên quan đến DisplacementElement. Lớp DisplacementPath tạo một chú thích mô tả chuyển động của phần tử từ vị trí
thực tế đến vị trí bị dịch chuyển của nó. DisplacementPath được neo vào DisplacementElement bằng một tham chiếu đến một điểm trên một cạnh của phần tử đã dịch chuyển của
DisplacementElement. Nó được biểu diễn bằng một đường hoặc một chuỗi các đường chạy nhanh, bắt nguồn từ điểm được chỉ định trên phần tử đã dịch chuyển.
Phương thức DisplacementPath.Create () tĩnh yêu cầu một tài liệu, id của DisplacementElement được liên kết, một tham chiếu đề cập đến một cạnh hoặc đường cong của một trong
các phần tử được thay thế bởi DisplacementElement và một giá trị trong phạm vi [0,1] đó là một tham số dọc theo cạnh được chỉ định.
Sau khi được tạo, kiểu đường dẫn của DisplacementPath có thể được thiết lập bằng cách sử dụng thuộc tính PathStyle. Điểm neo cũng có thể được thay đổi bằng
DisplacementElement được liên kết có thể có DisplacementElement cha mẹ và cha mẹ này có thể có DisplacementElement cha mẹ của chính nó, tạo ra một loạt tổ tiên. Điểm đầu
cuối có thể là vị trí ban đầu (chưa được dịch chuyển) của điểm hoặc điểm tương ứng trên bất kỳ vị trí nào đã được dịch chuyển trung gian tương ứng với các Thiết bị di
dời tổ tiên này. Thuộc tính DisplacementPath.AncestorIdx chỉ định điểm cuối của đường dẫn.
Machine Translated by Google
UIView
Trong khi lớp View là lớp cơ sở cho tất cả các kiểu xem trong Revit và theo dõi các phần tử trong dạng xem, lớp UIView chứa dữ liệu về các cửa sổ dạng xem trong giao diện người
dùng Revit. Danh sách tất cả các dạng xem đang mở có thể được truy xuất từ UIDocument bằng phương thức GetOpenUIViews (). Lớp UIView có các phương thức để lấy thông tin về vùng vẽ các
khung nhìn cũng như xoay và thu phóng khung nhìn đang hoạt động.
UIView.GetWindowRectangle () trả về một hình chữ nhật mô tả kích thước và vị trí của cửa sổ UIView. Nó không bao gồm đường viền cửa sổ hoặc thanh tiêu đề.
UIView có một số phương pháp liên quan đến việc thu phóng chế độ xem đang hoạt động. UIView.GetZoomCorners () lấy các góc của hình chữ nhật của chế độ xem theo tọa độ mô hình và
UIView.ZoomAndCenterRectangle () cung cấp khả năng thu phóng và xoay chế độ xem đang hoạt động để căn giữa vùng đầu vào của mô hình.
Các phương thức ZoomToFit () và ZoomSheetSize () cung cấp các cách nhanh chóng để điều chỉnh thu phóng của cửa sổ, trong khi phương thức Zoom () có thể được sử dụng để phóng to hoặc thu
UIView.Close () có thể đóng một cửa sổ có thể nhìn thấy được. Tuy nhiên, nó không thể được sử dụng để đóng cửa sổ hoạt động cuối cùng. Cố gắng đóng cửa sổ hoạt động cuối cùng sẽ tạo ra
Chương này thảo luận về các phần tử và các loại phần tử tương ứng đại diện cho cấu trúc vị trí được tích hợp sẵn:
• HostObject - Hai phần đầu tiên tập trung vào HostObject và các lớp con HostObjAttributes tương ứng
• Nền tảng - Các nền tảng khác nhau trong API được biểu diễn dưới dạng các lớp khác nhau, bao gồm Tầng, ContFooting và FamilyInstance.
Phần Sàn và Nền so sánh chúng trong API.
• CompoundStructure - Phần này mô tả lớp CompoundStructure và cung cấp quyền truy cập vào Material.
Một số loại phần tử chủ có đặc tính nhiệt được mô tả trong phần Thuộc tính nhiệt.
Ngoài các Element máy chủ, lớp Khai mạc được giới thiệu ở cuối phần này.
Tường
Có bốn loại Tường được đại diện bởi kiểu liệt kê WallType.WallKind:
• Tấm màn
• Nền tảng
Lớp Wall và WallType hoạt động với loại tường Cơ bản trong khi cung cấp chức năng hạn chế cho các bức tường Xếp chồng và Rèm. Thỉnh thoảng bạn cần kiểm tra Tường
để xác định loại tường. Ví dụ: bạn không thể lấy tường phụ từ Tường xếp chồng bằng API. WallKind chỉ được đọc và được thiết lập bởi System Family.
Thuộc tính Wall.Flipped và phương thức Wall.flip () có quyền truy cập và kiểm soát hướng Tường. Trong các ví dụ sau, một Tường được so sánh trước và sau khi
gọi phương thức flip ().
• Thuộc tính Định hướng sau cuộc gọi lật là (0.0, -1.0, 0.0).
• Tham số Đường Vị trí Tường (WALL_KEY_REF_PARAM) là 3, đại diện cho Mặt hoàn thiện: Nội thất trong bảng sau.
• Lấy dòng làm tham chiếu, Bức tường được di chuyển nhưng Vị trí không thay đổi.
Có năm phương thức ghi đè tĩnh trong lớp Wall để tạo Tường:
Tên Sự mô tả
Tạo (Document, Curve, WallType, Level, Double, Double, Tạo tường hồ sơ hình chữ nhật mới trong dự án bằng cách sử dụng loại tường, chiều cao và độ lệch
Tạo (Tài liệu, IList <Curve>, Boolean) Tạo tường hồ sơ không phải hình chữ nhật trong dự án bằng cách sử dụng kiểu tường mặc định.
Tạo (Document, Curve, ElementId, Boolean) Tạo một tường hồ sơ hình chữ nhật mới trong dự án ở cấp độ được chỉ định bởi ElementId bằng cách
Tạo (Document, IList <Curve>, ElementId, ElementId, Tạo tường hồ sơ không phải hình chữ nhật trong dự án bằng cách sử dụng loại tường được chỉ định.
Boolean)
Tạo (Document, IList <Curve>, ElementId, ElementId, Tạo tường hồ sơ không phải hình chữ nhật trong dự án bằng cách sử dụng loại tường được chỉ định và vectơ
Tham số WallType Wall Function (WALL_ATTR_EXTERIOR) ảnh hưởng đến tham số Room Bound and Structural Usage của phiên bản tường đã tạo. Giá trị WALL_ATTR_EXTERIOR là một
số nguyên:
Chức năng tường Nội địa Nền móng bên ngoài Giữ lại Soffit
Giá trị 0 1 2 3 4
• Nếu tham số kết cấu đầu vào là true hoặc tham số Chức năng tường (WALL_ATTR_EXTERIOR) là Móng, thì Tường
Tham số StructuralUsage là Bearing; nếu không thì nó là NonBnking.
• Tham số Wall Room Bound (WALL_ATTR_ROOM_BOUNDING) đã tạo là false nếu Hàm Wall (WALL_ATTR_EXTERIOR)
tham số là Đang giữ lại.
Để biết thêm thông tin về các chức năng liên quan đến cấu trúc như thuộc tính AnalyticalModel, hãy tham khảo Revit Structure.
Tấm nền móng Sàn nhà FloorType NewFloor () Danh mục = OST_StructuralFoundation
FloorType.IsFoundationSlab = true
Machine Translated by Google
• Các phần tử được tạo từ thanh Thiết kế nền có cùng danh mục, OST_StructuralFoundation, nhưng tương ứng với các
Các lớp học.
• Thuộc tính FloorType IsFoundationSlab đặt danh mục FloorType thành OST_StructuralFoundation hoặc không.
Khi bạn truy xuất FloorType để tạo Sàn hoặc Tấm nền với NewFloor, hãy sử dụng các phương pháp sau:
Hiện tại, API không cung cấp quyền truy cập vào Mũi tên độ dốc của tầng trong lớp Tầng. Tuy nhiên, trong Revit Structure, bạn có thể tạo một bản sàn nghiêng
với NewSlab ():
Thuộc tính Floor.FloorType là một giải pháp thay thế cho việc sử dụng phương thức Floor.GetTypeId (). Để biết thêm thông tin về các thành viên liên
quan đến cấu trúc như phương thức GetSpanDirectionSymbolIds () và thuộc tính SpanDirectionAngle, hãy tham khảo Revit Structure chương.
Machine Translated by Google
Khi chỉnh sửa Isolated Foundation trong Revit, bạn có thể thực hiện các hành động sau:
• Bạn có thể chọn một máy chủ, chẳng hạn như một tầng. Tuy nhiên, thuộc tính Host của đối tượng FamilyInstance luôn trả về null.
• Khi xóa tầng chủ, Nền sẽ không bị xóa cùng với nó.
• Sử dụng tham số Offset (INSTANCE_FREE_HOST_OFFSET_PARAM) có liên quan khác để kiểm soát độ lệch móng từ máy chủ
Yếu tố.
Các móng liên tục được đại diện bởi lớp ContFooting trong API. API cung cấp quyền truy cập hạn chế vào cả ContFooting và ContFootingType ngoại trừ khi sử
dụng phương thức GetAnalyticalModel () (tham khảo AnalyticalModel trong Cấu trúc Revit tiết diện). Ví dụ, bức tường đính kèm không có sẵn trong Revit
Architecture. Trong Revit Structure, mối quan hệ giữa lớp Wall và lớp ContFooting được hiển thị bằng phương thức GetAnalyticalModelSupports () trong lớp
AnalyticalModel. Để biết thêm chi tiết, hãy tham khảo AnalyticalModelSupport trong Cấu trúc Revit tiết diện.
Bạn có thể sửa đổi hình thức của các phần tử dựa trên phiến bằng cách sử dụng lớp SlabShapeEditor. Lớp này cho phép bạn:
• Thao tác một hoặc nhiều điểm hoặc cạnh trên một phần tử dựa trên bản sàn đã chọn
• Thêm điểm trên phần tử để thay đổi hình dạng của phần tử
• Thêm các cạnh tuyến tính và chia mặt hiện có của tấm thành các vùng phụ nhỏ hơn
• Loại bỏ công cụ sửa đổi hình dạng và đặt lại hình học của phần tử trở lại hình dạng chưa được sửa đổi.
Machine Translated by Google
Dưới đây là một ví dụ về việc hoàn nguyên một tầng đã sửa đổi đã chọn trở lại hình dạng ban đầu:
Để biết thêm các ví dụ chi tiết về việc sử dụng SlabShapeEditor và các lớp liên quan, hãy xem ứng dụng mẫu SlabShapeE Chỉnh sửa có trong Revit SDK.
Mái nhà
Các mái nhà trong API Nền tảng Revit đều bắt nguồn từ đối tượng RoofBase. Có hai lớp:
• FootPrintRoof - đại diện cho một mái nhà được tạo ra từ dấu chân của tòa nhà
• ExtrusionRoof - đại diện cho mái nhà được làm từ một cấu hình ép đùn
Cả hai đều có thuộc tính RoofType lấy hoặc đặt kiểu mái. Ví dụ này cho thấy cách bạn có thể tạo một mái nhà có diện tích dựa trên một số bức tường đã chọn:
// Trước khi gọi mẫu này, hãy chọn một số bức tường để thêm một mái nhà.
// Đảm bảo rằng có một cấp có tên là "Roof" trong tài liệu.
// Xác định diện tích cho mái dựa trên lựa chọn của người dùng
Dấu chân CurveArray = application.Create.NewCurveArray ();
UIDocument uidoc = new UIDocument (tài liệu);
if (uidoc.Selection.Elements.Size! = 0)
{
foreach (phần tử Autodesk.Revit.DB.Element trong uidoc.Selection.Elements)
{
Wall wall = phần tử như Tường;
if (wall! = null)
{
LocationCurve wallCurve = wall.Location as LocationCurve;
footprint.Append (wallCurve.Curve);
tiếp tục;
}
Machine Translated by Google
if (modelCurve! = null)
{
footprint.Append (modelCurve.GeometryCurve);
}
}
}
khác
{
ném Ngoại lệ mới ("Bạn nên chọn một vòng lặp đường cong, hoặc một vòng lặp tường, hoặc kết hợp vòng lặp \ nof tường và đường cong để tạo
một mái nhà dấu chân. ");
}
Để biết ví dụ về cách tạo Ext ExtractionRoof, hãy xem ứng dụng mẫu NewRoof đi kèm với Revit API SDK.
Gutter và Fascia
Các phần tử Gutter và Fascia có nguồn gốc từ lớp HostedSweep, đại diện cho một mái nhà. Chúng có thể được tạo, xóa hoặc sửa đổi thông qua API. Để tạo các
phần tử này, hãy sử dụng một trong các ghi đè Document.Create.NewFascia () hoặc Document.Create.NewGutter (). Để biết ví dụ về cách tạo máng xối và tấm đệm mới,
hãy xem ứng dụng NewHostedSweep có trong các mẫu SDK. Dưới đây là đoạn mã cho thấy bạn có thể sửa đổi các thuộc tính của phần tử máng xối.
Rèm cửa
Các bức tường rèm, hệ thống rèm và mái rèm là các yếu tố chủ yếu cho các đối tượng CurtainGrid. Một bức tường rèm có thể chỉ có một CurtainGrid, trong
khi hệ thống rèm và mái rèm có thể chứa một hoặc nhiều CurtainGrid. Để biết ví dụ về cách tạo CurtainSystem, hãy xem ứng dụng mẫu CurtainSystem đi kèm với
Revit SDK. Để biết ví dụ về việc tạo một bức tường rèm và đặt nó bằng các đường lưới, hãy xem ứng dụng mẫu CurtainWallGrid.
Một số Phần tử không phải là HostObjects (và không có một lớp cụ thể), nhưng là những trường hợp đặc biệt có thể lưu trữ các đối tượng khác. Ví dụ: đường
nối và loại phần tử được liên kết của nó, không có các lớp cụ thể trong API và thay vào đó được biểu thị dưới dạng Phần tử và Loại phần tử trong danh mục
OST_Ramps.
Machine Translated by Google
CompoundStructure
Tường, sàn, trần và mái đều là con của HostObject lớp API. HostObject (và lớp kiểu liên quan HostObjAttributes của nó) cung cấp quyền truy cập chỉ đọc vào
CompoundStructure.
Lớp CompoundStructure cung cấp quyền truy cập đọc và ghi vào một tập hợp các lớp bao gồm các vật liệu khác nhau:
CompoundStructure.GetLayers ()
CompoundStructure.SetLayers ()
Thông thường các lớp này nằm song song và mở rộng toàn bộ đối tượng chủ với chiều rộng lớp cố định. Tuy nhiên, đối với tường, cấu trúc cũng có thể là “hợp
chất theo chiều dọc”, trong đó các lớp thay đổi theo khoảng cách thẳng đứng xác định từ đỉnh và đáy tường. Sử dụng CompoundStructure.IsVerentlyCompound để xác
định những điều này. Đối với cấu trúc phức hợp theo chiều dọc, cấu trúc mô tả một mặt cắt dọc thông qua hình chữ nhật được chia thành các vùng đa giác có các cạnh là tất
cả các đoạn thẳng đứng hoặc ngang. Bản đồ liên kết từng vùng này với chỉ mục của một lớp trong CompoundStructure, lớp xác định các thuộc tính của vùng đó.
Có thể sử dụng cấu trúc hợp chất để tìm vị trí hình học của các ranh giới lớp khác nhau. Phương thức
CompoundStructure.GetOffsetForLocationLine () cung cấp độ lệch từ đường vị trí trung tâm đến bất kỳ tùy chọn đường vị trí nào (đường trung tâm lõi, mặt hoàn thiện ở hai
Với sự bù đắp cho đường vị trí có sẵn, bạn có thể có được vị trí của ranh giới từng lớp bằng cách bắt đầu từ một vị trí đã biết và thu được chiều rộng của từng lớp bao
Tổng chiều rộng của phần tử là tổng chiều rộng của mỗi CompoundStructureLayer. Bạn không thể thay đổi tổng chiều rộng của phần tử một cách trực tiếp nhưng bạn có thể
thay đổi nó bằng cách thay đổi chiều rộng CompoundStructureLayer. Chỉ số của lớp có độ dài biến đổi được chỉ định (nếu được chỉ định) có thể được lấy từ
CompoundStructure.VariableLayerIndex.
Bạn phải đặt CompoundStructure trở lại thể hiện HostObjAttributes (sử dụng phương thức HostObjAttributes.SetCompoundStructure ()) để lưu trữ bất kỳ thay đổi nào.
Các thay đổi đối với HostObjAttributes ảnh hưởng đến mọi phiên bản trong tài liệu hiện tại. Nếu bạn cần kết hợp các lớp mới, bạn sẽ cần tạo HostObjAttributes mới
Các thuộc tính CompoundStructureLayer DeckProfileId và DeckEmbeddingType, chỉ hoạt động với Slab trong Revit Structure. Để biết thêm chi tiết, hãy tham khảo Revit
Kết cấu.
Vật chất
Mỗi CompoundStructureLayer trong HostObjAttributes thường được hiển thị với một số loại vật liệu. Nếu CompoundStructureLayer.MaterialId trả về -1, điều đó có nghĩa là Vật
liệu có liên quan đến Danh mục. Để biết thêm chi tiết, hãy tham khảo Vật liệu. Lấy Vật liệu CompoundStructureLayer được minh họa trong mẫu sau
mã số:
8. 9. // Lấy CompoundStructure
10. CompoundStructure comStruct = aWallType.GetCompoundStructure (); Danh mục
11. allCategories = document.Settings.Categories;
12.
13. // Lấy loại vật liệu mặc định OST_Walls; // sử dụng nếu Vật
14. liệu mặc định của lớp đó là <Theo Danh mục> Danh mục wallCategory =
15. allCategories.get_Item (BuiltInCategory.OST_Walls); Autodesk.Revit.DB.Material wallMaterial =
16. wallCategory.Material;
17.
18. foreach (CompoundStructureLayer structLayer trong comStruct.GetLayers ()) {
19.
20. Autodesk.Revit.DB.Material layerMaterial =
21. document.GetElement (structLayer.MaterialId) as Material;
22.
23. // Nếu Vật liệu của CompoundStructureLayer được chỉ định, hãy sử dụng mặc định
24. // Vật liệu của Danh mục của nó if
25. (null == layerMaterial) {
26.
Machine Translated by Google
Đôi khi chỉ cần vật liệu từ lớp "cấu trúc". Thay vì xem xét từng lớp để tìm lớp có chức năng là MaterialFunctionAssignment.Structure,
hãy sử dụng thuộc tính CompoundStructure.StructuralMaterialIndex để tìm chỉ mục của lớp có vật liệu xác định thuộc tính cấu trúc của loại cho mục đích phân tích.
Khai mạc
Trong Revit Platform API, đối tượng Mở có nguồn gốc từ đối tượng Phần tử và chứa tất cả các thuộc tính và phương thức của đối tượng Phần tử. Để truy
xuất tất cả các Mở trong một dự án, hãy sử dụng Document.ElementIterator để tìm các đối tượng Elements.Opening.
• IsRectBoundary - Xác định xem lỗ mở có ranh giới hình chữ nhật hay không.
o Nếu đúng, điều đó có nghĩa là Mở có ranh giới hình chữ nhật và bạn có thể nhận bộ sưu tập IList <XYZ> từ Mở
Thuộc tính BoundaryRect. Nếu không, thuộc tính trả về null.
o Nếu sai, bạn có thể lấy một đối tượng CurveArray từ thuộc tính BoundaryCurves.
• BoundaryCurves - Nếu ranh giới mở không phải là hình chữ nhật, thuộc tính này truy xuất thông tin hình học; nếu không nó trả về null.
Thuộc tính trả về một đối tượng CurveArray chứa các đường cong đại diện cho ranh giới của đối tượng Đang mở.
Để biết thêm chi tiết về Curve, hãy tham khảo Hình học.
• BoundaryRect - Nếu ranh giới mở là hình chữ nhật, bạn có thể lấy thông tin hình học bằng cách sử dụng thuộc tính này; nếu không nó trở lại
vô giá trị.
o Thuộc tính trả về một tập hợp IList <XYZ> chứa các tọa độ XYZ.
o Bộ sưu tập IList <XYZ> thường chứa ranh giới hình chữ nhật tối thiểu (phía dưới bên trái) và tối đa (phía trên bên phải)
tọa độ.
• Máy chủ lưu trữ - Thuộc tính máy chủ truy xuất phần tử máy chủ lưu trữ Đang mở. Phần tử chủ là phần tử bị cắt bởi đối tượng Mở.
Lưu ý Nếu danh mục của đối tượng Mở là Lỗ mở trục, thì máy chủ Mở là rỗng.
Ví dụ sau minh họa cách truy xuất các thuộc tính Mở hiện có.
Machine Translated by Google
7. 8. // lấy thông tin cho dù lỗ mở có ranh giới trực tràng hay không // Nếu lỗ mở có
9. ranh giới trực tràng, chúng ta có thể lấy thông tin hình học từ thuộc tính BoundaryRect.
10. // Nếu không, chúng ta sẽ lấy thông tin hình học từ thuộc tính BoundaryCurves if (opens.IsRectBoundary) {
11.
12.
13. message + = "\ nViệc mở có ranh giới hình chữ nhật."; // mảng chứa hai
14. đối tượng XYZ: coords max và min của ranh giới IList <XYZ> borderRect = open.BoundaryRect;
15.
16.
17. // lấy giá trị tọa độ của điểm tọa độ min XYZ point = opens.BoundaryRect
18. [0]; message + = "\ nĐiểm tọa độ :(" + point.X + "," + point.Y + "," +
19. point.Z + ")";
20.
21.
22. // lấy giá trị tọa độ của điểm tọa độ Max point = open.BoundaryRect [1];
23. message + = "\ nĐiểm tọa độ tối đa: (" + point.X + "," + point.Y + ","
24. + point.Z + ")";
25.
26.
27. }
28. khác {
29. message + = "\ nViệc mở không có ranh giới hình chữ nhật."; // Lấy số đường cong int
30. curve = opens.BoundaryCurves.Size; message + = "\ nSố đường cong là: for (int i =
31. 0; i <curve; i ++) {
"
32. + các đường cong;
33.
34.
35. Autodesk.Revit.DB.Curve curve = opens.BoundaryCurves.get_Item (i); // Nhận thông báo về
36. điểm bắt đầu của đường cong + = "\ nĐiểm bắt đầu của đường cong:"
37. + XYZToString (curve.GetEndPoint (0));
38. // Lấy điểm cuối đường cong
39. thúc của đường cong:" + XYZToString (curve.GetEndPoint (1)); message + = "; Điểm kết
40. }
41. }
42. TaskDialog.Show ("Revit", thông báo);
43. }
44.
45. // xuất ra ba tọa độ của điểm 46. string XYZToString
(XYZ point) 47. { 48. 49. }
Trong API nền tảng Revit, hãy sử dụng phương thức Document.NewOpening () để tạo phần mở trong dự án của bạn. Có bốn phương thức quá tải bạn có thể sử dụng
để tạo các lỗ mở trong các phần tử máy chủ lưu trữ khác nhau:
// Tạo một Mở mới trong một chùm, dấu ngoặc nhọn và cột. Mở
công khai NewOpening (Element famInstElement, hồ sơ CurveArray, eRefFace iFace);
// Tạo một Mở mới trên mái nhà, sàn nhà và trần nhà. public Mở
NewOpening (Element hostElement, CurveArray profile, bool bPer SquareFace);
// Tạo một khe hở trong bức tường thẳng hoặc bức tường vòng
cung. công khai Mở Mới Mở (Tường, XYZ pntStart, XYZ pntEnd);
• Tạo phần mở đầu trong Beam, Brace hoặc Column - Sử dụng để tạo phần mở đầu trong một phiên bản gia đình. Tham số iFace cho biết
mặt mà lỗ được đặt trên đó.
• Tạo một mái nhà, sàn nhà hoặc trần nhà - Sử dụng để tạo một lỗ mở trên mái nhà, sàn nhà hoặc trần nhà.
• Tham số bPer SquareFace cho biết lỗ mở là vuông góc với mặt hoặc thẳng đứng.
• Nếu tham số là true, lỗ mở sẽ vuông góc với mặt phần tử chủ. Xem hình sau:
Machine Translated by Google
Hình 39: Đường cắt mở vuông góc với mặt phần tử chủ
• Tạo phần tử mở mới - Sử dụng để tạo phần mở trục trong dự án của bạn. Tuy nhiên, hãy đảm bảo rằng topLevel cao hơn
bottomLevel; nếu không, một ngoại lệ được ném ra.
• Tạo Khe hở trong Tường thẳng hoặc Tường vòng cung - Sử dụng để tạo lỗ mở hình chữ nhật trên tường. Tọa độ của pntStart và pntEnd phải là tọa độ góc
có thể tạo hình chữ nhật. Ví dụ: góc dưới bên trái và góc trên bên phải của hình chữ nhật.
Nếu không, một ngoại lệ được ném ra.
Lưu ý Sử dụng lệnh Mở, bạn chỉ có thể tạo một lỗ tường hình chữ nhật. Để tạo một số lỗ trên tường, hãy chỉnh sửa cấu hình tường thay vì lệnh Mở.
Machine Translated by Google
Lớp ThermalProperties có các thuộc tính cho các giá trị được hiển thị ở trên. Độ hấp thụ và Độ nhám có thể thay đổi trong khi HeatTransferCoe Hiệu quả,
ThermalResistance và ThermalMass ở chế độ chỉ đọc. Đơn vị cho các giá trị được tính toán này được hiển thị trong bảng dưới đây.
Các thuộc tính nhiệt có thể được truy xuất bằng cách sử dụng thuộc tính ThermalProperties trên các loại sau:
Loại tường
FloorType
CeilingType
RoofType
BuildingPadType
Machine Translated by Google
• Cách tải hoặc tạo các tính năng gia đình và phiên bản gia đình
• Mối quan hệ giữa cá thể gia đình và biểu tượng gia đình
Trong Revit, cách dễ nhất để đánh giá một phần tử có phải là FamilyInstance hay không là sử dụng hộp thoại thuộc tính.
• Nếu họ bắt đầu bằng Họ Hệ thống và nút Tải bị tắt, họ đó thuộc Họ Hệ thống.
• Một FamilyInstance chung, thuộc Họ Thành phần, không bắt đầu với Họ Hệ thống.
• Ví dụ, trong hình dưới đây, họ cho bàn ghế là Bàn. Ngoài ra, nút Tải được bật.
• Có một số trường hợp ngoại lệ, ví dụ: Đại chúng và thành viên tại chỗ. Các trường Gia đình và Loại trống.
Các họ trong API nền tảng Revit được đại diện bởi ba đối tượng:
• Gia đình
• FamilySymbol
• FamilyInstance
Mỗi đối tượng đều đóng một vai trò quan trọng trong cấu trúc gia đình.
Đối tượng Family đại diện cho toàn bộ gia đình, chẳng hạn như cửa Single-Flush. Ví dụ: Dòng cửa xả một lần tương ứng với tệp Single-Flush.rfa. Đối tượng
Family chứa một số FamilySymbols được sử dụng để lấy tất cả các biểu tượng family để tạo điều kiện trao đổi các thể hiện từ biểu tượng này sang biểu
tượng khác.
Machine Translated by Google
Đối tượng FamilySymbol đại diện cho một tập hợp cụ thể các cài đặt gia đình tương ứng với một Loại trong giao diện người dùng Revit, chẳng hạn như 34 "× 80".
Đối tượng FamilyInstance đại diện cho một thực thể Kiểu (FamilySymbol) trong dự án Revit. Ví dụ, trong hình sau, FamilyInstance là một cửa duy nhất trong dự án.
• Mỗi FamilyInstance có một FamilySymbol. Cánh cửa là một ví dụ của một 34 "× 80".
• Mỗi FamilySymbol thuộc về một Family. Biểu tượng 34 "× 80" thuộc về dòng Single-Flush.
• Mỗi Family chứa một hoặc nhiều FamilySymbols. Dòng Single-Flush chứa ký hiệu 34 "× 80", ký hiệu 34 "× 84", 36 "× 84"
và như thế.
Lưu ý rằng trong khi hầu hết các phần tử thành phần được hiển thị thông qua các lớp API FamilySymbol và FamilyInstance, một số phần tử đã được bao bọc bằng các lớp API
cụ thể. Ví dụ, AnnotationSymbolType bao bọc FamilySymbol và AnnotationSymbol bao bọc FamilyInstance.
Gia đình
Lớp Family đại diện cho toàn bộ gia đình Revit. Nó chứa FamilySymbols được FamilyInstances sử dụng.
• LoadFamily () tải toàn bộ họ và tất cả các kiểu hoặc ký hiệu của nó vào dự án.
• Đường dẫn tệp gia đình được truy xuất bằng phương thức GetLibraryPaths () đối tượng Options.Application.
• Đối tượng Options.Application được truy xuất bằng thuộc tính Application object Options.
• Trong LoadFamilySymbol (), đối số đầu vào Tên là cùng một giá trị chuỗi được trả về bởi thuộc tính Tên đối tượng FamilySymbol.
Thể loại
Thuộc tính FamilyBase.FamilyCategory cho biết danh mục của Gia đình như Cột, Đồ nội thất, Khung cấu trúc hoặc Cửa sổ.
Gia đình
Ví dụ về các danh mục của đối tượng FamilyInstance trong Revit là Beams, Braces, Columns, Furniture, Massing, v.v. Đối tượng FamilyInstance cung cấp các thuộc tính
chi tiết hơn để có thể thay đổi kiểu và giao diện của cá thể gia đình trong dự án.
Các thuộc tính liên quan đến vị trí cho thấy các đặc điểm vật lý và hình học của các đối tượng FamilyInstance, chẳng hạn như định hướng, xoay và vị trí.
Định hướng
Hướng khuôn mặt hoặc hướng tay có thể được thay đổi đối với một số đối tượng FamilyInstance. Ví dụ, một cánh cửa có thể hướng ra bên ngoài hoặc
bên trong phòng hoặc tường và có thể đặt tay cầm ở bên trái hoặc bên phải. Bảng sau đây so sánh các trường hợp gia đình cửa đi, cửa sổ và bàn làm việc.
Nếu CanFlipFacing hoặc CanFlipHand là true, bạn có thể gọi các phương thức flipFacing () hoặc flipHand () tương ứng. Các phương pháp này có thể thay đổi hướng
quay mặt hoặc hướng tay tương ứng. Nếu không, các phương thức không làm gì cả và trả về False.
Khi thay đổi hướng, hãy nhớ rằng một số loại cửa sổ có thể thay đổi cả hướng tay và hướng quay mặt, chẳng hạn như Casement 3x3 với họ Trim.
Machine Translated by Google
Có bốn kết hợp hướng quay mặt và hướng tay khác nhau cho cửa. Xem hình sau để biết các kết hợp và các giá trị Boolean tương ứng có trong bảng sau.
Hình 44: Các cửa có hướng quay mặt và hướng tay khác nhau
Hướng mặt phẳng làm việc cho FamilyInstance cũng có thể được thay đổi. Nếu CanFlipWorkPlane là true, bạn có thể đặt thuộc tính IsWorkPlaneFlipped. Cố gắng
đặt thuộc tính này cho FamilyInstance không cho phép lật mặt phẳng làm việc sẽ dẫn đến một ngoại lệ.
Thuộc tính Mirrored cho biết đối tượng FamilyInstance đã được sao chép hay chưa.
Trong ví dụ về cửa trước, thuộc tính Mirrored cho Cửa 1 và Cửa 2 là Sai, trong khi đối với cả Cửa 3 và Cửa 4 là Đúng. Điều này là do khi bạn tạo một
cánh cửa trong dự án Revit, kết quả mặc định là Cửa 1 hoặc Cửa 2. Để tạo một cánh cửa như Cửa 3 hoặc Cửa 4, bạn phải lật hướng tay của Cửa 1 và Cửa 2
tương ứng. Thao tác lật giống như một sự biến đổi của gương, đó là lý do tại sao thuộc tính Cửa 3 và Cửa 4 được Gương là Đúng.
Để biết thêm thông tin về cách sử dụng phương thức Mirror () trong Revit, hãy tham khảo Phần tử chỉnh sửa chương.
Thuộc tính phiên bản gia đình Boolean CanRotate được sử dụng để kiểm tra xem cá thể họ có thể xoay 180 độ hay không. Điều này phụ thuộc vào gia đình mà cá thể
đó thuộc về. Ví dụ: trong hình sau, thuộc tính CanRotate cho Cửa sổ 1 (Trường hợp 3 × 3 với Trim: 36 "× 72") và Cửa 1 (Kính kép 2: 72 "× 82") là đúng, trong
khi Cửa sổ 2 ( Đã sửa: 36 "w × 72" h) là sai.
Machine Translated by Google
Nếu CanRotate là true, bạn có thể gọi phương thức phiên bản gia đình xoay (), phương thức này sẽ lật phiên bản gia đình đi 180 độ. Nếu không, phương thức không làm gì cả và trả về False.
Hình trước cũng cho thấy trạng thái Window 1 và Door 1 sau khi thực hiện phương thức xoay ().
Nhớ lại từ các phần tử Xoay phần trước trong tài liệu này, các cá thể họ (và các phần tử khác) có thể được xoay theo một góc do người dùng chỉ định bằng cách sử
dụngElementTransformUtils.RotateElement () và ElementTransformUtils.RotateElements ().
Địa điểm
Thuộc tính Location xác định vị trí thực của một đối tượng trong một dự án. Một cá thể có thể có vị trí điểm hoặc vị trí đường.
• Vị trí điểm là một đối tượng lớp LocationPoint - Chân, cửa hoặc bảng có vị trí điểm
• Vị trí đường là một đối tượng lớp LocationCurve - Một chùm có vị trí đường.
Để biết thêm thông tin về Vị trí, hãy tham khảo Phần tử chỉnh sửa.
Chủ nhà
Đối tượng FamilyInstance có thuộc tính Host trả về phần tử lưu trữ của nó.
Một số đối tượng FamilyInstance không có phần tử máy chủ, chẳng hạn như Bàn và các đồ nội thất khác, vì vậy thuộc tính Máy chủ không trả về gì vì không có phần tử máy chủ nào được tạo.
Tuy nhiên, các đối tượng khác, chẳng hạn như cửa ra vào và cửa sổ, phải có các yếu tố chủ. Trong trường hợp này, thuộc tính Host trả về một Phần tử tường trong đó có cửa sổ hoặc cửa ra
vào. Xem hình sau.
Machine Translated by Google
Hình 46: Cửa ra vào và cửa sổ được đặt trong một bức tường
HostFace
Thuộc tính HostFace nhận tham chiếu đến mặt chủ của cá thể họ, hoặc nếu cá thể được đặt trên mặt phẳng làm việc, thì tham chiếu đến mặt hình học bên dưới
mặt phẳng làm việc. Thuộc tính này sẽ trả về một tham chiếu rỗng nếu mặt phẳng làm việc không tham chiếu đến hình học khác hoặc nếu thể hiện không được lưu
trữ trên mặt phẳng hoặc mặt phẳng làm việc.
Phương thức FamilyInstance.GetSubComponentIds () trả về các ElementIds của các cá thể họ được tải vào họ đó. Khi một phiên bản của 'Table-Dining Round w
Chairs.rfa' được đặt trong một dự án, các ElementIds của bộ ghế được trả về bằng phương thức GetSubComponentIds ().
Thuộc tính SuperComponent trả về thành phần mẹ của cá thể gia đình. Trong 'Table-Dining Round w Chairs.rfa', siêu thành phần gia đình cho mỗi chiếc ghế lồng
nhau là ví dụ của 'Table-Dining Round w Chairs.rfa'.
Vùng mã 12-1: Nhận các thành phần phụ và siêu thành phần từ FamilyInstance
Các thuộc tính trong phần này dành riêng cho Revit Architecture và Revit Structure. Chúng được đề cập kỹ lưỡng trong các chương tương ứng của chúng.
Thuộc tính FamilyInstance bao gồm Room, FromRoom và ToRoom. Để biết thêm thông tin về Phòng, hãy tham khảo Revit Architecture.
Machine Translated by Google
FamilyInstance có thuộc tính Space để xác định không gian chứa một thể hiện trong MEP.
Phương thức GetAnalyticalModel () truy xuất mô hình phân tích cấu trúc cá thể gia đình.
Để biết thêm thông tin về AnalyticalModel, hãy tham khảo Revit Structure.
Thông thường, một đối tượng FamilyInstance được tạo bằng một trong mười hai phương thức nạp chồng của Autodesk.Revit.Creation.Document được gọi
là NewFamilyInstance (). Việc lựa chọn quá tải nào để sử dụng không chỉ phụ thuộc vào loại đối tượng mà còn các đặc điểm khác của vị trí như liệu nó nên được
lưu trữ, được đặt so với mức tham chiếu hay được đặt trực tiếp trên một mặt cụ thể. Chi tiết có trong Bảng 32 - Các tùy chọn để tạo phiên bản với
NewFamilyInstance () bên dưới.
Một số đối tượng FamilyInstance yêu cầu tạo nhiều vị trí. Trong những trường hợp này, thích hợp hơn là sử dụng phương pháp tạo chi tiết hơn do đối tượng
này cung cấp (xem Bảng 33 - Các tùy chọn để tạo cá thể bằng các phương pháp khác bên dưới). Nếu cá thể không được tạo, một ngoại lệ sẽ được ném ra. Kiểu /
ký hiệu được sử dụng phải được tải vào dự án trước khi phương thức được gọi.
Machine Translated by Google
Nhà ga hàng không XYZ, FamilySymbol, StructuralType Tạo phiên bản ở một vị trí tùy ý mà không cần tham chiếu đến cấp độ hoặc phần tử máy chủ.
Thiết bị dữ liệu XYZ, FamilySymbol, XYZ, Element, Nếu nó được lưu trữ trên tường, sàn hoặc trần nhà và cần được định hướng theo hướng không mặc định
StructuralType hướng đi
Thiết bị điện
Đồ đạc điện
XYZ, FamilySymbol, Element, Level, Nếu nó được lưu trữ trên tường, sàn hoặc trần nhà và được liên kết với mức tham chiếu
Mô hình chung Khuôn mặt, XYZ, XYZ, FamilySymbol Nếu nó dựa trên khuôn mặt và cần được định hướng theo hướng không mặc định
Khối lượng
Face, Line, FamilySymbol Nếu nó dựa trên khuôn mặt và tuyến tính
Công cụ kỹ thuật
Thiết bị gọi y tá
Tham chiếu, Dòng, Gia đìnhSymbol Nếu nó dựa trên khuôn mặt và tuyến tính, nhưng chấp nhận một tham chiếu đến một khuôn mặt, thay vì một Khuôn mặt
Đậu xe
Trồng cây
Thiết bị an ninh
Địa điểm
Cơ sở kết cấu
Cột XYZ, FamilySymbol, Level, Tạo cột để cơ sở của nó nằm trên mức tham chiếu. Cột sẽ mở rộng đến
Cột kết cấu StructuralType cấp có sẵn tiếp theo trong mô hình hoặc sẽ mở rộng chiều cao cột mặc định nếu không có cấp nào phù hợp
Cửa ra vào XYZ, FamilySymbol, Element, Cửa ra vào và cửa sổ phải được đặt bởi một bức tường. Sử dụng phương pháp này nếu chúng có thể được
XYZ, FamilySymbol, XYZ, Element, Nếu phiên bản đã tạo cần được định hướng theo hướng không mặc định
StructuralType
XYZ, FamilySymbol, Element, Level, Nếu phiên bản cần được liên kết với mức tham chiếu
StructuralType
Khung cấu trúc Đường cong, Gia đình Biểu tượng, Mức độ, Tạo một dấu ngoặc nhọn hoặc chùm dựa trên mức độ dựa trên đường cong của nó. Đây là phương pháp được khuyến nghị để
1
XYZ, FamilySymbol, Element, Level, Nếu nó được lưu trữ trên một phần tử (tầng, v.v.) và được liên kết với cấp tham chiếu
StructuralType
1
XYZ, FamilySymbol, Level, Nếu nó được liên kết với một mức tham chiếu
StructuralType
1
XYZ, FamilySymbol, Element, Nếu nó được lưu trữ trên một phần tử (tầng, v.v.)
StructuralType
Thành phần chi tiết Dòng, FamilySymbol, View Chỉ áp dụng cho các ký hiệu chi tiết dựa trên dòng họ 2D
Machine Translated by Google
Chú thích Chung XYZ, FamilySymbol, View Chỉ áp dụng cho các biểu tượng gia đình 2D
1
Phiên bản cấu trúc sẽ có độ dài bằng 0 sau khi tạo. Mở rộng nó bằng cách thiết lập đường cong của nó (FamilyInstance.Location as LocationCurve) bằng cách sử dụng
Thuộc tính LocationCurve.Curve.
Bạn có thể đơn giản hóa mã của mình và cải thiện hiệu suất bằng cách tạo nhiều phiên bản gia đình cùng một lúc bằng
Document.NewFamilyInstances (). Phương thức này có một tham số duy nhất, là danh sách các đối tượng FamilyInstanceCreationData mô tả các cá thể họ cần tạo.
Các phiên bản của một số kiểu họ được tạo tốt hơn thông qua các phương thức khác ngoài Autodesk.Revit.Creation.Document.NewFamilyInstance ().
Chúng được liệt kê trong bảng dưới đây.
Machine Translated by Google
Bảng 33 - Các tùy chọn để tạo phiên bản bằng các phương pháp khác
Thẻ nhà ga hàng không NewTag (Chế độ xem, Phần tử, Boolean, Mã thẻ phải là TM_ADDBY_CATEGORY và phải có một họ thẻ có liên quan được tải khi cố
Thẻ tải diện tích TagMode, TagOrientation, XYZ) gắng tạo thẻ, nếu không ngoại lệ sẽ được đưa ra
Thẻ Casework
Thẻ trần
Thẻ cửa
Thẻ Duct
Thẻ tầng
Thẻ Keynote
Thẻ đậu xe
Thẻ ống
Thẻ phòng
Thẻ Spinkler
Thẻ
Thẻ
Thẻ tường
Thẻ cửa sổ
Thẻ dây
Thẻ vật liệu NewTag (Chế độ xem, Phần tử, Boolean, TagMode phải là TM_ADDBY_MATERIAL và phải có một họ thẻ material được tải, nếu
Thẻ nhiều danh mục NewTag (Chế độ xem, Phần tử, Boolean, Mã thẻ phải là TM_ADDBY_MULTICATEGORY và phải có một họ thẻ nhiều danh mục
TagMode, TagOrientation, XYZ) được tải, nếu không ngoại lệ sẽ được ném ra
Khối tiêu đề NewViewSheet (FamilySymbol) Tiêu đề sẽ được thêm vào trang tính mới tạo.
Các gia đình và biểu tượng gia đình được tải bằng phương thức Document.LoadFamily () hoặc Document.LoadFamilySymbol (). Một số họ, chẳng hạn như Beams, có nhiều hơn
một điểm cuối và được chèn theo cách giống như một cá thể điểm duy nhất. Sau khi các cá thể họ tuyến tính được chèn vào, các điểm cuối của chúng có thể được thay đổi
bằng cách sử dụng thuộc tính Element.Location. Để biết thêm thông tin, hãy tham khảo Mẫu mã.
Mẫu mã
Xem lại các mẫu mã sau để biết thêm thông tin về cách làm việc với Phiên bản gia đình. Xin lưu ý rằng trong phương thức NewFamilyInstance (), một đối số
StructuralType là bắt buộc để chỉ định loại cá thể họ sẽ được tạo. Dưới đây là một số ví dụ:
Bảng 34: Giá trị của đối số StructuralType trong phương thức NewFamilyInstance ()
Cột Cột
Footings Chân
Tạo bảng
Hàm sau đây trình bày cách tải một họ Bảng vào một dự án Revit và tạo các thể hiện từ tất cả các biểu tượng trong họ này.
Phương thức LoadFamily () trả về false nếu họ đã chỉ định đã được tải trước đó. Do đó, trong trường hợp sau, không tải gia đình, Bàn ăn Round w Ghế.rfa, trước
khi chức năng này được gọi. Trong ví dụ này, các bảng được tạo ở Cấp 1 theo mặc định.
x + = 10,0;
}
Kết quả của việc tải họ Bảng và đặt một phiên bản của mỗi FamilySymbol:
Trong mẫu này, một biểu tượng gia đình được tải thay vì một gia đình, bởi vì tải một FamilySymbol đơn lẻ nhanh hơn tải một Family chứa nhiều FamilySymbol.
// tìm dòng mô hình trong danh sách các phần tử được chọn UIDocument
if (elem là ModelLine) {
} if (null! = modelLine) {
} khác
{
ném ngoại lệ mới ("Vui lòng chọn một dòng mô hình trước khi gọi lệnh này");
}
} khác
{
ném ngoại lệ mới ("Không thể tải" + tên tệp);
}
Machine Translated by Google
Tạo cửa
Tạo một bức tường dài có chiều dài khoảng 180 'và chọn nó trước khi chạy mẫu này. Đối tượng máy chủ lưu trữ phải hỗ trợ các trường hợp chèn; nếu không phương
thức NewFamilyInstance () sẽ không thành công. Nếu một phần tử máy chủ không được cung cấp cho một phiên bản phải được tạo trong một máy chủ lưu trữ hoặc không
thể chèn cá thể đó vào phần tử máy chủ lưu trữ đã chỉ định, thì phương thức NewFamilyInstance () sẽ không làm gì cả.
String fileName = @ "C: \ Documents and Settings \ All Users \ Application Data \ Autodesk \ RST 2011 \ Imperial Library \ Doors \ Single trang trí 2.rfa";
// lấy mức của khung nhìn đang hoạt động để tạo tia Level level
= document.ActiveView.Level;
+ = 1,5;
}
}
Kết quả của mã trước đó trong Revit được hiển thị trong hình sau. Lưu ý rằng nếu vị trí được chỉ định không ở mức được chỉ định, phương thức NewFamilyInstance () sử
dụng độ cao vị trí thay vì độ cao cấp.
Sử dụng hướng dẫn tham chiếu để chèn một mục theo một hướng cụ thể.
String fileName = @ "C: \ Documents and Settings \ All Users \ Application Data \ Autodesk \ RST 2011 \ Imperial Library \ Furniture \ Bed Box.rfa";
trường hợp 0:
trường hợp 1:
trường hợp 2:
}
Phiên bản FamilyInstance = document.Create.NewFamilyInstance (vị trí, ký hiệu, hướng, tầng,
StructuralType.NonStructural); x + =
10; i ++;
} khác
{
ném ngoại lệ mới ("Vui lòng mở một mô hình có ít nhất một phần tử tầng trước khi gọi lệnh này.");
}
Machine Translated by Google
Hình 49: Tạo các phiên bản gia đình bằng cách sử dụng các hướng tham chiếu khác nhau
Gia đình
Lớp FamilySymbol đại diện cho một Loại duy nhất trong một Gia đình. Mỗi gia đình có thể chứa một hoặc nhiều biểu tượng gia đình. Mỗi FamilyInstance có một FamilySymbol
liên quan có thể được truy cập từ thuộc tính Symbol của nó.
Một số loại gia đình nhất định (cửa ra vào, cửa sổ và tấm tường rèm) chứa các đặc tính nhiệt như được hiển thị trong cửa sổ Thuộc tính loại bên dưới cho một cửa sổ.
Machine Translated by Google
Các thuộc tính nhiệt cho FamilySymbol được đại diện bởi lớp FamilyThermalProperties và được truy xuất bằng phương thức
FamilySymbol.GetThermalProperties (). FamilyThermalProperties cho một FamilySymbol có thể được đặt bằng cách sử dụng SetThermalProperties (). Bản thân các thuộc
Đơn vị cho các giá trị được tính toán được hiển thị trong bảng dưới đây.
Thuộc tính AnalyticConstructionTypeId là kiểu gbXML xây dựng và trả về giá trị tương ứng với thuộc tính 'id' của nút ConstructionType trong Constructions.xml.
Phương thức FamilyThermalProperties.Find () tĩnh sẽ tìm FamilyThermalProperties theo thuộc tính 'id' của nút ConstructionType trong Constructions.xml.
Đối tượng Family đại diện cho toàn bộ họ Revit. Tài liệu Gia đình là Tài liệu đại diện cho một Gia đình hơn là một dự án Revit.
Sử dụng chức năng Tạo gia đình của API Revit, bạn có thể tạo và chỉnh sửa các gia đình cũng như các loại của chúng. Chức năng này đặc biệt hữu ích khi bạn có sẵn dữ liệu sẵn có từ một
hệ thống bên ngoài mà bạn muốn chuyển đổi sang thư viện họ Revit.
Quyền truy cập API để chỉnh sửa nhóm hệ thống không khả dụng.
Thể loại
Như đã lưu ý trong chương trước, thuộc tính FamilyBase.FamilyCategory cho biết danh mục của Gia đình như Cột, Đồ nội thất, Khung cấu trúc hoặc Cửa sổ.
Đoạn mã sau có thể được sử dụng để xác định danh mục của họ trong một tài liệu Revit Family đang mở.
FamilyCategory cũng có thể được đặt, cho phép thay đổi danh mục của một gia đình đang được chỉnh sửa.
Thông số
Tham số gia đình có thể được truy cập từ thuộc tính OwnerFamily của Tài liệu gia đình như ví dụ sau cho thấy.
Khả năng sửa đổi tài liệu Revit Family và truy cập các loại và tham số họ có sẵn từ lớp Tài liệu nếu Tài liệu là tài liệu Gia đình, như được xác định bởi
thuộc tính IsFamilyDocument. Để chỉnh sửa một họ hiện có trong khi làm việc trong tài liệu Dự án, hãy sử dụng các hàm EditFamily () có sẵn từ lớp Tài liệu, rồi
sử dụng LoadFamily () để tải lại họ vào tài liệu chủ sở hữu sau khi chỉnh sửa xong. Để tạo một tài liệu gia đình mới, hãy sử dụng Application.NewFamilyDocument
():
1. // tạo một tài liệu gia đình mới bằng cách sử dụng mẫu Generic Model.rft 2. string
templateFileName = @ "C: \ Documents and Settings \ All Users \ Application Data \ Autodesk \ RST 2011 \ Imperial Templates \ Generic Model.rft";
3.
4. Họ tài liệuDocument = application.NewFamilyDocument (templateFileName); 5. if (null ==
familyDocument) 6. { 7. 8. }
Bạn có thể lọc một Tài liệu Gia đình cho FamilySymbols để tải tất cả các FamilySymbol vào Gia đình. Trong mẫu mã này, tất cả các FamilySymbols lồng nhau
trong Family cho một FamilyInstance nhất định được liệt kê.
Vùng mã 13-4: Nhận các biểu tượng Gia đình lồng nhau trong một Gia đình
if (null ! = familyInstance.Symbol) {
Lớp FamilyItemFactory cung cấp khả năng tạo các phần tử biểu mẫu trong gia đình, chẳng hạn như đùn, quay, quét và pha trộn. Xem phần trên 3D
Phác thảo để biết thêm thông tin về các mẫu phác thảo 3D này.
Ví dụ sau minh họa cách tạo một phần tử Ext Extraction mới. Nó tạo ra một hồ sơ hình chữ nhật đơn giản và sau đó di chuyển
Mẫu sau đây cho thấy cách tạo một Dọn dẹp mới từ một cấu hình hình trứng đặc trong Tài liệu Gia đình.
Lớp FreeFormElement cho phép tạo các hình học phi tham số được tạo từ một phác thảo rắn đầu vào. Một FreeFormElement có thể tham gia vào các phép nối và vô hiệu hóa
các phần tử có thể kết hợp khác. Các mặt phẳng của phần tử có thể được bù đắp tương tác và theo chương trình theo hướng bình thường của mặt.
Sau khi tạo biểu mẫu mới trong một gia đình, bạn có thể muốn thay đổi danh mục phụ cho biểu mẫu. Ví dụ: bạn có thể có họ Cửa và muốn tạo nhiều danh mục phụ
của cửa và gán các danh mục phụ khác nhau cho các loại cửa khác nhau trong gia đình của bạn.
Machine Translated by Google
Ví dụ sau đây cho thấy cách tạo một danh mục con mới, gán tài liệu cho nó, sau đó gán danh mục con cho một biểu mẫu.
Các chú thích mới như các đối tượng Dimensions và ModelText và TextNote cũng có thể được tạo trong các họ, cũng như các phần tử chú thích đường cong như
SymbolicCurve, ModelCurve và DetailCurve. Xem phần tử chú thích để biết thêm thông tin về các phần tử chú thích.
Ngoài ra, một Căn chỉnh mới có thể được thêm vào, tham chiếu đến Chế độ xem xác định hướng của căn chỉnh và hai tham chiếu hình học.
Ví dụ sau minh họa cách tạo một Kích thước chiều dài cung mới.
Một số loại kích thước có thể được gắn nhãn bằng FamilyParameter. Các thứ nguyên không thể được gắn nhãn sẽ ném ra một
ngoại lệ Autodesk.Revit.Exceptions.InvalidOperationException nếu bạn cố gắng lấy hoặc đặt thuộc tính Nhãn. Trong ví dụ sau, một kích thước tuyến tính mới được tạo
giữa hai dòng và được gắn nhãn là "chiều rộng".
9. 10.
11. pt1 = new XYZ (10, 5, 0); pt2 =
12. new XYZ (10, 10, 0); line =
13. Line.CreateBound (pt1, pt2); plane =
14. document.Application.Create.NewPlane (pt1.CrossProduct (pt2), pt2); skplane = SketchPlane.Create
15. (tài liệu, mặt phẳng); ModelCurve modelcurve2 = document.FamilyCreate.NewModelCurve (dòng, skplane);
16.
17.
18. // bây giờ tạo một chiều tuyến tính giữa chúng ReferenceArray
19. ra = new ReferenceArray (); ra.Append
20. (modelcurve1.GeometryCurve.Reference); ra.Append
21. (modelcurve2.GeometryCurve.Reference);
22.
23. pt1 = new XYZ (5, 10, 0); pt2 =
24. new XYZ (10, 10, 0); line =
25. Line.CreateBound (pt1, pt2);
26.
27. Dimension dim = document.FamilyCreate.NewLinearDimension (document.ActiveView, dòng, ra);
28.
29. // tạo nhãn cho thứ nguyên được gọi là "chiều rộng"
30. FamilyParameter param = document.FamilyManager.AddParameter ("chiều rộng",
31. BuiltInParameterGroup.PG_CONSTRAINTS,
32. ParameterType.Length, false);
33.
34. dim.FamilyLabel = param;
35.
36. trở lại mờ;
37. }
Machine Translated by Google
Lớp FamilyElementVisibility có thể được sử dụng để kiểm soát khả năng hiển thị của các phần tử family trong tài liệu dự án. Ví dụ: nếu bạn có một gia đình cửa,
bạn có thể chỉ muốn cửa xoay được hiển thị trong các khung nhìn sơ đồ trong tài liệu dự án, trong đó cửa được đặt, không phải chế độ xem 3D.
Bằng cách thiết lập khả năng hiển thị trên các đường cong của cửa xoay, bạn có thể kiểm soát tầm nhìn của chúng. FamilyElementVisibility có thể áp dụng cho các
lớp phần tử family sau đây có hàm SetVisibility ():
• GenericForm, là lớp cơ sở cho các lớp biểu mẫu như Quét và đùn
• SymbolicCurve
• ModelText
• CurveByPoints
• ModelCurve
• ImportInstance
Machine Translated by Google
Trong ví dụ bên dưới, tài liệu gia đình kết quả sẽ hiển thị văn bản "Hello World" với một dòng bên dưới nó. Khi họ được tải vào một tài liệu dự án Revit và
một thể hiện được đặt, trong dạng xem mặt bằng, chỉ dòng sẽ được hiển thị. Trong chế độ xem 3D, cả dòng và văn bản sẽ được hiển thị, trừ khi Cấp chi tiết
được đặt thành Khóa học, trong trường hợp đó, dòng sẽ biến mất.
// tạo một ModelCurve mới trong tài liệu họ XYZ p0 = new XYZ (1,
4. 1, 0); XYZ p1 = new XYZ (5, 1, 0); Dòng line1 = Line.CreateBound
5. (p0, p1);
6. 7.
23. }
FamilyManager có thể được sử dụng để lặp qua các kiểu trong một họ, như ví dụ sau minh họa.
if (familyDoc.IsFamilyDocument == true) {
4.
5. FamilyManager familyManager = familyDoc.FamilyManager;
FamilyManager cung cấp khả năng lặp qua các kiểu hiện có trong một họ, đồng thời thêm và sửa đổi các kiểu cũng như tham số của chúng.
Ví dụ sau đây cho thấy cách thêm một kiểu mới, đặt các tham số của nó và sau đó gán kiểu mới cho FamilyInstance. Chỉnh sửa kiểu được thực hiện trên kiểu
hiện tại bằng cách sử dụng hàm Set (). Loại hiện tại có sẵn từ thuộc tính CurrentType. Thuộc tính CurrentType có thể được sử dụng để đặt kiểu hiện tại trước
khi chỉnh sửa hoặc sử dụng hàm NewType () để tạo một kiểu mới và đặt nó thành kiểu hiện tại để chỉnh sửa.
Lưu ý rằng khi kiểu mới được tạo và sửa đổi, Document.LoadFamily () được sử dụng để tải họ trở lại dự án Revit để cung cấp kiểu mới.
// ví dụ hoạt động tốt nhất khi familyInstance là một phần tử bê tông hình chữ nhật if (null ! =
familyInstance.Symbol) {
Thiết kế mẫu
Chương này thảo luận về chức năng thiết kế khái niệm của API Revit để tạo ra các hình học phức tạp trong một tài liệu gia đình. Việc tạo biểu mẫu được hỗ trợ
bởi việc bổ sung các đối tượng mới: các điểm và các đường cong spline đi qua các điểm này. Các bề mặt kết quả có thể được phân chia, tạo khuôn mẫu và tạo
bảng để tạo ra các biểu mẫu có thể xây dựng với các mối quan hệ tham số liên tục.
Machine Translated by Google
Điểm tham chiếu là một phần tử chỉ định một vị trí trong không gian làm việc XYZ của môi trường thiết kế khái niệm. Bạn tạo các điểm tham chiếu để thiết kế
và vẽ các đường thẳng, splines và biểu mẫu. Một ReferencePoint có thể được thêm vào ReferencePointArray, sau đó được sử dụng để tạo CurveByPoints, đến
lượt nó có thể được sử dụng để tạo biểu mẫu.
Ví dụ sau minh họa cách tạo một đối tượng CurveByPoints. Xem ví dụ "Tạo biểu mẫu gác xép" trong phần tiếp theo để biết cách tạo biểu mẫu từ nhiều đối tượng
CurveByPoints.
Các điểm tham chiếu có thể được tạo dựa trên tọa độ XYZ như trong ví dụ trên, hoặc chúng có thể được tạo so với các hình học khác để các điểm sẽ di chuyển
khi hình học được tham chiếu thay đổi. Các điểm này được tạo bằng cách sử dụng các lớp con của lớp PointElementReference. Các lớp con là:
• PointOnEdge
• PointOnEdgeEdgeIntersection
• PointOnEdgeFaceIntersection
• PointOnFace
• PointOnPlane
Ví dụ: hai dòng mã cuối cùng trong ví dụ trước tạo một điểm tham chiếu ở giữa CurveByPoints.
Biểu mẫu có thể được tạo bằng cách sử dụng dòng mô hình hoặc dòng tham chiếu. Các dòng mô hình được biểu mẫu "tiêu thụ" trong quá trình tạo và không còn
tồn tại như các thực thể riêng biệt. Mặt khác, các dòng tham chiếu vẫn tồn tại sau khi biểu mẫu được tạo và có thể thay đổi biểu mẫu nếu chúng được di chuyển.
Mặc dù API không có lớp ReferenceLine, bạn có thể thay đổi dòng mô hình thành dòng tham chiếu bằng phương thức ModelCurve.ChangeToReferenceLine ().
Vùng mã 14-2: Sử dụng các dòng tham chiếu để tạo biểu mẫu
// Tạo một hồ sơ
5. 6. ReferenceArray ref_ar = new ReferenceArray ();
Tương tự như tạo gia đình, môi trường thiết kế khái niệm cung cấp khả năng tạo ra các hình thức mới. Có thể tạo các loại hình thức sau: đùn, xoay, quét,
hỗn hợp quét, loft và dạng bề mặt. Thay vì sử dụng các lớp Blend, Ext Extraction, Revolution, Sweep và SweptBlend được sử dụng trong tạo Family, Mass family
sử dụng lớp Form cho tất cả các loại biểu mẫu.
Một dạng đùn được tạo ra từ một vòng đường cong khép kín là phẳng. Biểu mẫu xoay vòng được tạo từ một cấu hình và một đường trong cùng mặt phẳng với cấu
hình là trục mà hình dạng được xoay quanh để tạo ra một biểu mẫu 3D. Một biểu mẫu quét được tạo từ một biên dạng 2D được quét dọc theo một đường phẳng. Một
hỗn hợp quét được tạo ra từ nhiều cấu hình, mỗi một mặt phẳng, được quét dọc theo một đường cong duy nhất. Một dạng gác xép được tạo ra từ 2 hoặc nhiều biên
dạng nằm trên các mặt phẳng riêng biệt. Một dạng bề mặt duy nhất được tạo ra từ một biên dạng, tương tự như một dạng đùn, nhưng không có chiều cao.
Ví dụ sau tạo một dạng đùn đơn giản. Lưu ý rằng vì các ModelCurves được sử dụng để tạo biểu mẫu không được chuyển đổi thành các dòng tham chiếu,
chúng sẽ được sử dụng bởi biểu mẫu kết quả.
Ví dụ sau đây cho thấy cách tạo biểu mẫu gác xép bằng cách sử dụng một loạt các đối tượng CurveByPoints.
Sau khi được tạo, biểu mẫu có thể được sửa đổi bằng cách thay đổi một phần tử phụ (tức là mặt, cạnh, đường cong hoặc đỉnh) của biểu mẫu hoặc toàn bộ hồ sơ.
Các phương pháp sửa đổi biểu mẫu bao gồm:
• AddEdge
• Thêm hồ sơ
• Xóa hồ sơ
• DeleteSubElement
• MoveProfile
• MoveSubElement
• RotateProfile
• RotateSubElement
• ScaleSubElement
Machine Translated by Google
Ngoài ra, bạn có thể sửa đổi biểu mẫu bằng cách thêm một cạnh hoặc một cấu hình, sau đó có thể sửa đổi biểu mẫu này bằng các phương pháp được liệt kê ở trên.
Ví dụ sau di chuyển đường cong biên dạng đầu tiên của dạng đã cho bằng một độ lệch xác định. Hình tương ứng cho thấy kết quả của việc áp dụng mã này cho
dạng gác xép từ ví dụ trước.
Mẫu tiếp theo trình bày cách di chuyển một đỉnh của một hình thức đã cho. Hình tương ứng chứng minh tác dụng của mã này đối với ví dụ về dạng đùn trước đó
if (form.ProfileCount> 0) {
4.
5. int profileIndex = 0; // lấy hồ sơ đầu tiên ReferenceArray
ra = form.get_CurveLoopRefferencesOnProfile (profileIndex, 0); foreach (Tham chiếu r in ra) {
6. 7.
Các mặt của biểu mẫu có thể được phân chia bằng lưới UV. Bạn có thể truy cập dữ liệu cho một bề mặt đã chia bằng cách sử dụng phương thức Form.GetDividedSurfaceData
() (như được hiển thị trong ví dụ tiếp theo) cũng như tạo bề mặt chia mới trên các biểu mẫu như được hiển thị bên dưới.
Hình 60: Mặt của biểu mẫu được chia theo lưới UV
Truy cập các thuộc tính USpacing và VSpacing của DividedSurface, bạn có thể xác định SpacingRule cho các đường lưới U và V bằng cách chỉ định một số lượng
lưới cố định (như trong ví dụ trên), khoảng cách cố định giữa các lưới hoặc khoảng cách tối thiểu hoặc tối đa giữa các lưới .
Thông tin bổ sung là bắt buộc đối với mỗi quy tắc giãn cách, chẳng hạn như căn chỉnh và xoay lưới.
Một bề mặt được chia có thể được tạo hoa văn. Bất kỳ mẫu gạch xây dựng nào cũng có thể được áp dụng cho bề mặt được chia nhỏ. Một mẫu lát là một ElementType
được gán cho DividedSurface. Mẫu gạch được áp dụng cho bề mặt theo bố cục lưới UV, vì vậy việc thay đổi các thuộc tính USpacing và VSpacing của DividedSurface
sẽ ảnh hưởng đến cách bề mặt có hoa văn xuất hiện.
Ví dụ sau minh họa cách phủ một bề mặt bị chia cắt bằng mẫu OctagonRotate. Hình tương ứng cho thấy điều này trông như thế nào khi áp dụng cho bề mặt được
phân chia trong ví dụ trước. Lưu ý rằng ví dụ này cũng trình bày cách lấy DividedSurface trên một biểu mẫu.
Hình 61: Mẫu gạch được áp dụng cho bề mặt phân chia
Ngoài việc áp dụng các mẫu gạch xây dựng sẵn cho một bề mặt được phân chia, bạn có thể tạo các nhóm bảng điều khiển khối lượng riêng của mình bằng cách sử
dụng mẫu "Curtain Panel Pattern Based.rft". Các họ bảng điều khiển này sau đó có thể được tải vào các họ khối lượng lớn và áp dụng cho các bề mặt đã chia bằng
phương thức DividedSurface.ChangeTypeId ().
Các thuộc tính sau của Family là dành riêng cho các họ tấm rèm:
• IsCurtainPanelFamily
Ví dụ sau đây trình bày cách chỉnh sửa một nhóm bảng điều khiển khối lượng mà sau đó có thể được áp dụng cho một biểu mẫu trong tài liệu khối
lượng khái niệm. Để chạy ví dụ này, trước tiên hãy tạo một tài liệu gia đình mới bằng cách sử dụng mẫu "Curtain Panel Pattern Based.rft".
// lần đầu tiên thay đổi khoảng cách của các lưới trong họ tài liệu
gia đình.CurtainPanelHorizontalSpacing = 20;
6. 7. family.CurtainPanelVerticalSpacing = 30;
55. }
56. khác
57. { 58.
59. } ném ngoại lệ mới ("Vui lòng mở tài liệu họ rèm trước khi gọi lệnh này.");
Machine Translated by Google
Hình 63: Bảng điều khiển rèm được chỉ định cho bề mặt phân chia
Machine Translated by Google
Các thành phần thích ứng được thiết kế để xử lý các trường hợp mà các thành phần cần phải linh hoạt thích ứng với nhiều điều kiện ngữ cảnh độc đáo. Ví dụ, các thành
phần thích ứng có thể được sử dụng trong các hệ thống lặp lại được tạo ra bằng cách sắp xếp nhiều thành phần phù hợp với các ràng buộc do người dùng xác định.
Đoạn mã sau đây cho thấy cách tạo một phiên bản của một họ thành phần thích ứng thành một họ khối lượng lớn và sắp xếp các điểm thích ứng trong trường hợp đó với các
Vùng mã: Tạo một phiên bản của một họ thành phần thích ứng
1. // tìm điểm vị trí đầu tiên sẽ lưu trữ thành phần thích ứng 2. IEnumerable <ReferencePoint>
points0 = from obj trong new FilteredElementCollector (doc) .OfClass (typeof (ReferencePoint)). Cast <ReferencePoint> (
)
let type = obj as ReferencePoint trong đó
3. 4. type.Name == "PlacementPoint0" // các tên này được gán theo cách thủ công cho các điểm select obj; 5.
// tạo một thể hiện của thành phần thích ứng FamilyInstance
familyInstance = AdaptiveComponentInstanceUtils.CreateAdaptiveComponentInstance (doc, symbol);
19.
20. // tìm các điểm thích ứng trong cá thể họ IList <ElementId>
21. pointList = AdaptiveComponentInstanceUtils.GetInstancePointElementRefIds (familyInstance); ReferencePoint point0 = doc.GetElement
22. (pointList.ElementAt (0)) as ReferencePoint; ReferencePoint point1 = doc.GetElement (pointList.ElementAt (1)) as ReferencePoint;
23.
24.
25. // di chuyển các điểm của thành phần thích ứng (point0 & point1) để khớp với vị trí của các vị trí point0.Position = PositionPoint0.Position;
26. point1.Position = vị tríPoint1.Position;
27.
28. }
Chương này giới thiệu Phần tử Datum và Phần tử Thông tin trong Revit.
• Các phần tử thông tin bao gồm các giai đoạn, các tùy chọn thiết kế và EnergyDataSettings.
Để biết thêm thông tin về phân loại Phần tử Revit, hãy tham khảo Cơ bản về Phần tử
Lưu ý Nếu bạn cần thêm thông tin, hãy tham khảo chương liên quan:
• Đối với LoadBase, LoadCase, LoadCombination, LoadNature và LoadUsage, hãy tham khảo Cấu trúc Trọng lượng
Các cấp độ
Cấp là một mặt phẳng ngang hữu hạn hoạt động như một tham chiếu cho các phần tử được lưu trữ ở cấp, chẳng hạn như tường, mái, sàn và trần nhà. Trong API Nền
tảng Revit, lớp Cấp có nguồn gốc từ lớp Phần tử. Thuộc tính Name được kế thừa được sử dụng để truy xuất tên cấp mà người dùng có thể nhìn thấy bên cạnh bong
bóng cấp trong giao diện người dùng Revit. Để truy xuất tất cả các cấp trong một dự án, hãy sử dụng trình lặp ElementIterator để tìm kiếm các đối tượng Cấp.
Độ cao
• Thuộc tính Elevation (LEVEL_ELEV) được sử dụng để truy xuất hoặc thay đổi độ cao trên hoặc dưới mặt đất.
• Thuộc tính ProjectElevation được sử dụng để truy xuất độ cao so với điểm gốc của dự án bất kể Độ cao cơ sở
Giá trị tham số.
Mẫu mã sau đây minh họa cách truy xuất tất cả các cấp trong một dự án bằng cách sử dụng ElementIterator.
if (null! = level)
{
// theo dõi số lượng cấp độ
levelNumber ++;
Tạo cấp độ
Sử dụng lệnh Level, bạn có thể xác định chiều cao hoặc tầng thẳng đứng trong một tòa nhà và bạn có thể tạo một tầng cho từng tầng hiện có hoặc các tham
chiếu tòa nhà khác. Các mức phải được thêm vào trong một mặt cắt hoặc chế độ xem độ cao. Ngoài ra, bạn có thể tạo một cấp độ mới bằng cách sử dụng API Nền
tảng Revit.
Mẫu mã sau đây minh họa cách tạo một cấp độ mới.
Lưu ý Sau khi tạo một cấp độ mới, Revit không tạo chế độ xem kế hoạch liên quan cho cấp độ này. Nếu cần, bạn có thể tự tạo. Để biết thêm thông tin về cách tạo chế độ
Lưới
Các lưới được đại diện bởi lớp Grid có nguồn gốc từ lớp Phần tử. Nó chứa tất cả các thuộc tính và phương thức lưới. Thuộc tính Name kế thừa được sử dụng để
truy xuất nội dung của bong bóng đường lưới.
Đường cong
Thuộc tính Grid class Curve lấy đối tượng đại diện cho hình dạng đường lưới.
• Nếu thuộc tính IsCurved trả về true, thuộc tính Curve sẽ là một đối tượng thuộc lớp Arc.
• Nếu thuộc tính IsCurved trả về false, thuộc tính Curve sẽ là một đối tượng lớp Line.
Đoạn mã sau đây là một ví dụ đơn giản sử dụng lớp Grid. Kết quả xuất hiện trong một hộp thông báo sau khi gọi lệnh.
Tạo lưới
Hai phương pháp Tài liệu được nạp chồng có sẵn để tạo lưới mới trong API Nền tảng Revit. Sử dụng phương pháp sau với các tham số khác nhau, bạn có thể tạo lưới
cong hoặc thẳng:
Lưu ý Cung hoặc đường được sử dụng để tạo lưới phải nằm trong một mặt phẳng nằm ngang.
Machine Translated by Google
Mẫu mã sau đây minh họa cách tạo một lưới mới với một đường thẳng hoặc một cung tròn.
Vùng mã 15-5: Tạo lưới với một đường thẳng hoặc một cung tròn
// Tạo đường hình học mà lưới định vị XYZ start = new XYZ (0,
4. 0, 0); XYZ end = new XYZ (30, 30, 0); Line geomLine =
5. Line.CreateBound (bắt đầu, kết thúc);
6.
7.
số 8.
// Tạo lưới bằng đường hình học Grid lineGrid =
9. document.Create.NewGrid (geomLine);
10.
11. if (null == lineGrid) {
12.
13. ném ngoại lệ mới ("Tạo một lưới thẳng mới không thành công.");
14. }
15.
16. // Sửa đổi tên của lưới đã tạo lineGrid.Name =
17. "New Name1";
18.
19. // Tạo cung hình học mà lưới định vị XYZ end0 = new XYZ (0, 0,
20. 0); XYZ end1 = new XYZ (10, 40, 0); XYZ pointOnCurve = new XYZ
21. (5, 7, 0); Arc geomArc = Arc.Create (end0, end1, pointOnCurve);
22.
23.
24.
25.
26. // Tạo lưới bằng cung hình học Grid arcGrid =
27. document.Create.NewGrid (geomArc);
28.
29. if (null == arcGrid) {
30.
31. ném ngoại lệ mới ("Tạo lưới cong mới không thành công.");
32. }
33.
34. // Sửa đổi tên của lưới đã tạo arcGrid.Name =
35. "New Name2";
36. }
Lưu ý Trong Revit , các lưới được đặt tên tự động theo dãy số hoặc bảng chữ cái khi chúng được tạo.
Bạn cũng có thể tạo nhiều lưới cùng một lúc bằng phương thức Document.NewGrids (), phương thức này nhận tham số CurveArray.
Giai đoạn
Một số dự án kiến trúc, chẳng hạn như cải tạo, tiến hành theo từng giai đoạn. Các giai đoạn có các đặc điểm sau:
• Các giai đoạn đại diện cho các khoảng thời gian riêng biệt trong vòng đời của dự án.
• Tuổi thọ của một phần tử trong một tòa nhà được kiểm soát bởi các giai đoạn.
• Mỗi phần tử có một giai đoạn xây dựng nhưng chỉ những phần tử có thời gian tồn tại hữu hạn mới có một giai đoạn phá hủy.
Tất cả các giai đoạn trong một dự án có thể được truy xuất từ đối tượng Document. Đối tượng Phase chứa ba phần thông tin hữu ích: Tên, ID và UniqueId. Các thuộc tính còn lại luôn trả về
null hoặc một tập hợp rỗng.
Mỗi thành phần mô hình mới được thêm vào dự án có ID giai đoạn đã tạo và thuộc tính ID giai đoạn bị phá hủy. Phương thức Element.AllowPhases () cho biết liệu các thuộc tính ID pha của nó có
thể được sửa đổi hay không.
• Giá trị mặc định là ID giống với giá trị Pha của chế độ xem hiện tại.
• Thay đổi thông số ID pha đã tạo bằng cách chọn một giá trị mới tương ứng với danh sách thả xuống.
Thuộc tính ID giai đoạn bị phá hủy có các đặc điểm sau:
• Nó xác định thành phần bị phá hủy trong giai đoạn nào.
• Phá dỡ một thành phần bằng công cụ phá hủy cập nhật thuộc tính thành giá trị ID giai đoạn hiện tại trong chế độ xem nơi bạn
phá hủy phần tử.
• Bạn có thể phá hủy một thành phần bằng cách đặt thuộc tính ID Giai đoạn Bị Phá hủy thành một giá trị khác.
Machine Translated by Google
• Nếu bạn xóa một giai đoạn bằng cách sử dụng API Nền tảng Revit, tất cả các thành phần mô hình hóa trong giai đoạn hiện tại vẫn tồn tại. Giá trị tham
số ID giai đoạn đã tạo cho các thành phần này được thay đổi thành mục tiếp theo trong danh sách thả xuống trong hộp thoại Thuộc tính.
Mẫu mã sau đây hiển thị tất cả các giai đoạn được hỗ trợ trong tài liệu hiện tại. Tên giai đoạn được hiển thị trong một hộp thông báo.
Vùng mã 15-6: Hiển thị tất cả các giai đoạn được hỗ trợ
prompt = "Tất cả các giai đoạn trong danh sách tài liệu hiện tại như sau:";
9. 10. foreach (Giai đoạn II trong các giai đoạn) {
11.
12. nhắc + = "\ n \ t" + ii.Tên;
13. }
14.
15. }
16. khác {
17. prompt = "Không có giai đoạn nào trong tài liệu hiện tại.";
18. }
19. // Cung cấp thông tin cho người dùng.
20. TaskDialog.Show ("Revit", dấu nhắc);
21. }
Các tùy chọn thiết kế cung cấp một cách để khám phá các thiết kế thay thế trong một dự án. Các lựa chọn thiết kế cung cấp sự linh hoạt để thích ứng với những thay
đổi trong phạm vi dự án hoặc phát triển các thiết kế thay thế để xem xét. Bạn có thể bắt đầu làm việc với mô hình dự án chính và sau đó phát triển các biến thể trong
quá trình trình bày với khách hàng. Hầu hết các yếu tố có thể được thêm vào một tùy chọn thiết kế. Các yếu tố không thể được thêm vào một tùy chọn thiết kế được
coi là một phần của mô hình chính và không có lựa chọn thay thế thiết kế.
Việc sử dụng chính cho các tùy chọn Thiết kế là một thuộc tính của lớp Phần tử. Xem ví dụ sau.
• Giá trị của thuộc tính DesignOption là null nếu phần tử nằm trong Mô hình chính. Nếu không, tên bạn đã tạo trong Revit UI là
trả lại.
• Chỉ một Phần tử DesignOption hoạt động có thể tồn tại trong Tài liệu Hoạt động.
Machine Translated by Google
o Tùy chọn chính được coi là DesignOption hoạt động mặc định. Ví dụ: một bộ tùy chọn thiết kế được đặt tên là Tường và có hai tùy chọn
thiết kế trong bộ này có tên là "tường gạch" và "tường kính". Nếu "tường gạch" là tùy chọn chính, chỉ tùy chọn này và các phần tử
thuộc về nó được truy xuất bởi Trình lặp phần tử. "Tường kính" không hoạt động.
Machine Translated by Google
Chương này giới thiệu các phần tử chú thích Revit, bao gồm các phần sau:
• Kích thước
• DetailCurve
• IndependentTag
• TextNote
• AnnotationSymbol
Lưu ý rằng:
• Thứ nguyên là các yếu tố dành riêng cho chế độ xem hiển thị kích thước và khoảng cách trong một dự án.
• Các đường cong chi tiết được tạo ra cho các bản vẽ chi tiết. Chúng chỉ hiển thị trong chế độ xem mà chúng được vẽ. Thường thì chúng được vẽ qua
chế độ xem mô hình.
• Thẻ là một chú thích được sử dụng để xác định các phần tử trong một bản vẽ. Các thuộc tính được liên kết với thẻ có thể xuất hiện trong lịch trình.
• AnnotationSymbol có nhiều tùy chọn leader khi được tải vào một dự án.
Để biết thêm thông tin về phân loại Revit Element, hãy tham khảo Elements Essentials.
Lớp Thứ nguyên đại diện cho các kích thước vĩnh viễn và các yếu tố ràng buộc liên quan đến thứ nguyên. Các thứ nguyên tạm thời được tạo trong khi chỉnh sửa một phần
tử trong giao diện người dùng không thể truy cập được. Độ cao điểm và tọa độ điểm được đại diện bởi lớp SpotDimension.
Mẫu mã sau đây minh họa, ở gần cuối, cách phân biệt các kích thước vĩnh viễn với các phần tử ràng buộc.
Vùng mã 16-1: Phân biệt các kích thước vĩnh viễn với các ràng buộc
Kích thước
Danh mục được xây dựng cho tất cả các thứ nguyên cố định là OST_Dimensions. Không có cách nào dễ dàng để phân biệt bốn thứ nguyên bằng cách sử dụng API.
Ngoại trừ kích thước xuyên tâm và kích thước đường kính, mọi kích thước đều có một đường kích thước. Các đường kích thước có sẵn từ thuộc tính Dimension.Curve luôn không
bị ràng buộc. Nói cách khác, đường kích thước không có điểm đầu hoặc điểm cuối. Dựa trên hình trước:
• Một đối tượng Line được trả về cho một kích thước tuyến tính.
• Một đối tượng vòng cung được trả về cho một kích thước hướng tâm hoặc kích thước góc.
Kích thước được tạo bằng cách chọn các tham chiếu hình học như hình trước cho thấy. Tham chiếu hình học được biểu diễn dưới dạng lớp Tham chiếu trong API. Các
tham chiếu thứ nguyên sau đây có sẵn từ thuộc tính Tham chiếu. Để biết thêm thông tin về Tài liệu tham khảo, vui lòng xem Tài liệu tham khảo trong Hình học tiết diện.
• Kích thước hướng tâm và đường kính - Một đối tượng tham chiếu cho đường cong được trả về
• Kích thước chiều dài góc và cung - Hai đối tượng Tham chiếu được trả về.
• Kích thước tuyến tính - Hai hoặc nhiều Đối tượng tham chiếu được trả về. Trong hình sau, kích thước tuyến tính có năm Tham chiếu
các đối tượng.
Machine Translated by Google
Thứ nguyên, giống như các Phần tử chú thích khác, dành cho chế độ xem cụ thể. Chúng chỉ hiển thị trong dạng xem nơi chúng được thêm vào. Thuộc tính Dimension.View trả về chế độ xem cụ
thể.
Đối tượng thứ nguyên có Ràng buộc danh mục (BuitInCategory.OST_Constraints) đại diện cho hai loại ràng buộc liên quan đến thứ nguyên:
Trong hình sau đây, hai loại ràng buộc bị khóa tương ứng với kích thước tuyến tính và hướng tâm. Trong ứng dụng, chúng xuất hiện dưới dạng khóa móc với các đường đứt nét màu
xanh lá cây. (Đường đứt nét màu xanh lá cây có sẵn từ thuộc tính Dimension.Curve.) Cả hai ràng buộc về kích thước tuyến tính và xuyên tâm đều trả về hai đối tượng Tham chiếu từ thuộc tính
Dimension.Refferences.
Hình 69: Các ràng buộc về kích thước tuyến tính và bán kính
Các phần tử ràng buộc không dành riêng cho chế độ xem và có thể hiển thị trong các chế độ xem khác nhau. Do đó, thuộc tính View luôn trả về null. Trong hình sau, các phần tử ràng
buộc trong hình trước cũng hiển thị trong chế độ xem 3D.
Hình 70: Các ràng buộc về kích thước tuyến tính và xuyên tâm trong chế độ xem 3D
Mặc dù các ràng buộc bình đẳng dựa trên các thứ nguyên, nhưng chúng cũng được đại diện bởi lớp Thứ nguyên. Không có cách trực tiếp nào để phân biệt các ràng buộc về thứ nguyên
tuyến tính với các ràng buộc bình đẳng trong API bằng cách sử dụng một danh mục hoặc DimensionType. Các ràng buộc bằng nhau trả về ba hoặc nhiều Tham chiếu trong khi các ràng buộc về thứ
nguyên tuyến tính trả về hai hoặc nhiều Tham chiếu.
Machine Translated by Google
Lưu ý Không phải tất cả các phần tử ràng buộc đều được đại diện bởi lớp Thứ nguyên nhưng tất cả đều thuộc về một danh mục Ràng buộc (OST_Constraints) chẳng hạn
như ràng buộc căn chỉnh.
Tọa độ điểm và độ cao điểm được đại diện bởi lớp SpotDimension và được phân biệt theo danh mục. Giống như thứ nguyên cố định, thứ nguyên tại chỗ dành
riêng cho chế độ xem. Loại và danh mục cho từng thứ nguyên vị trí được liệt kê trong bảng sau:
Vị trí SpotDimension có thể được truyền xuống LocationPoint để tọa độ điểm mà thứ nguyên điểm trỏ tới có sẵn từ thuộc tính LocationPoint.Point.
• SpotDimensions không có đường cong thứ nguyên nên thuộc tính Curve của chúng luôn trả về null.
• Thuộc tính SpotDimension References trả về một Tham chiếu đại diện cho điểm hoặc cạnh được tham chiếu bởi kích thước điểm.
• Để kiểm soát kiểu hiển thị văn bản và thẻ, hãy sửa đổi Tham số SpotDimension và SpotDimensionType.
Machine Translated by Google
So sánh
Bảng sau so sánh các loại thứ nguyên và ràng buộc khác nhau trong API:
Thứ nguyên hoặc Ràng buộc Lớp API BuiltInCategory Đường cong Chế độ xem tham khảo Địa điểm
Thứ nguyên tuyến tính Thứ nguyên vĩnh viễn Thứ nguyên OST_Dimensions A Line> = 2 Chế độ xem cụ thể null
Giới hạn thứ nguyên giới hạn kích thước tuyến tính OST_Constraints An Arc 2
Tạo và xóa
Phương thức NewDimension () có sẵn trong lớp Creation.Document. Phương pháp này chỉ có thể tạo một thứ nguyên tuyến tính.
1. public Dimension NewDimension (View view, Line line, ReferenceArray tham chiếu, 2. DimensionTypensionType)
Sử dụng các tham số đầu vào của phương thức NewDimension (), bạn có thể xác định Chế độ xem hiển thị, đường kích thước và Tham chiếu (hai hoặc nhiều hơn).
Tuy nhiên, không có cách nào dễ dàng để phân biệt một thứ nguyên tuyến tính DimensionType với các loại khác. Phương thức NewDimension () quá tải với tham số DimensionType
hiếm khi được sử dụng.
Đoạn mã sau minh họa cách sử dụng phương thức NewDimension () để sao chép một thứ nguyên.
Mặc dù chỉ có các kích thước tuyến tính được tạo, bạn có thể xóa tất cả các kích thước và ràng buộc được thể hiện bởi Dimension và SpotDimension bằng cách sử dụng
phương thức Document.Delete ().
Machine Translated by Google
Đường cong chi tiết là một thành phần Chi tiết quan trọng thường được sử dụng trong chế độ xem chi tiết hoặc bản phác thảo. Các đường cong chi tiết có thể truy cập được trong lớp
DetailCurve và các lớp dẫn xuất của nó.
DetailCurve dành riêng cho từng chế độ xem cũng như các phần tử chú thích khác. Tuy nhiên, không có thuộc tính DetailCurve.View. Khi tạo đường cong chi tiết, bạn
phải so sánh đường cong chi tiết với chế độ xem đường cong mô hình.
Nói chung, chỉ các chế độ xem 2D như chế độ xem mức và chế độ xem độ cao mới được chấp nhận, nếu không sẽ có một ngoại lệ.
Ngoại trừ các tính năng liên quan đến chế độ xem, DetailCurve rất giống với ModelCurve. Để biết thêm thông tin về các thuộc tính và cách sử dụng ModelCurve, hãy
xem ModelCurve trong Sketching tiết diện.
Thẻ
Thẻ là một chú thích được sử dụng để xác định các phần tử bản vẽ. API cho thấy các lớp IndependentTag và RoomTag bao gồm hầu hết các thẻ được sử dụng trong
ứng dụng Revit. Để biết thêm chi tiết về RoomTag, hãy xem Phòng trong Kiến trúc Revit tiết diện.
Lưu ý Lớp IndependentTag đại diện cho phần tử thẻ trong Revit và các thẻ cụ thể khác như bài phát biểu chính, thẻ hệ thống chùm, biểu tượng mạch điện tử
(Revit MEP), v.v. Trong mã nội bộ Revit, các thẻ cụ thể có các lớp tương ứng bắt nguồn từ IndependentTag. Do đó, các tính năng cụ thể không được API hiển thị và
không thể được tạo bằng phương thức NewTag (). Chúng có thể được phân biệt theo các loại sau:
Trong phần này, trọng tâm chính là loại thẻ được trình bày trong hình sau.
Mọi danh mục trong thư viện gia đình đều có một thẻ được tạo sẵn. Một số thẻ được tải tự động bằng mẫu ứng dụng Revit mặc định, trong khi các thẻ khác được
tải theo cách thủ công. Các đối tượng IndependentTag trả về các danh mục khác nhau dựa trên phần tử máy chủ nếu nó được tạo bằng tùy chọn Theo Danh mục. Ví dụ: Wall
và Floor IndependentTag tương ứng là OST_WallTags và OST_FloorTags.
Nếu thẻ được tạo bằng kiểu Multi-Category hoặc Material, các danh mục của chúng tương ứng là OST_MultiCategoryTags và OST_MaterialTags.
Lưu ý rằng NewTag () chỉ hoạt động trong chế độ xem 2D hoặc trong chế độ xem 3D bị khóa, nếu không sẽ có một ngoại lệ. Đoạn mã sau là một ví dụ về việc tạo
IndependentTag. Chạy nó khi chế độ xem mức là chế độ xem đang hoạt động.
Machine Translated by Google
Lưu ý Bạn không thể thay đổi trực tiếp văn bản được hiển thị trong IndependentTag. Bạn cần thay đổi thông số được sử dụng để điền văn bản thẻ vào Loại gia đình cho Phần tử đang được gắn thẻ.
Trong ví dụ bên dưới, tham số đó là "Type Mark", mặc dù cài đặt này có thể được thay đổi trong Family Editor trong Revit UI.
// đảm bảo chế độ xem đang kích hoạt không phải là chế
độ xem 3D Autodesk.Revit.DB.View view = document.ActiveView;
5. 6. // xác định chế độ thẻ và hướng thẻ cho thẻ mới TagMode tagMode =
TagMode.TM_ADDBY_CATEGORY; TagOrientation tagorn =
7. 8. TagOrientation.Horizontal;
T
Machine Translated by Google
máy lẻ
Trong API, lớp TextNote đại diện cho Văn bản. Các tính năng chung của nó như sau:
Lấy và đặt chuỗi từ thành phần văn bản Thuộc tính TextNote.Text
Nhận và đặt vị trí thành phần văn bản Thuộc tính TextNote.Coord
Nhận và đặt chiều rộng thành phần văn bản Thuộc tính TextNote.Width
Nhận tất cả các nhà lãnh đạo thành phần văn bản Thuộc tính TextNote.Leaders
Thêm một thủ lĩnh vào thành phần văn bản Phương thức TextNote.AddLeader ()
Xóa tất cả các nhà lãnh đạo khỏi thành phần văn bản Phương thức TextNote.RemoveLeaders ()
Revit hỗ trợ hai loại Lãnh đạo: Lãnh đạo thẳng và Lãnh đạo vòng cung. Kiểm soát kiểu thủ lĩnh TextNote bằng kiểu liệt kê TextNoteLeaderType:
TNLT_ARC_R
TNLT_ARC_L
TNLT_STRAIGHT_R
TNLT_STRAIGHT_L
Lưu ý Không thể thêm đường dẫn thẳng và đường dẫn vòng cung vào loại Văn bản cùng một lúc.
Biểu tượng chú thích là một ký hiệu được áp dụng cho một họ để xác định duy nhất họ đó trong một dự án.
Hình 76: Biểu tượng chú thích với hai thủ lĩnh
Machine Translated by Google
Tạo và xóa
Các biểu tượng chú thích có thể được tạo bằng cách sử dụng quá tải sau của phương thức Creation.Document.NewFamilyInstance ():
1. public FamilyInstance NewFamilyInstance Method (nguồn gốc XYZ, biểu tượng FamilySymbol, View specView)
Biểu tượng chú thích có thể bị xóa bằng phương thức Document.Delete ().
Thêm và xóa các nhà lãnh đạo bằng cách sử dụng các phương thức addLeader () và removeLeader ().
8. 9.
"
10. + leaderSize;
11.
12. TaskDialog.Show ("Revit", thông báo);
13. }
Machine Translated by Google
Hình học
Không gian tên Autodesk.Revit.DB chứa nhiều lớp liên quan đến hình học và các loại liên quan đến đồ họa được sử dụng để mô tả biểu diễn đồ họa trong API. Các lớp liên quan
đến hình học bao gồm:
• Lớp GeometryObject - Bao gồm các lớp dẫn xuất từ lớp GeometryObject.
• Các lớp của Trình trợ giúp Hình học - Bao gồm các lớp bắt nguồn từ lớp APIObject và các kiểu giá trị
• Các lớp Tiện ích Hình học - Bao gồm các lớp để tạo hình học không nguyên tố và tìm giao điểm của các chất rắn
• Các lớp thu thập - Bao gồm các lớp dẫn xuất từ giao diện IEnumerable hoặc IEnumerator.
Trong phần này, bạn học cách sử dụng các kiểu đồ họa khác nhau liên quan đến cách lấy dữ liệu hình học từ một phần tử, cách biến đổi một phần tử và hơn thế nữa.
tiêu của hướng dẫn này là cung cấp cho bạn ý tưởng cơ bản về cách truy xuất dữ liệu hình học nhưng không bao gồm tất cả các điều kiện. Để biết thêm thông tin về cách
truy xuất dữ liệu hình học từ Phần tử, hãy tham khảo Ví dụ: Lấy dữ liệu hình học từ một chùm tia.
Để có được thông tin hình học của bức tường, bạn phải tạo một đối tượng Geometry.Options cung cấp các tùy chọn tùy chỉnh chi tiết. Mã như sau:
if (null! = geomOption)
geomOption.ComputeRefutions = true;
// Có thể đặt DetailLevel hoặc View, nhưng không thể đặt cả hai
//geomOption.View = commandData.Application.ActiveUIDocument.Document.ActiveView;
TaskDialog.Show ("Revit", "Tùy chọn hình học được tạo thành công.");
Hình học tường là một khối vững chắc được tạo thành từ các mặt và các cạnh. Hoàn thành các bước sau để lấy các mặt và các cạnh:
1. Lấy một thể hiện Geometry.Element bằng cách sử dụng thuộc tính Wall class Geometry. Phiên bản này chứa tất cả các đối tượng hình học trong
Thuộc tính đối tượng, chẳng hạn như một nét liền, một đường, v.v.
2. Lặp lại thuộc tính Object để có được một thể hiện khối hình học chứa tất cả các mặt và cạnh hình học trong Mặt và Cạnh
đặc tính.
3. Lặp lại thuộc tính Faces để lấy tất cả các mặt hình học.
4. Lặp lại thuộc tính Edges để lấy tất cả các cạnh hình học.
Machine Translated by Google
Mã mẫu sau:
Lớp GeometryObject
Thuộc tính đã lập chỉ mục Element.Geometry [] có thể được sử dụng để kéo hình học của bất kỳ phần tử mô hình nào (phần tử 3D). Điều này áp dụng cho cả các
trường hợp gia đình hệ thống như tường, sàn và mái nhà, cũng như các trường hợp gia đình thuộc nhiều loại, ví dụ như cửa ra vào, cửa sổ, đồ nội thất, hoặc
quần chúng.
Hình học đã trích xuất được trả lại cho bạn dưới dạng Autodesk.Revit.DB.GeometryElement. Bạn có thể lặp qua các thành viên hình học của phần tử đó bằng cách sử
dụng phương thức GetEnumerator ().
Thông thường, các đối tượng được trả về ở cấp cao nhất của hình được trích xuất sẽ là một trong số:
• Rắn - biểu diễn ranh giới được tạo thành từ các mặt và các cạnh
• Điểm - mức dữ liệu điểm có thể nhìn thấy tại một vị trí 3D nhất định
• PolyLine - một loạt các đoạn thẳng được xác định bởi các điểm 3D
• GeometryInstance - một ví dụ của một phần tử hình học được định vị trong phần tử
Machine Translated by Google
Hình này minh họa thứ bậc của các đối tượng được tìm thấy bằng cách trích xuất hình học.
Một đường cong đại diện cho một đường dẫn trong 2 hoặc 3 chiều trong mô hình Revit. Các đường cong có thể đại diện cho toàn bộ phạm vi hình học của một phần tử (ví dụ: CurveElements) hoặc có
thể xuất hiện dưới dạng một phần hình học của một phần tử (ví dụ: đường tâm của tường hoặc ống dẫn). Các đường cong và tập hợp các đường cong được sử dụng làm đầu vào trong nhiều
Có một số thành viên Curve là những công cụ thích hợp để sử dụng trong phân tích hình học. Trong một số trường hợp, các API này làm được nhiều hơn những gì bạn có thể mong đợi bằng cách xem
Giao nhau()
Phương pháp Intersect cho phép bạn so sánh hai đường cong để tìm xem chúng khác nhau như thế nào hoặc chúng giống nhau như thế nào. Nó có thể được sử dụng theo cách bạn có thể mong đợi, để lấy
điểm hoặc (các) điểm mà hai đường cong cắt nhau, nhưng nó cũng có thể được sử dụng để xác định:
Giá trị trả về xác định các kết quả khác nhau này và kết quả đầu ra IntersectionSetResult chứa thông tin về (các) điểm giao nhau.
Dự án()
Phương thức Project chiếu một điểm lên đường cong và trả về thông tin về điểm gần nhất trên đường cong, tham số của nó và khoảng cách từ điểm chiếu.
Tessntic ()
Điều này chia đường cong thành một loạt các đoạn tuyến tính, chính xác trong một dung sai mặc định. Đối với Curve.Tessosystem (), dung sai lớn hơn một chút so với 1/16 ”. Dung sai xấp xỉ này là
dung sai được Revit sử dụng bên trong sao cho phù hợp cho mục đích hiển thị.
Lưu ý rằng chỉ các dòng có thể được tách thành đầu ra của chỉ hai điểm tessellation; các đường cong phi tuyến tính sẽ luôn xuất ra nhiều hơn hai điểm ngay cả khi đường cong có bán kính cực lớn
mà về mặt toán học có thể tương đương với một đường thẳng.
Machine Translated by Google
API Revit sử dụng các loại tập hợp đường cong khác nhau làm đầu vào:
• CurveLoop - điều này đại diện cho một chuỗi các đường cong cụ thể được nối từ đầu đến cuối. Nó có thể đại diện cho một vòng kín hoặc một vòng mở. Tạo nó bằng cách sử dụng:
o CurveLoop.Create ()
o CurveLoop.CreateViaCopy ()
o CurveLoop.CreateViaThicken ()
• CurveArray - lớp tập hợp này đại diện cho một tập hợp các đường cong tùy ý. Tạo nó bằng cách sử dụng hàm tạo của nó.
• CurveArrArray - lớp tập hợp này là một tập hợp các CurveArrays. Khi điều này được sử dụng, tổ chức của các phần tử con của mảng này có ý nghĩa
đối với phương thức này được chuyển đến; ví dụ, trong NewExtrusion () nhiều CurveArrays sẽ đại diện cho các vòng đóng khác nhau.
Các phương thức API mới hơn sử dụng bộ sưu tập .NET của Curves thay cho CurveArray và CurveArrArray.
Các đường cong thường cần thiết làm đầu vào cho các phương pháp Revit API. Các đường cong có thể được tạo các phương thức tĩnh trên các lớp liên kết:
• Line.CreateBound ()
• Line.CreateUnbound ()
• Arc.Create ()
• Ellipse.Create ()
• NurbSpline.Create ()
• HermiteSpline.Create ()
• Curve.CreateTransformed ()
Các phương pháp tạo đường cong ngăn cản việc tạo ra các đường cong ngắn hơn dung sai của Revit. Dung sai này được hiển thị thông qua thuộc tính
Application.ShortCurveTolerance.
Các đường cong trong Revit API có thể được mô tả dưới dạng các hàm toán học của tham số đầu vào “u”, trong đó vị trí của đường cong tại bất kỳ điểm nào đã cho trong không gian XYZ là
Các đường cong có thể bị ràng buộc hoặc không bị ràng buộc. Các đường cong không liên kết không có điểm cuối, đại diện cho một phần trừu tượng vô hạn (một đường không liên kết) hoặc một đường cong tuần hoàn (một hình tròn hoặc
hình elip).
Trong Revit, tham số “u” có thể được biểu diễn theo hai cách:
• Một tham số 'chuẩn hóa'. Giá trị bắt đầu của tham số là 0,0 và giá trị kết thúc là 1,0. Đối với một số loại đường cong, điều này làm cho việc đánh giá đường cong dọc theo các phạm vi
của nó rất dễ dàng, ví dụ: điểm giữa của một đoạn thẳng ở tham số 0,5. (Lưu ý rằng đối với các phương trình đường cong phức tạp hơn như Splines, giả thiết này không phải lúc nào
• Một tham số 'thô'. Giá trị bắt đầu và giá trị kết thúc của tham số có thể là bất kỳ giá trị nào. Đối với một đường cong nhất định, giá trị của giá trị thô tối thiểu và tối đa
tham số có thể được lấy thông qua Curve.GetEndParameter (int). Các tham số thô rất hữu ích vì đơn vị của chúng giống với đơn vị mặc định của Revit (feet). Vì vậy, để có được vị trí
5 feet dọc theo đường cong từ điểm bắt đầu, bạn có thể lấy tham số thô ở đầu và thêm 5 vào đó. Các thông số thô cũng là cách duy nhất để đánh giá các đường cong không liên kết.
Các phương thức Curve.ComputeNormalizedParameter () và Curve.ComputeRawParameter () tự động chia tỷ lệ giữa hai loại tham số. Phương thức Curve.IsInside () đánh giá một tham số thô để xem nó
Bạn có thể sử dụng tham số để đánh giá nhiều thuộc tính khác nhau của đường cong tại bất kỳ vị trí nhất định nào:
• Vị trí XYZ của đường cong đã cho. Điều này được trả về từ Curve.Evaluate (). Có thể cung cấp thông số thô hoặc thông số chuẩn hóa. Nếu bạn cũng vậy
gọi ComputeDeri Phái sinh (), đây cũng là thuộc tính .Origin của Transform được phương thức đó trả về.
• Vectơ đạo hàm / tiếp tuyến đầu tiên của đường cong đã cho. Đây là thuộc tính .BasisX của Transform được trả về bởi Curve.ComputeDeriuct ().
• Đạo hàm / vectơ pháp tuyến cấp hai của đường cong đã cho. Đây là thuộc tính .BasisY của Transform được trả về bởi Curve.ComputeDeriuct ().
• Vectơ pháp tuyến của đường cong đã cho, được định nghĩa là tích chéo của vectơ tiếp tuyến và pháp tuyến. Đây là thuộc tính .BasisZ của Transform
Tất cả các vectơ được trả về đều không được chuẩn hóa (nhưng bạn có thể chuẩn hóa bất kỳ vectơ nào trong Revit API với XYZ.Normalize ()). Lưu ý rằng sẽ không có giá trị nào được đặt cho vectơ
pháp tuyến và sinh chuẩn khi đường cong là một đường thẳng. Bạn có thể tính một vectơ pháp tuyến cho đường thẳng trong một mặt phẳng nhất định bằng cách sử dụng tiếp tuyến
vectơ.
Machine Translated by Google
Mẫu API "Tính toán hướng" sử dụng vectơ tiếp tuyến với đường cong vị trí tường để tìm các bức tường bên ngoài quay về phía nam:
Tìm và làm nổi bật các bức tường bên ngoài hướng về phía nam
Machine Translated by Google
Revit sử dụng nhiều loại đường cong khác nhau để biểu diễn hình học đường cong trong tài liệu. Bao gồm các:
Loại đường cong Lớp API Revit Sự định nghĩa Ghi chú
Một đoạn thẳng được xác định bởi các Nhận điểm cuối từ
Đường ranh giới Hàng
điểm cuối của nó. Curve.GetEndpoint ()
hàng.
Các góc này có thể nhận được bằng các giá trị
Hồ quang Hồ quang Một cung tròn giới hạn
tham số thô ở mỗi đầu cung.
Vòng tròn Hồ quang Một vòng kết nối không bị ràng buộc
Sử dụng tham số thô để đánh giá (từ 0 đến 2π)
Một đường xoắn quấn quanh một hình trụ tạo trong cầu thang và lan can, và không được sử dụng
Hình trụ
CyliricalHelix thành một góc không đổi với trục của hình trụ hoặc gặp phải khi truy cập các đường cong của các
xoắn ốc
phần tử Revit khác và
hình học.
Cung hình elip Hình elip Một đoạn hình elip bị ràng buộc
Hình elip Hình elip Hình elip không liên kết để đánh giá (từ 0 đến 2π)
Được sử dụng cho các splines được phác thảo trong nhiều loại
NURBS NurbSpline Một B-spline hợp lý không đồng nhất
Các công cụ Revit, cộng với hình học đã nhập
Các biểu diễn toán học của tất cả các loại đường cong Revit có thể được tìm thấy tại đây.
Phần này mô tả các dạng đường cong gặp phải trong hình học Revit, các thuộc tính của chúng và các biểu diễn toán học của chúng.
Các đường giới hạn được xác định bởi các điểm cuối của chúng. Trong Revit API, lấy các điểm cuối của dòng từ phương thức GetEndPoint () cấp đường cong.
Phương trình cho một điểm trên đường giới hạn theo tham số chuẩn hóa “u” và điểm cuối của đường là
Các dòng không bị ràng buộc được xử lý đặc biệt trong API Revit. Hầu hết các thuộc tính của đường cong không thể được sử dụng, tuy nhiên, có thể dùng Đánh giá () và ComputeDeriuctor () để lấy các vị trí dọc theo
Phương trình cho một điểm đối với một đường thẳng không liên kết theo tham số thô “u” và gốc đường và vectơ hướng chuẩn hóa là
Cung và Vòng tròn được đại diện trong API Revit bởi lớp Arc. Chúng được xác định theo bán kính, tâm và pháp tuyến vectơ của chúng đối với mặt phẳng của cung tròn, có thể truy cập trực tiếp
Các vòng kết nối có thuộc tính IsBound được đặt thành true. Điều này có nghĩa là chúng chỉ có thể được đánh giá bằng cách sử dụng một tham số thô (phạm vi từ 0 đến 2π) và phương trình cho
trong đó giả thiết được đưa ra là đường tròn nằm trong mặt phẳng XY.
Cung bắt đầu và kết thúc ở một góc nhất định. Các góc này có thể nhận được bằng các giá trị tham số thô ở mỗi đầu cung và các giá trị góc giữa các giá trị này có thể được cắm vào cùng một
Các đường xoắn hình trụ được thể hiện trong API Revit bởi lớp CyliricalHelix. Chúng được xác định theo điểm cơ sở của trục của hình trụ mà xung quanh xoắn được quấn, bán kính, vectơ x và y,
Các đoạn hình elip và cung elip được biểu diễn trong API Revit bởi lớp Ellipse. Tương tự như cung và đường tròn, chúng được xác định trong một mặt phẳng cho trước theo bán kính X và Y, tâm và
pháp tuyến vectơ của chúng đối với mặt phẳng của hình elip.
Hình elip đầy đủ có thuộc tính IsBound được đặt thành true. Tương tự như các vòng tròn, chúng có thể được đánh giá thông qua tham số thô từ 0 đến 2π:
NurbSpline
NURBS (B-splines hợp lý không đồng nhất) được sử dụng cho các đoạn spline do người dùng phác thảo dưới dạng các đường cong hoặc các phần của bản phác thảo đối tượng 3D. Chúng cũng được
sử dụng để đại diện cho một số loại dữ liệu hình học được nhập.
• Độ của đường cong, có giá trị nhỏ hơn một bậc so với bậc của đường cong (k)
NurbSplines như được sử dụng trong các công cụ phác thảo của Revit có thể được tạo ra từ các điểm kiểm soát và mức độ một mình bằng cách sử dụng một thuật toán. Các tính toán được thực hiện
bởi thuật toán Revit có thể được sao chép ra bên ngoài, hãy xem mẫu này bên dưới:
11. // Chuẩn bị - lấy khoảng cách giữa mỗi điểm điều khiển 12. IList <XYZ>
controlPoints = spline.CtrlPoints; 13. int numControlPoints =
controlPoints.Count; 14. double [] chordLengths = new double [numControlPoints
- 1]; 15. for (int iControlPoint = 1; iControlPoint <numControlPoints; ++
iControlPoint) 16. {
36. // Các nút bên trong dựa trên độ dài của hợp âm 37.
double prevKnot = knot; 38.
HermiteSpline
Các đường cong Hermite được sử dụng cho các đường cong được nội suy giữa một tập hợp các điểm điều khiển, như Đường cong theo Điểm và các ống dẫn và đường ống linh
hoạt trong MEP. Chúng cũng được sử dụng để đại diện cho một số loại dữ liệu hình học được nhập. Trong Revit API, lớp HermiteSpline cung cấp quyền truy cập vào mảng điểm,
vectơ tiếp tuyến và tham số thông qua các thuộc tính ControlPoints, Tangents và Parameters.
Phương trình cho đường cong giữa hai nút trong một spline Hermite là
trong đó Pk và Pk + 1 đại diện cho các điểm tại mỗi nút, Mk và Mk + 1 là các vectơ tiếp tuyến, và uk và uk + 1 là các tham số tại các nút và các hàm cơ bản là:
GeometryInstances
GeometryInstance đại diện cho một tập hợp các hình học được Revit lưu trữ trong cấu hình mặc định, và sau đó được chuyển đổi thành vị trí thích hợp do thuộc tính của
phần tử. Tình huống phổ biến nhất mà GeometryInstances gặp phải là trong các trường hợp Gia đình. Revit sử dụng GeometryInstances để cho phép nó lưu trữ một bản sao duy
nhất của hình học cho một họ nhất định và sử dụng lại nó trong nhiều trường hợp.
Lưu ý rằng không phải tất cả các phiên bản Family sẽ bao gồm GeometryInstances. Khi Revit cần tạo một bản sao duy nhất của họ hình học cho một đối tượng nhất định
(do ảnh hưởng của các phép nối cục bộ, giao điểm và các yếu tố khác liên quan đến vị trí đối tượng) sẽ không gặp phải GeometryInstance; thay vào đó, hình học Solid sẽ
được tìm thấy ở cấp cao nhất của hệ thống phân cấp.
GeometryInstance cung cấp khả năng đọc hình học của nó thông qua các phương thức GetSymbolGeometry () và GetInstanceGeometry (). Các phương thức này trả về một
Autodesk.Revit.DB.GeometryElement khác có thể được phân tích cú pháp giống như trả về cấp đầu tiên.
GetSymbolGeometry () trả về hình học được biểu diễn trong hệ tọa độ của họ. Ví dụ: sử dụng điều này khi bạn muốn có hình ảnh của bảng "chung chung" mà không liên
quan đến hướng và vị trí sắp xếp trong dự án. Đây cũng là quá tải duy nhất trả về các đối tượng hình học Revit thực tế cho bạn chứ không phải các bản sao. Điều này
rất quan trọng bởi vì các phép toán sử dụng hình học này làm đầu vào để tạo các phần tử khác (ví dụ: xác định kích thước hoặc vị trí của các họ dựa trên khuôn mặt)
GetInstanceGeometry () trả về hình học được biểu diễn trong hệ tọa độ của dự án nơi đặt thể hiện. Ví dụ: sử dụng điều này khi bạn muốn có một bức tranh về hình học
cụ thể của đối tượng trong dự án (ví dụ: đảm bảo rằng các bảng được đặt song song với các bức tường của căn phòng). Điều này luôn trả về một bản sao của hình học
phần tử, vì vậy mặc dù nó sẽ phù hợp để triển khai một nhà xuất khẩu hoặc một công cụ phân tích hình học, nhưng sẽ không thích hợp để sử dụng nó để tạo ra các phần
Ngoài ra còn có các quá tải cho cả GetInstanceGeometry () và GetSymbolGeometry () biến đổi hình học theo bất kỳ hệ tọa độ tùy ý nào. Các phương thức này luôn trả về
GeometryInstance cũng lưu trữ một phép chuyển đổi từ không gian tọa độ biểu tượng sang tọa độ cá thể. Biến đổi này có thể truy cập được dưới dạng thuộc tính
Chuyển đổi. Nó cũng là phép biến đổi được sử dụng khi trích xuất bản sao của hình học thông qua GetInstanceGeometry (). Để biết thêm chi tiết, hãy tham khảo
Geometry.Transform.
2 cá thể họ được đặt với các phép biến đổi khác nhau - hình dạng giống nhau sẽ nhận được từ cả hai
Các phiên bản có thể được lồng vào một số cấp độ sâu đối với một số gia đình. Nếu bạn gặp các trường hợp lồng nhau, chúng có thể được phân tích cú pháp theo cách tương tự như mức đầu tiên
ví dụ.
Hai mẫu được trình bày để giải thích cách phân tích hình học của các cá thể.
Trong mẫu này, các đường cong được trích xuất từ phương pháp GeometryInstance GetInstanceGeometry ().
Trong mẫu này, chất rắn thu được từ một thể hiện bằng cách sử dụng GetSymbolGeometry (). Các điểm cấu thành sau đó được chuyển thành hệ tọa độ dự án bằng
GeometryInstance.Transform.
Vùng mã: Nhận thông tin chắc chắn từ một phiên bản
xem bản sao đơn giản vào khay nhớ tạm?
1. private void GetAndTransformSolidInfo (Ứng dụng ứng dụng, Phần tử phần tử, Tùy chọn geoOptions) 2. { 3.
8. 9. // Lấy cá thể hình học chứa thông tin hình học Autodesk.Revit.DB.GeometryInstance
10. instance = geoObject as Autodesk.Revit.DB.GeometryInstance; if (null ! = instance) {
11.
12.
13.
14. GeometryElement instanceGeometryElement = instance.GetSymbolGeometry (); foreach
15. (GeometryObject instObj trong instanceGeometryElement) {
16.
17. Solid solid = instObj as Solid; if (null
18. == solid || 0 == solid.Faces.Size || 0 == solid.Edges.Size) {
19.
20. tiếp tục;
21. }
22.
23. Biến đổi instTransform = instance.Transform; // Lấy các
24. mặt và các cạnh từ solid, và biến đổi các điểm đã hình thành foreach (Mặt face trong
25. solid.Faces) {
26.
27. Mesh mesh = face.Triangulate (); foreach
28. (XYZ ii trong mesh.Vertices) {
29.
30. Điểm XYZ = ii; XYZ
31. gonePoint = instTransform.OfPoint (point);
32. }
33.
34. } foreach (Cạnh viền trong solid.Edges) {
35.
36. foreach (XYZ ii in edge.Tessilities ()) {
37.
38. Điểm XYZ = ii; XYZ
39. gonePoint = instTransform.OfPoint (point);
40. }
41. }
42. }
43. }
44. }
45. }
Ghi chú
Để biết thêm chi tiết về hình học được truy xuất của các cá thể họ, hãy tham khảo Ví dụ: Lấy dữ liệu hình học từ một chùm.
Machine Translated by Google
Mắt lưới
Lưới là một tập hợp các ranh giới hình tam giác gọi chung là hình dạng 3D. Các lưới thường gặp bên trong hình học phần tử Revit nếu các phần tử đó được tạo ra
từ các hoạt động nhập nhất định và cũng được sử dụng trong một số phần tử Revit gốc như TopographySurface. Bạn cũng có thể nhận được các Meshes là kết quả của
các cuộc gọi tới Face.Triangulate () cho bất kỳ mặt Revit nào đã cho.
Mẫu mã sau đây minh họa cách lấy hình dạng của một mặt Revit dưới dạng Mesh:
// Lấy lưới
5. 6.
Lưu ý rằng dung sai xấp xỉ được sử dụng cho mục đích hiển thị Revit được sử dụng bởi quá tải không tham số của phương thức Triangulate () (được sử dụng ở
trên) khi xây dựng Mesh. Quá tải của Triangulate () chiếm một lần cho phép mức độ chi tiết được đặt trong khoảng từ 0 (thô hơn) đến 1 (mịn hơn).
Điểm
Một điểm đại diện cho một tọa độ nhìn thấy được trong không gian 3D. Chúng thường gặp trong các phần tử họ đại chúng như ReferencePoint. Lớp Point cung cấp quyền
truy cập đọc vào tọa độ của nó và khả năng lấy tham chiếu đến điểm để sử dụng làm đầu vào cho các hàm khác.
PolyLines
Đường đa tuyến là một tập hợp các đoạn thẳng được xác định bởi một tập hợp các điểm tọa độ. Chúng thường gặp trong hình đã nhập. Lớp PolyLine cung cấp khả
• PolyLine.GetCoosystem () - nhận một bộ sưu tập tất cả các tọa độ trong polyline
• PolyLine.Evaluate () - cho một tham số chuẩn hóa (từ 0 đến 1) đánh giá một điểm XYZ dọc theo phạm vi của toàn bộ polyline
Machine Translated by Google
Solid là một đối tượng Revit API đại diện cho một tập hợp các mặt và các cạnh. Thông thường trong Revit, các bộ sưu tập này là các tập hoàn toàn kèm theo, nhưng cũng có thể gặp một tập
bao hoặc một phần bị giới hạn. Lưu ý rằng đôi khi hình học Revit sẽ chứa các chất rắn không sử dụng có chứa các cạnh và mặt bằng không. Kiểm tra các thành viên Cạnh và Mặt để lọc ra những chất
rắn này.
API Revit cung cấp khả năng đọc các tập hợp các mặt và các cạnh, cũng như tính toán diện tích bề mặt, thể tích và tâm của vật rắn.
• Khuôn mặt
Các cạnh là các đường cong ranh giới của một mặt nhất định.
Lặp lại các cạnh của Mặt bằng thuộc tính EdgeLoops. Mỗi vòng lặp đại diện cho một ranh giới khép kín trên mặt. Các cạnh luôn được tham số hóa từ 0 đến 1. Có thể trích xuất biểu diễn Đường cong
Một cạnh thường được xác định bằng cách tính toán giao điểm của hai mặt. Nhưng Revit không tính toán lại giao điểm này khi nó vẽ đồ họa. Vì vậy, cạnh lưu trữ một danh sách các điểm - điểm
kết thúc cho một cạnh thẳng và một danh sách được đánh dấu cho một cạnh cong. Các điểm là tọa độ tham số trên hai mặt. Những điểm này có sẵn thông qua phương thức TessnticOnFace ().
Các phần tạo ra "các cạnh cắt". Đây là các cạnh nhân tạo - không đại diện cho một phần của hình học cấp mô hình và do đó không cung cấp Tham chiếu.
Hướng cạnh
Hướng thường là theo chiều kim đồng hồ trên mặt đầu tiên (đầu tiên đại diện cho một mặt tùy ý mà Revit đã xác định cho một cạnh cụ thể). Nhưng vì hai mặt khác nhau gặp nhau tại một cạnh cụ
thể và cạnh đó có cùng hướng tham số bất kể bạn quan tâm đến mặt nào, nên đôi khi bạn cần phải tìm ra hướng của cạnh trên một mặt cụ thể.
Hình dưới đây minh họa cách thức hoạt động của nó. Đối với Mặt 0, tất cả các cạnh đều được tham số hóa theo chiều kim đồng hồ. Đối với Mặt 1, cạnh được chia sẻ với Mặt 0 không
được tham số hóa lại; do đó đối với Mặt 1, cạnh có hướng đảo ngược và một số cạnh giao nhau trong đó các thông số của cả hai cạnh là 0 (hoặc 1).
Machine Translated by Google
Mẫu API “PanelEdgeLengthAngle” cho biết cách nhận ra các cạnh được đảo ngược cho một mặt nhất định. Nó sử dụng vectơ tiếp tuyến tại các điểm cuối của cạnh để
tính toán góc giữa các cạnh liền kề và phát hiện xem có lật vectơ tiếp tuyến tại mỗi giao điểm hay không để tính toán góc thích hợp.
Khuôn mặt
Các khuôn mặt trong Revit API có thể được mô tả dưới dạng các hàm toán học của hai tham số đầu vào “u” và “v”, trong đó vị trí của khuôn mặt tại bất kỳ điểm nào trong
không gian XYZ là một hàm của các tham số. Hướng U và V được xác định tự động dựa trên hình dạng của khuôn mặt đã cho. Các đường của U hoặc V không đổi có thể được
biểu diễn dưới dạng đường lưới trên mặt, như thể hiện trong ví dụ dưới đây:
Bạn có thể sử dụng các thông số UV để đánh giá nhiều đặc tính của khuôn mặt tại bất kỳ vị trí nào:
• Tham số có nằm trong ranh giới của khuôn mặt hay không, sử dụng Face.IsInside ()
• Vị trí XYZ của khuôn mặt đã cho ở giá trị tham số UV được chỉ định. Điều này được trả về từ Face.Evaluate (). Nếu bạn cũng đang gọi
ComputeDeriuct (), thì đây cũng là thuộc tính .Origin của Transform được phương thức đó trả về.
• Vectơ tiếp tuyến của mặt đã cho theo phương U. Đây là thuộc tính .BasisX của Transform được Face.ComputeDeriuct trả về ()
• Vectơ tiếp tuyến của mặt đã cho theo phương. Đây là thuộc tính .BasisY của Transform được trả về bởi Face.ComputeDeriuct ().
• Vectơ pháp tuyến của mặt đã cho. Đây là thuộc tính .BasisZ của Transform được trả về bởi Face.ComputeDeriuct ().
Có một số thành viên Face là những công cụ thích hợp để sử dụng trong phân tích hình học.
Giao nhau()
Phương thức Intersect tính toán giao điểm giữa mặt và đường cong. Nó có thể được sử dụng để xác định:
• Cạnh gần giao điểm nhất, nếu có một cạnh gần vị trí này
• Các đường cong hoàn toàn trùng khớp với một khuôn mặt
Dự án()
Phương thức Project chiếu một điểm trên mặt đầu vào và trả về thông tin về điểm chiếu, khoảng cách đến mặt và cạnh gần nhất với điểm chiếu.
Tam giác ()
Phương pháp Triangulate thu được một lưới tam giác xấp xỉ với khuôn mặt. Có hai quá tải đối với phương thức này. Phương thức không tham số tương tự như
Curve.Tessaries () ở chỗ các điểm của lưới chính xác trong dung sai đầu vào mà Revit sử dụng (lớn hơn một chút so với 1/16 ”). Phương thức Triangulate thứ hai chấp nhận
một mức độ chi tiết là một đối số nằm trong khoảng từ 0 (thô) đến 1 (tinh).
Một khuôn mặt có thể được chia thành các vùng bằng lệnh Split Face. Thuộc tính Face.HasRegions sẽ báo cáo nếu khuôn mặt chứa các vùng được tạo bằng lệnh Split Face,
trong khi phương thức Face.GetRegions () sẽ trả về danh sách các khuôn mặt, một cho khuôn mặt chính của đối tượng lưu trữ Mặt phân chia (chẳng hạn như bức tường của
Lớp FaceSplitter đại diện cho một phần tử chia một khuôn mặt. Thuộc tính FaceSplitter.SplitElementId cung cấp id của phần tử có khuôn mặt được chia bởi phần tử này. Lớp
FaceSplitter có thể được sử dụng để lọc và tìm các khuôn mặt này theo loại như hình dưới đây.
Revit sử dụng nhiều loại đường cong khác nhau để biểu diễn hình học khuôn mặt trong tài liệu. Bao gồm các:
Loại khuôn mặt Lớp API Revit Sự định nghĩa Ghi chú
Các biểu diễn toán học của tất cả các loại mặt Revit có thể được tìm thấy << cần liên kết tại đây >>.
Phần này mô tả các dạng khuôn mặt gặp phải trong hình học Revit, các thuộc tính của chúng và các biểu diễn toán học của chúng.
Mặt phẳng
Một mặt phẳng được xác định bởi gốc và vectơ đơn vị ở U và V. Phương trình tham số của nó là
Hình trụ
Một mặt được xác định bằng cách đùn một đường tròn dọc theo một trục. API Revit cung cấp các thuộc tính sau:
• Trục ép đùn.
• “Các vectơ bán kính” trong X và Y. Các vectơ này là các vectơ đơn vị của đường tròn nhân với bán kính của đường tròn. Lưu ý rằng các vectơ đơn vị có thể
đại diện cho khung điều khiển thuận tay phải hoặc tay trái.
ConicalFace
Một khuôn mặt được xác định bằng cách quay của một đường quanh một trục. API Revit cung cấp các thuộc tính sau:
• “Các vectơ bán kính” trong X và Y. Các vectơ này là các vectơ đơn vị nhân với bán kính của hình tròn được tạo thành bởi vòng quay. Lưu ý rằng đơn vị
vectơ có thể đại diện cho khung điều khiển thuận tay phải hoặc tay trái.
RevolvedFace
Một mặt được xác định bằng cách quay một đường cong tùy ý về một trục. API Revit cung cấp các thuộc tính sau:
• Các vectơ đơn vị cho đường cong xoay (được gọi không chính xác là “Bán kính”)
RisedFace
Một bề mặt được trị liệu được tạo ra bằng cách quét một đường giữa hai đường cong biên dạng hoặc giữa đường cong và một điểm. API Revit cung cấp (các) đường cong và (các) điểm dưới
nếu cả hai đường cong đều hợp lệ. Nếu một trong các đường cong được thay thế bằng một điểm, các phương trình sẽ đơn giản hóa thành một trong số:
Một mặt bị trị không có đường cong và hai điểm là suy biến và sẽ không được trả lại.
HermiteFace
Một mặt spline Hermite lập phương. API Revit cung cấp:
• Mảng các tham số u và v cho các điểm nội suy spline • Một mảng các điểm 3D tại
mỗi nút (mảng được tổ chức theo chiều tăng u, sau đó tăng v) • Một mảng các vectơ tiếp tuyến tại mỗi nút • Một
Biểu diễn tham số của bề mặt này, giữa các nút (u1, v1) và (u2, v2) là:
Và B là ma trận hệ số thu được từ các thuộc tính mặt tại các điểm nội suy:
Machine Translated by Google
Phương thức Solid.IntersectWithCurve () tính toán giao điểm giữa một thể tích đóng và một đường cong. Lớp SolidCurveIntersectionOptions có thể chỉ định xem
kết quả từ phương thức IntersectWithCurve () sẽ bao gồm các đoạn đường cong bên trong khối rắn hay bên ngoài. Các đoạn đường cong bên trong vật rắn sẽ bao
gồm các đoạn đường cong trùng với (các) mặt của vật rắn. Cả các đoạn đường cong và các thông số của các đoạn đều có sẵn trong kết quả.
Ví dụ sau sử dụng phương thức IntersectWithCurve () để tính chiều dài của cốt thép nằm trong một cột.
Vùng mã: Tìm giao điểm giữa đường đặc và đường cong
Chất rắn và bề mặt đôi khi được sử dụng làm đầu vào cho các tiện ích khác. API Revit cung cấp một số quy trình có thể được sử dụng để tạo hình học như vậy
Phương pháp
• GeometryElement.GetTransformed ()
trả về một bản sao của phần tử hình học đầu vào với một phép biến đổi được áp dụng. Bởi vì hình học này là một bản sao, các thành viên của nó không thể được sử dụng làm tham chiếu đầu vào
cho các phần tử Revit khác, nhưng nó có thể được sử dụng để phân tích và trích xuất hình học.
Lớp GeometryCreationUtilities là một lớp tiện ích cho phép xây dựng các hình khối cơ bản:
• đùn
• Cách mạng
• Quét
• Trộn
• SweptBlend
Hình học kết quả không được thêm vào tài liệu như một phần của bất kỳ phần tử nào. Tuy nhiên, Solid đã tạo có thể được sử dụng làm đầu vào cho các hàm API
• Là (các) mặt đầu vào cho các phương thức trong khung Hình ảnh hóa Phân tích (SpatialFieldManager.AddSpatialFieldPrimitive ()) - điều này cho phép người dùng
trực quan hóa hình dạng đã tạo liên quan đến các phần tử khác trong tài liệu
• Là đầu vào vững chắc để tìm các phần tử 3D theo giao điểm
• Là một phần của phép tính hình học (ví dụ: sử dụng Face.Project (), Face.Intersect () hoặc các phương pháp hình học Face, Solid và Edge khác)
Ví dụ sau sử dụng lớp GeometryCreationUtilities để tạo hình trụ dựa trên vị trí và chiều cao. Ví dụ, điều này có thể được sử dụng để tạo các khối xung quanh các
đầu của bức tường nhằm tìm các bức tường khác trong phạm vi gần với các điểm cuối của bức tường:
Lớp BooleanOperationsUtils cung cấp các phương thức để kết hợp một cặp đối tượng hình học rắn.
Phương thức ExecuteBooleanOperation () lấy một bản sao của chất rắn đầu vào và kết quả là tạo ra một chất rắn mới. Đối số đầu tiên của nó có thể là bất kỳ chất rắn
nào, lấy trực tiếp từ một phần tử Revit hoặc được tạo thông qua một thao tác khác như GeometryCreationUtils.
Phương thức ExecuteBooleanOperationModizingOriginalSolid () thực hiện thao tác boolean trực tiếp trên solid đầu vào đầu tiên. Đầu vào đầu tiên phải là chất rắn
không lấy trực tiếp từ phần tử Revit. Thuộc tính GeometryObject.IsElementGeometry có thể xác định xem vật rắn có thích hợp làm đầu vào cho phương pháp này hay
không.
Machine Translated by Google
Các tùy chọn cho cả hai phương pháp bao gồm kiểu hoạt động: Union, Difference hoặc Intersect. Ví dụ sau minh họa cách lấy giao điểm của hai
6.
7. double volumeOfIntersection = giao nhau.Volume;
số 8.
9. }
Một số lớp của Trình trợ giúp hình học có trong API. Các lớp Trình trợ giúp được sử dụng để mô tả thông tin hình học cho các phần tử nhất định, chẳng hạn như xác
định CropBox cho một chế độ xem bằng cách sử dụng lớp BoundBoxXYZ.
• BoundBoxXYZ - Một hình hộp chữ nhật 3D được sử dụng trong các trường hợp như xác định khu vực phần xem 3D.
• Tham chiếu - Tham chiếu ổn định đến một đối tượng hình học trong mô hình Revit, được sử dụng khi tạo các phần tử như kích thước.
• Tùy chọn - Tùy chọn của người dùng để phân tích hình học.
• XYZ - Đối tượng biểu diễn tọa độ trong không gian 3D.
• BoundBoxUV - Một hình chữ nhật 2D song song với các trục tọa độ.
Biến đổi
Các phép biến đổi được giới hạn ở các phép biến đổi 3x4 (Ma trận) trong ứng dụng Revit, biến đổi vị trí của một đối tượng trong không gian mô hình so với phần còn
lại của không gian mô hình và các đối tượng khác. Các phép biến đổi được xây dựng từ vị trí và định hướng trong không gian mô hình. Ba Vectơ hướng (thuộc tính
BasisX, BasisY và BasisZ) và điểm gốc cung cấp tất cả thông tin biến đổi. Ma trận được tạo thành bởi bốn giá trị như sau:
Phương thức Transform OfPoint thực hiện chức năng trước đó. Đoạn mã sau đây là một mẫu của quá trình biến đổi tương tự.
Các thuộc tính và phương thức của lớp Geometry.Transform được xác định trong các phần sau.
Xác thực
CreateReflection ()
Như hình trước cho thấy, một bức tường được phản chiếu bởi một mặt phẳng tham chiếu. Phương thức CreateReflection () cần thông tin về mặt phẳng hình học cho
mặt phẳng tham chiếu.
CreateRotation () và CreateRotationAtPoint ()
Xoay theo một góc xác định quanh một trục xác định tại (0,0,0) hoặc tại một điểm xác định.
CreateTranslation ()
Dịch theo một vectơ được chỉ định. Với dữ liệu XYZ vectơ, một phép biến đổi được tạo như sau:
Bản ngã
HasReflection
Đây là giá trị Boolean cho biết liệu phép biến đổi có tạo ra phản xạ hay không.
Tỉ lệ
Nghịch đảo
Một phép biến đổi nghịch đảo. Ma trận biến đổi A khả nghịch nếu tồn tại ma trận biến đổi B sao cho A * B = B * A = I (đồng nhất).
IsIdentity
Giá trị Boolean cho biết liệu phép biến đổi này có phải là một danh tính hay không.
IsTranslation
Giá trị Boolean cho biết liệu phép biến đổi này có phải là một phép dịch hay không.
Geometry.Transform cung cấp các phương pháp để thực hiện các phép toán ma trận cơ sở.
nhân
Nhân một phép biến đổi với một phép biến đổi được chỉ định và trả về kết quả.
ScaleBasis
ScaleBasisAndOrigin
OfPoint
Áp dụng phép biến đổi cho điểm. Thuộc tính Origin được sử dụng.
Machine Translated by Google
OfVector
Áp dụng phép biến đổi cho vectơ. Thuộc tính Nguồn gốc không được sử dụng.
So sánh hai phép biến hình. MostEqual phù hợp với cơ chế tính toán và độ chính xác trong mã lõi Revit. Ngoài ra, Equal và toán tử == không được triển khai trong lớp Transform.
API cung cấp một số phím tắt để hoàn thành việc chuyển đổi hình học. Thuộc tính Transformed trong một số lớp hình học được sử dụng để thực hiện công việc, như được hiển
thị trong bảng sau.
Curve.get_Transformed (Biến đổi chuyển đổi) Áp dụng phép biến đổi được chỉ định cho một đường cong
GeometryElement.GetTransformed (Biến đổi biến đổi) Biến đổi một bản sao của hình học trong phần tử gốc.
Profile.get_Transformed (Biến đổi chuyển đổi) Biến đổi cấu hình và trả về kết quả.
Mesh.get_Transformed (Biến đổi chuyển đổi) Biến đổi lưới và trả về kết quả.
Ghi chú
Phương thức được biến đổi sẽ tự nhân bản chính nó sau đó trả về kết quả được sao chép đã biến đổi.
Ngoài các phương thức này, lớp Instance (là lớp cha cho các phần tử như cá thể họ, cá thể liên kết và nội dung CAD đã nhập) có hai phương thức cung cấp biến đổi cho một
Phiên bản nhất định. Phương thức GetTransform () nhận được biến đổi cơ bản cho cá thể dựa trên cách đặt cá thể đó, trong khi GetTotalTransform () cung cấp biến đổi được
sửa đổi với biến đổi phía bắc thực, đối với các trường hợp như cá thể nhập.
Tham chiếu rất hữu ích trong việc tạo phần tử.
• Tham chiếu xác định một đường dẫn trong cây biểu diễn hình học một cách linh hoạt.
• Cây được sử dụng để xem việc tạo biểu diễn hình học cụ thể.
API hiển thị bốn loại tham chiếu dựa trên các loại con trỏ Chọn khác nhau. Chúng được truy xuất từ API theo những cách khác nhau:
Các loại tham chiếu khác nhau không thể được sử dụng tùy tiện. Ví dụ:
• Phương thức NewPointBoundaryConditions () yêu cầu một tham chiếu cho Point.
Phương thức Reference.ConvertToStableRepresentation () có thể được sử dụng để lưu một tham chiếu đến một đối tượng hình học, ví dụ như một mặt, cạnh hoặc đường cong,
dưới dạng một chuỗi và sau đó trong cùng một phiên Revit (hoặc thậm chí trong một phiên khác, nơi giống nhau tài liệu hiện có) sử dụng phương thức ParseFromStableRepresentation
() để có được một Tham chiếu giống hệt nhau bằng cách sử dụng chuỗi làm đầu vào.
Machine Translated by Google
Tùy chọn
Geometry thường được trích xuất từ thuộc tính đã lập chỉ mục Element.Geometry. Hình dạng ban đầu của dầm, cột hoặc dấu ngoặc nhọn, trước khi đối tượng được sửa đổi bởi
nối, cắt, đối phó, mở rộng hoặc xử lý hậu kỳ khác, có thể được trích xuất bằng phương thức FamilyInstance.GetOriginalGeometry ().
Cả Element.Geometry và FamilyInstance.GetOriginalGeometry () đều chấp nhận một lớp tùy chọn mà bạn phải cung cấp. Lớp tùy chọn tùy chỉnh loại đầu ra bạn nhận được
dựa trên các thuộc tính của nó:
• ComputeRefferences - Cho biết có tính toán tham chiếu hình học hay không khi truy xuất thông tin hình học. Giá trị mặc định
là false, vì vậy nếu thuộc tính này không được đặt thành true, thì tham chiếu sẽ không thể truy cập được.
• Bao gồm không thể thay thế - Cho biết cũng trả về các đối tượng hình học không hiển thị trong chế độ xem mặc định.
• Chế độ xem - Nhận thông tin hình học từ một chế độ xem cụ thể. Lưu ý rằng nếu một chế độ xem được chỉ định, mức chi tiết cho chế độ xem này sẽ được sử dụng trong
vị trí của "DetailLevel".
• DetailLevel - Cho biết mức chi tiết được ưu tiên. Mặc định là Trung bình.
ComputeRefferences
Nếu bạn đặt thuộc tính này thành false, API sẽ không tính toán tham chiếu hình học. Tất cả các thuộc tính Tham chiếu được truy xuất từ cây hình học không trả về gì. Để biết
thêm chi tiết về tài liệu tham khảo, hãy tham khảo phần Tài liệu tham khảo. Không thể đặt tùy chọn này thành true khi được sử dụng với FamilyInstance.GetOriginalGeometry ().
Hầu hết các hình học không nhìn thấy là hình học xây dựng và hình học có điều kiện mà người dùng nhìn thấy khi chỉnh sửa phần tử (tức là mặt phẳng trung tâm của một phiên bản
họ cửa sổ). Mặc định cho thuộc tính này là sai. Tuy nhiên, một số hình dạng có thể nhìn thấy có điều kiện này đại diện cho các đối tượng trong thế giới thực, chẳng hạn như
các ống dẫn cách nhiệt xung quanh trong Revit MEP, và nó nên được trích xuất.
Lượt xem
Nếu người dùng đặt thuộc tính Chế độ xem thành một chế độ xem khác, thông tin hình học được truy xuất có thể khác. Xem lại các ví dụ sau để biết thêm thông tin:
1. Trong Revit, vẽ cầu thang trong chế độ xem 3D , sau đó chọn các thuộc tính Vùng cắt , Vùng cắt có thể nhìn thấy và Hộp phần trong chế độ xem 3D. Trong Vùng cắt, sửa
đổi hộp phần trong chế độ xem 3D để hiển thị một phần của cầu thang. Nếu bạn lấy thông tin hình học cho cầu thang bằng cách sử dụng API và đặt chế độ xem 3D làm thuộc
tính Options.View, chỉ một phần của hình dạng cầu thang có thể được truy xuất. Các hình ảnh sau đây cho thấy cầu thang trong ứng dụng Revit (trái) và một cầu thang
được vẽ bằng API (phải).
Hình 113: Các hộp phần khác nhau hiển thị các hình học khác nhau
Machine Translated by Google
Vẽ cầu thang trong Revit sau đó vẽ mặt cắt như trong hình bên trái. Nếu bạn lấy thông tin cho cầu thang này bằng cách sử dụng API và đặt chế độ xem phần
này làm thuộc tính Options.View, chỉ một phần của hình dạng cầu thang có thể được truy xuất. Cầu thang được vẽ bằng API được hiển thị trong hình bên phải.
DetailLevel
API xác định ba kiểu liệt kê trong Geometry.Options.DetailLevels. Ba bảng liệt kê tương ứng với ba Mức chi tiết trong ứng dụng Revit, được hiển thị như sau.
Thông tin hình học khác nhau được truy xuất dựa trên các cài đặt khác nhau trong thuộc tính DetailLevel. Ví dụ: vẽ một chùm trong ứng dụng Revit, sau đó lấy
hình học từ chùm bằng cách sử dụng API để vẽ nó. Các hình ảnh sau đây cho thấy kết quả vẽ:
Machine Translated by Google
BoundBoxXYZ
BoundBoxXYZ xác định một hình hộp chữ nhật 3D bắt buộc phải song song với bất kỳ trục tọa độ nào. Tương tự như lớp Instance, BoundBoxXYZ lưu trữ dữ
liệu trong không gian tọa độ cục bộ. Nó có thuộc tính Transform để chuyển đổi dữ liệu từ không gian tọa độ cục bộ hộp sang không gian mô hình. Nói
cách khác, để có được ranh giới hộp trong không gian mô hình (giống như trong Revit), hãy biến đổi từng thành viên dữ liệu bằng cách sử dụng thuộc tính
Transform. Các phần sau minh họa cách sử dụng BoundBoxXYZ.
BoundBoxXYZ có thể được sử dụng để xác định ranh giới chế độ xem thông qua thuộc tính View.CropBox. Các hình ảnh sau đây sử dụng chế độ xem mặt cắt để cho
thấy cách BoundBoxXYZ được sử dụng trong ứng dụng Revit.
Các đường gạch ngang trong các hình trước hiển thị ranh giới chế độ xem phần được hiển thị dưới dạng thuộc tính CropBox (một phiên bản BoundBoxXYZ).
Hình trước hiển thị chế độ xem phần tương ứng. Tường bên ngoài ranh giới chế độ xem không được hiển thị.
BoundBoxXYZ cũng được sử dụng để xác định hộp phần cho chế độ xem 3D được truy xuất từ thuộc tính View3D.SectionBox. Chọn thuộc tính Hộp Phần trong Hộp thoại Thuộc tính . Hộp phần được
Sử dụng khác
• Xác định một hộp xung quanh hình học của một phần tử. (Thuộc tính Element.BoundBox). Cá thể BoundBoxXYZ được truy xuất theo cách này song song với các trục tọa độ.
Bảng sau xác định các mục đích sử dụng chính cho lớp này.
Lớn nhất nhỏ nhất Tọa độ tối đa / tối thiểu. Hai thuộc tính này xác định một hộp 3D song song với bất kỳ trục tọa độ nào. Thuộc tính Transform cung cấp một
ma trận biến đổi có thể biến đổi hộp đến vị trí thích hợp.
Biến đổi Chuyển đổi từ không gian tọa độ hộp sang không gian mô hình.
Đã bật Cho biết hộp giới hạn đã được bật hay chưa.
MaxEnabled / Xác định xem giới hạn tối đa / tối thiểu có hoạt động đối với một thứ nguyên nhất định hay không.
MinEnabled
Nếu thuộc tính Enable là false, hai thuộc tính này cũng sẽ trả về false.
Nếu chế độ xem cắt được bật, cả thuộc tính MaxEnabled và thuộc tính MinEnabled đều trả về true.
Nếu chế độ xem cắt bị tắt, cả thuộc tính MaxEnabled và thuộc tính MinEnabled đều trả về false.
Thuộc tính này cho biết liệu mặt hộp cắt của chế độ xem có thể được sử dụng để cắt chế độ xem của phần tử hay không.
Nếu BoundBoxXYZ được truy xuất từ thuộc tính View3D.SectionBox, giá trị trả về phụ thuộc vào việc thuộc tính Section Box có được chọn trong hộp
thoại Thuộc tính dạng xem 3D hay không. Nếu vậy, tất cả các thuộc tính Đã bật đều trả về true.
Nếu BoundBoxXYZ được truy xuất từ thuộc tính Element.BoundBox, tất cả các thuộc tính Đã bật đều đúng.
Mẫu mã sau minh họa cách xoay BoundBoxXYZ để sửa đổi hộp phần chế độ xem 3D.
BoundBoxUV
BoundBoxUV là một lớp giá trị xác định một hình chữ nhật 2D song song với các trục tọa độ. Nó hỗ trợ các thành viên dữ liệu Min và Max.
Họ cùng nhau xác định ranh giới của BoundBoxUV. BoundBoxUV được truy xuất từ thuộc tính View.Outline là chế độ xem đường biên trong chế độ xem không gian
giấy.
Lưu ý BoundBoxUV không thể hiển thị một hình chữ nhật gradient như hình sau cho thấy.
API cung cấp các lớp thu thập sau dựa trên các mục mà chúng chứa:
Lớp / Loại Các lớp bộ sưu tập tương ứng Các trình lặp tương ứng
EdgeArrayArray EdgeArrayArrayIterator
Ví dụ InstanceArray InstanceArrayIterator
Tất cả các lớp này sử dụng các phương thức và thuộc tính rất giống nhau để thực hiện công việc tương tự. Để biết thêm chi tiết, hãy tham khảo Bộ sưu tập.
Phần này minh họa cách lấy chất rắn và đường cong từ chùm tia. Bạn có thể truy xuất dữ liệu hình học cột và dấu ngoặc nhọn theo cách tương tự. GeometryElement có
thể chứa hình học mong muốn dưới dạng Solid hoặc GeometryInstance tùy thuộc vào việc một chùm được nối hay độc lập và mã này bao gồm cả hai trường hợp.
Lưu ý Nếu bạn muốn lấy đường cong lái xe của dầm và thanh giằng, hãy gọi thuộc tính FamilyInstance Location nơi có sẵn LocationCurve.
// Tìm tất cả các chất rắn và chèn chúng vào mảng rắn
8. AddCurvesAndSolids (geomElem, đường cong ref, chất rắn ref );
9. 10. }
11.
12. private void AddCurvesAndSolids (Autodesk.Revit.DB.GeometryElement geomElem, 13.
ref Autodesk.Revit.DB.CurveArray đường cong, ref
14. Autodesk.Revit.DB.SolidArray chất rắn)
15.
{ 16. foreach (Autodesk.Revit.DB.GeometryObject geomObj trong geomElem) {
17.
18. Autodesk.Revit.DB.Curve curve = geomObj as Autodesk.Revit.DB.Curve; if (null ! = curve)
19. {
20.
21. Curve.Append (đường cong);
22. tiếp tục;
23. }
24. Autodesk.Revit.DB.Solid solid = geomObj as Autodesk.Revit.DB.Solid; if (null ! = solid)
25. {
26.
27. chất rắn.Append (chất rắn);
28. tiếp tục;
29. }
30. // Nếu GeometryObject này là Instance, hãy gọi AddCurvesAndSolids
31. Autodesk.Revit.DB.GeometryInstance geomInst = geomObj là Autodesk.Revit.DB.GeometryInstance; if (null ! = geomInst)
32.
Machine Translated by Google
33. {
34. Autodesk.Revit.DB.GeometryElement goneGeomElem = geomInst.GetInstanceGeometry (geomInst.Transform); AddCurvesAndSolids (biến đổiGeomElem,
35. đường cong ref, chất rắn ref );
36. }
37. }
38. }
Ví dụ trên sử dụng thuộc tính FamilyInstance.Geometry để truy cập hình dạng thực của chùm tia. Để có được hình dạng ban đầu của một cá thể họ trước khi nó được sửa
đổi bằng cách nối, cắt, ghép, mở rộng hoặc xử lý hậu kỳ khác, hãy sử dụng phương thức FamilyInstance.GetOriginalGeometry ().
Lưu ý Để biết thêm thông tin về cách truy xuất đối tượng kiểu Geometry.Options, hãy tham khảo Geometry.Options.
Lớp tiện ích Ext ExtractionAnalyzer cho phép bạn cố gắng "lắp" một phần hình học nhất định vào hình dạng của một cấu hình đùn. Một thể hiện của lớp này là một
lớp sử dụng một lần sẽ được cung cấp một hình học vững chắc, một mặt phẳng và một hướng. Sau khi khởi chạy Ext ExtrusionAnalyzer, bạn có thể truy cập kết quả
• Phương thức GetExtrusionBase () trả về biên dạng cơ sở được tính toán của vật rắn đùn được căn chỉnh với mặt phẳng đầu vào.
• Phương thức CalculFaceAlignment () có thể được sử dụng để xác định tất cả các mặt từ hình học ban đầu có và không thẳng hàng với các mặt của
đùn tính toán. Điều này có thể hữu ích để tìm ra nếu một bức tường, chẳng hạn, có một đường nối nghiêng ở trên cùng như trường hợp có một đường nối với mái nhà.
Nếu một mặt không thẳng hàng, một cái gì đó được kết hợp với hình học đang ảnh hưởng đến nó.
• Để xác định phần tử tạo ra mặt không được căn chỉnh, hãy chuyển mặt đó vào Element.GetGeneratingElementIds (). Để biết thêm chi tiết về tiện ích này,
xem phần sau.
Tiện ích ExtrusionAnalyzer hoạt động tốt nhất đối với hình học ít nhất là hơi “giống đùn”, ví dụ, hình dạng của một bức tường có thể bị ảnh hưởng hoặc có thể
không bị ảnh hưởng bởi các đường nối cuối, nối sàn, nối mái, lỗ hở do cửa sổ và cửa ra vào, hoặc các sửa đổi khác. Hiếm khi đối với các kết hợp hình dạng và hướng
cụ thể, máy phân tích có thể không xác định được mặt nhất quán để hoạt động như cơ sở của quá trình đùn - một lỗi không hợp lệ sẽ được đưa vào
những tình huống này.
Trong ví dụ này, máy phân tích đùn được sử dụng để tính toán và phác thảo bóng được hình thành từ vật rắn đầu vào và hướng mặt trời.
Vùng mã: Sử dụng Trình phân tích đùn để tính toán và vẽ đường viền bóng.
5. /// Một giao dịch phải được mở trong tài liệu. </remarks> 6. /// <param name =
"document"> Tài liệu. </param> 7. /// <param name = "solid" > Vật rắn đích. </param>
8. /// <param name = "targetLevel"> Mức mục tiêu để đo và 9. /// vẽ bóng. </param>
10. /// <param name = "sunDirection"> Hướng từ mặt trời (hoặc nguồn sáng). </param> 11. ///
<returns> Các đường cong tạo ra bóng đổ. </returns> 12. /// <throws cref =
"Autodesk .Revit.Exceptions.InvalidOperationException "> 13. /// Bị ném bởi Ext ExtractionAnalyzer khi kết hợp hình học và
hướng 14. /// không cho phép phân tích thành công. </throws> 15. private static ICollection <ElementId> DrawShadow (Tài liệu
tài liệu , Solid solid, Level targetLevel, XYZ sunDirection) 16.
17.
{ 18. // Tạo mặt phẳng mục tiêu từ mức.
19. Mặt phẳng phẳng = document.Application.Create.NewPlane (XYZ.BasisZ, new XYZ (0,
20. 0, targetLevel.ProjectElevation));
21.
22. // Tạo bộ phân tích đùn.
23. Máy phân tích Ext ExtrusionAnalyzer = ExtrusionAnalyzer.Create (solid, plane, sunDirection);
24.
25. // Lấy mặt kết quả tại cơ sở của đùn được tính toán.
26. Kết quả khuôn mặt = analyzer.GetExtoratedBase ();
27.
28. // Chuyển các cạnh của khuôn mặt thành các đường cong.
29. CurveArray đường cong = document.Application.Create.NewCurveArray (); foreach
30. (EdgeArray edgeLoop in result.EdgeLoops ) {
31.
32. foreach (Cạnh cạnh trong edgeLoop) {
33.
34. Curve.Append (edge.AsCurve ());
35. }
Machine Translated by Google
Vùng mã: Sử dụng Trình phân tích đùn để tính toán và vẽ đường viền bóng.
36. }
37.
38. // Lấy đối tượng nhà máy đường cong mô hình.
39. Autodesk.Revit.Creation.ItemFactoryBase itemFactory;
40. if (document.IsFamilyDocument)
41. itemFactory = document.FamilyCreate; else
42. itemFactory = document.Create;
43.
44.
45. // Thêm một mặt phẳng phác thảo cho các đường cong.
46. SketchPlane sketchPlane =
47. itemFactory.NewSketchPlane (document.Application.Create.NewPlane (đường cong));
48. document.Regenerate ();
49.
50. // Thêm các đường cong đổ bóng
51. ModelCurveArray curveElements = itemFactory.NewModelCurveArray (curve, sketchPlane);
52.
53. // Trả về id của các đường cong đã tạo
54. Danh sách <ElementId> curveElementIds = new Danh sách <ElementId> ();
55. foreach (ModelCurve curveElement in curveElements) {
56.
57. curveElementIds.Add (curveElement.Id);
58. }
59.
60. return curveElementIds;
61. }
Tiện ích ở trên có thể được sử dụng để tính toán bóng của một khối lượng nhất định đối với cài đặt mặt trời và bóng đổ hiện tại cho chế độ xem:
Lớp này cho phép ứng dụng sử dụng các công cụ chọn của Revit để tìm các phần tử và hình học. Lớp này sử dụng một tia từ một điểm theo một hướng xác định để tìm dạng
Lớp chỉ giao nhau giữa hình học 3D và yêu cầu chế độ xem 3D khi tạo. Có thể sử dụng chế độ xem 3D đã được cắt bởi một hộp mặt cắt hoặc có các tùy chọn đồ họa và
hình học cụ thể cho chế độ xem cụ thể, để tìm các giao điểm không thể tìm thấy trong mô hình 3D chưa cắt và chưa cắt.
Lớp ReferenceIntersector hỗ trợ lọc đầu ra dựa trên phần tử hoặc kiểu tham chiếu. Đầu ra có thể được tùy chỉnh dựa trên hàm tạo được sử dụng hoặc bằng cách sử dụng các
phương thức và thuộc tính của lớp trước khi gọi một phương thức để thực hiện phép chiếu tia.
Machine Translated by Google
Có 4 hàm tạo.
Tên Sự mô tả
Tạo một ReferenceIntersector được thiết lập để trả về các giao điểm từ tất cả các phần tử và
ReferenceIntersector (View3D)
đại diện cho tất cả các loại mục tiêu tham chiếu.
ReferenceIntersector (ElementFilter, FindReferenceTarget, Tạo một ReferenceIntersector được thiết lập để trả về các giao điểm từ bất kỳ phần tử nào vượt qua
View3D) bộ lọc.
Tạo một ReferenceIntersector được đặt để chỉ trả về các giao điểm từ một phần tử mục tiêu duy nhất.
ReferenceIntersector (ElementId, FindReferenceTarget, View3D)
ReferenceIntersector (ICollection <ElementId>, Tạo một ReferenceIntersector được thiết lập để trả về các giao điểm từ bất kỳ phần tử mục tiêu nào.
FindReferenceTarget, View3D)
Bảng liệt kê FindReferenceTarget bao gồm các tùy chọn: Phần tử, Lưới, Cạnh, Đường cong, Mặt hoặc Tất cả.
Có hai phương pháp để chiếu một tia, cả hai phương pháp này đều lấy gốc của tia và hướng của nó. Phương thức Find () trả về một tập hợp các đối tượng
ReferenceWithContext phù hợp với tiêu chí của ReferenceIntersector. Đối tượng này chứa tham chiếu giao nhau, có thể vừa là phần tử vừa là tham chiếu hình học giao nhau giữa tia. Một
số tham chiếu phần tử được trả về sẽ có một đối tượng hình học tương ứng cũng giao nhau (ví dụ: tia đi qua các lỗ trong tường sẽ giao nhau giữa tường và phần tử mở). Nếu chỉ quan
tâm đến các giao điểm thực, ứng dụng sẽ loại bỏ tất cả các tham chiếu có Tham chiếu thuộc loại Phần tử.
Phương thức FindNearest () hoạt động tương tự như phương thức Find (), nhưng chỉ trả về tham chiếu giao nhau gần nhất với gốc tia.
Trả về ReferenceWithContext bao gồm một tham số lân cận. Đây là khoảng cách giữa gốc của tia sáng và giao điểm. Ứng dụng có thể sử dụng khoảng cách này để loại trừ các mục quá xa so
với nguồn gốc cho một phân tích hình học cụ thể. Một ứng dụng cũng có thể sử dụng khoảng cách này để thực hiện một số vấn đề thú vị liên quan đến việc phân tích hình học tại chỗ của
mô hình.
Ghi chú:
• Phương thức này tìm thấy cả hai Tham chiếu sẽ chỉ được tìm thấy và trả về cho các phần tử nằm trước tia.
• Phương pháp này sẽ không trả về các giao điểm trong các tệp được liên kết.
• Phương pháp này sẽ không trả về các điểm giao cắt với các phần tử không có trong tùy chọn thiết kế đang hoạt động.
Một công dụng chính của công cụ này là tìm các phần tử gần với các phần tử khác. Điều này cho phép ứng dụng sử dụng công cụ làm “mắt” của nó và xác định mối quan hệ giữa các
Ví dụ Fro, khả năng dò tia có thể được sử dụng để tìm các cột được nhúng trong tường. Vì cột và tường không duy trì mối quan hệ trực tiếp, lớp này cho phép chúng tôi tìm kiếm
các ứng cử viên tiềm năng bằng cách theo dõi các tia ngay bên ngoài phạm vi của bức tường và tìm kiếm các giao điểm với các cột.
Đo khoảng cách
Lớp này cũng có thể được sử dụng để đo khoảng cách thẳng đứng từ giếng trời đến tầng gần nhất.
public Result Execute (ExternalCommandData revit, ref string message, ElementSet element) {
4.
5. Tài liệu doc = revit.Application.ActiveUIDocument.Document;
6.
7. Lựa chọn lựa chọn = revit.Application.ActiveUIDocument.Selection;
số 8.
28.
29. if (skylight == null) {
30.
31. message = "Vui lòng chọn một giếng trời."; trả về
32. kết quả.Cancell;
33. }
34.
35. // Tính chiều cao
36. Dòng dòng = TínhLineAboveFloor (doc, giếng trời);
37.
38. // Tạo đường cong mô hình để hiển thị khoảng cách Plane
39. plane = revit.Application.Application.Create.NewPlane (new XYZ (1, 0, 0), line.GetEndPoint (0)); SketchPlane sketchPlane =
40. SketchPlane.Create (doc, plane);
41.
42. ModelCurve curve = doc.Create.NewModelCurve (line, sketchPlane);
43.
44. // Hiển thị thông báo có giá trị độ dài
45. TaskDialog.Show ("Khoảng cách", "Khoảng cách đến tầng:" + String.Format ("{0: f2}", line.Length));
46.
47. trả về Kết quả.
48. }
49.
50. /// <summary> ///
51. Xác định đoạn thẳng kết nối giếng trời với tầng gần nhất. /// </summary> /// <returns> Đoạn đường
52. thẳng. </returns> Dòng riêng TínhLineAboveFloor (Tài liệu doc, FamilyInstance skylight) {
53.
54.
55.
56. // Tìm chế độ xem 3D để sử dụng cho hàm tạo ReferenceIntersector
57. FilteredElementCollector collector = new FilteredElementCollector (doc); Func <View3D,
58. bool> isNotTemplate = v3 =>! (V3.IsTemplate); View3D view3D = collector.OfClass (typeof
59. (View3D)). Cast <View3D> () .First <View3D> (isNotTemplate);
60.
61. // Sử dụng tâm của hộp giới hạn giếng trời làm điểm bắt đầu.
62. Hộp BoundBoxXYZ = skylight.get_BoundsBox (view3D); XYZ center =
63. box.Min.Add (box.Max) .Multiply (0.5);
64.
65. // Chiếu theo chiều âm Z xuống sàn.
66. XYZ rayDirection = new XYZ (0, 0, -1);
67.
68. Bộ lọc ElementClassFilter = new ElementClassFilter (typeof (Tầng));
69.
70. ReferenceIntersector refIntersector = new ReferenceIntersector (bộ lọc, FindReferenceTarget.Face, view3D); ReferenceWithContext
71. referenceWithContext = refIntersector.FindNearest (center, rayDirection);
72.
73. Tham chiếu tham chiếu = referenceWithContext.GetReference (); Giao lộ XYZ
74. = tham chiếu.GlobalPoint;
75.
76. // Tạo đoạn thẳng từ điểm bắt đầu và điểm giao nhau.
77. Kết quả dòng = Line.CreateBound (tâm, giao điểm); trả về kết quả;
78.
79. }
80. }
Các tham chiếu được trả về bởi ReferenceIntersector.Find () bao gồm giao điểm trên hình. Biết được giao điểm trên mặt, vật liệu của mặt và hướng tia cho phép
ứng dụng phân tích sự phản xạ và khúc xạ trong tòa nhà. Hình ảnh sau đây thể hiện việc sử dụng giao điểm để phản xạ các tia cắt nhau bởi các phần tử mô hình; các
đường cong mô hình đã được thêm vào để biểu diễn đường đi của mỗi tia.
Machine Translated by Google
Một cách sử dụng khác của lớp ReferenceIntersector sẽ là phát hiện các giao điểm (chẳng hạn như chùm tia hoặc đường ống) giao nhau / giao thoa với đường tâm của một chùm tia
Ví dụ: Định tuyến lại các yếu tố xung quanh giao thoa
Machine Translated by Google
HostObjectUtils
Lớp HostObjectUtils cung cấp các phương thức như một lối tắt để định vị các mặt nhất định của HostObjects phức hợp. Các tiện ích này truy xuất các mặt đóng vai trò là
• HostObjectUtils.GetSideFaces () - áp dụng cho Walls và FaceWalls; bạn có thể có được các mặt hoàn thiện bên ngoài hoặc bên trong.
SolidUtils
Lớp SolidUtils chứa các phương thức để thực hiện các hoạt động trên chất rắn.
• SolidUtils.SplitVolumes () - lấy một khối rắn bao gồm các khối riêng biệt kèm theo và trả về các đối tượng Solid mới được tạo đại diện cho mỗi khối. Nếu
không cần tách, chất rắn đầu vào được trả lại.
• SolidUtils.TessosystemSolidOrShell () - tam giác một đầu vào đã cho Solid (có thể là một hoặc nhiều khối lượng đóng hoàn toàn hoặc một vỏ mở). Trả về một
Đối tượng TriangulatedSolidOrShell cho phép truy cập vào thành phần ranh giới tam giác được lưu trữ của một khối rắn hoặc một thành phần được kết nối tam giác
Tham giaGeometryUtils
Lớp JoinGeometryUtils chứa các phương thức để nối và bỏ liên kết các phần tử cũng như để quản lý thứ tự mà các phần tử được tham gia. Những tiện ích này không có sẵn cho
• JoinGeometryUtils.AreElementsJoined () - xác định xem hai phần tử có được tham gia hay không
• JoinGeometryUtils.GetJoinedElements () - trả về tất cả các phần tử được kết hợp với phần tử đã cho
• JoinGeometryUtils.JoinGeometry () - tạo một phép nối giữa hai phần tử có chung một mặt comon. Cạnh có thể nhìn thấy giữa các phần tử được nối là
loại bỏ. và các phần tử được nối sau đó có cùng độ đậm dòng và mẫu tô.
• JoinGeometryUtils.SwitchJoinOrder () - đảo ngược thứ tự mà hai phần tử được nối với nhau. Phần tử cắt trở thành phần tử cắt và phần tử cắt
ngược lại.
• JoinGeometryUtils.IsCuttingElementInJoin () - xác định xem phần tử đầu tiên trong hai phần tử được nối có cắt phần tử thứ hai hay ngược lại.
FacetingUtils
Lớp này được sử dụng để chuyển một cấu trúc tam giác thành một cấu trúc trong đó một số tam giác đã được hợp nhất thành tứ giác.
• FacetingUtils.ConvertTriangleToQuads () - phương thức này lấy TriangulationInterface (được xây dựng từ TriangulatedSolidOrShell) làm đầu vào và
trả về một tập hợp các hình tam giác và tứ giác đại diện cho đối tượng hình tam giác ban đầu.
API Revit cung cấp quyền truy cập vào hình học 3D của các yếu tố không gian (phòng và không gian).
Lớp SpatialElementGeometryCalculator có thể được sử dụng để tính toán hình học của một phần tử không gian và thu được các mối quan hệ giữa hình học và các yếu tố biên của
phần tử đó. Có 2 tùy chọn có thể được cung cấp cho tiện ích này:
• SpatialElementBoundaryLocation - sử dụng mặt hoàn thiện hay đường tâm phần tử biên để tính toán
• StoredFreeBoundaryFaces - có bao gồm các mặt không ánh xạ trực tiếp đến phần tử ranh giới trong kết quả hay không.
Kết quả tính toán hình học được chứa trong lớp SpatialElementGeometryResults. Từ lớp SpatialElementGeometryResults, bạn có thể lấy:
• Khối lượng Solid đại diện cho hình học (phương pháp GetGeometry ())
• Mặt con (phần của phần tử không gian được giới hạn bởi phần tử ranh giới cụ thể này)
• Loại giao diện phụ (dưới cùng, trên cùng hoặc bên cạnh)
Machine Translated by Google
• Máy tính duy trì một bộ nhớ đệm bên trong cho hình học mà nó đã xử lý. Nếu bạn định tính toán hình học cho một số phần tử trong cùng một
bạn nên sử dụng một phiên bản duy nhất của lớp này. Lưu ý rằng bộ nhớ cache sẽ bị xóa khi có bất kỳ thay đổi nào đối với tài liệu.
• Sàn hầu như không bao giờ được đưa vào như các yếu tố ranh giới. Revit sử dụng phác thảo 2D của căn phòng để tạo thành các mặt dưới cùng và không khớp chúng với
• Các khe hở được tạo bởi các tính năng cắt tường như cửa ra vào và cửa sổ không được bao gồm trong các mặt được trả về.
• Các tính toán hình học phù hợp với các khả năng được cung cấp bởi Revit. Trong một số trường hợp Revit đưa ra các giả định về cách tính thể tích ranh giới của các
phòng và không gian, các giả định này sẽ có trong đầu ra của tiện ích.
Ví dụ sau đây tính toán hình học của một căn phòng và tìm các mặt ranh giới của nó
13. // lấy các mặt phụ cho mặt của căn phòng IList
14. <SpatialElementBoundarySubface> subfaceList = results.GetBoundaryFaceInfo (face); foreach (Giao diện phụ
15. SpatialElementBoundarySubface trong subfaceList) {
16.
17. if (subfaceList.Count> 1) // có nhiều mặt con xác định mặt {
18.
19. // lấy diện tích của từng mặt con kép
20. subfaceArea = subface.GetSubface (). area;
21.
22. // các mặt phụ tồn tại trong các tình huống như khi tường bao quanh phòng bị // chia theo chiều
23. ngang và các mặt của mỗi tường ngăn kết hợp với nhau để tạo ra // toàn bộ mặt của căn phòng
24.
25. }
26. }
27. }
Ví dụ sau đây tính toán hình học của một căn phòng và tìm vật liệu của các mặt thuộc về các yếu tố xác định căn phòng.
Phác thảo
Để tạo các phần tử hoặc chỉnh sửa hồ sơ của chúng trong Revit, trước tiên bạn phải tạo các đối tượng phác thảo. Ví dụ về các yếu tố yêu cầu bản phác thảo bao gồm:
• Mái nhà
• Sàn nhà
• Cầu thang
• Lan can.
Bản phác thảo cũng được yêu cầu để xác định các loại hình học khác, chẳng hạn như:
• Máy ép đùn
• Các sơ hở
• Vùng
Trong API nền tảng Revit, các chức năng phác thảo được biểu diễn bằng các lớp phác thảo 2D và 3D như sau:
o SketchPlane
o Phác thảo
o ModelCurve
o GenericForm
o Path3D
Ngoài Sketch Elements, ModelCurve cũng được mô tả trong chương này. Để biết thêm chi tiết về Phân loại phần tử, hãy xem Phân loại phần tử trong Elements
Essential tiết diện.
Lớp Sketch đại diện cho các đường cong được bao bọc trong một mặt phẳng được sử dụng để tạo mô hình 3D. Các tính năng chính được đại diện bởi các thuộc tính
SketchPlane và CurveLoop.
Khi chỉnh sửa tệp Revit, bạn không thể truy xuất đối tượng Sketch bằng cách lặp lại phép liệt kê Document.Elements vì tất cả các đối tượng Sketch đều là Phần tử
tạm thời. Khi truy cập thông tin mô hình 3D của Gia đình, các đối tượng Sketch rất quan trọng để tạo thành hình học. Để biết thêm chi tiết, hãy tham khảo 3D Sketch.
SketchPlane là cơ sở cho tất cả các lớp phác thảo 2D như ModelCurve và Sketch. SketchPlane cũng là cơ sở cho các Phần tử chú thích 2D như DetailCurve. Cả ModelCurve
và DetailCurve đều có thuộc tính SketchPlane và cần có SketchPlane trong phương pháp tạo tương ứng. SketchPlane luôn ẩn trong Revit UI.
Mọi ModelCurve phải nằm trong một SketchPlane. Nói cách khác, bất cứ nơi nào bạn vẽ ModelCurve trong giao diện người dùng hoặc bằng cách sử dụng API,
SketchPlane phải tồn tại. Do đó, ít nhất một SketchPlane tồn tại trong chế độ xem 2D nơi ModelCurve được vẽ.
Chế độ xem 2D bao gồm các kiểu xem CeilingPlan, FloorPlan và Elevation. Theo mặc định, SketchPlane được tạo tự động cho tất cả các chế độ xem này. Tên SketchPlane
liên quan đến chế độ xem 2D trả về tên chế độ xem như Cấp 1 hoặc Hướng Bắc.
Hình 77: Chọn Mặt phẳng để xác định Mặt phẳng làm việc mới
Machine Translated by Google
Khi bạn chỉ định một mặt phẳng làm việc mới, bạn có thể chọn Chọn một mặt phẳng như minh họa trong hình trước. Sau khi bạn chọn một mặt phẳng, hãy chọn một mặt
phẳng trên một phần tử cụ thể chẳng hạn như bức tường như hình sau cho thấy. Trong trường hợp này, thuộc tính SketchPlane.Name trả về một chuỗi liên quan đến phần
tử đó. Ví dụ, trong hình sau, thuộc tính SketchPlane.Name trả về 'Generic - 8' giống với thuộc tính Wall.Name.
Hình 78: Chọn một mặt phẳng trên tường làm Mặt phẳng làm việc
Lưu ý SketchPlane khác với mặt phẳng làm việc vì mặt phẳng làm việc có thể nhìn thấy và có thể được chọn. Nó không có một lớp cụ thể trong API hiện tại, nhưng
được đại diện bởi lớp Phần tử. Một mặt phẳng làm việc phải được xác định dựa trên một SketchPlane cụ thể. Cả thuộc tính Work plane và SketchPlane Category đều trả
về null. Mặc dù SketchPlane luôn vô hình, nhưng luôn có một SketchPlane tương ứng với một mặt phẳng làm việc. Mặt phẳng làm việc được sử dụng để thể hiện
SketchPlane trong văn bản và hình ảnh.
• Các thuộc tính ID, UniqueId, Name và Plane trả về một giá trị;
Mặt phẳng chứa thông tin hình học SketchPlane. SketchPlane thiết lập một hệ tọa độ phẳng với Plane như hình sau minh họa:
3D Sketch được sử dụng để chỉnh sửa một gia đình hoặc tạo một đối tượng 3D. Trong API nền tảng Revit, bạn có thể hoàn thành Bản phác thảo 3D bằng cách sử dụng
các lớp sau.
• đùn
• Trộn
• Quét
Nói cách khác, có bốn hoạt động mà qua đó mô hình 2D chuyển thành mô hình 3D. Để biết thêm chi tiết về phác thảo 2D, hãy tham khảo 2D Sketch.
Phun ra
Revit sử dụng các đùn để xác định hình học 3D cho các gia đình. Bạn tạo một đùn bằng cách xác định một bản phác thảo 2D trên một mặt phẳng; Revit sau đó tạo
ra bản phác thảo giữa điểm bắt đầu và điểm kết thúc.
Truy vấn đối tượng Biểu mẫu đùn cho một biểu mẫu chung để sử dụng trong mô hình hóa gia đình và tạo khối lượng. Lớp đùn có các thuộc tính sau:
Tài sản Sự mô tả
Đùn bắt đầu Trả về điểm Bắt đầu đùn. Nó là một loại Đôi.
Phác thảo Trả về bản phác thảo đùn. Nó chứa một mặt phẳng phác thảo và một số đường cong.
Giá trị của các thuộc tính ExtrusionStart và ExtrusionEnd phù hợp với các tham số trong Revit UI. Hình dưới đây minh họa các thông số tương ứng và kết quả đùn.
Machine Translated by Google
Hình 80: Các thông số đùn trong giao diện người dùng
Lệnh Revolve tạo ra hình học xoay quanh một trục. Bạn có thể sử dụng lệnh revolve để tạo các tay nắm cửa hoặc các tay nắm khác trên đồ nội thất, mái vòm hoặc cột.
Truy vấn đối tượng Biểu mẫu Cách mạng cho một biểu mẫu chung để sử dụng trong lập mô hình gia đình và đại chúng. Giai cấp Cách mạng có các thuộc tính sau:
Machine Translated by Google
Tài sản Sự mô tả
Phác thảo Trả về bản phác thảo đùn. Nó chứa một SketchPlane và một số đường cong.
EndAngle nhất quán với cùng một thông số trong Revit UI. Các hình ảnh sau đây minh họa tham số tương ứng Revolution, bản phác thảo và kết quả.
Ghi chú
• Không thể truy cập Góc Bắt đầu bằng API Nền tảng Revit.
• Nếu Góc kết thúc là dương, thì Chiều quay là chiều kim đồng hồ. Nếu nó là âm, chiều quay là ngược chiều kim đồng hồ
Trộn
Lệnh Blend trộn hai cấu hình với nhau. Ví dụ: nếu bạn phác thảo một hình chữ nhật lớn và một hình chữ nhật nhỏ hơn trên đó, Revit Architecture sẽ kết hợp
hai hình với nhau.
Truy vấn đối tượng Blend Form cho một biểu mẫu chung để sử dụng trong mô hình hóa gia đình và khối lượng. Lớp Blend có các thuộc tính sau:
Tài sản Sự mô tả
BottomSketch Trả về Bản phác thảo Dưới cùng. Nó là một đối tượng Sketch.
Giá trị thuộc tính FirstEnd và SecondEnd nhất quán với các thông số giống nhau trong Revit UI. Các hình ảnh sau đây minh họa các thông số tương ứng Blend,
các bản phác thảo và kết quả.
Hình 85: Các tham số hòa trộn trong giao diện người dùng
Machine Translated by Google
Quét
Lệnh Sweep quét một hồ sơ dọc theo đường dẫn 2D đã tạo hoặc đường dẫn 3D đã chọn. Đường dẫn có thể là một vòng mở hoặc vòng kín, nhưng phải xuyên qua
mặt phẳng biên dạng.
Truy vấn đối tượng Sweep Form cho một biểu mẫu chung để sử dụng trong lập mô hình gia đình và khối lượng. Lớp Sweep có các thuộc tính sau:
Tài sản Sự mô tả
Path3d Trả về Bản phác thảo đường dẫn 3D. Nó là một đối tượng Path3D.
PathSketch Trả về bản phác thảo đường dẫn kế hoạch. Nó là một đối tượng Sketch.
EnableTrajSegmentation Trả về trạng thái Phân đoạn quỹ đạo. Nó là một Boolean.
MaxSegmentAngle Trả về Góc phân đoạn tối đa. Nó là một loại Đôi.
Việc tạo Đường dẫn 2D cũng tương tự như các hình thức khác. Đường dẫn 3D được tìm nạp bằng cách chọn các đường cong 3D đã tạo.
Machine Translated by Google
• Thuộc tính Path3d chỉ khả dụng khi bạn sử dụng Pick Path để lấy đường dẫn 3D.
Quét phân đoạn rất hữu ích để tạo khuỷu tay làm việc của ống dẫn cơ khí. Tạo một đường quét phân đoạn bằng cách thiết lập hai tham số quét và phác thảo một
đường dẫn với các vòng cung.
Hình 90: Cài đặt phân đoạn tương ứng trong giao diện người dùng
Machine Translated by Google
Lưu ý Thông tin sau áp dụng cho Quét được phân đoạn:
• Các tham số chỉ ảnh hưởng đến các cung trong đường dẫn.
• Thay đổi lượt quét phân đoạn thành lượt quét không phân đoạn bằng cách bỏ chọn hộp kiểm Phân đoạn quỹ đạo. Thuộc tính
EnableTrajSegmentation trả về false.
• Nếu thuộc tính EnableTrajSegmentation là false, giá trị của MaxSegmentAngle là 360 ° mặc định.
ModelCurve
ModelCurve đại diện cho các dòng mô hình trong dự án. Nó tồn tại trong không gian 3D và hiển thị trong tất cả các chế độ xem.
Các hình ảnh sau minh họa bốn lớp dẫn xuất ModelCurve:
Tạo ModelCurve
Chìa khóa để tạo ModelCurve là tạo Geometry.Curve và SketchPlane nơi đặt Curve. Dựa trên kiểu Geometry.Curve bạn nhập, ModelCurve tương ứng
được trả về có thể được chuyển xuống đúng kiểu của nó.
Mẫu sau minh họa cách tạo đường cong mô hình mới (ModelLine và ModelArc):
9. // Tạo cung hình học trong ứng dụng Revit 10. XYZ end0 =
new XYZ (1, 0, 0); 11. XYZ end1 = new XYZ (10, 10, 10); 12.
XYZ pointOnCurve = new XYZ (10, 0, 0); 13. Arc geomArc =
Arc.Create (end0, end1, pointOnCurve); 14.
15. // Tạo mặt phẳng hình học trong ứng dụng Revit 16. XYZ
origin = new XYZ (0, 0, 0); 17. XYZ normal = new XYZ (1, 1,
0); 18. Plane geomPlane = application.Create.NewPlane (normal,
origin); 19.
20. // Tạo mặt phẳng phác thảo trong tài liệu hiện tại 21.
SketchPlane sketch = SketchPlane.Create (document, geomPlane); 22.
23. // Tạo phần tử ModelLine bằng cách sử dụng đường hình học và mặt phẳng phác thảo đã tạo 24.
ModelLine line = document.Create.NewModelCurve (geomLine, sketch) as ModelLine; 25.
26. // Tạo phần tử ModelArc bằng cách sử dụng cung hình học và mặt phẳng phác thảo đã tạo 27.
ModelArc arc = document.Cree.NewModelCurve (geomArc, sketch) as ModelArc;
GeometryCurve
Thuộc tính GeometryCurve được sử dụng để lấy hoặc thiết lập đường cong hình học của mô hình. Ngoại trừ ModelHermiteSpline, bạn có thể nhận được Geometry.Curves
khác nhau từ bốn ModelCurves;
• Hàng
• Hồ quang
• Hình elip
• Ngoại tuyến.
Mẫu mã sau minh họa cách lấy một Đường cong cụ thể từ ModelCurve.