Лини и линии в векторной графике
Единственный минус – изображение, сделанное из многочисленных точек не очень смотрится, рябит в глазах, и лучше бы сделать его сразу вместе с соединяющими точки линиями – подвинул точку, и сразу вместе с ней наклонились прикреплённые к этой точке соседние линии.
Но вот как раз таких линий в моей графике не было.
Были отдельные точки, были отдельные отрезки, но и двигать их нужно отдельно. Отдельно точку, отдельно – отрезок. Иногда это удобно, а иногда нет. Потому я и ввёл в графику новый элемент, назвав его Линией.
Как Линию сделать?
Когда у Вас имеется готовая программа, в которую Вы хотите ввести новый элемент, то не надо изобретать для него всё заново. Нужно посмотреть на те элементы, которые уже есть, посмотреть на то, как организованы действия с этими элементами, и может быть, что-нибудь из этого Вам подойдёт – слегка расширив текст программы, Вы сможете приспособить его к действиям с новым изобретённым элементом.
На что похожа Линия, привязанная своими концами к двум точкам?
Разумеется, она похожа на отрезок прямой. И обрабатывать её, как прямую, тоже удобно. Вся разница состоит в том, что у прямой, в строке, которая её описывает, координаты начальной и конечной точек указаны явно, а у линии в строке имеются две ссылки на элементы, к котором она привязана.
Вот так записываются отрезок прямой и линия –
2 X1 Y1 Z1 X2 Y2 Z2 0 0 0 C R K
7 X1 Y1 Z1 K1 K2 0 0 0 0 C R K
здесь 2 и 7 – логотипы отрезка и линии, по этим логотипам программа различает тип графического элемента, XYZ - координаты, C – цвет, R – размер, K – уникальный номер данного элемента.
При обработке отрезка его координаты читаются непосредственно из его строки, а при обработке линии они извлекаются по ссылкам K1 (извлекаются координаты начала) и K2 (извлекаются координаты конца).
С другой стороны, линия похожа и на сечение. И вот почему.
Вот характерная запись сечения с горизонтальной штриховкой -
5 X1 Y1 Z1 K1 K2 K3 K4 K5 K6 C R K
точка заливки (начало штриховки) указана в строке координатами, а точки, по которым проводится контур, ссылками на номера этих точек (само сечение имеет номер K). Как видим, на контуре находится 6 точек. Контур с числом точек, меньшим чем 3, не строится, не показывается, а строка, соответствующая такому контуру, при некоторых операциях автоматически удаляется.
Тем не менее, конструкция сечения с двумя точками совпадает с конструкцией линии, только у линии логотип другой.
Поэтому сразу же возникает идея о том, как линию делать.
Как делается Сечение?
Мы кликаем по инструменту :: на панели инструментов, соответствующий значок обводится красной рамкой (см.иллюстрацию), и затем мы кликаем на рисунке сначала точку заливки, а затем и те точки, которые должны определять контур нашего сечения. Когда нужные точки контура (от 3-х до 6-ти) мы наберём, то кликаем кнопку «ok», и нужное сечение у нас создаётся.
Заметьте, мы не создаём новую, дополнительную строку, строка, определяющая сечение помещается на месте точки заливки. Строка с точкой заливки исчезла, строка с сечением на том же месте появилась. И, посмотрите, какая красота – программисту не надо даже начальные координаты переписывать, они остались прежними.
Так будет, если число точек на контуре 3 или больше.
Но что, если мы, указав для контура только две точки, кликнем «ok» ?
Ну, тогда компьютер заругается – Вы совершили страшную ошибку, число указанных точек на контуре недостаточно, никакого нормального сечения у Вас не получится, да и как его штриховать, если объекта для штриховки нет?
Чувствуете?
В этом и заключается своеобразное искусство и красота программирования – вы можете расширять возможности своей программы, используя нестандартные для неё ситуации.
КАК ПОЛУЧАЕТСЯ ЛИНИЯ
Итак. Мы указали только две точки, сечение создать не удастся, но, давайте создадим Линию. Информации для неё как раз хватает – помещаем строку с линией на то место, на котором находилась строка с точкой заливки, следовательно, создавать лишнюю, дополнительную строку нам не нужно. На четвёртой и пятой позициях ставим ссылки на указанные две точки. В нулевой позиции ставим логотип Линии – число 7.
Вот и всё.
Координаты у Линии у нас только какие-то странные, они никак не используются (ведь Линия своей заливки не требует) и вроде как являются излишними. Некий рудимент, возникший в имеющейся структуре.
Ну что ж, такое случается, и люди с аппендиксом живут. На всякий случай ставим наш «аппендикс» точно посередине между точками, на которые Линия ссылается. Исключительно для того, чтобы определённость была. А вдруг ещё в дальнейшем пригодится?
Оно и в самом деле, пригодится. Возьмём другой инструмент (он уже давно готов, и переделывать его не хотелось бы) – будем создавать отрезок. Концы отрезка привязываются к тем графическим элементам, на которых они при его создании находятся. Окажется конец отрезка на Линии – попадёт точно на её середину, а не на точку заливки, когда-то находившуюся неведомо где. Такое неожиданное поведение программы вызовет удивление со стороны пользователя.
Можно, конечно, переделать инструмент «Создание отрезка» - пусть он находит середину линии, но есть и масса других ресурсов, и с каждым из них будет нужна аналогичная возня по их переделке. Поэтому лучше решить проблему на корню.
Программирование требует чёткости действий и должно рассчитывать на все нюансы, которые могут случиться в практической работе с программой. Конечно, не всё получается сразу. Программа долго обкатывается, шлифуется и совершенствуется, но многие вещи в ней можно предусмотреть заранее и «подстелить соломку» наперёд.
КАК ПОЛУЧАЕТСЯ ЛИНЬ
Однако, пойдём дальше – при создании сечения выберем для контура только одну точку, и тогда кликнем по кнопке «ok». И сделаем элемент с одной ссылкой – на точку контура, а координаты XYZ пусть остаются прежними.
Поставим цифру 8 как логотип этого элемента, а рисовать его будем как прямую, соединяющую начальные координаты с координатами, найденными по ссылке. Получится у нас некая, как бы укороченная по своей структуре линия, и её мы назовём словом «Линь».
На иллюстрации вы можете видеть изображение и распечатку графики в её численном виде. Первые две строки описывают точки, третья строка описывает Линию, далее - точка, на которую ссылается Линь, точка, которая сама по себе, и последней идёт строка, описывающая Линь.
Заметим, что 1-ю, 2-ю и 4-ю точки нельзя удалять, тогда связанные с ними элементы с экрана исчезнут. А вот Линь или Линию удалить можно, точки на которые они ссылаются, никуда не денутся.
Таковы особенности работы с графикой, в которой используются ссылки.
РАБОТА С ГРАФИКОЙ СО ССЫЛКАМИ
Какие же преимущества даёт графика со ссылками, представленная новыми элементами, такими как Линия и Линь?
О, преимущества она даёт колоссальные.
В программе есть «режим сдвига», включив который, выбранные элементы можно перемещать с помощью клавиш со стрелочками (справа, на клавиатуре ноутбука). Обычные элементы, не связанные ссылками, перемещаются индивидуально, а связанные ссылками – совместно.
Ясно, что перемещение опорных точек вызовет перемещение концов всех элементов, привязанных к этим точкам по ссылкам.
Кроме того, перемещение Линий и Линей устроено так, что вместе с ними перемещаются и объекты их ссылок.
На иллюстрации показаны две цепочки - из точек, соединённых между собой Линиями (слева), и цепочка, составленная из разобщённых между собой Линей (справа). Вверх был перемещён элемент между 3-й и 4-й точками. В первом случае выбрана и перемещена Линия, во втором – Линь. Видно, что правая цепочка разорвалась (но только в одном месте, а не в двух, как это было бы, если бы точки соединялись отрезком), а левая цепочка, в которой для соединения точек используются Линии, не разорвалась, а осталась целой.
И это даёт огромное преимущество в работе с графикой. При перемещении выбранного элемента не нужно заботиться о соседних элементах, подлаживая их под перемещённый. Соседние элементы подлаживаются под перемещение автоматически.
ЦЕПОЧКИ ИЗ ЛИНЕЙ
С помощью инструмента ''Сечение'' в режиме ''Блокировка штриховки'' можно не создавать лини отдельно, каждый раз кликая «ok», а, последовательно кликая точки, создавать цепочки из линей.
Каждый раз линь создаётся на месте первой точки – он замещает её в графике, его начало имеет те же координаты, и за процессом легко наблюдать визуально - точка исчезает, а линь появляется.
В качестве последней конечной точки в этом процессе можно указывать линь.
Созданные таким способом контуры не имеют точек, но могут передвигаться клавишами со стрелочками в режиме сдвига.
По внешнему виду эти изображения ничем не отличаются от изображений, составленных из отрезков, и имеют то же количество элементов, но они могут легко менять свой контур без появления на нём разрывов.
СОЕДИНЯЕМ ТОЧКИ ЛИНИЯМИ
Но может быть, мы хотим, соединяя точки, оставлять их на рисунке?
Для этого подойдёт другой инструмент – «Создание отрезка». А чтобы компьютер понял, что создаются линии, а не отрезки, установим эту опцию, включив режим ''Блокировка штриховки''.
Тогда мы тоже получим ту ломаную линию, которая показана на иллюстрации выше окна с распечаткой графики, слева. И это будет проще, чем при использовании инструмента ''Сечение''.
Впоследствии, с помощью кнопки «о» - Обращение, мы можем обратить Линию в Линь, а Линь – в Отрезок. Обращение можно делать как индивидуально, так и консолидировано по цвету, то есть, обращается не только элемент, по которому кликнули, но и все элементы того же цвета и типа.
Консолидированные действия над элементами очень удобны, они позволяют быстро приводить графику в нужный вид, или проделывать с ней какие-либо общие изменения - http://proza.ru/2022/08/26/1315
Таким образом, использование в векторной графике элементов с привязками по ссылкам, такими как Линия или Линь, и дополнительная возможность консолидированных изменений, позволяет сделать графику существенно более удобной для работы с ней.
_________
10.9.2022
Свидетельство о публикации №222091001065
Поддержу в рейтинге.
С уважением,
Виктор Левашов 12.09.2022 13:24 Заявить о нарушении
Я поработал немного в создании моделей, и почувствовал, что таких элементов мне не хватает. С ними делать модели стало гораздо проще.
Как всегда - именно практика стимулирует развитие проекта.
Дмитрий Маштаков 12.09.2022 17:02 Заявить о нарушении