Вверх ↑
Этот топик читают: Гость
Ответов: 2193
Рейтинг: 673
#1: 2014-04-29 22:57:51 ЛС | профиль | цитата
Предлагаю рассмотреть добавление трансформации (поворот, масштаб, сдвиг и т.п.) к элементам графики. Не уверен что выбранный мною способ создания элементов самый оптимальный, но пробовал различные варианты (менеджеры, по событию) и остановился на этом варианте, как самом понятном для пользователя. В Share.pas внесены изменения по совету Netspirit. Так же пришлось дополнить элементы графики для работы с элементами трансформации. Изменения внесены и в Img_Draw.pas.
Сразу хочу предупредить: совместимость не пострадает.

         Спасибо Netspirit за тестирование и внесение изменений.

5 элементов "садятся" на нужный элемент для создания нужной трансформации. К примеру чтоб повернуть текст на 90 градусов достаточно подключить Img_UseRotate (поворот) с заданной величиной:
transform_01.jpg
А если необходимо еще увеличить и сделать сдвиг, подключаются еще Img_UseScale (масштаб) и Img_UseSkew (скос):
transform_02.jpg
Так же работают и элементы Img_UseOffset (Смещение), Img_UseFlip (Отражение). У всех них есть своя верхняя точка для комбинирования трансформации.
6-ой элемент Img_UseTransform (Трансформация) работает по тому же принципу что и предыдущие и задает произвольную трансформацию по шести параметрам (eM11,eM12,eM21,eM22,eDx,eDy). Отличие элемента от предыдущих в отсутствии комбинировании трансформации:
transform_03.jpg
7-ой элемент Img_SetTransform (Установка трансформации) предназначен для применения трансформации (предыдущих 6 элементов) не к одному элементу, а к заданной области:
transform_04.jpg

Вот так можно создать крутящуюся загрузку:
transform_05.jpg
Скриншот примера из архива, в котором трансформация применяется для всех элементов графики:
Все элементы

