如何从C#运行内置Revit命令

时间:2014-06-27 17:04:49

标签: c# revit-api

我想知道是否有一种方法可以将计算值从C#程序内部提供给内置的Revit命令,然后可能(根据结果,例如是否使元素太短或太长)对于已知的"特定波束的最大跨度"继续我的C#程序并改变波束大小)。我被告知你可以在执行c#external命令后调用Revit内置命令,但是你不能再返回c#程序

作为另一个例子,我想选择一个要剪裁/扩展的元素,并让代码找出" Joist"梁延伸到这个元素。我的程序会进行扩展过滤(例如"参考级别"或者"工作集"或者"评论"或者" Mark"参数(等)然后运行内置函数,提供扩展到我的每个梁的元素。

我已经尝试过互联网搜索以及Revit SDK示例,并且没有明显的使用过(但有很多csproj要查看)。

任何人都可以验证您是否无法在C#程序和Revit内置命令之间来回切换?

3 个答案:

答案 0 :(得分:3)

您可以使用UIApplication.PostCommand()方法以编程方式调用内置的Revit命令。有关详细信息,请参阅documentationbuilding coder。但是,在API上下文结束之后它才会执行。

我不认为你能够在命令中提供参数,但缺少某种Win32黑客攻击。也许您需要在Revit API中重新创建内置命令的功能。

不幸的是,我认为我们不能在这里做命令(命令“_line”pnt1 pnt2)。

答案 1 :(得分:1)

也许从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英尺。

答案 2 :(得分:0)

您可以尝试:

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