Page 1 of 1

Snap для пересечения

Posted: 28 Jul 2010, 19:54
by armand
Здравствуйте,

Работает ли функция Snap для пересечения линий? Среди видов TObjectSnapState есть osIntersection. Когда оно работает?

Как можно получить Snap для пересечения линий?
Мне необходимо создать "сетку (grid)" для облегчения рисования замкнутых фигур, и надо чтобы за узлы Snap цеплялся
для точности рисования. Возможно ли это? или надо создавать точки в узлах пересечения?

Александр.

Re: Snap для пересечения

Posted: 30 Jul 2010, 15:21
by support
Здравствуйте,
функция Snap будет работать для пересечения линий. В общем случае для привязки необходимо задать соответствующим образом свойство TsgDrawingNavigator.SnapControl.SnapMask. При реализации привязки по пересечению необходимо дополнительно инициализировать свойства TsgSelectionMatrix и SetMatrixMode объекта TsgCADImage:

Code: Select all

TForm1 = class(TForm)
//...
    property sgPaintBox: TsgDrawingNavigator read FsgPaintBox;
    property Img: TsgCADImage read GetCADImage;
//...
Img.SelectionMatrix := TsgSelectionMatrix.Create;
Img.SetMatrixMode(smEnabled);
//...
cnstSnapMask_inter: TObjectSnapState;
//...
cnstSnapMask_intersection := [osIntersection];
sgPaintBox.SnapControl.SnapMask := cnstSnapMask_intersection;
Кроме того, библиотека предусматривает использование привязки по сетке. Если вы создадите свой объект Grid, сможете использовать TObjectSnapMode.osGrid.

Александр.

Re: Snap для пересечения

Posted: 30 Jul 2010, 19:00
by armand
Каким образом создается Grid? Я не нашел такого объекта или свойства в библиотеке CadImportVCL. Могли бы Вы выложить какой либо пример?
Александр.

Re: Snap для пересечения

Posted: 02 Aug 2010, 11:10
by support
Здравствуйте Александр.
Объекта Grid в библиотеке нет, однако предусматривается привязка к подобному объекту если вы его создадите самостоятельно. В общем случае для реализации привязки по сетке необходимо описать сетку (напр. базовую точку и шаг сетки) и реализовать функцию приведения CAD координат, полученных из экранных координат курсора, к ближайшему узлу сетки. Пример перерасчёта экранных координат в CAD координаты файла смотрите в демо-приложениях, напр. Viewer.

Александр.

Re: Snap для пересечения

Posted: 10 Aug 2010, 13:08
by armand
Спасибо за ответы.
Я обнаружил проблему при использовании Snap для пересечения, в случае, если в схеме имеется объект линия или полилиния с параметром Thickness <> 0. Этот параметр виден при открытии файла в Автокад, при открытии же файла в TSGDrawingNavigator привязка osIntersection перестает работать для всех пересечений.
Для примера, я приложил такой файл, где есть белая полилиния с Thickness = 75,8786.

Также привязка "osIntersection" не работает для пересечений линий, которые находятся в файле, вставленном как XRef.
Возможно ли включить привязку для пересечений для файлов, добавленных по XRef?

С уважением,
Александр.

Re: Snap для пересечения

Posted: 10 Aug 2010, 16:38
by support
Здравствуйте Александр.
Мы протестировали привязку по пересечению с вашим файлом. Вы правы, действительно появляется проблема при наличии объекта со значением Thickness отличным от нуля. Спасибо что помогли обнаружить проблему! Работы по её исключению будут проводиться нашим отделом разработки.
Для объектов XRef или Insert привязка не предусмотрена.

Александр.