zoukankan      html  css  js  c++  java
  • Revit二次开发 族参数的获取

    本文章代码写的是对族参数的获取,并转成DataTable可作为数据源直接绑定在form窗体控件上

    流程思路为:

    1.在固定位置找到族文件,加载到项目中

    2.读取族文件中所有类型:Get_FamilySymbol(Family family);

    3.获取族文件参数: GetParameter(Element e, string header)

    4. 获取族文件中所有类型参数:getSymbolpara()

    5.将族类型信息参数转成DataTable表格:ShowAllBuildinPara()

    6.卸载族文件

    using System.Collections.Generic;
    using System.Data;
    using System.Text;
    using Autodesk.Revit.Attributes;
    using Autodesk.Revit.DB;
    using Autodesk.Revit.UI;
    
    namespace ceshi
    {
    [Transaction(TransactionMode.Manual)]
    public class Class1 : IExternalCommand
    {
      Family family = null;
      public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
      {
        Document doc = commandData.Application.ActiveUIDocument.Document;
        string s = @"C:xx.rfa"; 
        Transaction tran = new Transaction(doc);
        tran.Start("载入族");
        bool b = doc.LoadFamily(s,out family);
        tran.Commit();
        if (b){TaskDialog.Show("11","加载成功");} 
        Get_FamilySymbol(family);//获取族类型
        Element element = family as Element;
        GetParameter(element,"11");//获取族文件参数
        getSymbolpara();//获取族类型参数
        ShowAllBuildinPara();//将族类型信息参数转成table表格
        Transaction trandelete = new Transaction(doc);//创建事物
        trandelete.Start("删除族");//开启事物 
        trandelete.Commit();//关闭事物
        return Result.Succeeded;
    } 
    public void Get_FamilySymbol(Family family)//获取族类型
    {
    StringBuilder message = new StringBuilder("选择的族文件名称: " + family.Name+ "
     " + "
     ");
    ISet<ElementId> familySymbolIds = family.GetFamilySymbolIds(); 
    if (familySymbolIds.Count == 0){message.AppendLine("Contains no family symbols.");}
    else
    {
    message.AppendLine("文件中有以下类型 : ");
    foreach (ElementId id in familySymbolIds)
    {
    FamilySymbol familySymbol = family.Document.GetElement(id) as FamilySymbol; 
    message.AppendLine("
    Name: " + familySymbol.Name);
    foreach (ElementId materialId in familySymbol.GetMaterialIds(false))
    {
    Material material = familySymbol.Document.GetElement(materialId) as Material;
    message.AppendLine("
    Material : " + material.Name);
    }
    }
    }
    TaskDialog.Show("Revit", message.ToString());
    }
    public void GetParameter(Element e, string header)//获取族文件参数
    {
    StringBuilder sb = new StringBuilder();//得到所有的枚举名称
    string[] strs = System.Enum.GetNames(typeof(BuiltInParameter));
    foreach (string str in strs)
    {
    BuiltInParameter paramEnum =(BuiltInParameter)System.Enum.Parse(typeof(BuiltInParameter), str);// 查看枚举名称对应的BuiltInParameter
    Parameter tmpParam = e.get_Parameter(paramEnum);// 通过BuiltInParameter的到参数
    if (tmpParam != null)
    {
    string paraName = "";
    paraName = tmpParam.Definition.Name;
    string val = tmpParam.AsValueString();
    sb.Append(e.Name + ":	" + str + "(" + paraName + ")" + " 	= 	" + val + "
    ");
    }
    }
    TaskDialog.Show(header, sb.ToString());
    }
    public void getSymbolpara()//获取族类型参数
    {
    ISet<ElementId> familySymbolIds = family.GetFamilySymbolIds();
    StringBuilder message = new StringBuilder("选择的族文件名称: " + family.Name );
    foreach (ElementId id in familySymbolIds)
    {
    FamilySymbol familySymbol = family.Document.GetElement(id) as FamilySymbol;
    message.AppendLine("
    Name: " + familySymbol.Name);
    foreach (Parameter p in familySymbol.Parameters)
    { 
    string sname= p.Definition.Name;
    string svalue = p.AsValueString();
    message.AppendLine(sname+" : "+svalue);
    }
    }
    TaskDialog.Show("Revit", message.ToString());
    }
    public void ShowAllBuildinPara()//将族类型信息参数转成table表格
    {
    ISet<ElementId> familySymbolIds = family.GetFamilySymbolIds();
    ElementId[] ids = new ElementId[familySymbolIds.Count];
    familySymbolIds.CopyTo(ids, 0);
    var id = ids[0];
    DataTable dataTable = new DataTable();
    FamilySymbol familySymbol = family.Document.GetElement(id) as FamilySymbol;
    dataTable.Columns.Add("类型名称");
    foreach (Parameter p in familySymbol.Parameters)
    {
    if (p.Definition.Name == "类别"||p.Definition.Name == "类型名称")
    continue;
    dataTable.Columns.Add(p.Definition.Name);
    }
    foreach (ElementId rowId in ids)
    {
    FamilySymbol symbol = family.Document.GetElement(rowId) as FamilySymbol;
    DataRow row = dataTable.NewRow();
    row["类型名称"] = symbol.Name;
    foreach (Parameter p in symbol.Parameters)
    {
    if (p.Definition.Name == "类别"||p.Definition.Name == "类型名称")
    continue;
    row[p.Definition.Name] = p.AsValueString();
    }
    dataTable.Rows.Add(row);
    }
    }
    }
    }
  • 相关阅读:
    406, "PRECONDITION_FAILED
    windows10x64环境安装RabbitMQ
    jquery插件formValidator的ajaxValidator传参数问题
    “~/Views/Home/Text.aspx”处的视图必须派生自 ViewPage、ViewPage<TModel>、ViewUserControl 或 ViewUserControl<TModel>。
    无法安装程序包“MIcrosoft.Owin.Security 2.0.2”。您正在尝试将此程序包安装到某个将“.NETFramework,Version=v4.0”作为目标的项目中。
    MSSQL优化之——查看语句执行情况
    C# 测试代码运行时间
    转换 Html 内容为纯文本内容(html,文本互转)
    腾讯微博OAuth2.0 .NET4.0 SDK 发布以及网站腾讯微博登陆示例代码(原创)
    QQ互联OAuth2.0 .NET SDK 发布以及网站QQ登陆示例代码(转)
  • 原文地址:https://www.cnblogs.com/liaocheng/p/13161914.html
Copyright © 2011-2022 走看看