簡體   English   中英

如何從 C# 運行內置的 Revit 命令

[英]How can I run built-in Revit commands from C#

我想知道是否有一種方法可以從 C# 程序內部將計算值提供給內置的 Revit 命令,然后可能(基於結果,例如這是否使元素對於已知的元素來說太短或太長特定梁的“最大跨度”)繼續我的 C# 程序並更改梁大小)。 我聽說您可以在執行 c# 外部命令后調用 Revit 內置命令,但之后無法返回到 c# 程序

再舉一個例子,我想選擇一個元素來修剪/延伸到,並讓代碼找出哪個“托梁”梁延伸到這個元素。 我的程序將進行擴展過濾(例如“參考級別”、“工作集”、“評論”或“標記”參數(等)),然后運行內置函數,提供要擴展到的元素,然后我的每一根梁。

我已經嘗試過互聯網搜索以及 Revit SDK 示例,但顯然沒有使用它(但有很多 csproj 需要查看)。

誰能確認您不能在 C# 程序和 Revit 內置命令之間來回切換?

您可以使用 UIApplication.PostCommand() 方法以編程方式調用內置的 Revit 命令。 有關更多信息,請參閱文檔建築編碼器 但是,它會在 API 上下文結束后才會執行。

但是,我認為除了某種 Win32 hack 之外,您無法將參數輸入到命令中。 也許您需要在 Revit API 中重新創建內置命令的功能。

不幸的是,我認為我們不能在這里做(命令“_line”pnt1 pnt2)類型的事情。

也許從 SDK 示例“MoveLinear”開始。 它顯示了如何修改線性元素(包括梁)的端點。

示例代碼的主要部分是

                Autodesk.Revit.DB.Line line;
                //get start point via "get_EndPoint(0)"
                Autodesk.Revit.DB.XYZ newStart = new XYZ(
                    lineLoc.Curve.GetEndPoint(0).X + 100,
                    lineLoc.Curve.GetEndPoint(0).Y,
                    lineLoc.Curve.GetEndPoint(0).Z);
                //get end point via "get_EndPoint(1)"
                Autodesk.Revit.DB.XYZ newEnd = new XYZ(
                    lineLoc.Curve.GetEndPoint(1).X,
                    lineLoc.Curve.GetEndPoint(1).Y + 100,
                    lineLoc.Curve.GetEndPoint(1).Z);
                //get a new line and use it to move current element 
                //with property "Autodesk.Revit.DB.LocationCurve.Curve"
                line = Line.CreateBound(newStart, newEnd);
                lineLoc.Curve = line;

這將第一個點的 X 和第二個點的 Y 移動 100 英尺。

你可以試試:

 RevitCommandId commandId = RevitCommandId.LookupPostableCommandId(PostableCommand.PlaceAComponent);
 commandData.Application.PostCommand(commandId);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM