Получение имени макроэлемента

Автор Romiroz, 12.04.19, 07:49:00

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

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

Romiroz

Здравствуйте, пишу приложение которое на c# компонует чертёж из макроэлементов, находящихся на чертеже, потому удаляет ненужные. Пытаюсь использовать API5, может зря. Проблема в том, чтобы взять определить какой из макроэлементов нужен, пытаюсь сделать это по имени. Но не могу нигде найти как получить имя макроэлемента.

  ksIterator iter2 = (ksIterator)kompas.GetIterator();    // создаем итератор для хождения по макроэлементу
                        iter2.ksCreateIterator(ldefin2d.MACRO_OBJ, macro);
                        if (iter2.reference != 0)
                        {
                            if (doc.ksExistObj(obj = iter2.ksMoveIterator("F")) == 1)
                            {
                                 //Как получить имя doc?

Может есть функция для поиска макроэлемента по имени? Если невозможно получить в API5, ткните как сделать это в API7, спасибо

pDocument3D5:=ksDocument3D(Kompas.ActiveDocument3D);
if pDocument3D5<>nil then pMacro3D:=ksEntity(pDocument3D5.GetEditMacroObject);
if pMacro3D<>nil then MacroData.Name:=pMacro3D.name;

Для 2D IMacroObject.IName - имя макроэлемента в Дереве чертежа.
+ Благодарностей: 1

DmitriyLvov

В продолжении темы. Не подскажите, как получить доступ к свойствам макрообъекта на 2D чертеже? Не нахожу соответствующего метода в справке.


DmitriyLvov

Цитата: Sabahs от 30.09.21, 15:20:36Каким и какого макроэлемента?

Которые доступны из команды "Свойства макроэлемента" ПКМ. Screenshot:

https://drive.google.com/file/d/1BIrdm33-7Vsle5tIqA-9Nmn4L03qBRWe/view?usp=sharing

IPropertyKeeper – интерфейс получения/редактирования значения свойств.

DmitriyLvov

Цитата: Sabahs от 01.10.21, 07:15:59IPropertyKeeper – интерфейс получения/редактирования значения свойств.

Большое спасибо! Получилось. Я не придал данному интерфейсу внимания, т.к. в нем не было метода получения свойств (IPropperty). Решил с помощью XML. Оставляю код для тех, кто в поисках решения аналогичной проблемы:

            IKompasDocument2D doc = (IKompasDocument2D)docs.Open(fileName, true, true);
            app.ActiveDocument = doc;
            ViewsAndLayersManager view_man = doc.ViewsAndLayersManager;
            Views views = view_man.Views;
            IView view = views.ActiveView;
            IDrawingContainer cont = (IDrawingContainer)view;
            foreach (MacroObject item in cont.MacroObjects)
            {
                IPropertyKeeper propKeeper = (IPropertyKeeper)item;
                Console.WriteLine(propKeeper.Properties);
                XElement elem = XElement.Parse(propKeeper.Properties);
                foreach (XElement prop in elem.Elements())
                {
                    foreach (XAttribute att in prop.Attributes())
                    {
                        Console.WriteLine($"{att.Name} - {att.Value}");
                    }
                }
            }