Готов согласится по поводу data . Правда, если вместо data class ListMenu(..написать просто class ListMenu(.. принципиально ни чего не изменится и все будет работать. По поводу стека companion - ни чего лучшего не придумал. Но, повторюсь, что смысл статьи - просто дать работающий пример каскадного меню "бесконечной" вложенности тем, кто будет искать что-то подобное...
data class-ы позволяют организовать любую, заранее не известную вложенность меню, в том числе настраиваемую программно. При необходимости их можно преобразовать во ViewModel.
Спасибо за советы! Но у меня стоит задача повторить приложение написанное на Android Xamarin (Фактически на Jave) на Котлине. А на Андроиде есть класс android.view.Menu, который позволяет сделать сложные вложенные меню, что и используется в приложении. Вот что-то подобное мне нужно реализовать на Compose. Я погуглил "Каскадные меню в Compose" и ничего приличного не обнаружил. Поэтому пришлось подумать самому. Важный момент, который удалось найти - использование параметра key у функции remember.
Наверное вы правы. Но когда я искал алгоритмы построения изолиний, дабы не заморачиваться с написанием, мне чаще в первых ответах выпадал данный сайт. Вот и решил сюда написать…
Я имел в виду, что когда приходится при реализации схемы часто использовать элементы массивов, которые не всегда удается обойти циклом, глаз «замыливается».
После вашего замечания, я увидел что в конструкторе internal Ceil(… имеет смысл заменить присваивание r[0] = dotPoint(d[0])… циклом: for(int i=0;i<4;i++) r[i] = dotPoint(d[i]);
А проверку пересечения ребер вынести в отдельный приват метод. Но когда писал — просто не видел…
Спасибо большое за замечание.
Когда решаешь конкретную задачу (например, численно интегрируешь некоторую специфическую систему уравнений газодинамики без помощи универсальных пакетов, а реализуя конечноразностную схему непосредственно в виде программы) возникает необходимость непосредственно в программе строить какое-то представление решения.
Поиск в Интернете результатов не дал. Поэтому появился данный класс. Опубликован с единственной целью помочь кому-нибудь в аналогичной ситуации.
Использование готовых пакетов ( я бы мог сюда еще и Matlab добавить занимает массу времени по передаче в них данных. Например, для построения линий уровня функции на сетке 800х400 занимает до 8 минут для загрузки 3 массивов.
По массивам. Если Вы никогда не решали численно дифференциальных уравнений в частных производных, объяснять что-либо бесполезно.
Готов согласится по поводу
data
. Правда, если вместоdata class ListMenu(..
написать простоclass ListMenu(..
принципиально ни чего не изменится и все будет работать. По поводу стека
companion- ни чего лучшего не придумал. Но, повторюсь, что смысл статьи - просто дать работающий пример каскадного меню "бесконечной" вложенности тем, кто будет искать что-то подобное...
data class-ы позволяют организовать любую, заранее не известную вложенность меню, в том числе настраиваемую программно. При необходимости их можно преобразовать во ViewModel.
Признаю. Ваше решение элегантнее моего. Я в начале тоже пытался разместить все меню в одной функции, но, к сожалению, не догадался до:
Спасибо за обсуждение и идею. Надеюсь, что это поможет еще кому-нибудь, кроме меня
Но Вы не скрываете меню предыдущего уровня. А именно в сокрытии основная проблема.
Спасибо за советы! Но у меня стоит задача повторить приложение написанное на Android Xamarin (Фактически на Jave) на Котлине. А на Андроиде есть класс android.view.Menu, который позволяет сделать сложные вложенные меню, что и используется в приложении. Вот что-то подобное мне нужно реализовать на Compose. Я погуглил "Каскадные меню в Compose" и ничего приличного не обнаружил. Поэтому пришлось подумать самому. Важный момент, который удалось найти - использование параметра key у функции remember.
Запись видео на эмуляторе обязательно попробую.
Мне понадобилось настройки приложения "спрятать", чтобы случайно пользователь не сбил. Но и к десктопу это все тоже применимо.
После вашего замечания, я увидел что в конструкторе internal Ceil(… имеет смысл заменить присваивание r[0] = dotPoint(d[0])… циклом: for(int i=0;i<4;i++) r[i] = dotPoint(d[i]);
А проверку пересечения ребер вынести в отдельный приват метод. Но когда писал — просто не видел…
Спасибо большое за замечание.
Поиск в Интернете результатов не дал. Поэтому появился данный класс. Опубликован с единственной целью помочь кому-нибудь в аналогичной ситуации.
Использование готовых пакетов ( я бы мог сюда еще и Matlab добавить занимает массу времени по передаче в них данных. Например, для построения линий уровня функции на сетке 800х400 занимает до 8 минут для загрузки 3 массивов.
По массивам. Если Вы никогда не решали численно дифференциальных уравнений в частных производных, объяснять что-либо бесполезно.