Двухэтажная информация
Но прежде порассуждаем о том, как удаляются элементы векторной графики, и как их можно восстановить, если оказалось, что элементы удалены ошибочно.
То, что нашу ошибку мы тотчас же заметим, сомнений нет – программа «Стереометрические модели» устроена таким образом, что после каждого действия его результат показывается на рисунке, а в окне комментариев ещё и комментируется.
Предположим, что мы захотим удалить один из элементов. На левой панели есть кнопочка для этого. В неактивном состоянии она серого цвета и никакой надписи на ней нет. Кликая по этой кнопке мышью, мы активируем её – она становится розовой, и на ней последовательно появляются надписи «удалить», «извлечь» и «очистить».
Установив опцию «удалить», кликаем по элементу, находящемуся на рисунке, и видим, что этот элемент исчезает. Кнопка вновь становится серой, а в окне комментариев появляется надпись «стр № эл-т Log 2 удалён - восстановить? ДА».
Если мы теперь кликнем по окну комментариев, то ошибочно удалённый элемент будет восстановлен. И это удобно, поскольку ошибки происходят часто – не туда мышь навели и не по тому элементу кликнули.
Однако, если не восстановить удалённое сразу, а сделать некое другое действие, то уже это действие будет прокомментировано, и восстановление удалённого станет невозможным.
Техника удаления элемента проста – сперва делается комментарий, потом ссылка на порядковый номер строки в списке свободных устанавливается в 0, затем в 0 устанавливается и логотип строки – Pvv(N, 0)=0.
Так же просто и восстановление строки – её порядковый номер и логотип берутся из текста комментария, а остальные числа строки при удалении никуда не делись, они остаются на месте, только строка становится пустой – при выводе графики на рисунок строки с логотипом 0 пропускаются, поэтому их присутствие в массиве графики никак не ощущается.
Есть и другие случаи, когда строка, описывающая графический элемент, меняется более существенно, чем при удалении его, и есть необходимость вернуться назад, если это изменение было сделано по ошибке.
Для этого используется небольшой одномерный массив Sm3(k), в который элементы и номер строки перед её изменением записываются, а при необходимости возврата назад – считываются.
Есть и случаи более сложные. Связаны они с массовым удалением строк.
Например, у той же кнопки имеется опция «очистить». В простейшем применении этой опции мы кликаем по любому графическому элементу, и массив векторной графики как бы очищается, после чего мы начинаем конструировать графику с чистого листа – от первой строки и далее, в порядке возрастания номеров. Но как быть, если мы очистили графику ошибочно?
Беды особой нет - мы очистили графику только ”вроде бы”, а на самом деле все строки её сохранились, и только маркер окончания графики NPv обнулился и обнулился весь массив свободных номеров. Вот так –
Sm3(13) = NPv: NPv = 0:
For I = 0 To 511: Mvv(I, 1) = Mvv(I, 0): Mvv(I, 0) = 0: Next I:
И вы можете видеть, какие мы хитрецы – перед указанными действиями мы нужные данные сохранили, и теперь легко можем восстановить удалённое, считав сохранённые данные обратно.
Следующий вариант массового удаления элементов реализуется при постановке значка # на кнопке цвета, так, как это показано на иллюстрации. В этом случае будут удалены не все элементы, а только имеющие одинаковый цвет с элементом, по которому сделан клик.
И ещё один вариант – как раз эти элементы в графике остаются, а удаляется всё остальное. Этот вариант реализуется, если в дополнение к значку # выставить опцию ”блокировка рисования”. Так, например, на иллюстрации можно сохранить чёрный икосаэдр, удалив всё остальное.
Удобства эти понятны, но как после удаления вернуться на шаг обратно?
Удаляем мы элемент, найдя его по номеру и установив в ноль ссылку в списке свободных номеров, а также установив в ноль его логотип. Но прежний логотип где мы будем хранить? Удаляется ведь не одна строка, а много строк.
Можно было бы опять использовать для этой цели второй столбец массива свободных номеров, но я решил пойти по другому пути, начав «двухэтажное строительство».
В чём оно заключается?
В 12-й позиции строки содержится номер элемента, а в нулевой – его логотип. Номер не может быть больше чем 511, а логотип – не более пяти. Поэтому умножим логотип на тысячу и сложим результат с номером. Придадим этому числу отрицательное значение и поместим на 12-ю позицию строки.
А нулевую позицию обнулим.
Теперь у нас строки не только удалены и помечены, но и хранят информацию о своём номере и логотипе. Восстановление их – дело простой техники.
Массовое удаление строк в сочетании с выбором их по цвету, возможностями перекраски и консолидированного перемещения, создают основу для конструирования сложных геометрических фигур, вроде вложенных друг в друга додекаэдров и икосаэдра, которые показаны на иллюстрации.
Что касается "двухэтажной информации", то я, зная о таком приёме, иногда строю даже "трёхэтажные" конструкции из чисел.
________
29.8.2022
Свидетельство о публикации №222082901595