using Autodesk.Revit.Attributes; using Autodesk.Revit.DB; using Autodesk.Revit.DB.Mechanical; using Autodesk.Revit.UI; namespace RvAddinTest { [Transaction(TransactionMode.Manual)] [Regeneration(RegenerationOption.Manual)] public class SetDimensions : IExternalCommand { public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) { //程序UI界面 var uiapp = commandData.Application; //获取元素(选择) 显示元素 视图(活动视图)管理(对象) var uidoc = uiapp.ActiveUIDocument; //程序 var app = uiapp.Application; //获取位置和场地 视图(多个视图)管理 获取元素(Revit 项目里的全部元素) var doc = uidoc.Document; //获取所有打开文档 var docset = uiapp.Application.Documents; //当前视图 var view = doc.ActiveView; try { var refers = uidoc.Selection.GetElementIds(); var toRotate = new List(); var toDelete = new List(); foreach (var item in refers) { var e = doc.GetElement(item) as IndependentTag; var mep = doc.GetElement(e.TaggedElementId.HostElementId); var loc = mep.Location as LocationCurve; var c = loc.Curve.Length < 2; if (c || Math.Abs((loc.Curve as Line).Direction.Z) > 0.2) { toDelete.Add(item); continue; } if (loc.Curve is Line l) { var ra = l.Direction.AngleTo(XYZ.BasisX); if (ra > Math.PI / 4 && ra < Math.PI / 4 * 3) { toRotate.Add(e); } } } using (var ts = new Transaction(doc, "旋转标注")) { ts.Start(); foreach (var item in toRotate) { item.TagOrientation = TagOrientation.Vertical; } doc.Delete(toDelete); ts.Commit(); } } catch (Exception ex) { } #region FilterExecute //System.Collections.Generic.List col = new FilteredElementCollector(doc, doc.ActiveView.Id).WhereElementIsNotElementType() // .Where(e => e.get_Parameter(BuiltInParameter.ALL_MODEL_INSTANCE_COMMENTS)?.AsString() == "380/220V电源") // .Select(e => e.Id).ToList(); //uidoc.Selection.SetElementIds(col); //Reference refer = uidoc.Selection.PickObject(ObjectType.Element, "请选择XXX"); //var revitLink = uidoc.Document.GetElement(refer) as RevitLinkInstance; //var linkDoc = revitLink.GetLinkDocument(); //var wallIds = new FilteredElementCollector(linkDoc).OfClass(typeof(Wall)).ToElementIds (); //Debug.WriteLine(wallIds.Count); //using (var ts=new Transaction(doc,"Copy")) //{ // ts.Start(); // ElementTransformUtils.CopyElements(linkDoc, wallIds, doc, Transform.Identity, new CopyPasteOptions()); // ts.Commit(); //} //foreach (Wall wall in walls) //{ // Debug.WriteLine(wall.Id); // Thread.Sleep(500); //} #endregion SelectExecute return Result.Succeeded; } } }