到目前为止,我已经编写了C#代码,以允许用户在revit中选择模型的多个部分,并且它将发布所选元素的ID。我现在想通过两种方式对此进行调整:
1,检查所选元素是否为房间。 (有一个房间标签),所以我只能在房间里工作。
2,发布房间的面积,而不只是元素的ID。
我对C#和Revit API还是很陌生,因此,感谢任何朝正确方向的推动。
我当前的代码:
using System;
using System.Collections.Generic;
using Autodesk.Revit.ApplicationServices;
using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using Autodesk.Revit.UI.Selection;
using System.Linq;
using System.Text;
namespace HelloWorld
{
[Transaction(TransactionMode.Manual)]
public class Class1 : IExternalCommand
{
public Result Execute(
ExternalCommandData commandData,
ref string message,
ElementSet elements)
{
UIApplication uiapp = commandData.Application;
UIDocument uidoc = uiapp.ActiveUIDocument;
Application app = uiapp.Application;
Document doc = uidoc.Document;
IList<Reference> pickedObjs = uidoc.Selection.PickObjects(ObjectType.Element, "Select elements");
List<ElementId> ids = (from Reference r in pickedObjs select r.ElementId).ToList();
using (Transaction tx = new Transaction(doc))
{
StringBuilder sb = new StringBuilder();
tx.Start("transaction");
if (pickedObjs != null && pickedObjs.Count > 0)
{
foreach (ElementId eid in ids)
{
Element e = doc.GetElement(eid);
sb.Append("/n" +e.Name);
}
TaskDialog.Show("Area Calculator", sb.ToString());
}
tx.Commit();
}
return Result.Succeeded;
}
}
}
答案 0 :(得分:0)
如果您不熟悉Revit API,那么我建议从GitHub获取最新版本的RevitLookup,将其部署到Revit上并开始使用它。它将帮助您确定可以使用哪些Revit API对象来使工具正常工作。
根据您当前的问题。要找出给定的元素是否是房间:
Room room = e as Room;
if (room!=null) ... ; //then you know it's a Room
或者:
if (e is Room) ... ; //then you know it's a Room
第二部分:要查询元素的参数,您要编写:
Parameter par = e.get_Parameter(BuiltInParameter.ROOM_AREA);
string valSting = par.AsValueString();
double valDouble = par.AsDouble(); //mind the value is in native Revit units, not project units. So square feet in this case
您也可以使用par = e.LookupParameter("Area");
,但是如果使用系统参数,最好使用内置枚举来引用它们(例如,因为它们是语言证明)
通常,我会为MEP开发工具和宏,这些都是我使用RevitLookup插件在10秒内发现的。 :)
答案 1 :(得分:0)
如果您只想允许人们使用Room
,那么为什么不将ISelectionFilter
添加到选择工具,而只允许他们选择要开始的房间。然后,您不必检查所有对象。这是有关创建选择过滤器的更多信息。
干杯!