Форум пользователей ПО АСКОН

Профессиональные вопросы => Программирование приложений => Тема начата: dosart от 10.09.15, 22:01:08

Название: Количество элементов в сборке?
Отправлено: dosart от 10.09.15, 22:01:08
Можно как-то узнать количество элементов, которые входят в сборку, при это не выполняя обход всей сборки? КОМПАС V14.
Название: Re: Количество элементов в сборке?
Отправлено: Sabahs от 10.09.15, 22:20:01
IPart7.PartsEx - Массив SAFEARRAY компонентов.
Количество элементов массива, должно соответствовать количеству элементов сборки.
Название: Re: Количество элементов в сборке?
Отправлено: Serhey от 03.02.21, 16:43:31
Цитата: Sabahs от 10.09.15, 22:20:01IPart7.PartsEx - Массив SAFEARRAY компонентов.
Количество элементов массива, должно соответствовать количеству элементов сборки.
доброго времени суток, как с массива SAFEARRAY получить имя файла, обозначение и т.д. Если можно дайте кусок кода. Спасибо.
Название: Re: Количество элементов в сборке?
Отправлено: Sabahs от 03.02.21, 17:04:39
Массив тут причем?
Смотрите свойства в IPart7.
Название: Re: Количество элементов в сборке?
Отправлено: Serhey от 03.02.21, 17:09:35
Цитата: 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 не работает насколько я понял.
Мне необходимо выделить заданную деталь в сборке.
Название: Re: Количество элементов в сборке?
Отправлено: Sabahs от 03.02.21, 17:12:43
pPart7:=Air[index] as IPart7;
part.FileName - Имя файла компонента.
part.Marking - Обозначение компонента.
и т.д.
Смотрите пример Step3_API7_2D, там есть работа с массивом, а принцип везде одинаковый.
Название: Re: Количество элементов в сборке?
Отправлено: Serhey от 04.02.21, 09:27:17
        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# :)