Hello!
I have a problem with my script Python. I need to collect the solid pattern to apply it in a view. But I have an error, and I don’t see where it’s come from.
I find this code on different forum:
patternsList = FilteredElementCollector(doc).OfClass(FillPatternElement)
solidPatternID = 0
for p in patterns :
pat = p.GetFillPattern()
if pat.IsSolidFill == True:
solidPatternID = p.Id
But Dynamo tell me:
“Avertissement:IronPythonEvaluator.EvaluateIronPythonScript l’opération a échoué.
Traceback (most recent call last):
File “”, line 73, in
Exception: Input type(Revit.Elements.FillPatternElement) is not a recognized Revit API type
Parameter name: type”
Do you have an idea to resolve that ?
Thank you for your help
PS: Sorry for my bad english (it’s not easy for me to explain my problem with a different language)
1 Like
@Melanie_V ,
can you paste your code ?
</>
import clr
clr.AddReference('RevitAPI')
from Autodesk.Revit.DB import *
from Autodesk.Revit.DB.Structure import *
clr.AddReference('RevitAPIUI')
from Autodesk.Revit.UI import *
clr.AddReference('System')
from System.Collections.Generic import List
clr.AddReference('RevitNodes')
import Revit
clr.ImportExtensions(Revit.GeometryConversion)
clr.ImportExtensions(Revit.Elements)
clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument
uidoc=DocumentManager.Instance.CurrentUIApplication.ActiveUIDocument
#Preparing input from dynamo to revit
element = UnwrapElement(IN[0])
#Do some action in a Transaction
TransactionManager.Instance.EnsureInTransaction(doc)
TransactionManager.Instance.TransactionTaskDone()
OUT = element
Thanks for your answer.
There is my code :
import sys
import clr
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
clr.AddReference('RevitAPI')
from Autodesk.Revit.DB import *
clr.AddReference('RevitAPIUI')
from Autodesk.Revit.UI import *
import Autodesk
clr.AddReference('RevitNodes')
from Revit.Elements import *
clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
from System.Collections.Generic import List
dataEnteringNode = IN
doc = DocumentManager.Instance.CurrentDBDocument
valuesList = IN[0]
paramID_Debut = ElementId(IN[1])
paramID_Fin = ElementId(IN[2])
paramID_Chantier = ElementId(IN[3])
filterNameList = IN[4]
myView = UnwrapElement(IN[5])
optionDuplicate = Autodesk.Revit.DB.ViewDuplicateOption.WithDetailing
paramElem = doc.GetElement(paramID_Debut)
definition = paramElem.GetDefinition()
binding_map = doc.ParameterBindings
binding = binding_map.Item[definition]
category_set = binding.Categories.GetEnumerator()
cat_ids = [cat.Id for cat in category_set]
cat_ids_list = List[ElementId](cat_ids)
cat_ids_valid = ParameterFilterUtilities.RemoveUnfilterableCategories(cat_ids_list)
pStart = ParameterValueProvider (paramID_Debut)
pEnd = ParameterValueProvider (paramID_Fin)
pChantier = ParameterValueProvider (paramID_Chantier)
FiltersList = list(FilteredElementCollector(doc).OfClass(ParameterFilterElement).ToElements())
FiltersName = [i.Name for i in FiltersList]
mesFiltres = []
red = Color(255,0,0)
patternsList = FilteredElementCollector(doc).OfClass(FillPatternElement)
solidPatternID = 0
for p in patterns :
pat = p.GetFillPattern()
if pat.IsSolidFill == True:
solidPatternID = p.Id
TransactionManager.Instance.EnsureInTransaction(doc)
for myValue in valuesList :
phaseEnCours = filterNameList[0]+str(myValue)
postPhase = filterNameList[1]+str(myValue)
newViewID = View.Duplicate(myView, optionDuplicate)
newView = doc.GetElement(newViewID)
try :
newView.Name = myView.Name+"_"+str(myValue)
mesFiltres.Add("Vue créée : "+newView.Name)
except :
mesFiltres.Add("Vue non renommée : "+newView.Name)
if phaseEnCours not in FiltersName :
xStart_enCours = FilterElementIdRule (pStart, FilterNumericLessOrEqual(), ElementId(myValue))
xEnd_enCours = FilterElementIdRule (pEnd, FilterNumericGreaterOrEqual(), ElementId(myValue))
xrule_enCours = []
xrule_enCours.Add(ElementParameterFilter(xStart_enCours))
xrule_enCours.Add(ElementParameterFilter(xEnd_enCours))
ruleList_enCours = List[ElementFilter](xrule_enCours)
myRule_enCours = LogicalAndFilter(ruleList_enCours)
filter_current = ParameterFilterElement.Create(doc, phaseEnCours, cat_ids_valid, myRule_enCours)
else :
for f in FiltersList:
if f.Name == phaseEnCours :
filter_current = f
newView.AddFilter(filter_current.Id)
over = newView.GetFilterOverrides(filter_current.Id)
over.SetSurfaceTransparency(0.0)
over.SetCutForegroundPatternColor(red)
over.SetSurfaceForegroundPatternColor(red)
newView.SetFilterOverrides(filter_current.Id,over)
mesFiltres.Add(phaseEnCours)
TransactionManager.Instance.TransactionTaskDone()
OUT = mesFiltres
It’s possible that FillPatterns
are not a valid class for the FEC. You can always get this list in Dynamo using Element Classes
and All Elements of Class
.