在程序中删除视图


转载请复制以下信息:
原文链接: http://blog.csdn.net/joexiongjin/article/details/7873970
作者:  叶雄进 , Autodesk ADN


下面这段代码是删除所有的平面视图(不管这个在现实中是否需要,假定有这个操作),会发现错误,无法删除。

这个代码中不删除当前视图,避开当前视图。代码是Revit 2013 的SharpDevelop代码。

		public void DeleteViews()
		{
			
		//retrieve all views.
			Document doc = this.ActiveUIDocument.Document;
			FilteredElementCollector collector = new FilteredElementCollector(doc);
			collector.OfClass(typeof(View));
			
			Transaction trans = new Transaction(doc);
			trans.Start("deleteViews");
			foreach(Element elem in collector)
			{
				if(elem is View)
				{
					View view = elem as View;
					if(view.IsTemplate != true)
					{
						if(view.Id.IntegerValue != doc.ActiveView.Id.IntegerValue)
						{
							if(view is ViewPlan)
							{
								TaskDialog.Show("delete view",view.Name);
								doc.Delete(view);
								
							}
}}}}trans.Commit();}
 原因在哪里? 

原因就在这个FilteredElementCollector collector 对象上。

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

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

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

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

下面代码则运行顺畅。

		public void DeleteViews()
		{
			
			//retrieve all views.
			Document doc = this.ActiveUIDocument.Document;
			FilteredElementCollector collector = new FilteredElementCollector(doc);
			collector.OfClass(typeof(View));
			
			IList<Element> lists = collector.ToElements();
			
			Transaction trans = new Transaction(doc);
			trans.Start("deleteViews");
			foreach(Element elem in lists)
			{
				if(elem is View)
				{
					View view = elem as View;
					if(view.IsTemplate != true)
					{
						//if(view.Id.IntegerValue != doc.ActiveView.Id.IntegerValue)
						{
							if(view is ViewPlan)
							{
								TaskDialog.Show("delete view",view.Name);
								doc.Delete(view);
								
							}
						}
					}
				}
			}
			trans.Commit();
			
			
			
		}


同样的,不仅仅是删除视图,删除其它对象也是有同样的。





                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值