Element override material in view


#1

Hi,
I am trying to create a script to easily change an element’s material such as Element.OverrideColorInView But with a material instead of a color.
Any suggestions? Best


#2

To my knowledge you can’t override a material (with another material).

If you have to change an element’s material I would suggest using the paint-option.


#3

I have here an example using a paint method with py. script by René Castillo Picazo.
The only problem with this is that when the element is painted it can’t be painted again without the paint being removed first.

A Removing paint script or a modification of script below would solve the issue.

# Copyright(c) René Castillo Picazo
# México 2017
# cadesigner.mex@gmail.com


import clr

clr.AddReference("RevitAPI")
clr.AddReference("RevitServices")

import Autodesk
import RevitServices

from Autodesk.Revit.DB import *
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager

doc =  DocumentManager.Instance.CurrentDBDocument


surfaces = IN[0]
material = UnwrapElement(IN[1])

def PaintFace(surf, mat):
elemRef = surf.Tags.LookupTag("RevitFaceReference")
elem = doc.GetElement(elemRef)
face = elem.GetGeometryObjectFromReference(elemRef)

if not (doc.IsPainted(elem.Id, face)):
    return doc.Paint(elem.Id, face, mat.Id)
  

TransactionManager.Instance.EnsureInTransaction(doc)

if (isinstance(surfaces, list)):
[PaintFace(j, material) for i in surfaces for j in i]
else:
PaintFace(surfaces, material)              

TransactionManager.Instance.TransactionTaskDone()