您的位置:首页 > 其它

Revit创建共享参数和获取项目参数

2016-04-01 16:00 579 查看
Revit除了有内建的参数,还允许用户自定义参数,分别是:共享参数和项目参数。

对应界面上的菜单分别是"管理->共享参数"和"管理->项目参数"



共享参数被定义在Revit之外的一个共享参数文件(.txt中)。删掉这个文件,共享参数就会丢失。

程序入口代码:

public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
Autodesk.Revit.ApplicationServices.Application revitApp = commandData.Application.ActiveUIDocument.Application.Application;
Autodesk.Revit.DB.Document revirDoc = commandData.Application.ActiveUIDocument.Document;
TaskDialog.Show("Revit", GetSharInfo(revitApp));
return Result.Succeeded;
}


1.获取共享参数

/// <summary>
/// 获取共享参数信息
/// </summary>
/// <param name="commandData"></param>
/// <returns></returns>
private string GetSharInfo(Autodesk.Revit.ApplicationServices.Application revitApp)
{
StringBuilder str = new StringBuilder();
DefinitionFile definitionFile = revitApp.OpenSharedParameterFile();
DefinitionGroups groups = definitionFile.Groups;
foreach (DefinitionGroup group in groups)
{
foreach (Definition definition in group.Definitions)
{
string name = definition.Name;
ParameterType type = definition.ParameterType;
str.AppendLine(string.Format("{0}---{1}", name, type.ToString()));
}
}
return str.ToString();
}


2.创建共享参数

/// <summary>
/// 创建共享参数
/// </summary>
/// <param name="commandData"></param>
private void CreateSharInfo(Autodesk.Revit.ApplicationServices.Application revitApp, Autodesk.Revit.DB.Document revitDoc)
{
try
{
string sharedParametersFilename = @"C:\shared-parameters.txt";
string groupName = "MyGroup";
string definitionName = "MyDefinition";
ParameterType parameterType = ParameterType.Text;
CategorySet categorySet = new CategorySet();
Category wallCategory = revitDoc.Settings.Categories.get_Item(BuiltInCategory.OST_Walls);
categorySet.Insert(wallCategory);
bool instanceParameter = true;
BuiltInParameterGroup parameterGroup = BuiltInParameterGroup.PG_DATA;
if (!System.IO.File.Exists(sharedParametersFilename))
{
try
{
System.IO.StreamWriter sw = System.IO.File.CreateText(sharedParametersFilename);
sw.Close();
}
catch (Exception)
{
throw new Exception(string.Format("Can't create shared parameter file:{0}", sharedParametersFilename));
}
}
revitApp.SharedParametersFilename = sharedParametersFilename;

DefinitionFile definitionFile = revitApp.OpenSharedParameterFile();
if (definitionFile == null)
{
throw new Exception("Can not open shared parameter file");
}

DefinitionGroups groups = definitionFile.Groups;
DefinitionGroup group = groups.get_Item(groupName);
if (group == null)
{
group = groups.Create(groupName);
}
Definition definition = group.Definitions.get_Item(definitionName);
if (definition == null)
{
definition = group.Definitions.Create(new ExternalDefinitionCreationOptions(definitionName, parameterType));
}
ElementBinding binding = null;
if (instanceParameter)
{
binding = revitApp.Create.NewInstanceBinding(categorySet);
}
else
{
binding = revitApp.Create.NewTypeBinding(categorySet);
}
bool insertSuccess = revitDoc.ParameterBindings.Insert(definition, binding, parameterGroup);
if (!insertSuccess)
{
throw new Exception("Failed to bind definition to category");
}
}
catch (Exception ex)
{
throw ex;
}

}


3.获取项目参数(API无法创建项目参数的)

/// <summary>
/// 获取项目参数(API无法创建项目参数)
/// </summary>
/// <param name="revitDoc"></param>
/// <returns></returns>
private string GetProjectParam(Autodesk.Revit.DB.Document revitDoc)
{
StringBuilder strBuild = new StringBuilder();
BindingMap map = revitDoc.ParameterBindings;
DefinitionBindingMapIterator dep = map.ForwardIterator();
while (dep.MoveNext())
{
Definition definition = dep.Key;
string definitionName = definition.Name;
ParameterType parameterType = definition.ParameterType;
InstanceBinding instanceBinding = dep.Current as InstanceBinding;
if (instanceBinding != null)
{
CategorySet categorySet = instanceBinding.Categories;
strBuild.AppendLine(string.Format("Name:{0} Type:{1} CategorySet:{2}", definitionName, parameterType, categorySet.GetType().ToString()));
}
else
{
strBuild.AppendLine(string.Format("Name:{0} Type:{1}", definitionName, parameterType));
}
}
return strBuild.ToString();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: