EaBIM一直以来积极响应国家“十二五”推进建筑业信息化的号召,对建筑领域的信息技术开展深入技术交流和探讨!致力于打造“BIM-建筑师-生态技术”三位一体综合资源交流共享平台,希望为BIM与可持续设计理念及技术的普及做出微小的贡献!!!

EaBIM

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
查看: 660|回复: 1
打印 上一主题 下一主题

在程序中删除视图

[复制链接]

1514

主题

7465

帖子

1万

积分

admin

Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10

积分
12396

社区QQ达人

跳转到指定楼层
楼主
发表于 2014-1-15 12:13:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下面这段代码是删除所有的平面视图(不管这个在现实中是否需要,假定有这个操作),会发现错误,无法删除。

这个代码中不删除当前视图,避开当前视图。代码是Revit 2013 的SharpDevelop代码。
  1. <p>
  2. </p><p>[csharp] view plaincopy</p><p>        public void DeleteViews()  </p><p>        {  </p><p>              </p><p>        //retrieve all views.  </p><p>            Document doc = this.ActiveUIDocument.Document;  </p><p>            FilteredElementCollector collector = new FilteredElementCollector(doc);  </p><p>            collector.OfClass(typeof(View));  </p><p>              </p><p>            Transaction trans = new Transaction(doc);  </p><p>            trans.Start("deleteViews");  </p><p>            foreach(Element elem in collector)  </p><p>            {  </p><p>                if(elem is View)  </p><p>                {  </p><p>                    View view = elem as View;  </p><p>                    if(view.IsTemplate != true)  </p><p>                    {  </p><p>                        if(view.Id.IntegerValue != doc.ActiveView.Id.IntegerValue)  </p><p>                        {  </p><p>                            if(view is ViewPlan)  </p><p>                            {  </p><p>                                TaskDialog.Show("delete view",view.Name);  </p><p>                                doc.Delete(view);  </p><p>                                  </p><p>                            }  </p><p>}}}}trans.Commit();}  </p>
复制代码
原因在哪里?
原因就在这个FilteredElementCollector collector 对象上。

通过给定一个类条件,我们可以获得一个对象集合collector。

然后对这个对象集合中的对象进行遍历和删除操作。

当删除时,实际上改变了collector对象集合,因为删除的对象也是其中的一个成员。FilteredElementCollector 对象不允许在遍历中被改变。

那怎么实现删除对象? 可以把满足条件的对象放到一个IList<Element> 集合中,然后对其中的对象进行删除。

下面代码则运行顺畅。
  1. <p></p><p>
  2. </p><p>[csharp] view plaincopy</p><p>public void DeleteViews()  </p><p>{  </p><p>      </p><p>    //retrieve all views.  </p><p>    Document doc = this.ActiveUIDocument.Document;  </p><p>    FilteredElementCollector collector = new FilteredElementCollector(doc);  </p><p>    collector.OfClass(typeof(View));  </p><p>      </p><p>    IList<Element> lists = collector.ToElements();  </p><p>      </p><p>    Transaction trans = new Transaction(doc);  </p><p>    trans.Start("deleteViews");  </p><p>    foreach(Element elem in lists)  </p><p>    {  </p><p>        if(elem is View)  </p><p>        {  </p><p>            View view = elem as View;  </p><p>            if(view.IsTemplate != true)  </p><p>            {  </p><p>                //if(view.Id.IntegerValue != doc.ActiveView.Id.IntegerValue)  </p><p>                {  </p><p>                    if(view is ViewPlan)  </p><p>                    {  </p><p>                        TaskDialog.Show("delete view",view.Name);  </p><p>                        doc.Delete(view);  </p><p>                          </p><p>                    }  </p><p>                }  </p><p>            }  </p><p>        }  </p><p>    }  </p><p>    trans.Commit();  </p><p>      </p><p>      </p><p>      </p><p>}  </p>
复制代码
同样的,不仅仅是删除视图,删除其它对象也是有同样的。
转载请复制以下信息:
原文链接: http://blog.csdn.net/joexiongjin/article/details/7873970
作者:  叶雄进 , Autodesk ADN




分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 转播转播 分享分享 分享淘帖 支持支持 反对反对
工作时间:工作日的9:00-12:00/13:30-18:00,节假日不在线,请勿留言
*滑块验证:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|EaBIM网 ( 苏ICP备2020058923号-1  苏公网安备32011502011255号

GMT+8, 2024-9-28 20:16

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表