Paint Method (ElementId, Face, FamilyParameter)


Paint the element's face with specified material.

Namespace: Autodesk.Revit.DB
Assembly: RevitAPI (in RevitAPI.dll) Version: 22.0.0.0 (22.1.0.0)
Since: 2014

Syntax

C#
public void Paint(
	ElementId elementId,
	Face face,
	FamilyParameter familyParameter
)
Visual Basic
Public Sub Paint ( _
	elementId As ElementId, _
	face As Face, _
	familyParameter As FamilyParameter _
)
Visual C++
public:
void Paint(
	ElementId^ elementId, 
	Face^ face, 
	FamilyParameter^ familyParameter
)

Parameters

elementId
Type: Autodesk.Revit.DB ElementId
The element that the face belongs to.
face
Type: Autodesk.Revit.DB Face
The painted element's face.
familyParameter
Type: Autodesk.Revit.DB FamilyParameter
The family parameter associated with a material.

Examples

Copy C#
public void ApplyPaintByMaterialParameter(Document document, Extrusion extrusion, Material material)
{
   Face geoFace = null;

   using (Transaction transaction = new Transaction(document, "Painting"))
   {
      transaction.Start();

      // create a new type and material parameter in the document.
      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);

      // Before acquiring the geometry, make sure the detail level is set to 'Fine'
      Options geoOptions = new Options();
      geoOptions.DetailLevel = ViewDetailLevel.Fine;

      // Find the first geometry face of the given extrusion object
      GeometryElement geoElem = extrusion.get_Geometry(geoOptions);
      IEnumerator<GeometryObject> geoObjectItor = geoElem.GetEnumerator();
      while (geoObjectItor.MoveNext())
      {
         // need to find a solid first
         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;
      }

      // Paint a material family parameter to the extrusion face.
      document.Paint(extrusion.Id, geoFace, materialParam);
      transaction.Commit();
   }

   // For illustration purposes only, check if the painted material indeed got applied

   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.");
      }
   }
}
Copy VB.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()

        ' create a new type and material parameter in the document.
        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)

        ' Before acquiring the geometry, make sure the detail level is set to 'Fine'
        Dim geoOptions As New Options()
        geoOptions.DetailLevel = ViewDetailLevel.Fine

        ' Find the first geometry face of the given extrusion object
        Dim geoElem As GeometryElement = extrusion.Geometry(geoOptions)
        Dim geoObjectItor As IEnumerator(Of GeometryObject) = geoElem.GetEnumerator()
        While geoObjectItor.MoveNext()
            ' need to find a solid first
            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

        ' Paint a material family parameter to the extrusion face.
        document.Paint(extrusion.Id, geoFace, materialParam)
        transaction.Commit()
    End Using

    ' For illustration purposes only, check if the painted material indeed got applied


    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

Exception Condition
Autodesk.Revit.Exceptions ArgumentException The element elementId does not exist in the document. -or- The element materialId does not exist in the document. -or- The face doesn't belongs to the element. -or- The family parameter doesn't specify a material element. -or- The element's face cannot be painted.
Autodesk.Revit.Exceptions ArgumentNullException A non-optional argument was NULL
Autodesk.Revit.Exceptions InvalidOperationException This document is not modifiable. -or- This operation is valid only in family.
Autodesk.Revit.Exceptions ModificationForbiddenException The document is in failure mode: an operation has failed, and Revit requires the user to either cancel the operation or fix the problem (usually by deleting certain elements). -or- The document is being loaded, or is in the midst of another sensitive process.
Autodesk.Revit.Exceptions ModificationOutsideTransactionException The document has no open transaction.

See Also

ArchiLabs

Stop fighting Revit automation.

Build repeatable BIM design and documentation workflows with scripts, data, and AI in one place, without wrestling brittle one-off automations.

Try ArchiLabs →