Набор выборки объектов
Набор выборки описывается COM-оболочкой InwOpSelectionSet, имеется также InwOpSelectionSet2, но она содержит лишь какие-то технические методы.
Набор выборки отличается от самой выборки только тем, что он имеет связанные имя name, дату Date, информацию об авторе Author и поле с комментариями Comments, и конечно, ссылку на саму выборку InwOpSelection- через свойство selection.
Примечание: при внешнем обращении к API при попытке получения даты (Date) выбрасывает ошибку System.Runtime.InteropServices.COMException: '<<Navisworks Error - Unspecific>>'.
Ниже приведен код, получающий перечень сохраненных выборок в модели (в UI видны в окне "Наборы") и выводящий в окно информацию об имени набора и количестве объектов в выборке:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Windows;
using NavisworksAutomationAPI18;
using NavisworksIntegratedAPI18;
Inavisdoc3? nwDoc = Marshal.GetActiveObject("Navisworks.Document.18") as Inavisdoc3;
InwOpState11? nwState = nwDoc.State() as InwOpState11;
List<string> ssInfo = new List<string>();
InwSelectionSetColl nwSelSets = nwState.SelectionSets();
foreach (InwOpSelectionSet nwSelectionSet in nwSelSets)
{
InwSelectionPathsColl selectionResultPaths = nwSelectionSet.selection.Paths();
List<InwOaNode> needNodes = new List<InwOaNode>();
foreach (InwOaPath nwPath in selectionResultPaths)
{
InwPathNodesColl nwNodes = nwPath.Nodes();
for (int nodeIndex = nwNodes.Count; nodeIndex > 0; nodeIndex--)
{
InwOaNode node = nwNodes[nodeIndex];
if (!node.IsGeometry && node.UserName != "GeometryCollection")
{
needNodes.Add(node);
break;
}
}
}
ssInfo.Add($"Набор {nwSelectionSet.name} - {needNodes.Count} шт.");
}
MessageBox.Show(string.Join("\n", ssInfo));