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