【问题标题】:How to create a shared parameter that can be shared when project standards are transferred如何创建在项目标准传输时可以共享的共享参数
【发布时间】:2020-01-06 11:24:15
【问题描述】:

我正在处理一个项目,我需要创建多个由墙类型组成的 Revit 文件并在其中创建共享参数。我完成了这个过程。
但是在手动单击
管理 > 传输项目标准时
通过 Revit 界面从“项目名称”> 墙类型复制。
我将创建的不同 Revit 文件的墙类型导入到一个中。
但是共享参数似乎在墙壁类型的类型参数列表中重复了一组数据,并且重复的集合没有数据。

我创建的参数好像不能共享。

if (Convert.ToString(value) != "")
            {
                Type type = value.GetType();
                string originalFile = uiApp.Application.SharedParametersFilename;
                string tempFile = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName()) + ".txt";
                using (File.Create(tempFile)) { }
                uiApp.Application.SharedParametersFilename = tempFile;
                try
                {
                    if (ele.LookupParameter(param) == null)
                    {
                        ExternalDefinitionCreationOptions edco = null;
                        if (type.Name.Equals("Double"))
                            edco = new ExternalDefinitionCreationOptions(param, ParameterType.Number);
                        else
                            edco = new ExternalDefinitionCreationOptions(param, ParameterType.Text);
                        edco.Visible = true;
                        var definition = uiApp.Application.OpenSharedParameterFile().Groups.Create("Custom Parameters").Definitions.Create(edco);
                        var newCategorySet = uiApp.Application.Create.NewCategorySet();
                        newCategorySet.Insert(doc.Settings.Categories.get_Item(BuiltInCategory.OST_Walls));
                        Autodesk.Revit.DB.Binding binding = uiApp.Application.Create.NewTypeBinding(newCategorySet);
                        doc.ParameterBindings.Insert(definition, binding, BuiltInParameterGroup.PG_IDENTITY_DATA);
                        if (!string.IsNullOrEmpty((string)value))
                            ele.LookupParameter(param).Set((string)value);
                    }
                    else
                    {
                        if (!string.IsNullOrEmpty((string)value))
                            ele.LookupParameter(param).Set((string)
                    }
                }
                catch (Exception ex)
                {

                }
                finally
                {
                    uiApp.Application.SharedParametersFilename = originalFile;
                }
            }

这里,这段代码在循环中执行,其中“元素”是需要添加共享参数的元素。 “param”是参数名称,“value”是参数的值。
请让我知道这是否是创建共享参数的正确方法,当项目墙类型转移到另一个项目时可以共享该参数。
谢谢

【问题讨论】:

    标签: c# revit-api revit


    【解决方案1】:

    这肯定会发生,只要您处于循环中,并不断为每个文件创建一个共享参数。这将导致为每个 revit 文件创建唯一的 GUID。当您将所有内容组合在一起时,您会发现所有共享参数具有不同的 Guid 但具有相同的名称。

    您需要创建一次共享参数,然后为每个 revit 文件设置共享参数文件(已使用 sharedparameter 创建)并从中获取共享参数,然后将其分配给每个 revit 文件所需的类别。

    更多关于共享参数here

    希望有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-04
      • 2017-07-07
      • 2013-08-31
      • 1970-01-01
      • 2014-08-09
      • 2018-01-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多