Listing the "Blender Foundation" as copyright holder implied the Blender Foundation holds copyright to files which may include work from many developers. While keeping copyright on headers makes sense for isolated libraries, Blender's own code may be refactored or moved between files in a way that makes the per file copyright holders less meaningful. Copyright references to the "Blender Foundation" have been replaced with "Blender Authors", with the exception of `./extern/` since these this contains libraries which are more isolated, any changed to license headers there can be handled on a case-by-case basis. Some directories in `./intern/` have also been excluded: - `./intern/cycles/` it's own `AUTHORS` file is planned. - `./intern/opensubdiv/`. An "AUTHORS" file has been added, using the chromium projects authors file as a template. Design task: #110784 Ref !110783.
51 lines
1.6 KiB
C++
51 lines
1.6 KiB
C++
/* SPDX-FileCopyrightText: 2020 Blender Authors
|
|
*
|
|
* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
#pragma once
|
|
|
|
#include "BKE_duplilist.h"
|
|
|
|
#include "DNA_object_types.h" /* For MAX_DUPLI_RECUR */
|
|
|
|
#include <array>
|
|
#include <optional>
|
|
#include <ostream>
|
|
|
|
namespace blender::io {
|
|
|
|
/* Wrapper for DupliObject::persistent_id that can act as a map key. */
|
|
class PersistentID {
|
|
protected:
|
|
constexpr static int array_length_ = MAX_DUPLI_RECUR;
|
|
typedef std::array<int, array_length_> PIDArray;
|
|
PIDArray persistent_id_;
|
|
|
|
explicit PersistentID(const PIDArray &persistent_id_values);
|
|
|
|
public:
|
|
PersistentID();
|
|
explicit PersistentID(const DupliObject *dupli_ob);
|
|
|
|
/* Return true if the persistent IDs are the same, ignoring the first digit. */
|
|
bool is_from_same_instancer_as(const PersistentID &other) const;
|
|
|
|
/* Construct the persistent ID of this instance's instancer. */
|
|
PersistentID instancer_pid() const;
|
|
|
|
/* Construct a string representation by reversing the persistent ID.
|
|
* In case of a duplicator that is duplicated itself as well, this
|
|
* results in strings like:
|
|
* "3" for the duplicated duplicator, and
|
|
* "3-0", "3-1", etc. for its duplis. */
|
|
std::string as_object_name_suffix() const;
|
|
|
|
friend bool operator==(const PersistentID &persistent_id_a, const PersistentID &persistent_id_b);
|
|
friend bool operator<(const PersistentID &persistent_id_a, const PersistentID &persistent_id_b);
|
|
friend std::ostream &operator<<(std::ostream &os, const PersistentID &persistent_id);
|
|
|
|
private:
|
|
void copy_values_from(const PIDArray &persistent_id_values);
|
|
};
|
|
|
|
} // namespace blender::io
|