using System.Linq; using System.Windows; using Autodesk.Revit.Attributes; using Autodesk.Revit.DB; using Autodesk.Revit.UI; using Nice3point.Revit.Toolkit.External; namespace Szmedi.RvKits.ModelManager { [Transaction(TransactionMode.Manual)] public class ResetBasePoint : ExternalCommand { public override void Execute() { //项目基点和测量点的位置在Revit2020版本才能获取,其中关联切换项目基点与测量点,测量点与底层坐标的关系相关的API在Revit2021.1才能使用,故当前无法实现 System.Collections.Generic.List basePoints = Document.OfType().ToList(); ProjectLocation projectLocation = UiDocument.Document.ActiveProjectLocation; ProjectPosition projectPosition = projectLocation.GetProjectPosition(XYZ.Zero); using Transaction trans = new(Document, "重置基点坐标"); try { trans.Start(); foreach (BasePoint basePoint in basePoints) { if (basePoint.IsShared) //测量点 { #if REVIT2018 || REVIT2019 MessageBox.Show("该功能在Revit2020才可以使用", "提示", MessageBoxButton.OK, MessageBoxImage.Information); #elif REVIT2020 if (!basePoint.SharedPosition.IsAlmostEqualTo(XYZ.Zero)) { //basePoint.Pinned = false; XYZ translate1 = XYZ.Zero - basePoint.SharedPosition; basePoint.Location.Move(translate1); } //basePoint.Pinned = true; XYZ translate = XYZ.Zero - basePoint.Position; basePoint.Location.Move(translate); #endif } else //项目基点 { #if REVIT2018 || REVIT2019 #elif REVIT2020 XYZ translate = XYZ.Zero - basePoint.Position; basePoint.Location.Move(translate); #endif } //项目基点 if (basePoint.Category.Id == Category.GetCategory(Document, BuiltInCategory.OST_ProjectBasePoint).Id) { } if (basePoint.Category.Id == Category.GetCategory(Document, BuiltInCategory.OST_SharedBasePoint).Id) { } } //Do Something. trans.Commit(); } catch (Exception ex) { ErrorMessage = ex.Message; if (trans.GetStatus() == TransactionStatus.Started) { trans.RollBack(); } Result = Result.Failed; } } } }