查看 Revit API。发现有Element::IsHidden这个方法。通过UI创建一个element,注意要使得这个element在某些视图可见,但是在另一些视图不可见。运行下面的方法,你会发现几乎所有的视图都会返回true,这个结果并不是我们想要的。

 public void ishide()
{
Element elem = Document.GetElement(new ElementId());
FilteredElementCollector fec = new FilteredElementCollector(Document).OfClass(typeof(View));
string res = "";
foreach(View view in fec.ToElements())
{
if(elem.IsHidden(view))
continue;
res += view.Name + view.Id.ToString() + "\n";
}
TaskDialog.Show("Visible", res);
}

既然从element这里无法找到适合的方法,那么转到和view相关的方法。这里我想到了在过滤构件的时候,即使用FilteredElementCollector的时候可以给它传递一个额外的参数。通过这种方式,FilteredElementCollector仅仅会在特定的视图中可见的那些element上做过滤。运行下面的代码,可以得到期望的结果。

 public void ishide()
{
ElementId elemId = new ElementId();
FilteredElementCollector fec = new FilteredElementCollector(Document).OfClass(typeof(View));
string res = "";
foreach(View view in fec.ToElements())
{
if(!isVisble(view.Id, elemId))
continue;
res += view.Name + view.Id.ToString() + "\n";
}
TaskDialog.Show("Visible View", res);
} public bool isVisble(ElementId viewId, ElementId instId)
{
try
{
FilteredElementCollector fec = new FilteredElementCollector(Document, viewId).OfClass(typeof(FamilyInstance));
foreach(FamilyInstance fi in fec.ToElements())
{
if(fi.Id == instId)
return true;
}
}
catch(Exception)
{
// 某类视图不能使用 FilteredElementCollector
}
return false;
}

Revit API 判断一个构件在某个视图中的可见性的更多相关文章

  1. js判断一个元素是否在数组中

    js判断一个元素是否在数组中 var arr = ['a','s','d','f']; console.info(isInArray(arr,'a'));//循环的方式 function isInAr ...

  2. 【JS】【6】判断一个元素是否在数组中

    摘要: 有三种方式: 1,jquery的inArray方法 2,数组的indexOf方法 3,普通的for循环方法 正文: 1,jquery的inArray方法 /** * @param {Objec ...

  3. 判断一个点是否在RotatedRect中

    openCV函数pointPolygonTest(): C++: double pointPolygonTest(InputArray contour, Point2f pt, bool measur ...

  4. 【Revit API】梁构件支座检查算法

    一.前言         应该是第二次写关于Revit API的博文了.虽然在BIM企业中工作,从事桌面BIM软件开发,但是我是不怎么喜欢写Revit API相关的代码.平时更多的是在写界面展示,架构 ...

  5. python中如何不区分大小写的判断一个元素是否在一个列表中

    python中判断某一个元素是否在一个列表中,可以使用关键字in 和 not in. 示例如下: 如果需要输出相应的信息,可以搭配使用if语句,这里不赘述. --------------------- ...

  6. jquery 判断一个元素是否在数组中 $.inarry()使用

    需要判断一个元素是否在一个数组里: js indexOf()方法  如果存在 则返回该元素的下标值 如果不存在则返回-1 学习源头: http://www.w3school.com.cn/jsref/ ...

  7. indexOf() 如何判断一个元素在指定数组中是否存在? 找出指定元素出现的所有位置? indexOf()方法 是正序查找,lastIndexOf()是倒叙查找

    indexOf()方法返回在数组中可以找到一个给定元素的第一个索引,如果不存在,则返回-1. let a = [2, 9, 7, 8, 9]; a.indexOf(2); // 0 a.indexOf ...

  8. Revit API判断是不是柱族模板

    OwnerFamily即族模板.获取类别的方法:Document.Settings.Categories.get_Item(BuiltInCategory.OST_Columns); //判断是不是柱 ...

  9. Revit API判断直线相交关系移动风管

    start )             );         )) )) );         XYZ xyz12 = lCurve1.Curve.get_EndPoint();         XY ...

随机推荐

  1. 线程简述(Thread)

    线程: 进程是一个正在运行的程序,例如电脑上现在在运行的qq,浏览器,电脑管家,这些都是进程 线程就是每一个进程中的一个执行单元,每一个进程至少一个线程,可以有多个线程,例如浏览器上每一个打开的网页都 ...

  2. Python socketserver ftp功能简单讲解

    socketserver模块实现并发 为什么要讲socketserver?我们之前写的tcp协议的socket是不是一次只能和一个客户端通信,如果用socketserver可以实现和多个客户端通信.它 ...

  3. SSH防止超时的设置

    针对SSH命令工具超时的解决方法: 1.在命令行输入这两行代码,即可完成 echo export TMOUT=1000000 >> /root/.bash_profile cat /roo ...

  4. git 清空缓冲区

    git rm与git rm --cached 当我们需要删除暂存区或分支上的文件, 同时工作区也不需要这个文件了, 可以使用 git rm file_path git commit -m 'delet ...

  5. prototype和_proto_

    __proto__(隐式原型)与prototype(显式原型) 显式原型 explicit prototype property:用来实现基于原型的继承与属性的共享. 每一个函数在创建之后都会拥有一个 ...

  6. sqlite 3基本使用方法

    1.sqlite数据库数据类型 Integer 整型 varchar(10) 字符数组 float 浮点型 double 双精度浮点型 char(10) 字符型 text 文本型 2.sql语法 2. ...

  7. thinkphp 参数传递方式(基础)

    我今天下午主要学习了thinkphp5.0的路由部分,我下面总结一下我主要学习到的知识点: 路由定义: 有两种方式: (1).动态注册: eg: Route::rule('hello','index/ ...

  8. n 中选 m —— 随机采样的艺术

    0,1,2-n-1,n 个数中随机取 m 个数,要求 0, 1, n-1,此 n 个数每个数被取到的概率相同: Knuth 书中的随机化方法,很容易写出: void genkunth (int n, ...

  9. NSCTF2015 逆向第五题分析

    这道题目我没有写出Exploit,因为编码时候里面几个细节处理出错.但对程序的逆向分析已完成,这里就学习一下别人写Exploit的思路.主要参考:绿盟科技网络攻防赛资料下载 0x01 题目要求 题目要 ...

  10. numpy中的复合数组

    1.复合数组的创建 # 复合数组,最重要的是定义dtype a = np.array([('ABC', [1, 2, 3])], dtype="U3, 3i4") print(a) ...