您的位置:首页 > 其它

关于revit二次开发中,用winform剖切房间进行房间定位的问题

2017-04-30 00:10 363 查看
1.外部事件的添加

revit中的Transaction对象无法非静态对话框中直接进行访问,所以需要定义外部事件来解决该问题

2.获取房间BoundingBoxXYZ

3.剖框显示

核心代码的展示

public class CmdFromForm : IExternalEventHandler  {
private string roomNum;
public string RoomNum
{
get
{
return roomNum;
}
set
{
roomNum = value;
}
}

public void Execute(UIApplication app)
{
//获取当前视图
UIDocument uidoc = app.ActiveUIDocument;
Autodesk.Revit.DB.View view = uidoc.ActiveView;
if (!(view is View3D))
{
TaskDialog.Show("提示", "请转到三维视图");
return;
}
//获取room对象
Room room1 = null;
//获取revit文档
UIDocument uiDoc = app.ActiveUIDocument;
Document revitDoc = uiDoc.Document;

RoomFilter filter = new RoomFilter();
FilteredElementCollector collector = new FilteredElementCollector(revitDoc);
//获取到房间的List
IList<Element> roomElements = collector.WherePasses(filter).ToElements();
List<Autodesk.Revit.DB.Architecture.Room> rooms = new

List<Autodesk.Revit.DB.Architecture.Room>();
foreach (Element room in roomElements)
{
//转化成Room对象
Autodesk.Revit.DB.Architecture.Room room2 = room as

Autodesk.Revit.DB.Architecture.Room;
if (room2.Number == roomNum)
{
room1 = room2;
}
}
View3D view3D = view as View3D;
Transaction tran = new Transaction(view3D.Document,"Cmd From Form");
tran.Start("box change");
//显示剖框
BoundingBoxXYZ boundingBox = view3D.GetSectionBox();
if (!boundingBox.Enabled)
{
boundingBox.Enabled = true;
}

//获取revit中的剖框
BoundingBoxXYZ newBox = room1.get_BoundingBox(view3D);
view3D.SetSectionBox(newBox);
tran.Commit();
}

public string GetName()
{
throw new NotImplementedException();
}
}


在外部winform进行调用

//在winform中访问调用外部事件
public class MyForm :Form{
private ExternalEvent handler;
private CmdFromForm cff;
public MyForm(//...这里省略参数){
InitializeComponent();
cff = new CmdFromForm();
handler = ExternalEvent.Create(cff);
}
public void button1_click(){
handler.Raise();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: