Commit 355fc48e authored by jean-pierre charras's avatar jean-pierre charras

3d-viwer: minor clean code

parent d44521fe
...@@ -24,6 +24,34 @@ ...@@ -24,6 +24,34 @@
#include "bitmaps.h" #include "bitmaps.h"
// -----------------
// helper function (from wxWidgets, opengl/cube.cpp sample
// -----------------
void CheckGLError()
{
GLenum errLast = GL_NO_ERROR;
for ( ;; )
{
GLenum err = glGetError();
if ( err == GL_NO_ERROR )
return;
// normally the error is reset by the call to glGetError() but if
// glGetError() itself returns an error, we risk looping forever here
// so check that we get a different error than the last time
if ( err == errLast )
{
wxLogError(wxT("OpenGL error state couldn't be reset."));
return;
}
errLast = err;
wxLogError(wxT("OpenGL error %d"), err);
}
}
/* /*
* Pcb3D_GLCanvas implementation * Pcb3D_GLCanvas implementation
*/ */
...@@ -519,7 +547,7 @@ void Pcb3D_GLCanvas::InitGL() ...@@ -519,7 +547,7 @@ void Pcb3D_GLCanvas::InitGL()
{ {
// Ratio width / height of the window display // Ratio width / height of the window display
double ratio_HV = (double) size.x / size.y; double ratio_HV = (double) size.x / size.y;
// Initialize Projection Matrix for Perspective View // Initialize Projection Matrix for Perspective View
gluPerspective( 45.0 * g_Parm_3D_Visu.m_Zoom, ratio_HV, 1, 10 ); gluPerspective( 45.0 * g_Parm_3D_Visu.m_Zoom, ratio_HV, 1, 10 );
} }
...@@ -538,6 +566,8 @@ void Pcb3D_GLCanvas::InitGL() ...@@ -538,6 +566,8 @@ void Pcb3D_GLCanvas::InitGL()
// Setup light souces: // Setup light souces:
SetLights(); SetLights();
CheckGLError();
} }
...@@ -603,7 +633,7 @@ void Pcb3D_GLCanvas::TakeScreenshot( wxCommandEvent& event ) ...@@ -603,7 +633,7 @@ void Pcb3D_GLCanvas::TakeScreenshot( wxCommandEvent& event )
GLint x; GLint x;
GLint y; GLint y;
} viewport; } viewport;
// Build image from the 3D buffer // Build image from the 3D buffer
wxWindowUpdateLocker noUpdates( this ); wxWindowUpdateLocker noUpdates( this );
glGetIntegerv( GL_VIEWPORT, (GLint*) &viewport ); glGetIntegerv( GL_VIEWPORT, (GLint*) &viewport );
......
...@@ -20,6 +20,8 @@ ...@@ -20,6 +20,8 @@
#error Please set wxUSE_GLCANVAS to 1 in setup.h. #error Please set wxUSE_GLCANVAS to 1 in setup.h.
#endif #endif
extern void CheckGLError();
static void Draw3D_FilledCircle( double posx, double posy, double rayon, static void Draw3D_FilledCircle( double posx, double posy, double rayon,
double hole_rayon, double zpos ); double hole_rayon, double zpos );
static void Draw3D_FilledSegment( double startx, double starty, static void Draw3D_FilledSegment( double startx, double starty,
...@@ -348,9 +350,8 @@ GLuint Pcb3D_GLCanvas::CreateDrawGL_List() ...@@ -348,9 +350,8 @@ GLuint Pcb3D_GLCanvas::CreateDrawGL_List()
glEndList(); glEndList();
/* Test for errors */ /* Test for errors */
GLenum err = glGetError(); CheckGLError();
if( err != GL_NO_ERROR )
DisplayError( this, wxT( "Error in GL commands" ) );
return m_gllist; return m_gllist;
} }
...@@ -786,8 +787,6 @@ void D_PAD::Draw3D( Pcb3D_GLCanvas* glcanvas ) ...@@ -786,8 +787,6 @@ void D_PAD::Draw3D( Pcb3D_GLCanvas* glcanvas )
delta_cx, delta_cy, delta_cx, delta_cy,
xc, yc; xc, yc;
int angle, delta_angle; int angle, delta_angle;
int coord[4][2];
double fcoord[8][2], f_hole_coord[8][2];
double scale; double scale;
double zpos; double zpos;
wxPoint shape_pos; wxPoint shape_pos;
...@@ -917,33 +916,18 @@ void D_PAD::Draw3D( Pcb3D_GLCanvas* glcanvas ) ...@@ -917,33 +916,18 @@ void D_PAD::Draw3D( Pcb3D_GLCanvas* glcanvas )
break; break;
case PAD_RECT: case PAD_RECT:
case PAD_TRAPEZOID: case PAD_TRAPEZOID:
{ {
int ddx, ddy; wxPoint coord[5];
ddx = m_DeltaSize.x >> 1; wxRealPoint fcoord[8], f_hole_coord[8];
ddy = m_DeltaSize.y >> 1; BuildPadPolygon( coord, wxSize(0,0), angle );
coord[0][0] = -dx - ddy;
coord[0][1] = +dy + ddx;
coord[1][0] = -dx + ddy;
coord[1][1] = -dy - ddx;
coord[2][0] = +dx - ddy;
coord[2][1] = -dy + ddx;
coord[3][0] = +dx + ddy;
coord[3][1] = +dy - ddx;
for( ii = 0; ii < 4; ii++ ) for( ii = 0; ii < 4; ii++ )
{ {
RotatePoint( &coord[ii][0], &coord[ii][1], angle ); coord[ii].x += ux0;
coord[ii][0] += ux0; coord[ii].y += uy0;
coord[ii][1] += uy0;
ll = ii * 2; ll = ii * 2;
fcoord[ll][0] = coord[ii][0] *scale; fcoord[ll].x = coord[ii].x *scale;
fcoord[ll][1] = coord[ii][1] *scale; fcoord[ll].y = coord[ii].y *scale;
} }
for( ii = 0; ii < 7; ii += 2 ) for( ii = 0; ii < 7; ii += 2 )
...@@ -951,18 +935,17 @@ void D_PAD::Draw3D( Pcb3D_GLCanvas* glcanvas ) ...@@ -951,18 +935,17 @@ void D_PAD::Draw3D( Pcb3D_GLCanvas* glcanvas )
ll = ii + 2; ll = ii + 2;
if( ll > 7 ) if( ll > 7 )
ll -= 8; ll -= 8;
fcoord[ii + 1][0] = (fcoord[ii][0] + fcoord[ll][0]) / 2; fcoord[ii + 1].x = (fcoord[ii].x + fcoord[ll].x) / 2;
fcoord[ii + 1][1] = (fcoord[ii][1] + fcoord[ll][1]) / 2; fcoord[ii + 1].y = (fcoord[ii].y + fcoord[ll].y) / 2;
} }
for( ii = 0; ii < 8; ii++ ) for( ii = 0; ii < 8; ii++ )
{ {
f_hole_coord[ii][0] = -hole * 0.707; f_hole_coord[ii].x = -hole * 0.707;
f_hole_coord[ii][1] = hole * 0.707; f_hole_coord[ii].y = hole * 0.707;
RotatePoint( &f_hole_coord[ii][0], &f_hole_coord[ii][1], RotatePoint( &f_hole_coord[ii].x, &f_hole_coord[ii].y, angle - (ii * 450) );
angle - (ii * 450) ); f_hole_coord[ii].x += drillx;
f_hole_coord[ii][0] += drillx; f_hole_coord[ii].y += drilly;
f_hole_coord[ii][1] += drilly;
} }
for( layer = FIRST_COPPER_LAYER; layer <= LAST_COPPER_LAYER; layer++ ) for( layer = FIRST_COPPER_LAYER; layer <= LAST_COPPER_LAYER; layer++ )
...@@ -991,12 +974,12 @@ void D_PAD::Draw3D( Pcb3D_GLCanvas* glcanvas ) ...@@ -991,12 +974,12 @@ void D_PAD::Draw3D( Pcb3D_GLCanvas* glcanvas )
glBegin( GL_QUAD_STRIP ); glBegin( GL_QUAD_STRIP );
for( ii = 0; ii < 8; ii++ ) for( ii = 0; ii < 8; ii++ )
{ {
glVertex3f( f_hole_coord[ii][0], -f_hole_coord[ii][1], zpos ); glVertex3f( f_hole_coord[ii].x, -f_hole_coord[ii].y, zpos );
glVertex3f( fcoord[ii][0], -fcoord[ii][1], zpos ); glVertex3f( fcoord[ii].x, -fcoord[ii].y, zpos );
} }
glVertex3f( f_hole_coord[0][0], -f_hole_coord[0][1], zpos ); glVertex3f( f_hole_coord[0].x, -f_hole_coord[0].y, zpos );
glVertex3f( fcoord[0][0], -fcoord[0][1], zpos ); glVertex3f( fcoord[0].x, -fcoord[0].y, zpos );
glEnd(); glEnd();
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment