Количество элементов в сборке?

Автор dosart, 10.09.15, 22:01:08

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

dosart

Можно как-то узнать количество элементов, которые входят в сборку, при это не выполняя обход всей сборки? КОМПАС V14.

IPart7.PartsEx - Массив SAFEARRAY компонентов.
Количество элементов массива, должно соответствовать количеству элементов сборки.

Serhey

Цитата: Sabahs от 10.09.15, 22:20:01IPart7.PartsEx - Массив SAFEARRAY компонентов.
Количество элементов массива, должно соответствовать количеству элементов сборки.
доброго времени суток, как с массива SAFEARRAY получить имя файла, обозначение и т.д. Если можно дайте кусок кода. Спасибо.

Массив тут причем?
Смотрите свойства в IPart7.

Serhey

Цитата: 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 не работает насколько я понял.
Мне необходимо выделить заданную деталь в сборке.

#5
pPart7:=Air[index] as IPart7;
part.FileName - Имя файла компонента.
part.Marking - Обозначение компонента.
и т.д.
Смотрите пример Step3_API7_2D, там есть работа с массивом, а принцип везде одинаковый.

Serhey

        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# :)