繁体   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