Commit a4de3018 authored by jean-pierre charras's avatar jean-pierre charras

Pcbnew: Fix bug 1042394 and very minor code cleaning.

parent bff11cea
...@@ -129,7 +129,7 @@ void Set_Object_Data( std::vector< S3D_VERTEX >& aVertices, double aBiuTo3DUnits ...@@ -129,7 +129,7 @@ void Set_Object_Data( std::vector< S3D_VERTEX >& aVertices, double aBiuTo3DUnits
/* draw polygon/triangle/quad */ /* draw polygon/triangle/quad */
for( ii = 0; ii < aVertices.size(); ii++ ) for( ii = 0; ii < aVertices.size(); ii++ )
{ {
glVertex3f( aVertices[ii].x * aBiuTo3DUnits, glVertex3d( aVertices[ii].x * aBiuTo3DUnits,
aVertices[ii].y * aBiuTo3DUnits, aVertices[ii].y * aBiuTo3DUnits,
aVertices[ii].z * aBiuTo3DUnits ); aVertices[ii].z * aBiuTo3DUnits );
} }
......
...@@ -499,8 +499,9 @@ void EDA_3D_CANVAS::InitGL() ...@@ -499,8 +499,9 @@ void EDA_3D_CANVAS::InitGL()
/* speedups */ /* speedups */
glEnable( GL_DITHER ); glEnable( GL_DITHER );
glShadeModel( GL_SMOOTH ); glShadeModel( GL_SMOOTH );
glHint( GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST ); glHint( GL_PERSPECTIVE_CORRECTION_HINT, GL_DONT_CARE );
glHint( GL_POLYGON_SMOOTH_HINT, GL_FASTEST ); glHint( GL_LINE_SMOOTH_HINT, GL_NICEST );
glHint( GL_POLYGON_SMOOTH_HINT, GL_NICEST ); // can be GL_FASTEST
/* blend */ /* blend */
glEnable( GL_BLEND ); glEnable( GL_BLEND );
......
...@@ -154,8 +154,6 @@ GLuint EDA_3D_CANVAS::CreateDrawGL_List() ...@@ -154,8 +154,6 @@ GLuint EDA_3D_CANVAS::CreateDrawGL_List()
-g_Parm_3D_Visu.m_BoardPos.y * g_Parm_3D_Visu.m_BiuTo3Dunits, -g_Parm_3D_Visu.m_BoardPos.y * g_Parm_3D_Visu.m_BiuTo3Dunits,
0.0F ); 0.0F );
glNormal3f( 0.0, 0.0, 1.0 ); // Normal is Z axis
// draw tracks and vias : // draw tracks and vias :
for( TRACK* track = pcb->m_Track; track != NULL; track = track->Next() ) for( TRACK* track = pcb->m_Track; track != NULL; track = track->Next() )
{ {
...@@ -453,7 +451,7 @@ void EDA_3D_CANVAS::DrawGrid( double aGriSizeMM ) ...@@ -453,7 +451,7 @@ void EDA_3D_CANVAS::DrawGrid( double aGriSizeMM )
void EDA_3D_CANVAS::Draw3D_Track( TRACK* aTrack ) void EDA_3D_CANVAS::Draw3D_Track( TRACK* aTrack )
{ {
int layer = aTrack->GetLayer(); int layer = aTrack->GetLayer();
int color = g_ColorsSettings.GetLayerColor( layer ); int color = g_ColorsSettings.GetLayerColor( layer );
int thickness = g_Parm_3D_Visu.GetCopperThicknessBIU(); int thickness = g_Parm_3D_Visu.GetCopperThicknessBIU();
...@@ -463,7 +461,7 @@ void EDA_3D_CANVAS::Draw3D_Track( TRACK* aTrack ) ...@@ -463,7 +461,7 @@ void EDA_3D_CANVAS::Draw3D_Track( TRACK* aTrack )
int zpos = g_Parm_3D_Visu.GetLayerZcoordBIU( layer ); int zpos = g_Parm_3D_Visu.GetLayerZcoordBIU( layer );
SetGLColor( color ); SetGLColor( color );
glNormal3f( 0.0, 0.0, (layer == LAYER_N_BACK) ? -1.0 : 1.0 ); glNormal3f( 0.0, 0.0, Get3DLayer_Z_Orientation( layer ) );
Draw3D_SolidSegment( aTrack->m_Start, aTrack->m_End, Draw3D_SolidSegment( aTrack->m_Start, aTrack->m_End,
aTrack->m_Width, thickness, zpos, aTrack->m_Width, thickness, zpos,
...@@ -503,13 +501,11 @@ void EDA_3D_CANVAS::Draw3D_Via( SEGVIA* via ) ...@@ -503,13 +501,11 @@ void EDA_3D_CANVAS::Draw3D_Via( SEGVIA* via )
} }
SetGLColor( color ); SetGLColor( color );
glNormal3f( 0.0, 0.0, Get3DLayer_Z_Orientation( layer ) );
if( thickness == 0 )
glNormal3f( 0.0, 0.0, layer == LAYER_N_BACK ? -1.0 : 1.0 );
Draw3D_ZaxisCylinder( via->m_Start, (outer_radius + inner_radius)/2, Draw3D_ZaxisCylinder( via->m_Start, (outer_radius + inner_radius)/2,
thickness, outer_radius - inner_radius, thickness, outer_radius - inner_radius,
zpos - (thickness/2), biu_to_3Dunits ); zpos, biu_to_3Dunits );
if( layer >= top_layer ) if( layer >= top_layer )
break; break;
} }
...@@ -518,7 +514,7 @@ void EDA_3D_CANVAS::Draw3D_Via( SEGVIA* via ) ...@@ -518,7 +514,7 @@ void EDA_3D_CANVAS::Draw3D_Via( SEGVIA* via )
color = g_ColorsSettings.GetItemColor( VIAS_VISIBLE + via->m_Shape ); color = g_ColorsSettings.GetItemColor( VIAS_VISIBLE + via->m_Shape );
SetGLColor( color ); SetGLColor( color );
int height = g_Parm_3D_Visu.GetLayerZcoordBIU(top_layer) - int height = g_Parm_3D_Visu.GetLayerZcoordBIU(top_layer) -
g_Parm_3D_Visu.GetLayerZcoordBIU( bottom_layer ) - thickness; g_Parm_3D_Visu.GetLayerZcoordBIU( bottom_layer );
int zpos = g_Parm_3D_Visu.GetLayerZcoordBIU(bottom_layer) + thickness/2; int zpos = g_Parm_3D_Visu.GetLayerZcoordBIU(bottom_layer) + thickness/2;
Draw3D_ZaxisCylinder( via->m_Start, inner_radius + thickness/2, height, Draw3D_ZaxisCylinder( via->m_Start, inner_radius + thickness/2, height,
...@@ -538,7 +534,7 @@ void EDA_3D_CANVAS::Draw3D_DrawSegment( DRAWSEGMENT* segment ) ...@@ -538,7 +534,7 @@ void EDA_3D_CANVAS::Draw3D_DrawSegment( DRAWSEGMENT* segment )
{ {
for( layer = 0; layer < g_Parm_3D_Visu.m_CopperLayersCount; layer++ ) for( layer = 0; layer < g_Parm_3D_Visu.m_CopperLayersCount; layer++ )
{ {
glNormal3f( 0.0, 0.0, (layer == LAYER_N_BACK) ? -1.0 : 1.0 ); glNormal3f( 0.0, 0.0, Get3DLayer_Z_Orientation( layer ) );
int zpos = g_Parm_3D_Visu.GetLayerZcoordBIU(layer); int zpos = g_Parm_3D_Visu.GetLayerZcoordBIU(layer);
switch( segment->GetShape() ) switch( segment->GetShape() )
...@@ -784,7 +780,7 @@ void EDGE_MODULE::Draw3D( EDA_3D_CANVAS* glcanvas ) ...@@ -784,7 +780,7 @@ void EDGE_MODULE::Draw3D( EDA_3D_CANVAS* glcanvas )
{ {
for( int layer = 0; layer < g_Parm_3D_Visu.m_CopperLayersCount; layer++ ) for( int layer = 0; layer < g_Parm_3D_Visu.m_CopperLayersCount; layer++ )
{ {
glNormal3f( 0.0, 0.0, (layer == LAYER_N_BACK) ? -1.0 : 1.0 ); glNormal3f( 0.0, 0.0, Get3DLayer_Z_Orientation( layer ) );
int zpos = g_Parm_3D_Visu.GetLayerZcoordBIU( layer ); int zpos = g_Parm_3D_Visu.GetLayerZcoordBIU( layer );
int thickness = g_Parm_3D_Visu.GetLayerObjectThicknessBIU( m_Layer ); int thickness = g_Parm_3D_Visu.GetLayerObjectThicknessBIU( m_Layer );
...@@ -827,7 +823,7 @@ void EDGE_MODULE::Draw3D( EDA_3D_CANVAS* glcanvas ) ...@@ -827,7 +823,7 @@ void EDGE_MODULE::Draw3D( EDA_3D_CANVAS* glcanvas )
else else
{ {
int thickness = g_Parm_3D_Visu.GetLayerObjectThicknessBIU( m_Layer ); int thickness = g_Parm_3D_Visu.GetLayerObjectThicknessBIU( m_Layer );
glNormal3f( 0.0, 0.0, (m_Layer == LAYER_N_BACK) ? -1.0 : 1.0 ); glNormal3f( 0.0, 0.0, Get3DLayer_Z_Orientation( m_Layer ) );
int zpos = g_Parm_3D_Visu.GetLayerZcoordBIU(m_Layer); int zpos = g_Parm_3D_Visu.GetLayerZcoordBIU(m_Layer);
switch( m_Shape ) switch( m_Shape )
...@@ -970,7 +966,7 @@ void D_PAD::Draw3D( EDA_3D_CANVAS* glcanvas ) ...@@ -970,7 +966,7 @@ void D_PAD::Draw3D( EDA_3D_CANVAS* glcanvas )
int zpos = g_Parm_3D_Visu.GetLayerZcoordBIU( layer ); int zpos = g_Parm_3D_Visu.GetLayerZcoordBIU( layer );
int ring_radius = (m_Size.x + m_Drill.x) / 4; int ring_radius = (m_Size.x + m_Drill.x) / 4;
if( thickness == 0 ) if( thickness == 0 )
glNormal3f( 0.0, 0.0, layer == LAYER_N_BACK ? -1.0 : 1.0 ); glNormal3f( 0.0, 0.0, Get3DLayer_Z_Orientation( layer ) );
Draw3D_ZaxisCylinder(shape_pos, ring_radius, Draw3D_ZaxisCylinder(shape_pos, ring_radius,
thickness, ( m_Size.x - m_Drill.x) / 2, thickness, ( m_Size.x - m_Drill.x) / 2,
...@@ -1047,7 +1043,7 @@ void D_PAD::Draw3D( EDA_3D_CANVAS* glcanvas ) ...@@ -1047,7 +1043,7 @@ void D_PAD::Draw3D( EDA_3D_CANVAS* glcanvas )
SetGLColor( color ); SetGLColor( color );
if( thickness == 0 ) if( thickness == 0 )
glNormal3f( 0.0, 0.0, layer == LAYER_N_BACK ? -1.0 : 1.0 ); glNormal3f( 0.0, 0.0, Get3DLayer_Z_Orientation( layer ) );
// If not hole: draw a single polygon // If not hole: draw a single polygon
int zpos = g_Parm_3D_Visu.GetLayerZcoordBIU( layer ); int zpos = g_Parm_3D_Visu.GetLayerZcoordBIU( layer );
......
...@@ -52,6 +52,18 @@ static void CALLBACK tessEndCB(); ...@@ -52,6 +52,18 @@ static void CALLBACK tessEndCB();
static void CALLBACK tessErrorCB( GLenum errorCode ); static void CALLBACK tessErrorCB( GLenum errorCode );
static void CALLBACK tessCPolyPt2Vertex( const GLvoid* data ); static void CALLBACK tessCPolyPt2Vertex( const GLvoid* data );
// 2 helper functions to set the current normal vector for gle items
static inline void SetNormalZpos()
{
glNormal3f( 0.0, 0.0, 1.0 );
}
static inline void SetNormalZneg()
{
glNormal3f( 0.0, 0.0, -1.0 );
}
/* Draw3D_VerticalPolygonalCylinder is a helper function. /* Draw3D_VerticalPolygonalCylinder is a helper function.
* *
* draws a "vertical cylinder" having a polygon shape * draws a "vertical cylinder" having a polygon shape
...@@ -147,7 +159,7 @@ void Draw3D_SolidHorizontalPolyPolygons( const std::vector<CPolyPt>& aPolysList, ...@@ -147,7 +159,7 @@ void Draw3D_SolidHorizontalPolyPolygons( const std::vector<CPolyPt>& aPolysList,
// Set normal to toward positive Z axis, for a solid object only (to draw the top side) // Set normal to toward positive Z axis, for a solid object only (to draw the top side)
if( aThickness ) if( aThickness )
glNormal3f( 0.0, 0.0, 1.0 ); SetNormalZpos();
// gluTessProperty(tess, GLU_TESS_WINDING_RULE, GLU_TESS_WINDING_ODD); // gluTessProperty(tess, GLU_TESS_WINDING_RULE, GLU_TESS_WINDING_ODD);
...@@ -191,7 +203,7 @@ void Draw3D_SolidHorizontalPolyPolygons( const std::vector<CPolyPt>& aPolysList, ...@@ -191,7 +203,7 @@ void Draw3D_SolidHorizontalPolyPolygons( const std::vector<CPolyPt>& aPolysList,
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 // Now;, set normal to toward negative Z axis, for the solid object bottom side
glNormal3f( 0.0, 0.0, -1.0 ); SetNormalZneg();
} }
gluDeleteTess( tess ); gluDeleteTess( tess );
...@@ -201,8 +213,6 @@ void Draw3D_SolidHorizontalPolyPolygons( const std::vector<CPolyPt>& aPolysList, ...@@ -201,8 +213,6 @@ void Draw3D_SolidHorizontalPolyPolygons( const std::vector<CPolyPt>& aPolysList,
// Build the 3D data : vertical side // Build the 3D data : vertical side
Draw3D_VerticalPolygonalCylinder( polylist, aThickness, aZpos, false, aBiuTo3DUnits ); Draw3D_VerticalPolygonalCylinder( polylist, aThickness, aZpos, false, aBiuTo3DUnits );
glNormal3f( 0.0, 0.0, 1.0 );
} }
...@@ -258,7 +268,7 @@ void Draw3D_ZaxisCylinder( wxPoint aCenterPos, int aRadius, ...@@ -258,7 +268,7 @@ void Draw3D_ZaxisCylinder( wxPoint aCenterPos, int aRadius,
if( aThickness ) if( aThickness )
{ {
// draw top (front) and bottom (back) horizontal sides (rings) // draw top (front) and bottom (back) horizontal sides (rings)
glNormal3f( 0.0, 0.0, 1.0 ); SetNormalZpos();
outer_cornerBuffer.insert( outer_cornerBuffer.end(), outer_cornerBuffer.insert( outer_cornerBuffer.end(),
inner_cornerBuffer.begin(), inner_cornerBuffer.end() ); inner_cornerBuffer.begin(), inner_cornerBuffer.end() );
std::vector<CPolyPt> polygon; std::vector<CPolyPt> polygon;
...@@ -270,12 +280,12 @@ void Draw3D_ZaxisCylinder( wxPoint aCenterPos, int aRadius, ...@@ -270,12 +280,12 @@ void Draw3D_ZaxisCylinder( wxPoint aCenterPos, int aRadius,
if( aHeight ) if( aHeight )
{ {
// draw bottom (back) horizontal ring // draw bottom (back) horizontal ring
glNormal3f( 0.0, 0.0, -1.0 ); SetNormalZneg();
Draw3D_SolidHorizontalPolyPolygons( polygon, aZpos, 0, aBiuTo3DUnits ); Draw3D_SolidHorizontalPolyPolygons( polygon, aZpos, 0, aBiuTo3DUnits );
} }
} }
glNormal3f( 0.0, 0.0, 1.0 ); // Normal is Z axis SetNormalZpos();
} }
...@@ -326,18 +336,18 @@ void Draw3D_ZaxisOblongCylinder( wxPoint aAxis1Pos, wxPoint aAxis2Pos, ...@@ -326,18 +336,18 @@ void Draw3D_ZaxisOblongCylinder( wxPoint aAxis1Pos, wxPoint aAxis2Pos,
ConvertPolysListWithHolesToOnePolygon( outer_cornerBuffer, polygon ); ConvertPolysListWithHolesToOnePolygon( outer_cornerBuffer, polygon );
// draw top (front) horizontal side (ring) // draw top (front) horizontal side (ring)
glNormal3f( 0.0, 0.0, 1.0 ); SetNormalZpos();
Draw3D_SolidHorizontalPolyPolygons( polygon, aZpos + aHeight, 0, aBiuTo3DUnits ); Draw3D_SolidHorizontalPolyPolygons( polygon, aZpos + aHeight, 0, aBiuTo3DUnits );
if( aHeight ) if( aHeight )
{ {
// draw bottom (back) horizontal side (ring) // draw bottom (back) horizontal side (ring)
glNormal3f( 0.0, 0.0, -1.0 ); SetNormalZneg();
Draw3D_SolidHorizontalPolyPolygons( polygon, aZpos, 0, aBiuTo3DUnits ); Draw3D_SolidHorizontalPolyPolygons( polygon, aZpos, 0, aBiuTo3DUnits );
} }
} }
glNormal3f( 0.0, 0.0, 1.0 ); // Normal is Z axis SetNormalZpos();
} }
...@@ -395,7 +405,7 @@ void CALLBACK tessCPolyPt2Vertex( const GLvoid* data ) ...@@ -395,7 +405,7 @@ void CALLBACK tessCPolyPt2Vertex( const GLvoid* data )
// cast back to double type // cast back to double type
const CPolyPt* ptr = (const CPolyPt*) data; const CPolyPt* ptr = (const CPolyPt*) data;
glVertex3f( ptr->x * g_Parm_3D_Visu.m_BiuTo3Dunits, glVertex3d( ptr->x * g_Parm_3D_Visu.m_BiuTo3Dunits,
-ptr->y * g_Parm_3D_Visu.m_BiuTo3Dunits, -ptr->y * g_Parm_3D_Visu.m_BiuTo3Dunits,
g_Parm_3D_Visu.m_CurrentZpos ); g_Parm_3D_Visu.m_CurrentZpos );
} }
......
...@@ -45,8 +45,8 @@ ...@@ -45,8 +45,8 @@
#include <menus_helpers.h> #include <menus_helpers.h>
//external functions used here: //external functions used here:
extern bool Magnetize( BOARD* m_Pcb, PCB_EDIT_FRAME* frame, extern bool Magnetize( PCB_EDIT_FRAME* frame, int aCurrentTool,
int aCurrentTool, wxSize grid, wxPoint on_grid, wxPoint* curpos ); wxSize aGridSize, wxPoint on_grid, wxPoint* curpos );
/** /**
...@@ -323,11 +323,11 @@ void PCB_EDIT_FRAME::GeneralControl( wxDC* aDC, const wxPoint& aPosition, int aH ...@@ -323,11 +323,11 @@ void PCB_EDIT_FRAME::GeneralControl( wxDC* aDC, const wxPoint& aPosition, int aH
wxPoint curs_pos = pos; wxPoint curs_pos = pos;
wxSize grid; wxSize igridsize;
grid.x = KiROUND( GetScreen()->GetGridSize().x ); igridsize.x = KiROUND( gridSize.x );
grid.y = KiROUND( GetScreen()->GetGridSize().y ); igridsize.y = KiROUND( gridSize.y );
if( Magnetize( m_Pcb, this, GetToolId(), grid, curs_pos, &pos ) ) if( Magnetize( this, GetToolId(), igridsize, curs_pos, &pos ) )
{ {
GetScreen()->SetCrossHairPosition( pos, false ); GetScreen()->SetCrossHairPosition( pos, false );
} }
...@@ -350,7 +350,7 @@ void PCB_EDIT_FRAME::GeneralControl( wxDC* aDC, const wxPoint& aPosition, int aH ...@@ -350,7 +350,7 @@ void PCB_EDIT_FRAME::GeneralControl( wxDC* aDC, const wxPoint& aPosition, int aH
pos = GetScreen()->GetCrossHairPosition(); pos = GetScreen()->GetCrossHairPosition();
GetScreen()->SetCrossHairPosition( oldpos, false ); GetScreen()->SetCrossHairPosition( oldpos, false );
m_canvas->CrossHairOff( aDC ); m_canvas->CrossHairOff( aDC );
GetScreen()->SetCrossHairPosition( pos, snapToGrid ); GetScreen()->SetCrossHairPosition( pos, false );
m_canvas->CrossHairOn( aDC ); m_canvas->CrossHairOn( aDC );
if( m_canvas->IsMouseCaptured() ) if( m_canvas->IsMouseCaptured() )
......
...@@ -28,7 +28,7 @@ ...@@ -28,7 +28,7 @@
* Join returns the point in "res" and "true" if a suitable point was found, * Join returns the point in "res" and "true" if a suitable point was found,
* "false" if both lines are parallel or if the length of either segment is zero. * "false" if both lines are parallel or if the length of either segment is zero.
*/ */
static bool Join( wxPoint* res, wxPoint a0, wxPoint a1, wxPoint b0, wxPoint b1 ) static bool Join( wxPoint* aIntersectPoint, wxPoint a0, wxPoint a1, wxPoint b0, wxPoint b1 )
{ {
/* References: /* References:
http://local.wasp.uwa.edu.au/~pbourke/geometry/lineline2d/ http://local.wasp.uwa.edu.au/~pbourke/geometry/lineline2d/
...@@ -61,8 +61,8 @@ static bool Join( wxPoint* res, wxPoint a0, wxPoint a1, wxPoint b0, wxPoint b1 ) ...@@ -61,8 +61,8 @@ static bool Join( wxPoint* res, wxPoint a0, wxPoint a1, wxPoint b0, wxPoint b1 )
t = std::min( std::max( t, 0.0 ), 1.0 ); t = std::min( std::max( t, 0.0 ), 1.0 );
res->x = KiROUND( a0.x + t * a1.x ); aIntersectPoint->x = KiROUND( a0.x + t * a1.x );
res->y = KiROUND( a0.y + t * a1.y ); aIntersectPoint->y = KiROUND( a0.y + t * a1.y );
return true; return true;
} }
...@@ -72,7 +72,7 @@ static bool Join( wxPoint* res, wxPoint a0, wxPoint a1, wxPoint b0, wxPoint b1 ) ...@@ -72,7 +72,7 @@ static bool Join( wxPoint* res, wxPoint a0, wxPoint a1, wxPoint b0, wxPoint b1 )
* "Project" finds the projection of a grid point on a track. This is the point * "Project" finds the projection of a grid point on a track. This is the point
* from where we want to draw new orthogonal tracks when starting on a track. * from where we want to draw new orthogonal tracks when starting on a track.
*/ */
bool Project( wxPoint* res, wxPoint on_grid, const TRACK* track ) bool Project( wxPoint* aNearPos, wxPoint on_grid, const TRACK* track )
{ {
if( track->m_Start == track->m_End ) if( track->m_Start == track->m_End )
return false; return false;
...@@ -85,8 +85,8 @@ bool Project( wxPoint* res, wxPoint on_grid, const TRACK* track ) ...@@ -85,8 +85,8 @@ bool Project( wxPoint* res, wxPoint on_grid, const TRACK* track )
t /= (double) vec.x * vec.x + (double) vec.y * vec.y; t /= (double) vec.x * vec.x + (double) vec.y * vec.y;
t = std::min( std::max( t, 0.0 ), 1.0 ); t = std::min( std::max( t, 0.0 ), 1.0 );
res->x = KiROUND( track->m_Start.x + t * vec.x ); aNearPos->x = KiROUND( track->m_Start.x + t * vec.x );
res->y = KiROUND( track->m_Start.y + t * vec.y ); aNearPos->y = KiROUND( track->m_Start.y + t * vec.y );
return true; return true;
} }
...@@ -97,15 +97,14 @@ bool Project( wxPoint* res, wxPoint on_grid, const TRACK* track ) ...@@ -97,15 +97,14 @@ bool Project( wxPoint* res, wxPoint on_grid, const TRACK* track )
* tests to see if there are any magnetic items within near reach of the given * tests to see if there are any magnetic items within near reach of the given
* "curpos". If yes, then curpos is adjusted appropriately according to that * "curpos". If yes, then curpos is adjusted appropriately according to that
* near magnetic item and true is returned. * near magnetic item and true is returned.
* @param m_Pcb = the current board
* @param frame = the current frame * @param frame = the current frame
* @param aCurrentTool = the current tool id (from vertical right toolbar) * @param aCurrentTool = the current tool id (from vertical right toolbar)
* @param grid = the grid size * @param aGridSize = the current grid size
* @param on_grid = TODO * @param on_grid = the on grid position near initial position ( often on_grid = curpos)
* @param curpos The initial position, and what to adjust if a change is needed. * @param curpos The initial position, and what to adjust if a change is needed.
* @return bool - true if the position was adjusted magnetically, else false. * @return bool - true if the position was adjusted magnetically, else false.
*/ */
bool Magnetize( BOARD* m_Pcb, PCB_EDIT_FRAME* frame, int aCurrentTool, wxSize grid, bool Magnetize( PCB_EDIT_FRAME* frame, int aCurrentTool, wxSize aGridSize,
wxPoint on_grid, wxPoint* curpos ) wxPoint on_grid, wxPoint* curpos )
{ {
bool doCheckNet = g_MagneticPadOption != capture_always && Drc_On; bool doCheckNet = g_MagneticPadOption != capture_always && Drc_On;
...@@ -113,6 +112,7 @@ bool Magnetize( BOARD* m_Pcb, PCB_EDIT_FRAME* frame, int aCurrentTool, wxSize gr ...@@ -113,6 +112,7 @@ bool Magnetize( BOARD* m_Pcb, PCB_EDIT_FRAME* frame, int aCurrentTool, wxSize gr
bool doPad = false; bool doPad = false;
bool amMovingVia = false; bool amMovingVia = false;
BOARD* m_Pcb = frame->GetBoard();
TRACK* currTrack = g_CurrentTrackSegment; TRACK* currTrack = g_CurrentTrackSegment;
BOARD_ITEM* currItem = frame->GetCurItem(); BOARD_ITEM* currItem = frame->GetCurItem();
PCB_SCREEN* screen = frame->GetScreen(); PCB_SCREEN* screen = frame->GetScreen();
...@@ -188,10 +188,6 @@ bool Magnetize( BOARD* m_Pcb, PCB_EDIT_FRAME* frame, int aCurrentTool, wxSize gr ...@@ -188,10 +188,6 @@ bool Magnetize( BOARD* m_Pcb, PCB_EDIT_FRAME* frame, int aCurrentTool, wxSize gr
return true; return true;
} }
} }
else
{
//D( printf( "skipping self\n" ); )
}
} }
if( !currTrack ) if( !currTrack )
...@@ -214,16 +210,16 @@ bool Magnetize( BOARD* m_Pcb, PCB_EDIT_FRAME* frame, int aCurrentTool, wxSize gr ...@@ -214,16 +210,16 @@ bool Magnetize( BOARD* m_Pcb, PCB_EDIT_FRAME* frame, int aCurrentTool, wxSize gr
* In two segment mode, ignore the final segment if it's inside a grid square. * In two segment mode, ignore the final segment if it's inside a grid square.
*/ */
if( !amMovingVia && currTrack && g_TwoSegmentTrackBuild && currTrack->Back() if( !amMovingVia && currTrack && g_TwoSegmentTrackBuild && currTrack->Back()
&& currTrack->m_Start.x - grid.x < currTrack->m_End.x && currTrack->m_Start.x - aGridSize.x < currTrack->m_End.x
&& currTrack->m_Start.x + grid.x > currTrack->m_End.x && currTrack->m_Start.x + aGridSize.x > currTrack->m_End.x
&& currTrack->m_Start.y - grid.y < currTrack->m_End.y && currTrack->m_Start.y - aGridSize.y < currTrack->m_End.y
&& currTrack->m_Start.y + grid.y > currTrack->m_End.y ) && currTrack->m_Start.y + aGridSize.y > currTrack->m_End.y )
{ {
currTrack = currTrack->Back(); currTrack = currTrack->Back();
} }
for( TRACK* track = m_Pcb->m_Track; track; track = track->Next() ) for( TRACK* track = m_Pcb->m_Track; track; track = track->Next() )
{ {
if( track->Type() != PCB_TRACE_T ) if( track->Type() != PCB_TRACE_T )
continue; continue;
...@@ -241,7 +237,7 @@ bool Magnetize( BOARD* m_Pcb, PCB_EDIT_FRAME* frame, int aCurrentTool, wxSize gr ...@@ -241,7 +237,7 @@ bool Magnetize( BOARD* m_Pcb, PCB_EDIT_FRAME* frame, int aCurrentTool, wxSize gr
if( !track->HitTest( *curpos ) ) if( !track->HitTest( *curpos ) )
continue; continue;
D(printf( "have track prospect\n");) // D(printf( "have track prospect\n");)
if( Join( curpos, track->m_Start, track->m_End, currTrack->m_Start, currTrack->m_End ) ) if( Join( curpos, track->m_Start, track->m_End, currTrack->m_Start, currTrack->m_End ) )
{ {
......
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