[摘要] 用lookup查看材料很具有误导性。找半天才找出原因,要想找到全部材料必须通过CompoundStructureLayer来查找。附上代码(两种找材料的方
用lookup查看材料很具有误导性。
找半天才找出原因,要想找到全部材料必须通过CompoundStructureLayer来查找。
附上代码(两种找材料的方式):
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;
using Autodesk.Revit.ApplicationServices;
namespace 读取材料
{
[Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)]
[Autodesk.Revit.Attributes.Journaling(Autodesk.Revit.Attributes.JournalingMode.NoCommandData)]
[Autodesk.Revit.Attributes.Regeneration(Autodesk.Revit.Attributes.RegenerationOption.Manual)]
public class Class1 : IExternalCommand
{
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
Document revitDoc = commandData.Application.ActiveUIDocument.Document; //取得文档
Application revitApp = commandData.Application.Application; //取得应用程序
UIDocument uiDoc = commandData.Application.ActiveUIDocument;
Selection sel = uiDoc.Selection;
Reference ref1 = sel.PickObject(ObjectType.Element, “选择一个族实例”);
Element elem = revitDoc.GetElement(ref1);
Wall wall = elem as Wall;
ICollection<ElementId> matId = elem.GetMaterialIds(true);
#region 从elementId中获得材料,这种方法获得的是主材
//foreach (var item in matId)
//{
// TaskDialog.Show(“REVIT”, item.ToString());
// Material mat2 = revitDoc.GetElement(item) as Material; //从elementId中获得材料
//}
#endregion
#region 从CompoundStructureLayer中获得材料,这种方法可以获得与该元素相关的全部材料
WallType wallType = wall.WallType;
CompoundStructure compoundStructure = wallType.GetCompoundStructure();
IList<CompoundStructureLayer> layers = compoundStructure.GetLayers();
foreach(var item in layers)
{
TaskDialog.Show(“revit”,item.MaterialId.ToString());
}
#endregion
return Result.Succeeded;
}
}
}