PMG

Форумы по созданию игр
Текущее время: 27 мар 2024 08:57

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 27 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Компонент TFlowVisualizer
СообщениеДобавлено: 10 сен 2010 23:58 
Не в сети
Любитель

Зарегистрирован: 10 сен 2010 22:26
Сообщения: 18
Привет, форумчанин! :)

Я вдохновлен такой забавной штукой: http://www.bumptop.com/ , но у меня вовсе нет желания делать точно такую же вещь. Это конечно из области фантастики, но аспирантуру ещё никто не отменял, и подобные программы ещё могут быть темой диссертации. Так вот; на ближайшую перспективу есть задача: написать компонент. Простенький такой, называется TFlowVisualizer.
Заметил наверно, пишу на Delphi RAD 2010 и думаю, что у нас будет время обменяться знаниями. Сразу добавлю о себе: сторонник оптимизации и кода, и быстродействия самой программы, к тому же, люблю комментировать, так что читать код будешь с удовольствием. А если в тебе появится желание в чем-то поправить или помочь, то это вызовет во мне бурю эмоций и настоящий восторг, и последующую благодарность. Так что всё, как говорится, в твоих руках.
Сам же предлагаю свою идею, усердие, трудолюбие и исходный код на благо коллективного я. Однако замечу, что по истечении уже определённого срока, код будет внесен в государственный реестр вместе с самим текстом диссертации, если конечно защищусь, что технически довольно просто. Да и, кстати, графический интерфейс программирования OpenGL + Glut.
В самое наиближайшее время опубликую часть каркаса компонента, а потом буду его постепенно дописывать и вводить новую функциональность. А, говоря об этом, нужно сказать, что пользуюсь методикой функционально-ориентированной разработки ПО (FDD), если конечно это кому-то что-то говорит. Кроме этого, есть ещё довольно большой список ограничений и требований из нормативных документов. Разумеется, у тебя должен появиться один вопросик… Но на него есть самый банальный ответ: в одиночку, программирование займет непозволительно долгий срок.
И именно для того, чтобы сделать всё качественно и вовремя, здесь и будет лежать открытый код визуализатора потока данных.

Искренне надеюсь, что этот эксперимент станет удачным началом долгосрочного и продуктивного сотворчества.
Dion


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Компонент TFlowVisualizer
СообщениеДобавлено: 11 сен 2010 12:48 
Не в сети
Любитель

Зарегистрирован: 29 авг 2010 19:15
Сообщения: 27
Спасибо за интересную ссылку. Не знал о таком. Думаю надо добавить ссылки на ютуб с демонстрацией технологии.
Наверное за такими виртуальными столами будущее всех операционных систем. По крайней мере я бы таким пользовался с удовольствием.

http://www.youtube.com/watch?v=SWe-TIy2Lbs


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Компонент TFlowVisualizer
СообщениеДобавлено: 13 сен 2010 01:07 
Не в сети
Любитель

Зарегистрирован: 10 сен 2010 22:26
Сообщения: 18
Пока в гостях мама, дело идет медленно. Хочется побольше времени провести с ней, а то потом нас снова разделят часовые пояса и тысячи километров. Но сейчас перед сном можно чуть-чуть поразмыслить и покодить. Буду потихоньку выкладывать, хоть мне немного и неловко почему-то. Так что особо не ругайтесь, пишу, как умею. Будьте терпеливы я пишу намного медленней, чем читаю, впрочем как и любой из вас.

Код:
interface

Uses Windows, SysUtils, Classes, UProcessData;

Type
  PTreeDB = ^TTreeDB; { .................... Указатель на поле с данными............ }

  BOOTSECTOR = Record { .................... Загрузочный сектор потока задачи....... }
    ROOT: SIDCODE; { ....................... Идентификационный код объекта.......... }
    TASK: Int32; { ......................... Установленное значение идентификатора.. }
    TREE: PTreeDB; { ....................... Указатель на блок данных всех объектов. }
    DATA: Pointer; { ....................... Указатель на блок результирующих данных }
  End;

  TFlowVisualizer = class(TObject) { ....... Визуализатор потока данных............. }
    { FlowVisualizer - это модуль информационной системы с динамическим обновлением и
      модификацией функционала технологических процессов визуализации потоков данных с
      ядра управления. Главной полезной функцией является прием данных заданной формы,
      обработка, вывод графического изображения на поле визуализации и запись отчета о
      выполнении действий с объектами управления, именуемый алгоритмом визуализации. }
  Strict private
    FincSource: BOOTSECTOR; { .............. Загрузочный сектор приемника данных.... }
    FoutSource: BOOTSECTOR; { .............. Загрузочный сектор источника данных.... }
    FputSource: BOOTSECTOR;
  private
    function GetObjectResultBLOB( { ........ Получить отчет о выполненной задаче.... }
      index: Int32): { ..................... Индекс адресата данных................. }
    Pointer; { ............................. Указатель блока результирующих данных.. }
    procedure SetObjectIdentificationCode( { Задать идентификационный код объекта... }
      ID: SIDCODE; { ....................... Идентификатор обращения к полю данных.. }
      index: Int32; { ...................... Индекс получателя данных............... }
      NewID: Int32); { ..................... Устанавливаемое значение идентификатора }
  public
    { Группа свойств отвечает за выбор идентификационного кода объекта. Под выбором...
      подразумевается два типа операций. Выбор источника и получателя или дубликат.. }
    property incSource[ID: SIDCODE]: Int32 index 1 write SetObjectIdentificationCode;
    property outSource[ID: SIDCODE]: Int32 index 2 write SetObjectIdentificationCode;
    property putSource[ID: SIDCODE]: Int32 index 3 write SetObjectIdentificationCode;
    { Группа свойств отвечает за выбор результирующего поля с данными для чтения.... }
    property incResult: Pointer index 1 read GetObjectResultBLOB;
    property outResult: Pointer index 2 read GetObjectResultBLOB;
    property putResult: Pointer index 3 read GetObjectResultBLOB;
  public
    constructor Create;
    destructor Destroy; override;
  end;

  TIncomeData = packed record { ............ Входные данные (чтение файла блоками) . }
    ROOT: SIDCODE; { ....................... Идентификационный код объекта.......... }
    GATE: Word; { .......................... Тип оператора (свойства)............... }
    TASK: Int32; { ......................... Установленное значение идентификатора.. }
  end;

  TResultData = record { ................... Результирующие данные.................. }
    GATE: Word; { .......................... Тип оператора (свойства)............... }
    Arrow: Pointer; { ...................... Указатель на результат задачи.......... }
  end;

  TParentProcessIncomeParameter = Record { . Входные данные процесса визуализации... }
    TotalTime: Double; { ................... Время выполнения команды (интервал) ... }
    TimerFlag: LongBool; { ................. Флаг включения счетчика времени........ }
    FinalFlag: LongBool; { ................. Флаг выключения потока................. }
    ThreadHID: THandle; { .................. Дескриптор потока для управления им.... }
    ThreadSUS: Cardinal; { ................. Счетчик состояний потока............... }
    CallBackS: TProc<Cardinal>; { .......... Процедура с одним параметром (успешно). }
    CallBackE: TFunc<Cardinal, BOOL>; { .... Процедура с одним параметром (ошибка).. }
    CallBackC: TProc<Pointer, Pointer>;
    { ... Заполнение текстового массива данными.. }
    IncomeData: TIncomeData; { ............. Входные данные с субъекта управления... }
    ResultData: TResultData; { ............. Результирующие данные с объекта........ }
  End;

  { Функция для работы с визуализатором потока данных. }
function ParentProcessThreadFunction(Parameter: Pointer): Integer;


Это объявление типов данных. SIDCODE и TTreeDB лежат на другой странице. Их тоже чуть позже опубликую, а то без них непонятно.
Можете не сомневаться, свойства хоть и отсутствуют тут:Delphi Sources и в тому подобных местах, но отлично работают. Кстати при "Ctrl + Shift + C" генерируется неправильный код, можете попробовать в своих проектах и улыбнуться. Компилятор помещает индекс вперед, а потом сам же и ругается на несовпадение типов. :) RAD 2010.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Компонент TFlowVisualizer
СообщениеДобавлено: 13 сен 2010 01:09 
Не в сети
Любитель

Зарегистрирован: 10 сен 2010 22:26
Сообщения: 18
Вот функция для доступа к объекту. Не проверял, но должна работать.
Собственно это функция порожденного потока. Тут маленький примитивный паскалевский цикл. Вложенная процедура для работы со свойствами. И немного кода.
На входе три главные переменные, на выходе указатель, точнее один из трех указателей.
Код:
implementation

var
  Messages: Array of PWideChar; { .......... Массив сообщений класса................ }
  FlowVisualizer: TFlowVisualizer; { ....... Визуализатор потока данных............. }
  TreeDB: TTreeDB; { ....................... Массив с данными визуализатора......... }

function ParentProcessThreadFunction(Parameter: Pointer): Integer;
Label Restart; { ........................... Метка перезагрузки класса при ошибках.. }
Label DoAgain; { ........................... Метка новой задачи..................... }
var
  Frequency: Int64; { ...................... Тактовая частота процессора............ }
  StartTime: Int64; { ...................... Время получения команды (счетчик) ..... }
  FinalTime: Int64; { ...................... Время выполнения команды (счетчик) .... }
  DoRestart: LongBool; { ................... Флаг выполнения перезагрузки класса.... }
  Iteration: Cardinal; { ................... Номер выполненной задачи............... }
  Optimized: Double; { ..................... Множитель счетчика времени............. }

  { Процедура для работы со свойствами визуализатора потока.......... }
  procedure ExecuteProperty(ExchangeData: Pointer; OpenType: LongBool);
  begin
    if OpenType then
      With TIncomeData(ExchangeData^) do
        case GATE of
          1:
            FlowVisualizer.incSource[ROOT] := TASK;
          2:
            FlowVisualizer.outSource[ROOT] := TASK;
          3:
            FlowVisualizer.putSource[ROOT] := TASK;
        end
      else
        With TResultData(ExchangeData^) do
          case GATE of
            1:
              Arrow := FlowVisualizer.incResult;
            2:
              Arrow := FlowVisualizer.outResult;
            3:
              Arrow := FlowVisualizer.putResult;
          end
  end;

begin
Restart : { Метка для перезагрузка визуализатора потока }
  Iteration := 0;

  QueryPerformanceFrequency(Frequency);
  if Frequency = 0 then
    RunError(1); { 998 Ошибка определения частоты на многоядерных процессорах }
  Optimized := 1000 / Frequency;
  DoRestart := False;

  try
    With TParentProcessIncomeParameter(Parameter^) do
    begin

      FlowVisualizer := TFlowVisualizer.Create;
      CallBackC(@Messages, @TreeDB);

      try
      DoAgain : { Метка возврата к началу защищенного блока }

        ResultData.Arrow := nil;
        TotalTime := 0.0;

        if TimerFlag then
        begin { Если нужно произвести операцию связанную с таймером }
          QueryPerformanceCounter(StartTime);
          ExecuteProperty(@IncomeData, True);
          QueryPerformanceCounter(FinalTime);
          FinalTime := FinalTime - StartTime;
          TotalTime := FinalTime * Optimized;
        end
        else { Выполнить действия без учета времени выполнения }
        begin
          ExecuteProperty(@IncomeData, True);
        end;

        { Получение результата, вызов внешней процедуры и заморозка }
        ExecuteProperty(@ResultData, False);
        CallBackS(Iteration);
        ThreadSUS := SuspendThread(ThreadHID);
        Inc(Iteration);

        if not FinalFlag then { Если флаг пуст повторям действие заново }
          goto DoAgain;

      except
        on E: Exception do { Вызываем внешний обработчик ошибок }
          DoRestart := CallBackE(Iteration);
      end;
    end;

  finally
    FlowVisualizer.Free;
  end;

  if DoRestart then { Если произошла критическая ошибка, пробуем начать заново }
    goto Restart;
  Result := 0;
end;



Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Компонент TFlowVisualizer
СообщениеДобавлено: 13 сен 2010 01:33 
Не в сети
Любитель

Зарегистрирован: 10 сен 2010 22:26
Сообщения: 18
На вход компонента подаются данные в строго заданном формате: TIncomeData, а результирующие данные TResultData. Другого доступа к компоненту нет. Всё остальное должно быть реализовано внутри с помощью вывода графики и ввода данных с клавиатуры и мышки.
Внутри класса есть одна функция и одна процедура, обе они представляют собой длинную конструкцию:
Код:
  case SIDCODE of
    0:;
    1:;
    n-1;
    n:;
  else
    ;
  end;

