Revit二次开发之墙体上创建门实例

mac2025-01-26  32

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Autodesk.Revit.DB; using Autodesk.Revit.UI; using Autodesk.Revit.Attributes; using Autodesk.Revit.UI.Selection; namespace ClassLibrary1 { [Autodesk.Revit.Attributes.Transaction(TransactionMode.Manual)] [Autodesk.Revit.Attributes.Regeneration(RegenerationOption.Manual)] public class GetElement : IExternalCommand { public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) { UIDocument uidoc = commandData.Application.ActiveUIDocument; Document doc = uidoc.Document; Selection selection = uidoc.Selection; #region 墙上创建门 //需要用户选择一个门和一堵墙来实现在墙上创建门的操作,门创建在墙体的正中间 Reference ref_wall = selection.PickObject(ObjectType.Element, "请选择一堵墙"); Wall host_wall = (doc.GetElement(ref_wall)) as Wall; //用户选择一个门 Reference ref_door = selection.PickObject(ObjectType.Element, "请选择一扇门"); FamilyInstance door = (doc.GetElement(ref_door)) as FamilyInstance; FamilySymbol fmSymbol = door.Symbol; FilteredElementCollector collector = new FilteredElementCollector(doc); collector.OfCategory(BuiltInCategory.OST_Levels).Where(m => m.Name == "Level 1"); Level level = (collector.First()) as Level; //获取用户选择的墙体中间点 LocationCurve lc = host_wall.Location as LocationCurve; XYZ p1 = lc.Curve.GetEndPoint(0); XYZ p2 = lc.Curve.GetEndPoint(1); XYZ middle_point_wall = (p1 + p2) / 2; using (Transaction ts = new Transaction(doc)) { ts.Start("在墙上创建门实例"); FamilyInstance fmInstance = doc.Create.NewFamilyInstance(middle_point_wall, fmSymbol, host_wall, level, Autodesk.Revit.DB.Structure.StructuralType.NonStructural); ts.Commit(); } TaskDialog.Show("title", "创建成功!"); #endregion return Result.Succeeded; } } }

 

最新回复(0)