Pull to refresh

Comments 21

UFO just landed and posted this here
почитайте научные публикации автора по тематике, думаю станет понятней
http://marvl.infotech.monash.edu/~mwybrow/#publications
Потребности в приложении не испытываю, но симпатичный интерфейс, векторная графика схем и наличие английского языка вызывают желание поискать ему применение.

Иконка ужасна, английский хотелось бы по-умолчанию, а «кастомизацию» лучше всё-таки заменить на «настройку». С переводом на немецкий могу помочь (пока что он у вас очень… своеобразный ;).
немецкий пока добавлен скорее для эксперимента, это небольшой хобби-проект, далекий от боевого релиза. но спасибо за предложение, может обращусь в будущем :)
Глупый вопрос. А вы помогли автору задокументировать то, что вам не хватало?
ну это тяжело выделить в страницу формальной документации. фактически это и есть назначение данной публикации
Знаю, что трудно. Но это было бы намного ценнее.
Кстати, нигде не нашёл исходников. Выглядит красиво, но под мои нужды не очень подходит. На базе вашей программы можно попробовать сделать красивую mind-map программу.
Может быть хотя бы куски реализации графики опубликуете? Классы для qt там…
если у кого-то будет интерес, и у меня силы — то я смогу выдрать реализацию diagram_scene со всей обвязкой, и сделать соответствующий разъясняющий пост. Фактичкски, это сцена, в которой можно выделять объекты, перемещать, и соединять. Но пока это все в таком экспериментальном состоянии, что местами даже стыдно показывать. Поэтому этот материал пока не созрел.
У вас есть серьезные трудности с оптимальностью кода.

1) Векторы и push_back, или «автор не знает о resize»
std::vector<pos_t> path;
for (size_t i = 0; i < route.ps.size(); ++i)
path.push_back(pos_t(route.ps[i].x, route.ps[i].y));

Многократный вызов push_back здесь неуместен (будут переаллокации). Лучше сделать resize заранее:
std::vector<pos_t> path;
path.resize(route.ps.size());
for (size_t i = 0; i < route.ps.size(); ++i)
   path[i]=pos_t(route.ps[i].x, route.ps[i].y);


2) А вот тут уже серьезный источник проблем с производительностью:
auto it = std::find(nodes.begin(), nodes.end(), p_node);

Честно говоря, это абсурд. Потому что вы для контейнера с логарифмическим поиском (map) вызываете линейный поиск.

Ну и (хотя бы во время отладки) имеет смысл проверять, не вернул ли find конец контейнера. И использовать константные декларации.
трудностей нету, здесь было целью наглядно и просто показать. поэтому упрощал как мог.
1) код выполняется редко, и потери ничтожны по сравнению с работой маршрутизации
2) nodes вообще-то вектор. можно сделать map-индексы, но код сложней воспринимать.
Мне кажется, что тут оптимально будет вызывать не resize() + push_back(), а reserve() + emplace_back() — нет лишних копирований и вызовов дефолтных конструкторов, еще и перемещение в push_back() экономится.
если уж совсем грамотно — то тут можно лишнего вектора избежать, и копирования вообще :) но как я уже сказал — здесь главное наглядность

Поискал на сайте и в gihub-репозитории, но не нашёл, какая у библиотеки лицензия. Вы не в курсе?..

вот здесь информация http://www.adaptagrams.org
Это ж то же самое, что трассировка проводников на печатных платах?
насколько я помню — достаточно близко (по крайней мере по используемым алгоритмам). к печатным платам ближе вот эта библиотека http://www.ogdf.net/ogdf.php
UFO just landed and posted this here

Программа интересная, хочется попробовать. Но где найти сборку под Ubuntu?

в этой версии пришлось пропустить линуху, т.к. сдался собрать под ней qt 5.7.1. В след. версии попробую разобраться с автоматизацией сборки под базовый набор линуховых веток, надеюсь за праздники разберусь.

Как можно будет узнать о выходе новой версии? Следить за блогом программы?

Там на странице Скачать (http://ultraoutliner.com/download?locale=ru) есть на твиттер кнопка, или на почту можно подписаться. В блог редко и только что-то важное переношу, а на почту/твиттер робот автоматом уведомления рассылает, когда новые версии публикую.
Sign up to leave a comment.

Articles