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

Профессиональные вопросы => Программирование приложений => Тема начата: Sprinter500 от 11.01.15, 11:48:48

Название: Программное копирование видов
Отправлено: Sprinter500 от 11.01.15, 11:48:48
Добрый день! Есть задача сделать программу, которая бы с разных файлов проекта (раньше делали один файл - один лист) копировала виды (ну и по возможности оформление листов) и вставляла бы в многолистовой чертеж, соответственно со смещением на 1 лист по горизонтали относительно предыдущего. Короче из множества однолистовых файлов надо сделать один многолистовой.

Тут позже конечно еще всплывут заморочки с настройками листов - то есть как быть если размер шрифта текста, длина размерных стрелок и т.д, в каждом файле различаются, а в итоге придется прийти к чему то одному.

Ну а для начала надо разобраться как копировать вид. Не могу найти в интерфейсах видов, метод копировать. Помогите, пожалуйста!
Название: Re: Программное копирование видов
Отправлено: PS от 11.01.15, 13:24:10
Так как копировать Вам нужно из разных документов в один, то это можно делать только через функцию CopyGroupToDocument или буфер обмена: ksWriteGroupToClip, ksReadGroupFromClip.  Параметрические связи и ограничения объектов при чтении из буфера теряются, атри­буты сохраняются. Перед копированием объекты нужного вида нужно поместить в группу.
Но так можно скопировать только объекты вида (можно ли копировать сам вид не знаю, не пробовал, но по идее наверно можно, вид это тоже объект с reference), а не документ целиком.
Название: Re: Программное копирование видов
Отправлено: Sprinter500 от 11.01.15, 17:39:27
Нужно виды целиком копировать, в том числи и ассоциативные, причем с возможностью задания координат будущего расположения вида в новом документе.
Название: Re: Программное копирование видов
Отправлено: Sprinter500 от 17.12.19, 14:47:08
Разобрался как работать с буфером обмена.
//Копирование:
        void CopySelObjs() //Копирование выбранных объектов в буфер обмена
        {
            SetActiveDoc();
            SelectionManager SelMng = doc_2D1.SelectionManager;
            IDrawingGroups drawingGroups = doc_2D1.DrawingGroups;
            if ((SelMng != null) && (drawingGroups != null))
            {
                IDrawingGroup drawingGroup = drawingGroups.Add(true, "111");
                if (drawingGroup != null)
                {
                    drawingGroup.Open();
                    drawingGroup.AddObjects(SelMng.SelectedObjects);
                    drawingGroup.WriteToClip(false, false);
                    drawingGroup.Close();
                }
            }
        }

//Вставка:

        void PasteObjs() //Вставка объектов из буфера обмена
        {
            SetActiveDoc();
            IDrawingGroups drawingGroups = doc_2D1.DrawingGroups;
            if (drawingGroups != null)
            {
                IDrawingGroup drawingGroup = drawingGroups.Add(true, "111");
                if (drawingGroup != null)
                {
                    drawingGroup.Open();
                    //drawingGroup.WriteToClip(false, false);
                    drawingGroup.ReadFromClip(false, false);
                    drawingGroup.Store();
                    drawingGroup.Close();
                }
            }
        }


Только проблема при работе с видами - копирование выделенных видов работает нормально, а вставка видов не работает почему-то. Вставка работает только с графич. объектами - испытывал на отрезках, другие объекты не пробовал.
Название: Re: Программное копирование видов
Отправлено: alice_liddell от 23.06.20, 08:35:18
Понимаю, что тема мертва, но, может, подскажете, получилось ли разобраться с копированием-вставкой видов? Вставка также не работает.
Название: Re: Программное копирование видов
Отправлено: Вират Лакх от 23.06.20, 11:48:44
Можно сделать через вставку вида из другого черте­жа со взятием в документ и последующим разрушением. Только функция разрушения работает для документов, открытых в видимом режиме.
А вообще, и через буфер должно работать. У меня перенос объектов из вида чертежа во фрагмент получалось делать через копирование-вставку группы. Возможно даже на обоих API, а возможно седьмой себя показал не очень (точно не помню). На питоне.
Название: Re: Программное копирование видов
Отправлено: alex_python от 23.04.25, 22:46:21
Цитата: alice_liddell от 23.06.20, 08:35:18Понимаю, что тема мертва, но, может, подскажете, получилось ли разобраться с копированием-вставкой видов? Вставка также не работает.

Можно так:
Сначала выделить вид
iSelectionManager.Select(iView)
Потом через команду скопировать выделенное
iApplication.ExecuteKompasCommand (0xE122, 0)

В новом документе вставить из буфера обмена
iApplication.ExecuteKompasCommand (0xE125, 0)

Всё это можно делать только в видимом режиме
Название: Re: Программное копирование видов
Отправлено: lavgirb от 24.04.25, 10:07:40
Еще есть константы:
ksCMEditCopy ID_EDIT_COPY Копировать в буфер обмена (0xE122)
ksCMEditPaste ID_EDIT_PASTE Вставить из буфера обмена (0xE125)
:beer:

Вставляется с координатами 0, 0. Потом надо дополнительно перемещать в нужное место.