2025-02-10 20:53:40 +08:00
|
|
|
|
using Autodesk.Revit.Attributes;
|
|
|
|
|
|
using Autodesk.Revit.DB;
|
|
|
|
|
|
using Nice3point.Revit.Toolkit.External;
|
|
|
|
|
|
|
2026-02-22 20:03:42 +08:00
|
|
|
|
using ShrlAlgoToolkit.RevitAddins.RvView;
|
|
|
|
|
|
using ShrlAlgoToolkit;
|
|
|
|
|
|
using ShrlAlgoToolkit.RevitAddins;
|
2025-02-10 20:53:40 +08:00
|
|
|
|
|
2026-02-22 20:03:42 +08:00
|
|
|
|
namespace ShrlAlgoToolkit.RevitAddins.DrawSheet;
|
2025-02-10 20:53:40 +08:00
|
|
|
|
|
|
|
|
|
|
[Transaction(TransactionMode.Manual)]
|
|
|
|
|
|
public class AdaptiveMEPTagCmd : ExternalCommand
|
|
|
|
|
|
{
|
|
|
|
|
|
public override void Execute()
|
|
|
|
|
|
{
|
|
|
|
|
|
try
|
|
|
|
|
|
{
|
|
|
|
|
|
var tags = UiDocument.SelectObjects<IndependentTag>();
|
|
|
|
|
|
var toRotate = new List<IndependentTag>();
|
|
|
|
|
|
var toDelete = new List<ElementId>();
|
|
|
|
|
|
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(
|
2025-10-04 08:52:23 +08:00
|
|
|
|
_ =>
|
2025-02-10 20:53:40 +08:00
|
|
|
|
{
|
|
|
|
|
|
foreach (var item in toRotate)
|
|
|
|
|
|
{
|
|
|
|
|
|
item.TagOrientation = TagOrientation.Vertical;
|
|
|
|
|
|
}
|
|
|
|
|
|
Document.Delete(toDelete);
|
|
|
|
|
|
}, "旋转标注");
|
|
|
|
|
|
}
|
|
|
|
|
|
catch (Autodesk.Revit.Exceptions.OperationCanceledException)
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
catch (Exception)
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|