Можно как-то узнать количество элементов, которые входят в сборку, при это не выполняя обход всей сборки? КОМПАС V14.
IPart7.PartsEx - Массив SAFEARRAY компонентов.
Количество элементов массива, должно соответствовать количеству элементов сборки.
Цитата: Sabahs от 10.09.15, 22:20:01IPart7.PartsEx - Массив SAFEARRAY компонентов.
Количество элементов массива, должно соответствовать количеству элементов сборки.
доброго времени суток, как с массива SAFEARRAY получить имя файла, обозначение и т.д. Если можно дайте кусок кода. Спасибо.
Массив тут причем?
Смотрите свойства в IPart7.
Цитата: Sabahs от 03.02.21, 17:04:39Массив тут причем?
Смотрите свойства в IPart7.
public static void SelectDetail(int selectindex, string filename)
{
IApplication app = (IApplication)Marshal.GetActiveObject("KOMPAS.Application.7");
IDocuments documents = app.Documents;
documents.Open(filename);
IKompasDocument3D document3d = (IKompasDocument3D)app.ActiveDocument;
IPart7 part = document3d.TopPart;
ISelectionManager selman = document3d.SelectionManager;
selman.UnselectAll();
dynamic bbb = part.PartsEx[0];
int index = 0;
foreach (var item in bbb)
{
if (index == selectindex)
//if (item == safearray)
{
selman.Select(item);
return;
}
index += 1;
}
}
ISelectionManager c IPart7 не работает насколько я понял.
Мне необходимо выделить заданную деталь в сборке.
pPart7:=Air[index] as IPart7;
part.FileName - Имя файла компонента.
part.Marking - Обозначение компонента.
и т.д.
Смотрите пример Step3_API7_2D, там есть работа с массивом, а принцип везде одинаковый.
public static void SelectDetail(IPart7 det, string filename)
{
IApplication app = (IApplication)Marshal.GetActiveObject("KOMPAS.Application.7");
IDocuments documents = app.Documents;
documents.Open(filename);
IKompasDocument3D document3d = (IKompasDocument3D)app.ActiveDocument;
IPart7 part = document3d.TopPart;
ISelectionManager selman = document3d.SelectionManager;
selman.UnselectAll();
dynamic safearraypart7 = part.PartsEx[0];
foreach (var item in safearraypart7)
{
if(item.Marking == det.Marking)
{
selman.Select(item);
}
}
}
Решение появилось когда понял как работает тип данных dynamic в C# :)