Files

75 lines
2.8 KiB
C#
Raw Permalink Normal View History

2025-09-16 16:06:41 +08:00
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<BasePoint> basePoints = Document.OfType<BasePoint>().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;
}
}
}
}