EaBIM

标题: Parameter of Revit API – 50: Parameter Converter – Parameter to SharedParamete [打印本页]

作者: 萧闫子    时间: 2014-1-9 11:43
标题: Parameter of Revit API – 50: Parameter Converter – Parameter to SharedParamete
We talked about programmatically converting parameters from one to another manually before. Now let’s see how Parameter Converter of RevitAddinWizard can assist us to hit the target with just a few mouse clicks. The Parameter Converter can be found from either Revit Addin Coder sub-menu under the Tools or from Revit Addin Coder toolbar.

When the menu item or the tool button is clicked, the Parameter Converter window will show up:


If the Parameter (to SharedParameter) Converter is selected from the check list box and a class is chosen from the combo box, a Parameter to SharedParameter Converter will be created and added into the class automatically. The entire converter code and necessary namespaces and class declarations have been appended below:
  1. <div align="left" style="color: rgb(105, 105, 105); font-family: 'Microsoft Yahei', Simsun; "></div><div align="left" style="color: rgb(105, 105, 105); font-family: 'Microsoft Yahei', Simsun; ">
  2. #region Namespaces</div><div align="left" style="color: rgb(105, 105, 105); font-family: 'Microsoft Yahei', Simsun; ">using System;
  3. using System.Text;
  4. using System.Linq;
  5. using System.Xml;
  6. using System.Reflection;
  7. using System.ComponentModel;
  8. using System.Collections;
  9. using System.Collections.Generic;
  10. using System.Windows;
  11. using System.Windows.Media.Imaging;
  12. using System.Windows.Forms;
  13. using System.IO;</div><div align="left" style="color: rgb(105, 105, 105); font-family: 'Microsoft Yahei', Simsun; ">using Autodesk.Revit.ApplicationServices;
  14. using Autodesk.Revit.Attributes;</div><div align="left" style="color: rgb(105, 105, 105); font-family: 'Microsoft Yahei', Simsun; ">using Autodesk.Revit.DB;
  15. using Autodesk.Revit.DB.Events;
  16. using Autodesk.Revit.DB.Architecture;
  17. using Autodesk.Revit.DB.Structure;
  18. using Autodesk.Revit.DB.Mechanical;
  19. using Autodesk.Revit.DB.Electrical;
  20. using Autodesk.Revit.DB.Plumbing;</div><div align="left" style="color: rgb(105, 105, 105); font-family: 'Microsoft Yahei', Simsun; ">using Autodesk.Revit.UI;
  21. using Autodesk.Revit.UI.Selection;
  22. using Autodesk.Revit.UI.Events;</div><div align="left" style="color: rgb(105, 105, 105); font-family: 'Microsoft Yahei', Simsun; ">using Autodesk.Revit.Collections;
  23. using Autodesk.Revit.Exceptions;
  24. using Autodesk.Revit.Utility;</div><div align="left" style="color: rgb(105, 105, 105); font-family: 'Microsoft Yahei', Simsun; ">using RvtApplication = Autodesk.Revit.ApplicationServices.Application;
  25. using RvtDocument = Autodesk.Revit.DB.Document;</div><div align="left" style="color: rgb(105, 105, 105); font-family: 'Microsoft Yahei', Simsun; ">#endregion</div><div align="left" style="color: rgb(105, 105, 105); font-family: 'Microsoft Yahei', Simsun; ">
  26. namespace RevitAddinCS1
  27. {
  28.     class ParameterConverter
  29.     {
  30.         public class RawParameterInfo
  31.         {
  32.             public  string Name { get; set; }
  33.             public  string ID { get; set; }
  34.             public  string Value { get; set; }
  35.             public  BuiltInParameterGroup Group { get; set; }
  36.             public  ParameterType Type { get; set; }
  37.             public  StorageType Storage { get; set; }
  38.             public  string Unit { get; set; }
  39.             public  bool Shared { get; set; }
  40.             public  bool ReadOnly { get; set; }
  41.         }</div><div align="left" style="color: rgb(105, 105, 105); font-family: 'Microsoft Yahei', Simsun; ">        public static string RawGetDUTString(Parameter p)
  42.         {
  43.             string unitType = string.Empty;
  44.             try { unitType = p.DisplayUnitType.ToString(); }
  45.             catch { }
  46.             
  47.             return unitType;
  48.         }</div><div align="left" style="color: rgb(105, 105, 105); font-family: 'Microsoft Yahei', Simsun; ">        public static List<RawParameterInfo> RawGetParametersInfo(Element e)
  49.         {
  50.             List<RawParameterInfo> paramList =
  51.                 (from Parameter p in e.Parameters
  52.                  select new RawParameterInfo
  53.                  {
  54.                     Name = p.Definition.Name,
  55.                     ID = p.IsShared ? p.GUID.ToString() : (p.Definition as InternalDefinition).BuiltInParameter.ToString(),
  56.                     Value = p.AsValueString(),
  57.                     Group = p.Definition.ParameterGroup,
  58.                     Type = p.Definition.ParameterType,
  59.                     Storage = p.StorageType,
  60.                     Unit = RawGetDUTString(p),
  61.                     Shared = p.IsShared,
  62.                     ReadOnly = p.IsReadOnly,
  63.             
  64.                  }).ToList();
  65.             return paramList;
  66.         }
  67.         
  68.         public static string RawParametersInfoToCSVString<T>(List<T> infoList, ref string title)
  69.         {
  70.             StringBuilder sb = new StringBuilder();
  71.             PropertyInfo[] propInfoArrary = typeof(T).GetProperties();
  72.             foreach (PropertyInfo pi in propInfoArrary)
  73.             {
  74.                 title += pi.Name + ",";
  75.             }
  76.             title = title.Remove(title.Length - 1);
  77.         
  78.             foreach (T info in infoList)
  79.             {
  80.                 foreach (PropertyInfo pi in propInfoArrary)
  81.                 {
  82.                     object obj = info.GetType().InvokeMember(pi.Name, BindingFlags.GetProperty, null, info, null);
  83.                     IList list = obj as IList;
  84.                     if (list != null)
  85.                     {
  86.                         string str = string.Empty;
  87.                         foreach (object e in list)
  88.                         {
  89.                             str += e.ToString() + ";";
  90.                         }
  91.                         str = str.Remove(str.Length - 1);
  92.         
  93.                         sb.Append(str + ",");
  94.                     }
  95.                     else
  96.                     {
  97.                         sb.Append((obj == null ? string.Empty : obj.ToString()) + ",");
  98.                     }
  99.                 }
  100.                 sb.Remove(sb.Length - 1, 1).Append(Environment.NewLine);
  101.             }
  102.         
  103.             return sb.ToString();
  104.         }
  105.         
  106.         
  107.         public static List<T> RawConvertSetToList<T>(IEnumerable set)
  108.         {
  109.             List<T> list = (from T p in set select p).ToList<T>();
  110.             return list;
  111.         }
  112.         
  113.         
  114.         public static Definition RawCreateSharedParameter(RvtApplication app, string name, string group, ParameterType type, bool visible)
  115.         {
  116.             DefinitionFile defFile = app.OpenSharedParameterFile();
  117.             if (defFile == null) throw new Exception("No SharedParameter File!");
  118.         
  119.             DefinitionGroup dg = RawConvertSetToList<DefinitionGroup>(defFile.Groups).FirstOrDefault(g => g.Name == group);
  120.             if (dg == null) dg = defFile.Groups.Create(group);
  121.         
  122.             Definition def = RawConvertSetToList<Definition>(dg.Definitions).FirstOrDefault(d => d.Name == name);
  123.             if (def != null) return def; //dg.Definitions.Erase(def);   //ReadOnly Exception!!
  124.             def = dg.Definitions.Create(name, type, visible);
  125.             
  126.             return def;
  127.         }
  128.         
  129.         public static void ConvertParameterToSharedParameter(Element e, string name, bool convertSharedOnly, bool visibilityOverride)
  130.         {
  131.             List<RawParameterInfo> pList = RawGetParametersInfo(e);
  132.             List<RawParameterInfo> pListOfInterest = pList.FindAll(p => p.Name == name);
  133.             foreach (RawParameterInfo info in pListOfInterest)
  134.             {
  135.                 if (info.Type == ParameterType.Invalid)
  136.                 {
  137.                     info.Type = ParameterType.Text; //It's weird that a valid Parameter can have an invalid ParameterType! We set it as the most popular Text type in this case. Otherwise, the DefinitionGroup.Definitions.Create() would fail!
  138.                 }
  139.                
  140.                 if (convertSharedOnly)
  141.                 {
  142.                     if (info.Shared)
  143.                     {
  144.                         RawCreateSharedParameter(e.Document.Application, name, "For_" + e.Category.Name, info.Type, visibilityOverride);
  145.                     }
  146.                 }
  147.                 else
  148.                 {
  149.                     RawCreateSharedParameter(e.Document.Application, name, "For_" + e.Category.Name, info.Type, visibilityOverride);
  150.                 }
  151.             }
  152.         }
  153.         
  154.         public static void ConvertAllParametersToSharedParameters(Element e, bool convertSharedOnly, bool visibilityOverride)
  155.         {
  156.             List<RawParameterInfo> pList = RawGetParametersInfo(e);
  157.             
  158.             foreach (RawParameterInfo info in pList)
  159.             {
  160.                 if (info.Type == ParameterType.Invalid)
  161.                 {
  162.                     info.Type = ParameterType.Text;
  163.                 }
  164.         
  165.                 if (convertSharedOnly)
  166.                 {
  167.                     if (info.Shared)
  168.                     {
  169.                         RawCreateSharedParameter(e.Document.Application, info.Name, "For_" + e.Category.Name, info.Type, visibilityOverride);
  170.                     }
  171.                 }
  172.                 else
  173.                 {
  174.                     RawCreateSharedParameter(e.Document.Application, info.Name, "For_" + e.Category.Name, info.Type, visibilityOverride);
  175.                 }
  176.             }
  177.         }
  178.     }
  179. }</div>
复制代码
We would not create test command to extercise these parameter converter code here. In case needed, please refer to earlier posts for ideas and code examples.

As mentioned, Parameter Converter of RevitAddinCodercan create all these code automatically in a second.


作者: 黑超BB    时间: 2014-2-20 15:11
路过!!! 帮顶……
作者: 熊猫    时间: 2014-2-25 10:28
(*^__^*) 嘻嘻……
作者: ben7    时间: 2014-2-25 10:33
路过!!! 不发表意见……
作者: 波罗友    时间: 2014-3-4 13:59
顶!!!!!!!!!!
作者: 爬爬``PA    时间: 2014-3-10 10:47
顶起来…………
作者: 宇航员    时间: 2014-3-10 16:20
顶!!!!!!!!!!!!
作者: 猫猫girl    时间: 2014-3-10 16:23
顶!!!!!!!!!!!!
作者: OK佬    时间: 2014-3-10 16:32
谢谢老师…
作者: 悠悠筱荷    时间: 2014-3-10 16:33
谢谢老师…
作者: 教父    时间: 2014-3-10 16:48
顶!!!!!!!!!!
作者: 鹦鹉仔    时间: 2014-3-10 16:49
顶起来…………
作者: 筱雅    时间: 2014-3-10 16:55
顶!!!!!!!!!!!!
作者: 猫猫girl    时间: 2014-3-10 17:15
谢谢老师…
作者: 雁田佬    时间: 2014-3-10 17:20
谢谢BIM大神…
作者: 看看侃侃    时间: 2014-3-11 10:29
非常感谢!!
作者: zj1345    时间: 2014-3-11 10:31
顶!!!!!!!!!!!!
作者: 順順    时间: 2014-3-11 10:34
谢谢老师…
作者: 毫半字    时间: 2014-3-11 10:37
非常感谢!!
作者: 严英华    时间: 2014-3-13 11:59
顶起来…………
作者: 风吹枫落    时间: 2014-3-13 12:04
顶!!!!!!!!!!!!!!!!!!!!!!!!!
作者: 慕容柔晴    时间: 2014-3-13 12:12
顶起来…………
作者: 静儿    时间: 2014-3-13 12:14
顶......
楼下跟上.....
作者: 泰安oim    时间: 2014-3-13 12:27
(*^__^*) 嘻嘻……
作者: 爬爬``PA    时间: 2014-3-13 12:29
顶!!!!!!!!!!!!!!!!!!!!!!!!!
作者: dgpeihua    时间: 2014-3-14 10:57
路过!!!
帮顶……
作者: levin    时间: 2014-3-14 11:02
路过!!!
帮顶……
作者: 宇航员    时间: 2014-3-18 11:00
顶!!!!!!!!!!!!!!!!!!!!!!!!!
作者: zpklfruV    时间: 2014-3-18 11:05
顶......
楼下跟上.....
作者: 冰雨    时间: 2014-3-20 10:52
顶......
楼下跟上.....
作者: 极HONDA速    时间: 2014-3-20 10:57
(*^__^*) 嘻嘻……
作者: zpklfruV    时间: 2014-3-26 15:50
(*^__^*) 嘻嘻……
作者: 欧宝    时间: 2014-3-28 09:46
顶!!!!!!!!!!!!!!!!!!!!!!!!!
作者: 风浪子    时间: 2014-3-28 09:50
路过!!!
帮顶……
作者: 拉登    时间: 2014-3-28 09:52
顶!!!!!!!!!!
作者: 茶神idg    时间: 2014-3-28 09:57
路过!!!
不发表意见……
作者: dglei88    时间: 2014-3-31 16:34
顶起来…………
作者: 等你回来    时间: 2014-3-31 16:37
顶......
楼下跟上.....
作者: 野风    时间: 2014-4-2 16:03
顶!!!!!!!!!!
作者: 慕容柔晴    时间: 2014-4-8 10:28
(*^__^*) 嘻嘻……
作者: 飞天舞    时间: 2014-4-8 10:34
路过!!!
帮顶……
作者: 老朽    时间: 2014-4-8 10:35
(*^__^*) 嘻嘻……
作者: 车晶晶    时间: 2014-4-10 15:48
路过!!!
帮顶……
作者: 老朽    时间: 2014-4-10 15:50
路过!!!
不发表意见……
作者: lw7511    时间: 2014-4-10 15:55
顶......
楼下跟上.....
作者: We晕晕    时间: 2014-4-23 10:42
顶!!!!!!!!!!!!!!!!!!!!!!!!!
作者: 慕容柔晴    时间: 2014-5-14 14:04
路过!!!
不发表意见……
作者: 看看侃侃    时间: 2014-5-14 14:06
顶!!!!!!!!!!!!!!!!!!!!!!!!!
作者: audigy    时间: 2014-5-14 14:07
顶......
楼下跟上.....
作者: 鹦鹉仔    时间: 2014-5-14 14:14
路过!!!
帮顶……
作者: 卡巴kala    时间: 2014-6-12 09:38
路过!!! 不发表意见……
作者: ben7    时间: 2014-6-12 09:41
(*^__^*) 嘻嘻……
作者: 江枫    时间: 2014-6-12 09:42
路过!!! 不发表意见……
作者: 苦田辛君    时间: 2014-6-17 14:59
路过!!!
帮顶……




欢迎光临 EaBIM (https://eabim.net/) Powered by Discuz! X3.2