Вверх ↑
Этот топик читают: Гость
Ответов: 2202
Рейтинг: 675
#1: 2014-05-04 16:23:35 ЛС | профиль | цитата
Чтоб не захламлять тему о трансформации, решил обсудить работу Img_Polygon в отдельной теме. Для начала смотрим две схемы.
Схема 1:code_33533.txt
Схема 2:code_33534.txt
Для тестирования по нажимайте на кнопку. Разница в этих схемах только в расположении данных многоугольника, в первой схеме данные в свойстве элемента, а во второй схеме данные в массиве. Работа элемента при этом отличается, хотя этого быть не должно. Почему так происходит, понятно. Лично мне работа второй схемы (однократное смещение координат из свойства Offset) более правильна, ее и планирую откорректировать при добавлении трансформации.
nesco, что скажите?
карма: 11

0
файлы: 2code_33533.txt [732B] [390], code_33534.txt [820B] [383]
vip
#1.1контекстная реклама от партнеров
Разработчик
Ответов: 26068
Рейтинг: 2121
#2: 2014-05-04 20:04:27 ЛС | профиль | цитата
sla8a писал(а):
Почему так происходит, понятно

А ведь не должно быть, объясняй, почему, если уже нашел Надо приводить в соответствие

Во второй схеме, у меня при каждом нажатии смещается, вообще-то, должно быть смещение только один раз
карма: 22

0
Ответов: 2202
Рейтинг: 675
#3: 2014-05-04 22:01:02 ЛС | профиль | цитата
Из свойства PointsArray если оно заполнено, массив создается при создании (procedure ThiImg_Polygon.SetItems;). И после каждый раз при doDraw все точки массива увеличиваются на Offset. Что по мне не правильно.
А если данные занесены в внешний элемент, то они читаются каждый раз при doDraw заново и увеличиваются на Offset.
nesco писал(а):
Во второй схеме, у меня при каждом нажатии смещается,
Вы наверное ошиблись, в первой схеме идет постоянный прирост, а не во второй.
Что-то вроде этого нужно:
code_33542.txt и отказаться от (procedure ThiImg_Polygon.SetItems;).
карма: 11

0
файлы: 1code_33542.txt [794B] [239]
Разработчик
Ответов: 26068
Рейтинг: 2121
#4: 2014-05-05 09:59:52 ЛС | профиль | цитата
sla8a писал(а):
наверное ошиблись, в первой схеме идет постоянный прирост, а не во второй

Да, действительно.
sla8a писал(а):
и отказаться от (procedure ThiImg_Polygon.SetItems;)

Логично, можно остановиться на таком подходе
карма: 22

0
Ответов: 2202
Рейтинг: 675
#5: 2014-05-05 23:29:01 ЛС | профиль | цитата
nesco, а если выкинуть Offset
На вопрос почему:
1. Не работает с отрицательными значениями: code_33551.txt
2. Вместо Offset можно будет использовать трансформацию (Img_UseOffset).
Да и сколько помню мало кто пользовался Offset, в основном из-за первого пункта.
карма: 11

0
файлы: 1code_33551.txt [1KB] [352]
Разработчик
Ответов: 26068
Рейтинг: 2121
#6: 2014-05-06 00:07:44 ЛС | профиль | цитата
sla8a писал(а):
Не работает с отрицательными значениями

Если сделать вот так, то будет работать

procedure NewSize(var Points: array of TPoint; const Offset: cardinal; Scale: TScale);
var i,x,y: integer;
begin
if (Length(Points) = 0) then exit;
x := Offset and $FFFF;
y := Offset shr 16;
for i := 0 to High(Points) do begin
if x <> 0 then inc(Points[i].x, SmallInt(x));
if y <> 0 then inc(Points[i].y, SmallInt(y));
Points[i].x := Round(Points[i].x * Scale.x);
Points[i].y := Round(Points[i].y * Scale.y);
end;
end;

карма: 22

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