Paint the element's face with specified material.
Namespace: Autodesk.Revit.DB
Assembly: RevitAPI (in RevitAPI.dll) Version: 26.1.0.0 (26.1.0.34)
Syntax
C#
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
C#
// 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); } } } } }
VB
' 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
C#
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."); } } }
VB
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