/* Plot Graphic Library, a C++/MFC charting library. Copyright (C) 2001 de Halleux Jonathan This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Contact: de Halleux Jonathan, pglinfo@patabelgos.org */ // ObjectGL.h: interface for the CPGLObject class. // ////////////////////////////////////////////////////////////////////// #if !defined(AFX_OBJECTGL_H__4DACBB82_9EFC_11D4_8A95_D4B14EEC3D7F__INCLUDED_) #define AFX_OBJECTGL_H__4DACBB82_9EFC_11D4_8A95_D4B14EEC3D7F__INCLUDED_ #include "PGLColor.h" // Added by ClassView #include "PGLView.h" #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include <math.h> #include "PGLView.h" /*! \defgroup PGLObjectGroup Graphical Objects \ingroup PGLGroup */ /*! \brief A base class to create graphic objects. \ingroup PGLObjectGroup This is the base class for all graphical objects. It controls common carateristics of all graphical objects such as <ul> <li> selection state (selected - not selected) <li> visibility state (visible - hidden) <li> an identification number (for selection purpose) <li> a name <li> a color </ul> */ class PGL_EXT_CLASS CPGLObject : public CObject { public: DECLARE_SERIAL(CPGLObject); /*! \name Members:*/ //@{ //! default constructor CPGLObject(const CPGLColor& _color=CPGLColor()); //! copy constructor CPGLObject(const CPGLObject& o); //! assignement constructor CPGLObject& operator = (const CPGLObject& o); //! returns a pointer to a copy of the object virtual CPGLObject* MakeCopy() { CPGLObject* pCopy=new CPGLObject(*this); return pCopy; }; //! destructor virtual ~CPGLObject(){ delete[] m_extent; }; //! virtual function to override in derived classes virtual void UpdateExtent(CPGLView* pView) { ASSERT_VALID(pView); m_bNeedUpdateExtent=FALSE;} //! tells object to update it limits next time getextent is called void PostUpdateExtent() { m_bNeedUpdateExtent=TRUE;}; //! returns true if object needs to update it limits BOOL NeedUpdateExtent() { return m_bNeedUpdateExtent;}; //! returns extents of objects... virtual double* GetExtent(CPGLView* pView) { return m_extent;}; //! adds context menu items... virtual void AddContextMenuItems(CMenu* pMenu){}; //! adds the object property page to the property dialog virtual void AddPropertyPage(CPropertySheet* pPropSheet); //! adds the object in the tree virtual HTREEITEM AddPropTree(CTreeCtrl* pTree, HTREEITEM hParent); //! createa Property sheet dialog, adds all parent property page and DoModal... virtual void ShowModalPropertySheet(){}; //! virtual function to override in derived classes //! writing EPS file virtual void PlotGfx(gfxinterface::CGfxInterface& gfx); //! returns TRUE if \_ID is the identification number of the object, FALSE otherwize BOOL CheckID(UINT _ID) { return (m_uID==_ID);}; //! returns the identification number of the object UINT GetID() const { return m_uID;}; //! set the object as selected void Select() {m_bSelected=TRUE;}; //! set the object as not selected void Deselect() { m_bSelected=FALSE;}; //! returns TRUE if the object is selected, FALSE otherwise BOOL IsSelected() { return m_bSelected;}; //! switch selection state (ex: selected $\rightarrow$ not selected) void SwitchSelectionState() { m_bSelected=!m_bSelected;}; //! set the object as visible void Show(BOOL show = TRUE) { m_bVisible=show;}; //! set the object as hidden void Hide() { m_bVisible=FALSE;}; //! returns TRUE if the object is visible, FALSE otherwise BOOL IsVisible() const { return m_bVisible;}; //! switch visibility state (ex: visible $\rightarrow$ hidden) void SwitchVisibilityState() { m_bVisible=!m_bVisible;}; //! sets the name of the object void SetName(const CString& _name) { m_sName=_name;}; //! returns the name CString GetName() { return m_sName;}; //! sets red component of object's color (must be in [0,1]) void SetRed(float red) { m_color.SetRed(red);}; //! sets green component of object's color (must be in [0,1]) void SetGreen(float green) { m_color.SetGreen(green);}; //! sets blue component of object's color (must be in [0,1]) void SetBlue(float blue) { m_color.SetBlue(blue);}; //! sets alpha component of object's color (must be in [0,1]) void SetAlpha(float alpha) { m_color.SetAlpha(alpha);}; //! sets the object's color void SetColor(const CPGLColor& _color) { m_color=_color;}; //! sets the object's color void SetColor(float red=1.0,float green=1.0,float blue=1.0,float alpha=1.0) { m_color=CPGLColor(red,green,blue,alpha);}; //! returns the object color const CPGLColor& GetColor() const { return m_color;}; //! sets the selection color (this is a static property) static void SetSelectionColor(const CPGLColor& _selectionColor) { m_selectionColor=_selectionColor;}; //! gets the selection color static CPGLColor GetSelectionColor() { return m_selectionColor;}; //! returns the bitmap. HBITMAP GetBitmap() { return m_hBitmap;}; //! Serialization void Serialize( CArchive& archive ); //! Debuggin functions #ifdef _DEBUG virtual void Dump( CDumpContext& dc ) const; virtual void AssertValid() const; // Override #endif //@} protected: //! extent of the object left, right, bottom, top double* m_extent; //! Load the bitmap void LoadBitmap(DWORD ID_RESSOURCE); private: /*! \name Class Private Parameters*/ //@{ //! a small bitmap describing the object... HBITMAP m_hBitmap; //! visibility state BOOL m_bVisible; //! selection state BOOL m_bSelected; //! identification number UINT m_uID; //! object's name CString m_sName; //! object's color CPGLColor m_color; //! object needs to update it's limits BOOL m_bNeedUpdateExtent; //! next identification number to assign static UINT m_uNextID; //! the selection color static CPGLColor m_selectionColor; //@} }; #endif // !defined(AFX_OBJECTGL_H__4DACBB82_9EFC_11D4_8A95_D4B14EEC3D7F__INCLUDED_)