Fawzi Masri
Fawzi Masri

Reputation: 119

Dynamo Revit set formula for a parameter in a family

I am trying to add a formula to a parameter within a Revit Family. Currently I have multiple families in a project. I run Dynamo from within that project then I extract the families that I want to modify using Dynamo standard nodes.

Then I use a python script node that goes through every selected family and find the parameter I am interested in, and assign a formula for it. That seemed fine until I noticed that it is not assigning the formula, but it is entering it as a string — as in it is in quotes. And sure enough, the code i am using will only work with Text type parameters.

Can someone shed the light on how to assign a formula to a parameter using dynamo?

see line 32 in code below

Thanks

for family in families:
    TransactionManager.Instance.ForceCloseTransaction()
    famdoc = doc.EditFamily(family)
    FamilyMan = famdoc.FamilyManager
    found.append(family.Name)

    TransactionManager.Instance.EnsureInTransaction(famdoc)
    check = 0
    # Loop thru the list of parameters to assign formula values to them... these are given as imput 
    for r in range(len(param_name_lst)):
        # Loop thru the list of parameters in the current family per the families outter loop above.
        for param in FamilyMan.Parameters:
        #for param in FamilyMan.get_Parameter(param_name_lst[r]):
            # for each of the parameters get their name and store in paramName.

            paramName = param.Definition.Name
            # Check if we have a match in parameter name.
            if param_name_lst[r] in paramName:
                if param.CanAssignFormula:
                    canassignformula.append(param_name_lst[r])
                else:
                    cannotassignformula.append(param_name_lst[r])
                    
                try:
                    # Make sure that the parameter is not locked.
                    if FamilyMan.IsParameterLocked(param):
                        FamilyMan.SetParameterLocked(param,False)
                        locked.append(paraName)
            
                    # Enter formula value to parameter.
                
                    FamilyMan.SetFormula(param, param_value_lst[r])

                    check += 1
                except:
                    failed.append(paramName)
            else:
                continue
        

Upvotes: 0

Views: 1718

Answers (2)

Fawzi Masri
Fawzi Masri

Reputation: 119

Actually, you can access the family from the main project, and you can assign a formula automatically.... That's what i currently do, i load all the families i want in one project and run the script. After a lot of work, i was able to figure out what i was doing wrong, and in it is not in my code... my code was fine. The main problem is that i need to have all of my formula's dependencies lined up.... just like in manual mode. so if my formula is:

size_lookup(MY_ID_tbl, "MY_VAR", "MY_DefaultValue", ND1,ND2)

then i need to have the following:

  1. MY_ID_tbl should exist and be assigned a valid value, in this case it should have a csv filename. Moreover, that file should be also loaded. This is important for the next steps.
  2. MY_VAR should be defined in that csv file, so Does ND1, ND2
  3. The default value (My_Default_Value) should match what that csv file says about that variable...in this case, it is a text.

Needless to say, i did not have all of the above lined up as it should be, once i fixed that, my setFormula code did its job. And i had to change my process altogether, cause i have to first create the MY_ID_tbl and load the csv file which i also do using dynamo, then i go and enter the formulas using dynamo.

Upvotes: 1

Mostafa Tarek Yassien
Mostafa Tarek Yassien

Reputation: 532

Revit parameters can only be assigned to a formula inside the family editor only, that is the first point, so you should run your dynamo script inside the family editor for each family which will be a waste of time and you just edit the parameter's formula manually inside each family.

and the second point, I don't even think that it is possible to set a certain parameter's formula automatically, it must be done manually ( I haven't seen anything for it in the Revit API docs).

Upvotes: 0

Related Questions