完善主體資料,免費贈送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视频一区二区| 国精产品一区一区三区| aⅴ一区二区三区无卡无码| 亚洲午夜一区二区三区| 无码人妻精品一区二区三区在线 | 卡通动漫中文字幕第一区| 精品成人乱色一区二区| 日韩av无码一区二区三区| 久久国产精品一区二区| 国产成人无码一区二区在线观看| 日韩一区二区三区在线精品| 无码av中文一区二区三区桃花岛 | 免费一本色道久久一区| 亚洲一区二区免费视频| 蜜臀AV一区二区| 麻豆aⅴ精品无码一区二区| 99久久人妻精品免费一区| 亚欧在线精品免费观看一区 | 日韩av片无码一区二区不卡电影| 任你躁国语自产一区在| 日韩精品一区二区三区中文 | 日韩精品一区二区三区不卡| 精品一区二区三人妻视频| 无码国产精品一区二区免费式影视 | 国内精品一区二区三区最新| 精品人妻无码一区二区三区蜜桃一| 亚洲av乱码一区二区三区| 中文字幕AV一区二区三区人妻少妇| 秋霞无码一区二区| 国产日韩一区二区三区| 在线免费观看一区二区三区| 免费无码一区二区| 一区二区三区视频免费| 日本一区二区免费看| 3d动漫精品啪啪一区二区中| 国产精品乱码一区二区三|