2021SC@SDUSC
materialpreviewsgenerator.h定义了材质预览生成器类,它是QObject的公有继承子类。
#ifndef DUST3D_MATERIAL_PREVIEWS_GENERATOR_H
#define DUST3D_MATERIAL_PREVIEWS_GENERATOR_H
#include <QObject>
#include <map>
#include <QUuid>
#include <vector>
#include "model.h"
#include "materiallayer.h"
class MaterialPreviewsGenerator : public QObject
{
Q_OBJECT
public:
MaterialPreviewsGenerator();
~MaterialPreviewsGenerator();
void addMaterial(QUuid materialId, const std::vector<MaterialLayer> &layers);
const std::set<QUuid> &generatedPreviewMaterialIds();
Model *takePreview(QUuid materialId);
void generate();
signals:
void finished();
public slots:
void process();
private:
std::vector<std::pair<QUuid, std::vector<MaterialLayer>>> m_materials;
std::map<QUuid, Model *> m_previews;
std::set<QUuid> m_generatedMaterialIds;
};
#endif
在公有部分,可以看到MaterialPreviewGenerator类有添加材质、生成材质Id、生成预览等方法
。
在私有成员中,可以看到用于预览的材质vector容器m_materials,容器中值的类型是pair,一个pair对应一对QUuid和材质层。m_previews是map容器,用于存储进行预览的材质,其关键字是QUuid,值的类型是指向Model对象的指针。m_generatedMaterialIds是集合容器,存放生成的预览材质Id(QUuid)。
MaterialPreviewsGenerator的构造函数不进行额外的操作,析构函数负责做一些数据清理:
MaterialPreviewsGenerator::~MaterialPreviewsGenerator()
{
for (auto &item: m_previews) {
delete item.second;
}
}
遍历m_previews,删除每个map关键字对应的值。
void MaterialPreviewsGenerator::addMaterial(QUuid materialId, const std::vector<MaterialLayer> &layers)
{
m_materials.push_back({materialId, layers});
}
addMaterial()函数接收一个materialId和材质层layers,将他们组合成一个pair后追加到vector容器m_materials尾部。
const std::set<QUuid> &MaterialPreviewsGenerator::generatedPreviewMaterialIds()
{
return m_generatedMaterialIds;
}
generatedPreviewMaterialsIds()负责查询生成好的预览材质ID,是私有成员m_generatedMaterialIds的Get方法。
Model *MaterialPreviewsGenerator::takePreview(QUuid materialId)
{
Model *resultMesh = m_previews[materialId];
m_previews[materialId] = nullptr;
return resultMesh;
}
takePreview()的作用是取出对应ID的预览材质。将m_previews中关键字为materialId的值(Model指针)赋给指针resultMesh后返回,并且已经从map容器m_previews中取出的值置为空指针。
本文探讨了Dust3D中的MaterialPreviewsGenerator类,它作为QObject的继承,提供了添加材质、生成预览并管理预览模型的功能。核心内容包括材质管理、预览生成信号槽和私有数据结构的使用。

431

被折叠的 条评论
为什么被折叠?



