Paint Method (ElementId, Face, FamilyParameter)


Document Paint(Element Id, Face, Family Parameter) 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,
	FamilyParameter familyParameter
)

Parameters

elementId ElementId
The element that the face belongs to.
face Face
The painted element's face.
familyParameter FamilyParameter
The family parameter associated with a material.
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 belongs to the element. -or- The family parameter doesn't specify a material element. -or- The element's face cannot be painted.
ArgumentNullException A non-optional argument was NULL
InvalidOperationException This document is not modifiable. -or- This operation is valid only in family.
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
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.");
      }
   }
}
See Also