调整代码
This commit is contained in:
106
ShrlAlgoToolkit.RevitAddins/Mep/RotateMEPViewModel.cs
Normal file
106
ShrlAlgoToolkit.RevitAddins/Mep/RotateMEPViewModel.cs
Normal file
@@ -0,0 +1,106 @@
|
||||
using Autodesk.Revit.DB;
|
||||
using Autodesk.Revit.UI.Selection;
|
||||
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
using CommunityToolkit.Mvvm.Input;
|
||||
|
||||
using Nice3point.Revit.Toolkit.External.Handlers;
|
||||
|
||||
using ShrlAlgoToolkit.RevitAddins.RvMEP;
|
||||
using ShrlAlgoToolkit;
|
||||
using ShrlAlgoToolkit.RevitAddins;
|
||||
|
||||
namespace ShrlAlgoToolkit.RevitAddins.Mep
|
||||
{
|
||||
public partial class RotateMEPViewModel : ObservableObject
|
||||
{
|
||||
[ObservableProperty]
|
||||
public partial double Angle { get; set; } = 90;
|
||||
|
||||
[ObservableProperty]
|
||||
public partial bool IsSingleSelect { get; set; } = true;
|
||||
|
||||
[RelayCommand]
|
||||
private void RotateInstance()
|
||||
{
|
||||
rotateHandler.Raise(
|
||||
uiapp =>
|
||||
{
|
||||
var uidoc = uiapp.ActiveUIDocument;
|
||||
var doc = uidoc.Document;
|
||||
ICollection<ElementId> elemIds = [];
|
||||
if (uidoc.Selection.GetElementIds().Any())
|
||||
{
|
||||
elemIds = uidoc.Selection.GetElementIds();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (IsSingleSelect)
|
||||
{
|
||||
var r = uidoc.Selection.PickObject(ObjectType.Element, new FuncFilter(e =>
|
||||
{
|
||||
return e is FamilyInstance && e.GetConnectors().OfType<Connector>().Any(c => c.IsConnected);
|
||||
}), "请选择已经连管的构件");
|
||||
|
||||
elemIds.Add(r.ElementId);
|
||||
}
|
||||
else
|
||||
{
|
||||
elemIds = uidoc.Selection.PickObjects(ObjectType.Element, new FuncFilter(e =>
|
||||
{
|
||||
return e is FamilyInstance && e.GetConnectors().OfType<Connector>().Any(c => c.IsConnected);
|
||||
}), "请选择已经连管的构件,并完成").Select(r => doc.GetElement(r).Id).ToList();
|
||||
}
|
||||
}
|
||||
|
||||
foreach (var id in elemIds)
|
||||
{
|
||||
var elem = uidoc.Document.GetElement(id);
|
||||
|
||||
var referConn = elem.GetConnectors().OfType<Connector>().FirstOrDefault(c =>
|
||||
{
|
||||
if (c.IsConnected)
|
||||
{
|
||||
if (c.CoordinateSystem.BasisZ.X > 0)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (c.CoordinateSystem.BasisZ.Y > 0)
|
||||
{
|
||||
return true;
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
if (c.CoordinateSystem.BasisZ.Z > 0)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
});
|
||||
|
||||
if (referConn != null)
|
||||
{
|
||||
doc.Invoke(
|
||||
_ =>
|
||||
{
|
||||
ElementTransformUtils.RotateElement(
|
||||
doc,
|
||||
elem.Id,
|
||||
Line.CreateUnbound(
|
||||
referConn.CoordinateSystem.Origin,
|
||||
referConn.CoordinateSystem.BasisZ),
|
||||
Angle.ToRadian());
|
||||
}, "旋转实例");
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
readonly ActionEventHandler rotateHandler = new();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user