Page 1 of 1

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

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

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

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

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

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

Александр.

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

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

Александра.

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

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

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. В общем случае копироваться может любой набор примитивов. Если требуется создать копии выборочных примитивов, то вопрос как требуемые примитивы передавать в метод копирования. Для такой задачи наиболее удобным является выбор требуемых примитивов мышью визуально.

Александр.

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

Posted: 02 Sep 2013, 15:31
by Alexandra
Александр, спасибо за ответ!
Циклом я делала, довольно медленно просто получается. Думала что есть другой вариант, более быстрый.
Использование блока подходит, так как копируются все примитивы листа.

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

Posted: 02 Sep 2013, 15:59
by support
В любом случае потребуется создавать копию для каждого примитива, так что ускорить копирование не получится. Однако блок нужно создать только один раз, а затем добавить требуемое количество вставок. Такой способ быстрее, чем копирование примитивов на чертёж.

Александр.