VR-Forces 4.0.4 Class Documentation
include/vrvGraphics/DtWidgetPicker.h
Go to the documentation of this file.
00001 /******************************************************************************
00002 ** Copyright (c) 2010 MAK Technologies, Inc.
00003 ** All rights reserved.
00004 ******************************************************************************/
00005 
00007 #pragma once
00008 #include <vrvGraphics/vrvGraphics.h>
00009 #include <boost/unordered_map.hpp>
00010 
00011 namespace makVrv
00012 {
00013    class DtFrameBufferObject;
00014    class DtLineRenderer;
00015    class DtLineSegment;
00016    class DtOverlayResourceProvider;
00017    class DtPickableTriangle;
00018    class DtPickableWidget;
00019    class DtPixelBufferObject;
00020    class DtQuad;
00021    class DtQuadRenderer;
00022    class DtTextureObject;
00023    class DtTriangleProxy;
00024    class DtTriangleRenderer;
00025    class DtPickableWidget;
00026    class DtPickableQuad;
00027    class DtPickableLine;
00028    class DtPickableTriangle;
00029 
00032    class DT_DLL_VRVGRAPHICS DtWidgetPicker
00033    {
00034    public:
00035 
00036       enum MousePickType
00037       {
00038          NO_EVENT = 0,
00039          LEFT_MOUSE_PRESS, 
00040          LEFT_MOUSE_RELEASE,
00041          LEFT_MOUSE_DOUBLECLICK,
00042          MIDDLE_MOUSE_PRESS, 
00043          MIDDLE_MOUSE_RELEASE,
00044          MIDDLE_MOUSE_DOUBLECLICK,
00045          RIGHT_MOUSE_PRESS, 
00046          RIGHT_MOUSE_RELEASE,
00047          RIGHT_MOUSE_DOUBLECLICK,
00048          MOUSE_MOVE,
00049          MOUSE_WHEEL
00050       };
00051 
00052       struct MousePickRecord
00053       {
00054          MousePickType type;
00055          int x;
00056          int y;
00057          int wheel;
00058       };
00059 
00060 
00061       friend class DtPickableWidget;
00062       friend class DtPickableQuad;
00063       friend class DtPickableLine;
00064       friend class DtPickableTriangle;
00065 
00066       DtWidgetPicker(DtOverlayResourceProvider& provider);
00067       ~DtWidgetPicker();
00068 
00070       unsigned int numberOfWidgets() const;
00071 
00073       void releaseResources();
00074 
00076       DtPickableQuad* allocatePickableQuad();
00077 
00079       DtPickableTriangle* allocatePickableTriangle();
00080 
00082       DtPickableLine* allocatePickableLine();
00083 
00086       void pick(const MousePickRecord& rec,int w, int h, 
00087          bool geocentric, double cameraPosition[3] = 0, 
00088          double cameraMatrix[16] = 0);
00089 
00091       const DtPickableWidget* findWidgetFromLastPick() const;
00092 
00094       bool signalEvents();
00095 
00097       void clearEvents();
00098 
00099    protected:     
00100       
00103       DtPickableWidget* calculateWidgetFromLastPick();
00104 
00105       void debugRender();
00106 
00108       DtQuad* allocateQuad();
00109 
00111       DtLineSegment* allocateLine();
00112 
00114       DtTriangleProxy* allocateTriangle();
00115 
00117       unsigned int widgetCreated(DtPickableWidget*);
00118 
00120       void widgetToBeDeleted(DtPickableWidget*);
00121       
00122       bool allocateResources();     
00123 
00124    protected:
00125 
00126       DtOverlayResourceProvider& myProvider;
00127       DtFrameBufferObject* myFrameBuffer;
00128       DtPixelBufferObject* myPixelBuffer;
00129       DtTextureObject* mySampleTexture;
00130       DtQuadRenderer* myQuadRenderer;
00131       DtLineRenderer* myLineRenderer;
00132       DtTriangleRenderer* myTriangleRenderer;
00133 
00134       int myDesiredWidth;
00135       int myDesiredHeight;
00136       
00137       bool myPendingEventFlag;
00138       MousePickRecord myPendingEvent;      
00139 
00140       DtPickableWidget* myMouseFocusWidget;
00141 
00142       typedef boost::unordered_map<unsigned int, DtPickableWidget*> WidgetIdMap;
00143       WidgetIdMap myWidgetIds;
00144 
00145       unsigned int myFreeId;
00146 
00147    };
00148 }
00149 

Document ID: Generated on Fri Jun 29 16:33:32 EDT 2012 from SVN revision 116588
Copyright © 2005-2012 VT MÄK Inc. All Rights Reserved (www.mak.com)