优化更新
This commit is contained in:
@@ -1,28 +1,15 @@
|
||||
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Management.Instrumentation;
|
||||
using System.Text;
|
||||
using System.Windows;
|
||||
|
||||
using Autodesk.Revit.Attributes;
|
||||
using Autodesk.Revit.DB;
|
||||
using Autodesk.Revit.DB.Mechanical;
|
||||
using Autodesk.Revit.DB.Plumbing;
|
||||
using Autodesk.Revit.UI;
|
||||
using Autodesk.Revit.UI.Selection;
|
||||
|
||||
using eTransmitForRevitDB;
|
||||
|
||||
using Microsoft.Win32;
|
||||
|
||||
using Nice3point.Revit.Toolkit.External;
|
||||
using Nice3point.Revit.Toolkit.Utils;
|
||||
|
||||
using OfficeOpenXml.FormulaParsing.Excel.Functions.Math;
|
||||
|
||||
using Sai.Toolkit.Revit.Assist;
|
||||
using Sai.Toolkit.Revit.Helpers;
|
||||
|
||||
namespace RvAddinTest;
|
||||
|
||||
@@ -30,98 +17,169 @@ namespace RvAddinTest;
|
||||
[Regeneration(RegenerationOption.Manual)]
|
||||
internal class FluentAddin : ExternalCommand
|
||||
{
|
||||
public static bool Purge(Document doc)
|
||||
/// <summary>
|
||||
/// 设备类型是否为空
|
||||
/// </summary>
|
||||
private void CableTrayCheck()
|
||||
{
|
||||
var eTransmitUpgradeOMatic = new eTransmitUpgradeOMatic(doc.Application);
|
||||
//var list = Document.OfClass<CableTray>().Cast<CableTray>().ToList();
|
||||
var list = Document.OfCollector().OfCategory(BuiltInCategory.OST_CableTrayFitting).WhereElementIsNotElementType().ToList();
|
||||
var ids = new List<ElementId>();
|
||||
foreach (var item in list)
|
||||
{
|
||||
var elem = Document.GetElement(item.GetTypeId());
|
||||
var value = item.get_Parameter(BuiltInParameter.RBS_CTC_SERVICE_TYPE).AsString();
|
||||
if (string.IsNullOrEmpty(value))
|
||||
{
|
||||
ids.Add(item.Id);
|
||||
continue;
|
||||
}
|
||||
if (elem.Name.Contains(value))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
ids.Add(item.Id);
|
||||
|
||||
var result = eTransmitUpgradeOMatic.purgeUnused(doc);
|
||||
}
|
||||
UiDocument.Selection.SetElementIds(ids);
|
||||
}
|
||||
|
||||
return result == UpgradeFailureType.UpgradeSucceeded;
|
||||
/// <summary>
|
||||
/// 修改名称
|
||||
/// </summary>
|
||||
private void ModifyName()
|
||||
{
|
||||
Document.Modify(set => set.Transaction)
|
||||
.Commit(
|
||||
(d, t) =>
|
||||
{
|
||||
//var point = Point.Create(new XYZ(10,10,10), new ElementId(1236));
|
||||
//Document.CreateTransientElements([point]);
|
||||
var fittings = Document
|
||||
.OfClass<FamilySymbol>()
|
||||
.WhereElementIsElementType().Cast<FamilySymbol>();
|
||||
//var fittings = Document.OfCollector()
|
||||
// .OfCategory(BuiltInCategory.OST_DuctFitting)
|
||||
// .WhereElementIsElementType().Cast<FamilySymbol>();
|
||||
foreach (var item in fittings)
|
||||
{
|
||||
//point=Point.Create(XYZ.BasisX);
|
||||
//if (item.Name.StartsWith("DN"))
|
||||
//{
|
||||
// item.Name = item.FamilyName + "-" + item.Name;
|
||||
//}
|
||||
if (item.Name == "标准" || item.Name == "默认")
|
||||
{
|
||||
item.Name = item.FamilyName;
|
||||
}
|
||||
|
||||
//try
|
||||
//{
|
||||
// item.get_Parameter(BuiltInParameter.ALL_MODEL_URL).Set("");
|
||||
// item.get_Parameter(BuiltInParameter.ALL_MODEL_DESCRIPTION).Set("");
|
||||
//}
|
||||
//catch (Exception)
|
||||
//{
|
||||
// MessageBox.Show(item.Name);
|
||||
//}
|
||||
}
|
||||
});
|
||||
}
|
||||
/// <summary>
|
||||
/// 坡度检查
|
||||
/// </summary>
|
||||
private void SlopeCheck()
|
||||
{
|
||||
var mepCurves = ActiveView.OfClass<MEPCurve>();
|
||||
var ids = new List<ElementId>();
|
||||
foreach (var mepCurve in mepCurves)
|
||||
{
|
||||
var p1 = mepCurve.get_Parameter(BuiltInParameter.RBS_START_OFFSET_PARAM).AsDouble();
|
||||
var p2 = mepCurve.get_Parameter(BuiltInParameter.RBS_END_OFFSET_PARAM).AsDouble();
|
||||
var l = mepCurve.get_Parameter(BuiltInParameter.CURVE_ELEM_LENGTH).AsDouble();
|
||||
var sin = Math.Abs(p1 - p2) / l;
|
||||
var radian = Math.Asin(sin);
|
||||
var slope = Math.Tan(radian);
|
||||
var isError = slope is (> 10E-6 and < 0.25) || (slope > Math.PI && Math.Abs(radian - Math.PI / 2) > 10E-6);
|
||||
if (isError)
|
||||
{
|
||||
Debug.WriteLine($"角度:{radian}");
|
||||
Debug.WriteLine($"坡度:{slope}");
|
||||
ids.Add(mepCurve.Id);
|
||||
}
|
||||
}
|
||||
UiDocument.Selection.SetElementIds(ids);
|
||||
}
|
||||
public override void Execute()
|
||||
{
|
||||
//var elemIds = Document.OfAllModelElements().Select(e=>e.Id).ToList();
|
||||
var textTypes = Document.OfClass<TextNoteType>().ToList();
|
||||
var accessoryTypes = Document.OfClass<FamilySymbol>().OfCategory(BuiltInCategory.OST_PipeAccessory).WhereElementIsElementType().ToList();
|
||||
var filledRegionTypes = Document.OfClass<FilledRegionType>().ToList();
|
||||
var materialToClean = Document.OfClass<Material>().Where(m => m.Name.StartsWith("渲染材质")).Select(e => e.Id).ToList();
|
||||
Application.DocumentChanged += Application_DocumentChanged;
|
||||
Document.Invoke(
|
||||
ts =>
|
||||
{
|
||||
//var id = UiDocument.Selection.GetElementIds().FirstOrDefault();
|
||||
//var elem = Document.GetElement(id);
|
||||
//var typeId = elem.GetTypeId();
|
||||
//CleanImportLinePattern(Document);
|
||||
//try
|
||||
//{
|
||||
// foreach (var item in accessoryTypes)
|
||||
// {
|
||||
// if (item is FamilySymbol symbol)
|
||||
// {
|
||||
// symbol.Name = $"{symbol.FamilyName}-{symbol.Name}";
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
//catch (Exception ex)
|
||||
//{
|
||||
// throw ex;
|
||||
//}
|
||||
//foreach (var type in textTypes)
|
||||
//{
|
||||
// CleanTextTypes(type);
|
||||
|
||||
//}
|
||||
//foreach (var item in filledRegionTypes)
|
||||
//{
|
||||
// if (item is FilledRegionType type)
|
||||
// {
|
||||
// var foreFillType = type.ForegroundPatternId;
|
||||
// var foreFillColor = type.ForegroundPatternColor;
|
||||
// var backFillType = type.BackgroundPatternId;
|
||||
// var backFillColor = type.BackgroundPatternColor;
|
||||
|
||||
// }
|
||||
|
||||
//}
|
||||
//Document.Delete(materialToClean);
|
||||
|
||||
});
|
||||
|
||||
//string input = type.Name;
|
||||
//int lastDashIndex = input.LastIndexOf('-');
|
||||
|
||||
//if (lastDashIndex != -1)
|
||||
//{
|
||||
// string result = input.Substring(0, lastDashIndex);
|
||||
// type.Name = result;
|
||||
//}
|
||||
//UiDocument.Selection.SetElementIds(elemIds);
|
||||
var refer=UiDocument.Selection.PickObject(ObjectType.Element);
|
||||
var elem=Document.GetElement(refer);
|
||||
var conn=elem.GetConnectors().Cast<Connector>().Where(c=>c.IsConnected).FirstOrDefault();
|
||||
var connto = conn.GetConnectedConnector();
|
||||
Debug.WriteLine("管线:");
|
||||
Debug.WriteLine(conn.CoordinateSystem.BasisX);
|
||||
Debug.WriteLine(conn.CoordinateSystem.BasisY);
|
||||
Debug.WriteLine(conn.CoordinateSystem.BasisZ);
|
||||
Debug.WriteLine("管件:");
|
||||
Debug.WriteLine(connto.CoordinateSystem.BasisX);
|
||||
Debug.WriteLine(connto.CoordinateSystem.BasisY);
|
||||
Debug.WriteLine(connto.CoordinateSystem.BasisZ);
|
||||
//StringBuilder sb = new StringBuilder();
|
||||
//var n = 1;
|
||||
//foreach (var item in elems)
|
||||
|
||||
//var refer = UiDocument.Selection.PickObject(ObjectType.Element);
|
||||
//var elem = Document.GetElement(refer);
|
||||
//var conn = elem.GetConnectors().Cast<Connector>().Where(c => c.IsConnected).FirstOrDefault();
|
||||
|
||||
//var docType = Document.GetType();
|
||||
//var method = docType.GetMethod("GetUnusedFamilies", BindingFlags.NonPublic | BindingFlags.Instance);
|
||||
//if (method != null)
|
||||
//{
|
||||
// sb.Append(n +":"+ item.Name + item.Id.ToString()+"new");
|
||||
// n++;
|
||||
// var unusedFamilyIds = method.Invoke(Document, null) as ISet<ElementId>;
|
||||
//}
|
||||
//MessageBox.Show(sb.ToString());
|
||||
//StringBuilder sb = new();
|
||||
//var regions = Document.OfCollector().OfCategory(BuiltInCategory.OST_DetailComponents).WhereElementIsNotElementType().ToList();
|
||||
//sb.AppendLine(regions.Count.ToString());
|
||||
//regions.ToList().ForEach(f => sb.AppendLine($"{f.Id}"));
|
||||
//MessageBox.Show(sb.ToString());
|
||||
|
||||
//UiDocument.Selection.SetElementIds(elements);
|
||||
#region MyRegion
|
||||
//OpenFileDialog openFileDialog = new OpenFileDialog() { Multiselect = true, Filter = "Revit文件|*.rvt" };
|
||||
//if (openFileDialog.ShowDialog() == false)
|
||||
//{
|
||||
// return;
|
||||
//};
|
||||
|
||||
//foreach (var file in openFileDialog.FileNames)
|
||||
//{
|
||||
// var doc = UiApplication.Application.OpenDocumentFile(file);
|
||||
// var options = new SaveAsOptions()
|
||||
// {
|
||||
// Compact = true,
|
||||
// OverwriteExistingFile = true,
|
||||
// MaximumBackups = 3,
|
||||
// };
|
||||
// try
|
||||
// {
|
||||
// var ids = doc.OfCollector().OfCategory(BuiltInCategory.OST_Lines).Select(e => e.Id).ToList();
|
||||
// doc.Modify(set => set.Transaction)
|
||||
// .Commit(
|
||||
// (doc, t) =>
|
||||
// {
|
||||
// doc.Delete(ids);
|
||||
// });
|
||||
// for (var i = 0; i < 5; i++)
|
||||
// {
|
||||
// Purge(doc);
|
||||
// }
|
||||
// //doc.SaveAs(file, options);
|
||||
// doc.Close(true);
|
||||
// }
|
||||
// catch (Exception)
|
||||
// {
|
||||
// doc.Close();
|
||||
// }
|
||||
|
||||
//}
|
||||
//MessageBox.Show("处理完成");
|
||||
#endregion
|
||||
|
||||
//var b = Document.ActiveView.ViewTemplateId == null;
|
||||
//MessageExtensions.ShowMessage(b.ToString());
|
||||
//var h = Document.ActiveView
|
||||
// .OfClass<Duct>()
|
||||
// .Cast<Duct>()
|
||||
// .Where(
|
||||
// d =>
|
||||
// d.ConnectorManager.Connectors.OfType<Connector>().FirstOrDefault().Shape
|
||||
// != ConnectorProfileType.Round
|
||||
// )
|
||||
// .Max(d => d.Height);
|
||||
//Document.Invoke
|
||||
#region RegionName
|
||||
//OpenFileDialog dialog = new() { Filter = "Revit(*.rvt)|*.rvt", Multiselect = true };
|
||||
//dialog.ShowDialog();
|
||||
@@ -154,162 +212,126 @@ internal class FluentAddin : ExternalCommand
|
||||
// //var importInstance = doc.GetElement(refer) as ImportInstance;
|
||||
// //ConvertToMassCurve(importInstance);
|
||||
// });
|
||||
//DebugAssist.CreateTransientGeometries(Document,Point.Create(Document.ActiveView.CropBox.Transform.Origin));
|
||||
//DebugAssist.CreateTransientGeometries(Document,Point.Create(Document.ActiveView.CropBox.Min));
|
||||
//DebugAssist.CreateTransientGeometries(Document,Point.Create(Document.ActiveView.CropBox.Max));
|
||||
|
||||
//var mepCurve = UiDocument.SelectObject<MEPCurve>();
|
||||
//if (mepCurve != null)
|
||||
//{
|
||||
// var list = new List<ElementId>();
|
||||
// mepCurve.GetAllConnectedElements(list);
|
||||
// UiDocument.Selection.SetElementIds(list);
|
||||
//}
|
||||
}
|
||||
|
||||
|
||||
private void GetDiffSystemFittings()
|
||||
private void Application_DocumentChanged(object sender, Autodesk.Revit.DB.Events.DocumentChangedEventArgs e)
|
||||
{
|
||||
var elbows = Document.OfClass<FamilyInstance>()
|
||||
.OfCategory(BuiltInCategory.OST_PipeFitting)
|
||||
.Cast<FamilyInstance>()
|
||||
.Where(fi => fi.MEPModel is MechanicalFitting fitting && fitting.PartType == PartType.Elbow);
|
||||
var elementId = ElementId.InvalidElementId;
|
||||
foreach (var elbow in elbows)
|
||||
StringBuilder sb = new StringBuilder();
|
||||
var doc = e.GetDocument();
|
||||
bool b = true;
|
||||
foreach (var idAdd in e.GetAddedElementIds())
|
||||
{
|
||||
if (elbow.Id.IntegerValue == 9437638)
|
||||
if (b)
|
||||
{
|
||||
sb.AppendLine();
|
||||
|
||||
sb.AppendLine("新增的元素");
|
||||
b = !b;
|
||||
}
|
||||
var elem = doc.GetElement(idAdd);
|
||||
var typeId = elem.GetTypeId();
|
||||
if (typeId != ElementId.InvalidElementId)
|
||||
{
|
||||
var type = doc.GetElement(idAdd);
|
||||
sb.Append($"类型名称:{type.Name}");
|
||||
}
|
||||
sb.Append($"元素ID:{elem.Id};元素名称:{elem.Name} ");
|
||||
}
|
||||
b = true;
|
||||
foreach (var idDel in e.GetDeletedElementIds())
|
||||
{
|
||||
if (b)
|
||||
{
|
||||
sb.AppendLine();
|
||||
sb.AppendLine("删除的元素");
|
||||
b = !b;
|
||||
}
|
||||
var elem = doc.GetElement(idDel);
|
||||
var typeId = elem.GetTypeId();
|
||||
if (typeId != ElementId.InvalidElementId)
|
||||
{
|
||||
var type = doc.GetElement(idDel);
|
||||
sb.Append($"类型名称:{type.Name}");
|
||||
}
|
||||
sb.Append($"元素ID:{elem.Id};元素名称:{elem.Name} ");
|
||||
}
|
||||
b = true;
|
||||
foreach (var idModify in e.GetModifiedElementIds())
|
||||
{
|
||||
if (b)
|
||||
{
|
||||
sb.AppendLine();
|
||||
|
||||
sb.AppendLine("修改的元素");
|
||||
b = !b;
|
||||
}
|
||||
var elem = doc.GetElement(idModify);
|
||||
var typeId = elem.GetTypeId();
|
||||
if (typeId != ElementId.InvalidElementId)
|
||||
{
|
||||
var type = doc.GetElement(idModify);
|
||||
sb.Append($"类型名称:{type.Name}");
|
||||
}
|
||||
sb.Append($"元素ID:{elem.Id};元素名称:{elem.Name} ");
|
||||
}
|
||||
if (sb.Length > 0)
|
||||
{
|
||||
MessageBox.Show(sb.ToString());
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// 清理导入的线型图案
|
||||
/// </summary>
|
||||
/// <param name="doc"></param>
|
||||
private static void CleanImportLinePattern(Document doc)
|
||||
{
|
||||
var templates = doc.OfClass<LinePatternElement>()
|
||||
.Cast<LinePatternElement>()
|
||||
.Where(e => e.Name.StartsWith("IMPORT"))
|
||||
.Select(e => e.Id).ToList();
|
||||
doc.Delete(templates);
|
||||
}
|
||||
/// <summary>
|
||||
/// 清理文字样式
|
||||
/// </summary>
|
||||
/// <param name="type"></param>
|
||||
private void CleanTextTypes(Element type)
|
||||
{
|
||||
if (type is TextNoteType textNoteType)
|
||||
{
|
||||
|
||||
try
|
||||
{
|
||||
var connectors = elbow.GetConnectors();
|
||||
var connector1 = connectors.OfType<Connector>().ElementAt(0);
|
||||
var connector2 = connectors.OfType<Connector>().ElementAt(1);
|
||||
var system1 = connector1.AllRefs.OfType<Connector>().FirstOrDefault(c => c.Owner.Id != elbow.Id).MEPSystem;
|
||||
var system2 = connector2.AllRefs.OfType<Connector>().FirstOrDefault(c => c.Owner.Id != elbow.Id).MEPSystem;
|
||||
//MEPSystem tempSystem = null;
|
||||
//foreach (Connector conn in connectors)
|
||||
//{
|
||||
// foreach (Connector item in conn.AllRefs)
|
||||
// {
|
||||
// if (tempSystem==null)
|
||||
// {
|
||||
// tempSystem = item.MEPSystem;
|
||||
// continue;
|
||||
// }
|
||||
// if (tempSystem==item.MEPSystem)
|
||||
// {
|
||||
// continue;
|
||||
// }
|
||||
// if (tempSystem.Name)
|
||||
// {
|
||||
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
if (system1.Name != system2.Name)
|
||||
var font = textNoteType.get_Parameter(BuiltInParameter.TEXT_FONT).AsString();
|
||||
var size = textNoteType.get_Parameter(BuiltInParameter.TEXT_SIZE).AsValueString().TrimEnd('m');
|
||||
var dSize = Math.Round(Convert.ToDouble(size), 1, MidpointRounding.AwayFromZero);
|
||||
if (dSize < 0.23)
|
||||
{
|
||||
elementId = elbow.Id;
|
||||
break;
|
||||
return;
|
||||
}
|
||||
textNoteType.get_Parameter(BuiltInParameter.TEXT_SIZE).SetValueString(dSize.ToString());
|
||||
var scale = textNoteType.get_Parameter(BuiltInParameter.TEXT_WIDTH_SCALE).AsValueString();
|
||||
//var color = textNoteType.get_Parameter(BuiltInParameter.LINE_COLOR).AsInteger();
|
||||
var name = $"{font}-{dSize}mm-{scale}";
|
||||
var textTypes = Document.OfClass<TextNoteType>().ToList();
|
||||
var isExist = textTypes.FirstOrDefault(t => t.Name == name);
|
||||
if (isExist != null)
|
||||
{
|
||||
var texts = Document.OfClass<TextNote>().Where(e => e.GetTypeId() == textNoteType.Id).ToList();
|
||||
texts.ForEach(e => e.ChangeTypeId(isExist.Id));
|
||||
Document.Regenerate();
|
||||
Document.Delete(textNoteType.Id);
|
||||
}
|
||||
else
|
||||
{
|
||||
textNoteType.Name = name;
|
||||
}
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
//MessageBox.Show(elbow.Id.ToString());
|
||||
continue;
|
||||
throw;
|
||||
}
|
||||
}
|
||||
if (elementId != ElementId.InvalidElementId)
|
||||
{
|
||||
UiDocument.Selection.SetElementIds([elementId]);
|
||||
}
|
||||
}
|
||||
|
||||
private void ModifyName()
|
||||
{
|
||||
Document.Modify(set => set.Transaction)
|
||||
.Commit(
|
||||
(d, t) =>
|
||||
{
|
||||
//var point = Point.Create(new XYZ(10,10,10), new ElementId(1236));
|
||||
//Document.CreateTransientGeometries([point]);
|
||||
var fittings = Document
|
||||
.OfClass<FamilySymbol>()
|
||||
.WhereElementIsElementType().Cast<FamilySymbol>();
|
||||
//var fittings = Document.OfCollector()
|
||||
// .OfCategory(BuiltInCategory.OST_DuctFitting)
|
||||
// .WhereElementIsElementType().Cast<FamilySymbol>();
|
||||
foreach (var item in fittings)
|
||||
{
|
||||
//point=Point.Create(XYZ.BasisX);
|
||||
//if (item.Name.StartsWith("DN"))
|
||||
//{
|
||||
// item.Name = item.FamilyName + "-" + item.Name;
|
||||
//}
|
||||
if (item.Name == "标准")
|
||||
{
|
||||
item.Name = item.FamilyName;
|
||||
}
|
||||
|
||||
//try
|
||||
//{
|
||||
// item.get_Parameter(BuiltInParameter.ALL_MODEL_URL).Set("");
|
||||
// item.get_Parameter(BuiltInParameter.ALL_MODEL_DESCRIPTION).Set("");
|
||||
//}
|
||||
//catch (Exception)
|
||||
//{
|
||||
// MessageBox.Show(item.Name);
|
||||
//}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void CableTrayCheck()
|
||||
{
|
||||
//var list = Document.OfClass<CableTray>().Cast<CableTray>().ToList();
|
||||
var list = Document.OfCollector().OfCategory(BuiltInCategory.OST_CableTrayFitting).WhereElementIsNotElementType().ToList();
|
||||
var ids = new List<ElementId>();
|
||||
foreach (var item in list)
|
||||
{
|
||||
var elem = Document.GetElement(item.GetTypeId());
|
||||
var value = item.get_Parameter(BuiltInParameter.RBS_CTC_SERVICE_TYPE).AsString();
|
||||
if (string.IsNullOrEmpty(value))
|
||||
{
|
||||
ids.Add(item.Id);
|
||||
continue;
|
||||
}
|
||||
if (elem.Name.Contains(value))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
ids.Add(item.Id);
|
||||
|
||||
}
|
||||
UiDocument.Selection.SetElementIds(ids);
|
||||
}
|
||||
|
||||
private void SlopeCheck()
|
||||
{
|
||||
var mepCurves = ActiveView.OfClass<MEPCurve>();
|
||||
var ids = new List<ElementId>();
|
||||
foreach (var mepCurve in mepCurves)
|
||||
{
|
||||
var p1 = mepCurve.get_Parameter(BuiltInParameter.RBS_START_OFFSET_PARAM).AsDouble();
|
||||
var p2 = mepCurve.get_Parameter(BuiltInParameter.RBS_END_OFFSET_PARAM).AsDouble();
|
||||
var l = mepCurve.get_Parameter(BuiltInParameter.CURVE_ELEM_LENGTH).AsDouble();
|
||||
var sin = Math.Abs(p1 - p2) / l;
|
||||
var radian = Math.Asin(sin);
|
||||
var slope = Math.Tan(radian);
|
||||
var isError = slope is (> 10E-6 and < 0.25) || (slope > Math.PI && Math.Abs(radian - Math.PI / 2) > 10E-6);
|
||||
if (isError)
|
||||
{
|
||||
Debug.WriteLine($"角度:{radian}");
|
||||
Debug.WriteLine($"坡度:{slope}");
|
||||
ids.Add(mepCurve.Id);
|
||||
}
|
||||
}
|
||||
UiDocument.Selection.SetElementIds(ids);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user