X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=src%2Fgraph3dview.h;fp=src%2Fgraph3dview.h;h=2d2bc792159fbc1ba4cc825733fe16b3b6e50701;hb=ba8635d790ee847d9746c6da24b60bd4cb6d9116;hp=0000000000000000000000000000000000000000;hpb=d3a6bf4aa2ccd32ed7671d1d97777dfc414df51d;p=ctsim.git diff --git a/src/graph3dview.h b/src/graph3dview.h new file mode 100644 index 0000000..2d2bc79 --- /dev/null +++ b/src/graph3dview.h @@ -0,0 +1,126 @@ +/***************************************************************************** +** FILE IDENTIFICATION +** +** Name: graph3dview.h +** Purpose: Header file for 3d graph view +** Programmer: Kevin Rosenberg +** Date Started: Jan 2001 +** +** This is part of the CTSim program +** Copyright (c) 1983-2001 Kevin Rosenberg +** +** $Id: graph3dview.h,v 1.1 2001/01/30 07:32:13 kevin Exp $ +** +** This program is free software; you can redistribute it and/or modify +** it under the terms of the GNU General Public License (version 2) as +** published by the Free Software Foundation. +** +** This program 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 General Public License for more details. +** +** You should have received a copy of the GNU General Public License +** along with this program; if not, write to the Free Software +** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +******************************************************************************/ + +#if !wxUSE_GLCANVAS +#error Please set wxUSE_GLCANVAS to 1 in setup.h. +#endif + +#include "wx/timer.h" +#include "wx/glcanvas.h" + +#include +#include + + +typedef GLfloat glTripleFloat[3]; + +class Graph3dFileCanvas; +class Graph3dFileView : public wxView +{ + friend Graph3dFileCanvas; + +private: + DECLARE_DYNAMIC_CLASS(Graph3dFileView) + DECLARE_EVENT_TABLE() + + wxMenu* m_pFileMenu; + GLfloat m_dXRotate; + GLfloat m_dYRotate; + std::vector m_vecVerts; + std::vector m_vecNorms; + GLint m_nVerts; + GLboolean m_bUseVertexArrays; + GLboolean m_bDoubleBuffer; + GLboolean m_bSmooth; + GLboolean m_bLighting; + + void Draw(); + void DrawSurface(); + void InitMaterials(); + void InitGL(); + + Graph3dFileCanvas* m_pCanvas; + Graph3dFileCanvas *CreateCanvas (wxFrame* parent); + +#if CTSIM_MDI + wxDocMDIChildFrame* m_pFrame; + wxDocMDIChildFrame* CreateChildFrame(wxDocument *doc, wxView *view); +#else + wxDocChildFrame* m_pFrame; + wxDocChildFrame* CreateChildFrame(wxDocument *doc, wxView *view); +#endif + + wxWindow* getFrameForChild() +#if CTSIM_MDI + { return theApp->getMainFrame(); } +#else + { return m_pFrame; } +#endif + +public: + Graph3dFileView(); + virtual ~Graph3dFileView(); + void canvasClosed() + { m_pCanvas = NULL; m_pFrame = NULL; } + + bool OnCreate(wxDocument *doc, long flags); + void OnDraw(wxDC* dc); + void OnUpdate(wxView *sender, wxObject *hint = NULL); + bool OnClose (bool deleteWindow = true); + void OnProperties (wxCommandEvent& event); + +#if CTSIM_MDI + wxDocMDIChildFrame* getFrame() { return m_pFrame; } +#else + wxDocChildFrame* getFrame() { return m_pFrame; } +#endif + + Graph3dFileDocument* GetDocument() + { return dynamic_cast(wxView::GetDocument()); } +}; + + +class Graph3dFileCanvas: public wxGLCanvas +{ +private: + DECLARE_EVENT_TABLE() + + void Reshape (int width, int height); + Graph3dFileView* m_pView; + +public: + Graph3dFileCanvas (Graph3dFileView* view, wxWindow *parent, const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, long style = 0, int* gl_attrib = NULL); + virtual ~Graph3dFileCanvas(); + + virtual void OnDraw(wxDC& dc); + void OnSize(wxSizeEvent& event); + void OnEraseBackground(wxEraseEvent& event); + void OnChar(wxKeyEvent& event); + void OnMouseEvent(wxMouseEvent& event); + void setView (Graph3dFileView* pView) { m_pView = pView; } +};