第一步:
写代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Autodesk.Revit.UI;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI.Selection;
namespace ClassLibrary3
{
[Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Automatic)]
public class Class1:IExternalCommand
{
public Result Execute(ExternalCommandData revit, ref string message, ElementSet elements)
{
try
{
//执行前先选择一些元素
//取到当前文档
UIDocument uidoc = revit.Application.ActiveUIDocument;
//取到当前文档的选择集
Selection selection = uidoc.Selection;
//因为API版本的变化,所以这里不能直接获取到元素了
//查到了一篇很好的文章附网址:https://www.jianshu.com/p/a774cd7ebc07
//ElementSet collection = selection.Elements;
ElementSet collection = new ElementSet();
foreach(ElementId elementId in uidoc.Selection.GetElementIds())
{
collection.Insert(uidoc.Document.GetElement(elementId));
}
if ( 0 == collection.Size)
{
//如果执行前,没有选择元素
TaskDialog.Show("Revit", "你没选元素");
}
else
{
string info = "所选的元素类型为:";
foreach(Element elem in collection)
{
info += "\n\t" + elem.GetType().ToString();
}
TaskDialog.Show("Revit", info);
}
}
catch(Exception e)
{
message = e.Message;
return Result.Failed;
}
return Result.Succeeded;
}
}
}
这次因为调用的是 IExternalCommand 所以需要注意一下的就是在 写 addin 文件的时候 需要在类型上写 Command
其中有一个问题是,因为API版本更新的原因,有一个函数是不能直接使用了
贴出一个解决方案的网址链接:https://www.jianshu.com/p/a774cd7ebc07
现在不能直接选取元素,只能选取到元素的ID,然后再通过
uidoc.Document.GetElement(elementId)
找到对应的元素
第二步:
检验效果
完成!