Revit二次开发之“墙体开洞NewOpening”
墙体开洞的函数是Document.Create.NewOpening(Wall,XYZ,XYX);
但是这里有个技巧就是如何选取墙上的两点。
添加一个墙的过滤条件。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using WinForm = System.Windows.Forms;
using Autodesk.Revit.UI;
using Autodesk.Revit.DB;
using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB.Mechanical;
using Autodesk.Revit.UI.Selection;
using RevitApp = Autodesk.Revit.ApplicationServices;
using System.Xml;
namespace RevitCodes
{
class WallSelectionFilter : ISelectionFilter
{
public bool AllowElement(Element e)
{
return e is Wall;
}
public bool AllowReference(Reference r, XYZ p)
{
return true;
}
}
[Transaction(TransactionMode.Manual)]
[Regeneration(RegenerationOption.Manual)]
public class cmdCreateOpening : IExternalCommand
{
public Result Execute(ExternalCommandData cmdData, ref string msg, ElementSet elements)
{
UIApplication uiApp = cmdData.Application;
Document doc = uiApp.ActiveUIDocument.Document;
Selection sel = uiApp.ActiveUIDocument.Selection;
Transaction ts = new Transaction(doc, "opening");
ts.Start();
Wall wall = doc.GetElement(sel.PickObject(ObjectType.Element, "请选择一面墙。")) as Wall;
WallSelectionFilter f = new WallSelectionFilter();
XYZ pt1 = sel.PickObject(ObjectType.Element, f, "请选择墙上第一点。").GlobalPoint;
XYZ pt2 = sel.PickObject(ObjectType.Element, f, "请选择墙上第二点。").GlobalPoint;
doc.Create.NewOpening(wall, pt1, pt2);
ts.Commit();
return Result.Succeeded;
}
}
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
using WinForm = System.Windows.Forms;
using Autodesk.Revit.UI;
using Autodesk.Revit.DB;
using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB.Mechanical;
using Autodesk.Revit.UI.Selection;
using RevitApp = Autodesk.Revit.ApplicationServices;
using System.Xml;
namespace RevitCodes
{
class WallSelectionFilter : ISelectionFilter
{
public bool AllowElement(Element e)
{
return e is Wall;
}
public bool AllowReference(Reference r, XYZ p)
{
return true;
}
}
[Transaction(TransactionMode.Manual)]
[Regeneration(RegenerationOption.Manual)]
public class cmdCreateOpening : IExternalCommand
{
public Result Execute(ExternalCommandData cmdData, ref string msg, ElementSet elements)
{
UIApplication uiApp = cmdData.Application;
Document doc = uiApp.ActiveUIDocument.Document;
Selection sel = uiApp.ActiveUIDocument.Selection;
Transaction ts = new Transaction(doc, "opening");
ts.Start();
Wall wall = doc.GetElement(sel.PickObject(ObjectType.Element, "请选择一面墙。")) as Wall;
WallSelectionFilter f = new WallSelectionFilter();
XYZ pt1 = sel.PickObject(ObjectType.Element, f, "请选择墙上第一点。").GlobalPoint;
XYZ pt2 = sel.PickObject(ObjectType.Element, f, "请选择墙上第二点。").GlobalPoint;
doc.Create.NewOpening(wall, pt1, pt2);
ts.Commit();
return Result.Succeeded;
}
}
}
我这个博客废弃不用了,今天想寻找外链的时候,突然想到这个博客权重很高。
有需要免费外链的,留言即可,我准备把这个博客变成免费的友情链接站点。