//指定字段视图首次复制为目标视图 public void copyPlotToFieldView(Document doc, IList <string> selectedPlotView, ICollection <ElementId> PlotViewIds, string origin_str, string target_str, CMD.myDelegate _myDelegate, string str_view_content_para, string str_view_content) { using (Transaction copyViewPlot = new Transaction(doc, "copyPLOTto")) { copyViewPlot.Start("copyPLOTto"); foreach (string selectedstr in selectedPlotView) { foreach (ElementId sourceViewId in PlotViewIds) { Autodesk.Revit.DB.View sourceView = doc.GetElement(sourceViewId) as Autodesk.Revit.DB.View; string vieName = sourceView.Name; if (selectedstr == vieName) { Autodesk.Revit.DB.View destinationView = CreateDependentCopy(doc, sourceViewId); //复制PLOT视图为指定字段视图 destinationView.Name = vieName.Replace(origin_str, target_str); //设置目标视图变量//更改视图名字,更元素属性,不能使用中间过渡变量进行处理 destinationView.LookupParameter(str_view_content_para).Set(str_view_content);; //设置目标视图变量//更改共享参数 ICollection <ElementId> selectedEleIds = _myDelegate(doc, sourceViewId); //设置目标函数变量//获取需要从PLOT视图复制的2D图元 if (selectedEleIds != null && selectedEleIds.Count() != 0) { ElementTransformUtils.CopyElements(sourceView, selectedEleIds, destinationView, null, null);//复制图元 } } } } copyViewPlot.Commit(); } showSuccess(target_str); }
//指定字段视图更新二维图元函数-updateFieldView public void upadteFieldView(Document doc, IList <string> selectedFieldView, ICollection <ElementId> FieldViewId, ICollection <ElementId> PlotViewIds, string origin_str, string target_str, CMD.myDelegate _myDelegate) { ICollection <ElementId> selectedfieldViewIds = selNameToEleIds(doc, selectedFieldView, FieldViewId);//将选择目标字段视图转化为元素id using (Transaction UpdateEles = new Transaction(doc, "UpdateEles")) { UpdateEles.Start("UpdateEles"); foreach (ElementId eId in selectedfieldViewIds)//遍历每一个选择的INTF视图 { Autodesk.Revit.DB.View destinationView = doc.GetElement(eId) as Autodesk.Revit.DB.View; string destinationViewName = destinationView.Name.Replace(target_str, origin_str);//设置目标视图变量// foreach (ElementId sourceViewId in PlotViewIds) { string sourceName = doc.GetElement(sourceViewId).Name; if (destinationViewName == sourceName) { ICollection <ElementId> all2DEleIds = getAllCopyEleIds(doc, eId);//删除INTF视图的二维图元 doc.Delete(all2DEleIds); Autodesk.Revit.DB.View sourceView = doc.GetElement(sourceViewId) as Autodesk.Revit.DB.View; ICollection <ElementId> selectedEleIds = _myDelegate(doc, sourceViewId);//设置目标函数变量//获取需要从PLOT视图复制的2D图元 if (selectedEleIds != null && selectedEleIds.Count() != 0) { ElementTransformUtils.CopyElements(sourceView, selectedEleIds, destinationView, null, null);//复制图元 } } } } UpdateEles.Commit(); } showSuccess(target_str); }
//以下为各种method---------------------------------分割线--------------------------------- //外部事件方法建立 //更新视图的二维图元 public void upadteFieldView_exter(Document doc, ICollection <ElementId> fieldViewIds, ICollection <ElementId> PlotViewIds, string origin_str, string target_str, CMD.myDelegate _myDelegate) { upadteFieldView(doc, CMD.selectedViewNames, fieldViewIds, PlotViewIds, origin_str, target_str, _myDelegate);//更新视图函数---借助委托,将函数以参数的形式传递到函数中 showSuccess(target_str); }