OrcaSlicer latest
OrcaSlicer
Loading...
Searching...
No Matches
Slic3r::PluginResourceTextures Class Reference

#include </home/runner/work/OrcaSlicer/OrcaSlicer/src/slic3r/plugin/host/PluginResourceTextures.hpp>

Collaboration diagram for Slic3r::PluginResourceTextures:

Public Member Functions

 PluginResourceTextures (const PluginResourceTextures &)=delete
PluginResourceTextures & operator= (const PluginResourceTextures &)=delete
void on_plugin_register (const std::string &plugin_key)
void on_plugin_deregister (const std::string &plugin_key)
void on_cap_register (const PluginCapabilityId &id)
void on_cap_deregister (const PluginCapabilityId &id)
void initial_sweep ()
std::vector< ResourceTextureEntry > entries () const

Static Public Member Functions

static PluginResourceTextures & instance ()

Private Member Functions

 PluginResourceTextures ()=default
std::optional< ResourceTextureEntry > build_entry (const PluginCapabilityId &id) const

Private Attributes

std::mutex m_mutex
std::map< PluginCapabilityId, ResourceTextureEntry > m_entries

Detailed Description

Constructor & Destructor Documentation

◆ PluginResourceTextures() [1/2]

Slic3r::PluginResourceTextures::PluginResourceTextures ( const PluginResourceTextures & )
delete

References PluginResourceTextures().

Referenced by PluginResourceTextures(), instance(), and operator=().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ PluginResourceTextures() [2/2]

Slic3r::PluginResourceTextures::PluginResourceTextures ( )
privatedefault

Member Function Documentation

◆ build_entry()

std::optional< ResourceTextureEntry > Slic3r::PluginResourceTextures::build_entry ( const PluginCapabilityId & id) const
private
25{
26 // Query by id and re-check state; the manager copies the shared_ptr and releases its lock.
27 auto capability = PluginManager::instance().get_plugin_capability(id, /*only_enabled=*/false);
28 if (!capability || !capability->is_enabled() || capability->type() != PluginCapabilityType::ResourceTexture)
29 return std::nullopt;
30
31 auto texture_capability = std::dynamic_pointer_cast<ResourceTexturePluginCapability>(capability);
32 if (!texture_capability)
33 return std::nullopt;
34
35 // An empty directory means resolution failed at load, so the pack contributes nothing.
36 const std::string &texture_dir = texture_capability->texture_dir();
37 if (texture_dir.empty())
38 return std::nullopt;
39
40 PluginDescriptor descriptor;
41 if (!PluginManager::instance().try_get_plugin_descriptor_for_capability(capability->name(),
43 descriptor))
44 return std::nullopt;
45
46 ResourceTextureEntry entry;
47 entry.id = capability->identity();
48 entry.plugin_key = entry.id.plugin_key;
49 entry.display_name = capability->name();
50 entry.texture_dir = texture_dir;
51 entry.plugin_root = descriptor.plugin_root;
52 return entry;
53}
static PluginManager & instance()
Definition PluginManager.cpp:74
std::shared_ptr< PluginCapabilityInterface > get_plugin_capability(const PluginCapabilityId &id, bool only_enabled=true) const
Definition PluginManager.cpp:616
@ ResourceTexture
Definition PythonPluginInterface.hpp:17

References Slic3r::ResourceTextureEntry::display_name, Slic3r::PluginManager::get_plugin_capability(), Slic3r::ResourceTextureEntry::id, Slic3r::PluginManager::instance(), Slic3r::PluginCapabilityId::plugin_key, Slic3r::ResourceTextureEntry::plugin_key, Slic3r::PluginDescriptor::plugin_root, Slic3r::ResourceTextureEntry::plugin_root, Slic3r::ResourceTexture, and Slic3r::ResourceTextureEntry::texture_dir.

Referenced by initial_sweep(), and on_cap_register().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ entries()

std::vector< ResourceTextureEntry > Slic3r::PluginResourceTextures::entries ( ) const
105{
106 std::lock_guard<std::mutex> lock(m_mutex);
107
108 std::vector<ResourceTextureEntry> result;
109 result.reserve(m_entries.size());
110 for (const auto &entry : m_entries)
111 result.push_back(entry.second);
112 return result;
113}
std::mutex m_mutex
Definition PluginResourceTextures.hpp:46
std::map< PluginCapabilityId, ResourceTextureEntry > m_entries
Definition PluginResourceTextures.hpp:47
@ lock
Definition GLGizmoEmboss.cpp:209

