Element.SetParameterByName(element, parameter, value) It's not working

See image

I created 2 floors and
4 parameters (c1, c2, c3, c4) with 4 data points (data1, data2, data3, data4)

I use the node

Element.SetParameterByName(element, parameter, value)

element = 2 floors

parameter = 4 parameters

value = 4 data points

I'm getting an error in Python

Help?

Thanks

hi

import sys
import clr
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
# do you have import this lines under
#---------------
clr.AddReference('RevitNodes')
import Revit
clr.ImportExtensions(Revit.GeometryConversion)
clr.ImportExtensions(Revit.Elements)
#---------------

elts=IN[0]
param=IN[1]
vals=IN[2]

OUT = [e.SetParameterByName(p,v) for e in elts for p,v in zip(param,vals)]

cordially

christian.stan

1 Like
Thanks for the reply.

I have an error
at parameter
but it doesn't exist.

What am I doing wrong?

Hi,

Check that the names of your parameters are correct.

Here is a solution.

import sys
import clr
import System
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
# do you have import this lines under

clr.AddReference('RevitAPI')
import Autodesk
from Autodesk.Revit.DB import *
import Autodesk.Revit.DB as DB

clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager

doc = DocumentManager.Instance.CurrentDBDocument
#---------------
clr.AddReference('RevitNodes')
import Revit
clr.ImportExtensions(Revit.GeometryConversion)
clr.ImportExtensions(Revit.Elements)
#---------------

elts=UnwrapElement(IN[0])
param=IN[1]
vals=IN[2]

TransactionManager.Instance.EnsureInTransaction(doc)

for e in elts:
    for p_name,value in zip(param,vals):
        # check if parameter exist
        para = e.LookupParameter(p_name)
        if para:
            # using Revit Dynamo 
            e_dsType = e.ToDSType(True)
            e_dsType.SetParameterByName(p_name,value)
            # OR using Revit API
            para.SetValueString(str(value))
            
TransactionManager.Instance.TransactionTaskDone()

1 Like

if parameter don’t exist

try this

import sys
import clr
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
# do you have import this lines under
#---------------
clr.AddReference('RevitNodes')
import Revit
clr.ImportExtensions(Revit.GeometryConversion)
clr.ImportExtensions(Revit.Elements)
#---------------

elts=IN[0]
param=IN[1]
vals=IN[2]

OUT = [e.SetParameterByName(p,v) for e in elts for p,v in zip(param,vals) if p in [e.Name for e in e.Parameters]]

cordially

christian.stan

1 Like
Thanks for your help...solved
1 Like
Thanks for your help......solved
1 Like

Hi @ingalvolt please mark Cyrils solution if it work for you, can probably help other as well :wink:

1 Like
I sent it to both of them....(christian.stan and c.poipin)

What should I do?
I don't understand

Maybe I'm doing something wrong?
1 Like

yeah you can only make one solution…soooo :wink: :wink: and its great if both work…so try thats there fit you best :wink: :wink:

2 Likes

Done

awesome :wink: :wink:

1 Like