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;
}
}
}