完善主體資料,免費贈送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一区二区三区| 久久91精品国产一区二区| 欧亚精品一区三区免费| 精品视频一区二区三区免费 | 日韩精品成人一区二区三区| 日韩精品久久一区二区三区| 中文字幕AV一区二区三区 | 色妞色视频一区二区三区四区| 天天爽夜夜爽人人爽一区二区| 天堂成人一区二区三区| 国产美女一区二区三区| 国产在线精品一区二区在线观看 | 一区二区视频在线观看| 亚洲一区二区三区国产精品| 日本夜爽爽一区二区三区| 国产乱人伦精品一区二区 | jazzjazz国产精品一区二区| 国产精品伦子一区二区三区| 国产高清一区二区三区视频| 精品国产一区二区三区香蕉事 | 精品一区二区三区在线播放| 精品国产一区二区三区香蕉事 | 久久精品视频一区| 中文字幕一区二区三区乱码| 国模无码一区二区三区不卡| 中文字幕一区二区免费| 日韩AV无码一区二区三区不卡毛片| 波多野结衣在线观看一区| 成人欧美一区二区三区在线视频| 中字幕一区二区三区乱码| 国产一区二区成人| 日韩一区二区三区电影在线观看| 国产精品va一区二区三区| 亚洲高清偷拍一区二区三区 | 一区二区三区精品高清视频免费在线播放 | 中文字幕一区二区人妻| 中文字幕在线观看一区二区 | 一区二区三区电影在线观看|