zoukankan      html  css  js  c++  java
  • Revit通过API创建共享参数

    Revit共享参数是通过创建一个.txt类型的文件来保存相关信息,一旦与项目保存完毕之后,共享参数也就变成了项目参数(项目参数无法通过API创建),项目参数是保存在Revit项目里面的,所以此时这个.txt文件是可以删除的。

     1 using Autodesk.Revit.DB;
     2 using System;
     3 using System.IO;
     4 using System.Reflection;
     5 
     6 namespace HelloRevit
     7 {
     8     public class RevitApiUtils
     9     {
    10         /// <summary>
    11         /// 创建共享参数
    12         /// </summary>
    13         /// <param name="doc">Document对象</param>
    14         /// <param name="groupName">共享参数组名</param>
    15         /// <param name="definitionName">共享参数名</param>
    16         /// <param name="builtInCategory">需要参数绑定的类型</param>
    17         /// <param name="builtInParameterGroup">参数所属的属性类型</param>
    18         /// <param name="parameterType">参数数据类型</param>
    19         /// <param name="isInstanceParameter">是否实例参数</param>
    20         public static void AddSharedParameters(Document doc, string groupName, string definitionName, BuiltInCategory builtInCategory, BuiltInParameterGroup builtInParameterGroup, ParameterType parameterType, bool isInstanceParameter)
    21         {
    22             var assemblyPath = Assembly.GetExecutingAssembly().Location;
    23             var index = assemblyPath.IndexOf("\", StringComparison.Ordinal);
    24             var rootPath = assemblyPath.Substring(0, index);
    25             var sharedParameterPath = Path.Combine(rootPath, "RevitSharedParameters.txt");
    26             if (File.Exists(sharedParameterPath))
    27             {
    28                 File.Delete(sharedParameterPath);
    29             }
    30             var categorySet = new CategorySet();
    31             var category = doc.Settings.Categories.get_Item(builtInCategory);
    32             categorySet.Insert(category);
    33             if (!File.Exists(sharedParameterPath))
    34             {
    35                 try
    36                 {
    37                     File.Create(sharedParameterPath);
    38                 }
    39                 catch (Exception)
    40                 {
    41                     ThrowNewException("异常!");
    42                 }
    43             }
    44             //设置共享参数文件
    45             doc.Application.SharedParametersFilename = sharedParameterPath;
    46             //打开共享参数文件
    47             var definitionFile = doc.Application.OpenSharedParameterFile();
    48             if (definitionFile == null)
    49             {
    50                 ThrowNewException("无法打开共享参数文件");
    51                 return;
    52             }
    53             //获取共享参数组
    54             var definitionGroups = definitionFile.Groups;
    55             //获取参数组
    56             var group = definitionGroups.get_Item(groupName) ?? definitionGroups.Create(groupName);
    57             if (group == null)
    58             {
    59                 ThrowNewException("创建共享参数组失败!");
    60                 return;
    61             }
    62 
    63             //获取参数定义
    64             var definition = group.Definitions.get_Item(definitionName);
    65             if (definition == null)
    66             {
    67                 var externalDefinitionCreationOptions = new ExternalDefinitionCreationOptions(definitionName, parameterType);
    68                 definition = group.Definitions.Create(externalDefinitionCreationOptions);
    69             }
    70 
    71             ElementBinding binding;
    72             if (isInstanceParameter)
    73             {
    74                 binding = doc.Application.Create.NewInstanceBinding(categorySet);
    75             }
    76             else
    77             {
    78                 binding = doc.Application.Create.NewTypeBinding(categorySet);
    79             }
    80 
    81             bool isSuccess = doc.ParameterBindings.Insert(definition, binding, builtInParameterGroup);
    82 
    83             if (!isSuccess)
    84             {
    85                 ThrowNewException("共享参数绑定失败!");
    86             }
    87 
    88             //删除共享参数txt文件,从某种意义上讲,绑定之后的共享参数就变成了项目参数只针对当前项目存在
    89             File.Delete(sharedParameterPath);
    90         }
    91 
    92         public static void ThrowNewException(string msg)
    93         {
    94             throw new Exception(msg);
    95         }
    96 
    97     }
    98 }
  • 相关阅读:
    Android杂谈错误整理(持续更新)
    javax.servlet.ServletException: java.lang.NoClassDefFoundError: javax/el/ELResolver错误解决办法
    收藏微软面试智力题 (附答案)
    gridview等控件换行实现办法
    [原创]DataView特殊字条串替换(过滤)
    [转]ASP.Net4.0中新增23项功能
    从LOGO看百度与谷歌
    [转]Winxp下kernel32.dll内部的函数集合和地址值
    [转]ASP.NET Web Forms 4.0 简介
    asp.net类似于QQ表情弹出框功能的实现方法
  • 原文地址:https://www.cnblogs.com/LagoOrLY/p/10723390.html
Copyright © 2011-2022 走看看