KiCad PCB EDA Suite
Loading...
Searching...
No Matches
3d_cache.h
Go to the documentation of this file.
1/*
2 * This program source code file is part of KiCad, a free EDA CAD application.
3 *
4 * Copyright (C) 2015 Cirilo Bernardo <[email protected]>
5 * Copyright The KiCad Developers, see AUTHORS.txt for contributors.
6 *
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation; either version 2
10 * of the License, or (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <https://www.gnu.org/licenses/>.
19 */
20
24
25#ifndef CACHE_3D_H
26#define CACHE_3D_H
27
28#include "3d_info.h"
30#include <core/typeinfo.h>
31#include "string_utils.h"
32#include <hash_128.h>
33#include <list>
34#include <map>
35#include <mutex>
37#include <project.h>
38#include <wx/string.h>
39
40class EMBEDDED_FILES;
41class PGM_BASE;
42class S3D_CACHE_ENTRY;
43class SCENEGRAPH;
46
47
53{
54public:
55 S3D_CACHE();
56 virtual ~S3D_CACHE();
57
59 {
61 }
62
72 bool Set3DConfigDir( const wxString& aConfigDir );
73
77 bool SetProject( PROJECT* aProject );
78
84 void SetProgramBase( PGM_BASE* aBase );
85
100 SCENEGRAPH* Load( const wxString& aModelFile, const wxString& aBasePath,
101 std::vector<const EMBEDDED_FILES*> aEmbeddedFilesStack );
102
103 FILENAME_RESOLVER* GetResolver() noexcept;
104
112 std::list< wxString > const* GetFileFilters() const;
113
117 void FlushCache( bool closePlugins = true );
118
122 void ClosePlugins();
123
134 S3DMODEL* GetModel( const wxString& aModelFileName, const wxString& aBasePath,
135 std::vector<const EMBEDDED_FILES*> aEmbeddedFilesStack );
136
144 void CleanCacheDir( int aNumDaysOld );
145
146private:
157 SCENEGRAPH* checkCache( const wxString& aFileName, S3D_CACHE_ENTRY** aCachePtr = nullptr );
158
166 bool getHash( const wxString& aFileName, HASH_128& aHash );
167
168 // load scene data from a cache file
169 bool loadCacheData( S3D_CACHE_ENTRY* aCacheItem );
170
171 // save scene data to a cache file
172 bool saveCacheData( S3D_CACHE_ENTRY* aCacheItem );
173
174 // the real load function (can supply a cache entry pointer to member functions)
175 SCENEGRAPH* load( const wxString& aModelFile, const wxString& aBasePath,
176 S3D_CACHE_ENTRY** aCachePtr = nullptr,
177 std::vector<const EMBEDDED_FILES*> aEmbeddedFilesStack = {} );
178
180 std::list< S3D_CACHE_ENTRY* > m_CacheList;
181
183 std::map< wxString, S3D_CACHE_ENTRY*, rsort_wxString > m_CacheMap;
184
186
188
190 wxString m_CacheDir;
191 wxString m_ConfigDir;
192
196 mutable std::mutex m_substCatalogMutex;
197 mutable bool m_substCatalogBuilt = false;
199};
200
201#endif // CACHE_3D_H
defines the basic data associated with a single 3D model.
define an internal structure to be used by the 3D renders
Provide an extensible class to resolve 3D model paths.
An index of STEP-family model files keyed by normalised filename stem.
Container for data for KiCad programs.
Definition pgm_base.h:102
A PROJECT can hold stuff it knows nothing about, in the form of _ELEM derivatives.
Definition project.h:89
Container for project specific data.
Definition project.h:62
ELEM
The set of #_ELEMs that a PROJECT can hold.
Definition project.h:68
Definition 3d_cache.cpp:68
void SetProgramBase(PGM_BASE *aBase)
Set the filename resolver's pointer to the application's PGM_BASE instance.
Definition 3d_cache.cpp:535
wxString m_CacheDir
Definition 3d_cache.h:190
bool loadCacheData(S3D_CACHE_ENTRY *aCacheItem)
Definition 3d_cache.cpp:349
virtual ~S3D_CACHE()
Definition 3d_cache.cpp:131
void FlushCache(bool closePlugins=true)
Free all data in the cache and by default closes all plugins.
Definition 3d_cache.cpp:553
PROJECT::ELEM ProjectElementType() noexcept override
Definition 3d_cache.h:58
bool Set3DConfigDir(const wxString &aConfigDir)
Set the configuration directory to be used by the model manager for storing 3D model manager configur...
Definition 3d_cache.cpp:443
S3DMODEL * GetModel(const wxString &aModelFileName, const wxString &aBasePath, std::vector< const EMBEDDED_FILES * > aEmbeddedFilesStack)
Attempt to load the scene data for a model and to translate it into an S3D_MODEL structure for displa...
Definition 3d_cache.cpp:579
SCENEGRAPH * checkCache(const wxString &aFileName, S3D_CACHE_ENTRY **aCachePtr=nullptr)
Find or create cache entry for file name.
Definition 3d_cache.cpp:250
MODEL_SUBSTITUTION::STEP_CATALOG m_substCatalog
Definition 3d_cache.h:198
PROJECT * m_project
Definition 3d_cache.h:189
S3D_PLUGIN_MANAGER * m_Plugins
Definition 3d_cache.h:187
bool saveCacheData(S3D_CACHE_ENTRY *aCacheItem)
Definition 3d_cache.cpp:389
SCENEGRAPH * load(const wxString &aModelFile, const wxString &aBasePath, S3D_CACHE_ENTRY **aCachePtr=nullptr, std::vector< const EMBEDDED_FILES * > aEmbeddedFilesStack={})
Definition 3d_cache.cpp:140
wxString m_ConfigDir
base configuration path for 3D items.
Definition 3d_cache.h:191
std::mutex m_substCatalogMutex
Lazy STEP-catalog used by the headless resolver fallback in load().
Definition 3d_cache.h:196
bool m_substCatalogBuilt
Definition 3d_cache.h:197
std::list< wxString > const * GetFileFilters() const
Return the list of file filters retrieved from the plugins.
Definition 3d_cache.cpp:547
FILENAME_RESOLVER * GetResolver() noexcept
Definition 3d_cache.cpp:541
std::list< S3D_CACHE_ENTRY * > m_CacheList
Cache entries.
Definition 3d_cache.h:180
bool SetProject(PROJECT *aProject)
Set the current project's working directory; this affects the model search path.
Definition 3d_cache.cpp:507
void CleanCacheDir(int aNumDaysOld)
Delete up old cache files in cache directory.
Definition 3d_cache.cpp:606
std::map< wxString, S3D_CACHE_ENTRY *, rsort_wxString > m_CacheMap
Mapping of file names to cache names and data.
Definition 3d_cache.h:183
SCENEGRAPH * Load(const wxString &aModelFile, const wxString &aBasePath, std::vector< const EMBEDDED_FILES * > aEmbeddedFilesStack)
Attempt to load the scene data for a model.
Definition 3d_cache.cpp:243
void ClosePlugins()
Unload plugins to free memory.
Definition 3d_cache.cpp:572
bool getHash(const wxString &aFileName, HASH_128 &aHash)
Calculate the SHA1 hash of the given file.
Definition 3d_cache.cpp:317
FILENAME_RESOLVER * m_FNResolver
Definition 3d_cache.h:185
Define the basic data set required to represent a 3D model.
Definition scenegraph.h:41
STL namespace.
A storage class for 128-bit hash value.
Definition hash_128.h:32
Store the a model based on meshes and materials.
Definition c3dmodel.h:91