using Autodesk.Revit.Attributes; using Autodesk.Revit.DB; using Nice3point.Revit.Toolkit.External; namespace ShrlAlgoToolkit.RevitAddins.RvView; [Transaction(TransactionMode.Manual)] [Regeneration(RegenerationOption.Manual)] public class AdaptiveMEPTagCmd : ExternalCommand { public override void Execute() { try { var tags = UiDocument.SelectObjects(); var toRotate = new List(); var toDelete = new List(); foreach (var tag in tags) { var mep = Document.GetElement(tag.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(tag.Id); 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(tag); } } } Document.Invoke( ts => { foreach (var item in toRotate) { item.TagOrientation = TagOrientation.Vertical; } Document.Delete(toDelete); }, "旋转标注"); } catch (Autodesk.Revit.Exceptions.OperationCanceledException) { } catch (Exception) { } } }