完善主體資料,免費贈送VIP會員!
      * 主體類型
      * 企業名稱
      * 信用代碼
      * 所在行業
      * 企業規模
      * 所在職位
      * 姓名
      * 所在行業
      * 學歷
      * 工作性質
      請先選擇行業
      您還可以選擇以下福利:
      行業福利,領完即止!

      下載app免費領取會員

      NULL

      ad.jpg

      Revit二次開發教程:Revit族參數可見性設置

      發布于:2019-06-22 17:52:33

      網友投稿

      更多

      很多人出于某種用途為族設置特殊的參數之后,希望可以將其隱藏。在Revit官方暴露出來的API中,是沒有方法來實現的。以下代碼演示了如何將墻體所有參數隱藏!

      using System;

      using System.Linq;

      using Autodesk.Revit.UI;

      using Autodesk.Revit.Attributes;

      using Autodesk.Revit.DB;

      using System.Reflection;


      namespace RevitAPITest

      {

          [Transaction(TransactionMode.Manual)]

          public class APITest : IExternalCommand

          {

              public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)

              {

                  var uiDoc = commandData.Application.ActiveUIDocument;

                  var doc = uiDoc.Document;

                  var elemIds = uiDoc.Selection.GetElementIds();


                  if (elemIds.Count == 0)

                  {

                      TaskDialog.Show("Error", "Please select an element....!");

                      return Result.Failed;

                  }


                  var elem = doc.GetElement(elemIds.First());


                  //var eum = elem.Parameters.GetEnumerator();


                  var elemType = doc.GetElement(elem.GetTypeId()) as ElementType;

                  if (elemType == null)

                  {

                      return Result.Failed;

                  }

                  var eum = elemType.Parameters.GetEnumerator();


                  while (eum.MoveNext())

                  {

                      var parameter = eum.Current as Parameter;

                      parameter.SetVisibility(false);

                  }

                  return Result.Succeeded;

              }

          }


          public class NativeCore

          {

              public static bool InvokeMoudle(string mName, object[] paramters, bool apiMoudle = true)

              {

                  try

                  {

                      MethodInfo m = null;

                      if (apiMoudle)

                          m = NativeMoudle.GetAPIMoudlerMethod(mName);

                      else

                          m = NativeMoudle.GetUIMoudlerMethod(mName);

                      m.Invoke(null, paramters);

                      return true;

                  }

                  catch (Exception ex)

                  {

                      return false;

                  }

              }

          }


          public class NativeMoudle

          {

              /// 獲取RevitAPI程序集Moudle內的方法名稱.

              /// <summary>

              /// 獲取RevitAPI程序集Moudle內的方法名稱.

              /// </summary>

              /// <param name="name"></param>

              /// <returns></returns>

              public static MethodInfo GetAPIMoudlerMethod(string name)

              {

                  var moudle = NativeMoudle.getAPIMoudle();

                  var rs = moudle.GetMethods(BindingFlags.NonPublic | BindingFlags.Static).Where(m => m.Name == name);

                  return rs.Count() == 0 ? null : rs.First();

              }


              /// 獲取RevitAPIUI程序集Moudle內的方法名稱.

              /// <summary>

              /// 獲取RevitAPIUI程序集Moudle內的方法名稱.

              /// </summary>

              /// <param name="name"></param>

              /// <returns></returns>

              public static MethodInfo GetUIMoudlerMethod(string name)

              {

                  var moudle = NativeMoudle.getUIMoudle();

                  var rs = moudle.GetMethods(BindingFlags.NonPublic | BindingFlags.Static).Where(m => m.Name == name);

                  return rs.Count() == 0 ? null : rs.First();

              }


              /// 獲取RevitAPI Modules.

              /// <summary>

              /// 獲取RevitAPI Modules.

              /// </summary>

              /// <returns></returns>

              internal static Module getAPIMoudle()

              {

                  return typeof(Document).Assembly.Modules.First();

              }


              /// 獲取RevitAPIUI Modules.

              /// <summary>

              /// 獲取RevitAPIUI Modules.

              /// </summary>

              /// <returns></returns>

              internal static Module getUIMoudle()

              {

                  return typeof(UIDocument).Assembly.Modules.First();

              }


          }


          public static class ParameterExtension

          {

              /// <summary>

              /// 設置參數對象對用戶是否可見.

              /// </summary>

              /// <param name="parameter"></param>

              /// <param name="visible"></param>

              /// <returns></returns>

              public static bool SetVisibility(this Parameter parameter, bool visible)

              {

                  var parameterIntPtr = parameter.ToParamDef();

                  if (parameterIntPtr == IntPtr.Zero)

                  {

                      return false;

                  }


                  var result = NativeCore.InvokeMoudle("ParamDef.setUserVisible", new object[] 

                      {

                          parameterIntPtr, visible

                      });


                  return result;

              }


              /// <summary>

              /// 將參數對象轉為非托管指針.

              /// </summary>

              /// <param name="parameter"></param>

              /// <returns></returns>

              public static IntPtr ToParamDef(this Parameter parameter)

              {

                  try

                  {

                      var m = typeof(Parameter).GetMethod("getParamDef", BindingFlags.NonPublic | BindingFlags.Instance);

                      return ((Pointer)m.Invoke(parameter, null)).ToIntPtr();

                  }

                  catch

                  {

                      return IntPtr.Zero;

                  }

              }

          }


          public static class PointerExtension

          {

              /// 將指針轉為句柄.

              /// <summary>

              /// 將指針轉為句柄.

              /// </summary>

              /// <param name="p"></param>

              /// <returns></returns>

              public unsafe static IntPtr ToIntPtr(this Pointer p)

              {

                  return (IntPtr)p

                      .GetType()

                      .GetMethod("GetPointerValue", BindingFlags.NonPublic | BindingFlags.Instance)

                      .Invoke(p, null);

              }

          }

      }

      圖片.png

      圖片.png

      本文版權歸腿腿教學網及原創作者所有,未經授權,謝絕轉載。

      未標題-1.jpg

      上一篇:REVIT中如何把墻附著到樓梯底部?

      下一篇:Revit二次開發教程:Revit API Hook 之 攔截鼠標雙擊元素事件

      主站蜘蛛池模板: 人妻免费一区二区三区最新| 亚洲bt加勒比一区二区| 久久影院亚洲一区| 视频一区视频二区日韩专区| 亚洲av综合av一区二区三区| 精品国产一区二区三区久久影院| 一区二区三区在线播放| 成人区精品一区二区不卡| 亚洲av乱码一区二区三区香蕉| 国产欧美色一区二区三区 | 国产怡春院无码一区二区| 人妻无码一区二区三区四区| 国产av熟女一区二区三区| 日韩精品中文字幕无码一区| 在线观看一区二区三区视频 | 搜日本一区二区三区免费高清视频| 日韩美一区二区三区| 色窝窝无码一区二区三区| 精品国产一区二区三区免费看| 无码人妻精品一区二区三区99仓本| 一区二区无码免费视频网站| 精品日韩亚洲AV无码一区二区三区| 亚洲av无码一区二区三区天堂| 久久一区二区三区99| 国产日韩精品视频一区二区三区| 一区二区三区波多野结衣| 乱精品一区字幕二区| 国产精品盗摄一区二区在线| 97精品国产一区二区三区 | 亚洲AV乱码一区二区三区林ゆな | 国产日韩精品一区二区三区 | 日韩精品人妻一区二区三区四区| 伊人久久大香线蕉av一区| 国产精品一区二区综合| 亚洲av乱码中文一区二区三区| 末成年女AV片一区二区| 亚欧在线精品免费观看一区| 人体内射精一区二区三区| 无码精品尤物一区二区三区| 中文字幕乱码一区久久麻豆樱花 | 国产内射在线激情一区|