TGViewer
Channel Public Channel
Random Rust Dev

Random Rust Dev

@random_rust_dev

Разработка на языке Rust.
Пишу простыни со своими мыслями о Rust и проектах на нем.
Subscribers
472
Photos
188
Videos
59
Links
44

Showing posts older than #33 · Back to latest

Older Posts 20 shown
Post #32 217
Вот теперь зум получается хорошим.
Нужен только один workaround в пользовательском коде для TextEdit - задать явно desired_size и margin.
Первый можно просто занулить, для второго взять ui.spacing().item_spacing например.

За одно переставил зум на колесико мышки. Ограничение зума и скорость будет в SnarlStyle
Post #31 347
Уже получше
  • 👍 5
Post #30 330
Зум в egui это сложно, но вот что выходит пока
  • 👍 2
Post #29 360
Схлопывание замедленном режиме
  • 👍 5
Post #28 376
Сделал схлопывание нод.
Получилось вроде прилично.
Пришлось, правда, переделать отрисовку, разделив рисование заголовка и пинов.

Обычный егуйный CollaspingHeader просто клипает содержимое во время анимации.
Мне же захотелось сделать похитрее - схлопывающийся контент уезжает наверх.
  • 🔥 4
Post #27 212
Выглядит неплохо. Сделаю это стилем по-умолчанию
Post #26 216
Это даже проще чем казалось
  • 🔥 4
Post #23 221
Наконец-то получилось сделать тягание ноды за любой неинтерактивный спот на ней.

А еще ресайз ноды, так что в нее точно помещается весь контент с отступами, но не больше.
  • 🔥 2
Post #22 246
В визуальном программировании часто приходится на каждую маленькую операцию вставлять ноду.
Но зачем?

Заменил ноду Add на ноду Expr в демке к egui-snarl.
Теперь можно написать выражение с числами и переменными и его результат будет на выходе.
А для каждой переменной будет вход.

Все же я хочу что бы этот TextEdit был прямо в шапке ноды. Но пока не придумал как объединить это с перетаскиванием ноды за шапку.
  • 👍 6
Post #21 328
Оказывается находить кривую рядом с курсором очень даже просто.
Почти как рисовать. Сэмплишь многоточек и находишь расстояние до них.
Но для перфа сделал еще иерархичные баундин боксы до достаточно короткой секции
  • ❤ 3
Post #20 226
Вообще у людей разное отношение к копилоту и подобным ИИ для порграммистов.

Для меня это просто code completer 80го уровня.
Я никогда не прошу его реализовать функцию, я начинаю писать, а он предлагает. И часто угадывает.

Хотя функции на пару строк может и целиком угадать просто исходя из аргументов и возвращаемого типа.
Post #19 246
То ли копилот знает алгоритм де Кастельжо, то ли просто угадал
Post #18 306
Сообщение для комментов
Post #12 284
Сейчас вот подумал, что для рендерграфа можно при выборе пина показывать содержимое. Даже для буферов, если будет описание структуры данных там
Post #11 285
Связи вообще и необязательно передают какие-то данные.
Я собираюсь использовать нод-графы в двух местах сейчас.

1. Для организации зависимостей между системами для ЕЦС. Snarl с системами будет передан в скедулер.
Планирую дать возможность менять порядок систем прямо в рантайме, когда симуляция игры запущена в эдиторе.
2. Для визуализации рендерграфа. Как-то модифицировать граф будет нельзя, только двигать ноды по плоскости.
Post #10 275
Так же вьюер решает, что Sink показывает у своего входа.
Когда Sink подключен к выходу от Integer или Add, то вьюер сделает ui.label() с числовым значением, от String со строковым значением, а от Show загрузит картинку, хотя в типе там тоже строка лежит.

Конечно при большем количестве вариантов надо заводить нормальные типы передаваемых данных, а не хэндлить каждый тип ноды отдельно, но в примере так нагляднее пока что.
Post #9 279
Граф на картинке выше имеет очень простое определение типа ноды.
Это такой вот энум

enum DemoNode {
/// Node with single input.
/// Displays the value of the input.
Sink,

/// Value node with a single output.
/// The value is editable in UI.
Integer(i32),

/// Value node with a single output.
String(String),

/// Value node with a single output.
///
/// It has two inputs, ediable if not connected.
Add(Vec<i32>),

/// Converts URI to Image
Show(String),
}


И уже вьюер сам знает что у Sink есть 1 вход и 0 выходов, а у Add входов сколько значений + 1, а выход 1
Post #8 250
В отличии от существующих нод-граф крейтов у egui-snarl используется концепт вьюера.
Это он решает какие у ноды пины, сколько их, как выглядят, что рисуется рядом с ними.
egui-snarl предоставляет контейнер для графа Snarl и трейт для вьюера SnarlViewer.
При отрисовке Snarl::show регулярно обращается к SnarlViewer что бы отрисовать шапку ноды, узнать сколько сейчас пинов у ноды, отрисовать контент у пина, узнать как выглядит сам пин, а так же с событиями, что бы вьюер сам решил что делать, соединять ли ноды, а может между ними вставить еще одну для преобразования типа, удалять ли связь или ноду.
Post #7 258
egui-snarl позволяет создать нод-граф для любых целей.
У него вообще нет предположений о том что ноды и связи значат.
Ноды тоже, это просто данные.

Для начала я собрал вот такой простенький пример.
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →