Объединение примитивов и трансформация

Обсуждение вопросов импорта поддерживаемых форматов
Post Reply
Alexandra
Posts: 9
Joined: 23 Aug 2013, 10:42

Объединение примитивов и трансформация

Post by Alexandra » 27 Aug 2013, 11:51

День добрый!
Подскажите, как объединить примитивы в один блок или entity и все вместе переместить или изменить масштаб?
Читаю из файла dwg сферу, которая состоит из линий. Нужно ее дублировать и поместить копию на расстоянии от оригинала. Для перемещения сферы целиком не получается найти средство, а выделять каждую линию как-то грустно..

Заранее спасибо, Александра.

support
Posts: 3271
Joined: 30 Mar 2005, 11:36
Contact:

Re: Объединение примитивов и трансформация

Post by support » 28 Aug 2013, 13:38

Здравствуйте Александра.
CAD Import .NET позволяет реализовать как создание блока включающего копии требуемых примитивов, так и набора копий примитивов. Самый простой способ - копирование с использованием буфера обмена. Для этого в демо проекте Editor выполните следующие действия:
1. Выберите требуемые примитивы на чертеже.
2. Выберите опцию меню "Edit->Copy", которая выполняет копирование в буфер обмена (метод cadImage.CopyEntities()).
3. Выберите опцию меню "Edit->Paste" (метод cadImage.PasteEntities()). Копии всех выбранных примитивов будут добавлены на чертёж с координатами, аналогичными оригинальным примитивам. Все новые примитивы также выбраны на этом этапе.
4. Подведите курсор мыши к любому из примитивов группы. При появлении значка привязки (при включенной привязке) нажмите левую кнопку мыши и перетащите все новые примитивы.

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

Александр.
Technical Support E-mail: support@cadsofttools.com
Chat support on Skype: cadsofttools.support

Alexandra
Posts: 9
Joined: 23 Aug 2013, 10:42

Re: Объединение примитивов и трансформация

Post by Alexandra » 02 Sep 2013, 11:24

Здравствуйте, Александр!
То есть если программно копировать, то придется для всех примитивов координаты переназначать? Как для целого блока нет возможности? Изменением значения box или еще что-нибудь..
Мне нужно при загрузке чертежа размножить его и поместить копии в нескольких заранее заданных позициях. Хватит ли на это лицензии Standart? И какие нужно определять критерии выбора?

Александра.

support
Posts: 3271
Joined: 30 Mar 2005, 11:36
Contact:

Re: Объединение примитивов и трансформация

Post by support » 02 Sep 2013, 14:59

Здравствуйте Александра.
В общем случае возможно программно реализовать копирование примитивов в цикле. При этом для каждого примитива нужно будет задавать одинаковую величину смещения внутри цикла. В случае если требуется несколько копий всех примитивов листа, имеет смысл создать блок и добавить несколько его вставок. Пример создания и вставки такого блока:

Code: Select all

            CADBlock nBlock = new CADBlock();
            nBlock.Name = "Layout_copy";
            for (int i = 0; i < cadImage.CurrentLayout.Count - 1; i++)
            {
                CADEntity oEntity = cadImage.CurrentLayout.Entities[i];
                Object nEntity = Activator.CreateInstance(oEntity.GetType());
                ((CADEntity)nEntity).AssignEntity(oEntity);
                cadImage.Converter.Loads((CADEntity)nEntity);
                cadImage.Converter.OnCreate((CADEntity)nEntity);
                nBlock.AddEntity((CADEntity)nEntity);
            }
            cadImage.Converter.Loads(nBlock);
            cadImage.Converter.OnCreate(nBlock);
            nBlock.Converter.Blocks.Add(nBlock);

            CADInsert nInsert = new CADInsert();
            nInsert.Block = nBlock;
            nInsert.Point = new DPoint(200, 200, 0);
            cadImage.Converter.Loads(nInsert);
            cadImage.Converter.OnCreate(nInsert);
            cadImage.CurrentLayout.AddEntity(nInsert);

            cadImage.GetExtents();
Для приведённой реализации достаточно лицензии Standard. В общем случае копироваться может любой набор примитивов. Если требуется создать копии выборочных примитивов, то вопрос как требуемые примитивы передавать в метод копирования. Для такой задачи наиболее удобным является выбор требуемых примитивов мышью визуально.

Александр.
Technical Support E-mail: support@cadsofttools.com
Chat support on Skype: cadsofttools.support

Alexandra
Posts: 9
Joined: 23 Aug 2013, 10:42

Re: Объединение примитивов и трансформация

Post by Alexandra » 02 Sep 2013, 15:31

Александр, спасибо за ответ!
Циклом я делала, довольно медленно просто получается. Думала что есть другой вариант, более быстрый.
Использование блока подходит, так как копируются все примитивы листа.

support
Posts: 3271
Joined: 30 Mar 2005, 11:36
Contact:

Re: Объединение примитивов и трансформация

Post by support » 02 Sep 2013, 15:59

В любом случае потребуется создавать копию для каждого примитива, так что ускорить копирование не получится. Однако блок нужно создать только один раз, а затем добавить требуемое количество вставок. Такой способ быстрее, чем копирование примитивов на чертёж.

Александр.
Technical Support E-mail: support@cadsofttools.com
Chat support on Skype: cadsofttools.support

Post Reply