Expected Color, Got Color Error?

Hello

I keep getting the error Expected Color, Got Color.

Here’s my Code:
WIP View Filters Create From Filled Regions.dyn (24.6 KB)

        import clr
        clr.AddReference("RevitServices")
        import RevitServices
        from RevitServices.Persistence import DocumentManager
        from RevitServices.Transactions import TransactionManager
        doc = DocumentManager.Instance.CurrentDBDocument
        clr.AddReference("RevitAPI")
        import Autodesk
        from Autodesk.Revit.DB import *
        import System
        from System.Collections.Generic import *
        clr.AddReference('DSCoreNodes')
        import DSCore
        from DSCore import Color

        dataEnteringNode = IN

        view = UnwrapElement(IN[0])
        cats = IN[1]
        rules = IN[2]
        filterNames = IN[3]
        colours = IN[4]
        regionTypes = IN[5]
        	
        TransactionManager.Instance.EnsureInTransaction(doc)

        catList = []
        for i in cats:
        	catList.append(ElementId(i.Id))

        typedCatList = List[ElementId](catList)

        ruleList = []
        for i in rules:
        	ruleList.append(i)

        #Watch out! The Rule must be in a list for ParameterFilterElement to work!
        filterList = []
        #a = []
        for i in filterNames:
        	#a.append(i)
            filterList.append(i)
            #a.Clear
            
        #colourList = []
        #for col in colours:
        	#colourList.append(col)
        	#colourList.append(DSCore.Color.ByARGB(255, col.Red, col.Green, col.Blue))
        	#rgb = DSCore.Color.ByARGB(255, col.Red, col.Green, col.Blue)

        colourList = []
        for region in regionTypes:
        	#colourList.append(DSCore.Color.ByARGB(255, region.Color.Red, region.Color.Green, region.Color.Blue)
        	colourList.append(region.Color)
        	
        #we use a Try here because if the filter exists an exception will occur
        #try:
        for i in range(len(filterList)):
        	tempList = []
        	tempList.append(ruleList[i])
        	filter = ParameterFilterElement.Create(doc, filterList[i], typedCatList, tempList)
        	tempList.Clear()
           	view.AddFilter(filter.Id)
        	#create the override settings
        	#v.SetFilterOverrides(f, OverrideGraphicSettings().SetProjectionLineColor(Color(newCol[0], newCol[1], newCol[2])))
        	ogs = OverrideGraphicSettings()
        	ogs.SetCutLineColor(colourList[i]).SetProjectionFillColor(colourList[i]).SetProjectionFillColor(colourList[i]).SetProjectionFillPatternId(ElementId(100))
        	view.SetFilterOverrides(filter.Id, ogs)
        #except:
            #pass 

        TransactionManager.Instance.TransactionTaskDone()

        OUT = filterList

When you ask Unwrapped RegionType object for a Color property I recon, it might just return a DSColor object. What you want to do is convert that to Autodesk.Revit.DB.Color object. I would just change this line:

colourList.append(Autodesk.Revit.DB.Color(region.Color.R, region.Color.G, region.Color.B,))

It might just be easier to Unwrap the RegionType object to native Revit element and then ask it for a color like so:

colourList.append(UnwrapElement(region).Color)

This might just return a Revit Color object.

Cheers!

1 Like

Hi Konrad

I tried to give it a whirl but another error is preventing the Graph to run. The error says “Unexpected Token ‘;’”

import clr<img src="//cdck-file-uploads-global.s3.dualstack.us-west-2.amazonaws.com/business6/uploads/dynamobim/original/3X/2/5/25d016a7a092dfe7b6454b6075db1b28ebd8734e.JPG" width="336" height="451">
clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument
clr.AddReference("RevitAPI")
import Autodesk
from Autodesk.Revit.DB import *
import System
from System.Collections.Generic import *
clr.AddReference('DSCoreNodes')
import DSCore
from DSCore import Color

dataEnteringNode = IN

view = UnwrapElement(IN[0])
cats = IN[1]
rules = IN[2]
filterNames = IN[3]
coloursRed = IN[4]
coloursGreen = IN[5]
coloursBlue = IN[6]
regions = IN[7]

TransactionManager.Instance.EnsureInTransaction(doc)

catList = []
for i in cats:
	catList.append(ElementId(i.Id))

typedCatList = List[ElementId](catList)

ruleList = []
for i in rules:
	ruleList.append(i)

#Watch out! The Rule must be in a list for ParameterFilterElement to work!
filterList = []
#a = []
for i in filterNames:
	#a.append(i)
	filterList.append(i)
    #a.Clear
 
