C++ (Qt)struct Shape {};struct Color {};struct Position {}; struct Style{ Shape shape; Color color;}; struct VObject{ Style* style; Position position;};
C++ (Qt)// "Реальный" объект который юзер может добавить/удалить в сцену.// Имеет UI, рисуется в окнах, предъявляется в списке объектовstruct CSceneGeomObject { Transform m_transform; // набор матриц (позиция, поворот в сцене и.т.п) Geometry m_geom; // вертексы, фейсы и др (что рисовать) Material m_material; // цвет, текстуры и др (как выглядит) ..... // очень много всякого другого}; // "Виртуальный" объект = ссылка на реальный + что меняем// "диффы" як каже молодьstruct CVObject { CSceneGeomObject * m_reference; // может лучше уникальный id? (имеется) Matrix m_globalMatrix; // ну наверно размещать ВО в сцене надо всегда ..... // а тут хз, вариантов что менять может быть много};
C++ (Qt)// "Виртуальный" объект = ссылка на реальный + что меняемstruct CVObject { TUniqueID m_reference; // id "реального" объекта Matrix m_globalMatrix; // размещать ВО в сцене надо всегда ..... // и.т.д QScopedPointer<Material> m_material; // напр возможно ВО имеет свой материал ...};
class CEmitter { ... QVector<QSharedPointer<CVObject>> mVO; ...};
C++ (Qt)void CEmitter::ExportVO( QMap<TUniqueID, QVector<QWeakPointer<CVObject>>> & mapVO );
void MyWindow::DrawGeometry( const QVector<CSceneGeomObject *> & objects ){// собираем виртуальные объекты m_mapVO.clear(); for (auto obj : objects) { CEmitter * emitter = obj->GetEmitter(); if (emitter) emitter->ExportVO(m_mapVO); }// рисуем for (auto obj : objects) this->Draw1Object(obj);}