我想知道是否有一种方法可以将计算值从C#程序中输入到内置的Revit命令中,然后可能(根据结果,例如这是否会使图元对于特定梁的已知“最大跨度”而言太短或太长),继续我的C#程序并修改梁尺寸)。有人告诉我,您可以在执行c#外部命令后调用Revit内置命令,但之后就无法返回到c#程序
作为另一个示例,我希望选择一个要修剪/延伸的元素,并让代码确定要将哪个"Joist“梁延伸到该元素。我的程序将执行扩展过滤(例如"Reference Level“、"Workset”、"Comments“或"Mark”参数(等))然后运行内置函数,提供要延伸到的元素,然后是我的每个梁。
我已经尝试了互联网搜索,以及Revit SDK示例,显然没有使用它(但有很多csproj要查看)。
是否有人可以确认您不能在C#程序和Revit内置命令之间来回切换?
发布于 2014-06-28 02:38:43
可以使用UIApplication.PostCommand()方法以编程方式调用内置的Revit命令。有关更多信息,请参阅documentation和building coder。但是,在API上下文结束之前,它不会执行。
但是,我不认为您能够将参数提供给命令,除非是某种Win32攻击。您可能需要在Revit API中重新创建内置命令的功能。
不幸的是,我不认为我们可以在这里做(command "_line“pnt1 pnt2)类型的事情。
发布于 2015-10-01 13:03:22
也许可以从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英尺。
发布于 2020-12-03 00:42:37
您可以尝试:
RevitCommandId commandId = RevitCommandId.LookupPostableCommandId(PostableCommand.PlaceAComponent);
commandData.Application.PostCommand(commandId);https://stackoverflow.com/questions/24457237
复制相似问题