完善主體資料,免費贈送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 之 攔截鼠標雙擊元素事件

      主站蜘蛛池模板: 国产精品无码AV一区二区三区| 亚洲一区精彩视频| 影音先锋中文无码一区| 亚洲乱码日产一区三区 | 精品人妻一区二区三区浪潮在线 | 国产日韩一区二区三区在线观看| 美女福利视频一区| 亚洲成av人片一区二区三区| 中文字幕国产一区| 国产精品一区二区久久沈樵| 国产精品被窝福利一区| 少妇一夜三次一区二区| 久久久无码精品国产一区| 一级毛片完整版免费播放一区| 69久久精品无码一区二区| 美女AV一区二区三区| 精品动漫一区二区无遮挡 | 亚洲一区二区三区首页| 香蕉在线精品一区二区| 国产一区二区三区播放| 蜜臀AV无码一区二区三区| 亚洲国产韩国一区二区| 射精专区一区二区朝鲜| 本免费AV无码专区一区| 人妻少妇精品一区二区三区| 精品一区二区三区在线视频观看| 国产美女一区二区三区| 国产免费一区二区三区| 亚洲av无码片vr一区二区三区 | 欧美成人aaa片一区国产精品 | 亚洲电影国产一区| 日本片免费观看一区二区| 亚洲中文字幕一区精品自拍| 成人中文字幕一区二区三区| 深田咏美AV一区二区三区| 激情啪啪精品一区二区| 久久精品中文字幕一区| 国偷自产一区二区免费视频| 蜜臀AV免费一区二区三区| 无码人妻精品一区二区三区不卡 | 国产在线观看91精品一区|