Paint Method (ElementId, Face, FamilyParameter)


Paint the element's face with specified material.

Namespace: Autodesk.Revit.DB
Assembly: RevitAPI (in RevitAPI.dll) Version: 2015.0.0.0 (2015.0.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", BuiltInParameterGroup.PG_MATERIALS, ParameterType.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", BuiltInParameterGroup.PG_MATERIALS, ParameterType.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