Walls And Holes  1
abstractscene.h
Go to the documentation of this file.
1 #ifndef ABSTRACTSCENE_H
2 #define ABSTRACTSCENE_H
3 
4 #include <memory>
5 
6 #include <QObject>
7 #include <QWeakPointer>
8 
9 #include "abstractrenderer.h"
10 #include "objtools.h"
11 
12 class AbstractScene : public QObject
13 {
14  Q_OBJECT
15 
16 public:
17 
18 
19  virtual ~AbstractScene() {}
20 
29  QSharedPointer<AbstractRenderer> getRenderer()
30  {
31  QSharedPointer<AbstractRenderer> strongRef;
32 
33  if (mRenderer.isNull()) {
34  strongRef = makeRenderer();
35 
36 
37  // The scene should not own its renderer.
38  mRenderer = strongRef.toWeakRef();
39  } else
40  // The returned value should be a strong reference, so that the caller
41  // may take ownership of the returned object.
42  strongRef = mRenderer.toStrongRef();
43 
44  return strongRef;
45  }
46 
47  virtual SharedOBJModel exportOBJ()=0;
48 
49 
50 protected:
51 
59  virtual QSharedPointer<AbstractRenderer> makeRenderer() = 0;
60 
61 signals:
62 
66  void sceneUpdated();
67 
68 
69 private:
70 
71 
75  QWeakPointer<AbstractRenderer> mRenderer;
76 
77 };
78 
79 typedef std::shared_ptr<AbstractScene> SharedAbstractScene;
80 
81 
82 #endif // ABSTRACTSCENE_H
Definition: abstractscene.h:12
virtual SharedOBJModel exportOBJ()=0
void sceneUpdated()
Emitted when the scene is changed.
virtual QSharedPointer< AbstractRenderer > makeRenderer()=0
Creates an AbstractRenderer for this scene.
virtual ~AbstractScene()
Definition: abstractscene.h:19
QSharedPointer< AbstractRenderer > getRenderer()
Returns an AbstractRenderer for this scene.
Definition: abstractscene.h:29
QSharedPointer< OBJModel > SharedOBJModel
Definition: objtools.h:71
std::shared_ptr< AbstractScene > SharedAbstractScene
Definition: abstractscene.h:79