Pcbnew: Fix bug 1042394 and very minor code cleaning.
This commit is contained in:
parent
bff11cea90
commit
a4de3018d7
|
@ -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()
|
||||||
/* 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()
|
||||||
-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 )
|
||||||
|
|
||||||
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 )
|
||||||
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 )
|
||||||
}
|
}
|
||||||
|
|
||||||
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 )
|
||||||
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 )
|
||||||
{
|
{
|
||||||
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 )
|
||||||
{
|
{
|
||||||
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 )
|
||||||
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 )
|
||||||
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 )
|
||||||
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();
|
||||||
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,
|
||||||
|
|
||||||
// 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,
|
||||||
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,
|
||||||
|
|
||||||
// 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,
|
||||||
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,
|
||||||
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,
|
||||||
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 )
|
||||||
// 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 @@
|
||||||
#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
|
||||||
|
|
||||||
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
|
||||||
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 @@
|
||||||
* 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 )
|
||||||
|
|
||||||
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 )
|
||||||
* "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 )
|
||||||
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 )
|
||||||
* 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
|
||||||
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
|
||||||
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
|
||||||
* 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
|
||||||
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 ) )
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue