kstrizhov / rdo-xtext

RDO modelling language written in Xtext
0 stars 0 forks source link

Работа в режиме процесса моделирования #9

Closed kstrizhov closed 9 years ago

kstrizhov commented 9 years ago

Необходимо реализовать возможность построения новых вершин "на лету", по мере добавления новых записей в базу данных.

Привязать к шкале масштабирования времени моделирования.

kstrizhov commented 9 years ago

@aurusov @k-alexandrovsky

Сделал обновление графа в процессе поиска, но почему -то некоторые вершины рисуются без связей с предками, а потом в дальнейшем между такими вершинами появляются какие-то непонятные связи, будто бы он позднее определил кто для кого потомок\предок. В итоге рисует пока ерунду.

По идее каждая новая запись после того, как ее распарсили, добавляет в дерево новую вершину, и у нее обязательно должен быть предок, то есть граф всегда связный во время процесса поиска. Грешу либо на свой метод отрисовки и способ хранения последней добавленной вершины, либо я чего-то не учитываю в алгоритме поиска.

kstrizhov commented 9 years ago

Посмотрел номера вершин, которые поподают в функцию отрисовки, они почему-то идут через одну, такое ощущение, что сериализуются быстрее, чем происходит обновление графа.

2015-02-19 01 05 38

Менял скорость обновления здесь, повлияло вот таким образом. 2015-02-19 01 19 07

Пока думаю, как это исправить.

aurusov commented 9 years ago

Выглядит так, что контейнер вершин не под мьютексом. Со стороны сериализатора ему нужен write_lock. Со стороны графа - read_lock.

aurusov commented 9 years ago

Граф строится в режиме реального времени. Есть ошибка - найденный путь заполняется, но не отрисовывается заданным стилем.

kstrizhov commented 9 years ago

@aurusov, мы обсуждали на консультации, что у меня в конструкторе есть копипаста (в теле конструктора и в TimerTaskе), которую надо убрать. Может на консультации уже был глаз замылен, и я не обратил на это ваше внимание, но у меня в первом случае вызывается метод drawGraph(), а во втором drawNewVertex(). И это все обернуто в стандартную конструкцию

graph.getModel().beginUpdate();
try {
//преобразования с графом
} finally {
graph.getModel().endUpdate();
}

Я вижу смысл только в идее вынести вообще все в метод, чтобы вызывать пустой конструктор, а рисовать все после прогона, дергая его в другом месте. С копипастой остался вопрос.

aurusov commented 9 years ago

Я вижу смысл только в идее вынести вообще все в метод, чтобы вызывать пустой конструктор, а рисовать все после прогона, дергая его в другом месте.

Да, так и договаривались

С копипастой остался вопрос.

В чем разница в коде между методами ?

kstrizhov commented 9 years ago

drawGraph строит дерево со всеми вершинами, отсериализованными из БД на момент вызова, вызывается один раз при создании окна, drawNewVertex по таймеру отрисовывает разницу между отсериализованными вершинами и отображенными на экране.

aurusov commented 9 years ago

Переименуй их, чтобы по названию было понятно.

kstrizhov commented 9 years ago

Исправил, все работает.

aurusov commented 9 years ago

Отлично. Ошибка очень обидная, думал, что перерисовка окна вызывает этот метод. Закрывай таску.