#colourList = []
#for region in regions:
 	#colourList.append(UnwrapElement(region).Color)
 	#colourList.append(Autodesk.Revit.DB.Color(region.Color.R, #region.Color.G, region.Color.B))
 
#Overrides expect color as RGB (not ARGB as imported)
#redList = []
#for red in coloursRed:
	#redList.append(red)
	
#greenList = []
#for green in coloursGreen:
	#greenList.append(green)
	
#blueList = []
#for blue in coloursBlue:
	#blueList.append(blue)
	
#colourList = []
#for i in range(len(redList)):
	#colList.append((Autodesk.Revit.DB.Color(redList[i],greenList[i],blueList[i]))

colourList = []
for region in regionTypes:
	colourList.append(Autodesk.Revit.DB.Color(region.Color.R,region.Color.G,region.Color.B)

#we use a Try here because if the filter exists an exception will occur
#try:
for i in range(len(filterList)):
	tempList = []
	tempList.append(ruleList[i])
	filter = ParameterFilterElement.Create(doc, filterList[i], typedCatList, tempList)
	tempList.Clear()
	view.AddFilter(filter.Id)
	#create the override settings
	#v.SetFilterOverrides(f, OverrideGraphicSettings().SetProjectionLineColor(Color(newCol[0], newCol[1], newCol[2])))
	ogs = OverrideGraphicSettings()
	ogs.SetCutLineColor(colourList[i]).SetProjectionFillColor(colourList[i]).SetProjectionFillColor(colourList[i]).SetProjectionFillPatternId(ElementId(100))
	view.SetFilterOverrides(filter.Id, ogs)
#except:
    #pass 

TransactionManager.Instance.TransactionTaskDone()

OUT = colourList
#OUT = filterList

1 Like

you are missing a ) at the end of the line there

1 Like

Almost there…I’m getting the following error:
Warning: IronPythonEvaluator.EvaluateIronPythonScript operation failed.
Traceback (most recent call last):
File “”, line 74, in
Exception: The referenced object is not valid, possibly because it has been deleted from the database, or its creation was undone.
WIP View Filters Create From Filled Regions.dyn (24.7 KB)

import clr
clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument
clr.AddReference("RevitAPI")
import Autodesk
from Autodesk.Revit.DB import *
import System
from System.Collections.Generic import *

dataEnteringNode = IN

view = UnwrapElement(IN[0])
cats = IN[1]
rules = IN[2]
filterNames = IN[3]
coloursRed = IN[4]
coloursGreen = IN[5]
coloursBlue = IN[6]
regions = IN[7]

TransactionManager.Instance.EnsureInTransaction(doc)

catList = []
for i in cats:
	catList.append(ElementId(i.Id))

typedCatList = List[ElementId](catList)

ruleList = []
for i in rules:
	ruleList.append(i)

#Watch out! The Rule must be in a list for ParameterFilterElement to work!
filterList = []
#a = []
for i in filterNames:
	filterList.append(i)

#colourList = []
#for region in regions:
 	#colourList.append(UnwrapElement(region).Color)
 	#colourList.append(Autodesk.Revit.DB.Color(region.Color.R, #region.Color.G, region.Color.B))
 
#Overrides expect color as RGB (not ARGB as imported)
redList = []
for red in coloursRed:
	redList.append(red)
	
greenList = []
for green in coloursGreen:
	greenList.append(green)
	
blueList = []
for blue in coloursBlue:
	blueList.append(blue)
	
#colourList = []
#for i in range(len(redList)):
	#colList.append((Autodesk.Revit.DB.Color(redList[i],greenList[i],blueList[i]))

colourList = []
for i in range(len(filterList)):
	colourList.append(Autodesk.Revit.DB.Color(redList[i],greenList[i],blueList[i]))

#we use a Try here because if the filter exists an exception will occur
#try:
for i in range(len(filterList)):
	tempList = []
	tempList.append(ruleList[i])
	filter = ParameterFilterElement.Create(doc, filterList[i], typedCatList, tempList)
	view.AddFilter(filter.Id)
	#create the override settings
	ogs = OverrideGraphicSettings()
	ogs.SetCutLineColor(colourList[i]).SetProjectionFillColor(colourList[i]).SetProjectionFillColor(colourList[i]).SetProjectionFillPatternId(ElementId(1))
	view.SetFilterOverrides(filter.Id, ogs)
#except:
    #pass 

TransactionManager.Instance.TransactionTaskDone()

OUT = filterList
1 Like

That’s pretty clear i think. Make sure that your view actually exists. Revit only throws this warning when things were deleted.

1 Like

Thanks Konrad, it’s all working now :slight_smile: