EaBIM

标题: 我们经常会添加自己的参数到对象中,一个参数可以添加到多个类别的对象。2011提供... [打印本页]

作者: 萧闫子    时间: 2014-1-9 12:31
标题: 我们经常会添加自己的参数到对象中,一个参数可以添加到多个类别的对象。2011提供...
元素的参数分普通的属性参数和类型属性参数。

参数的值可能是一个整数,一个字符串,也可能是一个元素对象。比如是一种材质。

材质也分多种,管道有管道对齐的材质。

  1. <div align="left">using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;

  5. using WinForm = System.Windows.Forms;

  6. using Autodesk.Revit.UI;
  7. using Autodesk.Revit.DB;
  8. using Autodesk.Revit.Attributes;

  9. using Autodesk.Revit.DB.Mechanical;
  10. using Autodesk.Revit.UI.Selection;
  11. using Autodesk.Revit.ApplicationServices;

  12. using Autodesk.Revit.DB.Structure;
  13. using Autodesk.Revit.DB.ExtensibleStorage;
  14. using Autodesk.Revit.DB.Plumbing;
  15. using Autodesk.Revit.DB.Architecture;

  16. using System.Xml;

  17. namespace RevitCodes
  18. {

  19.     [TransactionAttribute(Autodesk.Revit.Attributes.TransactionMode.Manual)]
  20.     public class cmdParameter : IExternalCommand
  21.     {
  22.         public Result Execute(ExternalCommandData commandData, ref string messages, ElementSet elements)
  23.         {
  24.             UIApplication uiApp = commandData.Application;
  25.             Document doc = uiApp.ActiveUIDocument.Document;
  26.             Selection sel = uiApp.ActiveUIDocument.Selection;

  27.             Transaction ts = new Transaction(doc, "http://revit.5d6d.com");
  28.             ts.Start();
  29.             //选中的元素,这里选中一个管道Pipe
  30.             Element elemPick = null;
  31.             foreach (Element elem in sel.Elements)
  32.             {
  33.                 elemPick = elem;
  34.                 break;
  35.             }

  36.             //遍历元素的普通参数
  37.             string strParameter = "";
  38.             foreach (Parameter p in elemPick.Parameters)
  39.             {
  40.                 strParameter += p.Definition.ParameterGroup + "," + p.Definition.Name + "," + p.AsValueString() + "\n";
  41.             }
  42.             TaskDialog.Show("parameter", strParameter);
  43.             //遍历元素的类型属性
  44.             Pipe pipe = elemPick as Pipe;
  45.             foreach (Parameter p in pipe.PipeType.Parameters)
  46.             {
  47.                 if (p.Definition.Name == "材质")
  48.                 {
  49.                     //元素的参数值可能是一个元素,比如材质的参数值是一个Material元素
  50.                     PipeMaterialType pipeMater = doc.get_Element(p.AsElementId()) as PipeMaterialType;
  51.                     //材质还分管道材质这里不能转化为Material
  52.                     TaskDialog.Show("类型属性", pipeMater.Category.Name + "," + pipeMater.Name);
  53.                 }
  54.             }
  55.             //系统包含的材质元素
  56.             string strMaterial = "";
  57.             Materials materials = doc.Settings.Materials;
  58.             foreach (Material ma in materials)
  59.             {
  60.                 strMaterial += ma.Name + "\n";
  61.             }
  62.             TaskDialog.Show("Material", strMaterial);

  63.             ts.Commit();

  64.             return Result.Succeeded;
  65.         }
  66.         //元素的参数,参数组,即属性面版中可以折叠的部分,这里读Pipe
  67.         public Parameter FindParameter(Element element)
  68.         {
  69.             Parameter foundParameter = null;
  70.             int i = 0;
  71.             foreach (Parameter parameter in element.Parameters)
  72.             {
  73.                 //BuiltInParameterGroup.PG_MECHANICAL//机械
  74.                 //BuiltInParameterGroup.PG_CONSTRAINTS//限制条件
  75.                 //BuiltInParameterGroup.PG_GEOMETRY//尺寸标注
  76.                 //BuiltInParameterGroup.PG_PHASING//阶段化
  77.                 //BuiltInParameterGroup.PG_IDENTITY_DATA//标识数据
  78.                 //BuiltInParameterGroup.PG_INSULATION//绝缘层
  79.                 if (BuiltInParameterGroup.PG_GEOMETRY == parameter.Definition.ParameterGroup)
  80.                 {
  81.                     TaskDialog.Show("g", parameter.Definition.Name);
  82.                     i += 1;
  83.                 }
  84.                 Definition definition = parameter.Definition;//参数的基类
  85.                 //过滤参数
  86.                 if (definition.ParameterGroup == BuiltInParameterGroup.PG_MATERIALS &&
  87.                         definition.ParameterType == ParameterType.Material)
  88.                 {
  89.                     foundParameter = parameter;
  90.                     break;
  91.                 }
  92.             }
  93.             TaskDialog.Show("i", i + "个");
  94.             return foundParameter;
  95.         }
  96.     }

  97. }</div>
复制代码

from:
http://revit.5d6d.com/thread-1324-1-1.html


作者: 野风    时间: 2014-2-20 14:48
(*^__^*) 嘻嘻……




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