Название: Запутался с идеологией Отправлено: Igors от Февраль 13, 2017, 12:18 Добрый день
Есть файлы данных (.dat) и есть файл сцены (.scn). Оба формата могут содержать любое кол-во объектов. Юзер всегда работает с одним файлом сцены который может ссылаться на любое кол-во файлов данных. Разные данные одного и того же объекта хранятся по-разному. Напр геометрия (потенциально большие данные) хранится только а файле данных. А вот напр цвет и там и сям. Что логично - какой-то исходный/дефаулт цвет объекта принимается из файла данных, но юзер всегда может его изменить в текущей сцене. Также юзер может перезаписать файл данных используя данные текущей сцены, добавив при этом новую геометрию или изменив текущую (напр сохранив деформированный объект). И все работает, но вот беда - перезапись файла данных оказывается весьма неудобной для юзера. Да. перезаписал, но теперь надо выкидывать из сцены старый файл и подключать новый - при этом теряется куча установок. Поэтому настойчиво требуют "перезапись на месте", т.е. перезаписанный файл немедленно замещает текущий в сцене (ну откинув .back копию). Ну то что эта затея нездорова/сомнительна/подозрительна - и к бабке не ходи. Пример - была ссылка на объект, ссылающийся помнит что контрольные точки в вертексах напр 1, 2 и 3. Теперь файл данных перезаписан, геометрия изменена и исходные вертексы уже 100, 200 и 300 (если вообще удалось их отследить). Что делать со "ссылающимся" - хз. Прошу поделиться (богатым) опытом. Цыкнуть на юзера (мол, это кривой дизайн и все такое) не удается, он настойчиво хочет "на месте" Спасибо Название: Re: Запутался с идеологией Отправлено: Racheengel от Февраль 13, 2017, 13:43 Придется отслеживать все изменения в файле данных до перезаписи и после.
Сохранять так, чтобы неизмененные вещи (вертексы 1,2,3) оставались такими же, как и раньше. "Дохлые" ссылки удалять. Название: Re: Запутался с идеологией Отправлено: Igors от Февраль 13, 2017, 13:56 Сохранять так, чтобы неизмененные вещи (вертексы 1,2,3) оставались такими же, как и раньше. Не представляю как это сделать. Кстати возможен и такой вариант- ну допустим перезаписал "на месте", но что-то не устроило. Ну ладно, вышел из приложения, удалил новый файл данных и скопировал резервную копию. Выходит "ссылающийся" (записанный в файле сцены) должен работать корректно как с новым, так и со старым файлом данных. Возможно ли это? Название: Re: Запутался с идеологией Отправлено: Racheengel от Февраль 13, 2017, 15:02 Честно говоря, я не совсем понимаю, почему структура файлов вообще должна на что-то влиять.
Когда сцена загружена - все связи существуют в памяти, правильно? И при сохранении должно обновиться ВСЕ. И сцена, и все файлы данных, и все настройки. Если юзер попробует "подсунуть" левый файл в сцену - бить его по рукам ("Не та версия!"). Или же вообще сохранять все в большой зип. Так будет еще лучше с т.з. целостности данных. Название: Re: Запутался с идеологией Отправлено: Igors от Февраль 13, 2017, 15:20 Честно говоря, я не совсем понимаю, почему структура файлов вообще должна на что-то влиять. Ах как мы любим "простые" (они же гениальные) решения! :) Только вот все модели, текстуры и.т.п в сцене никто не хранит. Как и файлы .cpp и .h почему-то хранятся отдельно (а не в проекте следуя Вашей логике)Когда сцена загружена - все связи существуют в памяти, правильно? И при сохранении должно обновиться ВСЕ. И сцена, и все файлы данных, и все настройки. Если юзер попробует "подсунуть" левый файл в сцену - бить его по рукам ("Не та версия!"). Или же вообще сохранять все в большой зип. Так будет еще лучше с т.з. целостности данных. Название: Re: Запутался с идеологией Отправлено: Racheengel от Февраль 13, 2017, 15:45 Только вот все модели, текстуры и.т.п в сцене никто не хранит. Как и файлы .cpp и .h почему-то хранятся отдельно (а не в проекте следуя Вашей логике) А кто запрещает сделать так, чтобы они хранились рядом со сценой? :) Это наиболее логичное представление данных с т.з. их целостности. Весь "пакован" имеет одну и ту же версию и все его части совместимы с другими. И кстати, насчет раздельных .cpp и .h - если кто-то захочет инклудировать в cpp неподходящий h-файл, то получит 100500 ошибок компилятора. По моему, это и есть ответ на вопрос, что делать, если юзер подсунет "не ту" модель. Название: Re: Запутался с идеологией Отправлено: Igors от Февраль 13, 2017, 16:38 И кстати, насчет раздельных .cpp и .h - если кто-то захочет инклудировать в cpp неподходящий h-файл, то получит 100500 ошибок компилятора. По моему, это и есть ответ на вопрос, что делать, если юзер подсунет "не ту" модель. А если файл (разумно) изменен в другом редакторе, он "подходящий" или как? И что делать с установками которые проект хранит для данного файла? (напр selection). Как минимум сбросить если файл менялся извне.Ну и вообще - я же прекрасно понимаю что задача гнилая, чего агитировать большевика за революцию? Но отвертеться никак не удается. В общем, просьба подходить более конструктивно Название: Re: Запутался с идеологией Отправлено: Racheengel от Февраль 13, 2017, 19:33 А если файл (разумно) изменен в другом редакторе, он "подходящий" или как? И что делать с установками которые проект хранит для данного файла? (напр selection). Как минимум сбросить если файл менялся извне. А где сказано, что файл должен еще и "извне" меняться? Это ведь совершенно другая задача тогда. При изменении файла в этом случае необходимо инвалидировать все ссылки на него (либо по возможности проверять, по крайней мере, что изменилось). Если где-то что-то "битое" - выдавать красным цветом ошибку и стоп машина. Название: Re: Запутался с идеологией Отправлено: Igors от Февраль 14, 2017, 16:17 Ну хорошо, с чего-то эту долбаную "перезапись на месте" надо начинать. Вот юзер указал "пересчитать модели и перезаписать" - мои действия? Сейчас я действую просто: беру объект за объектом, если это модель - пересчитал и что получилось записал в файл. Текущее содержимое сцены и уже загруженные модели не меняются, это как бы константная операция (сделать копию). Подходит ли это для "перезаписи на месте"?
|