X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=contrib%2Fgtkgensurf%2Fview.cpp;h=12ac4d943a70cd46c6f720370d84fa64e14852fa;hb=2951e448a7f008f2438be4bd5feba2e4f4400eef;hp=9344a69e424d9c2914eb6c860d7dc3c6208feab0;hpb=33efc9089296fc4e5f54d43581a0db81576ba848;p=xonotic%2Fnetradiant.git diff --git a/contrib/gtkgensurf/view.cpp b/contrib/gtkgensurf/view.cpp index 9344a69e..12ac4d94 100644 --- a/contrib/gtkgensurf/view.cpp +++ b/contrib/gtkgensurf/view.cpp @@ -1,21 +1,21 @@ /* -GenSurf plugin for GtkRadiant -Copyright (C) 2001 David Hyde, Loki software and qeradiant.com + GenSurf plugin for GtkRadiant + Copyright (C) 2001 David Hyde, Loki software and qeradiant.com -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 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. + 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 -*/ + 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 + */ #include #include @@ -28,1152 +28,1134 @@ extern double backface; extern double dh, dv; extern double xmin,xmax,ymin,ymax,zmin,zmax; -double SF, SFG; // Graphics scale factors -double XLo, XHi, YLo, YHi, ZLo, ZHi; -double yaw,roll; -double elevation,azimuth; -int cxChar = 10, cyChar = 16; -int X0, Y0; -int X0G, Y0G; +double SF, SFG; // Graphics scale factors +double XLo, XHi, YLo, YHi, ZLo, ZHi; +double yaw,roll; +double elevation,azimuth; +int cxChar = 10, cyChar = 16; +int X0, Y0; +int X0G, Y0G; -static RECT rcCoord; // where X= Y= is drawn -static RECT rcGrid; // rectangle within rcLower that forms the border of the grid, plus +static Rect rcCoord; // where X= Y= is drawn +static Rect rcGrid; // rectangle within rcLower that forms the border of the grid, plus // a 3 pixel slop. -static RECT rcLower; // lower half of window, where plan view is drawn -static RECT rcUpper; // upper half or entire window, where isometric projection is drawn +static Rect rcLower; // lower half of window, where plan view is drawn +static Rect rcUpper; // upper half or entire window, where isometric projection is drawn -void vertex_selected (); -void texfont_init (); -void texfont_write (const char *text, float l, float t); +void vertex_selected(); +void texfont_init(); +void texfont_write( const char *text, int l, int t ); #define PEN_GRID { \ - g_GLTable.m_pfn_qglLineWidth (1); \ - g_GLTable.m_pfn_qglColor3f (0, 1, 0); \ - g_GLTable.m_pfn_qglDisable (GL_LINE_STIPPLE); } + g_GLTable.m_pfn_qglLineWidth( 1 ); \ + g_GLTable.m_pfn_qglColor3f( 0, 1, 0 ); \ + g_GLTable.m_pfn_qglDisable( GL_LINE_STIPPLE ); } #define PEN_RED { \ - g_GLTable.m_pfn_qglLineWidth (2); \ - g_GLTable.m_pfn_qglColor3f (1, 0, 0); \ - g_GLTable.m_pfn_qglDisable (GL_LINE_STIPPLE); } + g_GLTable.m_pfn_qglLineWidth( 2 ); \ + g_GLTable.m_pfn_qglColor3f( 1, 0, 0 ); \ + g_GLTable.m_pfn_qglDisable( GL_LINE_STIPPLE ); } #define PEN_DASH { \ - g_GLTable.m_pfn_qglLineWidth (1); \ - g_GLTable.m_pfn_qglColor3f (0, 1, 0); \ - g_GLTable.m_pfn_qglLineStipple (1, 0xF0F0); \ - g_GLTable.m_pfn_qglEnable (GL_LINE_STIPPLE); } - -#define DRAW_QUAD(rc,r,g,b) { \ - g_GLTable.m_pfn_qglBegin (GL_QUADS); \ - g_GLTable.m_pfn_qglColor3f (0,1,0); \ - g_GLTable.m_pfn_qglVertex2f (rc.left-1, rc.bottom); \ - g_GLTable.m_pfn_qglVertex2f (rc.right, rc.bottom); \ - g_GLTable.m_pfn_qglVertex2f (rc.right, rc.top+1); \ - g_GLTable.m_pfn_qglVertex2f (rc.left-1, rc.top+1); \ - g_GLTable.m_pfn_qglColor3f (r,g,b); \ - g_GLTable.m_pfn_qglVertex2f (rc.left, rc.bottom+1); \ - g_GLTable.m_pfn_qglVertex2f (rc.right-1, rc.bottom+1); \ - g_GLTable.m_pfn_qglVertex2f (rc.right-1, rc.top); \ - g_GLTable.m_pfn_qglVertex2f (rc.left, rc.top); \ - g_GLTable.m_pfn_qglEnd (); } + g_GLTable.m_pfn_qglLineWidth( 1 ); \ + g_GLTable.m_pfn_qglColor3f( 0, 1, 0 ); \ + g_GLTable.m_pfn_qglLineStipple( 1, 0xF0F0 ); \ + g_GLTable.m_pfn_qglEnable( GL_LINE_STIPPLE ); } + +#define DRAW_QUAD( rc,r,g,b ) { \ + g_GLTable.m_pfn_qglBegin( GL_QUADS ); \ + g_GLTable.m_pfn_qglColor3f( 0,1,0 ); \ + g_GLTable.m_pfn_qglVertex2i( rc.left - 1, rc.bottom ); \ + g_GLTable.m_pfn_qglVertex2i( rc.right, rc.bottom ); \ + g_GLTable.m_pfn_qglVertex2i( rc.right, rc.top + 1 ); \ + g_GLTable.m_pfn_qglVertex2i( rc.left - 1, rc.top + 1 ); \ + g_GLTable.m_pfn_qglColor3f( r,g,b ); \ + g_GLTable.m_pfn_qglVertex2i( rc.left, rc.bottom + 1 ); \ + g_GLTable.m_pfn_qglVertex2i( rc.right - 1, rc.bottom + 1 ); \ + g_GLTable.m_pfn_qglVertex2i( rc.right - 1, rc.top ); \ + g_GLTable.m_pfn_qglVertex2i( rc.left, rc.top ); \ + g_GLTable.m_pfn_qglEnd(); } #ifndef ISOMETRIC -double D=65536.; -double ct[3],st[3]; -double Hhi, Hlo, Vhi, Vlo; +double D = 65536.; +double ct[3],st[3]; +double Hhi, Hlo, Vhi, Vlo; #endif #define SUBDIVS 6 -void ShowPreview () -{ - if (Preview) - { - if (g_pWndPreview == NULL) - CreateViewWindow (); - gtk_widget_show (g_pWndPreview); +void ShowPreview(){ + if ( Preview ) { + if ( g_pWndPreview == NULL ) { + CreateViewWindow(); + } + gtk_widget_show( g_pWndPreview ); - UpdatePreview (true); - } - else - gtk_widget_hide (g_pWndPreview); + UpdatePreview( true ); + } + else{ + gtk_widget_hide( g_pWndPreview ); + } } -static void draw_preview () -{ - int width = g_pPreviewWidget->allocation.width, height = g_pPreviewWidget->allocation.height; - - g_GLTable.m_pfn_qglClearColor (0, 0, 0, 1); - g_GLTable.m_pfn_qglViewport (0, 0, width, height); - g_GLTable.m_pfn_qglMatrixMode (GL_PROJECTION); - g_GLTable.m_pfn_qglLoadIdentity (); - g_GLTable.m_pfn_qglOrtho (0, width, 0, height, -1, 1); - g_GLTable.m_pfn_qglClear (GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); - +static void draw_preview(){ + int width = g_pPreviewWidget->allocation.width, height = g_pPreviewWidget->allocation.height; + + g_GLTable.m_pfn_qglClearColor( 0, 0, 0, 1 ); + g_GLTable.m_pfn_qglViewport( 0, 0, width, height ); + g_GLTable.m_pfn_qglMatrixMode( GL_PROJECTION ); + g_GLTable.m_pfn_qglLoadIdentity(); + g_GLTable.m_pfn_qglOrtho( 0, width, 0, height, -1, 1 ); + g_GLTable.m_pfn_qglClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); + // ^Fishman - Antializing for the preview window. - if (Antialiasing) - { - g_GLTable.m_pfn_qglEnable(GL_BLEND); - g_GLTable.m_pfn_qglBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - g_GLTable.m_pfn_qglEnable(GL_LINE_SMOOTH); + if ( Antialiasing ) { + g_GLTable.m_pfn_qglEnable( GL_BLEND ); + g_GLTable.m_pfn_qglBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); + g_GLTable.m_pfn_qglEnable( GL_LINE_SMOOTH ); } else { - g_GLTable.m_pfn_qglDisable(GL_BLEND); - g_GLTable.m_pfn_qglDisable(GL_LINE_SMOOTH); + g_GLTable.m_pfn_qglDisable( GL_BLEND ); + g_GLTable.m_pfn_qglDisable( GL_LINE_SMOOTH ); } - texfont_init (); - - if (!ValidSurface ()) - return; - - rcUpper.left = 0; - rcUpper.right = width; - rcUpper.bottom = 0; - rcUpper.top = height; - rcLower.left = 0; - rcLower.right = width; - rcLower.bottom = 0; - rcLower.top = height; - - if (VertexMode) - { - rcUpper.bottom = rcUpper.top/2; - DrawPreview (rcUpper); - g_GLTable.m_pfn_qglBegin (GL_LINES); - g_GLTable.m_pfn_qglVertex2f (rcUpper.left, rcUpper.bottom); - g_GLTable.m_pfn_qglVertex2f (rcUpper.right, rcUpper.bottom); - g_GLTable.m_pfn_qglEnd (); - rcLower.top = rcUpper.bottom-1; - DrawGrid (rcLower); - rcCoord.left = rcLower.left; - rcCoord.right = rcLower.right; - rcCoord.bottom = rcLower.bottom; - rcCoord.top = rcLower.top; - rcCoord.top = rcCoord.bottom+cyChar; - rcCoord.right = rcCoord.left + 15*cxChar; - rcGrid.left = X0G - 3; - rcGrid.bottom = Y0G - 3; - rcGrid.right = X0G + (int)(SFG*(Hur-Hll)) + 3; - rcGrid.top = Y0G + (int)(SFG*(Vur-Vll)) + 3; - } - else - DrawPreview (rcUpper); + texfont_init(); + + if ( !ValidSurface() ) { + return; + } + + rcUpper.left = 0; + rcUpper.right = width; + rcUpper.bottom = 0; + rcUpper.top = height; + rcLower.left = 0; + rcLower.right = width; + rcLower.bottom = 0; + rcLower.top = height; + + if ( VertexMode ) { + rcUpper.bottom = rcUpper.top / 2; + DrawPreview( rcUpper ); + g_GLTable.m_pfn_qglBegin( GL_LINES ); + g_GLTable.m_pfn_qglVertex2i( rcUpper.left, rcUpper.bottom ); + g_GLTable.m_pfn_qglVertex2i( rcUpper.right, rcUpper.bottom ); + g_GLTable.m_pfn_qglEnd(); + rcLower.top = rcUpper.bottom - 1; + DrawGrid( rcLower ); + rcCoord.left = rcLower.left; + rcCoord.right = rcLower.right; + rcCoord.bottom = rcLower.bottom; + rcCoord.top = rcLower.top; + rcCoord.top = rcCoord.bottom + cyChar; + rcCoord.right = rcCoord.left + 15 * cxChar; + rcGrid.left = X0G - 3; + rcGrid.bottom = Y0G - 3; + rcGrid.right = X0G + (int)( SFG * ( Hur - Hll ) ) + 3; + rcGrid.top = Y0G + (int)( SFG * ( Vur - Vll ) ) + 3; + } + else{ + DrawPreview( rcUpper ); + } } -static gint expose (GtkWidget *widget, GdkEventExpose *event, gpointer data) -{ - if (event->count > 0) - return TRUE; +static gint expose( GtkWidget *widget, GdkEventExpose *event, gpointer data ){ + if ( event->count > 0 ) { + return TRUE; + } - if (!g_UIGtkTable.m_pfn_glwidget_make_current (g_pPreviewWidget)) - { - g_FuncTable.m_pfnSysPrintf ("GtkGenSurf: glMakeCurrent failed\n"); - return TRUE; - } + if ( !g_UIGtkTable.m_pfn_glwidget_make_current( g_pPreviewWidget ) ) { + g_FuncTable.m_pfnSysPrintf( "GtkGenSurf: glMakeCurrent failed\n" ); + return TRUE; + } - draw_preview (); + draw_preview(); - g_UIGtkTable.m_pfn_glwidget_swap_buffers (g_pPreviewWidget); - g_GLTable.m_pfn_QE_CheckOpenGLForErrors (); + g_UIGtkTable.m_pfn_glwidget_swap_buffers( g_pPreviewWidget ); + g_GLTable.m_pfn_QE_CheckOpenGLForErrors(); - return TRUE; + return TRUE; } -static void button_press (GtkWidget *widget, GdkEventButton *event, gpointer data) -{ - POINT pt = { (long)event->x, widget->allocation.height - (long)event->y }; - bool Selected; - double x,y; - int i, j, k, ks; - int i0, i1, j0, j1; - - if ((!VertexMode) || (event->button != 1)) - return; - - if (!PtInRect (&rcGrid,pt)) - { - gdk_beep (); - return; - } - - x = Hll + (pt.x-X0G)/SFG; - y = Vur - (pt.y-Y0G)/SFG; - i = (int)(floor( (x-Hll)/dh - 0.5) + 1); - j = (int)(floor( (y-Vll)/dv - 0.5) + 1); - if (i < 0 || i > NH || j < 0 || j > NV) - { - gdk_beep (); - return; - } - - if(!CanEdit(i,j)) - { - gdk_beep (); - return; - } - - // Control key pressed - add this point, or remove it if already selected - if ((event->state & GDK_CONTROL_MASK) != 0) - { - Selected = FALSE; - if (NumVerticesSelected) - { - for (k=0; kstate & GDK_SHIFT_MASK) != 0) - { - if (NumVerticesSelected) - { - NumVerticesSelected = 1; - i0 = min(Vertex[0].i, i); - i1 = max(Vertex[0].i, i); - j0 = min(Vertex[0].j, j); - j1 = max(Vertex[0].j, j); - for(i=i0; i<=i1; i++) - { - for(j=j0; j<=j1; j++) - { - if(i==0 && j==0 ) continue; - if(i==NH && j==0 ) continue; - if(i==0 && j==NV) continue; - if(i==NH && j==NV) continue; - if(i != Vertex[0].i || j != Vertex[0].j) - { - Vertex[NumVerticesSelected].i = i; - Vertex[NumVerticesSelected].j = j; - NumVerticesSelected++; - } - } - } - } - else - { - Vertex[0].i = i; - Vertex[0].j = j; - NumVerticesSelected = 1; - } - } - else - { - Vertex[0].i = i; - Vertex[0].j = j; - NumVerticesSelected = 1; - } - - vertex_selected (); +static void button_press( GtkWidget *widget, GdkEventButton *event, gpointer data ){ + Point pt = { (long)event->x, widget->allocation.height - (long)event->y }; + bool Selected; + double x,y; + int i, j, k, ks; + int i0, i1, j0, j1; + + if ( ( !VertexMode ) || ( event->button != 1 ) ) { + return; + } + + if ( !PtInRect( &rcGrid,pt ) ) { + gdk_beep(); + return; + } + + x = Hll + ( pt.x - X0G ) / SFG; + y = Vur - ( pt.y - Y0G ) / SFG; + i = (int)( floor( ( x - Hll ) / dh - 0.5 ) + 1 ); + j = (int)( floor( ( y - Vll ) / dv - 0.5 ) + 1 ); + if ( i < 0 || i > NH || j < 0 || j > NV ) { + gdk_beep(); + return; + } + + if ( !CanEdit( i,j ) ) { + gdk_beep(); + return; + } + + // Control key pressed - add this point, or remove it if already selected + if ( ( event->state & GDK_CONTROL_MASK ) != 0 ) { + Selected = FALSE; + if ( NumVerticesSelected ) { + for ( k = 0; k < NumVerticesSelected && !Selected; k++ ) + { + if ( Vertex[k].i == i && Vertex[k].j == j ) { + Selected = TRUE; + ks = k; + } + } + } + + // Already selected - unselect it. + if ( Selected ) { + if ( ks < NumVerticesSelected ) { + for ( k = ks; k < NumVerticesSelected - 1; k++ ) + { + Vertex[k].i = Vertex[k + 1].i; + Vertex[k].j = Vertex[k + 1].j; + } + NumVerticesSelected--; + } + } + else + { + Vertex[NumVerticesSelected].i = i; + Vertex[NumVerticesSelected].j = j; + NumVerticesSelected++; + } + } + else if ( ( event->state & GDK_SHIFT_MASK ) != 0 ) { + if ( NumVerticesSelected ) { + NumVerticesSelected = 1; + i0 = min( Vertex[0].i, i ); + i1 = max( Vertex[0].i, i ); + j0 = min( Vertex[0].j, j ); + j1 = max( Vertex[0].j, j ); + for ( i = i0; i <= i1; i++ ) + { + for ( j = j0; j <= j1; j++ ) + { + if ( i == 0 && j == 0 ) { + continue; + } + if ( i == NH && j == 0 ) { + continue; + } + if ( i == 0 && j == NV ) { + continue; + } + if ( i == NH && j == NV ) { + continue; + } + if ( i != Vertex[0].i || j != Vertex[0].j ) { + Vertex[NumVerticesSelected].i = i; + Vertex[NumVerticesSelected].j = j; + NumVerticesSelected++; + } + } + } + } + else + { + Vertex[0].i = i; + Vertex[0].j = j; + NumVerticesSelected = 1; + } + } + else + { + Vertex[0].i = i; + Vertex[0].j = j; + NumVerticesSelected = 1; + } + + vertex_selected(); } -static void motion (GtkWidget *widget, GdkEventMotion *event, gpointer data) -{ - POINT pt = { (long)event->x, widget->allocation.height - (long)event->y }; - - if (!VertexMode) - return; - - if (!g_UIGtkTable.m_pfn_glwidget_make_current (g_pPreviewWidget)) - { - g_FuncTable.m_pfnSysPrintf ("GtkGenSurf: glMakeCurrent failed\n"); - return; - } - - g_GLTable.m_pfn_qglEnable (GL_SCISSOR_TEST); - g_GLTable.m_pfn_qglScissor (rcCoord.left, rcCoord.bottom, rcCoord.right-rcCoord.left, - rcCoord.top-rcCoord.bottom); - g_GLTable.m_pfn_qglClear (GL_COLOR_BUFFER_BIT); - - if (PtInRect(&rcGrid,pt)) - { - GdkCursor *cursor = gdk_cursor_new (GDK_CROSS); - gdk_window_set_cursor (g_pWndPreview->window, cursor); - gdk_cursor_unref (cursor); - - char Text[32]; - int x, y; - - x = (int)(Hll + (pt.x-X0G)/SFG); - y = (int)(Vur - (pt.y-Y0G)/SFG); - switch(Plane) - { - case PLANE_XZ0: - case PLANE_XZ1: - sprintf(Text," x=%d, z=%d ",(int)(floor(x-0.5)+1.) ,(int)(floor(y-0.5)+1.) ); - break; - case PLANE_YZ0: - case PLANE_YZ1: - sprintf(Text," y=%d, z=%d ",(int)(floor(x-0.5)+1.) ,(int)(floor(y-0.5)+1.) ); - break; - default: - sprintf(Text," x=%d, y=%d ",(int)(floor(x-0.5)+1.) ,(int)(floor(y-0.5)+1.) ); - } - - texfont_write (Text, rcCoord.left, rcCoord.top); - } - else - { - gdk_window_set_cursor (g_pWndPreview->window, NULL); - } - - g_UIGtkTable.m_pfn_glwidget_swap_buffers (g_pPreviewWidget); - g_GLTable.m_pfn_QE_CheckOpenGLForErrors (); - g_GLTable.m_pfn_qglDisable (GL_SCISSOR_TEST); +static void motion( GtkWidget *widget, GdkEventMotion *event, gpointer data ){ + Point pt = { (long)event->x, widget->allocation.height - (long)event->y }; + + if ( !VertexMode ) { + return; + } + + if ( !g_UIGtkTable.m_pfn_glwidget_make_current( g_pPreviewWidget ) ) { + g_FuncTable.m_pfnSysPrintf( "GtkGenSurf: glMakeCurrent failed\n" ); + return; + } + + g_GLTable.m_pfn_qglEnable( GL_SCISSOR_TEST ); + g_GLTable.m_pfn_qglScissor( rcCoord.left, rcCoord.bottom, rcCoord.right - rcCoord.left, + rcCoord.top - rcCoord.bottom ); + g_GLTable.m_pfn_qglClear( GL_COLOR_BUFFER_BIT ); + + if ( PtInRect( &rcGrid,pt ) ) { + GdkCursor *cursor = gdk_cursor_new( GDK_CROSS ); + gdk_window_set_cursor( g_pWndPreview->window, cursor ); + gdk_cursor_unref( cursor ); + + char Text[32]; + int x, y; + + x = (int)( Hll + ( pt.x - X0G ) / SFG ); + y = (int)( Vur - ( pt.y - Y0G ) / SFG ); + switch ( Plane ) + { + case PLANE_XZ0: + case PLANE_XZ1: + sprintf( Text," x=%d, z=%d ",(int)( floor( x - 0.5 ) + 1. ),(int)( floor( y - 0.5 ) + 1. ) ); + break; + case PLANE_YZ0: + case PLANE_YZ1: + sprintf( Text," y=%d, z=%d ",(int)( floor( x - 0.5 ) + 1. ),(int)( floor( y - 0.5 ) + 1. ) ); + break; + default: + sprintf( Text," x=%d, y=%d ",(int)( floor( x - 0.5 ) + 1. ),(int)( floor( y - 0.5 ) + 1. ) ); + } + + texfont_write( Text, rcCoord.left, rcCoord.top ); + } + else + { + gdk_window_set_cursor( g_pWndPreview->window, NULL ); + } + + g_UIGtkTable.m_pfn_glwidget_swap_buffers( g_pPreviewWidget ); + g_GLTable.m_pfn_QE_CheckOpenGLForErrors(); + g_GLTable.m_pfn_qglDisable( GL_SCISSOR_TEST ); } -static gint preview_close (GtkWidget *widget, gpointer data) -{ - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (g_object_get_data (G_OBJECT (g_pWnd), "main_preview")), FALSE); - return TRUE; +static gint preview_close( GtkWidget *widget, gpointer data ){ + gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( g_object_get_data( G_OBJECT( g_pWnd ), "main_preview" ) ), FALSE ); + return TRUE; } -static void preview_focusout (GtkSpinButton *spin, GdkEventFocus *event, double *data) -{ - *data = DegreesToRadians ((double)(gtk_spin_button_get_value_as_int (spin) % 360)); - UpdatePreview (false); +static void preview_focusout( GtkSpinButton *spin, GdkEventFocus *event, double *data ){ + *data = DegreesToRadians( (double)( gtk_spin_button_get_value_as_int( spin ) % 360 ) ); + UpdatePreview( false ); } -static gint doublevariable_spinfocusout(GtkWidget* widget, GdkEventFocus* event, gpointer data) -{ - preview_focusout(GTK_SPIN_BUTTON(widget), event, reinterpret_cast(data)); - return FALSE; +static gint doublevariable_spinfocusout( GtkWidget* widget, GdkEventFocus* event, gpointer data ){ + preview_focusout( GTK_SPIN_BUTTON( widget ), event, reinterpret_cast( data ) ); + return FALSE; } -static void preview_spin (GtkAdjustment *adj, double *data) -{ - *data = DegreesToRadians (adj->value); - UpdatePreview (false); +static void preview_spin( GtkAdjustment *adj, double *data ){ + *data = DegreesToRadians( adj->value ); + UpdatePreview( false ); } -void CreateViewWindow () -{ - GtkWidget *dlg, *vbox, *hbox, *label, *spin, *frame; - GtkObject *adj; +void CreateViewWindow(){ + GtkWidget *label, *spin; #ifndef ISOMETRIC - elevation = PI/6.; - azimuth = PI/6.; + elevation = PI / 6.; + azimuth = PI / 6.; #endif - g_pWndPreview = dlg = gtk_window_new (GTK_WINDOW_TOPLEVEL); - gtk_window_set_title (GTK_WINDOW (dlg), "GtkGenSurf Preview"); - gtk_signal_connect (GTK_OBJECT (dlg), "delete_event", GTK_SIGNAL_FUNC (preview_close), NULL); - gtk_signal_connect (GTK_OBJECT (dlg), "destroy", GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL); - gtk_window_set_transient_for (GTK_WINDOW (dlg), GTK_WINDOW (g_pWnd)); - gtk_window_set_default_size (GTK_WINDOW (dlg), 300, 400); + auto dlg = g_pWndPreview = ui::Window( ui::window_type::TOP ); + gtk_window_set_title( GTK_WINDOW( dlg ), "GtkGenSurf Preview" ); + dlg.connect( "delete_event", G_CALLBACK( preview_close ), NULL ); + dlg.connect( "destroy", G_CALLBACK( gtk_widget_destroy ), NULL ); + gtk_window_set_transient_for( GTK_WINDOW( dlg ), GTK_WINDOW( g_pWnd ) ); + gtk_window_set_default_size( GTK_WINDOW( dlg ), 300, 400 ); - vbox = gtk_vbox_new (FALSE, 5); - gtk_widget_show (vbox); - gtk_container_add (GTK_CONTAINER (dlg), vbox); + auto vbox = ui::VBox( FALSE, 5 ); + vbox.show(); + dlg.add(vbox); #ifndef ISOMETRIC - hbox = gtk_hbox_new (TRUE, 5); - gtk_widget_show (hbox); - gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0); - gtk_container_set_border_width (GTK_CONTAINER (hbox), 3); - - label = gtk_label_new ("Elevation"); - gtk_widget_show (label); - gtk_misc_set_alignment (GTK_MISC (label), 1, 0.5); - gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0); - - adj = gtk_adjustment_new (30, -90, 90, 1, 10, 10); - gtk_signal_connect (adj, "value_changed", GTK_SIGNAL_FUNC (preview_spin), &elevation); - spin = gtk_spin_button_new (GTK_ADJUSTMENT (adj), 1, 0); - gtk_widget_show (spin); - gtk_box_pack_start (GTK_BOX (hbox), spin, FALSE, TRUE, 0); - g_signal_connect (G_OBJECT (spin), "focus_out_event", G_CALLBACK (doublevariable_spinfocusout), &elevation); - - adj = gtk_adjustment_new (30, 0, 359, 1, 10, 10); - gtk_signal_connect (adj, "value_changed", GTK_SIGNAL_FUNC (preview_spin), &azimuth); - spin = gtk_spin_button_new (GTK_ADJUSTMENT (adj), 1, 0); - gtk_widget_show (spin); - gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spin), TRUE); - gtk_box_pack_end (GTK_BOX (hbox), spin, FALSE, TRUE, 0); - - label = gtk_label_new ("Azimuth"); - gtk_widget_show (label); - gtk_misc_set_alignment (GTK_MISC (label), 1, 0.5); - gtk_box_pack_end (GTK_BOX (hbox), label, FALSE, TRUE, 0); - g_signal_connect (G_OBJECT (spin), "focus_out_event", G_CALLBACK (doublevariable_spinfocusout), &azimuth); + auto hbox = ui::HBox( TRUE, 5 ); + gtk_widget_show( hbox ); + vbox.pack_start( hbox, FALSE, TRUE, 0 ); + gtk_container_set_border_width( GTK_CONTAINER( hbox ), 3 ); + + label = ui::Label( "Elevation" ); + gtk_widget_show( label ); + gtk_misc_set_alignment( GTK_MISC( label ), 1, 0.5 ); + hbox.pack_start( label, FALSE, TRUE, 0 ); + + auto adj = ui::Adjustment( 30, -90, 90, 1, 10, 0 ); + adj.connect( "value_changed", G_CALLBACK( preview_spin ), &elevation ); + spin = ui::SpinButton( adj, 1, 0 ); + gtk_widget_show( spin ); + hbox.pack_start( spin, FALSE, TRUE, 0 ); + spin.connect( "focus_out_event", G_CALLBACK( doublevariable_spinfocusout ), &elevation ); + + adj = ui::Adjustment( 30, 0, 359, 1, 10, 0 ); + adj.connect( "value_changed", G_CALLBACK( preview_spin ), &azimuth ); + spin = ui::SpinButton( adj, 1, 0 ); + gtk_widget_show( spin ); + gtk_spin_button_set_wrap( GTK_SPIN_BUTTON( spin ), TRUE ); + hbox.pack_end(spin, FALSE, TRUE, 0); + + label = ui::Label( "Azimuth" ); + gtk_widget_show( label ); + gtk_misc_set_alignment( GTK_MISC( label ), 1, 0.5 ); + hbox.pack_end(label, FALSE, TRUE, 0); + spin.connect( "focus_out_event", G_CALLBACK( doublevariable_spinfocusout ), &azimuth ); #endif - frame = gtk_frame_new (NULL); - gtk_widget_show (frame); - gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN); - gtk_box_pack_start (GTK_BOX (vbox), frame, TRUE, TRUE, 0); + auto frame = ui::Frame(ui::null); + frame.show(); + gtk_frame_set_shadow_type( GTK_FRAME( frame ), GTK_SHADOW_IN ); + vbox.pack_start( frame, TRUE, TRUE, 0 ); - g_pPreviewWidget = g_UIGtkTable.m_pfn_glwidget_new (FALSE, NULL); + g_pPreviewWidget = g_UIGtkTable.m_pfn_glwidget_new( FALSE, NULL ); - gtk_widget_set_events (g_pPreviewWidget, GDK_EXPOSURE_MASK|GDK_BUTTON_PRESS_MASK|GDK_POINTER_MOTION_MASK); - gtk_signal_connect (GTK_OBJECT (g_pPreviewWidget), "expose_event", GTK_SIGNAL_FUNC (expose), NULL); - gtk_signal_connect (GTK_OBJECT (g_pPreviewWidget), "motion_notify_event", GTK_SIGNAL_FUNC (motion), NULL); - gtk_signal_connect (GTK_OBJECT (g_pPreviewWidget), "button_press_event", - GTK_SIGNAL_FUNC (button_press), NULL); + gtk_widget_set_events( g_pPreviewWidget, GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK | GDK_POINTER_MOTION_MASK ); + g_pPreviewWidget.connect( "expose_event", G_CALLBACK( expose ), NULL ); + g_pPreviewWidget.connect( "motion_notify_event", G_CALLBACK( motion ), NULL ); + g_pPreviewWidget.connect( "button_press_event", + G_CALLBACK( button_press ), NULL ); - gtk_widget_show (g_pPreviewWidget); - gtk_container_add (GTK_CONTAINER (frame), g_pPreviewWidget); + gtk_widget_show( g_pPreviewWidget ); + frame.add(ui::Widget(g_pPreviewWidget)); - if (Preview) - gtk_widget_show (g_pWndPreview); + if ( Preview ) { + gtk_widget_show( g_pWndPreview ); + } - UpdatePreview (true); + UpdatePreview( true ); } //============================================================= /* DrawPreview */ -void DrawPreview (RECT rc) -{ +void DrawPreview( Rect rc ){ #define COSXA 0.8660254037844 #define SINXA 0.5 #define COSYA 0.8660254037844 #define SINYA 0.5 - double L; - double x,y; - int i, j; - POINT pt[8]; - XYZ v[8]; - char axis[3][2] = {"X","Y","Z"}; + double L; + double x,y; + int i, j; + Point pt[8]; + XYZ v[8]; + char axis[3][2] = {"X","Y","Z"}; #ifndef ISOMETRIC - evaluate(); + evaluate(); #endif - XLo = xmin; - XHi = xmax; - YLo = ymin; - YHi = ymax; - ZLo = zmin; - ZHi = zmax; - switch (Plane) - { - case PLANE_XY1: - ZHi = backface; - break; - case PLANE_XZ0: - YLo = backface; - break; - case PLANE_XZ1: - YHi = backface; - break; - case PLANE_YZ0: - XLo = backface; - break; - case PLANE_YZ1: - XHi = backface; - break; - default: - ZLo = backface; - } - - - - GetScaleFactor(rc); + XLo = xmin; + XHi = xmax; + YLo = ymin; + YHi = ymax; + ZLo = zmin; + ZHi = zmax; + switch ( Plane ) + { + case PLANE_XY1: + ZHi = backface; + break; + case PLANE_XZ0: + YLo = backface; + break; + case PLANE_XZ1: + YHi = backface; + break; + case PLANE_YZ0: + XLo = backface; + break; + case PLANE_YZ1: + XHi = backface; + break; + default: + ZLo = backface; + } + + + + GetScaleFactor( rc ); //PEN_GRID - g_GLTable.m_pfn_qglLineWidth (1); - g_GLTable.m_pfn_qglColor3f (0, 1, 0); - g_GLTable.m_pfn_qglDisable (GL_LINE_STIPPLE); - - if (Decimate > 0 && (Game != QUAKE3 || UsePatches==0) ) - { - XYZ *vv; - - vv = (XYZ *) malloc(gNumNodes * sizeof(XYZ)); - for(i=0; i 0 && ( Game != QUAKE3 || UsePatches == 0 ) ) { + XYZ *vv; + + vv = (XYZ *) malloc( gNumNodes * sizeof( XYZ ) ); + for ( i = 0; i < gNumNodes; i++ ) + { + for ( j = 0; j < 3; j++ ) + vv[i].p[j] = (double)( gNode[i].p[j] ); + project( &vv[i] ); + } + + for ( i = 0; i < gNumTris; i++ ) + { + for ( j = 0; j < 3; j++ ) + Scale( rc,vv[gTri[i].v[j]],&pt[j] ); + + g_GLTable.m_pfn_qglBegin( GL_LINE_STRIP ); + g_GLTable.m_pfn_qglVertex2i( pt[0].x, pt[0].y ); + g_GLTable.m_pfn_qglVertex2i( pt[1].x, pt[1].y ); + g_GLTable.m_pfn_qglVertex2i( pt[2].x, pt[2].y ); + g_GLTable.m_pfn_qglVertex2i( pt[0].x, pt[0].y ); + g_GLTable.m_pfn_qglEnd(); + } + free( vv ); + } + else if ( Game == QUAKE3 && UsePatches != 0 ) { + int axis, ii, jj, k; + float u, v; + XYZ uv[3][3]; + XYZ Ctrl[3],out; + + switch ( Plane ) + { + case PLANE_XY0: + case PLANE_XY1: + k = 2; + break; + case PLANE_XZ0: + case PLANE_XZ1: + k = 1; + break; + default: + k = 0; + } + for ( i = 0; i < NH; i += 2 ) + { + for ( j = 0; j < NV; j += 2 ) + { + VectorCopy( xyz[i ][j ].p,uv[0][0].p ); + VectorCopy( xyz[i + 1][j ].p,uv[1][0].p ); + VectorCopy( xyz[i + 2][j ].p,uv[2][0].p ); + VectorCopy( xyz[i ][j + 1].p,uv[0][1].p ); + VectorCopy( xyz[i + 1][j + 1].p,uv[1][1].p ); + VectorCopy( xyz[i + 2][j + 1].p,uv[2][1].p ); + VectorCopy( xyz[i ][j + 2].p,uv[0][2].p ); + VectorCopy( xyz[i + 1][j + 2].p,uv[1][2].p ); + VectorCopy( xyz[i + 2][j + 2].p,uv[2][2].p ); + uv[1][0].p[k] = ( 4 * xyz[i + 1][j ].p[k] - xyz[i ][j ].p[k] - xyz[i + 2][j ].p[k] ) / 2; + uv[0][1].p[k] = ( 4 * xyz[i ][j + 1].p[k] - xyz[i ][j ].p[k] - xyz[i ][j + 2].p[k] ) / 2; + uv[2][1].p[k] = ( 4 * xyz[i + 2][j + 1].p[k] - xyz[i + 2][j ].p[k] - xyz[i + 2][j + 2].p[k] ) / 2; + uv[1][2].p[k] = ( 4 * xyz[i + 1][j + 2].p[k] - xyz[i ][j + 2].p[k] - xyz[i + 2][j + 2].p[k] ) / 2; + uv[1][1].p[k] = ( 16 * xyz[i + 1][j + 1].p[k] - + xyz[i ][j ].p[k] - 2 * xyz[i + 1][j ].p[k] - xyz[i + 2][j ].p[k] - + 2 * xyz[i ][j + 1].p[k] - 2 * xyz[i + 2][j + 1].p[k] - + xyz[i ][j + 2].p[k] - 2 * xyz[i + 1][j + 2].p[k] - xyz[i + 2][j + 2].p[k] ) / 4; + + for ( ii = 0; ii <= SUBDIVS; ii++ ) + { + if ( ii == 0 || ii == SUBDIVS / 2 || ii == SUBDIVS ) { + g_GLTable.m_pfn_qglLineWidth( 1 ); + g_GLTable.m_pfn_qglColor3f( 0, 1, 0 ); + g_GLTable.m_pfn_qglDisable( GL_LINE_STIPPLE ); + // PEN_GRID + } + else + { + g_GLTable.m_pfn_qglLineWidth( 1 ); + g_GLTable.m_pfn_qglColor3f( 0, 1, 0 ); + g_GLTable.m_pfn_qglLineStipple( 1, 0xF0F0 ); + g_GLTable.m_pfn_qglEnable( GL_LINE_STIPPLE ); + // PEN_DASH + } + + u = (float)( ii ) / (float)( SUBDIVS ); + for ( jj = 0; jj < 3; jj++ ) + { + for ( axis = 0; axis < 3; axis++ ) { - g_GLTable.m_pfn_qglLineWidth (1); - g_GLTable.m_pfn_qglColor3f (0, 1, 0); - g_GLTable.m_pfn_qglDisable (GL_LINE_STIPPLE); - // PEN_GRID + float a, b, c; + float qA, qB, qC; + a = (float)uv[0][jj].p[axis]; + b = (float)uv[1][jj].p[axis]; + c = (float)uv[2][jj].p[axis]; + qA = a - 2 * b + c; + qB = 2 * b - 2 * a; + qC = a; + Ctrl[jj].p[axis] = qA * u * u + qB * u + qC; } - else + } + VectorCopy( Ctrl[0].p,out.p ); + project( &out ); + Scale( rc,out,&pt[0] ); + g_GLTable.m_pfn_qglBegin( GL_LINE_STRIP ); + g_GLTable.m_pfn_qglVertex2i( pt[0].x, pt[0].y ); + for ( jj = 1; jj <= SUBDIVS; jj++ ) + { + v = (float)( jj ) / (float)( SUBDIVS ); + for ( axis = 0 ; axis < 3 ; axis++ ) { - g_GLTable.m_pfn_qglLineWidth (1); - g_GLTable.m_pfn_qglColor3f (0, 1, 0); - g_GLTable.m_pfn_qglLineStipple (1, 0xF0F0); - g_GLTable.m_pfn_qglEnable (GL_LINE_STIPPLE); - // PEN_DASH + float a, b, c; + float qA, qB, qC; + a = (float)Ctrl[0].p[axis]; + b = (float)Ctrl[1].p[axis]; + c = (float)Ctrl[2].p[axis]; + qA = a - 2 * b + c; + qB = 2 * b - 2 * a; + qC = a; + out.p[axis] = qA * v * v + qB * v + qC; } - - u = (float)(ii)/(float)(SUBDIVS); - for(jj=0; jj<3; jj++) - { - for(axis=0; axis<3; axis++) - { - float a, b, c; - float qA, qB, qC; - a = (float)uv[0][jj].p[axis]; - b = (float)uv[1][jj].p[axis]; - c = (float)uv[2][jj].p[axis]; - qA = a - 2 * b + c; - qB = 2 * b - 2 * a; - qC = a; - Ctrl[jj].p[axis] = qA * u * u + qB * u + qC; - } - } - VectorCopy(Ctrl[0].p,out.p); - project(&out); - Scale(rc,out,&pt[0]); - g_GLTable.m_pfn_qglBegin (GL_LINE_STRIP); - g_GLTable.m_pfn_qglVertex2f (pt[0].x, pt[0].y); - for(jj=1; jj<=SUBDIVS; jj++) - { - v = (float)(jj)/(float)(SUBDIVS); - for (axis = 0 ; axis < 3 ; axis++) - { - float a, b, c; - float qA, qB, qC; - a = (float)Ctrl[0].p[axis]; - b = (float)Ctrl[1].p[axis]; - c = (float)Ctrl[2].p[axis]; - qA = a - 2 * b + c; - qB = 2 * b - 2 * a; - qC = a; - out.p[axis] = qA * v * v + qB * v + qC; - } - project(&out); - Scale(rc,out,&pt[0]); - g_GLTable.m_pfn_qglVertex2f (pt[0].x, pt[0].y); - } - g_GLTable.m_pfn_qglEnd (); - } - for(jj=0; jj<=SUBDIVS; jj++) - { - if(jj==0 || jj==SUBDIVS/2 || jj==SUBDIVS) + project( &out ); + Scale( rc,out,&pt[0] ); + g_GLTable.m_pfn_qglVertex2i( pt[0].x, pt[0].y ); + } + g_GLTable.m_pfn_qglEnd(); + } + for ( jj = 0; jj <= SUBDIVS; jj++ ) + { + if ( jj == 0 || jj == SUBDIVS / 2 || jj == SUBDIVS ) { + g_GLTable.m_pfn_qglLineWidth( 1 ); + g_GLTable.m_pfn_qglColor3f( 0, 1, 0 ); + g_GLTable.m_pfn_qglDisable( GL_LINE_STIPPLE ); + // PEN_GRID + } + else + { + g_GLTable.m_pfn_qglLineWidth( 1 ); + g_GLTable.m_pfn_qglColor3f( 0, 1, 0 ); + g_GLTable.m_pfn_qglLineStipple( 1, 0xF0F0 ); + g_GLTable.m_pfn_qglEnable( GL_LINE_STIPPLE ); + // PEN_DASH + } + + v = (float)( jj ) / (float)( SUBDIVS ); + for ( ii = 0; ii < 3; ii++ ) + { + for ( axis = 0; axis < 3; axis++ ) { - g_GLTable.m_pfn_qglLineWidth (1); - g_GLTable.m_pfn_qglColor3f (0, 1, 0); - g_GLTable.m_pfn_qglDisable (GL_LINE_STIPPLE); - // PEN_GRID + float a, b, c; + float qA, qB, qC; + a = (float)uv[ii][0].p[axis]; + b = (float)uv[ii][1].p[axis]; + c = (float)uv[ii][2].p[axis]; + qA = a - 2 * b + c; + qB = 2 * b - 2 * a; + qC = a; + Ctrl[ii].p[axis] = qA * v * v + qB * v + qC; } - else + } + VectorCopy( Ctrl[0].p,out.p ); + project( &out ); + Scale( rc,out,&pt[0] ); + g_GLTable.m_pfn_qglBegin( GL_LINE_STRIP ); + g_GLTable.m_pfn_qglVertex2i( pt[0].x, pt[0].y ); + for ( ii = 1; ii <= SUBDIVS; ii++ ) + { + u = (float)( ii ) / (float)( SUBDIVS ); + for ( axis = 0 ; axis < 3 ; axis++ ) { - g_GLTable.m_pfn_qglLineWidth (1); - g_GLTable.m_pfn_qglColor3f (0, 1, 0); - g_GLTable.m_pfn_qglLineStipple (1, 0xF0F0); - g_GLTable.m_pfn_qglEnable (GL_LINE_STIPPLE); - // PEN_DASH + float a, b, c; + float qA, qB, qC; + a = (float)Ctrl[0].p[axis]; + b = (float)Ctrl[1].p[axis]; + c = (float)Ctrl[2].p[axis]; + qA = a - 2 * b + c; + qB = 2 * b - 2 * a; + qC = a; + out.p[axis] = qA * u * u + qB * u + qC; } + project( &out ); + Scale( rc,out,&pt[0] ); + g_GLTable.m_pfn_qglVertex2i( pt[0].x, pt[0].y ); + } + g_GLTable.m_pfn_qglEnd(); + } + } + } + } + else + { + for ( i = 0; i <= NH; i++ ) + { + Scale( rc,xyz[i][0],&pt[0] ); + g_GLTable.m_pfn_qglBegin( GL_LINE_STRIP ); + g_GLTable.m_pfn_qglVertex2i( pt[0].x, pt[0].y ); + for ( j = 1; j <= NV; j++ ) + { + Scale( rc,xyz[i][j],&pt[0] ); + g_GLTable.m_pfn_qglVertex2i( pt[0].x, pt[0].y ); + } + g_GLTable.m_pfn_qglEnd(); + } + for ( j = 0; j <= NV; j++ ) + { + Scale( rc,xyz[0][j],&pt[0] ); + g_GLTable.m_pfn_qglBegin( GL_LINE_STRIP ); + g_GLTable.m_pfn_qglVertex2i( pt[0].x, pt[0].y ); + for ( i = 1; i <= NH; i++ ) + { + Scale( rc,xyz[i][j],&pt[0] ); + g_GLTable.m_pfn_qglVertex2i( pt[0].x, pt[0].y ); + } + g_GLTable.m_pfn_qglEnd(); + } + } - v = (float)(jj)/(float)(SUBDIVS); - for(ii=0; ii<3; ii++) - { - for(axis=0; axis<3; axis++) - { - float a, b, c; - float qA, qB, qC; - a = (float)uv[ii][0].p[axis]; - b = (float)uv[ii][1].p[axis]; - c = (float)uv[ii][2].p[axis]; - qA = a - 2 * b + c; - qB = 2 * b - 2 * a; - qC = a; - Ctrl[ii].p[axis] = qA * v * v + qB * v + qC; - } - } - VectorCopy(Ctrl[0].p,out.p); - project(&out); - Scale(rc,out,&pt[0]); - g_GLTable.m_pfn_qglBegin (GL_LINE_STRIP); - g_GLTable.m_pfn_qglVertex2f (pt[0].x, pt[0].y); - for(ii=1; ii<=SUBDIVS; ii++) - { - u = (float)(ii)/(float)(SUBDIVS); - for (axis = 0 ; axis < 3 ; axis++) - { - float a, b, c; - float qA, qB, qC; - a = (float)Ctrl[0].p[axis]; - b = (float)Ctrl[1].p[axis]; - c = (float)Ctrl[2].p[axis]; - qA = a - 2 * b + c; - qB = 2 * b - 2 * a; - qC = a; - out.p[axis] = qA * u * u + qB * u + qC; - } - project(&out); - Scale(rc,out,&pt[0]); - g_GLTable.m_pfn_qglVertex2f (pt[0].x, pt[0].y); - } - g_GLTable.m_pfn_qglEnd (); - } - } - } - } - else - { - for(i=0; i<=NH; i++) - { - Scale(rc,xyz[i][0],&pt[0]); - g_GLTable.m_pfn_qglBegin (GL_LINE_STRIP); - g_GLTable.m_pfn_qglVertex2f (pt[0].x, pt[0].y); - for(j=1; j<=NV; j++) - { - Scale(rc,xyz[i][j],&pt[0]); - g_GLTable.m_pfn_qglVertex2f (pt[0].x, pt[0].y); - } - g_GLTable.m_pfn_qglEnd (); - } - for(j=0; j<=NV; j++) - { - Scale(rc,xyz[0][j],&pt[0]); - g_GLTable.m_pfn_qglBegin (GL_LINE_STRIP); - g_GLTable.m_pfn_qglVertex2f (pt[0].x, pt[0].y); - for(i=1; i<=NH; i++) - { - Scale(rc,xyz[i][j],&pt[0]); - g_GLTable.m_pfn_qglVertex2f (pt[0].x, pt[0].y); - } - g_GLTable.m_pfn_qglEnd (); - } - } - - if(Game!=QUAKE3 || UsePatches==0) - { - // Draw lines from corners to base, and lines around base - for(i=0; i<=NH; i+=NH) - { - for(j=0; j<=NV; j+=NV) - { - VectorCopy(xyz[i][j].p, v[0].p); - switch(Plane) - { - case PLANE_XZ0: - case PLANE_XZ1: - v[0].p[1] = backface; - break; - case PLANE_YZ0: - case PLANE_YZ1: - v[0].p[0] = backface; - break; - default: - v[0].p[2] = backface; - } - Scale(rc,xyz[i][j],&pt[0]); + if ( Game != QUAKE3 || UsePatches == 0 ) { + // Draw lines from corners to base, and lines around base + for ( i = 0; i <= NH; i += NH ) + { + for ( j = 0; j <= NV; j += NV ) + { + VectorCopy( xyz[i][j].p, v[0].p ); + switch ( Plane ) + { + case PLANE_XZ0: + case PLANE_XZ1: + v[0].p[1] = backface; + break; + case PLANE_YZ0: + case PLANE_YZ1: + v[0].p[0] = backface; + break; + default: + v[0].p[2] = backface; + } + Scale( rc,xyz[i][j],&pt[0] ); #ifndef ISOMETRIC - project(&v[0]); + project( &v[0] ); #endif - Scale(rc,v[0],&pt[1]); - g_GLTable.m_pfn_qglBegin (GL_LINE_STRIP); - g_GLTable.m_pfn_qglVertex2f (pt[0].x, pt[0].y); - g_GLTable.m_pfn_qglVertex2f (pt[1].x, pt[1].y); - g_GLTable.m_pfn_qglEnd (); - } - } - VectorCopy(xyz[ 0][ 0].p, v[0].p); - VectorCopy(xyz[NH][ 0].p, v[1].p); - VectorCopy(xyz[NH][NV].p, v[2].p); - VectorCopy(xyz[ 0][NV].p, v[3].p); - switch(Plane) - { - case PLANE_XZ0: - case PLANE_XZ1: - v[0].p[1] = backface;; - v[1].p[1] = v[0].p[1]; - v[2].p[1] = v[0].p[1]; - v[3].p[1] = v[0].p[1]; - break; - case PLANE_YZ0: - case PLANE_YZ1: - v[0].p[0] = backface; - v[1].p[0] = v[0].p[0]; - v[2].p[0] = v[0].p[0]; - v[3].p[0] = v[0].p[0]; - break; - default: - v[0].p[2] = backface; - v[1].p[2] = v[0].p[2]; - v[2].p[2] = v[0].p[2]; - v[3].p[2] = v[0].p[2]; - } + Scale( rc,v[0],&pt[1] ); + g_GLTable.m_pfn_qglBegin( GL_LINE_STRIP ); + g_GLTable.m_pfn_qglVertex2i( pt[0].x, pt[0].y ); + g_GLTable.m_pfn_qglVertex2i( pt[1].x, pt[1].y ); + g_GLTable.m_pfn_qglEnd(); + } + } + VectorCopy( xyz[ 0][ 0].p, v[0].p ); + VectorCopy( xyz[NH][ 0].p, v[1].p ); + VectorCopy( xyz[NH][NV].p, v[2].p ); + VectorCopy( xyz[ 0][NV].p, v[3].p ); + switch ( Plane ) + { + case PLANE_XZ0: + case PLANE_XZ1: + v[0].p[1] = backface;; + v[1].p[1] = v[0].p[1]; + v[2].p[1] = v[0].p[1]; + v[3].p[1] = v[0].p[1]; + break; + case PLANE_YZ0: + case PLANE_YZ1: + v[0].p[0] = backface; + v[1].p[0] = v[0].p[0]; + v[2].p[0] = v[0].p[0]; + v[3].p[0] = v[0].p[0]; + break; + default: + v[0].p[2] = backface; + v[1].p[2] = v[0].p[2]; + v[2].p[2] = v[0].p[2]; + v[3].p[2] = v[0].p[2]; + } #ifndef ISOMETRIC - project(&v[3]); + project( &v[3] ); #endif - Scale(rc,v[3],&pt[0]); - g_GLTable.m_pfn_qglBegin (GL_LINE_STRIP); - g_GLTable.m_pfn_qglVertex2f (pt[0].x, pt[0].y); - for(i=0; i<3; i++) - { + Scale( rc,v[3],&pt[0] ); + g_GLTable.m_pfn_qglBegin( GL_LINE_STRIP ); + g_GLTable.m_pfn_qglVertex2i( pt[0].x, pt[0].y ); + for ( i = 0; i < 3; i++ ) + { #ifndef ISOMETRIC - project(&v[i]); + project( &v[i] ); #endif - Scale(rc,v[i],&pt[1]); - g_GLTable.m_pfn_qglVertex2f (pt[1].x, pt[1].y); - } - g_GLTable.m_pfn_qglVertex2f (pt[0].x, pt[0].y); - g_GLTable.m_pfn_qglEnd (); - } + Scale( rc,v[i],&pt[1] ); + g_GLTable.m_pfn_qglVertex2i( pt[1].x, pt[1].y ); + } + g_GLTable.m_pfn_qglVertex2i( pt[0].x, pt[0].y ); + g_GLTable.m_pfn_qglEnd(); + } - g_GLTable.m_pfn_qglLineWidth (1); - g_GLTable.m_pfn_qglColor3f (0, 1, 0); - g_GLTable.m_pfn_qglDisable (GL_LINE_STIPPLE); + g_GLTable.m_pfn_qglLineWidth( 1 ); + g_GLTable.m_pfn_qglColor3f( 0, 1, 0 ); + g_GLTable.m_pfn_qglDisable( GL_LINE_STIPPLE ); #ifdef ISOMETRIC - // Draw small depiction of coordinate axes - pt[0].x = rc.right - cxChar - cxChar/2 - cyChar; - pt[0].y = rc.bottom - cyChar/2 - cxChar/2; - pt[1].x = pt[0].x + (int)(cyChar*COSXA); - pt[1].y = pt[0].y - (int)(cyChar*SINXA); - MoveToEx(hdc,pt[0].x,pt[0].y,NULL); - LineTo(hdc,pt[1].x,pt[1].y); - SetTextAlign(hdc,TA_LEFT | TA_TOP); - TextOut(hdc,pt[1].x,pt[1].y-cyChar/2,"X",1); - pt[1].x = pt[0].x - (int)(cyChar*COSYA); - pt[1].y = pt[0].y - (int)(cyChar*SINYA); - MoveToEx(hdc,pt[0].x,pt[0].y,NULL); - LineTo(hdc,pt[1].x,pt[1].y); - SetTextAlign(hdc,TA_RIGHT | TA_TOP); - TextOut(hdc,pt[1].x,pt[1].y-cyChar/2,"Y",1); - pt[1].x = pt[0].x; - pt[1].y = pt[0].y - cyChar; - MoveToEx(hdc,pt[0].x,pt[0].y,NULL); - LineTo(hdc,pt[1].x,pt[1].y); - SetTextAlign(hdc,TA_CENTER | TA_BOTTOM); - TextOut(hdc,pt[1].x,pt[1].y,"Z",1); + // Draw small depiction of coordinate axes + pt[0].x = rc.right - cxChar - cxChar / 2 - cyChar; + pt[0].y = rc.bottom - cyChar / 2 - cxChar / 2; + pt[1].x = pt[0].x + (int)( cyChar * COSXA ); + pt[1].y = pt[0].y - (int)( cyChar * SINXA ); + MoveToEx( hdc,pt[0].x,pt[0].y,NULL ); + LineTo( hdc,pt[1].x,pt[1].y ); + SetTextAlign( hdc,TA_LEFT | TA_TOP ); + TextOut( hdc,pt[1].x,pt[1].y - cyChar / 2,"X",1 ); + pt[1].x = pt[0].x - (int)( cyChar * COSYA ); + pt[1].y = pt[0].y - (int)( cyChar * SINYA ); + MoveToEx( hdc,pt[0].x,pt[0].y,NULL ); + LineTo( hdc,pt[1].x,pt[1].y ); + SetTextAlign( hdc,TA_RIGHT | TA_TOP ); + TextOut( hdc,pt[1].x,pt[1].y - cyChar / 2,"Y",1 ); + pt[1].x = pt[0].x; + pt[1].y = pt[0].y - cyChar; + MoveToEx( hdc,pt[0].x,pt[0].y,NULL ); + LineTo( hdc,pt[1].x,pt[1].y ); + SetTextAlign( hdc,TA_CENTER | TA_BOTTOM ); + TextOut( hdc,pt[1].x,pt[1].y,"Z",1 ); #else - L = 2*(double)cyChar/SF; - v[0].p[0] = 0.; - v[0].p[1] = 0.; - v[0].p[2] = 0.; - v[1].p[0] = L; - v[1].p[1] = 0.; - v[1].p[2] = 0.; - v[2].p[0] = 0.; - v[2].p[1] = L; - v[2].p[2] = 0.; - v[3].p[0] = 0.; - v[3].p[1] = 0.; - v[3].p[2] = L; - for(i=0; i<=3; i++) - { - project(&v[i]); - Scale(rc,v[i],&pt[i]); - } - for(i=1; i<=3; i++) - { - pt[i].x += -pt[0].x + rc.right - 2*cyChar; - pt[i].y += -pt[0].y + rc.bottom + 2*cyChar; - } - pt[0].x = rc.right - 2*cyChar; - pt[0].y = rc.bottom + 2*cyChar; - - for(i=1; i<=3; i++) - { - g_GLTable.m_pfn_qglBegin (GL_LINES); - g_GLTable.m_pfn_qglVertex2f (pt[0].x, pt[0].y); - g_GLTable.m_pfn_qglVertex2f (pt[i].x, pt[i].y); - g_GLTable.m_pfn_qglEnd (); - texfont_write (axis[i-1], pt[i].x-cxChar/2,pt[i].y+cyChar/2); - } + L = 2 * (double)cyChar / SF; + v[0].p[0] = 0.; + v[0].p[1] = 0.; + v[0].p[2] = 0.; + v[1].p[0] = L; + v[1].p[1] = 0.; + v[1].p[2] = 0.; + v[2].p[0] = 0.; + v[2].p[1] = L; + v[2].p[2] = 0.; + v[3].p[0] = 0.; + v[3].p[1] = 0.; + v[3].p[2] = L; + for ( i = 0; i <= 3; i++ ) + { + project( &v[i] ); + Scale( rc,v[i],&pt[i] ); + } + for ( i = 1; i <= 3; i++ ) + { + pt[i].x += -pt[0].x + rc.right - 2 * cyChar; + pt[i].y += -pt[0].y + rc.bottom + 2 * cyChar; + } + pt[0].x = rc.right - 2 * cyChar; + pt[0].y = rc.bottom + 2 * cyChar; + + for ( i = 1; i <= 3; i++ ) + { + g_GLTable.m_pfn_qglBegin( GL_LINES ); + g_GLTable.m_pfn_qglVertex2i( pt[0].x, pt[0].y ); + g_GLTable.m_pfn_qglVertex2i( pt[i].x, pt[i].y ); + g_GLTable.m_pfn_qglEnd(); + texfont_write( axis[i - 1], pt[i].x - cxChar / 2,pt[i].y + cyChar / 2 ); + } #endif - // Draw player model's bounding box in red to give a sense of scale - // PEN_RED - g_GLTable.m_pfn_qglLineWidth (2); - g_GLTable.m_pfn_qglColor3f (1, 0, 0); - g_GLTable.m_pfn_qglDisable (GL_LINE_STIPPLE); - - switch(Plane) - { - case PLANE_XY1: - v[0].p[0] = xyz[NH/2][NV/2].p[0] + PlayerBox[Game].x[0]; - v[0].p[1] = xyz[NH/2][NV/2].p[1] + PlayerBox[Game].y[0]; - v[0].p[2] = zmin - PlayerBox[Game].z[0] - 32; - break; - case PLANE_XZ0: - v[0].p[0] = (xmax+xmin)/2 + PlayerBox[Game].x[0]; - v[0].p[1] = ymax+64; - v[0].p[2] = zmin; - break; - case PLANE_XZ1: - v[0].p[0] = (xmax+xmin)/2 + PlayerBox[Game].x[0]; - v[0].p[1] = ymin-64; - v[0].p[2] = zmin; - break; - case PLANE_YZ0: - v[0].p[0] = xmax+64; - v[0].p[1] = (ymax+ymin)/2 + PlayerBox[Game].y[0]; - v[0].p[2] = zmin; - break; - case PLANE_YZ1: - v[0].p[0] = xmin-64; - v[0].p[1] = (ymax+ymin)/2 + PlayerBox[Game].y[0]; - v[0].p[2] = zmin; - break; - default: - // Put player on a node. For patches, put on an even numbered node. - if(Game==QUAKE3 && UsePatches!=0) - { - if(NH > 2) - x = Hll + dh * (int)(NH/2 + 1); - else - x = Hll + dh * (int)(NH/2); - if(NV > 2) - y = Vll + dv * (int)(NV/2 + 1); - else - y = Vll + dv * (int)(NV/2); - } - else - { - if(NH > 1) - x = Hll + dh * (int)(NH/2); - else - x = Hll + dh/2; - if(NV > 1) - y = Vll + dv * (int)(NV/2); - else - y = Vll + dv/2; - } + // Draw player model's bounding box in red to give a sense of scale + // PEN_RED + g_GLTable.m_pfn_qglLineWidth( 2 ); + g_GLTable.m_pfn_qglColor3f( 1, 0, 0 ); + g_GLTable.m_pfn_qglDisable( GL_LINE_STIPPLE ); + + switch ( Plane ) + { + case PLANE_XY1: + v[0].p[0] = xyz[NH / 2][NV / 2].p[0] + PlayerBox[Game].x[0]; + v[0].p[1] = xyz[NH / 2][NV / 2].p[1] + PlayerBox[Game].y[0]; + v[0].p[2] = zmin - PlayerBox[Game].z[0] - 32; + break; + case PLANE_XZ0: + v[0].p[0] = ( xmax + xmin ) / 2 + PlayerBox[Game].x[0]; + v[0].p[1] = ymax + 64; + v[0].p[2] = zmin; + break; + case PLANE_XZ1: + v[0].p[0] = ( xmax + xmin ) / 2 + PlayerBox[Game].x[0]; + v[0].p[1] = ymin - 64; + v[0].p[2] = zmin; + break; + case PLANE_YZ0: + v[0].p[0] = xmax + 64; + v[0].p[1] = ( ymax + ymin ) / 2 + PlayerBox[Game].y[0]; + v[0].p[2] = zmin; + break; + case PLANE_YZ1: + v[0].p[0] = xmin - 64; + v[0].p[1] = ( ymax + ymin ) / 2 + PlayerBox[Game].y[0]; + v[0].p[2] = zmin; + break; + default: + // Put player on a node. For patches, put on an even numbered node. + if ( Game == QUAKE3 && UsePatches != 0 ) { + if ( NH > 2 ) { + x = Hll + dh * (int)( NH / 2 + 1 ); + } + else{ + x = Hll + dh * (int)( NH / 2 ); + } + if ( NV > 2 ) { + y = Vll + dv * (int)( NV / 2 + 1 ); + } + else{ + y = Vll + dv * (int)( NV / 2 ); + } + } + else + { + if ( NH > 1 ) { + x = Hll + dh * (int)( NH / 2 ); + } + else{ + x = Hll + dh / 2; + } + if ( NV > 1 ) { + y = Vll + dv * (int)( NV / 2 ); + } + else{ + y = Vll + dv / 2; + } + } // x = (Hll+Hur)/2.; // y = (Vll+Vur)/2.; - v[0].p[0] = x + PlayerBox[Game].x[0]; - v[0].p[1] = y + PlayerBox[Game].y[0]; - v[0].p[2] = PlayerStartZ(x,y) + PlayerBox[Game].z[0] + 8; // add 8 cuz I'm a pessimist - } - v[1].p[0] = v[0].p[0] + PlayerBox[Game].x[1] - PlayerBox[Game].x[0]; - v[1].p[1] = v[0].p[1]; - v[1].p[2] = v[0].p[2]; - v[2].p[0] = v[1].p[0]; - v[2].p[1] = v[1].p[1] + PlayerBox[Game].y[1] - PlayerBox[Game].y[0]; - v[2].p[2] = v[0].p[2]; - v[3].p[0] = v[0].p[0]; - v[3].p[1] = v[2].p[1]; - v[3].p[2] = v[0].p[2]; - VectorCopy(v[0].p,v[4].p); - VectorCopy(v[1].p,v[5].p); - VectorCopy(v[2].p,v[6].p); - VectorCopy(v[3].p,v[7].p); - v[4].p[2] += PlayerBox[Game].z[1] - PlayerBox[Game].z[0]; - v[5].p[2] += PlayerBox[Game].z[1] - PlayerBox[Game].z[0]; - v[6].p[2] += PlayerBox[Game].z[1] - PlayerBox[Game].z[0]; - v[7].p[2] += PlayerBox[Game].z[1] - PlayerBox[Game].z[0]; - for(i=0; i<=7; i++) - { + v[0].p[0] = x + PlayerBox[Game].x[0]; + v[0].p[1] = y + PlayerBox[Game].y[0]; + v[0].p[2] = PlayerStartZ( x,y ) + PlayerBox[Game].z[0] + 8; // add 8 cuz I'm a pessimist + } + v[1].p[0] = v[0].p[0] + PlayerBox[Game].x[1] - PlayerBox[Game].x[0]; + v[1].p[1] = v[0].p[1]; + v[1].p[2] = v[0].p[2]; + v[2].p[0] = v[1].p[0]; + v[2].p[1] = v[1].p[1] + PlayerBox[Game].y[1] - PlayerBox[Game].y[0]; + v[2].p[2] = v[0].p[2]; + v[3].p[0] = v[0].p[0]; + v[3].p[1] = v[2].p[1]; + v[3].p[2] = v[0].p[2]; + VectorCopy( v[0].p,v[4].p ); + VectorCopy( v[1].p,v[5].p ); + VectorCopy( v[2].p,v[6].p ); + VectorCopy( v[3].p,v[7].p ); + v[4].p[2] += PlayerBox[Game].z[1] - PlayerBox[Game].z[0]; + v[5].p[2] += PlayerBox[Game].z[1] - PlayerBox[Game].z[0]; + v[6].p[2] += PlayerBox[Game].z[1] - PlayerBox[Game].z[0]; + v[7].p[2] += PlayerBox[Game].z[1] - PlayerBox[Game].z[0]; + for ( i = 0; i <= 7; i++ ) + { #ifndef ISOMETRIC - project(&v[i]); + project( &v[i] ); #endif - Scale(rc,v[i],&pt[i]); - } - g_GLTable.m_pfn_qglBegin (GL_LINE_STRIP); - g_GLTable.m_pfn_qglVertex2f (pt[3].x, pt[3].y); - for(i=0; i<=3; i++) - g_GLTable.m_pfn_qglVertex2f (pt[i].x, pt[i].y); - g_GLTable.m_pfn_qglEnd (); - g_GLTable.m_pfn_qglBegin (GL_LINE_STRIP); - g_GLTable.m_pfn_qglVertex2f (pt[7].x, pt[7].y); - for(i=4; i<=7; i++) - g_GLTable.m_pfn_qglVertex2f (pt[i].x, pt[i].y); - g_GLTable.m_pfn_qglEnd (); - g_GLTable.m_pfn_qglBegin (GL_LINES); - for(i=0; i<=3; i++) - { - g_GLTable.m_pfn_qglVertex2f (pt[i].x,pt[i].y); - g_GLTable.m_pfn_qglVertex2f (pt[i+4].x,pt[i+4].y); - } - g_GLTable.m_pfn_qglEnd (); - - g_GLTable.m_pfn_qglLineWidth (1); - g_GLTable.m_pfn_qglColor3f (0, 1, 0); - g_GLTable.m_pfn_qglDisable (GL_LINE_STIPPLE); + Scale( rc,v[i],&pt[i] ); + } + g_GLTable.m_pfn_qglBegin( GL_LINE_STRIP ); + g_GLTable.m_pfn_qglVertex2i( pt[3].x, pt[3].y ); + for ( i = 0; i <= 3; i++ ) + g_GLTable.m_pfn_qglVertex2i( pt[i].x, pt[i].y ); + g_GLTable.m_pfn_qglEnd(); + g_GLTable.m_pfn_qglBegin( GL_LINE_STRIP ); + g_GLTable.m_pfn_qglVertex2i( pt[7].x, pt[7].y ); + for ( i = 4; i <= 7; i++ ) + g_GLTable.m_pfn_qglVertex2i( pt[i].x, pt[i].y ); + g_GLTable.m_pfn_qglEnd(); + g_GLTable.m_pfn_qglBegin( GL_LINES ); + for ( i = 0; i <= 3; i++ ) + { + g_GLTable.m_pfn_qglVertex2i( pt[i].x,pt[i].y ); + g_GLTable.m_pfn_qglVertex2i( pt[i + 4].x,pt[i + 4].y ); + } + g_GLTable.m_pfn_qglEnd(); + + g_GLTable.m_pfn_qglLineWidth( 1 ); + g_GLTable.m_pfn_qglColor3f( 0, 1, 0 ); + g_GLTable.m_pfn_qglDisable( GL_LINE_STIPPLE ); } //============================================================= -void DrawGrid(RECT rc) -{ - int i, j, k; - double h,w,x,y; - POINT pt[2]; - RECT rcBox; - - w = (double)(rc.right-rc.left+1) - cxChar; - h = (double)(rc.top-rc.bottom+1) - cxChar - cyChar; - - SFG = w/(Hur-Hll); - SFG = min(SFG, h/(Vur-Vll)); - - // Center drawing - X0G = (int)(rc.left + rc.right - (int)(SFG*(Hur-Hll)))/2; - Y0G = (int)(rc.top + rc.bottom + cyChar - (int)(SFG*(Vur-Vll)))/2; - - g_GLTable.m_pfn_qglLineWidth (2); - g_GLTable.m_pfn_qglColor3f (0, 1, 0); - g_GLTable.m_pfn_qglDisable (GL_LINE_STIPPLE); - - pt[0].y = Y0G; - pt[1].y = Y0G + (int)(SFG*(Vur-Vll)); - g_GLTable.m_pfn_qglBegin (GL_LINES); - for(i=0; i<=NH; i++) - { - x = Hll + i * dh; - pt[0].x = X0G + (int)(SFG*(x-Hll)); - g_GLTable.m_pfn_qglVertex2f(pt[0].x, pt[0].y); - g_GLTable.m_pfn_qglVertex2f(pt[0].x, pt[1].y); - } - g_GLTable.m_pfn_qglEnd (); - pt[0].x = X0G; - pt[1].x = X0G + (int)(SFG*(Hur-Hll)); - g_GLTable.m_pfn_qglBegin (GL_LINES); - for(i=0; i<=NV; i++) - { - y = Vll + i * dv; - pt[0].y = Y0G + (int)(SFG*(Vur-y)); - g_GLTable.m_pfn_qglVertex2f (pt[0].x,pt[0].y); - g_GLTable.m_pfn_qglVertex2f (pt[1].x,pt[0].y); - } - g_GLTable.m_pfn_qglEnd (); - - g_GLTable.m_pfn_qglLineWidth (1); - - // Draw axes - pt[0].x = rc.right - cyChar - cxChar - cyChar/2; - pt[0].y = rc.bottom + cyChar/2; - pt[1].x = pt[0].x + cyChar; - pt[1].y = pt[0].y; - g_GLTable.m_pfn_qglBegin (GL_LINES); - g_GLTable.m_pfn_qglVertex2f (pt[0].x,pt[0].y); - g_GLTable.m_pfn_qglVertex2f (pt[1].x,pt[1].y); - g_GLTable.m_pfn_qglEnd (); - switch(Plane) - { - case PLANE_YZ0: - case PLANE_YZ1: - texfont_write ("Y", pt[1].x, pt[1].y+cyChar/2); - break; - default: - texfont_write ("X", pt[1].x, pt[1].y+cyChar/2); - } - pt[1].x = pt[0].x; - pt[1].y = pt[0].y + cyChar; - g_GLTable.m_pfn_qglBegin (GL_LINES); - g_GLTable.m_pfn_qglVertex2f (pt[0].x,pt[0].y); - g_GLTable.m_pfn_qglVertex2f (pt[1].x,pt[1].y); - g_GLTable.m_pfn_qglEnd (); - switch(Plane) - { - case PLANE_XY0: - case PLANE_XY1: - texfont_write ("Y", pt[1].x-cyChar/2, pt[1].y+cyChar); - break; - default: - texfont_write ("Z", pt[1].x-cyChar/2, pt[1].y+cyChar); - } - - // Denote fixed points with a 5x5 red rectangle - for(i=0; i<=NH; i++) - { - for(j=0; j<=NV; j++) - { - if(xyz[i][j].fixed) - { - x = Hll + i*dh; - y = Vll + j*dv; - rcBox.left = X0G + (int)(SFG*(x-Hll)) - 2; - rcBox.top = Y0G + (int)(SFG*(Vur-y)) + 2; - rcBox.right = rcBox.left + 5; - rcBox.bottom = rcBox.top - 5; - - DRAW_QUAD (rcBox, 1,0,0); - } - } - } - - // Denote currently selected point with a 5x5 green rectangle - if (NumVerticesSelected) - { - for(k=0; kp[2]; // yaw - xa = ct[0]*x - st[0]*z; - za = st[0]*x + ct[0]*z; + xa = ct[0] * x - st[0] * z; + za = st[0] * x + ct[0] * z; // roll - x = ct[1]*xa + st[1]*y; - ya = ct[1]*y - st[1]*xa; + x = ct[1] * xa + st[1] * y; + ya = ct[1] * y - st[1] * xa; // azimuth - z = ct[2]*za - st[2]*ya; - y = ct[2]*ya + st[2]*za; + z = ct[2] * za - st[2] * ya; + y = ct[2] * ya + st[2] * za; // horizontal and vertical projections: // v->pp[0] = D*x/z; @@ -1207,28 +1189,29 @@ void project(XYZ *v) // v->projected_v = -v->projected_v * persp/(v->projected_z-persp); } /*=======================================================================*/ -void evaluate() -{ +void evaluate(){ int i, j; XYZ v[4]; - - if(elevation > PI) elevation -= 2.*PI; - roll = elevation * sin(azimuth); - yaw = 1.5*PI + elevation*cos(azimuth); + + if ( elevation > PI ) { + elevation -= 2. * PI; + } + roll = elevation * sin( azimuth ); + yaw = 1.5 * PI + elevation*cos( azimuth ); // Find angles from midpoint to viewpoint: - st[0] = sin(yaw); - st[1] = sin(roll); - st[2] = sin(azimuth); - ct[0] = cos(yaw); - ct[1] = cos(roll); - ct[2] = cos(azimuth); - - for(i=0; i<=NH; i++) + st[0] = sin( yaw ); + st[1] = sin( roll ); + st[2] = sin( azimuth ); + ct[0] = cos( yaw ); + ct[1] = cos( roll ); + ct[2] = cos( azimuth ); + + for ( i = 0; i <= NH; i++ ) { - for(j=0; j<=NV; j++) + for ( j = 0; j <= NV; j++ ) { - project(&xyz[i][j]); + project( &xyz[i][j] ); } } @@ -1236,23 +1219,23 @@ void evaluate() Hlo = Hhi; Vhi = xyz[0][0].pp[1]; Vlo = Vhi; - for(i=0; i<=NH; i++) + for ( i = 0; i <= NH; i++ ) { - for(j=0; j<=NV; j++) + for ( j = 0; j <= NV; j++ ) { - Hlo = min(Hlo,xyz[i][j].pp[0]); - Hhi = max(Hhi,xyz[i][j].pp[0]); - Vlo = min(Vlo,xyz[i][j].pp[1]); - Vhi = max(Vhi,xyz[i][j].pp[1]); + Hlo = min( Hlo,xyz[i][j].pp[0] ); + Hhi = max( Hhi,xyz[i][j].pp[0] ); + Vlo = min( Vlo,xyz[i][j].pp[1] ); + Vhi = max( Vhi,xyz[i][j].pp[1] ); } } // Include backface in min-max - VectorCopy(xyz[ 0][ 0].p,v[0].p); - VectorCopy(xyz[NH][ 0].p,v[1].p); - VectorCopy(xyz[NH][NV].p,v[2].p); - VectorCopy(xyz[ 0][NV].p,v[3].p); - switch(Plane) + VectorCopy( xyz[ 0][ 0].p,v[0].p ); + VectorCopy( xyz[NH][ 0].p,v[1].p ); + VectorCopy( xyz[NH][NV].p,v[2].p ); + VectorCopy( xyz[ 0][NV].p,v[3].p ); + switch ( Plane ) { case PLANE_XZ0: case PLANE_XZ1: @@ -1274,13 +1257,13 @@ void evaluate() v[2].p[2] = v[0].p[2]; v[3].p[2] = v[0].p[2]; } - for(i=0; i<=3; i++) + for ( i = 0; i <= 3; i++ ) { - project(&v[i]); - Hlo = min(Hlo,v[i].pp[0]); - Hhi = max(Hhi,v[i].pp[0]); - Vlo = min(Vlo,v[i].pp[1]); - Vhi = max(Vhi,v[i].pp[1]); + project( &v[i] ); + Hlo = min( Hlo,v[i].pp[0] ); + Hhi = max( Hhi,v[i].pp[0] ); + Vlo = min( Vlo,v[i].pp[1] ); + Vhi = max( Vhi,v[i].pp[1] ); } }