KiCad PCB EDA Suite
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 <cirilo.bernardo@gmail.com>
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 <list>
36 #include <map>
37 #include "plugins/3dapi/c3dmodel.h"
38 #include <project.h>
39 #include <wx/string.h>
40 
41 class PGM_BASE;
42 class S3D_CACHE_ENTRY;
43 class SCENEGRAPH;
44 class FILENAME_RESOLVER;
45 class S3D_PLUGIN_MANAGER;
46 
47 
52 class S3D_CACHE : public PROJECT::_ELEM
53 {
54 public:
55  S3D_CACHE();
56  virtual ~S3D_CACHE();
57 
58  KICAD_T Type() noexcept override
59  {
60  return S3D_CACHE_T;
61  }
62 
72  bool Set3DConfigDir( const wxString& aConfigDir );
73 
77  bool SetProject( PROJECT* aProject );
78 
84  void SetProgramBase( PGM_BASE* aBase );
85 
97  SCENEGRAPH* Load( const wxString& aModelFile );
98 
99  FILENAME_RESOLVER* GetResolver() noexcept;
100 
108  std::list< wxString > const* GetFileFilters() const;
109 
113  void FlushCache( bool closePlugins = true );
114 
118  void ClosePlugins();
119 
127  S3DMODEL* GetModel( const wxString& aModelFileName );
128 
136  void CleanCacheDir( int aNumDaysOld );
137 
138 private:
149  SCENEGRAPH* checkCache( const wxString& aFileName, S3D_CACHE_ENTRY** aCachePtr = nullptr );
150 
158  bool getSHA1( const wxString& aFileName, unsigned char* aSHA1Sum );
159 
160  // load scene data from a cache file
161  bool loadCacheData( S3D_CACHE_ENTRY* aCacheItem );
162 
163  // save scene data to a cache file
164  bool saveCacheData( S3D_CACHE_ENTRY* aCacheItem );
165 
166  // the real load function (can supply a cache entry pointer to member functions)
167  SCENEGRAPH* load( const wxString& aModelFile, S3D_CACHE_ENTRY** aCachePtr = nullptr );
168 
171 
174 
176 
178 
180  wxString m_CacheDir;
181  wxString m_ConfigDir;
182 };
183 
184 #endif // CACHE_3D_H
define an internal structure to be used by the 3D renders
Container for project specific data.
Definition: project.h:62
Container for data for KiCad programs.
Definition: pgm_base.h:93
std::list< wxString > const * GetFileFilters() const
Return the list of file filters retrieved from the plugins.
Definition: 3d_cache.cpp:611
A helper for sorting strings from the rear.
Definition: string_utils.h:240
void SetProgramBase(PGM_BASE *aBase)
Set the filename resolver's pointer to the application's PGM_BASE instance.
Definition: 3d_cache.cpp:599
Definition: bitmap.cpp:64
std::map< wxString, S3D_CACHE_ENTRY *, rsort_wxString > m_CacheMap
mapping of file names to cache names and data
Definition: 3d_cache.h:173
SCENEGRAPH * checkCache(const wxString &aFileName, S3D_CACHE_ENTRY **aCachePtr=nullptr)
Find or create cache entry for file name.
Definition: 3d_cache.cpp:290
bool loadCacheData(S3D_CACHE_ENTRY *aCacheItem)
Definition: 3d_cache.cpp:413
Cache for storing the 3D shapes.
Definition: 3d_cache.h:52
defines the basic data associated with a single 3D model.
FILENAME_RESOLVER * m_FNResolver
Definition: 3d_cache.h:175
KICAD_T
The set of class identification values stored in EDA_ITEM::m_structType.
Definition: typeinfo.h:77
S3DMODEL * GetModel(const wxString &aModelFileName)
Attempt to load the scene data for a model and to translate it into an S3D_MODEL structure for displa...
Definition: 3d_cache.cpp:643
bool saveCacheData(S3D_CACHE_ENTRY *aCacheItem)
Definition: 3d_cache.cpp:454
void FlushCache(bool closePlugins=true)
Free all data in the cache and by default closes all plugins.
Definition: 3d_cache.cpp:617
wxString m_CacheDir
Definition: 3d_cache.h:180
void ClosePlugins()
Unload plugins to free memory.
Definition: 3d_cache.cpp:636
void CleanCacheDir(int aNumDaysOld)
Delete up old cache files in cache directory.
Definition: 3d_cache.cpp:669
bool getSHA1(const wxString &aFileName, unsigned char *aSHA1Sum)
Calculate the SHA1 hash of the given file.
Definition: 3d_cache.cpp:357
virtual ~S3D_CACHE()
Definition: 3d_cache.cpp:195
std::list< S3D_CACHE_ENTRY * > m_CacheList
cache entries
Definition: 3d_cache.h:170
Provide an extensible class to resolve 3D model paths.
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:508
FILENAME_RESOLVER * GetResolver() noexcept
Definition: 3d_cache.cpp:605
wxString m_ConfigDir
Definition: 3d_cache.h:181
PROJECT * m_project
Definition: 3d_cache.h:179
KICAD_T Type() noexcept override
Definition: 3d_cache.h:58
bool SetProject(PROJECT *aProject)
Set the current project's working directory; this affects the model search path.
Definition: 3d_cache.cpp:571
Define the basic data set required to represent a 3D model.
Definition: scenegraph.h:44
A PROJECT can hold stuff it knows nothing about, in the form of _ELEM derivatives.
Definition: project.h:73
Store the a model based on meshes and materials.
Definition: c3dmodel.h:90
SCENEGRAPH * Load(const wxString &aModelFile)
Attempt to load the scene data for a model.
Definition: 3d_cache.cpp:284
Definition: 3d_cache.cpp:123
SCENEGRAPH * load(const wxString &aModelFile, S3D_CACHE_ENTRY **aCachePtr=nullptr)
Definition: 3d_cache.cpp:214
S3D_PLUGIN_MANAGER * m_Plugins
Definition: 3d_cache.h:177