LightWrap++
AC++wrapperfortheLightWave3DSDK
preview.h
Go to the documentation of this file.
1 #ifndef LWPP_PREVIEW_H
2 #define LWPP_PREVIEW_H
3 
4 #include <lwpreview.h>
5 
6 namespace lwpp
7 {
9  {
10  private:
11  static PreviewCallbacks* getCast(void *userData) {return static_cast<PreviewCallbacks *>(userData);}
12  protected:
13  virtual void previewClose(void) {;}
14  virtual void previewOptions(int option) {;}
15  virtual void previewPreset(LWImageID image) {;}
16  virtual int previewClick(int count, PvSample *pixel) {return 0;}
17  virtual int previewInit(bool manual) {return 0;}
18  virtual void previewCleanup() {;}
19  virtual int previewEvaluate(int w, int h, PvSample *pixel) {return 0;}
20  public:
21  static void closeFunc(void *userData) { if (userData) getCast(userData)->previewClose();}
22  static void optionsFunc(int option, void *userData) { if (userData) getCast(userData)->previewOptions(option); }
23  static void presetFunc(void *userData, LWImageID image) { if (userData) getCast(userData)->previewPreset(image); }
24  static int clickFunc(int count, void *userData, PvSample *pixel)
25  {
26  if (userData) return getCast(userData)->previewClick(count, pixel);
27  return 0;
28  }
29  static int initFunc(void *renderData, int manual)
30  {
31  if (renderData) return (getCast(renderData)->previewInit(manual != 0));
32  return 0;
33  }
34  static void cleanupFunc(void *renderData) { if (renderData) getCast(renderData)->previewCleanup(); }
35  static int evaluateFunc(void *renderData, int w, int h, PvSample *pixel)
36  {
37  if (renderData) return (getCast(renderData)->previewEvaluate(w, h, pixel));
38  return 0;
39  }
40  };
41 
42  class Preview : protected GlobalBase<LWPreviewFuncs>
43  {
44  PvContextID id;
45  PvContextID subscribe (char *title, void *userData, closeFunc *cFunc)
46  {
47  return globPtr->subscribe(title, userData, cFunc);
48  }
49  void unsubscribe(PvContextID id) { globPtr->unsubscribe(id); }
50  public:
51  Preview(const char *title, PreviewCallbacks *prevCB) : GlobalBase<LWPreviewFuncs>(), id(0)
52  {
54  {
55  id = subscribe(const_cast<char *>(title), prevCB, prevCB->closeFunc);
56  }
57  }
59  {
60  if (id) unsubscribe(id);
61  }
62  bool isValid(void){return (id !=0);}
63  void open(void) { globPtr->open(id); }
64  void close(void) { globPtr->close(); }
65  bool isOpen(void) { return (globPtr->isOpen() != 0); }
66  void setContext(void) {globPtr->setContext(id);}
67  void setClick(clickFunc *cf) {globPtr->setClick(id, cf);}
69  {
70  globPtr->setRender(id, prevCB, prevCB->initFunc, prevCB->cleanupFunc, prevCB->evaluateFunc);
72  }
73  void setOptions(const char **list, PreviewCallbacks *prevCB, int selection)
74  {
75  globPtr->setOptions(id, const_cast<char **>(list), prevCB->optionsFunc, selection);
76  }
77  void startRender() {globPtr->startRender(id);}
78  void stopRender() {globPtr->stopRender(id);}
79  void getPixel(PvSample *pixel) {globPtr->getPixel(pixel);}
80  LWImageID getBitmap(int *width, int *height) {return globPtr->getBitmap(width, height);}
81  LWItemID getCamera(double pos[3], double rot[3], double *zoomFactor) {return globPtr->getCamera(pos, rot, zoomFactor);}
82  void getView(int *width, int *height, double *pixelAspect) {globPtr->getView(width, height, pixelAspect);}
83  void setPreset(PreviewCallbacks *prevCB) {globPtr->setPreset(id, prevCB->presetFunc);}
84  };
85 }
86 
87 #endif