编程如何判断一个对象在视图中可见?
2012-09-29 16:58
239 查看
转载请复制以下信息:
原文链接: http://blog.csdn.net/joexiongjin/article/details/8032852
作者: 叶雄进 , Autodesk ADN
一个对象在Revit的视图中是否可以见取决于
1. 这个对象是否在这个视图中隐藏了? 如果是用命令的方式在该视图中把目标对象隐藏了,可以用Element.IsHIde() 函数来获取这个对象的可见性。
2. 有些是因为视图设置的缘故看不见。比如在二层平面由于设置的原因,在二层看不见一层可见的对象。这种情况下用IsHide() 无法来判断一层的那些可见的对象是否在二层可见。
3. 对于轴线,我们可以在立面图上设置其在哪些平面图中显示。这样可以设置轴线在哪些平明图中可见。这种情况下无法用用IsHide() 来判断。
那么用什么办法可以判断一个对象在某一个视图中的可见性呢?
答:
对于2,3两种情况,Revit没有提供函数来直接判断对象是否可见。
变通办法: 使用Revit的过滤器。
Revit 过滤器有三个重载形式:
FilteredElementCollector(Document)
FilteredElementCollector(Document, ElementId)
FilteredElementCollector(Document, ICollection(ElementId))
其中第二个函数可以用来获取一个视图中所有可见对象。
所以我们可以通过第二个函数获取所有目标视图中的可见对象列表。然后在这个列表中确定是否包含了你的目标对象。
请看下面的代码。
原文链接: http://blog.csdn.net/joexiongjin/article/details/8032852
作者: 叶雄进 , Autodesk ADN
一个对象在Revit的视图中是否可以见取决于
1. 这个对象是否在这个视图中隐藏了? 如果是用命令的方式在该视图中把目标对象隐藏了,可以用Element.IsHIde() 函数来获取这个对象的可见性。
2. 有些是因为视图设置的缘故看不见。比如在二层平面由于设置的原因,在二层看不见一层可见的对象。这种情况下用IsHide() 无法来判断一层的那些可见的对象是否在二层可见。
3. 对于轴线,我们可以在立面图上设置其在哪些平面图中显示。这样可以设置轴线在哪些平明图中可见。这种情况下无法用用IsHide() 来判断。
那么用什么办法可以判断一个对象在某一个视图中的可见性呢?
答:
对于2,3两种情况,Revit没有提供函数来直接判断对象是否可见。
变通办法: 使用Revit的过滤器。
Revit 过滤器有三个重载形式:
FilteredElementCollector(Document)
FilteredElementCollector(Document, ElementId)
FilteredElementCollector(Document, ICollection(ElementId))
其中第二个函数可以用来获取一个视图中所有可见对象。
所以我们可以通过第二个函数获取所有目标视图中的可见对象列表。然后在这个列表中确定是否包含了你的目标对象。
请看下面的代码。
using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using Autodesk.Revit .DB; using Autodesk.Revit.UI; using Autodesk.Revit .ApplicationServices; using Autodesk.Revit.Attributes ; using Autodesk.Revit.UI.Selection; [TransactionAttribute(Autodesk.Revit.Attributes.TransactionMode.Manual)] public class RevitCommand : IExternalCommand { public Result Execute(ExternalCommandData commandData, ref string messages, ElementSet elements) { UIApplication app = commandData.Application; Document doc = app.ActiveUIDocument.Document; Transaction trans = new Transaction(doc, "ExComm"); trans.Start(); //pick an object in the elevation view. Selection sel = app.ActiveUIDocument.Selection; Reference ref1 = sel.PickObject(ObjectType.Element, "pick the grid to check if it is visible in level 1 and level 2"); Element pickObj = doc.GetElement(ref1); //check its visibility ViewPlan plan1 = null; ViewPlan plan2 = null; FilteredElementCollector collector = new FilteredElementCollector(doc); collector.OfClass(typeof(ViewPlan)); Autodesk.Revit.DB.View plan; foreach (Element elem in collector) { plan = elem as Autodesk.Revit.DB.View; if(plan.ViewType == ViewType.FloorPlan) { if (plan.Name.Equals("Level 2")) plan2 = plan as ViewPlan; } } FilteredElementCollector collector1 = new FilteredElementCollector(doc, plan2.Id); string msg = "not visible in Level 2"; IList<Element> lists = collector1.ToElements(); foreach (Element elem in lists) { if (elem.Id.IntegerValue.Equals(pickObj.Id.IntegerValue)) { msg = "The pick object is visilbe in Level 2 plan view"; break; } } TaskDialog.Show("visible?", msg); trans.Commit(); return Result.Succeeded; } }
相关文章推荐
- postgresql中如何判断一个对象是表还是视图?
- 如何编程修改一个隶属于视图的对象颜色
- Revit API 开发 (4): 如何判断一个构件,element,在某个视图中的可见性?
- JS如何判断一个对象为空
- Swift:如何判断一个对象是否是某个类(或其子类)的实例
- 如何判断出一个js对象是否一个dom对象
- js如何判断一个对象{}是否为空对象,没有任何属性
- 如何遍历一个对象所有的属性并判断属性值
- js如何判断一个对象是不是Array?
- GC是如何判断一个对象为"垃圾"的?被GC判断为"垃圾"的对象一定会被回收吗?
- 如何判断一个对象是否是数组。
- 【Java】在Java中如何判断一个对象属于一个类
- 如何判断一个对象是否含有属性
- js如何判断一个对象是不是Array?
- GC是如何判断一个对象为"垃圾"的?被GC判断为"垃圾"的对象一定会被回收吗?
- c++如何判断一个字符串是否只有可见字符
- js如何判断一个对象为空
- 如何判断一个对象能不能使用plist
- 如何让 Spring MVC Controller 的同一个 URL 请求,根据逻辑判断返回 JSON 或者 HTML 视图?
- 如何判断一个对象是不是为空