Shleps писал(а):Аналогично - голый канвас и скрипты.
Если заглядывали внутрь tpg, то там сплошняком такое
Это все-же не совсем скрипт, а скорее то что я назвал "описание переменных "
FORM__TEXTAREA_Gen_HTM.var
- Код: Выделить всё
- (*SEdit*********************************
 VN:"F_STR_ИМЯ" REM:"" NZ:""
 VN:"DrawList" REM:"" NZ:"FORM 0 16777215/ИМЯ/ЗАПРОС/43 48-323 250nrFORM_TEXTAREA 0 16777215 ИМЯ Подпись B_01 submit 106 108 202 208 END"
 VN:"OP" REM:"" NZ:"FORM_TEXTAREA 0 16777215ИМЯПодписьB_01submit 106 108 202 208 1 END"
 VN:"F_COD_ИМЯ" REM:"" NZ:"<form action="ЗАПРОС" method="Get" style="BACKGROUND-COLOR: #FFFFFF;COLOR: #000000; POSITION: absolute; TOP:48px; LEFT:43px; width:280px;height:202px;">"
 VN:"FC_COUNT_ИМЯ" REM:"" NZ:"2"
 VN:"FC_N_ИМЯ" REM:"" NZ:"1"
 VN:"Y_ИМЯ" REM:"" NZ:"100"
 //****************************************)
Только в "визуализаторе данных" все значительно менне хаотично, что разумеется плюс.
(Но у меня этот "псевдокод" генерируются "редактором скриптов"(точнее встроенной в него "мини-IDE"), так что особо понятным ему быть необязательно )
А "классический скрипт" это что-то вроде этого
STAR_R_DRW.ps
- Код: Выделить всё
- // Прорисовка звезды
 Var
 S,S1:String;
 x,y,x1,y1,i:Longint;
 x2,y2,x3,y3:Longint;
 Function Next1(Var SS:String;Ch:Char):String;
 var i:Longint;
 begin
 I:=Pos(Ch,SS);
 If i>0 then begin
 Result:= Copy (ss,1,i-1);
 delete(SS,1,i);
 end
 end;
 Begin
 S:=GetParam('OP');
 S1:=Next1(s,' ');
 DRW_SetPenColor ( StrToInt(Next1(s,' ') ));
 DRW_SetBrushColor ( StrToInt(Next1(s,' ') ));
 
 SetParam('RET_RECT',S) ; // Возвращаю границы 'X Y-X1 Y1'
 X:=StrToInt(Next1(s,' '));
 Y:=StrToInt(Next1(s,'-'));
 X1:=StrToInt(Next1(s,' '));
 Y1:=StrToInt(S);
 
 x2:=X+ ((x1-x) div 2);
 y2:=y+ ((y1-y) div 2);
 x3:=X+ ((x1-x) div 3);
 y3:=y+ ((y1-y) div 3);
 Drw_Line(x,y3, x1,y3);
 Drw_Line(x1,y3,x,y1);
 Drw_Line(x2,Y,x,y1);
 Drw_Line(x2,Y,x1,y1);
 Drw_Line(x1,y1,x,y3);
 end.
То есть почти полноценный произвольный кусок алгоритма на языке высокого уровня.
Добавлено спустя 37 минут 4 секунды:
Shleps писал(а):Вот на этом скриншоте в углу статистика гласит, что на экране 28000 примитивов.
Это значит, что каждый честно перерисованный кадр интерпретировалось 28000+ строк текста.
Это то что я называю заслуженная гордость!
(У меня до тыщи элементов в списке команд (максимум 400- 500) не доходило ни разу впрочем сама задача этого не требовала в принципе, это же не мини Корел Драв и даже неполноценный редактор, веб-станиц, а чтото вроде "редактора форм в лазарусе". )
Добавлено спустя 12 минут 43 секунды:
Shleps писал(а):На экран оно вываливается практически как есть. Т.е. отрисовка каждого кадра это интерпретация всей программы.
Что можно - кешируется в уже распарсенном состоянии, но зум и скролл в любом случае заставят всё пересчитать.
Может поэтому рендер кажется неотзывчивым?
Я делал псевдо кэширование в "метафайлы" в результате как минимум скрипты прорисовки гонялись только при реальном изменении данных ( скролл работал по уже просчитанным данным, масштабирования рабочего поля у меня нет, но есть "хитровывернутый" выбор элемента мышкой ( суть проблемы в том что я "в общем виде" не знаю границы рисуемой фигуры заранее) так что там кэширование в "метафайлы" тоже было более чем полезно + скриптовая перерисовка шла для каждого элемента отдельно при их перемещении и масштабировании ).
А "отзывчивость" можно повысить разместив критически медленный блок рендера в отдельном потоке. Текущий расчет "срывается" по приходу следующего пакета данных не успев завершится ? Ну и черт с ним! Пользователь этого не увидит, а реакция будет "космической". (это уже из более свежего опыта работы с условной риалтайм обработкой данных )





 )  то завершаю цикл.  ( Кстати в OpenGL стандартный "выбор 3D-объекта" делается аналогично )
  )  то завершаю цикл.  ( Кстати в OpenGL стандартный "выбор 3D-объекта" делается аналогично )
 )
 ) Лучше всего разумеется сделать "сменный рендер" ...
 Лучше всего разумеется сделать "сменный рендер" ...