Paint Method (ElementId, Face, ElementId)


Document Paint(Element Id, Face, Element Id) Method

Paint the element's face with specified material.

Namespace: Autodesk.Revit.DB
Assembly: RevitAPI (in RevitAPI.dll) Version: 25.0.0.0 (25.0.0.0)
Syntax
public void Paint(
	ElementId elementId,
	Face face,
	ElementId materialId
)

Parameters

elementId ElementId
The element that the face belongs to.
face Face
The painted element's face.
materialId ElementId
The material to be painted on the face
Exceptions
Exception Condition
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 belong to the element -or- The materialId doesn't specify a material element. -or- The element's face cannot be painted.
ArgumentNullException A non-optional argument was null
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.
ModificationOutsideTransactionException The document has no open transaction.
Example
// Paint any unpainted faces of a given wall
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);
                }
            }
        }
    }
}
public void ApplyPaintByMaterial(Document document, Wall wall, Material material)
{
   // Before acquiring the geometry, make sure the detail level is set to 'Fine'
   Options geoOptions = new Options();
   geoOptions.DetailLevel = ViewDetailLevel.Fine;

   // Obtain geometry for the given Wall element
   GeometryElement geoElem = wall.get_Geometry(geoOptions);

   // Find a face on the wall
   Face wallFace = null;
   IEnumerator<GeometryObject> geoObjectItor = geoElem.GetEnumerator();
   while (geoObjectItor.MoveNext())
   {
      // need to find a solid first
      Solid theSolid = geoObjectItor.Current as Solid;
      if (null != theSolid)
      {
         // Examine faces of the solid to find one with at least
         // one region. Then take the geometric face of that region.
         foreach (Face face in theSolid.Faces)
         {
            if (face.HasRegions)
            {
               wallFace = face.GetRegions()[0];
               break;
            }
         }
      }
   }

   if (null == wallFace)
   {
      TaskDialog.Show("Failure", "Could not find a face to paint on the given wall.");
      return;
   }

   // Paint material to the wall face (modification must be inside a transaction)

   using (Transaction transaction = new Transaction(document, "Painting a wall"))
   {
      transaction.Start();
      document.Paint(wall.Id, wallFace, material.Id);
      transaction.Commit();
   }

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

   bool isPainted = document.IsPainted(wall.Id, wallFace);
   if (isPainted)
   {
      ElementId paintedMatId = document.GetPaintedMaterial(wall.Id, wallFace);
      if (paintedMatId == material.Id)
      {
         TaskDialog.Show("Painting material", "Wall painted successfully.");
      }
   }
}
See Also