Blender V4.3
tree_element_modifier.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
10#include "DNA_modifier_types.h"
11#include "DNA_object_types.h"
12#include "DNA_outliner_types.h"
13
14#include "BLI_listbase.h"
15
16#include "BLT_translation.hh"
17
18#include "../outliner_intern.hh"
19
21
22namespace blender::ed::outliner {
23
25 : AbstractTreeElement(legacy_te), object_(object)
26{
27 legacy_te.name = IFACE_("Modifiers");
28}
29
30void TreeElementModifierBase::expand(SpaceOutliner & /*space_outliner*/) const
31{
32 int index;
33 LISTBASE_FOREACH_INDEX (ModifierData *, md, &object_.modifiers, index) {
34 ModifierDataStoreElem md_store(md);
35
36 add_element(&legacy_te_.subtree, &object_.id, &md_store, &legacy_te_, TSE_MODIFIER, index);
37 }
39 ModifierDataStoreElem md_store(md);
40
41 add_element(&legacy_te_.subtree, &object_.id, &md_store, &legacy_te_, TSE_MODIFIER, index);
42 }
43}
44
46 Object &object,
48 : AbstractTreeElement(legacy_te), object_(object), md_(md)
49{
50 if (md_.type == MODIFIER_TYPE) {
51 legacy_te.name = md_.md->name;
52 legacy_te.directdata = md_.md;
53 }
54 if (md_.type == GPENCIL_MODIFIER_TYPE) {
55 legacy_te.name = md_.gp_md->name;
56 legacy_te.directdata = md_.gp_md;
57 }
58}
59
60void TreeElementModifier::expand(SpaceOutliner & /*space_outliner*/) const
61{
62 if (md_.type == MODIFIER_TYPE) {
63 ModifierData *md = md_.md;
64 if (md->type == eModifierType_Lattice) {
66 reinterpret_cast<ID *>(((LatticeModifierData *)md)->object),
67 nullptr,
70 0);
71 }
72 else if (md->type == eModifierType_Curve) {
74 reinterpret_cast<ID *>(((CurveModifierData *)md)->object),
75 nullptr,
78 0);
79 }
80 else if (md->type == eModifierType_Armature) {
82 reinterpret_cast<ID *>(((ArmatureModifierData *)md)->object),
83 nullptr,
86 0);
87 }
88 else if (md->type == eModifierType_Hook) {
90 reinterpret_cast<ID *>(((HookModifierData *)md)->object),
91 nullptr,
94 0);
95 }
96 else if (md->type == eModifierType_Nodes) {
98 reinterpret_cast<ID *>(((NodesModifierData *)md)->node_group),
99 nullptr,
100 &legacy_te_,
102 0);
103 }
104 else if (md->type == eModifierType_ParticleSystem) {
105 ParticleSystem *psys = ((ParticleSystemModifierData *)md)->psys;
106
108 }
109 }
110 if (md_.type == GPENCIL_MODIFIER_TYPE) {
111 GpencilModifierData *md = md_.gp_md;
114 reinterpret_cast<ID *>(((ArmatureGpencilModifierData *)md)->object),
115 nullptr,
116 &legacy_te_,
118 0);
119 }
120 else if (md->type == eGpencilModifierType_Hook) {
122 reinterpret_cast<ID *>(((HookGpencilModifierData *)md)->object),
123 nullptr,
124 &legacy_te_,
126 0);
127 }
128 else if (md->type == eGpencilModifierType_Lattice) {
130 reinterpret_cast<ID *>(((LatticeGpencilModifierData *)md)->object),
131 nullptr,
132 &legacy_te_,
134 0);
135 }
136 }
137}
138
139} // namespace blender::ed::outliner
#define LISTBASE_FOREACH_INDEX(type, var, list, index_var)
#define IFACE_(msgid)
@ eGpencilModifierType_Lattice
@ eGpencilModifierType_Hook
@ eGpencilModifierType_Armature
@ eModifierType_ParticleSystem
@ eModifierType_Curve
@ eModifierType_Lattice
@ eModifierType_Hook
@ eModifierType_Armature
@ eModifierType_Nodes
Object is a sort of wrapper for general info.
@ TSE_LINKED_NODE_TREE
@ TSE_LINKED_PSYS
@ TSE_LINKED_OB
@ TSE_MODIFIER
TreeElement * add_element(ListBase *lb, ID *owner_id, void *create_data, TreeElement *parent, short type, short index, const bool expand=true) const
TreeElementModifierBase(TreeElement &legacy_te, Object &object)
void expand(SpaceOutliner &) const override
TreeElementModifier(TreeElement &legacy_te, Object &object, ModifierDataStoreElem &md)
void expand(SpaceOutliner &) const override
Definition DNA_ID.h:413
GpencilModifierData * gp_md
ModifierDataStoreType type
ListBase modifiers
ListBase greasepencil_modifiers
@ GPENCIL_MODIFIER_TYPE