【问题标题】:Dynamo Revit set formula for a parameter in a familyDynamo Revit 为族中的参数设置公式
【发布时间】:2021-02-12 06:04:06
【问题描述】:

我正在尝试将公式添加到 Revit 族中的参数。 目前我在一个项目中有多个家庭。我从该项目中运行 Dynamo,然后使用 Dynamo 标准节点提取我想要修改的族。

然后我使用一个 python 脚本节点遍历每个选定的族并找到我感兴趣的参数,并为其分配一个公式。 这似乎很好,直到我注意到它没有分配公式,而是将其作为字符串输入 - 就像在引号中一样。果然,我使用的代码只适用于文本类型参数。

有人可以阐明如何使用发电机将公式分配给参数吗?

见下面代码中的第 32 行

谢谢

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
        

【问题讨论】:

    标签: python revit-api


    【解决方案1】:

    实际上,您可以从主项目访问族,并且可以自动分配公式....这就是我目前所做的,我将所有我想要的族加载到一个项目中并运行脚本。 经过大量工作,我能够弄清楚我做错了什么,并且不在我的代码中......我的代码很好。 主要问题是我需要排列所有公式的依赖项......就像在手动模式下一样。 所以如果我的公式是:

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

    那么我需要具备以下条件:

    1. MY_ID_tbl 应该存在并被分配一个有效值,在这种情况下它应该有一个 csv 文件名。此外,还应加载该文件。这对于接下来的步骤很重要。
    2. MY_VAR 应在该 csv 文件中定义,ND1、ND2 也是如此
    3. 默认值 (My_Default_Value) 应该与 csv 文件中关于该变量的内容相匹配...在这种情况下,它是一个文本。

    不用说,我没有按照应有的方式排列上述所有内容,一旦我修复了它,我的 setFormula 代码就完成了它的工作。而且我必须完全改变我的过程,因为我必须首先创建 MY_ID_tbl 并加载我也使用发电机做的 csv 文件,然后我去使用发电机输入公式。

    【讨论】:

      【解决方案2】:

      Revit 参数只能分配给族编辑器中的公式,这是第一点,因此您应该在族编辑器中为每个族运行 dynamo 脚本,这将浪费时间,您只需编辑参数的公式在每个族中手动进行。

      第二点,我什至不认为可以自动设置某个参数的公式,必须手动完成(我在 Revit API 文档中没有看到任何内容)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-04-22
        • 2020-10-15
        • 2019-03-29
        • 2021-02-21
        • 2020-10-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多