References m_entries, and m_mutex.

Referenced by initial_sweep().

Here is the caller graph for this function:

◆ initial_sweep()

void Slic3r::PluginResourceTextures::initial_sweep ( )
90{
91 std::map<PluginCapabilityId, ResourceTextureEntry> entries;
92 for (const auto &capability : PluginManager::instance().get_plugin_capabilities("", PluginCapabilityType::ResourceTexture)) {
93 if (!capability)
94 continue;
95 std::optional<ResourceTextureEntry> entry = build_entry(capability->identity());
96 if (entry)
97 entries[entry->id] = std::move(*entry);
98 }
99
100 std::lock_guard<std::mutex> lock(m_mutex);
101 m_entries = std::move(entries);
102}
std::vector< ResourceTextureEntry > entries() const
Definition PluginResourceTextures.cpp:104
std::optional< ResourceTextureEntry > build_entry(const PluginCapabilityId &id) const
Definition PluginResourceTextures.cpp:24

References build_entry(), entries(), Slic3r::PluginManager::instance(), m_entries, m_mutex, and Slic3r::ResourceTexture.

Here is the call graph for this function:

◆ instance()

PluginResourceTextures & Slic3r::PluginResourceTextures::instance ( )
static
19{
20 static PluginResourceTextures registry;
21 return registry;
22}
PluginResourceTextures(const PluginResourceTextures &)=delete

References PluginResourceTextures().

Referenced by Slic3r::GUI::GUI_App::init_plugin_gui_wiring(), and Slic3r::GUI::anonymous_namespace{TextureLibrary.cpp}::scan_plugin_textures().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ on_cap_deregister()

void Slic3r::PluginResourceTextures::on_cap_deregister ( const PluginCapabilityId & id)
84{
85 std::lock_guard<std::mutex> lock(m_mutex);
86 m_entries.erase(id);
87}

References m_entries, and m_mutex.

◆ on_cap_register()

void Slic3r::PluginResourceTextures::on_cap_register ( const PluginCapabilityId & id)
75{
76 std::optional<ResourceTextureEntry> entry = build_entry(id);
77
78 std::lock_guard<std::mutex> lock(m_mutex);
79 if (entry)
80 m_entries[entry->id] = std::move(*entry);
81}

References build_entry(), m_entries, and m_mutex.

Referenced by on_plugin_register().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ on_plugin_deregister()

void Slic3r::PluginResourceTextures::on_plugin_deregister ( const std::string & plugin_key)
64{
65 std::lock_guard<std::mutex> lock(m_mutex);
66 for (auto it = m_entries.begin(); it != m_entries.end();) {
67 if (it->first.plugin_key == plugin_key)
68 it = m_entries.erase(it);
69 else
70 ++it;
71 }
72}

References m_entries, and m_mutex.

◆ on_plugin_register()

void Slic3r::PluginResourceTextures::on_plugin_register ( const std::string & plugin_key)
56{
57 for (const auto &capability : PluginManager::instance().get_plugin_capabilities(plugin_key, PluginCapabilityType::ResourceTexture)) {
58 if (capability)
59 on_cap_register(capability->identity());
60 }
61}
void on_cap_register(const PluginCapabilityId &id)
Definition PluginResourceTextures.cpp:74

References Slic3r::PluginManager::instance(), on_cap_register(), and Slic3r::ResourceTexture.

Here is the call graph for this function:

◆ operator=()

PluginResourceTextures & Slic3r::PluginResourceTextures::operator= ( const PluginResourceTextures & )
delete

References PluginResourceTextures().

Here is the call graph for this function:

Member Data Documentation

◆ m_entries

std::map<PluginCapabilityId, ResourceTextureEntry> Slic3r::PluginResourceTextures::m_entries
private

◆ m_mutex

std::mutex Slic3r::PluginResourceTextures::m_mutex
mutableprivate

The documentation for this class was generated from the following files: