Russian Qt Forum
Ноябрь 25, 2024, 19:07 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Запутался с идеологией  (Прочитано 5745 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« : Февраль 13, 2017, 12:18 »

Добрый день

Есть файлы данных (.dat) и есть файл сцены (.scn). Оба формата могут содержать любое кол-во объектов. Юзер всегда работает с одним файлом сцены который может ссылаться на любое кол-во файлов данных. Разные данные одного и того же объекта хранятся по-разному. Напр геометрия (потенциально большие данные) хранится только а файле данных. А вот напр цвет и там и сям. Что логично - какой-то исходный/дефаулт цвет объекта принимается из файла данных, но юзер всегда может его изменить в текущей сцене. Также юзер может перезаписать файл данных используя данные текущей сцены, добавив при этом новую геометрию или изменив текущую (напр сохранив деформированный объект).

И все работает, но вот беда - перезапись файла данных оказывается весьма неудобной для юзера. Да. перезаписал, но теперь надо выкидывать из сцены старый файл и подключать новый - при этом теряется куча установок. Поэтому настойчиво требуют "перезапись на месте", т.е. перезаписанный файл немедленно замещает текущий в сцене (ну откинув .back копию). Ну то что эта затея нездорова/сомнительна/подозрительна - и к бабке не ходи. Пример

- была ссылка на объект, ссылающийся помнит что контрольные точки в вертексах напр 1, 2 и 3. Теперь файл данных перезаписан, геометрия изменена и исходные вертексы уже 100, 200 и 300 (если вообще удалось их отследить). Что делать со "ссылающимся" - хз.

Прошу поделиться (богатым) опытом. Цыкнуть на юзера (мол, это кривой дизайн и все такое) не удается, он настойчиво хочет "на месте"

Спасибо
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #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 Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Февраль 13, 2017, 13:56 »

Сохранять так, чтобы неизмененные вещи (вертексы 1,2,3) оставались такими же, как и раньше.
Не представляю как это сделать. Кстати возможен и такой вариант

- ну допустим перезаписал "на месте", но что-то не устроило. Ну ладно, вышел из приложения, удалил новый файл данных и скопировал резервную копию. Выходит "ссылающийся" (записанный в файле сцены) должен работать корректно как с новым, так и со старым файлом данных. Возможно ли это?
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #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 Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Февраль 13, 2017, 15:20 »

Честно говоря, я не совсем понимаю, почему структура файлов вообще должна на что-то влиять.
Когда сцена загружена - все связи существуют в памяти, правильно?
И при сохранении должно обновиться ВСЕ. И сцена, и все файлы данных, и все настройки.
Если юзер попробует "подсунуть" левый файл в сцену - бить его по рукам ("Не та версия!").
Или же вообще сохранять все в большой зип. Так будет еще лучше с т.з. целостности данных.
Ах как мы любим "простые" (они же гениальные) решения! Улыбающийся Только вот все модели, текстуры и.т.п в сцене никто не хранит. Как и файлы .cpp и .h почему-то хранятся отдельно (а не в проекте следуя Вашей логике)
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #5 : Февраль 13, 2017, 15:45 »

Только вот все модели, текстуры и.т.п в сцене никто не хранит. Как и файлы .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 Offline

Сообщений: 11445


Просмотр профиля
« Ответ #6 : Февраль 13, 2017, 16:38 »

И кстати, насчет раздельных .cpp и .h - если кто-то захочет инклудировать в cpp неподходящий h-файл, то получит 100500 ошибок компилятора. По моему, это и есть ответ на вопрос, что делать, если юзер подсунет "не ту" модель.
А если файл (разумно) изменен в другом редакторе, он "подходящий" или как? И что делать с установками которые проект хранит для данного файла? (напр selection). Как минимум сбросить если файл менялся извне.

Ну и вообще - я же прекрасно понимаю что задача гнилая, чего агитировать большевика за революцию? Но отвертеться никак не удается. В общем, просьба подходить более конструктивно
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #7 : Февраль 13, 2017, 19:33 »

А если файл (разумно) изменен в другом редакторе, он "подходящий" или как? И что делать с установками которые проект хранит для данного файла? (напр 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 Offline

Сообщений: 11445


Просмотр профиля
« Ответ #8 : Февраль 14, 2017, 16:17 »

Ну хорошо, с чего-то эту долбаную "перезапись на месте" надо начинать. Вот юзер указал "пересчитать модели и перезаписать" - мои действия? Сейчас я действую просто: беру объект за объектом, если это модель - пересчитал и что получилось записал в файл. Текущее содержимое сцены и уже загруженные модели не меняются, это как бы константная операция (сделать копию). Подходит ли это для "перезаписи на месте"?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.054 секунд. Запросов: 22.