r487: no message
[ctsim.git] / src / graph3dview.cpp
index d0d53edeb839b0293cd1e40b5147b0a7e0a7213c..9098e25faec12e0eb2eb4b37fc3f6680727ec96b 100644 (file)
@@ -9,7 +9,7 @@
 **  This is part of the CTSim program
 **  Copyright (c) 1983-2001 Kevin Rosenberg
 **
-**  $Id: graph3dview.cpp,v 1.10 2001/02/04 21:28:19 kevin Exp $
+**  $Id: graph3dview.cpp,v 1.11 2001/02/04 22:58:41 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
@@ -230,20 +230,7 @@ Graph3dFileView::CreateCanvas (wxFrame* parent)
   int width, height;
   parent->GetClientSize (&width, &height);
   
-#ifdef __WXMSW__
-  int *gl_attrib = NULL;
-#else
-  int gl_attrib[20] = { GLX_RGBA, GLX_RED_SIZE, 1, GLX_GREEN_SIZE, 1,
-    GLX_BLUE_SIZE, 1, GLX_DEPTH_SIZE, 1, GLX_DOUBLEBUFFER, None };
-#endif
-  
-  if(! m_bDoubleBuffer) {
-#ifdef __WXGTK__
-    gl_attrib[9] = None;
-#endif
-  }
-  
-  pCanvas = new Graph3dFileCanvas (this, parent, wxPoint(0, 0), wxSize(200, 200), 0, gl_attrib);
+  pCanvas = new Graph3dFileCanvas (this, parent, wxPoint(0, 0), wxSize(200, 200), 0);
   
   pCanvas->SetBackgroundColour(*wxWHITE);
   pCanvas->Clear();
@@ -280,10 +267,9 @@ Graph3dFileView::DrawSurface()
   unsigned int nx = GetDocument()->nx();
   unsigned int ny = GetDocument()->ny();
   glRotated (m_dZRotate, 0.0, 1.0, 0.0);
-  glTranslated (-static_cast<double>(nx) / 2, 0.0, -static_cast<double>(ny) / 2);
-  glRotated (m_dYRotate, 1.0, 0.0, 0.0);
   glRotated (m_dXRotate, 0.0, 0.0, 1.0);
-  
+  glRotated (m_dYRotate, 1.0, 0.0, 0.0);
+  glTranslated (-static_cast<double>(nx - 1) / 2, 0.0, -static_cast<double>(ny - 1) / 2);
   glCallList (DISPLAYLIST_SURFACE);
 }
 
@@ -305,17 +291,23 @@ Graph3dFileView::CreateDisplayList()
   double dIntensityScale = m_dColorScaleMax - m_dColorScaleMin;
   double actOffset = m_dGraphMin;
   double actScale = 0.4 * sqrt(nx*nx+ny*ny) / (m_dGraphMax - m_dGraphMin);
-  
+  double dXOffset = -(static_cast<double>(nx) - 1) / 2.;
+  double dYOffset = -(static_cast<double>(ny) - 1) / 2.;
+  dXOffset = 0;
+  dYOffset = 0;
+
   if (! m_bColor)
     glColor3f (1.0f, 1.0f, 1.0f);
   
-  for (unsigned ix = 0; ix < nx - 1; ix++) {
+  double dXPos = -dXOffset;
+  for (unsigned ix = 0; ix < nx - 1; ix++, dXPos++) {
+       double dYPos = -dYOffset;
     glBegin(GL_QUAD_STRIP);
     double p1[3], p2[3], p3[3];
     double n1[3]; 
-    p1[0] = ix;  p1[1] = actScale * (v[ix][0] + actOffset); p1[2] = 0;
-    p2[0] = ix+1; p2[1] = actScale * (v[ix+1][0] + actOffset); p2[2] = 0
-    p3[0] = ix; p3[1] = actScale * (v[ix][1] + actOffset); p3[2] = 1;
+    p1[0] = dXPos;  p1[1] = actScale * (v[ix][0] + actOffset); p1[2] = dYPos;
+    p2[0] = dXPos+1; p2[1] = actScale * (v[ix+1][0] + actOffset); p2[2] = dYPos
+    p3[0] = dXPos; p3[1] = actScale * (v[ix][1] + actOffset); p3[2] = dYPos + 1;
     CalculateVectorNormal (p1, p2, p3, &n1[0], &n1[1], &n1[2]);
     double dIntensity1, dIntensity2;
     if (m_bColor) {
@@ -337,9 +329,9 @@ Graph3dFileView::CreateDisplayList()
     glNormal3dv (n1);                                  
     double lastP[3];
     lastP[0] = ix; lastP[1] = actScale * (v[ix][0] + actOffset); lastP[2] = 0; 
-    for (unsigned int iy = 1; iy < ny - 1; iy++) {       
-      p1[0] = ix; p1[1] = actScale * (v[ix][iy] + actOffset); p1[2] = iy;
-      p2[0] = ix+1;  p2[1] = actScale * (v[ix+1][iy] + actOffset); p2[2] = iy;
+    for (unsigned int iy = 1; iy < ny - 1; iy++, dYPos++) {       
+      p1[0] = dXPos; p1[1] = actScale * (v[ix][iy] + actOffset); p1[2] = dYPos;
+      p2[0] = dXPos+1;  p2[1] = actScale * (v[ix+1][iy] + actOffset); p2[2] = dYPos;
       CalculateVectorNormal (p1, p2, lastP, &n1[0], &n1[1], &n1[2]);
       lastP[0] = p1[0]; lastP[1] = p1[1]; lastP[2] = p1[2];
       if (m_bColor) {
@@ -414,7 +406,9 @@ Graph3dFileView::OnDraw (wxDC* dc)
   if (! m_pCanvas->GetContext()) return;
 #endif
   
-  m_pCanvas->SwapBuffers();
+  if (! m_pCanvas)
+    return;
+  m_pCanvas->SetCurrent();
   Draw();
   std::ostringstream os;
   os << "Xangle=" << m_dXRotate << ", Yangle=" << m_dYRotate << ", Zangle=" << m_dZRotate;
@@ -823,8 +817,9 @@ END_EVENT_TABLE()
 
 
 Graph3dFileCanvas::Graph3dFileCanvas (Graph3dFileView* view, wxWindow *parent, const wxPoint& pos, 
-                                      const wxSize& size, long style, int* gl_attrib):
-wxGLCanvas (parent, -1, pos, size, style, _T("Graph3dCanvas"), gl_attrib), m_pView(view)
+                                      const wxSize& size, long style):
+wxGLCanvas (parent, -1, pos, size, style, _T("Graph3dCanvas")
+                       ), m_pView(view)
 {
   parent->Show (true);
   SetCurrent();