Blender
V4.3
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 "
BKE_duplilist.hh
"
7
8
namespace
blender::io
{
9
10
ObjectIdentifier::ObjectIdentifier
(
Object
*
object
,
11
Object
*duplicated_by,
12
const
PersistentID
&persistent_id)
13
: object(object), duplicated_by(duplicated_by), persistent_id(persistent_id)
14
{
15
}
16
17
ObjectIdentifier
ObjectIdentifier::for_real_object
(
Object
*
object
)
18
{
19
return
ObjectIdentifier
(
object
,
nullptr
,
PersistentID
());
20
}
21
22
ObjectIdentifier
ObjectIdentifier::for_hierarchy_context
(
const
HierarchyContext
*context)
23
{
24
if
(context ==
nullptr
) {
25
return
for_graph_root
();
26
}
27
if
(context->duplicator !=
nullptr
) {
28
return
ObjectIdentifier
(context->object, context->duplicator, context->persistent_id);
29
}
30
return
for_real_object
(context->object);
31
}
32
33
ObjectIdentifier
ObjectIdentifier::for_duplicated_object
(
const
DupliObject
*dupli_object,
34
Object
*duplicated_by)
35
{
36
return
ObjectIdentifier
(dupli_object->
ob
,
duplicated_by
,
PersistentID
(dupli_object));
37
}
38
39
ObjectIdentifier
ObjectIdentifier::for_graph_root
()
40
{
41
return
ObjectIdentifier
(
nullptr
,
nullptr
,
PersistentID
());
42
}
43
44
bool
ObjectIdentifier::is_root
()
const
45
{
46
return
object
==
nullptr
;
47
}
48
49
bool
operator<
(
const
ObjectIdentifier
&obj_ident_a,
const
ObjectIdentifier
&obj_ident_b)
50
{
51
if
(obj_ident_a.
object
!= obj_ident_b.
object
) {
52
return
obj_ident_a.
object
< obj_ident_b.
object
;
53
}
54
55
if
(obj_ident_a.
duplicated_by
!= obj_ident_b.
duplicated_by
) {
56
return
obj_ident_a.
duplicated_by
< obj_ident_b.
duplicated_by
;
57
}
58
59
if
(obj_ident_a.
duplicated_by
==
nullptr
) {
60
/* Both are real objects, no need to check the persistent ID. */
61
return
false
;
62
}
63
64
/* Same object, both are duplicated, use the persistent IDs to determine order. */
65
return
obj_ident_a.
persistent_id
< obj_ident_b.
persistent_id
;
66
}
67
68
bool
operator==
(
const
ObjectIdentifier
&obj_ident_a,
const
ObjectIdentifier
&obj_ident_b)
69
{
70
if
(obj_ident_a.
object
!= obj_ident_b.
object
) {
71
return
false
;
72
}
73
if
(obj_ident_a.
duplicated_by
!= obj_ident_b.
duplicated_by
) {
74
return
false
;
75
}
76
if
(obj_ident_a.
duplicated_by
==
nullptr
) {
77
return
true
;
78
}
79
80
/* Same object, both are duplicated, use the persistent IDs to determine equality. */
81
return
obj_ident_a.
persistent_id
== obj_ident_b.
persistent_id
;
82
}
83
84
}
// namespace blender::io
BKE_duplilist.hh
IO_abstract_hierarchy_iterator.h
blender::io::ObjectIdentifier
Definition
IO_abstract_hierarchy_iterator.h:164
blender::io::ObjectIdentifier::for_graph_root
static ObjectIdentifier for_graph_root()
Definition
object_identifier.cc:39
blender::io::ObjectIdentifier::for_duplicated_object
static ObjectIdentifier for_duplicated_object(const DupliObject *dupli_object, Object *duplicated_by)
Definition
object_identifier.cc:33
blender::io::ObjectIdentifier::persistent_id
PersistentID persistent_id
Definition
IO_abstract_hierarchy_iterator.h:168
blender::io::ObjectIdentifier::duplicated_by
Object * duplicated_by
Definition
IO_abstract_hierarchy_iterator.h:167
blender::io::ObjectIdentifier::is_root
bool is_root() const
Definition
object_identifier.cc:44
blender::io::ObjectIdentifier::for_real_object
static ObjectIdentifier for_real_object(Object *object)
Definition
object_identifier.cc:17
blender::io::ObjectIdentifier::for_hierarchy_context
static ObjectIdentifier for_hierarchy_context(const HierarchyContext *context)
Definition
object_identifier.cc:22
blender::io::ObjectIdentifier::object
Object * object
Definition
IO_abstract_hierarchy_iterator.h:166
blender::io::ObjectIdentifier::ObjectIdentifier
ObjectIdentifier(Object *object, Object *duplicated_by, const PersistentID &persistent_id)
Definition
object_identifier.cc:10
blender::io::PersistentID
Definition
IO_dupli_persistent_id.hh:17
blender::io
Definition
BKE_idprop.hh:27
blender::io::operator<
bool operator<(const PersistentID &persistent_id_a, const PersistentID &persistent_id_b)
Definition
dupli_persistent_id.cc:95
blender::io::operator==
bool operator==(const PersistentID &persistent_id_a, const PersistentID &persistent_id_b)
Definition
dupli_persistent_id.cc:116
DupliObject
Definition
BKE_duplilist.hh:39
DupliObject::ob
Object * ob
Definition
BKE_duplilist.hh:42
Object
Definition
DNA_object_types.h:193
blender::io::HierarchyContext
Definition
IO_abstract_hierarchy_iterator.h:45
Generated on Thu Feb 6 2025 07:36:39 for Blender by
doxygen
1.11.0