/*-------------------------------------------------------------------------
* 功能描述:SharedParameterUtil
* 作者:xulisong
* 创建时间: 2019/3/7 10:49:42
* 版本号:v1.0
* -------------------------------------------------------------------------*/
using Autodesk.Revit.ApplicationServices;
using Autodesk.Revit.DB;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using FWindSoft.Common;
namespace FWindSoft.Revit
{
public class SharedParameterUtil
{
///
/// 创建共享参数文件样式
///
///
public static StringBuilder CreateSharedFileSchema()
{
StringBuilder contents = new StringBuilder();
contents.AppendLine("# This is a Revit shared parameter file.");
contents.AppendLine("# Do not edit manually.");
contents.AppendLine("*META VERSION MINVERSION");
contents.AppendLine("META 2 1");
contents.AppendLine("*GROUP ID NAME");
contents.AppendLine("*PARAM GUID NAME DATATYPE DATACATEGORY GROUP VISIBLE");
return contents;
}
///
/// 获取共享参数定义文件
///
///
///
public static DefinitionFile GetSharedParameterFile(Application revitApp)
{
DefinitionFile file = null;
int count = 0;
while (null == file && count < 100)
{
file = revitApp.OpenSharedParameterFile();
if (file == null)
{
string shapeFile = Path.Combine(App.AppDataPath, "RevitShared", "tempSharedFile.txt");
var schema = CreateSharedFileSchema();
File.WriteAllText(shapeFile, schema.ToString());
revitApp.SharedParametersFilename = shapeFile;
}
++count;
}
return file;
}
public static ExternalDefinitionCreationOptions NewDefinitionCreationOptions(string paraName, ParameterType paraType, bool visible = true, bool userModifiable = true)
{
ExternalDefinitionCreationOptions options = new ExternalDefinitionCreationOptions(paraName, paraType);
options.Visible = visible;
options.UserModifiable = userModifiable;
return options;
}
public static Definition NewDefinition(DefinitionGroup group, ExternalDefinitionCreationOptions options)
{
return group.Definitions.Create(options);
}
public static bool BindingParameter(Document document, List categories,bool bingdingType, Definition definition)
{
var useCategories = categories.Where(c => c.AllowsBoundParameters).ToList();
if (!useCategories.Any())
return false;
bool flag = false;
#region 查找已经存在定义
ElementBinding instanceBinding = document.ParameterBindings.get_Item(definition) as ElementBinding;
if (bingdingType)
{
instanceBinding = instanceBinding as TypeBinding;
}
else
{
instanceBinding = instanceBinding as InstanceBinding;
}
#endregion
if (null != instanceBinding)
{
foreach (var useCategory in useCategories)
{
if (!instanceBinding.Categories.Contains(useCategory))
{
instanceBinding.Categories.Insert(useCategory);
}
}
flag=document.ParameterBindings.ReInsert(definition, instanceBinding);
}
else
{
var app = document.Application;
CategorySet categorySet = app.Create.NewCategorySet();
useCategories.ForEach(c=>categorySet.Insert(c));
if (bingdingType)
{
instanceBinding = app.Create.NewTypeBinding(categorySet);
}
else
{
instanceBinding = app.Create.NewInstanceBinding(categorySet);
}
flag=document.ParameterBindings.Insert(definition, instanceBinding);
}
return flag;
}
public static bool BindingParameter(Document document, Category category, bool bingdingType,
Definition definition)
{
return BindingParameter(document, new List() {category}, bingdingType, definition);
}
}
}