@Lepidozavr

Как реализовать графические (мб логические) объекты, вложенные друг в друга, (окна в окнах (как матрешки))? Python? C++? ??

Как должно работать.
Функционал представляю таким: на двумерной плоскости можно создавать границы (оградки, пузыри - отделяя/ограждая нужную площадь плоскости). Причём ограждённая площадь уже может содержать в себе другие "секторы" (площади) - как матрешки, только в одной может сидеть сразу несколько.
Каждую площадь можно приближать (колесом мыши, например), и создавать там ещё отдельные структуры/пузыри/площади.
"Пузыри" не могут переходить границы друг друга.

Зачем?
Идея сортировки данных/записей/заметок. Возможно альтернатива рабочего стола/вложенных друг в друга папок.

Умею в базовые навыки Python, получается разбираться в библиотеках, ООП, но даже не понимаю в какую сторону гуглить. Пусть это будет реализовываться на другом языке, но хоть подскажите в какую сторону гуглить. Если подобное уже реализовано и можно поковырять этот код, буду рад подсказкам.

Это у меня в качестве хобби. Спасибо.
  • Вопрос задан
  • 196 просмотров
Пригласить эксперта
Ответы на вопрос 1
wataru
@wataru
Разработчик на С++, экс-олимпиадник.
ООП. Объект - рамка. Должен содержать в себе список всех дочерних рамок (но не внуков - только тех, которые прямо в верхней содержатся, но не в чем другом).

При рисовании новой рамки рекурсивно спускайтесь по этому дереву объектов, пока не получите тот элемент, в котором новая рамка целиком содержится.

При спуске, если видите, что текущий объект не пересекается с рамкой - просто возвращайтесь. Если видите, что пересекается, то возвращайте ошибку - по условию новая рамка пересекаться не может. Если лежит строго внутри, то продолжайте поиск.

Если видите, что все дети текущего объекта не пересекаются с рамкой, то вы нашли рамку - родителя вашего нового объекта. Добавьте новую рамку к детям этого объекта. Теперь пройдитесь по всем детям и, если они целиком внутри новой рамки - перенесите их в детей этого нового объекта.

Как делать прорисовку? Опять же рекурсивный проход по дереву отсекает все элементы, которые не пересекаются с видимой областью. Те, которые пересекаются - сохраняются в какой-то список на прорисовку.

Это если рамок не слишком много, скажем до 1000. В противном случае придется повозиться и городить всякие BSP-tree, kd-tree для быстрого поиска объектов, но вам это, похоже не надо. Это будет слишком сложно.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы