From 9c78ba52816b854f1e4999248bc664aba9ccc523 Mon Sep 17 00:00:00 2001 From: peri4 Date: Sun, 2 Jul 2023 14:10:23 +0300 Subject: [PATCH] ObjectBase materials for custom preset --- src/core/scene/globject.cpp | 27 ++++++++++++++++++++++++++- src/core/scene/globject.h | 4 ++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/core/scene/globject.cpp b/src/core/scene/globject.cpp index 1be328b..66ed526 100644 --- a/src/core/scene/globject.cpp +++ b/src/core/scene/globject.cpp @@ -521,6 +521,14 @@ void ObjectBase::setPreset(int preset) { } +QVector ObjectBase::availablePresets() const { + QVector ret; + for (int i = 0; i < presets.size(); ++i) + ret << i; + return ret; +} + + void ObjectBase::setMatrix(const QMatrix4x4 & t) { // raw_matrix = true; // mat_ = t; @@ -636,13 +644,30 @@ ObjectBase * ObjectBase::selectedParent() const { void ObjectBase::setMaterial(Material * m, bool with_children) { currentPreset().material = m; if (with_children) - foreach(ObjectBase * i, children_) + for (auto * i: children_) i->setMaterial(m, true); setObjectsChanged(); if (scene_) scene_->mat_changed = scene_->tree_changed = true; } +void ObjectBase::setMaterialForPreset(Material * m, int p, bool with_children) { + if (p < 0 || p >= presets.size()) return; + presets[p].material = m; + if (with_children) + for (auto * i: children_) + i->setMaterialForPreset(m, p, true); + setObjectsChanged(); + if (scene_) scene_->mat_changed = scene_->tree_changed = true; +} + + +Material * ObjectBase::materialForPreset(int p) { + if (p < 0 || p >= presets.size()) return nullptr; + return presets[p].material; +} + + void ObjectBase::setColor(QColor c, bool with_children) { color_ = c; if (with_children) diff --git a/src/core/scene/globject.h b/src/core/scene/globject.h index 9cd6ed6..096dc43 100644 --- a/src/core/scene/globject.h +++ b/src/core/scene/globject.h @@ -179,7 +179,9 @@ public: void setDestAlpha(GLenum mode) { blend_dest = mode; } void setMaterial(Material * m, bool with_children = false); + void setMaterialForPreset(Material * m, int p, bool with_children = false); Material * material() { return currentPreset().material; } + Material * materialForPreset(int p); void setColor(QColor c, bool with_children = false); QColor color() { return color_; } @@ -198,6 +200,8 @@ public: void setPreset(int preset); + QVector availablePresets() const; + QVector3D pos_h; protected: