using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Autodesk.Revit.Attributes; using Autodesk.Revit.DB; using Nice3point.Revit.Toolkit.External; using Nice3point.Revit.Toolkit.Utils; using Sai.Toolkit.Revit.Assist; namespace RvAddinTest; [Transaction(TransactionMode.Manual)] [Regeneration(RegenerationOption.Manual)] internal class CorrectSlope : ExternalCommand { public override void Execute() { var ids = UiDocument.Selection.GetElementIds(); Document.Modify( set => set.Transaction).Commit((doc, t) => { foreach (var id in ids) { var elem = Document.GetElement(id); if (elem is MEPCurve mep) { var loc = mep.GetLocCurve() as Line; var x = loc.Direction.X; var y = loc.Direction.Y; var z = loc.Direction.Z; if (Math.Abs(loc.Direction.X) > 0 && Math.Abs(loc.Direction.X) < 10E-5) { x = 0; } if (Math.Abs(loc.Direction.Y) > 0 && Math.Abs(loc.Direction.Y) < 10E-5) { y = 0; } if (Math.Abs(loc.Direction.Z) > 0 && Math.Abs(loc.Direction.Z) < 10E-5) { z = 0; } var dir = new XYZ(x, y, z); var endPoint = loc.Origin + dir * loc.Length; var li = Line.CreateBound(loc.Origin, endPoint); var locx = mep.GetLocationCurve(); locx.Curve = li; } } }); } }