Outliner: Port particle system elements to new tree-element code design #110245

Merged
Julian Eisel merged 4 commits from :temp-particlesystem-refactor into main 2023-07-27 16:29:27 +02:00
7 changed files with 75 additions and 5 deletions

View File

@ -68,6 +68,7 @@ set(SRC
tree/tree_element_label.cc
tree/tree_element_nla.cc
tree/tree_element_overrides.cc
tree/tree_element_particle_system.cc
tree/tree_element_rna.cc
tree/tree_element_scene_objects.cc
tree/tree_element_seq.cc
@ -99,6 +100,7 @@ set(SRC
tree/tree_element_label.hh
tree/tree_element_nla.hh
tree/tree_element_overrides.hh
tree/tree_element_particle_system.hh
tree/tree_element_rna.hh
tree/tree_element_scene_objects.hh
tree/tree_element_seq.hh

View File

@ -296,6 +296,11 @@ struct EditBoneElementCreateData {
EditBone *ebone;
};
struct ParticleSystemElementCreateData {
Object *object;
ParticleSystem *psys;
};
TreeTraversalAction outliner_collect_selected_collections(TreeElement *te, void *customdata);
TreeTraversalAction outliner_collect_selected_objects(TreeElement *te, void *customdata);

View File

@ -245,6 +245,9 @@ TreeElement *outliner_add_element(SpaceOutliner *space_outliner,
else if (type == TSE_EBONE) {
id = static_cast<EditBoneElementCreateData *>(idv)->armature_id;
}
else if (type == TSE_LINKED_PSYS) {
id = &static_cast<ParticleSystemElementCreateData *>(idv)->object->id;
Almaz-Shinbay marked this conversation as resolved Outdated

Instead of the extra cast, you can do:
id = &static_cast<ParticleSystemElementCreateData *>(idv)->object->id;

Instead of the extra cast, you can do: `id = &static_cast<ParticleSystemElementCreateData *>(idv)->object->id;`
}
/* exceptions */
if (ELEM(type, TSE_ID_BASE, TSE_GENERIC_LABEL)) {
@ -303,6 +306,9 @@ TreeElement *outliner_add_element(SpaceOutliner *space_outliner,
else if (ELEM(type, TSE_BONE, TSE_EBONE)) {
/* pass */
}
else if (type == TSE_LINKED_PSYS) {
/* pass */
}
else if (type == TSE_SOME_ID) {
if (!te->abstract_element) {
BLI_assert_msg(0, "Expected this ID type to be ported to new Outliner tree-element design");
@ -341,6 +347,7 @@ TreeElement *outliner_add_element(SpaceOutliner *space_outliner,
TSE_BONE,
TSE_DRIVER_BASE,
TSE_EBONE,
TSE_LINKED_PSYS,
TSE_NLA,
TSE_NLA_ACTION,
TSE_NLA_TRACK,

View File

@ -27,6 +27,7 @@
#include "tree_element_label.hh"
#include "tree_element_nla.hh"
#include "tree_element_overrides.hh"
#include "tree_element_particle_system.hh"
#include "tree_element_rna.hh"
#include "tree_element_scene_objects.hh"
#include "tree_element_seq.hh"
@ -114,6 +115,12 @@ std::unique_ptr<AbstractTreeElement> AbstractTreeElement::createFromType(const i
return std::make_unique<TreeElementEditBone>(
legacy_te, *ebone_data->armature_id, *ebone_data->ebone);
}
case TSE_LINKED_PSYS: {
ParticleSystemElementCreateData *psys_data = static_cast<ParticleSystemElementCreateData *>(
idv);
return std::make_unique<TreeElementParticleSystem>(
legacy_te, *psys_data->object, *psys_data->psys);
}
default:
break;
}

View File

@ -202,12 +202,11 @@ void TreeElementIDObject::expand_modifiers(SpaceOutliner &space_outliner) const
}
else if (md->type == eModifierType_ParticleSystem) {
ParticleSystem *psys = ((ParticleSystemModifierData *)md)->psys;
TreeElement *ten_psys;
ten_psys = outliner_add_element(
&space_outliner, &ten->subtree, &object_, &legacy_te_, TSE_LINKED_PSYS, 0);
ten_psys->directdata = psys;
ten_psys->name = psys->part->id.name + 2;
ParticleSystemElementCreateData psys_data = {&object_, psys};
outliner_add_element(
&space_outliner, &ten->subtree, &psys_data, &legacy_te_, TSE_LINKED_PSYS, 0);
}
}
}

View File

@ -0,0 +1,26 @@
/* SPDX-FileCopyrightText: 2023 Blender Foundation
*
* SPDX-License-Identifier: GPL-2.0-or-later */
/** \file
* \ingroup spoutliner
*/
#include "DNA_particle_types.h"
#include "../outliner_intern.hh"
#include "tree_element_particle_system.hh"
namespace blender::ed::outliner {
TreeElementParticleSystem::TreeElementParticleSystem(TreeElement &legacy_te,
Object & /* object */,
ParticleSystem &psys)
: AbstractTreeElement(legacy_te), /* object_(object), */ psys_(psys)
{
legacy_te.directdata = &psys_;
legacy_te.name = psys_.part->id.name + 2;
}
} // namespace blender::ed::outliner

View File

@ -0,0 +1,24 @@
/* SPDX-FileCopyrightText: 2023 Blender Foundation
*
* SPDX-License-Identifier: GPL-2.0-or-later */
/** \file
* \ingroup spoutliner
*/
#pragma once
#include "tree_element.hh"
namespace blender::ed::outliner {
class TreeElementParticleSystem final : public AbstractTreeElement {
/* Not needed right now, avoid unused member variable warning. */
// Object &object_;
ParticleSystem &psys_;
public:
TreeElementParticleSystem(TreeElement &legacy_te, Object &object, ParticleSystem &psys);
};
} // namespace blender::ed::outliner