Revit 2025 API
DocumentPaint(Element |
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 )
Public Sub Paint ( elementId As ElementId, face As Face, familyParameter As FamilyParameter )
public: void Paint( ElementId^ elementId, Face^ face, FamilyParameter^ familyParameter )
member Paint : elementId : ElementId * face : Face * familyParameter : FamilyParameter -> unit
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.
| 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. |
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."); } } }
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
No code example is currently available or this language may not be supported.
No code example is currently available or this language may not be supported.
See Also