Paint the element's face with specified material.
Namespace: Autodesk.Revit.DB
Assembly: RevitAPI (in RevitAPI.dll) Version: 24.0.0.0 (24.0.0.0)
Since:
2014
Syntax
Examples
CopyC#
public void ApplyPaintByMaterialParameter(Document document, Extrusion extrusion, Material material)
{
Face geoFace = null;
using (Transaction transaction = new Transaction(document, "Painting"))
{
transaction.Start();
FamilyManager famMgr = document.FamilyManager;
if (famMgr.Types.Size == 0)
{
FamilyType createdType = famMgr.NewType("New_type");
famMgr.CurrentType = createdType;
}
FamilyParameter materialParam =
famMgr.AddParameter("Material_Para", GroupTypeId.Materials, SpecTypeId.Reference.Material, true);
famMgr.Set(materialParam, material.Id);
Options geoOptions = new Options();
geoOptions.DetailLevel = ViewDetailLevel.Fine;
GeometryElement geoElem = extrusion.get_Geometry(geoOptions);
IEnumerator<GeometryObject> geoObjectItor = geoElem.GetEnumerator();
while (geoObjectItor.MoveNext())
{
Solid theSolid = geoObjectItor.Current as Solid;
if (null != theSolid)
{
foreach (Face face in theSolid.Faces)
{
geoFace = face;
break;
}
}
}
if (null == geoFace)
{
TaskDialog.Show("Failure", "Could not find a face to paint.");
transaction.RollBack();
return;
}
document.Paint(extrusion.Id, geoFace, materialParam);
transaction.Commit();
}
bool isPainted = document.IsPainted(extrusion.Id, geoFace);
if (isPainted)
{
ElementId paintedMatId = document.GetPaintedMaterial(extrusion.Id, geoFace);
if (paintedMatId == material.Id)
{
TaskDialog.Show("Painting material", "Face painted successfully.");
}
}
}
CopyVB.NET
Public Sub ApplyPaintByMaterialParameter(document As Document, extrusion As Extrusion, material As Material)
Dim geoFace As Face = Nothing
Using transaction As New Transaction(document, "Painting")
transaction.Start()
Dim famMgr As FamilyManager = document.FamilyManager
If famMgr.Types.Size = 0 Then
Dim createdType As FamilyType = famMgr.NewType("New_type")
famMgr.CurrentType = createdType
End If
Dim materialParam As FamilyParameter = famMgr.AddParameter("Material_Para", GroupTypeId.Materials, SpecTypeId.Reference.Material, True)
famMgr.[Set](materialParam, material.Id)
Dim geoOptions As New Options()
geoOptions.DetailLevel = ViewDetailLevel.Fine
Dim geoElem As GeometryElement = extrusion.Geometry(geoOptions)
Dim geoObjectItor As IEnumerator(Of GeometryObject) = geoElem.GetEnumerator()
While geoObjectItor.MoveNext()
Dim theSolid As Solid = TryCast(geoObjectItor.Current, Solid)
If theSolid IsNot Nothing Then
For Each face As Face In theSolid.Faces
geoFace = face
Exit For
Next
End If
End While
If geoFace Is Nothing Then
TaskDialog.Show("Failure", "Could not find a face to paint.")
transaction.RollBack()
Return
End If
document.Paint(extrusion.Id, geoFace, materialParam)
transaction.Commit()
End Using
Dim isPainted As Boolean = document.IsPainted(extrusion.Id, geoFace)
If isPainted Then
Dim paintedMatId As ElementId = document.GetPaintedMaterial(extrusion.Id, geoFace)
If paintedMatId = material.Id Then
TaskDialog.Show("Painting material", "Face painted successfully.")
End If
End If
End Sub
Exceptions
See Also