В зависимости от переменной TASK будет произведено действие над объектом. Действий всего два: call or save params.
Грубо говоря call это вызов процедуры или функции по определённому идентификационному ключу. Сама процедура может лежать на другом юните или в bpl(dll) подключенная динамически, т.е. указатель на неё будет лежать в массиве указателей с номером TASK в папке SIDCODE.

Внеси имя файла и получи ID.
Вставь ID в алгоритм и он запустится.
Это что-то типа run-time plugin

В результате алгоритм визуализации всякий раз будет составлен из неких Int64 номеров. Вот такая идея.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Компонент TFlowVisualizer
СообщениеДобавлено: 13 сен 2010 16:01 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
Интересная технология, особенно применительно к touch screen. Но для нее надо на каждый файл делать свою уникальную иконку. Потом атрибуты файла, сортировка файлов по признакам (дата, размер). Ярлыки... Вообщем много проблем.

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Компонент TFlowVisualizer
СообщениеДобавлено: 13 сен 2010 16:50 
Не в сети
Любитель

Зарегистрирован: 10 сен 2010 22:26
Сообщения: 18
Благодаря Кудрявцеву Александру Владимировичу, преподавателю мастер классов по теории решения изобретательских задач в МГТУ им. Баумана эта задача успешно решена в виде алгоритма. Воплотить его в коде довольно просто, но на это потребуется время.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Компонент TFlowVisualizer
СообщениеДобавлено: 13 сен 2010 20:22 
Не в сети
Любитель

Зарегистрирован: 29 авг 2010 19:15
Сообщения: 27
Автор молодец, продолжай, интересно смотреть на развитие идеи.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Компонент TFlowVisualizer
СообщениеДобавлено: 14 сен 2010 02:15 
Не в сети
Опытный

Зарегистрирован: 02 ноя 2008 02:36
Сообщения: 116
Откуда: Kiev
Dion, зачем выкладывать кусочки кода в 200 строк в каждом посте?! Имхо, гораздо лучше создать публичный свн, а здесь постить о каких-нить важных коммитах...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Компонент TFlowVisualizer
СообщениеДобавлено: 14 сен 2010 10:31 
Не в сети
Любитель

Зарегистрирован: 10 сен 2010 22:26
Сообщения: 18
Da Man Люблю людей, высказывающих своё мнение везде, где это возможно.
Даже если ни одному из адресатов непонятно содержание сообщения.
Угадайте, сколько людей поняли Вас?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Компонент TFlowVisualizer
СообщениеДобавлено: 14 сен 2010 22:17 
Не в сети
Опытный

Зарегистрирован: 02 ноя 2008 02:36
Сообщения: 116
Откуда: Kiev
Все разработчики ПО, прочитавшие это сообщение


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Компонент TFlowVisualizer
СообщениеДобавлено: 20 сен 2010 13:06 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
Вот что-то подобное: http://graphics.cs.msu.ru/ru/science/re ... /3dfilesys

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Компонент TFlowVisualizer
СообщениеДобавлено: 20 сен 2010 20:24 
Не в сети
Любитель

Зарегистрирован: 29 авг 2010 19:15
Сообщения: 27
Вот вот, надеюсь, что в ближайшем будущем подход к оформлению информации измениться и будут применимы новые совершенные методы работы с данными.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Компонент TFlowVisualizer
СообщениеДобавлено: 04 окт 2010 14:16 
Не в сети
Любитель

Зарегистрирован: 10 сен 2010 22:26
Сообщения: 18
Не знаю, что делать с веткой.
Все дело в мааленькой проблемке.
в OpenGL есть VBO и это расширение конечно "соответствует" моим ожиданиям, но D3D9 VB немного приятней в использовании. Немаловажную роль конечно сыграл тот факт, что на ноуте вместо картинки из VBO - пустой экран.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Компонент TFlowVisualizer
СообщениеДобавлено: 04 окт 2010 16:39 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
Делай на DX. Если надо можно ветку перенести.

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 27 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB