Convert visual layers to scene nodes.

This commit is contained in:
James Grogan 2022-11-16 15:06:08 +00:00
parent 798cb365d7
commit 3e53bd9e00
64 changed files with 863 additions and 551 deletions

View file

@ -1,72 +1,42 @@
#include "Scene.h"
#include "VisualLayer.h"
#include "GeometryNode.h"
#include "RectangleNode.h"
#include "TextNode.h"
#include "RootNode.h"
#include "FontsManager.h"
#include "SceneItem.h"
#include "MeshBuilder.h"
#include "TriMesh.h"
#include "Image.h"
void Scene::syncLayers(const std::vector<VisualLayer*>& layers)
Scene::Scene()
: mRootNode(std::make_unique<RootNode>())
{
mLayers = layers;
}
void Scene::update(FontsManager* fontsManager, Image<unsigned char>* image)
void Scene::update(FontsManager* fontsManager)
{
if (image)
updateNode(mRootNode.get(), fontsManager);
}
void Scene::updateNode(AbstractVisualNode* node, FontsManager* fontsManager)
{
for (auto child : node->getChildren())
{
//
}
else
{
mWorkingMeshs.clear();
for(auto layer : mLayers)
{
if (layer->hasShapeNode())
{
auto node = layer->getShapeNode();
if (layer->getIsDirty())
{
node->update(fontsManager);
layer->setIsDirty(false);
}
mWorkingMeshs.push_back(dynamic_cast<TriMesh*>(node->getMesh()));
mTextures.push_back(nullptr);
}
else
{
auto node = dynamic_cast<TextNode*>(layer->getTextNode());
if (layer->getIsDirty())
{
node->update(fontsManager);
layer->setIsDirty(false);
}
mTextData.push_back(node->getTextData());
}
}
updateNode(child, fontsManager);
}
node->update(fontsManager);
mSceneItems.push_back(node->getSceneItem());
}
const std::vector<TextData>& Scene::getTextData() const
RootNode* Scene::getRootNode() const
{
return mTextData;
return mRootNode.get();
}
void Scene::processRectangleNode(RectangleNode* node)
unsigned Scene::getNumItems() const
{
return mSceneItems.size();
}
unsigned Scene::getNumMeshes() const
SceneItem* Scene::getItem(std::size_t idx) const
{
return mWorkingMeshs.size();
}
TriMesh* Scene::getMesh(std::size_t idx) const
{
return mWorkingMeshs[idx];
return mSceneItems[idx];
}