Loading 3d-viewer/3d_canvas.cpp +54 −79 Original line number Original line Diff line number Diff line Loading @@ -161,7 +161,7 @@ void EDA_3D_CANVAS::OnChar( wxKeyEvent& event ) void EDA_3D_CANVAS::SetView3D( int keycode ) void EDA_3D_CANVAS::SetView3D( int keycode ) { { int ii; int ii; double delta_move = 0.7 * g_Parm_3D_Visu.m_Zoom; double delta_move = 0.7 * GetPrm3DVisu().m_Zoom; switch( keycode ) switch( keycode ) { { Loading @@ -182,22 +182,22 @@ void EDA_3D_CANVAS::SetView3D( int keycode ) break; break; case WXK_HOME: case WXK_HOME: g_Parm_3D_Visu.m_Zoom = 1.0; GetPrm3DVisu().m_Zoom = 1.0; m_draw3dOffset.x = m_draw3dOffset.y = 0; m_draw3dOffset.x = m_draw3dOffset.y = 0; trackball( g_Parm_3D_Visu.m_Quat, 0.0, 0.0, 0.0, 0.0 ); trackball( GetPrm3DVisu().m_Quat, 0.0, 0.0, 0.0, 0.0 ); break; break; case WXK_END: case WXK_END: break; break; case WXK_F1: case WXK_F1: g_Parm_3D_Visu.m_Zoom /= 1.4; GetPrm3DVisu().m_Zoom /= 1.4; if( g_Parm_3D_Visu.m_Zoom <= 0.01 ) if( GetPrm3DVisu().m_Zoom <= 0.01 ) g_Parm_3D_Visu.m_Zoom = 0.01; GetPrm3DVisu().m_Zoom = 0.01; break; break; case WXK_F2: case WXK_F2: g_Parm_3D_Visu.m_Zoom *= 1.4; GetPrm3DVisu().m_Zoom *= 1.4; break; break; case '+': case '+': Loading @@ -210,59 +210,59 @@ void EDA_3D_CANVAS::SetView3D( int keycode ) case 'R': case 'R': m_draw3dOffset.x = m_draw3dOffset.y = 0; m_draw3dOffset.x = m_draw3dOffset.y = 0; for( ii = 0; ii < 4; ii++ ) for( ii = 0; ii < 4; ii++ ) g_Parm_3D_Visu.m_Rot[ii] = 0.0; GetPrm3DVisu().m_Rot[ii] = 0.0; trackball( g_Parm_3D_Visu.m_Quat, 0.0, 0.0, 0.0, 0.0 ); trackball( GetPrm3DVisu().m_Quat, 0.0, 0.0, 0.0, 0.0 ); break; break; case 'x': case 'x': for( ii = 0; ii < 4; ii++ ) for( ii = 0; ii < 4; ii++ ) g_Parm_3D_Visu.m_Rot[ii] = 0.0; GetPrm3DVisu().m_Rot[ii] = 0.0; trackball( g_Parm_3D_Visu.m_Quat, 0.0, 0.0, 0.0, 0.0 ); trackball( GetPrm3DVisu().m_Quat, 0.0, 0.0, 0.0, 0.0 ); g_Parm_3D_Visu.m_ROTZ = -90; GetPrm3DVisu().m_ROTZ = -90; g_Parm_3D_Visu.m_ROTX = -90; GetPrm3DVisu().m_ROTX = -90; break; break; case 'X': case 'X': for( ii = 0; ii < 4; ii++ ) for( ii = 0; ii < 4; ii++ ) g_Parm_3D_Visu.m_Rot[ii] = 0.0; GetPrm3DVisu().m_Rot[ii] = 0.0; trackball( g_Parm_3D_Visu.m_Quat, 0.0, 0.0, 0.0, 0.0 ); trackball( GetPrm3DVisu().m_Quat, 0.0, 0.0, 0.0, 0.0 ); g_Parm_3D_Visu.m_ROTZ = 90; GetPrm3DVisu().m_ROTZ = 90; g_Parm_3D_Visu.m_ROTX = -90; GetPrm3DVisu().m_ROTX = -90; break; break; case 'y': case 'y': for( ii = 0; ii < 4; ii++ ) for( ii = 0; ii < 4; ii++ ) g_Parm_3D_Visu.m_Rot[ii] = 0.0; GetPrm3DVisu().m_Rot[ii] = 0.0; trackball( g_Parm_3D_Visu.m_Quat, 0.0, 0.0, 0.0, 0.0 ); trackball( GetPrm3DVisu().m_Quat, 0.0, 0.0, 0.0, 0.0 ); g_Parm_3D_Visu.m_ROTX = -90; GetPrm3DVisu().m_ROTX = -90; break; break; case 'Y': case 'Y': for( ii = 0; ii < 4; ii++ ) for( ii = 0; ii < 4; ii++ ) g_Parm_3D_Visu.m_Rot[ii] = 0.0; GetPrm3DVisu().m_Rot[ii] = 0.0; trackball( g_Parm_3D_Visu.m_Quat, 0.0, 0.0, 0.0, 0.0 ); trackball( GetPrm3DVisu().m_Quat, 0.0, 0.0, 0.0, 0.0 ); g_Parm_3D_Visu.m_ROTX = -90; GetPrm3DVisu().m_ROTX = -90; g_Parm_3D_Visu.m_ROTZ = -180; GetPrm3DVisu().m_ROTZ = -180; break; break; case 'z': case 'z': for( ii = 0; ii < 4; ii++ ) for( ii = 0; ii < 4; ii++ ) g_Parm_3D_Visu.m_Rot[ii] = 0.0; GetPrm3DVisu().m_Rot[ii] = 0.0; trackball( g_Parm_3D_Visu.m_Quat, 0.0, 0.0, 0.0, 0.0 ); trackball( GetPrm3DVisu().m_Quat, 0.0, 0.0, 0.0, 0.0 ); break; break; case 'Z': case 'Z': for( ii = 0; ii < 4; ii++ ) for( ii = 0; ii < 4; ii++ ) g_Parm_3D_Visu.m_Rot[ii] = 0.0; GetPrm3DVisu().m_Rot[ii] = 0.0; trackball( g_Parm_3D_Visu.m_Quat, 0.0, 0.0, 0.0, 0.0 ); trackball( GetPrm3DVisu().m_Quat, 0.0, 0.0, 0.0, 0.0 ); g_Parm_3D_Visu.m_ROTX = -180; GetPrm3DVisu().m_ROTX = -180; break; break; default: default: Loading @@ -279,47 +279,35 @@ void EDA_3D_CANVAS::OnMouseWheel( wxMouseEvent& event ) if( event.ShiftDown() ) if( event.ShiftDown() ) { { if( event.GetWheelRotation() < 0 ) if( event.GetWheelRotation() < 0 ) { SetView3D( WXK_UP ); // move up /* up */ SetView3D( WXK_UP ); } else else { SetView3D( WXK_DOWN ); // move down /* down */ SetView3D( WXK_DOWN ); } } } else if( event.ControlDown() ) else if( event.ControlDown() ) { { if( event.GetWheelRotation() > 0 ) if( event.GetWheelRotation() > 0 ) { SetView3D( WXK_RIGHT ); // move right /* right */ SetView3D( WXK_RIGHT ); } else else { SetView3D( WXK_LEFT ); // move left /* left */ SetView3D( WXK_LEFT ); } } } else else { { if( event.GetWheelRotation() > 0 ) if( event.GetWheelRotation() > 0 ) { { g_Parm_3D_Visu.m_Zoom /= 1.4; GetPrm3DVisu().m_Zoom /= 1.4; if( g_Parm_3D_Visu.m_Zoom <= 0.01 ) if( GetPrm3DVisu().m_Zoom <= 0.01 ) g_Parm_3D_Visu.m_Zoom = 0.01; GetPrm3DVisu().m_Zoom = 0.01; } } else else g_Parm_3D_Visu.m_Zoom *= 1.4; GetPrm3DVisu().m_Zoom *= 1.4; DisplayStatus(); DisplayStatus(); Refresh( false ); Refresh( false ); } } g_Parm_3D_Visu.m_Beginx = event.GetX(); GetPrm3DVisu().m_Beginx = event.GetX(); g_Parm_3D_Visu.m_Beginy = event.GetY(); GetPrm3DVisu().m_Beginy = event.GetY(); } } Loading @@ -334,12 +322,12 @@ void EDA_3D_CANVAS::OnMouseMove( wxMouseEvent& event ) { { /* drag in progress, simulate trackball */ /* drag in progress, simulate trackball */ trackball( spin_quat, trackball( spin_quat, (2.0 * g_Parm_3D_Visu.m_Beginx - size.x) / size.x, (2.0 * GetPrm3DVisu().m_Beginx - size.x) / size.x, (size.y - 2.0 * g_Parm_3D_Visu.m_Beginy) / size.y, (size.y - 2.0 * GetPrm3DVisu().m_Beginy) / size.y, ( 2.0 * event.GetX() - size.x) / size.x, ( 2.0 * event.GetX() - size.x) / size.x, ( size.y - 2.0 * event.GetY() ) / size.y ); ( size.y - 2.0 * event.GetY() ) / size.y ); add_quats( spin_quat, g_Parm_3D_Visu.m_Quat, g_Parm_3D_Visu.m_Quat ); add_quats( spin_quat, GetPrm3DVisu().m_Quat, GetPrm3DVisu().m_Quat ); } } else if( event.MiddleIsDown() ) else if( event.MiddleIsDown() ) { { Loading @@ -347,11 +335,11 @@ void EDA_3D_CANVAS::OnMouseMove( wxMouseEvent& event ) /* Current zoom and an additional factor are taken into account /* Current zoom and an additional factor are taken into account * for the amount of panning. */ * for the amount of panning. */ const double PAN_FACTOR = 8.0 * g_Parm_3D_Visu.m_Zoom; const double PAN_FACTOR = 8.0 * GetPrm3DVisu().m_Zoom; m_draw3dOffset.x -= PAN_FACTOR * m_draw3dOffset.x -= PAN_FACTOR * ( g_Parm_3D_Visu.m_Beginx - event.GetX() ) / size.x; ( GetPrm3DVisu().m_Beginx - event.GetX() ) / size.x; m_draw3dOffset.y -= PAN_FACTOR * m_draw3dOffset.y -= PAN_FACTOR * (event.GetY() - g_Parm_3D_Visu.m_Beginy) / size.y; (event.GetY() - GetPrm3DVisu().m_Beginy) / size.y; } } /* orientation has changed, redraw mesh */ /* orientation has changed, redraw mesh */ Loading @@ -359,8 +347,8 @@ void EDA_3D_CANVAS::OnMouseMove( wxMouseEvent& event ) Refresh( false ); Refresh( false ); } } g_Parm_3D_Visu.m_Beginx = event.GetX(); GetPrm3DVisu().m_Beginx = event.GetX(); g_Parm_3D_Visu.m_Beginy = event.GetY(); GetPrm3DVisu().m_Beginy = event.GetY(); } } Loading Loading @@ -502,7 +490,7 @@ void EDA_3D_CANVAS::DisplayStatus() msg.Printf( wxT( "dy %3.2f" ), m_draw3dOffset.y ); msg.Printf( wxT( "dy %3.2f" ), m_draw3dOffset.y ); Parent()->SetStatusText( msg, 2 ); Parent()->SetStatusText( msg, 2 ); msg.Printf( wxT( "View: %3.1f" ), 45 * g_Parm_3D_Visu.m_Zoom ); msg.Printf( wxT( "View: %3.1f" ), 45 * GetPrm3DVisu().m_Zoom ); Parent()->SetStatusText( msg, 3 ); Parent()->SetStatusText( msg, 3 ); } } Loading Loading @@ -539,7 +527,8 @@ GLuint load_and_generate_texture( tsImage *image ) glGenTextures( 1, &texture ); glGenTextures( 1, &texture ); glBindTexture( GL_TEXTURE_2D, texture ); glBindTexture( GL_TEXTURE_2D, texture ); gluBuild2DMipmaps( GL_TEXTURE_2D, GL_RGBA, image->width, image->height, GL_RGBA, GL_UNSIGNED_BYTE, image->pixel_data ); gluBuild2DMipmaps( GL_TEXTURE_2D, GL_RGBA, image->width, image->height, GL_RGBA, GL_UNSIGNED_BYTE, image->pixel_data ); glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR ); glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR ); glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR ); glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR ); Loading @@ -561,7 +550,7 @@ void EDA_3D_CANVAS::InitGL() m_text_pcb = load_and_generate_texture( (tsImage *)&text_pcb ); m_text_pcb = load_and_generate_texture( (tsImage *)&text_pcb ); m_text_silk = load_and_generate_texture( (tsImage *)&text_silk ); m_text_silk = load_and_generate_texture( (tsImage *)&text_silk ); g_Parm_3D_Visu.m_Zoom = 1.0; GetPrm3DVisu().m_Zoom = 1.0; m_ZBottom = 1.0; m_ZBottom = 1.0; m_ZTop = 10.0; m_ZTop = 10.0; Loading Loading @@ -590,12 +579,8 @@ void EDA_3D_CANVAS::InitGL() /* Initialize OpenGL light sources. */ /* Initialize OpenGL light sources. */ void EDA_3D_CANVAS::SetLights() void EDA_3D_CANVAS::SetLights() { { /* set viewing projection */ // activate light. the source is above the xy plane, at source_pos GLfloat Z_axis_pos[4] = { 0.0, 0.0, 30.0, 0.0 }; GLfloat source_pos[4] = { 0.0, 0.0, 30.0, 0.0 }; // GLfloat lowZ_axis_pos[4] = { 0.0, 0.0, -30.0, 0.5 }; // activate lights. 2 lights are used: // One is above the xy plane, the other is below the xy plane GLfloat light_color[4]; // color of lights (RGBA values) GLfloat light_color[4]; // color of lights (RGBA values) light_color[3] = 1.0; light_color[3] = 1.0; Loading @@ -609,22 +594,12 @@ void EDA_3D_CANVAS::SetLights() light_color[0] = light_color[1] = light_color[2] = 1.0; light_color[0] = light_color[1] = light_color[2] = 1.0; glLightfv( GL_LIGHT0, GL_SPECULAR, light_color ); glLightfv( GL_LIGHT0, GL_SPECULAR, light_color ); glLightfv( GL_LIGHT0, GL_POSITION, Z_axis_pos ); glLightfv( GL_LIGHT0, GL_POSITION, source_pos ); light_color[0] = light_color[1] = light_color[2] = 0.1; light_color[0] = light_color[1] = light_color[2] = 0.1; glLightModelfv( GL_LIGHT_MODEL_AMBIENT, light_color ); glLightModelfv( GL_LIGHT_MODEL_AMBIENT, light_color ); /* // Light below the xy plane glLightfv( GL_LIGHT1, GL_POSITION, lowZ_axis_pos ); light_color[0] = light_color[1] = light_color[2] = 0.4; glLightfv( GL_LIGHT1, GL_DIFFUSE, light_color ); light_color[0] = light_color[1] = light_color[2] = 0.1; glLightfv( GL_LIGHT1, GL_SPECULAR, light_color ); */ glEnable( GL_LIGHT0 ); // White spot on Z axis ( top ) glEnable( GL_LIGHT0 ); // White spot on Z axis ( top ) glDisable( GL_LIGHT1 ); // White spot on Z axis ( bottom ) glEnable( GL_LIGHTING ); glEnable( GL_LIGHTING ); } } Loading 3d-viewer/3d_canvas.h +6 −3 Original line number Original line Diff line number Diff line Loading @@ -142,6 +142,9 @@ public: m_draw3dOffset.y = aPosY; m_draw3dOffset.y = aPosY; } } /** @return the INFO3D_VISU which contains the current parameters * to draw the 3D view og the board */ INFO3D_VISU& GetPrm3DVisu() const; INFO3D_VISU& GetPrm3DVisu() const; Loading 3d-viewer/3d_draw_basic_functions.cpp +6 −7 Original line number Original line Diff line number Diff line Loading @@ -121,12 +121,11 @@ static void Draw3D_VerticalPolygonalCylinder( const CPOLYGONS_LIST& aPolysList, void SetGLColor( EDA_COLOR_T color, double alpha ) void SetGLColor( EDA_COLOR_T color, double alpha ) { { double red, green, blue; const StructColors &colordata = g_ColorRefs[ColorGetBase( color )]; const StructColors &colordata = g_ColorRefs[ColorGetBase( color )]; red = colordata.m_Red / 255.0; double red = colordata.m_Red / 255.0; blue = colordata.m_Blue / 255.0; double blue = colordata.m_Blue / 255.0; green = colordata.m_Green / 255.0; double green = colordata.m_Green / 255.0; glColor4f( red, green, blue, alpha ); glColor4f( red, green, blue, alpha ); } } Loading Loading @@ -170,7 +169,7 @@ void Draw3D_SolidHorizontalPolyPolygons( const CPOLYGONS_LIST& aPolysList, g_Parm_3D_Visu.m_CurrentZpos = zpos; g_Parm_3D_Visu.m_CurrentZpos = zpos; v_data[2] = aZpos + (aThickness / 2.0); v_data[2] = aZpos + (aThickness / 2.0); // Set normal to toward positive Z axis, for a solid object only (to draw the top side) // Set normal toward positive Z axis, for a solid object on the top side if( aThickness ) if( aThickness ) SetNormalZpos(); SetNormalZpos(); Loading Loading @@ -222,7 +221,7 @@ void Draw3D_SolidHorizontalPolyPolygons( const CPOLYGONS_LIST& aPolysList, zpos = ( aZpos - (aThickness / 2.0) ) * aBiuTo3DUnits; zpos = ( aZpos - (aThickness / 2.0) ) * aBiuTo3DUnits; g_Parm_3D_Visu.m_CurrentZpos = zpos; g_Parm_3D_Visu.m_CurrentZpos = zpos; v_data[2] = zpos; v_data[2] = zpos; // Now;, set normal to toward negative Z axis, for the solid object bottom side // Set normal toward negative Z axis, for a solid object on bottom side SetNormalZneg(); SetNormalZneg(); } } Loading 3d-viewer/3d_draw_helper_functions.cpp +1 −1 Original line number Original line Diff line number Diff line Loading @@ -45,7 +45,7 @@ INFO3D_VISU& EDA_3D_CANVAS::GetPrm3DVisu() const INFO3D_VISU& EDA_3D_CANVAS::GetPrm3DVisu() const { { return g_Parm_3D_Visu; return Parent()->GetPrm3DVisu(); } } wxSize EDA_3D_CANVAS::getBoardSize() const wxSize EDA_3D_CANVAS::getBoardSize() const Loading 3d-viewer/3d_frame.cpp +70 −56 Original line number Original line Diff line number Diff line Loading @@ -224,15 +224,15 @@ void EDA_3D_FRAME::LoadSettings( wxConfigBase* aCfg ) { { EDA_BASE_FRAME::LoadSettings( aCfg ); EDA_BASE_FRAME::LoadSettings( aCfg ); INFO3D_VISU& prms = g_Parm_3D_Visu; INFO3D_VISU& prms = GetPrm3DVisu(); aCfg->Read( keyBgColor_Red, &g_Parm_3D_Visu.m_BgColor.m_Red, 0.4 ); aCfg->Read( keyBgColor_Red, &GetPrm3DVisu().m_BgColor.m_Red, 0.4 ); aCfg->Read( keyBgColor_Green, &g_Parm_3D_Visu.m_BgColor.m_Green, 0.4 ); aCfg->Read( keyBgColor_Green, &GetPrm3DVisu().m_BgColor.m_Green, 0.4 ); aCfg->Read( keyBgColor_Blue, &g_Parm_3D_Visu.m_BgColor.m_Blue, 0.5 ); aCfg->Read( keyBgColor_Blue, &GetPrm3DVisu().m_BgColor.m_Blue, 0.5 ); aCfg->Read( keyBgColor_Red_Top, &g_Parm_3D_Visu.m_BgColor_Top.m_Red, 0.8 ); aCfg->Read( keyBgColor_Red_Top, &GetPrm3DVisu().m_BgColor_Top.m_Red, 0.8 ); aCfg->Read( keyBgColor_Green_Top, &g_Parm_3D_Visu.m_BgColor_Top.m_Green, 0.8 ); aCfg->Read( keyBgColor_Green_Top, &GetPrm3DVisu().m_BgColor_Top.m_Green, 0.8 ); aCfg->Read( keyBgColor_Blue_Top, &g_Parm_3D_Visu.m_BgColor_Top.m_Blue, 0.9 ); aCfg->Read( keyBgColor_Blue_Top, &GetPrm3DVisu().m_BgColor_Top.m_Blue, 0.9 ); bool tmp; bool tmp; aCfg->Read( keyShowRealisticMode, &tmp, false ); aCfg->Read( keyShowRealisticMode, &tmp, false ); Loading Loading @@ -297,15 +297,15 @@ void EDA_3D_FRAME::SaveSettings( wxConfigBase* aCfg ) { { EDA_BASE_FRAME::SaveSettings( aCfg ); EDA_BASE_FRAME::SaveSettings( aCfg ); INFO3D_VISU& prms = g_Parm_3D_Visu; INFO3D_VISU& prms = GetPrm3DVisu(); aCfg->Write( keyBgColor_Red, g_Parm_3D_Visu.m_BgColor.m_Red ); aCfg->Write( keyBgColor_Red, GetPrm3DVisu().m_BgColor.m_Red ); aCfg->Write( keyBgColor_Green, g_Parm_3D_Visu.m_BgColor.m_Green ); aCfg->Write( keyBgColor_Green, GetPrm3DVisu().m_BgColor.m_Green ); aCfg->Write( keyBgColor_Blue, g_Parm_3D_Visu.m_BgColor.m_Blue ); aCfg->Write( keyBgColor_Blue, GetPrm3DVisu().m_BgColor.m_Blue ); aCfg->Write( keyBgColor_Red_Top, g_Parm_3D_Visu.m_BgColor_Top.m_Red ); aCfg->Write( keyBgColor_Red_Top, GetPrm3DVisu().m_BgColor_Top.m_Red ); aCfg->Write( keyBgColor_Green_Top, g_Parm_3D_Visu.m_BgColor_Top.m_Green ); aCfg->Write( keyBgColor_Green_Top, GetPrm3DVisu().m_BgColor_Top.m_Green ); aCfg->Write( keyBgColor_Blue_Top, g_Parm_3D_Visu.m_BgColor_Top.m_Blue ); aCfg->Write( keyBgColor_Blue_Top, GetPrm3DVisu().m_BgColor_Top.m_Blue ); aCfg->Write( keyShowRealisticMode, prms.GetFlag( FL_USE_REALISTIC_MODE ) ); aCfg->Write( keyShowRealisticMode, prms.GetFlag( FL_USE_REALISTIC_MODE ) ); Loading Loading @@ -340,23 +340,23 @@ void EDA_3D_FRAME::Process_Zoom( wxCommandEvent& event ) case ID_ZOOM_PAGE: case ID_ZOOM_PAGE: for( ii = 0; ii < 4; ii++ ) for( ii = 0; ii < 4; ii++ ) g_Parm_3D_Visu.m_Rot[ii] = 0.0; GetPrm3DVisu().m_Rot[ii] = 0.0; g_Parm_3D_Visu.m_Zoom = 1.0; GetPrm3DVisu().m_Zoom = 1.0; m_canvas->SetOffset( 0.0, 0.0 ); m_canvas->SetOffset( 0.0, 0.0 ); trackball( g_Parm_3D_Visu.m_Quat, 0.0, 0.0, 0.0, 0.0 ); trackball( GetPrm3DVisu().m_Quat, 0.0, 0.0, 0.0, 0.0 ); break; break; case ID_ZOOM_IN: case ID_ZOOM_IN: g_Parm_3D_Visu.m_Zoom /= 1.2; GetPrm3DVisu().m_Zoom /= 1.2; if( g_Parm_3D_Visu.m_Zoom <= 0.01 ) if( GetPrm3DVisu().m_Zoom <= 0.01 ) g_Parm_3D_Visu.m_Zoom = 0.01; GetPrm3DVisu().m_Zoom = 0.01; break; break; case ID_ZOOM_OUT: case ID_ZOOM_OUT: g_Parm_3D_Visu.m_Zoom *= 1.2; GetPrm3DVisu().m_Zoom *= 1.2; break; break; case ID_ZOOM_REDRAW: case ID_ZOOM_REDRAW: Loading Loading @@ -410,27 +410,27 @@ void EDA_3D_FRAME::Process_Special_Functions( wxCommandEvent& event ) break; break; case ID_ROTATE3D_X_POS: case ID_ROTATE3D_X_POS: g_Parm_3D_Visu.m_ROTX += ROT_ANGLE; GetPrm3DVisu().m_ROTX += ROT_ANGLE; break; break; case ID_ROTATE3D_X_NEG: case ID_ROTATE3D_X_NEG: g_Parm_3D_Visu.m_ROTX -= ROT_ANGLE; GetPrm3DVisu().m_ROTX -= ROT_ANGLE; break; break; case ID_ROTATE3D_Y_POS: case ID_ROTATE3D_Y_POS: g_Parm_3D_Visu.m_ROTY += ROT_ANGLE; GetPrm3DVisu().m_ROTY += ROT_ANGLE; break; break; case ID_ROTATE3D_Y_NEG: case ID_ROTATE3D_Y_NEG: g_Parm_3D_Visu.m_ROTY -= ROT_ANGLE; GetPrm3DVisu().m_ROTY -= ROT_ANGLE; break; break; case ID_ROTATE3D_Z_POS: case ID_ROTATE3D_Z_POS: g_Parm_3D_Visu.m_ROTZ += ROT_ANGLE; GetPrm3DVisu().m_ROTZ += ROT_ANGLE; break; break; case ID_ROTATE3D_Z_NEG: case ID_ROTATE3D_Z_NEG: g_Parm_3D_Visu.m_ROTZ -= ROT_ANGLE; GetPrm3DVisu().m_ROTZ -= ROT_ANGLE; break; break; case ID_MOVE3D_LEFT: case ID_MOVE3D_LEFT: Loading Loading @@ -460,97 +460,97 @@ void EDA_3D_FRAME::Process_Special_Functions( wxCommandEvent& event ) break; break; case ID_MENU3D_BGCOLOR_SELECTION: case ID_MENU3D_BGCOLOR_SELECTION: Set3DBgColor( g_Parm_3D_Visu.m_BgColor ); Get3DColorFromUser( GetPrm3DVisu().m_BgColor ); return; return; case ID_MENU3D_BGCOLOR_TOP_SELECTION: case ID_MENU3D_BGCOLOR_TOP_SELECTION: Set3DBgColor( g_Parm_3D_Visu.m_BgColor_Top ); Get3DColorFromUser( GetPrm3DVisu().m_BgColor_Top ); return; return; case ID_MENU3D_REALISTIC_MODE: case ID_MENU3D_REALISTIC_MODE: g_Parm_3D_Visu.SetFlag( FL_USE_REALISTIC_MODE, isChecked ); GetPrm3DVisu().SetFlag( FL_USE_REALISTIC_MODE, isChecked ); NewDisplay(); NewDisplay(); return; return; case ID_MENU3D_FL_RENDER_SHADOWS: case ID_MENU3D_FL_RENDER_SHADOWS: g_Parm_3D_Visu.SetFlag( FL_RENDER_SHADOWS, isChecked ); GetPrm3DVisu().SetFlag( FL_RENDER_SHADOWS, isChecked ); NewDisplay(); NewDisplay(); return; return; case ID_MENU3D_FL_RENDER_SHOW_HOLES_IN_ZONES: case ID_MENU3D_FL_RENDER_SHOW_HOLES_IN_ZONES: g_Parm_3D_Visu.SetFlag( FL_RENDER_SHOW_HOLES_IN_ZONES, isChecked ); GetPrm3DVisu().SetFlag( FL_RENDER_SHOW_HOLES_IN_ZONES, isChecked ); NewDisplay(); NewDisplay(); return; return; case ID_MENU3D_FL_RENDER_TEXTURES: case ID_MENU3D_FL_RENDER_TEXTURES: g_Parm_3D_Visu.SetFlag( FL_RENDER_TEXTURES, isChecked ); GetPrm3DVisu().SetFlag( FL_RENDER_TEXTURES, isChecked ); NewDisplay(GL_ID_BOARD); NewDisplay(GL_ID_BOARD); NewDisplay(GL_ID_TECH_LAYERS); NewDisplay(GL_ID_TECH_LAYERS); return; return; case ID_MENU3D_FL_RENDER_SMOOTH: case ID_MENU3D_FL_RENDER_SMOOTH: g_Parm_3D_Visu.SetFlag( FL_RENDER_SMOOTH, isChecked ); GetPrm3DVisu().SetFlag( FL_RENDER_SMOOTH, isChecked ); NewDisplay(); NewDisplay(); return; return; case ID_MENU3D_FL_RENDER_MATERIAL: case ID_MENU3D_FL_RENDER_MATERIAL: g_Parm_3D_Visu.SetFlag( FL_RENDER_MATERIAL, isChecked ); GetPrm3DVisu().SetFlag( FL_RENDER_MATERIAL, isChecked ); NewDisplay(); NewDisplay(); return; return; case ID_MENU3D_SHOW_BOARD_BODY: case ID_MENU3D_SHOW_BOARD_BODY: g_Parm_3D_Visu.SetFlag( FL_SHOW_BOARD_BODY, isChecked ); GetPrm3DVisu().SetFlag( FL_SHOW_BOARD_BODY, isChecked ); NewDisplay(); NewDisplay(); return; return; case ID_MENU3D_AXIS_ONOFF: case ID_MENU3D_AXIS_ONOFF: g_Parm_3D_Visu.SetFlag( FL_AXIS, isChecked ); GetPrm3DVisu().SetFlag( FL_AXIS, isChecked ); m_canvas->Refresh(); m_canvas->Refresh(); return; return; case ID_MENU3D_MODULE_ONOFF: case ID_MENU3D_MODULE_ONOFF: g_Parm_3D_Visu.SetFlag( FL_MODULE, isChecked ); GetPrm3DVisu().SetFlag( FL_MODULE, isChecked ); m_canvas->Refresh(); m_canvas->Refresh(); return; return; case ID_MENU3D_USE_COPPER_THICKNESS: case ID_MENU3D_USE_COPPER_THICKNESS: g_Parm_3D_Visu.SetFlag( FL_USE_COPPER_THICKNESS, isChecked ); GetPrm3DVisu().SetFlag( FL_USE_COPPER_THICKNESS, isChecked ); NewDisplay(GL_ID_BOARD); NewDisplay(GL_ID_BOARD); NewDisplay(GL_ID_TECH_LAYERS); NewDisplay(GL_ID_TECH_LAYERS); return; return; case ID_MENU3D_ZONE_ONOFF: case ID_MENU3D_ZONE_ONOFF: g_Parm_3D_Visu.SetFlag( FL_ZONE, isChecked ); GetPrm3DVisu().SetFlag( FL_ZONE, isChecked ); NewDisplay(GL_ID_BOARD); NewDisplay(GL_ID_BOARD); return; return; case ID_MENU3D_ADHESIVE_ONOFF: case ID_MENU3D_ADHESIVE_ONOFF: g_Parm_3D_Visu.SetFlag( FL_ADHESIVE, isChecked ); GetPrm3DVisu().SetFlag( FL_ADHESIVE, isChecked ); NewDisplay(GL_ID_TECH_LAYERS); NewDisplay(GL_ID_TECH_LAYERS); return; return; case ID_MENU3D_SILKSCREEN_ONOFF: case ID_MENU3D_SILKSCREEN_ONOFF: g_Parm_3D_Visu.SetFlag( FL_SILKSCREEN, isChecked ); GetPrm3DVisu().SetFlag( FL_SILKSCREEN, isChecked ); NewDisplay(GL_ID_TECH_LAYERS); NewDisplay(GL_ID_TECH_LAYERS); return; return; case ID_MENU3D_SOLDER_MASK_ONOFF: case ID_MENU3D_SOLDER_MASK_ONOFF: g_Parm_3D_Visu.SetFlag( FL_SOLDERMASK, isChecked ); GetPrm3DVisu().SetFlag( FL_SOLDERMASK, isChecked ); NewDisplay(GL_ID_TECH_LAYERS); NewDisplay(GL_ID_TECH_LAYERS); return; return; case ID_MENU3D_SOLDER_PASTE_ONOFF: case ID_MENU3D_SOLDER_PASTE_ONOFF: g_Parm_3D_Visu.SetFlag( FL_SOLDERPASTE, isChecked ); GetPrm3DVisu().SetFlag( FL_SOLDERPASTE, isChecked ); NewDisplay(GL_ID_TECH_LAYERS); NewDisplay(GL_ID_TECH_LAYERS); return; return; case ID_MENU3D_COMMENTS_ONOFF: case ID_MENU3D_COMMENTS_ONOFF: g_Parm_3D_Visu.SetFlag( FL_COMMENTS, isChecked ); GetPrm3DVisu().SetFlag( FL_COMMENTS, isChecked ); NewDisplay(GL_ID_AUX_LAYERS); NewDisplay(GL_ID_AUX_LAYERS); return; return; case ID_MENU3D_ECO_ONOFF: case ID_MENU3D_ECO_ONOFF: g_Parm_3D_Visu.SetFlag( FL_ECO, isChecked ); GetPrm3DVisu().SetFlag( FL_ECO, isChecked ); NewDisplay(GL_ID_AUX_LAYERS); NewDisplay(GL_ID_AUX_LAYERS); return; return; Loading Loading @@ -579,27 +579,27 @@ void EDA_3D_FRAME::On3DGridSelection( wxCommandEvent& event ) switch( id ) switch( id ) { { case ID_MENU3D_GRID_NOGRID: case ID_MENU3D_GRID_NOGRID: g_Parm_3D_Visu.SetFlag( FL_GRID, false ); GetPrm3DVisu().SetFlag( FL_GRID, false ); break; break; case ID_MENU3D_GRID_10_MM: case ID_MENU3D_GRID_10_MM: g_Parm_3D_Visu.SetFlag( FL_GRID, true ); GetPrm3DVisu().SetFlag( FL_GRID, true ); g_Parm_3D_Visu.m_3D_Grid = 10.0; GetPrm3DVisu().m_3D_Grid = 10.0; break; break; case ID_MENU3D_GRID_5_MM: case ID_MENU3D_GRID_5_MM: g_Parm_3D_Visu.SetFlag( FL_GRID, true ); GetPrm3DVisu().SetFlag( FL_GRID, true ); g_Parm_3D_Visu.m_3D_Grid = 5.0; GetPrm3DVisu().m_3D_Grid = 5.0; break; break; case ID_MENU3D_GRID_2P5_MM: case ID_MENU3D_GRID_2P5_MM: g_Parm_3D_Visu.SetFlag( FL_GRID, true ); GetPrm3DVisu().SetFlag( FL_GRID, true ); g_Parm_3D_Visu.m_3D_Grid = 2.5; GetPrm3DVisu().m_3D_Grid = 2.5; break; break; case ID_MENU3D_GRID_1_MM: case ID_MENU3D_GRID_1_MM: g_Parm_3D_Visu.SetFlag( FL_GRID, true ); GetPrm3DVisu().SetFlag( FL_GRID, true ); g_Parm_3D_Visu.m_3D_Grid = 1.0; GetPrm3DVisu().m_3D_Grid = 1.0; break; break; default: default: Loading Loading @@ -636,7 +636,7 @@ void EDA_3D_FRAME::OnActivate( wxActivateEvent& event ) /* called to set the background color of the 3D scene /* called to set the background color of the 3D scene */ */ bool EDA_3D_FRAME::Set3DBgColor( S3D_COLOR &color ) bool EDA_3D_FRAME::Get3DColorFromUser( S3D_COLOR &color ) { { wxColour newcolor, oldcolor; wxColour newcolor, oldcolor; Loading @@ -663,3 +663,17 @@ BOARD* EDA_3D_FRAME::GetBoard() { { return Parent()->GetBoard(); return Parent()->GetBoard(); } } INFO3D_VISU& EDA_3D_FRAME::GetPrm3DVisu() const { // return the INFO3D_VISU which contains the current parameters // to draw the 3D view og the board return g_Parm_3D_Visu; } bool EDA_3D_FRAME::IsEnabled( DISPLAY3D_FLG aItem ) const { // return true if aItem must be displayed return GetPrm3DVisu().GetFlag( aItem ); } Loading
3d-viewer/3d_canvas.cpp +54 −79 Original line number Original line Diff line number Diff line Loading @@ -161,7 +161,7 @@ void EDA_3D_CANVAS::OnChar( wxKeyEvent& event ) void EDA_3D_CANVAS::SetView3D( int keycode ) void EDA_3D_CANVAS::SetView3D( int keycode ) { { int ii; int ii; double delta_move = 0.7 * g_Parm_3D_Visu.m_Zoom; double delta_move = 0.7 * GetPrm3DVisu().m_Zoom; switch( keycode ) switch( keycode ) { { Loading @@ -182,22 +182,22 @@ void EDA_3D_CANVAS::SetView3D( int keycode ) break; break; case WXK_HOME: case WXK_HOME: g_Parm_3D_Visu.m_Zoom = 1.0; GetPrm3DVisu().m_Zoom = 1.0; m_draw3dOffset.x = m_draw3dOffset.y = 0; m_draw3dOffset.x = m_draw3dOffset.y = 0; trackball( g_Parm_3D_Visu.m_Quat, 0.0, 0.0, 0.0, 0.0 ); trackball( GetPrm3DVisu().m_Quat, 0.0, 0.0, 0.0, 0.0 ); break; break; case WXK_END: case WXK_END: break; break; case WXK_F1: case WXK_F1: g_Parm_3D_Visu.m_Zoom /= 1.4; GetPrm3DVisu().m_Zoom /= 1.4; if( g_Parm_3D_Visu.m_Zoom <= 0.01 ) if( GetPrm3DVisu().m_Zoom <= 0.01 ) g_Parm_3D_Visu.m_Zoom = 0.01; GetPrm3DVisu().m_Zoom = 0.01; break; break; case WXK_F2: case WXK_F2: g_Parm_3D_Visu.m_Zoom *= 1.4; GetPrm3DVisu().m_Zoom *= 1.4; break; break; case '+': case '+': Loading @@ -210,59 +210,59 @@ void EDA_3D_CANVAS::SetView3D( int keycode ) case 'R': case 'R': m_draw3dOffset.x = m_draw3dOffset.y = 0; m_draw3dOffset.x = m_draw3dOffset.y = 0; for( ii = 0; ii < 4; ii++ ) for( ii = 0; ii < 4; ii++ ) g_Parm_3D_Visu.m_Rot[ii] = 0.0; GetPrm3DVisu().m_Rot[ii] = 0.0; trackball( g_Parm_3D_Visu.m_Quat, 0.0, 0.0, 0.0, 0.0 ); trackball( GetPrm3DVisu().m_Quat, 0.0, 0.0, 0.0, 0.0 ); break; break; case 'x': case 'x': for( ii = 0; ii < 4; ii++ ) for( ii = 0; ii < 4; ii++ ) g_Parm_3D_Visu.m_Rot[ii] = 0.0; GetPrm3DVisu().m_Rot[ii] = 0.0; trackball( g_Parm_3D_Visu.m_Quat, 0.0, 0.0, 0.0, 0.0 ); trackball( GetPrm3DVisu().m_Quat, 0.0, 0.0, 0.0, 0.0 ); g_Parm_3D_Visu.m_ROTZ = -90; GetPrm3DVisu().m_ROTZ = -90; g_Parm_3D_Visu.m_ROTX = -90; GetPrm3DVisu().m_ROTX = -90; break; break; case 'X': case 'X': for( ii = 0; ii < 4; ii++ ) for( ii = 0; ii < 4; ii++ ) g_Parm_3D_Visu.m_Rot[ii] = 0.0; GetPrm3DVisu().m_Rot[ii] = 0.0; trackball( g_Parm_3D_Visu.m_Quat, 0.0, 0.0, 0.0, 0.0 ); trackball( GetPrm3DVisu().m_Quat, 0.0, 0.0, 0.0, 0.0 ); g_Parm_3D_Visu.m_ROTZ = 90; GetPrm3DVisu().m_ROTZ = 90; g_Parm_3D_Visu.m_ROTX = -90; GetPrm3DVisu().m_ROTX = -90; break; break; case 'y': case 'y': for( ii = 0; ii < 4; ii++ ) for( ii = 0; ii < 4; ii++ ) g_Parm_3D_Visu.m_Rot[ii] = 0.0; GetPrm3DVisu().m_Rot[ii] = 0.0; trackball( g_Parm_3D_Visu.m_Quat, 0.0, 0.0, 0.0, 0.0 ); trackball( GetPrm3DVisu().m_Quat, 0.0, 0.0, 0.0, 0.0 ); g_Parm_3D_Visu.m_ROTX = -90; GetPrm3DVisu().m_ROTX = -90; break; break; case 'Y': case 'Y': for( ii = 0; ii < 4; ii++ ) for( ii = 0; ii < 4; ii++ ) g_Parm_3D_Visu.m_Rot[ii] = 0.0; GetPrm3DVisu().m_Rot[ii] = 0.0; trackball( g_Parm_3D_Visu.m_Quat, 0.0, 0.0, 0.0, 0.0 ); trackball( GetPrm3DVisu().m_Quat, 0.0, 0.0, 0.0, 0.0 ); g_Parm_3D_Visu.m_ROTX = -90; GetPrm3DVisu().m_ROTX = -90; g_Parm_3D_Visu.m_ROTZ = -180; GetPrm3DVisu().m_ROTZ = -180; break; break; case 'z': case 'z': for( ii = 0; ii < 4; ii++ ) for( ii = 0; ii < 4; ii++ ) g_Parm_3D_Visu.m_Rot[ii] = 0.0; GetPrm3DVisu().m_Rot[ii] = 0.0; trackball( g_Parm_3D_Visu.m_Quat, 0.0, 0.0, 0.0, 0.0 ); trackball( GetPrm3DVisu().m_Quat, 0.0, 0.0, 0.0, 0.0 ); break; break; case 'Z': case 'Z': for( ii = 0; ii < 4; ii++ ) for( ii = 0; ii < 4; ii++ ) g_Parm_3D_Visu.m_Rot[ii] = 0.0; GetPrm3DVisu().m_Rot[ii] = 0.0; trackball( g_Parm_3D_Visu.m_Quat, 0.0, 0.0, 0.0, 0.0 ); trackball( GetPrm3DVisu().m_Quat, 0.0, 0.0, 0.0, 0.0 ); g_Parm_3D_Visu.m_ROTX = -180; GetPrm3DVisu().m_ROTX = -180; break; break; default: default: Loading @@ -279,47 +279,35 @@ void EDA_3D_CANVAS::OnMouseWheel( wxMouseEvent& event ) if( event.ShiftDown() ) if( event.ShiftDown() ) { { if( event.GetWheelRotation() < 0 ) if( event.GetWheelRotation() < 0 ) { SetView3D( WXK_UP ); // move up /* up */ SetView3D( WXK_UP ); } else else { SetView3D( WXK_DOWN ); // move down /* down */ SetView3D( WXK_DOWN ); } } } else if( event.ControlDown() ) else if( event.ControlDown() ) { { if( event.GetWheelRotation() > 0 ) if( event.GetWheelRotation() > 0 ) { SetView3D( WXK_RIGHT ); // move right /* right */ SetView3D( WXK_RIGHT ); } else else { SetView3D( WXK_LEFT ); // move left /* left */ SetView3D( WXK_LEFT ); } } } else else { { if( event.GetWheelRotation() > 0 ) if( event.GetWheelRotation() > 0 ) { { g_Parm_3D_Visu.m_Zoom /= 1.4; GetPrm3DVisu().m_Zoom /= 1.4; if( g_Parm_3D_Visu.m_Zoom <= 0.01 ) if( GetPrm3DVisu().m_Zoom <= 0.01 ) g_Parm_3D_Visu.m_Zoom = 0.01; GetPrm3DVisu().m_Zoom = 0.01; } } else else g_Parm_3D_Visu.m_Zoom *= 1.4; GetPrm3DVisu().m_Zoom *= 1.4; DisplayStatus(); DisplayStatus(); Refresh( false ); Refresh( false ); } } g_Parm_3D_Visu.m_Beginx = event.GetX(); GetPrm3DVisu().m_Beginx = event.GetX(); g_Parm_3D_Visu.m_Beginy = event.GetY(); GetPrm3DVisu().m_Beginy = event.GetY(); } } Loading @@ -334,12 +322,12 @@ void EDA_3D_CANVAS::OnMouseMove( wxMouseEvent& event ) { { /* drag in progress, simulate trackball */ /* drag in progress, simulate trackball */ trackball( spin_quat, trackball( spin_quat, (2.0 * g_Parm_3D_Visu.m_Beginx - size.x) / size.x, (2.0 * GetPrm3DVisu().m_Beginx - size.x) / size.x, (size.y - 2.0 * g_Parm_3D_Visu.m_Beginy) / size.y, (size.y - 2.0 * GetPrm3DVisu().m_Beginy) / size.y, ( 2.0 * event.GetX() - size.x) / size.x, ( 2.0 * event.GetX() - size.x) / size.x, ( size.y - 2.0 * event.GetY() ) / size.y ); ( size.y - 2.0 * event.GetY() ) / size.y ); add_quats( spin_quat, g_Parm_3D_Visu.m_Quat, g_Parm_3D_Visu.m_Quat ); add_quats( spin_quat, GetPrm3DVisu().m_Quat, GetPrm3DVisu().m_Quat ); } } else if( event.MiddleIsDown() ) else if( event.MiddleIsDown() ) { { Loading @@ -347,11 +335,11 @@ void EDA_3D_CANVAS::OnMouseMove( wxMouseEvent& event ) /* Current zoom and an additional factor are taken into account /* Current zoom and an additional factor are taken into account * for the amount of panning. */ * for the amount of panning. */ const double PAN_FACTOR = 8.0 * g_Parm_3D_Visu.m_Zoom; const double PAN_FACTOR = 8.0 * GetPrm3DVisu().m_Zoom; m_draw3dOffset.x -= PAN_FACTOR * m_draw3dOffset.x -= PAN_FACTOR * ( g_Parm_3D_Visu.m_Beginx - event.GetX() ) / size.x; ( GetPrm3DVisu().m_Beginx - event.GetX() ) / size.x; m_draw3dOffset.y -= PAN_FACTOR * m_draw3dOffset.y -= PAN_FACTOR * (event.GetY() - g_Parm_3D_Visu.m_Beginy) / size.y; (event.GetY() - GetPrm3DVisu().m_Beginy) / size.y; } } /* orientation has changed, redraw mesh */ /* orientation has changed, redraw mesh */ Loading @@ -359,8 +347,8 @@ void EDA_3D_CANVAS::OnMouseMove( wxMouseEvent& event ) Refresh( false ); Refresh( false ); } } g_Parm_3D_Visu.m_Beginx = event.GetX(); GetPrm3DVisu().m_Beginx = event.GetX(); g_Parm_3D_Visu.m_Beginy = event.GetY(); GetPrm3DVisu().m_Beginy = event.GetY(); } } Loading Loading @@ -502,7 +490,7 @@ void EDA_3D_CANVAS::DisplayStatus() msg.Printf( wxT( "dy %3.2f" ), m_draw3dOffset.y ); msg.Printf( wxT( "dy %3.2f" ), m_draw3dOffset.y ); Parent()->SetStatusText( msg, 2 ); Parent()->SetStatusText( msg, 2 ); msg.Printf( wxT( "View: %3.1f" ), 45 * g_Parm_3D_Visu.m_Zoom ); msg.Printf( wxT( "View: %3.1f" ), 45 * GetPrm3DVisu().m_Zoom ); Parent()->SetStatusText( msg, 3 ); Parent()->SetStatusText( msg, 3 ); } } Loading Loading @@ -539,7 +527,8 @@ GLuint load_and_generate_texture( tsImage *image ) glGenTextures( 1, &texture ); glGenTextures( 1, &texture ); glBindTexture( GL_TEXTURE_2D, texture ); glBindTexture( GL_TEXTURE_2D, texture ); gluBuild2DMipmaps( GL_TEXTURE_2D, GL_RGBA, image->width, image->height, GL_RGBA, GL_UNSIGNED_BYTE, image->pixel_data ); gluBuild2DMipmaps( GL_TEXTURE_2D, GL_RGBA, image->width, image->height, GL_RGBA, GL_UNSIGNED_BYTE, image->pixel_data ); glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR ); glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR ); glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR ); glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR ); Loading @@ -561,7 +550,7 @@ void EDA_3D_CANVAS::InitGL() m_text_pcb = load_and_generate_texture( (tsImage *)&text_pcb ); m_text_pcb = load_and_generate_texture( (tsImage *)&text_pcb ); m_text_silk = load_and_generate_texture( (tsImage *)&text_silk ); m_text_silk = load_and_generate_texture( (tsImage *)&text_silk ); g_Parm_3D_Visu.m_Zoom = 1.0; GetPrm3DVisu().m_Zoom = 1.0; m_ZBottom = 1.0; m_ZBottom = 1.0; m_ZTop = 10.0; m_ZTop = 10.0; Loading Loading @@ -590,12 +579,8 @@ void EDA_3D_CANVAS::InitGL() /* Initialize OpenGL light sources. */ /* Initialize OpenGL light sources. */ void EDA_3D_CANVAS::SetLights() void EDA_3D_CANVAS::SetLights() { { /* set viewing projection */ // activate light. the source is above the xy plane, at source_pos GLfloat Z_axis_pos[4] = { 0.0, 0.0, 30.0, 0.0 }; GLfloat source_pos[4] = { 0.0, 0.0, 30.0, 0.0 }; // GLfloat lowZ_axis_pos[4] = { 0.0, 0.0, -30.0, 0.5 }; // activate lights. 2 lights are used: // One is above the xy plane, the other is below the xy plane GLfloat light_color[4]; // color of lights (RGBA values) GLfloat light_color[4]; // color of lights (RGBA values) light_color[3] = 1.0; light_color[3] = 1.0; Loading @@ -609,22 +594,12 @@ void EDA_3D_CANVAS::SetLights() light_color[0] = light_color[1] = light_color[2] = 1.0; light_color[0] = light_color[1] = light_color[2] = 1.0; glLightfv( GL_LIGHT0, GL_SPECULAR, light_color ); glLightfv( GL_LIGHT0, GL_SPECULAR, light_color ); glLightfv( GL_LIGHT0, GL_POSITION, Z_axis_pos ); glLightfv( GL_LIGHT0, GL_POSITION, source_pos ); light_color[0] = light_color[1] = light_color[2] = 0.1; light_color[0] = light_color[1] = light_color[2] = 0.1; glLightModelfv( GL_LIGHT_MODEL_AMBIENT, light_color ); glLightModelfv( GL_LIGHT_MODEL_AMBIENT, light_color ); /* // Light below the xy plane glLightfv( GL_LIGHT1, GL_POSITION, lowZ_axis_pos ); light_color[0] = light_color[1] = light_color[2] = 0.4; glLightfv( GL_LIGHT1, GL_DIFFUSE, light_color ); light_color[0] = light_color[1] = light_color[2] = 0.1; glLightfv( GL_LIGHT1, GL_SPECULAR, light_color ); */ glEnable( GL_LIGHT0 ); // White spot on Z axis ( top ) glEnable( GL_LIGHT0 ); // White spot on Z axis ( top ) glDisable( GL_LIGHT1 ); // White spot on Z axis ( bottom ) glEnable( GL_LIGHTING ); glEnable( GL_LIGHTING ); } } Loading
3d-viewer/3d_canvas.h +6 −3 Original line number Original line Diff line number Diff line Loading @@ -142,6 +142,9 @@ public: m_draw3dOffset.y = aPosY; m_draw3dOffset.y = aPosY; } } /** @return the INFO3D_VISU which contains the current parameters * to draw the 3D view og the board */ INFO3D_VISU& GetPrm3DVisu() const; INFO3D_VISU& GetPrm3DVisu() const; Loading
3d-viewer/3d_draw_basic_functions.cpp +6 −7 Original line number Original line Diff line number Diff line Loading @@ -121,12 +121,11 @@ static void Draw3D_VerticalPolygonalCylinder( const CPOLYGONS_LIST& aPolysList, void SetGLColor( EDA_COLOR_T color, double alpha ) void SetGLColor( EDA_COLOR_T color, double alpha ) { { double red, green, blue; const StructColors &colordata = g_ColorRefs[ColorGetBase( color )]; const StructColors &colordata = g_ColorRefs[ColorGetBase( color )]; red = colordata.m_Red / 255.0; double red = colordata.m_Red / 255.0; blue = colordata.m_Blue / 255.0; double blue = colordata.m_Blue / 255.0; green = colordata.m_Green / 255.0; double green = colordata.m_Green / 255.0; glColor4f( red, green, blue, alpha ); glColor4f( red, green, blue, alpha ); } } Loading Loading @@ -170,7 +169,7 @@ void Draw3D_SolidHorizontalPolyPolygons( const CPOLYGONS_LIST& aPolysList, g_Parm_3D_Visu.m_CurrentZpos = zpos; g_Parm_3D_Visu.m_CurrentZpos = zpos; v_data[2] = aZpos + (aThickness / 2.0); v_data[2] = aZpos + (aThickness / 2.0); // Set normal to toward positive Z axis, for a solid object only (to draw the top side) // Set normal toward positive Z axis, for a solid object on the top side if( aThickness ) if( aThickness ) SetNormalZpos(); SetNormalZpos(); Loading Loading @@ -222,7 +221,7 @@ void Draw3D_SolidHorizontalPolyPolygons( const CPOLYGONS_LIST& aPolysList, zpos = ( aZpos - (aThickness / 2.0) ) * aBiuTo3DUnits; zpos = ( aZpos - (aThickness / 2.0) ) * aBiuTo3DUnits; g_Parm_3D_Visu.m_CurrentZpos = zpos; g_Parm_3D_Visu.m_CurrentZpos = zpos; v_data[2] = zpos; v_data[2] = zpos; // Now;, set normal to toward negative Z axis, for the solid object bottom side // Set normal toward negative Z axis, for a solid object on bottom side SetNormalZneg(); SetNormalZneg(); } } Loading
3d-viewer/3d_draw_helper_functions.cpp +1 −1 Original line number Original line Diff line number Diff line Loading @@ -45,7 +45,7 @@ INFO3D_VISU& EDA_3D_CANVAS::GetPrm3DVisu() const INFO3D_VISU& EDA_3D_CANVAS::GetPrm3DVisu() const { { return g_Parm_3D_Visu; return Parent()->GetPrm3DVisu(); } } wxSize EDA_3D_CANVAS::getBoardSize() const wxSize EDA_3D_CANVAS::getBoardSize() const Loading
3d-viewer/3d_frame.cpp +70 −56 Original line number Original line Diff line number Diff line Loading @@ -224,15 +224,15 @@ void EDA_3D_FRAME::LoadSettings( wxConfigBase* aCfg ) { { EDA_BASE_FRAME::LoadSettings( aCfg ); EDA_BASE_FRAME::LoadSettings( aCfg ); INFO3D_VISU& prms = g_Parm_3D_Visu; INFO3D_VISU& prms = GetPrm3DVisu(); aCfg->Read( keyBgColor_Red, &g_Parm_3D_Visu.m_BgColor.m_Red, 0.4 ); aCfg->Read( keyBgColor_Red, &GetPrm3DVisu().m_BgColor.m_Red, 0.4 ); aCfg->Read( keyBgColor_Green, &g_Parm_3D_Visu.m_BgColor.m_Green, 0.4 ); aCfg->Read( keyBgColor_Green, &GetPrm3DVisu().m_BgColor.m_Green, 0.4 ); aCfg->Read( keyBgColor_Blue, &g_Parm_3D_Visu.m_BgColor.m_Blue, 0.5 ); aCfg->Read( keyBgColor_Blue, &GetPrm3DVisu().m_BgColor.m_Blue, 0.5 ); aCfg->Read( keyBgColor_Red_Top, &g_Parm_3D_Visu.m_BgColor_Top.m_Red, 0.8 ); aCfg->Read( keyBgColor_Red_Top, &GetPrm3DVisu().m_BgColor_Top.m_Red, 0.8 ); aCfg->Read( keyBgColor_Green_Top, &g_Parm_3D_Visu.m_BgColor_Top.m_Green, 0.8 ); aCfg->Read( keyBgColor_Green_Top, &GetPrm3DVisu().m_BgColor_Top.m_Green, 0.8 ); aCfg->Read( keyBgColor_Blue_Top, &g_Parm_3D_Visu.m_BgColor_Top.m_Blue, 0.9 ); aCfg->Read( keyBgColor_Blue_Top, &GetPrm3DVisu().m_BgColor_Top.m_Blue, 0.9 ); bool tmp; bool tmp; aCfg->Read( keyShowRealisticMode, &tmp, false ); aCfg->Read( keyShowRealisticMode, &tmp, false ); Loading Loading @@ -297,15 +297,15 @@ void EDA_3D_FRAME::SaveSettings( wxConfigBase* aCfg ) { { EDA_BASE_FRAME::SaveSettings( aCfg ); EDA_BASE_FRAME::SaveSettings( aCfg ); INFO3D_VISU& prms = g_Parm_3D_Visu; INFO3D_VISU& prms = GetPrm3DVisu(); aCfg->Write( keyBgColor_Red, g_Parm_3D_Visu.m_BgColor.m_Red ); aCfg->Write( keyBgColor_Red, GetPrm3DVisu().m_BgColor.m_Red ); aCfg->Write( keyBgColor_Green, g_Parm_3D_Visu.m_BgColor.m_Green ); aCfg->Write( keyBgColor_Green, GetPrm3DVisu().m_BgColor.m_Green ); aCfg->Write( keyBgColor_Blue, g_Parm_3D_Visu.m_BgColor.m_Blue ); aCfg->Write( keyBgColor_Blue, GetPrm3DVisu().m_BgColor.m_Blue ); aCfg->Write( keyBgColor_Red_Top, g_Parm_3D_Visu.m_BgColor_Top.m_Red ); aCfg->Write( keyBgColor_Red_Top, GetPrm3DVisu().m_BgColor_Top.m_Red ); aCfg->Write( keyBgColor_Green_Top, g_Parm_3D_Visu.m_BgColor_Top.m_Green ); aCfg->Write( keyBgColor_Green_Top, GetPrm3DVisu().m_BgColor_Top.m_Green ); aCfg->Write( keyBgColor_Blue_Top, g_Parm_3D_Visu.m_BgColor_Top.m_Blue ); aCfg->Write( keyBgColor_Blue_Top, GetPrm3DVisu().m_BgColor_Top.m_Blue ); aCfg->Write( keyShowRealisticMode, prms.GetFlag( FL_USE_REALISTIC_MODE ) ); aCfg->Write( keyShowRealisticMode, prms.GetFlag( FL_USE_REALISTIC_MODE ) ); Loading Loading @@ -340,23 +340,23 @@ void EDA_3D_FRAME::Process_Zoom( wxCommandEvent& event ) case ID_ZOOM_PAGE: case ID_ZOOM_PAGE: for( ii = 0; ii < 4; ii++ ) for( ii = 0; ii < 4; ii++ ) g_Parm_3D_Visu.m_Rot[ii] = 0.0; GetPrm3DVisu().m_Rot[ii] = 0.0; g_Parm_3D_Visu.m_Zoom = 1.0; GetPrm3DVisu().m_Zoom = 1.0; m_canvas->SetOffset( 0.0, 0.0 ); m_canvas->SetOffset( 0.0, 0.0 ); trackball( g_Parm_3D_Visu.m_Quat, 0.0, 0.0, 0.0, 0.0 ); trackball( GetPrm3DVisu().m_Quat, 0.0, 0.0, 0.0, 0.0 ); break; break; case ID_ZOOM_IN: case ID_ZOOM_IN: g_Parm_3D_Visu.m_Zoom /= 1.2; GetPrm3DVisu().m_Zoom /= 1.2; if( g_Parm_3D_Visu.m_Zoom <= 0.01 ) if( GetPrm3DVisu().m_Zoom <= 0.01 ) g_Parm_3D_Visu.m_Zoom = 0.01; GetPrm3DVisu().m_Zoom = 0.01; break; break; case ID_ZOOM_OUT: case ID_ZOOM_OUT: g_Parm_3D_Visu.m_Zoom *= 1.2; GetPrm3DVisu().m_Zoom *= 1.2; break; break; case ID_ZOOM_REDRAW: case ID_ZOOM_REDRAW: Loading Loading @@ -410,27 +410,27 @@ void EDA_3D_FRAME::Process_Special_Functions( wxCommandEvent& event ) break; break; case ID_ROTATE3D_X_POS: case ID_ROTATE3D_X_POS: g_Parm_3D_Visu.m_ROTX += ROT_ANGLE; GetPrm3DVisu().m_ROTX += ROT_ANGLE; break; break; case ID_ROTATE3D_X_NEG: case ID_ROTATE3D_X_NEG: g_Parm_3D_Visu.m_ROTX -= ROT_ANGLE; GetPrm3DVisu().m_ROTX -= ROT_ANGLE; break; break; case ID_ROTATE3D_Y_POS: case ID_ROTATE3D_Y_POS: g_Parm_3D_Visu.m_ROTY += ROT_ANGLE; GetPrm3DVisu().m_ROTY += ROT_ANGLE; break; break; case ID_ROTATE3D_Y_NEG: case ID_ROTATE3D_Y_NEG: g_Parm_3D_Visu.m_ROTY -= ROT_ANGLE; GetPrm3DVisu().m_ROTY -= ROT_ANGLE; break; break; case ID_ROTATE3D_Z_POS: case ID_ROTATE3D_Z_POS: g_Parm_3D_Visu.m_ROTZ += ROT_ANGLE; GetPrm3DVisu().m_ROTZ += ROT_ANGLE; break; break; case ID_ROTATE3D_Z_NEG: case ID_ROTATE3D_Z_NEG: g_Parm_3D_Visu.m_ROTZ -= ROT_ANGLE; GetPrm3DVisu().m_ROTZ -= ROT_ANGLE; break; break; case ID_MOVE3D_LEFT: case ID_MOVE3D_LEFT: Loading Loading @@ -460,97 +460,97 @@ void EDA_3D_FRAME::Process_Special_Functions( wxCommandEvent& event ) break; break; case ID_MENU3D_BGCOLOR_SELECTION: case ID_MENU3D_BGCOLOR_SELECTION: Set3DBgColor( g_Parm_3D_Visu.m_BgColor ); Get3DColorFromUser( GetPrm3DVisu().m_BgColor ); return; return; case ID_MENU3D_BGCOLOR_TOP_SELECTION: case ID_MENU3D_BGCOLOR_TOP_SELECTION: Set3DBgColor( g_Parm_3D_Visu.m_BgColor_Top ); Get3DColorFromUser( GetPrm3DVisu().m_BgColor_Top ); return; return; case ID_MENU3D_REALISTIC_MODE: case ID_MENU3D_REALISTIC_MODE: g_Parm_3D_Visu.SetFlag( FL_USE_REALISTIC_MODE, isChecked ); GetPrm3DVisu().SetFlag( FL_USE_REALISTIC_MODE, isChecked ); NewDisplay(); NewDisplay(); return; return; case ID_MENU3D_FL_RENDER_SHADOWS: case ID_MENU3D_FL_RENDER_SHADOWS: g_Parm_3D_Visu.SetFlag( FL_RENDER_SHADOWS, isChecked ); GetPrm3DVisu().SetFlag( FL_RENDER_SHADOWS, isChecked ); NewDisplay(); NewDisplay(); return; return; case ID_MENU3D_FL_RENDER_SHOW_HOLES_IN_ZONES: case ID_MENU3D_FL_RENDER_SHOW_HOLES_IN_ZONES: g_Parm_3D_Visu.SetFlag( FL_RENDER_SHOW_HOLES_IN_ZONES, isChecked ); GetPrm3DVisu().SetFlag( FL_RENDER_SHOW_HOLES_IN_ZONES, isChecked ); NewDisplay(); NewDisplay(); return; return; case ID_MENU3D_FL_RENDER_TEXTURES: case ID_MENU3D_FL_RENDER_TEXTURES: g_Parm_3D_Visu.SetFlag( FL_RENDER_TEXTURES, isChecked ); GetPrm3DVisu().SetFlag( FL_RENDER_TEXTURES, isChecked ); NewDisplay(GL_ID_BOARD); NewDisplay(GL_ID_BOARD); NewDisplay(GL_ID_TECH_LAYERS); NewDisplay(GL_ID_TECH_LAYERS); return; return; case ID_MENU3D_FL_RENDER_SMOOTH: case ID_MENU3D_FL_RENDER_SMOOTH: g_Parm_3D_Visu.SetFlag( FL_RENDER_SMOOTH, isChecked ); GetPrm3DVisu().SetFlag( FL_RENDER_SMOOTH, isChecked ); NewDisplay(); NewDisplay(); return; return; case ID_MENU3D_FL_RENDER_MATERIAL: case ID_MENU3D_FL_RENDER_MATERIAL: g_Parm_3D_Visu.SetFlag( FL_RENDER_MATERIAL, isChecked ); GetPrm3DVisu().SetFlag( FL_RENDER_MATERIAL, isChecked ); NewDisplay(); NewDisplay(); return; return; case ID_MENU3D_SHOW_BOARD_BODY: case ID_MENU3D_SHOW_BOARD_BODY: g_Parm_3D_Visu.SetFlag( FL_SHOW_BOARD_BODY, isChecked ); GetPrm3DVisu().SetFlag( FL_SHOW_BOARD_BODY, isChecked ); NewDisplay(); NewDisplay(); return; return; case ID_MENU3D_AXIS_ONOFF: case ID_MENU3D_AXIS_ONOFF: g_Parm_3D_Visu.SetFlag( FL_AXIS, isChecked ); GetPrm3DVisu().SetFlag( FL_AXIS, isChecked ); m_canvas->Refresh(); m_canvas->Refresh(); return; return; case ID_MENU3D_MODULE_ONOFF: case ID_MENU3D_MODULE_ONOFF: g_Parm_3D_Visu.SetFlag( FL_MODULE, isChecked ); GetPrm3DVisu().SetFlag( FL_MODULE, isChecked ); m_canvas->Refresh(); m_canvas->Refresh(); return; return; case ID_MENU3D_USE_COPPER_THICKNESS: case ID_MENU3D_USE_COPPER_THICKNESS: g_Parm_3D_Visu.SetFlag( FL_USE_COPPER_THICKNESS, isChecked ); GetPrm3DVisu().SetFlag( FL_USE_COPPER_THICKNESS, isChecked ); NewDisplay(GL_ID_BOARD); NewDisplay(GL_ID_BOARD); NewDisplay(GL_ID_TECH_LAYERS); NewDisplay(GL_ID_TECH_LAYERS); return; return; case ID_MENU3D_ZONE_ONOFF: case ID_MENU3D_ZONE_ONOFF: g_Parm_3D_Visu.SetFlag( FL_ZONE, isChecked ); GetPrm3DVisu().SetFlag( FL_ZONE, isChecked ); NewDisplay(GL_ID_BOARD); NewDisplay(GL_ID_BOARD); return; return; case ID_MENU3D_ADHESIVE_ONOFF: case ID_MENU3D_ADHESIVE_ONOFF: g_Parm_3D_Visu.SetFlag( FL_ADHESIVE, isChecked ); GetPrm3DVisu().SetFlag( FL_ADHESIVE, isChecked ); NewDisplay(GL_ID_TECH_LAYERS); NewDisplay(GL_ID_TECH_LAYERS); return; return; case ID_MENU3D_SILKSCREEN_ONOFF: case ID_MENU3D_SILKSCREEN_ONOFF: g_Parm_3D_Visu.SetFlag( FL_SILKSCREEN, isChecked ); GetPrm3DVisu().SetFlag( FL_SILKSCREEN, isChecked ); NewDisplay(GL_ID_TECH_LAYERS); NewDisplay(GL_ID_TECH_LAYERS); return; return; case ID_MENU3D_SOLDER_MASK_ONOFF: case ID_MENU3D_SOLDER_MASK_ONOFF: g_Parm_3D_Visu.SetFlag( FL_SOLDERMASK, isChecked ); GetPrm3DVisu().SetFlag( FL_SOLDERMASK, isChecked ); NewDisplay(GL_ID_TECH_LAYERS); NewDisplay(GL_ID_TECH_LAYERS); return; return; case ID_MENU3D_SOLDER_PASTE_ONOFF: case ID_MENU3D_SOLDER_PASTE_ONOFF: g_Parm_3D_Visu.SetFlag( FL_SOLDERPASTE, isChecked ); GetPrm3DVisu().SetFlag( FL_SOLDERPASTE, isChecked ); NewDisplay(GL_ID_TECH_LAYERS); NewDisplay(GL_ID_TECH_LAYERS); return; return; case ID_MENU3D_COMMENTS_ONOFF: case ID_MENU3D_COMMENTS_ONOFF: g_Parm_3D_Visu.SetFlag( FL_COMMENTS, isChecked ); GetPrm3DVisu().SetFlag( FL_COMMENTS, isChecked ); NewDisplay(GL_ID_AUX_LAYERS); NewDisplay(GL_ID_AUX_LAYERS); return; return; case ID_MENU3D_ECO_ONOFF: case ID_MENU3D_ECO_ONOFF: g_Parm_3D_Visu.SetFlag( FL_ECO, isChecked ); GetPrm3DVisu().SetFlag( FL_ECO, isChecked ); NewDisplay(GL_ID_AUX_LAYERS); NewDisplay(GL_ID_AUX_LAYERS); return; return; Loading Loading @@ -579,27 +579,27 @@ void EDA_3D_FRAME::On3DGridSelection( wxCommandEvent& event ) switch( id ) switch( id ) { { case ID_MENU3D_GRID_NOGRID: case ID_MENU3D_GRID_NOGRID: g_Parm_3D_Visu.SetFlag( FL_GRID, false ); GetPrm3DVisu().SetFlag( FL_GRID, false ); break; break; case ID_MENU3D_GRID_10_MM: case ID_MENU3D_GRID_10_MM: g_Parm_3D_Visu.SetFlag( FL_GRID, true ); GetPrm3DVisu().SetFlag( FL_GRID, true ); g_Parm_3D_Visu.m_3D_Grid = 10.0; GetPrm3DVisu().m_3D_Grid = 10.0; break; break; case ID_MENU3D_GRID_5_MM: case ID_MENU3D_GRID_5_MM: g_Parm_3D_Visu.SetFlag( FL_GRID, true ); GetPrm3DVisu().SetFlag( FL_GRID, true ); g_Parm_3D_Visu.m_3D_Grid = 5.0; GetPrm3DVisu().m_3D_Grid = 5.0; break; break; case ID_MENU3D_GRID_2P5_MM: case ID_MENU3D_GRID_2P5_MM: g_Parm_3D_Visu.SetFlag( FL_GRID, true ); GetPrm3DVisu().SetFlag( FL_GRID, true ); g_Parm_3D_Visu.m_3D_Grid = 2.5; GetPrm3DVisu().m_3D_Grid = 2.5; break; break; case ID_MENU3D_GRID_1_MM: case ID_MENU3D_GRID_1_MM: g_Parm_3D_Visu.SetFlag( FL_GRID, true ); GetPrm3DVisu().SetFlag( FL_GRID, true ); g_Parm_3D_Visu.m_3D_Grid = 1.0; GetPrm3DVisu().m_3D_Grid = 1.0; break; break; default: default: Loading Loading @@ -636,7 +636,7 @@ void EDA_3D_FRAME::OnActivate( wxActivateEvent& event ) /* called to set the background color of the 3D scene /* called to set the background color of the 3D scene */ */ bool EDA_3D_FRAME::Set3DBgColor( S3D_COLOR &color ) bool EDA_3D_FRAME::Get3DColorFromUser( S3D_COLOR &color ) { { wxColour newcolor, oldcolor; wxColour newcolor, oldcolor; Loading @@ -663,3 +663,17 @@ BOARD* EDA_3D_FRAME::GetBoard() { { return Parent()->GetBoard(); return Parent()->GetBoard(); } } INFO3D_VISU& EDA_3D_FRAME::GetPrm3DVisu() const { // return the INFO3D_VISU which contains the current parameters // to draw the 3D view og the board return g_Parm_3D_Visu; } bool EDA_3D_FRAME::IsEnabled( DISPLAY3D_FLG aItem ) const { // return true if aItem must be displayed return GetPrm3DVisu().GetFlag( aItem ); }