Вверх ↑
Этот топик читают: Гость
Ответов: 1841
Рейтинг: 123
#46: 2015-10-10 11:58:37 ЛС | профиль | цитата
sla8a,
Надо будет на ноутбуке посмотреть, вроде там поновее версия.

Посмотри пожалуйста. Может я допилю, если что
Не хорошо мне к славе sla8ы примазываться.
По хорошему то надо всё-таки тебе доделать и выложить, хорошая штука то.
Сейчас буду посмотреть, потом вопросы, если будут.
Спасибо!
------------ Дoбавленo в 11.58:
Да, то что доктор прописал!
Осталось вывести точки, чтобы программно рулить, а не через меню.
+ точки координат для задания начального расположения кубиков.
+ подсказку привинтить.
Подсказка вот для чего нужна:
http://forum.hiasm.net/forum_serv.php?q=56&id=4057
запустить result.html
Chrome будет ругаться (давно делал), по этому надо в Internet Explorer запускать.
Вдруг не запустится, то вот картинка. http://forum.hiasm.net/forum_serv.php?q=56&id=4058
(фиолетовый квадратик - это подсказка.)
P.S.

Виноват, исправлюсь - подсказка есть. Сразу не заметил.
+ Имя файла для загрузки/сохранения схемы (точки вывести R/W)

P.S.
Допилишь?
карма: 5

0
Ответов: 1988
Рейтинг: 633
#47: 2015-10-10 13:09:35 ЛС | профиль | цитата
flint2, посмотрел на ноутбуке версия намного новее. Там и горячие клавиши и стрелки с линиями. Но все сыроватое.
flint2 писал(а):
Допилишь?
С свободным временем сейчас напряженно. Постараюсь привести в более менее приемлимый вид и выложить (возможно сегодня ночью).
карма: 9

1
Голосовали:andrestudio
Ответов: 1841
Рейтинг: 123
#48: 2015-10-10 13:23:30 ЛС | профиль | цитата
sla8a, Спасибо!
Но не в ущерб сну!
[flood]У меня тоже лучше всё ночью получается[/flood]
По моему разумению, вещь достойная.
Можно два, один с менюшкой, другой с точками для программного общения.
карма: 5

1
Голосовали:andrestudio
Ответов: 4744
Рейтинг: 530
#49: 2015-10-10 18:29:22 ЛС | профиль | цитата
flint2 писал(а):
Но не в ущерб сну!
это точно "если всё работает значит всё работает, премию пожалуйста "
sla8a, спасибо за труд ибо он многим дорогу освещает.
карма: 6
0
Ответов: 1988
Рейтинг: 633
#50: 2018-12-15 17:51:37 ЛС | профиль | цитата
Нужно добавить восстановление позиции штриховой кисти.
Схема для наглядности


Add(MainForm,2953706,336,259)
{
Width=660
Height=356
Position=1
link(onCreate,12078549:doWork1,[(424,279)])
}
Add(Img_FloodFill,1917040,441,301)
{
Color=65535
ColorBorder=16711935
Style=6
link(onDraw,6784223:doDraw,[])
link(Bitmap,8794527:Var2,[])
}
Add(Button,6858880,336,301)
{
Left=305
Top=275
link(onClick,16704057:doEvent1,[])
}
Add(PaintBox,9740949,441,238)
{
Left=45
Top=20
Width=575
Height=230
Color=0
}
Add(HubEx,12078549,420,301)
{
link(onEvent,1917040:doDraw,[])
}
Add(Hub,16704057,385,301)
{
link(onEvent1,12078549:doWork2,[])
link(onEvent2,9740949:doRefresh,[(409,314)(409,244)])
}
Add(Img_FloodFill,6784223,483,301)
{
X=1
Y=1
Color=255
ColorBorder=16711935
UseOffsetFill=1
Style=6
link(Bitmap,8794527:Var3,[(489,285)])
}
Add(GetDataEx,8794527,441,280)
{
link(Data,9740949:Bitmap,[])
}
  Запустив схему можно увидеть как PaintBox заливается первым элементом FloodFill желтой сеткой (заливка не сдвигается UseOffsetFill = False), а потом вторым FloodFill красной сеткой с смещенной заливкой на 1 пиксель по Х и Y (UseOffsetFill = True).
  Нажав кнопку можно увидеть что останется только красная сетка. Причина в том что второй FloodFill сдвинул позицию, а первый FloodFill об этом не знает и первая сетка закрашивается второй. Так как позиция штриховой кисти в Canvas-е PaintBox-а, то один раз сдвинутая позиция одним элементом будет использованы по умолчанию остальными.
  Элементов изменяющих позицию штриховой кисти шесть: Img_Arc, Img_Rectangle, Img_Ellipse, Img_Polygon, Img_FloodFill и RGN_Draw.

Для восстановления позиции можно использовать два способа:
1. Поставить позицию кисти в нулевую позицию. Достаточно перед FINALLY в _work_doDraw добавить строку:

SetBrushOrgEx(pDC, 0, 0, nil);
2. Запомнить позицию при изменении и восстановить в конце.

procedure THIImg_FloodFill._work_doDraw;
var
OldOrgX: TPoint;//добавить - для хранения старой позиции

....

begin

....

case _prop_UseOffsetFill of
1: SetBrushOrgEx(pDC, x1, y1, @OldOrgX);//заменяем nil на @OldOrgX
2: begin
p := cardinal(ReadInteger(_Data, _data_OffsetFill, 0));
SetBrushOrgEx(pDC, smallint(p and $FFFF), smallint(p shr 16), @OldOrgX)//заменяем nil на @OldOrgX
end;
end;

....

if _prop_UseOffsetFill > 0 then SetBrushOrgEx(pDC, OldOrgX.X, OldOrgX.Y, nil);//добавить: если изменяли позицию восстанавливаем.
FINALLY

Вот не знаю какой способ лучше. Первый вроде бы как проще и его вполне хватит, но второй более корректный.
Кто что скажет?
карма: 9

0
Ответов: 1841
Рейтинг: 123
#51: 2018-12-16 22:18:52 ЛС | профиль | цитата
sla8a, я за последний год перепробовал десятка полтора 2D движков, известных и не очень.
Так вот, в добротных работах в инструментарии кисти и тайлы сделаны с запоминанием и последующем восстановлением.
Второй вариант является классикой жанра, независимо на каком языке сделан движок, или редактор.
карма: 5

0
Ответов: 1988
Рейтинг: 633
#52: 2018-12-16 22:43:06 ЛС | профиль | цитата
flint2, спасибо. Значит второй вариант.
nesco, внесете изменения?
карма: 9

0
Разработчик
Ответов: 25687
Рейтинг: 2088
#53: 2018-12-17 01:27:12 ЛС | профиль | цитата
sla8a писал(а):
внесете изменения?

Выкладывай исправленный проверенный файл, тогда добавлю. Описание изменений на eng для SVN тоже добавь. На будущее, я буду добавлять на SVN только с такими требованиями -- проверенный файл(ы), описание фикса или добавления на eng в формате: add(fix): <бла-бла-бла>

Редактировалось 1 раз(а), последний 2018-12-17 01:31:34
карма: 20

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