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 <[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 <list>
36#include <map>
38#include <project.h>
39#include <wx/string.h>
40
41class PGM_BASE;
42class S3D_CACHE_ENTRY;
43class SCENEGRAPH;
46
47
53{
54public:
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
98 SCENEGRAPH* Load( const wxString& aModelFile, const wxString& aBasePath );
99
100 FILENAME_RESOLVER* GetResolver() noexcept;
101
109 std::list< wxString > const* GetFileFilters() const;
110
114 void FlushCache( bool closePlugins = true );
115
119 void ClosePlugins();
120
128 S3DMODEL* GetModel( const wxString& aModelFileName, const wxString& aBasePath );
129
137 void CleanCacheDir( int aNumDaysOld );
138
139private:
150 SCENEGRAPH* checkCache( const wxString& aFileName, S3D_CACHE_ENTRY** aCachePtr = nullptr );
151
159 bool getSHA1( const wxString& aFileName, unsigned char* aSHA1Sum );
160
161 // load scene data from a cache file
162 bool loadCacheData( S3D_CACHE_ENTRY* aCacheItem );
163
164 // save scene data to a cache file
165 bool saveCacheData( S3D_CACHE_ENTRY* aCacheItem );
166
167 // the real load function (can supply a cache entry pointer to member functions)
168 SCENEGRAPH* load( const wxString& aModelFile, const wxString& aBasePath, S3D_CACHE_ENTRY** aCachePtr = nullptr );
169
172
175
177
179
181 wxString m_CacheDir;
182 wxString m_ConfigDir;
183};
184
185#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:94
A PROJECT can hold stuff it knows nothing about, in the form of _ELEM derivatives.
Definition: project.h:74
Container for project specific data.
Definition: project.h:63
Definition: 3d_cache.cpp:124
Cache for storing the 3D shapes.
Definition: 3d_cache.h:53
bool getSHA1(const wxString &aFileName, unsigned char *aSHA1Sum)
Calculate the SHA1 hash of the given file.
Definition: 3d_cache.cpp:359
void SetProgramBase(PGM_BASE *aBase)
Set the filename resolver's pointer to the application's PGM_BASE instance.
Definition: 3d_cache.cpp:601
SCENEGRAPH * load(const wxString &aModelFile, const wxString &aBasePath, S3D_CACHE_ENTRY **aCachePtr=nullptr)
Definition: 3d_cache.cpp:215
wxString m_CacheDir
Definition: 3d_cache.h:181
bool loadCacheData(S3D_CACHE_ENTRY *aCacheItem)
Definition: 3d_cache.cpp:415
virtual ~S3D_CACHE()
Definition: 3d_cache.cpp:195
void FlushCache(bool closePlugins=true)
Free all data in the cache and by default closes all plugins.
Definition: 3d_cache.cpp:619
KICAD_T Type() noexcept override
Definition: 3d_cache.h:58
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:509
S3DMODEL * GetModel(const wxString &aModelFileName, const wxString &aBasePath)
Attempt to load the scene data for a model and to translate it into an S3D_MODEL structure for displa...
Definition: 3d_cache.cpp:645
SCENEGRAPH * checkCache(const wxString &aFileName, S3D_CACHE_ENTRY **aCachePtr=nullptr)
Find or create cache entry for file name.
Definition: 3d_cache.cpp:292
PROJECT * m_project
Definition: 3d_cache.h:180
S3D_PLUGIN_MANAGER * m_Plugins
Definition: 3d_cache.h:178
bool saveCacheData(S3D_CACHE_ENTRY *aCacheItem)
Definition: 3d_cache.cpp:455
wxString m_ConfigDir
Definition: 3d_cache.h:182
std::list< wxString > const * GetFileFilters() const
Return the list of file filters retrieved from the plugins.
Definition: 3d_cache.cpp:613
FILENAME_RESOLVER * GetResolver() noexcept
Definition: 3d_cache.cpp:607
std::list< S3D_CACHE_ENTRY * > m_CacheList
cache entries
Definition: 3d_cache.h:171
bool SetProject(PROJECT *aProject)
Set the current project's working directory; this affects the model search path.
Definition: 3d_cache.cpp:573
void CleanCacheDir(int aNumDaysOld)
Delete up old cache files in cache directory.
Definition: 3d_cache.cpp:671
std::map< wxString, S3D_CACHE_ENTRY *, rsort_wxString > m_CacheMap
mapping of file names to cache names and data
Definition: 3d_cache.h:174
SCENEGRAPH * Load(const wxString &aModelFile, const wxString &aBasePath)
Attempt to load the scene data for a model.
Definition: 3d_cache.cpp:286
void ClosePlugins()
Unload plugins to free memory.
Definition: 3d_cache.cpp:638
FILENAME_RESOLVER * m_FNResolver
Definition: 3d_cache.h:176
Define the basic data set required to represent a 3D model.
Definition: scenegraph.h:45
Definition: bitmap.cpp:64
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:244
KICAD_T
The set of class identification values stored in EDA_ITEM::m_structType.
Definition: typeinfo.h:78
@ S3D_CACHE_T
Definition: typeinfo.h:238