Revit API 只能创建共享参数?

问题描述 投票:0回答:1

经过一番研究,我得出的结论是,只能使用 Revit API 创建共享参数。

创建项目参数对我来说很有用(我需要将它们添加到内置系列中),但我找不到解释如何执行此操作的良好资源。

有人可以告诉我我的结论是否正确吗?无法使用 Revit API 创建项目参数?使用 Revit API 只能创建共享参数?

使用:

  • Revit 2022
  • C#

我尝试过的:

  • 我已经尝试过使用文档中的这些方法
  • 这个旧帖子提到了一种方法,但由于错误
    Error CS1501  No overload for method 'Create' takes 3 arguments
    ,我无法使代码工作。
  • 这篇文章中有更多信息,但也没有帮助我。
c# revit-api
1个回答
0
投票

是的,我相信你的结论是正确的,你必须创建一个共享参数才能做到这一点。

这里是 Revit API 论坛的链接,该主题已经深入讨论并更新了几年,人们想要完全按照您的要求进行操作,但没有成功: https://forums.autodesk.com/t5/revit-api-forum/create-project-parameter-not-shared-parameter/m-p/5152374#M6777

如果您从 API 论坛阅读了该主题的整个讨论,您可以看到一些来回的内容,但最终的答案是您必须使用共享参数。以下是论坛对此的引用:

我快速浏览了用于创建项目参数的代码。事实证明,要创建项目参数,他们只需创建一个临时的新共享参数文件,在该文件中创建共享参数,导入共享参数,然后删除临时共享参数文件。

好消息是,使用共享参数要快得多,因为您可以使用

Element.get_Parameter()
方法并为共享参数提供 guid,而非共享参数必须使用
Element.LookUpParameter()
,这要慢得多。

以下是将共享参数从文件添加到项目的示例命令:

    [Transaction(TransactionMode.Manual)]
    [Regeneration(RegenerationOption.Manual)]

    internal class AddSharedParametersToProject : IExternalCommand
    {
        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
        {
            var UiApp = commandData.Application;
            var Doc = commandData.Application.ActiveUIDocument.Document;

            // specify the shared parameter file you want to load
            UiApp.Application.SharedParametersFilename = @"C:\MyLocation\MySharedParams.txt";
            var sharedParameterFile = UiApp.Application.OpenSharedParameterFile();

            // create the category set that you want to bind to
            var catSet = UiApp.Application.Create.NewCategorySet();
            var cat = Doc.Settings.Categories.get_Item(BuiltInCategory.OST_Walls);
            catSet.Insert(cat);


            using (var t = new Transaction(Doc))
            {
                t.Start("Add Shared Parameters");

                // loop through the groups/definitions and add the parameters
                foreach (var definitionGroup in sharedParameterFile.Groups)
                {
                    foreach (var sharedPramDef in definitionGroup.Definitions)
                    {
                        var newIB = UiApp.Application.Create.NewInstanceBinding(catSet);
                        Doc.ParameterBindings.Insert(sharedPramDef, newIB, BuiltInParameterGroup.PG_TEXT);
                    }
                }

                t.Commit();
            }
            return Result.Succeeded;

        }
    }

这是我使用的共享参数文件:

# This is a Revit shared parameter file.
# Do not edit manually.
*META   VERSION MINVERSION
META    2   1
*GROUP  ID  NAME
GROUP   1   Component
*PARAM  GUID    NAME    DATATYPE    DATACATEGORY    GROUP   VISIBLE DESCRIPTION USERMODIFIABLE  HIDEWHENNOVALUE
PARAM   c395a003-5291-473b-bff4-495623e11f41    MyParam_1   YESNO       1   1       1   0
PARAM   c2188a20-947f-4869-a2b9-5e3f179453d2    MyParam_2   MULTILINETEXT       1   1       0   0
PARAM   81eb0c23-beac-4fe5-9553-30ebaa2ca343    MyParam_3   TEXT        1   1       0   0


以下是现在与墙壁关联的结果参数: Resulting Parameters

© www.soinside.com 2019 - 2024. All rights reserved.