// Draw 3D pads. void EDA_3D_CANVAS::draw3DPadHole( const D_PAD* aPad ) { // Draw the pad hole wxSize drillsize = aPad->GetDrillSize(); bool hasHole = drillsize.x && drillsize.y; if( !hasHole ) return; // Store here the points to approximate hole by segments SHAPE_POLY_SET holecornersBuffer; int thickness = GetPrm3DVisu().GetCopperThicknessBIU(); int height = GetPrm3DVisu().GetLayerZcoordBIU( F_Cu ) - GetPrm3DVisu().GetLayerZcoordBIU( B_Cu ); if( isRealisticMode() ) setGLCopperColor(); else SetGLColor( DARKGRAY ); int holeZpoz = GetPrm3DVisu().GetLayerZcoordBIU( B_Cu ) - thickness / 2; int holeHeight = height + thickness; if( drillsize.x == drillsize.y ) // usual round hole { int hole_radius = ( drillsize.x + thickness ) / 2; Draw3D_ZaxisCylinder( aPad->GetPosition(), hole_radius, holeHeight, thickness, holeZpoz, GetPrm3DVisu().m_BiuTo3Dunits ); } else // Oblong hole { wxPoint ends_offset; int width; if( drillsize.x > drillsize.y ) // Horizontal oval { ends_offset.x = ( drillsize.x - drillsize.y ) / 2; width = drillsize.y; } else // Vertical oval { ends_offset.y = ( drillsize.y - drillsize.x ) / 2; width = drillsize.x; } RotatePoint( &ends_offset, aPad->GetOrientation() ); wxPoint start = aPad->GetPosition() + ends_offset; wxPoint end = aPad->GetPosition() - ends_offset; int hole_radius = ( width + thickness ) / 2; // Draw the hole Draw3D_ZaxisOblongCylinder( start, end, hole_radius, holeHeight, thickness, holeZpoz, GetPrm3DVisu().m_BiuTo3Dunits ); } }
void EDA_3D_CANVAS::draw3DViaHole( const VIA* aVia ) { LAYER_ID top_layer, bottom_layer; int thickness = GetPrm3DVisu().GetCopperThicknessBIU(); int inner_radius = (int)((float)aVia->GetDrillValue() * 1.01f) / 2.0f; // This add a bit more in order to correct a draw artifact while using thickness aVia->LayerPair( &top_layer, &bottom_layer ); // Drawing via hole: if( isRealisticMode() ) setGLCopperColor(); else { EDA_COLOR_T color = g_ColorsSettings.GetItemColor( VIAS_VISIBLE + aVia->GetViaType() ); SetGLColor( color ); } int height = GetPrm3DVisu().GetLayerZcoordBIU( top_layer ) - GetPrm3DVisu().GetLayerZcoordBIU( bottom_layer ) + thickness; int zpos = GetPrm3DVisu().GetLayerZcoordBIU( bottom_layer ) - thickness / 2; Draw3D_ZaxisCylinder( aVia->GetStart(), inner_radius, height, thickness, zpos, GetPrm3DVisu().m_BiuTo3Dunits ); }
void EDA_3D_CANVAS::Draw3DViaHole( const VIA* aVia ) { LAYER_ID top_layer, bottom_layer; int inner_radius = aVia->GetDrillValue() / 2; int thickness = GetPrm3DVisu().GetCopperThicknessBIU(); aVia->LayerPair( &top_layer, &bottom_layer ); // Drawing via hole: if( isRealisticMode() ) setGLCopperColor(); else { EDA_COLOR_T color = g_ColorsSettings.GetItemColor( VIAS_VISIBLE + aVia->GetViaType() ); SetGLColor( color ); } int height = GetPrm3DVisu().GetLayerZcoordBIU( top_layer ) - GetPrm3DVisu().GetLayerZcoordBIU( bottom_layer ) - thickness; int zpos = GetPrm3DVisu().GetLayerZcoordBIU( bottom_layer ) + thickness / 2; Draw3D_ZaxisCylinder( aVia->GetStart(), inner_radius + thickness / 2, height, thickness, zpos, GetPrm3DVisu().m_BiuTo3Dunits ); }