Revit API 进阶之隐藏Element用户可见参数.
2017-02-26 00:39
295 查看
在阅读本文章之前,应具有一定Revit API开发基础.
在RevitAPI进阶其他博文中讲到此话题,但是并没有具体代码示例,在此即贴出具体代码,如下所示:
在RevitAPI进阶其他博文中讲到此话题,但是并没有具体代码示例,在此即贴出具体代码,如下所示:
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 tr 4000 ue; } 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); } } }
相关文章推荐
- Revit API 开发 (4): 如何判断一个构件,element,在某个视图中的可见性?
- Revit Family API 添加材质参数设置可见性
- Revit API共享参数的使用
- Revit API根据参数类型取得参数的值
- 【Revit API】创建工作集并将element加入工作集中
- Revit API元素镜像MirrorElement
- Revit API 开发 (5): 如何得到所有的categories,创建共享参数,并把它们绑定在一起
- RevitAPI: 如何获取某个材质参数?
- RevitAPI: 如何获取可以被明细表过滤器ScheduleFilter使用的参数Parameter?
- Revit API 开发 (6): 判断 element 的 geometry 是否相交?
- revit api选择Element上的点画线
- Revit Family API 添加参数与尺寸标注
- RevitAPI: 如何创建共享参数,并和类别绑定
- Revit API 开发 (2): 显示选中的图元(element)
- RevitAPI进阶之独立进程内读取、写入Revit文件.
- 【Revit API】创建共享参数
- RevitAPI如何区分项目参数和共享参数
- Revit API进阶之调用Revit命令、外部命令、其他插件按钮、右键菜单命令...
- Revit API判断参数的类型
- 关于Revit API修改元素参数的问题?