Blender
V5.0
source
blender
io
common
intern
object_identifier.cc
Go to the documentation of this file.
1
/* SPDX-FileCopyrightText: 2019 Blender Authors
2
*
3
* SPDX-License-Identifier: GPL-2.0-or-later */
4
#include "
IO_abstract_hierarchy_iterator.h
"
5
6
#include "
BLI_assert.h
"
7
8
#include "
BKE_duplilist.hh
"
9
10
namespace
blender::io
{
11
12
ObjectIdentifier::ObjectIdentifier
(
Object
*
object
,
13
Object
*
duplicated_by
,
14
const
PersistentID
&
persistent_id
)
15
:
object
(
object
),
duplicated_by
(
duplicated_by
),
persistent_id
(
persistent_id
)
16
{
17
/* Class invariants:
18
* If duplicated_by is null, persistent_id must be default.
19
* If duplicated_by is not null, persistent_id must not be default. */
20
BLI_assert
(
duplicated_by
==
nullptr
?
persistent_id
==
PersistentID
() :
21
!(
persistent_id
==
PersistentID
()));
22
}
23
24
ObjectIdentifier
ObjectIdentifier::for_real_object
(
Object
*
object
)
25
{
26
return
ObjectIdentifier
(
object
,
nullptr
,
PersistentID
());
27
}
28
29
ObjectIdentifier
ObjectIdentifier::for_hierarchy_context
(
const
HierarchyContext
*context)
30
{
31
if
(context ==
nullptr
) {
32
return
for_graph_root
();
33
}
34
if
(context->duplicator !=
nullptr
) {
35
return
ObjectIdentifier
(context->object, context->duplicator, context->persistent_id);
36
}
37
return
for_real_object
(context->object);
38
}
39
40
ObjectIdentifier
ObjectIdentifier::for_duplicated_object
(
const
DupliObject
*dupli_object,
41
Object
*
duplicated_by
)
42
{
43
return
ObjectIdentifier
(dupli_object->
ob
,
duplicated_by
,
PersistentID
(dupli_object));
44
}
45
46
ObjectIdentifier
ObjectIdentifier::for_graph_root
()
47
{
48
return
ObjectIdentifier
(
nullptr
,
nullptr
,
PersistentID
());
49
}
50
51
bool
ObjectIdentifier::is_root
()
const
52
{
53
return
object
==
nullptr
;
54
}
55
56
bool
operator==
(
const
ObjectIdentifier
&obj_ident_a,
const
ObjectIdentifier
&obj_ident_b)
57
{
58
if
(obj_ident_a.
object
!= obj_ident_b.
object
) {
59
return
false
;
60
}
61
if
(obj_ident_a.
duplicated_by
!= obj_ident_b.
duplicated_by
) {
62
return
false
;
63
}
64
65
/* Return early if we know the expensive persistent_id check won't be necessary. */
66
if
(obj_ident_a.
duplicated_by
==
nullptr
) {
67
return
true
;
68
}
69
70
/* Same object, both are duplicated, use the persistent IDs to determine equality. */
71
return
obj_ident_a.
persistent_id
== obj_ident_b.
persistent_id
;
72
}
73
74
}
// namespace blender::io
BKE_duplilist.hh
BLI_assert.h
BLI_assert
#define BLI_assert(a)
Definition
BLI_assert.h:46
IO_abstract_hierarchy_iterator.h
blender::io::ObjectIdentifier
Definition
IO_abstract_hierarchy_iterator.h:195
blender::io::ObjectIdentifier::for_graph_root
static ObjectIdentifier for_graph_root()
Definition
object_identifier.cc:46
blender::io::ObjectIdentifier::for_duplicated_object
static ObjectIdentifier for_duplicated_object(const DupliObject *dupli_object, Object *duplicated_by)
Definition
object_identifier.cc:40
blender::io::ObjectIdentifier::persistent_id
PersistentID persistent_id
Definition
IO_abstract_hierarchy_iterator.h:199
blender::io::ObjectIdentifier::duplicated_by
Object * duplicated_by
Definition
IO_abstract_hierarchy_iterator.h:198
blender::io::ObjectIdentifier::is_root
bool is_root() const
Definition
object_identifier.cc:51
blender::io::ObjectIdentifier::for_real_object
static ObjectIdentifier for_real_object(Object *object)
Definition
object_identifier.cc:24
blender::io::ObjectIdentifier::for_hierarchy_context
static ObjectIdentifier for_hierarchy_context(const HierarchyContext *context)
Definition
object_identifier.cc:29
blender::io::ObjectIdentifier::object
Object * object
Definition
IO_abstract_hierarchy_iterator.h:197
blender::io::ObjectIdentifier::ObjectIdentifier
ObjectIdentifier(Object *object, Object *duplicated_by, const PersistentID &persistent_id)
Definition
object_identifier.cc:12
blender::io::PersistentID
Definition
IO_dupli_persistent_id.hh:15
blender::io
Definition
BKE_idprop.hh:29
blender::io::operator==
bool operator==(const PersistentID &persistent_id_a, const PersistentID &persistent_id_b)
Definition
dupli_persistent_id.cc:106
DupliObject
Definition
BKE_duplilist.hh:30
DupliObject::ob
Object * ob
Definition
BKE_duplilist.hh:32
Object
Definition
DNA_object_types.h:191
blender::io::HierarchyContext
Definition
IO_abstract_hierarchy_iterator.h:47
Generated on
for Blender by
doxygen
1.16.1