Объединение примитивов и трансформация
Объединение примитивов и трансформация
День добрый!
Подскажите, как объединить примитивы в один блок или entity и все вместе переместить или изменить масштаб?
Читаю из файла dwg сферу, которая состоит из линий. Нужно ее дублировать и поместить копию на расстоянии от оригинала. Для перемещения сферы целиком не получается найти средство, а выделять каждую линию как-то грустно..
Заранее спасибо, Александра.
Подскажите, как объединить примитивы в один блок или entity и все вместе переместить или изменить масштаб?
Читаю из файла dwg сферу, которая состоит из линий. Нужно ее дублировать и поместить копию на расстоянии от оригинала. Для перемещения сферы целиком не получается найти средство, а выделять каждую линию как-то грустно..
Заранее спасибо, Александра.
Re: Объединение примитивов и трансформация
Здравствуйте Александра.
CAD Import .NET позволяет реализовать как создание блока включающего копии требуемых примитивов, так и набора копий примитивов. Самый простой способ - копирование с использованием буфера обмена. Для этого в демо проекте Editor выполните следующие действия:
1. Выберите требуемые примитивы на чертеже.
2. Выберите опцию меню "Edit->Copy", которая выполняет копирование в буфер обмена (метод cadImage.CopyEntities()).
3. Выберите опцию меню "Edit->Paste" (метод cadImage.PasteEntities()). Копии всех выбранных примитивов будут добавлены на чертёж с координатами, аналогичными оригинальным примитивам. Все новые примитивы также выбраны на этом этапе.
4. Подведите курсор мыши к любому из примитивов группы. При появлении значка привязки (при включенной привязке) нажмите левую кнопку мыши и перетащите все новые примитивы.
Такая реализация не позволяет задавать точные координаты положения примитивов-копий, однако все расстояния и соотношения между ними будут сохранены. Также пожалуйста обратите внимание, для использования копирования с посмощью буфера обмена и реализации выбора примитивов с помощью мыши потребуется лицензия Professional.
В случае если требуется указание точных координат можно программно создать блок и сделать его вставку, либо выполнить копирование всех требуемых примитивов программно. Пожалуйста уточните если вам требуется один из этих вариантов. Также если вы планируете ограничиться лицензией Standard, потребуется определить критерии выбора требуемых примитивов.
Александр.
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
Chat support on Skype: cadsofttools.support
Re: Объединение примитивов и трансформация
Здравствуйте, Александр!
То есть если программно копировать, то придется для всех примитивов координаты переназначать? Как для целого блока нет возможности? Изменением значения box или еще что-нибудь..
Мне нужно при загрузке чертежа размножить его и поместить копии в нескольких заранее заданных позициях. Хватит ли на это лицензии Standart? И какие нужно определять критерии выбора?
Александра.
То есть если программно копировать, то придется для всех примитивов координаты переназначать? Как для целого блока нет возможности? Изменением значения box или еще что-нибудь..
Мне нужно при загрузке чертежа размножить его и поместить копии в нескольких заранее заданных позициях. Хватит ли на это лицензии Standart? И какие нужно определять критерии выбора?
Александра.
Re: Объединение примитивов и трансформация
Здравствуйте Александра.
В общем случае возможно программно реализовать копирование примитивов в цикле. При этом для каждого примитива нужно будет задавать одинаковую величину смещения внутри цикла. В случае если требуется несколько копий всех примитивов листа, имеет смысл создать блок и добавить несколько его вставок. Пример создания и вставки такого блока:
Для приведённой реализации достаточно лицензии Standard. В общем случае копироваться может любой набор примитивов. Если требуется создать копии выборочных примитивов, то вопрос как требуемые примитивы передавать в метод копирования. Для такой задачи наиболее удобным является выбор требуемых примитивов мышью визуально.
Александр.
В общем случае возможно программно реализовать копирование примитивов в цикле. При этом для каждого примитива нужно будет задавать одинаковую величину смещения внутри цикла. В случае если требуется несколько копий всех примитивов листа, имеет смысл создать блок и добавить несколько его вставок. Пример создания и вставки такого блока:
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();
Александр.
Technical Support E-mail: support@cadsofttools.com
Chat support on Skype: cadsofttools.support
Chat support on Skype: cadsofttools.support
Re: Объединение примитивов и трансформация
Александр, спасибо за ответ!
Циклом я делала, довольно медленно просто получается. Думала что есть другой вариант, более быстрый.
Использование блока подходит, так как копируются все примитивы листа.
Циклом я делала, довольно медленно просто получается. Думала что есть другой вариант, более быстрый.
Использование блока подходит, так как копируются все примитивы листа.
Re: Объединение примитивов и трансформация
В любом случае потребуется создавать копию для каждого примитива, так что ускорить копирование не получится. Однако блок нужно создать только один раз, а затем добавить требуемое количество вставок. Такой способ быстрее, чем копирование примитивов на чертёж.
Александр.
Александр.
Technical Support E-mail: support@cadsofttools.com
Chat support on Skype: cadsofttools.support
Chat support on Skype: cadsofttools.support