1.Revit API的交互方式有以下两种:
(1)先选择元素,再执行命令。
(2)先执行命令,再选择元素。
2.选择的方式有以下几种:
(1)单选:只能选取一个元素
(2)多选:可以选择多个元素
(3)框选:选取一定范围内的元素
(4)选点:选择试图中的一个坐标点
下面我们演示一下怎么选择元素,这里用API的第一种交互方式来演示:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Data;
using Autodesk.Revit;
using Autodesk.Revit.UI;
using Autodesk.Revit.UI.Selection;
using Autodesk.Revit.DB;
using Autodesk.Revit.DB.Architecture;
namespace zpx
{
[Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)]
[Autodesk.Revit.Attributes.Regeneration(Autodesk.Revit.Attributes.RegenerationOption.Manual)]
[Autodesk.Revit.Attributes.Journaling(Autodesk.Revit.Attributes.JournalingMode.NoCommandData)]
public class HelloRevit : IExternalCommand
{
public Autodesk.Revit.UI.Result Execute(ExternalCommandData commandData, ref string message, Autodesk.Revit.DB.ElementSet elements)
{
//创建应用程序对象
Autodesk.Revit.ApplicationServices.Application app = commandData.Application.Application;
//创建文档对象
Autodesk.Revit.DB.Document doc = commandData.Application.ActiveUIDocument.Document;
//创建应用程序对象
Autodesk.Revit.UI.UIApplication uiapp = commandData.Application;
//创建文档对象
Autodesk.Revit.UI.UIDocument uiDoc = uiapp.ActiveUIDocument;
//开始事务
Transaction ts = new Transaction(doc, "HelloRevit");
ts.Start();
Selection selection = uiDoc.Selection;
ICollection<ElementId> selectedIds = uiDoc.Selection.GetElementIds();
if (0 == selectedIds.Count)
{
//如果选中的构件数量为0既没选中任何构件。
TaskDialog.Show("Revit", "你没有选择任何元素");
}
else
{
String info = "所选择的元素ID为: ";
foreach (ElementId id in selectedIds)
{
info += "\n\t" + id.IntegerValue;
}
TaskDialog.Show("Revit", info);
}
ts.Commit();
return Result.Succeeded;
}
}
}
然后我们调试代码,要先选中构件再运行。
运行结果为:
大家看网上的其他教程或者参考卢石碧先生写的那本《Revit二次开发基础教程》的时候会发现和我这有出入,他们是这么写的
然后你会发现这里会提示
一般情况下这种提示首先想到是不是缺少引用,但这里是因为Revit版本变动而它开放的API也在变动,这种写法是Revit2014版本的API写法,只要你用的版本是2015版及以上,他就已经改变了API的写法。
很多人到这可能都会有疑问,那我怎么知道它的API变动了啊,小编这就给新手们提供一个方法,那就是去查阅RevitAPI这个文件。
打开RevitAPI通过检索去查看所有开放的API是目前最好最快速的办法
通过这可以看到所有你想知道的东西哦!
下面演示如何通过框选来选择构件
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Data;
using Autodesk.Revit;
using Autodesk.Revit.UI;
using Autodesk.Revit.UI.Selection;
using Autodesk.Revit.DB;
using Autodesk.Revit.DB.Architecture;
namespace zpx
{
[Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)]
[Autodesk.Revit.Attributes.Regeneration(Autodesk.Revit.Attributes.RegenerationOption.Manual)]
[Autodesk.Revit.Attributes.Journaling(Autodesk.Revit.Attributes.JournalingMode.NoCommandData)]
public class HelloRevit : IExternalCommand
{
public Autodesk.Revit.UI.Result Execute(ExternalCommandData commandData, ref string message, Autodesk.Revit.DB.ElementSet elements)
{
//创建应用程序对象
Autodesk.Revit.ApplicationServices.Application app = commandData.Application.Application;
//创建文档对象
Autodesk.Revit.DB.Document doc = commandData.Application.ActiveUIDocument.Document;
//创建应用程序对象
Autodesk.Revit.UI.UIApplication uiapp = commandData.Application;
//创建文档对象
Autodesk.Revit.UI.UIDocument uiDoc = uiapp.ActiveUIDocument;
//开始事务
Transaction ts = new Transaction(doc, "HelloRevit");
ts.Start();
Selection selection = uiDoc.Selection;
ICollection<Element> selectedIds = uiDoc.Selection.PickElementsByRectangle();
if (0 == selectedIds.Count)
{
// 如果没有选择构件.
TaskDialog.Show("Revit", "你没有选择任何元素");
}
else
{
String info = "所选择的元素名称为: ";
foreach (Element id in selectedIds)
{
info += "\n\t" + id.GetParameters("族")[0].AsValueString().ToString();
}
TaskDialog.Show("Revit", info);
}
ts.Commit();
return Result.Succeeded;
}
}
}
一般会这两种常用的选择方法,在平时的大多数Revit二次开发中都是没问题的哦。下面我们来看演示结果:运行之后需要鼠标框选构件
完成框选后释放鼠标就会弹出对话框
这里的代码都是公开给各位的,粘贴过来可能会出现格式变化,如果截图的话,不方便大家复制代码,请大家理解。
一纸清墨书过往,谁人勘破这离殇。
精讲Revit二次开发,望与君交。