array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 revit 二次开发之读取参数 - Xincubus - 爱码网
Xincubus

revit 二次开发之读取参数

revit中使用api读取元素的参数主要有两种方法:

1,使用Element.Parameters获得元素所有参数,然后通过遍历参数名找到需要的参数。

我们以读取墙的面积参数为例,代码如下:

 

 1 using System.Text;
 2 using System.Threading.Tasks;
 3 using Autodesk.Revit.DB;
 4 using Autodesk.Revit.UI;
 5 using Autodesk.Revit.ApplicationServices;
 6 using Autodesk.Revit.UI.Selection;
 7 using Autodesk.Revit.Attributes;
 8 using System.Windows.Forms;
 9 using System;
10 using System.Collections.Generic;
11 using System.Linq;
12 using System.Diagnostics;
13 using System.IO;
14 
15 namespace Xincubus
16 {
17     [Transaction(TransactionMode.Manual)]
18     public class Test1 : IExternalCommand
19     {
20         public Result Execute(ExternalCommandData document, ref string message, ElementSet elements)
21         {
22             UIApplication uiapp = document.Application;
23             Document doc = uiapp.ActiveUIDocument.Document;
24             FilteredElementCollector wallCollector = new FilteredElementCollector(doc);
25             wallCollector.WherePasses(new ElementCategoryFilter(BuiltInCategory.OST_Walls)).WhereElementIsNotElementType();
26             double wallArea = 0;
27             double  wallsArea =0;   
28             foreach (Wall wall in wallCollector)
29             {
30                 ParameterSet parameters = wall.Parameters;
31                 foreach (Parameter parameter in parameters)
32                 {
33                     if (parameter.Definition.Name == "面积")
34                     {
35                         wallArea = parameter.AsDouble();
36                         wallsArea = wallsArea+wallArea;
37                     }
38                 }             
39             }
40             MessageBox.Show("所有墙面积之和为" + wallsArea.ToString() + "");
41             return Result.Succeeded;
42         }
43     }
44 }

2.使用Element.get_Parameter()来获得()中限定的参数。

Element.get_Parameter()总共可以通过加载四类参数属性来获得参数值,分别是:

Element.get_Parameter(BuiltInParameter builtInParam)

Element.get_Parameter(string name) (已更改为IList<Parameter> GetParameters(string name) 和LookUpParameter(string name))

Element.get_Parameter(Guid guid)

Element.get_Parameter(Definition definition)

下面分别叙述这四种方法;

①Element.get_Parameter(BuiltInParameter builtInParam)

通过BuiltInParameter来读取参数,首先需要知道参数的BuiltInParameter值,使用look up工具可以找到revit自带参数的BuiltInParameter值,还是以墙的面积参数为例:

可以得到墙的面积参数的BuiltInParameter值为HOST_AREA_COMPUTED,代码如下:

 
 1 [Transaction(TransactionMode.Manual)]
 2     public class Test2 : IExternalCommand
 3     {
 4         public Result Execute(ExternalCommandData document, ref string message, ElementSet elements)
 5         {
 6             UIApplication uiapp = document.Application;
 7             Document doc = uiapp.ActiveUIDocument.Document;
 8             FilteredElementCollector wallCollector = new FilteredElementCollector(doc);
 9             wallCollector.WherePasses(new ElementCategoryFilter(BuiltInCategory.OST_Walls)).WhereElementIsNotElementType();
10             double wallArea = 0;
11             double wallsArea = 0;
12             foreach (Wall wall in wallCollector)
13             {
14                 Parameter parameter= wall.get_Parameter(BuiltInParameter.HOST_AREA_COMPUTED);                                 
15                         wallArea = parameter.AsDouble();
16                         wallsArea = wallsArea + wallArea;
17                     
18                 
19             }
20             MessageBox.Show("所有墙面积之和为" + wallsArea.ToString() + "");
21             return Result.Succeeded;
22         }
23     }

②Element.get_Parameter(string name)(原)

Element.get_Parameter(string name),在revit2015之后将此函数一分为二,

     Ⅰ,IList<Parameter> GetParameters(string name) ,即通过查找参数名字获得所有名称为name的参数,不举例了。

     Ⅱ,LookUpParameter(string name),即通过查找参数名字获得第一个名称为name的参数,同样我们以墙的面积为例:

 1 [Transaction(TransactionMode.Manual)]
 2     public class Test3 : IExternalCommand
 3     {
 4         public Result Execute(ExternalCommandData document, ref string message, ElementSet elements)
 5         {
 6             UIApplication uiapp = document.Application;
 7             Document doc = uiapp.ActiveUIDocument.Document;
 8             FilteredElementCollector wallCollector = new FilteredElementCollector(doc);
 9             wallCollector.WherePasses(new ElementCategoryFilter(BuiltInCategory.OST_Walls)).WhereElementIsNotElementType();
10             double wallArea = 0;
11             double wallsArea = 0;
12             string parameterName = "面积";
13             foreach (Wall wall in wallCollector)
14             {
15                 Parameter parameter = wall.LookupParameter(parameterName);
16                 wallArea = parameter.AsDouble();
17                 wallsArea = wallsArea + wallArea;
18             }
19             MessageBox.Show("所有墙面积之和为" + wallsArea.ToString() + "");
20             return Result.Succeeded;
21         }
22     }

