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 (C) 2020 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, you may find one here:
19 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
20 * or you may search the http://www.gnu.org website for the version 2 license,
21 * or you may write to the Free Software Foundation, Inc.,
22 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
23 */
24
29#ifndef CACHE_3D_H
30#define CACHE_3D_H
31
32#include "3d_info.h"
33#include <core/typeinfo.h>
34#include "string_utils.h"
35#include <hash_128.h>
36#include <list>
37#include <map>
39#include <project.h>
40#include <wx/string.h>
41
42class EMBEDDED_FILES;
43class PGM_BASE;
44class S3D_CACHE_ENTRY;
45class SCENEGRAPH;
48
49
55{
56public:
57 S3D_CACHE();
58 virtual ~S3D_CACHE();
59
61 {
63 }
64
74 bool Set3DConfigDir( const wxString& aConfigDir );
75
79 bool SetProject( PROJECT* aProject );
80
86 void SetProgramBase( PGM_BASE* aBase );
87
101 SCENEGRAPH* Load( const wxString& aModelFile, const wxString& aBasePath, const EMBEDDED_FILES* aEmbeddedFiles );
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
133 S3DMODEL* GetModel( const wxString& aModelFileName, const wxString& aBasePath, const EMBEDDED_FILES* aEmbeddedFiles );
134
142 void CleanCacheDir( int aNumDaysOld );
143
144private:
155 SCENEGRAPH* checkCache( const wxString& aFileName, S3D_CACHE_ENTRY** aCachePtr = nullptr );
156
164 bool getHash( const wxString& aFileName, HASH_128& aHash );
165
166 // load scene data from a cache file
167 bool loadCacheData( S3D_CACHE_ENTRY* aCacheItem );
168
169 // save scene data to a cache file
170 bool saveCacheData( S3D_CACHE_ENTRY* aCacheItem );
171
172 // the real load function (can supply a cache entry pointer to member functions)
173 SCENEGRAPH* load( const wxString& aModelFile, const wxString& aBasePath,
174 S3D_CACHE_ENTRY** aCachePtr = nullptr,
175 const EMBEDDED_FILES* aEmbeddedFiles = nullptr );
176
179
182
184
186
188 wxString m_CacheDir;
189 wxString m_ConfigDir;
190};
191
192#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.
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:93
Container for project specific data.
Definition: project.h:64
ELEM
The set of #_ELEMs that a PROJECT can hold.
Definition: project.h:70
Definition: 3d_cache.cpp:71
Cache for storing the 3D shapes.
Definition: 3d_cache.h:55
SCENEGRAPH * Load(const wxString &aModelFile, const wxString &aBasePath, const EMBEDDED_FILES *aEmbeddedFiles)
Attempt to load the scene data for a model.
Definition: 3d_cache.cpp:214
void SetProgramBase(PGM_BASE *aBase)
Set the filename resolver's pointer to the application's PGM_BASE instance.
Definition: 3d_cache.cpp:505
wxString m_CacheDir
Definition: 3d_cache.h:188
bool loadCacheData(S3D_CACHE_ENTRY *aCacheItem)
Definition: 3d_cache.cpp:319
virtual ~S3D_CACHE()
Definition: 3d_cache.cpp:134
void FlushCache(bool closePlugins=true)
Free all data in the cache and by default closes all plugins.
Definition: 3d_cache.cpp:523
PROJECT::ELEM ProjectElementType() noexcept override
Definition: 3d_cache.h:60
bool Set3DConfigDir(const wxString &aConfigDir)
Sets the configuration directory to be used by the model manager for storing 3D model manager configu...
Definition: 3d_cache.cpp:413
S3DMODEL * GetModel(const wxString &aModelFileName, const wxString &aBasePath, const EMBEDDED_FILES *aEmbeddedFiles)
Attempt to load the scene data for a model and to translate it into an S3D_MODEL structure for displa...
Definition: 3d_cache.cpp:549
SCENEGRAPH * load(const wxString &aModelFile, const wxString &aBasePath, S3D_CACHE_ENTRY **aCachePtr=nullptr, const EMBEDDED_FILES *aEmbeddedFiles=nullptr)
Definition: 3d_cache.cpp:143
SCENEGRAPH * checkCache(const wxString &aFileName, S3D_CACHE_ENTRY **aCachePtr=nullptr)
Find or create cache entry for file name.
Definition: 3d_cache.cpp:220
PROJECT * m_project
Definition: 3d_cache.h:187
S3D_PLUGIN_MANAGER * m_Plugins
Definition: 3d_cache.h:185
bool saveCacheData(S3D_CACHE_ENTRY *aCacheItem)
Definition: 3d_cache.cpp:359
wxString m_ConfigDir
Definition: 3d_cache.h:189
std::list< wxString > const * GetFileFilters() const
Return the list of file filters retrieved from the plugins.
Definition: 3d_cache.cpp:517
FILENAME_RESOLVER * GetResolver() noexcept
Definition: 3d_cache.cpp:511
std::list< S3D_CACHE_ENTRY * > m_CacheList
cache entries
Definition: 3d_cache.h:178
bool SetProject(PROJECT *aProject)
Set the current project's working directory; this affects the model search path.
Definition: 3d_cache.cpp:477
void CleanCacheDir(int aNumDaysOld)
Delete up old cache files in cache directory.
Definition: 3d_cache.cpp:576
std::map< wxString, S3D_CACHE_ENTRY *, rsort_wxString > m_CacheMap
mapping of file names to cache names and data
Definition: 3d_cache.h:181
void ClosePlugins()
Unload plugins to free memory.
Definition: 3d_cache.cpp:542
bool getHash(const wxString &aFileName, HASH_128 &aHash)
Calculate the SHA1 hash of the given file.
Definition: 3d_cache.cpp:287
FILENAME_RESOLVER * m_FNResolver
Definition: 3d_cache.h:183
Define the basic data set required to represent a 3D model.
Definition: scenegraph.h:45
STL namespace.
A storage class for 128-bit hash value.
Definition: hash_128.h:36
Store the a model based on meshes and materials.
Definition: c3dmodel.h:91
A helper for sorting strings from the rear.
Definition: string_utils.h:265