经过一番研究,我得出的结论是,只能使用 Revit API 创建共享参数。
创建项目参数对我来说很有用(我需要将它们添加到内置系列中),但我找不到解释如何执行此操作的良好资源。
有人可以告诉我我的结论是否正确吗?无法使用 Revit API 创建项目参数?使用 Revit API 只能创建共享参数?
使用:
我尝试过的:
是的,我相信你的结论是正确的,你必须创建一个共享参数才能做到这一点。
这里是 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