③Element.get_Parameter(Guid guid)

 通过Guid来读取参数,Guid的值在创建共享参数的TXT文件中。

事实上TXT文件中还有一个Group值以及Name关系到下一种方法,在此截图说明:

通过Guid获得的参数不能是revit自带的参数,只能是后期添加的共享参数(Definition亦是如此),我们以上述截图中创建的“测试”参数为例,通过Guid获得参数的的示例代码如下:

 1  [Transaction(TransactionMode.Manual)]
 2     public class Test4 : IExternalCommand
 3     {
 4         public Result Execute(ExternalCommandData document, ref string message, ElementSet elements)
 5         {
 6             UIApplication uiapp = document.Application;
 7             Document doc = uiapp.ActiveUIDocument.Document;
 8             FilteredElementCollector wallCollector = new FilteredElementCollector(doc);
 9             wallCollector.WherePasses(new ElementCategoryFilter(BuiltInCategory.OST_Walls)).WhereElementIsNotElementType();
10             string walltest = "";
11             string wallstest = "";
12             Guid guid = new Guid ("cca4f606-7bd5-413f-97f3-68b9689c5e9b");
13             foreach (Wall wall in wallCollector)
14             {
15                 Parameter parameter = wall.get_Parameter(guid);
16                 walltest = parameter.AsString();
17                 wallstest= wallstest + walltest+"\n";
18             }
19             MessageBox.Show("所有墙的测试参数值分别为" + wallstest );
20             return Result.Succeeded;
21         }
22     }

④Element.get_Parameter(Definition definition)

Element.get_Parameter(Definition definition)同样只能获得共享参数,且方法相对繁琐,需要创建Definition文件,建议通过api创建共享参数的可以使用此方法。同样以“测试”为例,代码如下:

 1  [Transaction(TransactionMode.Manual)]
 2     public class Test5: IExternalCommand
 3     {
 4         public Result Execute(ExternalCommandData document, ref string message, ElementSet elements)
 5         {
 6             UIApplication uiapp = document.Application;
 7             Document doc = uiapp.ActiveUIDocument.Document;
 8             FilteredElementCollector wallCollector = new FilteredElementCollector(doc);
 9             wallCollector.WherePasses(new ElementCategoryFilter(BuiltInCategory.OST_Walls)).WhereElementIsNotElementType();
10             string walltest = "";
11             string wallstest = "";
12             Autodesk.Revit.ApplicationServices.Application app = document.Application.Application;
13             app.SharedParametersFilename = @"C:\Users\xincubus\Desktop\test.txt";
14             DefinitionFile definitionFile = app.OpenSharedParameterFile();
15             DefinitionGroup group = definitionFile.Groups.get_Item("wall");
16             Definition definition = group.Definitions.get_Item("测试");
17             foreach (Wall wall in wallCollector)
18             {
19                 Parameter parameter = wall.get_Parameter(definition);
20                 walltest = parameter.AsString();
21                 wallstest = wallstest + walltest + "\n";
22             }
23             MessageBox.Show("所有墙的测试参数值分别为" + wallstest);
24             return Result.Succeeded;
25         }
26     }

 

以上一共有6种方法,

 Element.Parameters遍历法速度最慢,不推荐使用。

Element.get_Parameter(BuiltInParameter builtInParam) 速度最快,但是共享参数无法光靠此函数获得,因为所有共享参数的BuiltInParameter 值均为INVALID,推荐需获得revit自带参数的时候使用。

IList<Parameter> GetParameters(string name) 和LookUpParameter(string name)速度比Element.get_Parameter(BuiltInParameter builtInParam)、Element.get_Parameter(Guid guid)和Element.get_Parameter(Definition definition)都慢,但比Element.Parameters快,建议在特殊情况下使用。

Element.get_Parameter(Guid guid)和Element.get_Parameter(Definition definition)速度相似,且都是用于共享参数的,我个人比较喜欢事先将共享参数TXT文件先创建好,然后使用Element.get_Parameter(Guid guid);倘若读者是通过api创建共享参数TXT文件的,由于事先已经定义了Definition变量,可以选择Element.get_Parameter(Definition definition)。

 

分类:

技术点:

相关文章: