diff options
Diffstat (limited to 'src/PolySetRenderer.h')
-rw-r--r-- | src/PolySetRenderer.h | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/src/PolySetRenderer.h b/src/PolySetRenderer.h index cff528f..ddd692f 100644 --- a/src/PolySetRenderer.h +++ b/src/PolySetRenderer.h @@ -2,20 +2,37 @@ #define POLYSETRENDERER_H_ #include "node.h" +#include <QCache> class PolySetRenderer { public: enum RenderMode { RENDER_CGAL, RENDER_OPENCSG }; - PolySetRenderer() {} + PolySetRenderer() : cache(100) {} + virtual ~PolySetRenderer() {} - virtual PolySet *renderPolySet(const class ProjectionNode &node, AbstractPolyNode::render_mode_e) = 0; - virtual PolySet *renderPolySet(const class DxfLinearExtrudeNode &node, AbstractPolyNode::render_mode_e) = 0; - virtual PolySet *renderPolySet(const class DxfRotateExtrudeNode &node, AbstractPolyNode::render_mode_e) = 0; + virtual PolySet *renderPolySet(const class ProjectionNode &, AbstractPolyNode::render_mode_e) = 0; + virtual PolySet *renderPolySet(const class DxfLinearExtrudeNode &, AbstractPolyNode::render_mode_e) = 0; + virtual PolySet *renderPolySet(const class DxfRotateExtrudeNode &, AbstractPolyNode::render_mode_e) = 0; + + void clearCache() { + this->cache.clear(); + } static PolySetRenderer *renderer() { return global_renderer; } static void setRenderer(PolySetRenderer *r) { global_renderer = r; } +protected: + + struct cache_entry { + class PolySet *ps; + QString msg; + cache_entry(PolySet *ps); + ~cache_entry(); + }; + + QCache<QString, cache_entry> cache; + private: static PolySetRenderer *global_renderer; }; |