Home || Architecture || Video Search || Visual Search || Scripts || Applications || Important Messages || OGL || Src

VidolviView.h

Go to the documentation of this file.
00001 #ifndef Impala_Application_Videolympics_VidolviView_h
00002 #define Impala_Application_Videolympics_VidolviView_h
00003 
00004 #include "Basis/CmdOptions.h"
00005 #include "Core/ImageSet/ImageSet.h"
00006 #include "Core/Array/Arrays.h"
00007 #include "Core/Geometry/Rectangle.h"
00008 #include "OglGui/View.h"
00009 #include "OglGui/Window.h"
00010 #include "Core/Array/Arrays.h"
00011 
00012 #include "PhysicsEngine.h"
00013 
00014 namespace Impala {
00015 namespace Application {
00016 namespace Videolympics {
00017 
00018 using namespace OglGui;
00019 
00020 class VidolviView : public OglGui::View
00021 {
00022 public:
00023     VidolviView(OGLWND* oglWnd, Core::Array::Array2dVec3UInt8 *image, float x, float y, float z,
00024            float w, float h, float d, ViewListener* li=0):
00025         OglGui::View(oglWnd, InitOGLIMAGE(image), x, y, z, w, h, d, li)
00026     {
00027         static int viewnr = 0;
00028         mViewNr = viewnr;
00029         viewnr++;
00030         view3DSys.SetTags(GetOGLVIEW3D(), FlexViewTags);
00031         view3DSys.SetZoom(GetOGLVIEW3D(), 2.2f, 1.4f);
00032 //        view3DSys.SetZoom(GetOGLVIEW3D(), w, h);
00033 //        view3DSys.SetObject3D(GetOGLVIEW3D(), 2);
00034         oglSys.ReleaseOglImage(mOglIm);
00035         mPPart = new PhysicsPart(GetOGLVIEW3D(), mViewNr);
00036 
00037         mRelevance = mSelectedByOthers = mStepsShown = 0;
00038     }
00039 
00040     ~VidolviView()
00041     {
00042         ILOG_DEBUG("~Destroying " << mViewNr);
00043         mPPart->DoDestroyPart();
00044 //        delete mPPart;
00045 //        view3DSys.DeleteView(GetOGLVIEW3D());
00046     }
00047 
00048     OGLIMAGE *
00049     UpdateImage(Core::Array::Array2dVec3UInt8 *image)
00050     {
00051   //      OGLIMAGE *im = InitOGLIMAGE(image);
00052   //      view3DSys.SetImage(GetOGLVIEW3D(), im);
00053 //        oglSys.ReleaseOglImage(im);
00054  //       return im;
00055 
00056 /*        if (image == NULL) {
00057             ILOG_WARN( "NULL image received");
00058         } else {
00059             OGLIMAGE *oldOglImage = GetOGLIMAGE();
00060 //            oldOglImage = NULL;
00061             if (oldOglImage == NULL) {
00062                 ILOG_DEBUG("Creating new OGL Image.");
00063                 OGLIMAGE *im = InitOGLIMAGE(image);
00064                 view3DSys.SetImage(GetOGLVIEW3D(), im);
00065                 oglSys.ReleaseOglImage(oldOglImage);
00066                 oglSys.ReleaseOglImage(im);
00067                 return;
00068             }
00069             Core::Array::Array2dVec3UInt8 *oldImage = (Core::Array::Array2dVec3UInt8*) oldOglImage->imageHandle;
00070             if (oldImage == NULL || (image->CW() != oldImage->CW()) || (image->CH() != oldImage->CH())) {
00071                 ILOG_DEBUG( "Changed resolution from " << oldImage->CW() << "x" << oldImage->CH()<< " to " << image->CW() << "x" << image->CH());
00072                 oldImage = NULL;
00073                 oglSys.ReleaseOglImage(oldOglImage);
00074                 OGLIMAGE *im = InitOGLIMAGE(image);
00075                 view3DSys.SetImage(GetOGLVIEW3D(), im);
00076                 oglSys.ReleaseOglImage(im);
00077 
00078             } else {
00079                 int nBytes = image->CW() * image->CH() * 3;
00080                 memcpy ( oldImage->CPB(0,0), image->CPB(0,0), nBytes);
00081 //                oldOglImage->imageHandle = image;
00082                 oldOglImage->changed = 1;
00083                 oglSys.ReleaseOglImage(oldOglImage);
00084             }
00085         } */
00086     }
00087 
00088     PhysicsPart*
00089     GetPPart()
00090     {
00091         return mPPart;
00092     }
00093 
00094     int
00095     GetViewNr()
00096     {
00097         return mViewNr;
00098     }
00099 
00100     void
00101     SetRelevance(int relevance, int selectedByOthers)
00102     {
00103         // 0: unjudged
00104         // 1: positive
00105         // 2: negative
00106 
00107         mRelevance = relevance;
00108         mSelectedByOthers = selectedByOthers;
00109     }
00110 
00111     void
00112     SetRelColor()
00113     {
00114         float r, g, b, a;
00115         switch (mRelevance)
00116         {
00117             case 0:
00118                 r = g = b = 0.0f; a = 0.5f;
00119                 break;
00120             case 1:
00121                 r = 0.0f; g = 1.0f; b = 0.0f; a = 0.5f;
00122                 break;
00123             case 2:
00124                 r = 1.0f; g = 0.0f; b = 0.0f; a = 0.5f;
00125                 break;
00126         }
00127 
00128         if (mStepsShown < 500)
00129         {
00130             float factor = (float)mStepsShown / 500.0f;
00131             mStepsShown++;
00132 //        r = r * factor;
00133 //        g = g * factor;
00134 //        b = b * factor;
00135             a = a * factor;
00136         }
00137 
00138         glColor4f(r,g,b,a);
00139     }
00140 
00141     // allow for rectangle-based selecting in 3D:
00142     virtual void OnMouse(int msg, int btn, int state, float x, float y)
00143     {
00144         OglGui::View::OnMouse(msg, btn, state, x, y);
00145     }
00146 
00147     virtual void OnDrawView()
00148     {
00149         OglGui::View::OnDrawView();
00150 
00151         float w,h,d;
00152         view3DSys.GetDimensions(GetOGLVIEW3D(), 0, 0, 0, &w, &h, &d);
00153 
00154         glPushMatrix();
00155         glTranslatef(0.0, 0.0, +0.02f);
00156         glScalef(w + 0.01,h,d);
00157         INT         oldBlendInfo[3];
00158         OGC         oldOGC;
00159         OGCSave( &oldOGC );
00160         oglSys.StartBlend( &oldBlendInfo[0] );
00161 
00162 //        glColor4f(0.0f, 1.0f, 1.0f, 0.5);
00163         SetRelColor();
00164         glBegin(GL_QUADS);
00165         glVertex3f( -0.5f, -0.5f, -0.02f );
00166         glVertex3f( +0.5f, -0.5f, -0.02f );
00167         glVertex3f( +0.5f, +0.5f, +0.02f );
00168         glVertex3f( -0.5f, +0.5f, +0.02f );
00169         
00170         glEnd();
00171         oglSys.EndBlend( &oldBlendInfo[0] );
00172         OGCRestore( &oldOGC );
00173         glPopMatrix();
00174     }
00175 
00176 
00177     virtual void OnSelection(bool selected) {
00178         OglGui::View::OnSelection(selected);
00179      //   ILOG_DEBUG("OnSelection(" << selected <<")");
00180     }
00181 
00182 protected:
00183 
00184     OGLIMAGE*
00185     InitOGLIMAGE(Core::Array::Array2dVec3UInt8* im)
00186     {
00187 //        ILOG_DEBUG("OGL image created, res = " << im->CW() << "x" << im->CH() << ".");
00188         mOglIm = oglSys.OglImage(GL_RGB, im->CW(), im->CH());
00189         mOglIm->imDataFunc = MyOglImdataFunc;
00190         mOglIm->onDestroy = MyOglImdataDestroyFunc;
00191   
00192         mOglIm->noTexScaling = 1;
00193 //        Array2dVec3UInt8* ar = 
00194 //            Core::Array::ArrayCreate<Array2dVec3UInt8>(imW, imH, 0, 0);
00195         mOglIm->imageHandle = im;
00196         return mOglIm;
00197 
00198     }
00199 
00200     static void*
00201     MyOglImdataFunc(OGLIMAGE* oglIm)
00202     {
00203         // Obtain our 'im' stored as 'imageHandle'
00204         Core::Array::Array2dVec3UInt8* ar = (Core::Array::Array2dVec3UInt8 *) oglIm->imageHandle;
00205 
00206         // Set oglIm dimensions to our 'im' dimensions
00207         oglIm->w = ar->CW();
00208         oglIm->h = ar->CH();
00209         oglIm->changed = 0;
00210 
00211         return (void *) ar->CPB(0, 0); // Pointer to the image pixels
00212     }
00213 
00214     static void
00215     MyOglImdataDestroyFunc(OGLIMAGE* oglIm)
00216     {
00217         ILOG_DEBUG("OGL image destroyed.");
00218         if (!oglIm)
00219             return;
00220         Core::Array::Array2dVec3UInt8* ar = (Core::Array::Array2dVec3UInt8 *) oglIm->imageHandle;
00221         if (ar)
00222         {
00223             delete ar;
00224             ar = 0;
00225         }
00226     }
00227 
00228     OGLIMAGE *mOglIm;
00229     PhysicsPart *mPPart;
00230     int mViewNr;
00231 
00232     int mRelevance, mSelectedByOthers, mStepsShown;
00233 
00234     ILOG_VAR_DEC;
00235 
00236 };
00237 
00238 ILOG_VAR_INIT(VidolviView, Visualization.Application.Videolympics);
00239 
00240 }
00241 }
00242 }
00243 
00244 #endif
00245 

Generated on Fri Mar 19 09:30:41 2010 for ImpalaSrc by  doxygen 1.5.1