前言
自己研究了一圈材质之后,在官方文档里面翻了一下,发现也有一些介绍,整理一下。
我研究的参考:
Revit API: Material 材质
Revit API: 材质- 参考官方文档(一)
Revit API: 材质- 参考官方文档(二)
内容
参考:
Material quantities
Painting the Face of an Element
获取材质(体积、面积)
如果构件所属的类别,它的属性 Category.HasMaterialQuantities
有效,那么这些 Element
中的函数可以使用:
// 得到当前构件所用的材质
public ICollection<ElementId> GetMaterialIds(bool returnPaintMaterials);
// 得到指定材质的面积
public double GetMaterialArea(ElementId materialId, bool usePaintMaterial);
// 得到指定材质的体积
public double GetMaterialVolume(ElementId materialId);
Category.HasMaterialQuantities
有效,对应的构件有限,包括几类:
使用了 compound structure 的构件,比如 walls, roofs, floors, ceilings
, 一些基于三维的构件比如 stairs
, 另外还有一些三维的族,它们的材质也可以被应用到几何上,比如 windows, doors, columns, MEP equipment, fixtures
, 和 generic model families
。
另外,获取的面积和体积在某些情况下可能会有偏差,比如某些情况下的墙连接,或者在墙上加了 sweep 或者 reveal。
填色
Revit API:
// Document::Paint
public void Paint(
ElementId elementId,
Face face,
ElementId materialId
)
UI 入口:
例子:
public void PaintWallFaces(Wall wall, ElementId matId)
{
Document doc = wall.Document;
GeometryElement geometryElement = wall.get_Geometry(new Options());
foreach (GeometryObject geometryObject in geometryElement)
{
if (geometryObject is Solid)
{
Solid solid = geometryObject as Solid;
foreach (Face face in solid.Faces)
{
if (doc.IsPainted(wall.Id, face) == false)
{
doc.Paint(wall.Id, face, matId);
}
}
}
}
}