В архив также добавлены элементы:
  • Img_Edge и Img_TextInRect (с внесенными изменениями для трансформации).
  • Img_FloodFill (только pas с изменениями для устранения ошибки заливки штриховой кисти на Contex)
    Для тестирования:
    1. Скачать архив: transform_2014_05_10.zip
    2. Из папки new установить элементы (перетащить ini файлы на рабочее поле HiAsm). Элементы устанавливаются в вкладку Графика.
    3. Заменить элементы из папки change. Файлы pas в папку Elementsdelphicode, а файлы ini в папку Elementsdelphiconf. Желательно оригиналы предварительно скопировать в отдельную папку, для возможности восстановления.
    4. Смотреть примеры из папки test.  

    Редактировалось 1 раз(а), последний 2017-05-30 19:56:34
  • карма: 10

    12
    файлы: 7transform_01.jpg [13.5KB] [1409], transform_02.jpg [17.7KB] [1380], transform_03.jpg [19.7KB] [1395], transform_04.jpg [64KB] [1427], transform_05.jpg [24.8KB] [1359], transform_10.jpg [62.4KB] [1140], transform_2014_05_10.zip [84.7KB] [388]
    Голосовали:Galkov, nesco, Tad, halt, miver, Netspirit, kamakama, flint2, foksov, Assasin, MAV, Konst
    vip
    #1.1контекстная реклама от партнеров
    Разработчик
    Ответов: 26061
    Рейтинг: 2120
    #2: 2014-04-30 01:47:58 ЛС | профиль | цитата
    Оригинально. Применяется каскадное (вертикальное) программирование. А что сподвигло к такому способу использования элементов
    карма: 22

    0
    Ответов: 2193
    Рейтинг: 673
    #3: 2014-04-30 02:11:26 ЛС | профиль | цитата
    Методом проб пришел к выводу, что это лучший из вариантов (обработанных мной).
    карма: 10

    0
    Разработчик
    Ответов: 26061
    Рейтинг: 2120
    #4: 2014-04-30 10:31:57 ЛС | профиль | цитата
    ИМХО, мне лично, вот это название Img_UseShear слух режет, почему не Img_UseShift
    ------------ Дoбавленo в 10.31:
    sla8a, если ты хочешь, что бы я добавил трансформацию в пакет, то убери все handler из ini файлов. я тебе уже объяснял почему его не должно быть. Второе: для чего в change добавлен Img_MultiText? когда он такой же точно, как и в пакете. Третье: почему не модифицирвался Img_Polygon, для него есть только ini файл. Четвертое: почему отказался от модификации точек и линий?
    карма: 22

    0
    Ответов: 2193
    Рейтинг: 673
    #5: 2014-04-30 10:38:16 ЛС | профиль | цитата
    Все выложенное в стадии тестировании, поэтому заменить название не сложно, но вы уверены что Shift в данном случае больше подходит чем Shear? Честно признаюсь, мой английский плох.
    карма: 10

    0
    Разработчик
    Ответов: 26061
    Рейтинг: 2120
    #6: 2014-04-30 10:43:14 ЛС | профиль | цитата
    sla8a писал(а):
    вы уверены что Shift в данном случае больше подходит чем Shear

    Подождем, что скажет Tad, он вроде неплохо знает английский.
    Прочитай внимательно мой последний пост

    карма: 22

    0
    Ответов: 2193
    Рейтинг: 673
    #7: 2014-04-30 10:55:31 ЛС | профиль | цитата
    1. Не понял что именно не так. Лично мной Handler добавлен только в файл Img_SetTransform.ini для точек Point1 и Point2.
    2-3. Эти элементы попали в архив по ошибке. Над их доработкой еще нужно поработать. Для трансформации нужно знать ширину и высоту объекта и если в элементах прямоугольник, эллипс и т.п. эти значения задаются сразу, то ширину и высоту полигона еще нужно найти. Но это не проблема. Доработаю остальные элементы.
    карма: 10

    0
    Разработчик
    Ответов: 26061
    Рейтинг: 2120
    #8: 2014-04-30 11:30:22 ЛС | профиль | цитата
    sla8a писал(а):
    Не понял что именно не так

    handler умудрился попасть в Img_Polygon, зачем Но я не против доступных хандлеров, только не применяй самопальные
    sla8a писал(а):
    Доработаю остальные элементы

    Ждемс полной версии
    карма: 22

    0
    Ответов: 4621
    Рейтинг: 746
    #9: 2014-04-30 11:31:31 ЛС | профиль | цитата
    sla8a писал(а):
    Shift в данном случае больше подходит чем Shear?
    Эта операция вроде называется Skew
    карма: 26

    0
    Разработчик
    Ответов: 26061
    Рейтинг: 2120
    #10: 2014-04-30 11:36:56 ЛС | профиль | цитата
    Netspirit писал(а):
    Эта операция вроде называется Skew

    Никогда не слышал про такие операции, а вот про Shift -- сколько угодно

    Кстати, вот про значение слова Shift -- http://dic.academic.ru/dic.nsf/eng_rus_apresyan/86988/shift, см 2-й пункт
    карма: 22

    0
    Ответов: 4621
    Рейтинг: 746
    #11: 2014-04-30 11:48:15 ЛС | профиль | цитата
    http://www.insidegraphics.com/corel_basics/corel_draw_skew.asp
    https://thedailydigi.com/skew-transformations

    Shift - это перемещение в пространстве без смены формы (ну, или изменение какой-либо величины), Skew - скос, перекос
    карма: 26

    0
    Разработчик
    Ответов: 26061
    Рейтинг: 2120
    #12: 2014-04-30 13:08:21 ЛС | профиль | цитата
    Netspirit писал(а):
    Skew - скос, перекос

    Тогда и компонент должен называться не "сдвиг", а "скос"
    карма: 22

    0
    Разработчик
    Ответов: 4697
    Рейтинг: 426
    #13: 2014-04-30 13:11:58 ЛС | профиль | цитата
    Может тогда лучше Transform? Прошу прощения, из головы вылетело, что такой компонент уже есть.
    карма: 10
    0
    Ответов: 4621
    Рейтинг: 746
    #14: 2014-04-30 13:49:05 ЛС | профиль | цитата
    Именно. И ещё, вместо Reflect обычно применяется Flip, хотя тут я тонкостей не знаю.
    карма: 26

    0
    Ответов: 2193
    Рейтинг: 673
    #15: 2014-04-30 14:32:34 ЛС | профиль | цитата
    Лично мне особой разницы в названии элементов нету, в пределах разумного конечно. Меня больше беспокоит "начинка" компонентов. Кому не сложно посмотрите, особенно share.pas.
    Netspirit писал(а):
    вместо Reflect обычно применяется Flip,
    Не уверен:
    reflect писал(а):
    1) отражать (свет, тепло, звук)
    2) а) отражать; давать отражение (о зеркале и т. п.)
       б) отражать, воспроизводить, свидетельствовать (о чём-л.)
    flip писал(а):
    1) а) подбрасывать в воздухе; метать
       б) переворачивать; перекидывать (резким движением)
       в) (flip through) пролистать, бегло просмотреть
       г) переворачиваться
    2) а) слегка ударять; щёлкать, хлестать
       б) щёлкать (кнопкой, выключателем)
    3) смахивать, стряхивать (резким движением)
    4) свихнуться; взбеситься

    По поводу Shear или Skew "погуглите" картинки на эти слова.
    карма: 10

    0
    Сообщение
    ...
    Прикрепленные файлы
    (файлы не залиты)