сейчас инструмент работает так:
...
если сделать вхождение точки только в одну группу навсегда, тогда можно просто добавить поле Группа к самой точке.
тогда точка будет всегда принадлежать только к одной группе.
Надо продумать сразу, пока я слишком много не наворотил в программе. А я уже с группами наворотил достаточно.
Но сейчас КТ может быть в нескольких группах сразу. Пока не знаю зачем. Понадобится ли это когда-нибудь?
Поэтому, если оставлять эту структуру, то можно делать так:
если Г1(т1,т2,т3) и Г2(т1,т4,т5).
в) предупрежать, что КТ в нескольких группах при добавлении.
а) когда двигаем Г1, двигать т1, и не двигать т4,т5 в Г2. А когда двигаем Г2, двигать всю Г2 и не двигать Г1(т2,т3). Т.е. активная группа побеждает за право владения точкой входящей еще и в другие группы.
Как лучше двигать группу?
Можно за ее "рукоятку" в средней точке группы, (там же находится ее имя).
Можно за любую точку группы. Например, если двигать т2, то будет двигаться вся Г1. Если двигать за т5, то Г2.
Пока второе мне кажется проще. но надо пробовать.
Я не понял, как это совместить точки в одну и хранить как группу? А не проще ли одну оставить, а остальные удалить. И зачем группа для одной точки? (хотя технически можно создать группу с одной точкой, и даже вообще пустую)
Тут вопросы конечно двоякие.
Маленький экскурс в Автокад. Там давно есть родной алгоритм групп, жмешь команду, появляется окно групп, выбираешь опции имя/без имени, еще там куча их, и в конце выбор примитивов. Но давно уже был написан лисп в котором были две команды сгруппировать(нажали кнопку выбрали примитивы)/разгруппировать (нажали кнопку выбрали примитив группы). Можно и наоборот. И все им пользовались вместо родного. Что то похожее Акадовцы изобразили только не так давно.
Поэтому с одной стороны хочется гибкий инструмент, с другой несложный (и для пользователя, и для программирования).
Вариантов видится два.
1.Точка принадлежит одной группе. При выборе точки группы, вся группа выбирается, дальше двигаем (или например массштабируем, зеркалим, поворачиваем?) любым существующим инструментом. Инструменты группы должны просто позволять легко редактировать группы (наборы точек). По минимому можно и всего двумя обойтись, как в лиспе.
2. Более сложный но и гибкий инструмент с вхождением точек в несколько групп, с иерархией по активности(или выбору). Т.е. как вы описали, и более продвинутыми инструментами по редактированию наборов.Что позволит например редактировать цилиндрическую часть нашего примера не только по кромкам борта и скулы, но и если связать точки групп g0 и g1 попарно в другие группы, то сделав их активными можно менять конфигурацию борта в нескольких направлениях. Я просто подумал что не будет ли такой вариант в итоге очень сложным?
На перспективу группами с параметрическими свойствами можно рисовать многие фигуры, дуги, окружности, спирали и много чего еще.. Собственно в нюрбс моделлерах они так и рисуются, только без параметризации.Но это очень отдаленно, так сказать помечтать . И вот тогда точки понадобится обязательно вводить в разные группы, вернее группы уже точно надо будет делать как отдельный класс(по крайней мере параметрические).Да и рисовать надо кривыми, т.е. еще и их класс вводить.
Конуса. Их нужно делать все равно матрицей MxN, иначе она не экспортируется, поэтому и надо в вершине соединять несколько точек, и перетаскивать их совместно. Т.е. конус-это изначально цилиндрическая поверхность с сведенными в одну координату точками одной стороны.
Двигать группу можно и за точку, можно и просто по принципу базовой точки(т.е.ткнули куда нить, и от этого места перемещение отсчитываем). В наших изысканиях так и получилось.
Пару слов о них. По моей просьбе Андреем (bisoft) были проведены некоторые эксперименты с инструментами Фришипа ( выбор рамкой, сдвиг набора мышкой, выравнивание по выбору координат, DELIT еще что, надо глянуть) Ходы у него записаны , если нужно напишите, он эту тему читает по возможности. В общем попробовать соединить его и ваши наработки, хотя ваш код уже сильно от оригинала отличается.