Revit二次开发之“墙体开洞NewOpening”
来源:互联网 发布:网络作家梦九重资料 编辑:程序博客网 时间:2024/04/29 03:09
墙体开洞的函数是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;
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;
}
}
}
- Revit二次开发之“墙体开洞NewOpening”
- Revit二次开发之创建双坡式屋顶及在屋顶开洞口【比目鱼原创】
- Revit二次开发之入门
- Building Coder(Revit 二次开发) - 使用 FindReferencesByDirection 创建墙体之间的尺寸标注
- Building Coder(Revit 二次开发) - 创建与墙体平行的剖视图
- Revit二次开发之“族”操作
- Revit二次开发之“族”操作
- revit二次开发之单位转换
- Revit API之在墙或者屋顶上开洞口【比目鱼原创】
- Revit 二次开发
- Revit二次开发之“创建窗体执行Revit命令”
- Revit二次开发之Revit事务模式(TransactionMode)【比目鱼原创】
- Revit二次开发之如何选取Revit元素【比目鱼原创】
- Revit二次开发之向Revit窗体发送虚拟按键
- Revit二次开发之ISelectionFilter 接口的用法
- Revit 二次开发之安装包的制作
- Revit二次开发之可停靠窗口
- Revit二次开发之Parameter单位转换
- vc++中字体对话框的创建
- 随心之想1
- 路由软件Quagga安装教程
- 视频: Sencha Touch - Intro to List Component
- 网上找的有关病毒的知识
- Revit二次开发之“墙体开洞NewOpening”
- 1064 Financial Management
- Excel中相对引用和绝对引用的讨论
- 格式控制符参考
- WCF Note2 (WCF Security)
- 1076 An Easy Task
- 安装pthread的manpages(man 手册)ubuntu 10.04
- android 真机调试
- 最新的时空数据处理文章汇总