Files
ShrlAlgoToolkit/RvAddinTest/SetDimensions.cs
2024-12-22 10:26:12 +08:00

94 lines
3.7 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Autodesk.Revit.DB.Mechanical;
using Autodesk.Revit.UI;
namespace RvAddinTest
{
[Transaction(TransactionMode.Manual)]
[Regeneration(RegenerationOption.Manual)]
public class SetDimensions : IExternalCommand
{
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
//程序UI界面
var uiapp = commandData.Application;
//获取元素(选择) 显示元素 视图(活动视图)管理(对象)
var uidoc = uiapp.ActiveUIDocument;
//程序
var app = uiapp.Application;
//获取位置和场地 视图(多个视图)管理 获取元素Revit 项目里的全部元素)
var doc = uidoc.Document;
//获取所有打开文档
var docset = uiapp.Application.Documents;
//当前视图
var view = doc.ActiveView;
try
{
var refers = uidoc.Selection.GetElementIds();
var toRotate = new List<IndependentTag>();
var toDelete = new List<ElementId>();
foreach (var item in refers)
{
var e = doc.GetElement(item) as IndependentTag;
var mep = doc.GetElement(e.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(item);
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(e);
}
}
}
using (var ts = new Transaction(doc, "旋转标注"))
{
ts.Start();
foreach (var item in toRotate)
{
item.TagOrientation = TagOrientation.Vertical;
}
doc.Delete(toDelete);
ts.Commit();
}
}
catch (Exception ex)
{
}
#region FilterExecute
//System.Collections.Generic.List<ElementId> col = new FilteredElementCollector(doc, doc.ActiveView.Id).WhereElementIsNotElementType()
// .Where(e => e.get_Parameter(BuiltInParameter.ALL_MODEL_INSTANCE_COMMENTS)?.AsString() == "380/220V电源")
// .Select(e => e.Id).ToList();
//uidoc.Selection.SetElementIds(col);
//Reference refer = uidoc.Selection.PickObject(ObjectType.Element, "请选择XXX");
//var revitLink = uidoc.Document.GetElement(refer) as RevitLinkInstance;
//var linkDoc = revitLink.GetLinkDocument();
//var wallIds = new FilteredElementCollector(linkDoc).OfClass(typeof(Wall)).ToElementIds ();
//Debug.WriteLine(wallIds.Count);
//using (var ts=new Transaction(doc,"Copy"))
//{
// ts.Start();
// ElementTransformUtils.CopyElements(linkDoc, wallIds, doc, Transform.Identity, new CopyPasteOptions());
// ts.Commit();
//}
//foreach (Wall wall in walls)
//{
// Debug.WriteLine(wall.Id);
// Thread.Sleep(500);
//}
#endregion SelectExecute
return Result.Succeeded;
}
}
}