Paint the element's face with specified material.
Namespace:
Autodesk.Revit.DB
Assembly:
RevitAPI
(in RevitAPI.dll) Version: 17.0.0.0 (17.0.484.0)
Since:
2014
Syntax
C# |
---|
|
Visual Basic |
---|
|
Visual C++ |
---|
|
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.
- materialId
-
Type:
Autodesk.Revit.DB
ElementId
The material to be painted on the face
Examples

// 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.");
}
}
}

' Paint any unpainted faces of a given wall
Public Sub PaintWallFaces(wall As Wall, matId As ElementId)
Dim doc As Document = wall.Document
Dim geometryElement As GeometryElement = wall.Geometry(New Options())
For Each geometryObject As GeometryObject In geometryElement
If TypeOf geometryObject Is Solid Then
Dim solid As Solid = TryCast(geometryObject, Solid)
For Each face As Face In solid.Faces
If doc.IsPainted(wall.Id, face) = False Then
doc.Paint(wall.Id, face, matId)
End If
Next
End If
Next
End Sub

Public Sub ApplyPaintByMaterial(document As Document, wall As Wall, material As Material)
' Before acquiring the geometry, make sure the detail level is set to 'Fine'
Dim geoOptions As New Options()
geoOptions.DetailLevel = ViewDetailLevel.Fine
' Obtain geometry for the given Wall element
Dim geoElem As GeometryElement = wall.Geometry(geoOptions)
' Find a face on the wall
Dim wallFace As Face = Nothing
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
' Examine faces of the solid to find one with at least
' one region. Then take the geometric face of that region.
For Each face As Face In theSolid.Faces
If face.HasRegions Then
wallFace = face.GetRegions()(0)
Exit For
End If
Next
End If
End While
If wallFace Is Nothing Then
TaskDialog.Show("Failure", "Could not find a face to paint on the given wall.")
Return
End If
' Paint material to the wall face (modification must be inside a transaction)
Using transaction As New Transaction(document, "Painting a wall")
transaction.Start()
document.Paint(wall.Id, wallFace, material.Id)
transaction.Commit()
End Using
' For illustration purposes only, check if the painted material indeed got applied
Dim isPainted As Boolean = document.IsPainted(wall.Id, wallFace)
If isPainted Then
Dim paintedMatId As ElementId = document.GetPaintedMaterial(wall.Id, wallFace)
If paintedMatId = material.Id Then
TaskDialog.Show("Painting material", "Wall 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 belong to the element -or- The materialId 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 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. |