Программное копирование видов

Автор Sprinter500, 11.01.15, 11:48:48

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

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

Sprinter500

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

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

Ну а для начала надо разобраться как копировать вид. Не могу найти в интерфейсах видов, метод копировать. Помогите, пожалуйста!

PS

11.01.15, 13:24:10 #1 Последнее редактирование: 11.01.15, 13:39:06 от PS
Так как копировать Вам нужно из разных документов в один, то это можно делать только через функцию CopyGroupToDocument или буфер обмена: ksWriteGroupToClip, ksReadGroupFromClip.  Параметрические связи и ограничения объектов при чтении из буфера теряются, атри­буты сохраняются. Перед копированием объекты нужного вида нужно поместить в группу.
Но так можно скопировать только объекты вида (можно ли копировать сам вид не знаю, не пробовал, но по идее наверно можно, вид это тоже объект с reference), а не документ целиком.
+ Благодарностей: 1

Sprinter500

Нужно виды целиком копировать, в том числи и ассоциативные, причем с возможностью задания координат будущего расположения вида в новом документе.

Sprinter500

Разобрался как работать с буфером обмена.
//Копирование:
        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();
                }
            }
        }


Только проблема при работе с видами - копирование выделенных видов работает нормально, а вставка видов не работает почему-то. Вставка работает только с графич. объектами - испытывал на отрезках, другие объекты не пробовал.

alice_liddell

Понимаю, что тема мертва, но, может, подскажете, получилось ли разобраться с копированием-вставкой видов? Вставка также не работает.

Вират Лакх

Можно сделать через вставку вида из другого черте­жа со взятием в документ и последующим разрушением. Только функция разрушения работает для документов, открытых в видимом режиме.
А вообще, и через буфер должно работать. У меня перенос объектов из вида чертежа во фрагмент получалось делать через копирование-вставку группы. Возможно даже на обоих API, а возможно седьмой себя показал не очень (точно не помню). На питоне.