Russian Qt Forum
Ноябрь 22, 2024, 13:55
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Программирование
>
Общий
>
Запутался с идеологией
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Запутался с идеологией (Прочитано 5732 раз)
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Запутался с идеологией
«
:
Февраль 13, 2017, 12:18 »
Добрый день
Есть файлы данных (.dat) и есть файл сцены (.scn). Оба формата могут содержать любое кол-во объектов. Юзер всегда работает с одним файлом сцены который может ссылаться на любое кол-во файлов данных. Разные данные одного и того же объекта хранятся по-разному. Напр геометрия (потенциально большие данные) хранится только а файле данных. А вот напр цвет и там и сям. Что логично - какой-то исходный/дефаулт цвет объекта принимается из файла данных, но юзер всегда может его изменить в текущей сцене. Также юзер может перезаписать файл данных используя данные текущей сцены, добавив при этом новую геометрию или изменив текущую (напр сохранив деформированный объект).
И все работает, но вот беда - перезапись файла данных оказывается весьма неудобной для юзера. Да. перезаписал, но теперь надо выкидывать из сцены старый файл и подключать новый - при этом теряется куча установок. Поэтому настойчиво требуют "перезапись на месте", т.е. перезаписанный файл немедленно замещает текущий в сцене (ну откинув .back копию). Ну то что эта затея нездорова/сомнительна/подозрительна - и к бабке не ходи. Пример
- была ссылка на объект, ссылающийся помнит что контрольные точки в вертексах напр 1, 2 и 3. Теперь файл данных перезаписан, геометрия изменена и исходные вертексы уже 100, 200 и 300 (если вообще удалось их отследить). Что делать со "ссылающимся" - хз.
Прошу поделиться (богатым) опытом. Цыкнуть на юзера (мол, это кривой дизайн и все такое) не удается, он настойчиво хочет "на месте"
Спасибо
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Запутался с идеологией
«
Ответ #1 :
Февраль 13, 2017, 13:43 »
Придется отслеживать все изменения в файле данных до перезаписи и после.
Сохранять так, чтобы неизмененные вещи (вертексы 1,2,3) оставались такими же, как и раньше.
"Дохлые" ссылки удалять.
Записан
What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.
COVID не волк, в лес не уйдёт
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Запутался с идеологией
«
Ответ #2 :
Февраль 13, 2017, 13:56 »
Цитата: Racheengel от Февраль 13, 2017, 13:43
Сохранять так, чтобы неизмененные вещи (вертексы 1,2,3) оставались такими же, как и раньше.
Не представляю как это сделать. Кстати возможен и такой вариант
- ну допустим перезаписал "на месте", но что-то не устроило. Ну ладно, вышел из приложения, удалил новый файл данных и скопировал резервную копию. Выходит "ссылающийся" (записанный в файле сцены) должен работать корректно как с новым, так и со старым файлом данных. Возможно ли это?
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Запутался с идеологией
«
Ответ #3 :
Февраль 13, 2017, 15:02 »
Честно говоря, я не совсем понимаю, почему структура файлов вообще должна на что-то влиять.
Когда сцена загружена - все связи существуют в памяти, правильно?
И при сохранении должно обновиться ВСЕ. И сцена, и все файлы данных, и все настройки.
Если юзер попробует "подсунуть" левый файл в сцену - бить его по рукам ("Не та версия!").
Или же вообще сохранять все в большой зип. Так будет еще лучше с т.з. целостности данных.
Записан
What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.
COVID не волк, в лес не уйдёт
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Запутался с идеологией
«
Ответ #4 :
Февраль 13, 2017, 15:20 »
Цитата: Racheengel от Февраль 13, 2017, 15:02
Честно говоря, я не совсем понимаю, почему структура файлов вообще должна на что-то влиять.
Когда сцена загружена - все связи существуют в памяти, правильно?
И при сохранении должно обновиться ВСЕ. И сцена, и все файлы данных, и все настройки.
Если юзер попробует "подсунуть" левый файл в сцену - бить его по рукам ("Не та версия!").
Или же вообще сохранять все в большой зип. Так будет еще лучше с т.з. целостности данных.
Ах как мы любим "простые" (они же гениальные) решения!
Только вот все модели, текстуры и.т.п в сцене никто не хранит. Как и файлы .cpp и .h почему-то хранятся отдельно (а не в проекте следуя Вашей логике)
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Запутался с идеологией
«
Ответ #5 :
Февраль 13, 2017, 15:45 »
Цитата: Igors от Февраль 13, 2017, 15:20
Только вот все модели, текстуры и.т.п в сцене никто не хранит. Как и файлы .cpp и .h почему-то хранятся отдельно (а не в проекте следуя Вашей логике)
А кто запрещает сделать так, чтобы они хранились рядом со сценой?
Это наиболее логичное представление данных с т.з. их целостности.
Весь "пакован" имеет одну и ту же версию и все его части совместимы с другими.
И кстати, насчет раздельных .cpp и .h - если кто-то захочет инклудировать в cpp неподходящий h-файл, то получит 100500 ошибок компилятора. По моему, это и есть ответ на вопрос, что делать, если юзер подсунет "не ту" модель.
Записан
What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.
COVID не волк, в лес не уйдёт
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Запутался с идеологией
«
Ответ #6 :
Февраль 13, 2017, 16:38 »
Цитата: Racheengel от Февраль 13, 2017, 15:45
И кстати, насчет раздельных .cpp и .h - если кто-то захочет инклудировать в cpp неподходящий h-файл, то получит 100500 ошибок компилятора. По моему, это и есть ответ на вопрос, что делать, если юзер подсунет "не ту" модель.
А если файл (разумно) изменен в другом редакторе, он "подходящий" или как? И что делать с установками которые проект хранит для данного файла? (напр selection). Как минимум сбросить если файл менялся извне.
Ну и вообще - я же прекрасно понимаю что задача гнилая, чего агитировать большевика за революцию? Но отвертеться никак не удается. В общем, просьба подходить более конструктивно
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Запутался с идеологией
«
Ответ #7 :
Февраль 13, 2017, 19:33 »
Цитата: Igors от Февраль 13, 2017, 16:38
А если файл (разумно) изменен в другом редакторе, он "подходящий" или как? И что делать с установками которые проект хранит для данного файла? (напр selection). Как минимум сбросить если файл менялся извне.
А где сказано, что файл должен еще и "извне" меняться?
Это ведь совершенно другая задача тогда.
При изменении файла в этом случае необходимо инвалидировать все ссылки на него (либо по возможности проверять, по крайней мере, что изменилось). Если где-то что-то "битое" - выдавать красным цветом ошибку и стоп машина.
Записан
What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.
COVID не волк, в лес не уйдёт
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Запутался с идеологией
«
Ответ #8 :
Февраль 14, 2017, 16:17 »
Ну хорошо, с чего-то эту долбаную "перезапись на месте" надо начинать. Вот юзер указал "пересчитать модели и перезаписать" - мои действия? Сейчас я действую просто: беру объект за объектом, если это модель - пересчитал и что получилось записал в файл. Текущее содержимое сцены и уже загруженные модели не меняются, это как бы константная операция (сделать копию). Подходит ли это для "перезаписи на месте"?
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...