Russian Qt Forum
Август 18, 2017, 21:15 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Расширение данных  (Прочитано 1152 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 9730


Просмотр профиля
« Ответ #15 : Август 10, 2017, 11:45 »

А это называется "контрактом" между тем, кто спрашивает (он то знает, что ему надо) и тем, кого спрашивают. Обе стороны должны понимать, что это такое:
Так и предлагается обсудить условия этого "контракта".
const QByteArray MATERIAL_ID2 = "Material2";

(например)
Создаваемый юзером нод "материал" конечно имеет имя, но оно не уникально. Ну и по-прежнему "не въехали" - какое же const если их число переменное? 

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

Сообщений: 2392

чтоб работа волком не казалась :)


Просмотр профиля WWW
« Ответ #16 : Август 10, 2017, 16:05 »

- Старый код придется переписать, т.к. он стал неоднозначным. Понимаю, что кода много, но иначе практически никак.
- Убрать все численные константы, т.к. все стало динамическим - в них больше нет смысла.
- Заменить их на строковые ID (QByteArray) - а тут уже полная свобода, материалы и параметры могут называться как душе угодно. Главное, чтобы соблюдался контракт между двумя сторонами (GetParameter("MaterialX/color") - должен быть распознан получателем как "цвет материала X, если такой имеется)
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

http://sintegrial.com - всякий хороший Qt софт (был Грустный )
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 9730


Просмотр профиля
« Ответ #17 : Август 11, 2017, 07:11 »

- Старый код придется переписать, т.к. он стал неоднозначным. Понимаю, что кода много, но иначе практически никак.
Вопрос "переписывать или нет" вообще не стоит. Нужно чтобы переписанное хорошо "легло" и потом не пришлось месяцами ловить новые баги

- Убрать все численные константы, т.к. все стало динамическим - в них больше нет смысла.
- Заменить их на строковые ID (QByteArray)
"Все" не убрать, материал - лишь один из многих нодов дерева. И откуда упорное стремление к строкам? Здесь не вижу ни одной выгоды от них

а тут уже полная свобода, материалы и параметры могут называться как душе угодно. Главное, чтобы соблюдался контракт между двумя сторонами (GetParameter("MaterialX/color") - должен быть распознан получателем как "цвет материала X, если такой имеется)
Уже говорили что имена есть но не уникальны. И не раз говорили типа "откуда возьмется "MaterialX", т.е. кто и где будет хранить этот (в общем случае) ключ. Топчемся на месте
Записан
Bepec
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 7467


W7 x64, Qt SDK 4.7.2, Руки v1.5


Просмотр профиля
« Ответ #18 : Август 11, 2017, 16:06 »

to Racheengel:
Это же Igors. Ему ответы уже всевозможные дали, но он будет зудеть до последнего, просто выводя из себя людей Веселый Темы поднимает неплохие, но вот окончательное решение у него одно - "всё уже есть, всё уже сказали, скажите чё-нить новое, чтоб решило проблему сразу".
Записан

"Мастер простых решений" Ɋt

чОрный список: Spark
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2392

чтоб работа волком не казалась :)


Просмотр профиля WWW
« Ответ #19 : Август 11, 2017, 16:54 »

И откуда упорное стремление к строкам? Здесь не вижу ни одной выгоды от них

Однозначность ключей, убирается ограничение на численные константы. Лучше юзать строчку "MaterialX", чем const MATERIAL_X_ID = 12345; - это "12345" еще где-то надо определить, причем следить, чтоб никто больше нигде не переопределил его...

Цитировать
И не раз говорили типа "откуда возьмется "MaterialX", т.е. кто и где будет хранить этот (в общем случае) ключ. Топчемся на месте

Тут вообще не понял проблемы. "Хранить" значение будет тот, кто предоставляет материалы. А зачем хранить ключи?
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

http://sintegrial.com - всякий хороший Qt софт (был Грустный )
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 9730


Просмотр профиля
« Ответ #20 : Август 12, 2017, 06:57 »

Тут вообще не понял проблемы. "Хранить" значение будет тот, кто предоставляет материалы. А зачем хранить ключи?
По указанию юзера создается новый нод "материал", он добавляется в дерево параметров объекта. Потом возможно еще нод "материал", и еще, а может и наоборот какой-то нод удалят. Сейчас объект просто обращается к ноду по константе, но c переменным числом таких нодов это уже не катит. Псевдокод
Код
C++ (Qt)
double value = GetParamValue(DIFFUSE_ID, currentTime);  // было
 
double value = GetMaterialValue(???, ???, currentTime);  // надо
 
Предложите реализацию GetMaterialValue. Разумеется объект знает к какому конкретно ноду "материал" он сейчас обращается, напр его индекс. Но нужна-то диффуза которая один из чайлд нодов данного материала,  закопана там глубоко
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2392

чтоб работа волком не казалась :)


Просмотр профиля WWW
« Ответ #21 : Август 17, 2017, 13:00 »

Ну, если совсем грубо:

QMap<QByteArray, QVariant> MaterialParams;
QMap<QByteArray, MaterialParams> Materials;
Materials m_objectMaterials;

QVariant GetMaterialValue(QByteArray materialId, QByteArray paramId)
{
return objectMaterials[materialId][paramId];
}
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

http://sintegrial.com - всякий хороший Qt софт (был Грустный )
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 9730


Просмотр профиля
« Ответ #22 : Август 17, 2017, 13:53 »

Ну, если совсем грубо:

QMap<QByteArray, QVariant> MaterialParams;
QMap<QByteArray, MaterialParams> Materials;
Materials m_objectMaterials;

QVariant GetMaterialValue(QByteArray materialId, QByteArray paramId)
{
return objectMaterials[materialId][paramId];
}
А чего Вы это замазываете суть (Q)вариантом? Создаваемые материалы должны помещаться в имеющееся дерево, этого никто не отменял.

[off]Эти подачи и возвраты по значению напоминают мне опустившегося человека - не бреется, ходит в рваных вонючих носках, бухает, жрет дуст...[/off]
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2443


Просмотр профиля
« Ответ #23 : Август 17, 2017, 16:28 »

[off]... не бреется, ходит в рваных вонючих носках, бухает, жрет boost...[/off]
Записан
Bepec
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 7467


W7 x64, Qt SDK 4.7.2, Руки v1.5


Просмотр профиля
« Ответ #24 : Август 17, 2017, 16:57 »

каноничное завершение темы Igors Веселый
Записан

"Мастер простых решений" Ɋt

чОрный список: Spark
kai666_73
Частый гость
***
Offline Offline

Сообщений: 295


Просмотр профиля
« Ответ #25 : Август 17, 2017, 22:10 »

[off]Эти подачи и возвраты по значению напоминают мне опустившегося человека - не бреется, ходит в рваных вонючих носках, бухает, жрет дуст...[/off]
Типичный, конченный программер  Веселый
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  

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