00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef COIN_SOIMAGE_H
00021 #define COIN_SOIMAGE_H
00022
00023 #include <Inventor/nodes/SoSubNode.h>
00024 #include <Inventor/nodes/SoShape.h>
00025 #include <Inventor/fields/SoSFInt32.h>
00026 #include <Inventor/fields/SoSFEnum.h>
00027 #include <Inventor/fields/SoSFImage.h>
00028 #include <Inventor/fields/SoSFString.h>
00029
00030 class SoSensor;
00031 class SoFieldSensor;
00032 class SbImage;
00033
00034 class COIN_DLL_API SoImage : public SoShape {
00035 typedef SoShape inherited;
00036
00037 SO_NODE_HEADER(SoImage);
00038
00039 public:
00040 static void initClass(void);
00041 SoImage(void);
00042
00043 enum VertAlignment {
00044 BOTTOM,
00045 HALF,
00046 TOP
00047 };
00048
00049 enum HorAlignment {
00050 LEFT,
00051 CENTER,
00052 RIGHT
00053 };
00054
00055 SoSFInt32 width;
00056 SoSFInt32 height;
00057 SoSFEnum vertAlignment;
00058 SoSFEnum horAlignment;
00059 SoSFImage image;
00060 SoSFString filename;
00061
00062 virtual void GLRender(SoGLRenderAction * action);
00063 virtual void rayPick(SoRayPickAction * action);
00064 virtual void getPrimitiveCount(SoGetPrimitiveCountAction * action);
00065
00066 protected:
00067 virtual ~SoImage();
00068
00069 virtual void generatePrimitives(SoAction * action);
00070 virtual void computeBBox(SoAction * action, SbBox3f & box, SbVec3f & center);
00071
00072 virtual SbBool readInstance(SoInput * in, unsigned short flags);
00073 virtual void notify(SoNotList * list);
00074 int getReadStatus(void);
00075 void setReadStatus(SbBool flag);
00076
00077 private:
00078 SbVec2s getSize(void) const;
00079 static SbVec3f getNilpoint(SoState *state);
00080 void getQuad(SoState *state, SbVec3f &v0, SbVec3f &v1,
00081 SbVec3f &v2, SbVec3f &v3);
00082
00083 const unsigned char * getImage(SbVec2s & size, int & nc);
00084 SbBool loadFilename(void);
00085 SbBool readstatus;
00086 SbImage * resizedimage;
00087 SbBool resizedimagevalid;
00088 class SoFieldSensor * filenamesensor;
00089 SbBool transparency;
00090 SbBool testtransparency;
00091 void testTransparency(void);
00092 static void filenameSensorCB(void *, SoSensor *);
00093 };
00094
00095 #endif // !COIN_SOIMAGE_H