在revit中C#写的在当前平面鼠标选取任意点创建当前平面到上层平面的结构柱的代码可以创建多个结构柱直到用户使用esc退出
以下是一个实现此功能的C#代码示例:
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using Autodesk.Revit.UI.Selection;
public void CreateStructuralColumns()
{
// 获取当前文档和UI应用程序对象
UIDocument uidoc = this.ActiveUIDocument;
Document doc = uidoc.Document;
UIApplication uiapp = uidoc.Application;
// 获取当前视图对象和视图平面
View activeView = doc.ActiveView;
Plane activePlane = activeView.SketchPlane.GetPlane();
// 创建选择器对象,用于选择用户选取的点
Selection sel = uidoc.Selection;
XYZ startPoint = null;
XYZ endPoint = null;
// 循环创建结构柱,直到用户按下ESC键
while (true)
{
try
{
// 提示用户选择起点
startPoint = sel.PickPoint("Select start point for column");
if (startPoint == null) break; // 如果用户取消操作,则退出循环
// 提示用户选择终点
endPoint = sel.PickPoint("Select end point for column");
if (endPoint == null) break; // 如果用户取消操作,则退出循环
// 根据起点和终点创建结构柱
Line columnLine = Line.CreateBound(startPoint, endPoint);
doc.Create.NewFamilyInstance(columnLine, GetColumnFamilySymbol(doc), activeView);
// 将视图平面设置为新创建结构柱的上方平面
activePlane = new Plane(endPoint, activePlane.Normal);
activeView.SketchPlane = SketchPlane.Create(doc, activePlane);
}
catch (OperationCanceledException)
{
// 用户按下ESC键
break;
}
}
}
private FamilySymbol GetColumnFamilySymbol(Document doc)
{
// 获取结构柱族类型
FilteredElementCollector collector = new FilteredElementCollector(doc);
collector.OfCategory(BuiltInCategory.OST_StructuralColumns);
collector.OfClass(typeof(FamilySymbol));
FamilySymbol familySymbol = collector.FirstElement() as FamilySymbol;
return familySymbol;
}
原文地址: https://www.cveoy.top/t/topic/bpZl 著作权归作者所有。请勿转载和采集!