dirty stuff
This commit is contained in:
parent
32a693f574
commit
920ea81061
|
@ -5,19 +5,36 @@ Started 2007-June-11
|
|||
Please add newer entries at the top, list the date and your name with
|
||||
email address.
|
||||
|
||||
2008-Mar-10 UPDATE Dick Hollenbeck <dick@softplc.com>
|
||||
================================================================================
|
||||
+pcbnew
|
||||
* Improved some comments on new functions.
|
||||
* Changed
|
||||
void ConvertPcbUnitsToPixelsUnits( EDA_Rect& aRect ); to
|
||||
void ConvertPcbUnitsToPixelsUnits( EDA_Rect* aRect );
|
||||
which I prefer because it is clearer to the human reader of the calling
|
||||
context that the passed argument is to be modified. References as function
|
||||
arguments are fine, but if they are to be modified, passing by pointer
|
||||
gives human reader a clearer picture when looking at the calling context.
|
||||
* TRACK::GetBoundingBox() now (1) rounds up the radius, and (2) returns a bounding
|
||||
box which is [pos,dim) in nature, [inclusive, exclusive).
|
||||
* Changed from "new wxDCClip()" to use an automatic wxDCClip() variable in
|
||||
drawpanel.cpp
|
||||
* Removed a printf() from "release" build of drawpanel.cpp
|
||||
|
||||
|
||||
2008-Mar-10 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
|
||||
================================================================================
|
||||
+pcbnew
|
||||
Pcbnew can import footprints in gpcb format in Nelib format only
|
||||
Pcbnew automatically recognizes pcbnew or gpcb format when importing a footprint.
|
||||
Due to differences between pcbnew and gpcb,
|
||||
only gpcb newlib files containing only one footprint (one element) are useables.
|
||||
Dirty rectangle calculation debugged.
|
||||
WinEDA_DrawPanel::ConvertPcbUnitsToPixelsUnits( EDA_Rect& aRect ) can be used to convert a bouding box to a clip box
|
||||
(see example in deltrack.cpp)
|
||||
|
||||
Pcbnew can import footprints in gpcb format in Nelib format only
|
||||
Pcbnew automatically recognizes pcbnew or gpcb format when importing a footprint.
|
||||
Due to differences between pcbnew and gpcb,
|
||||
only gpcb newlib files containing only one footprint (one element) are useables.
|
||||
Dirty rectangle calculation debugged.
|
||||
WinEDA_DrawPanel::ConvertPcbUnitsToPixelsUnits( EDA_Rect& aRect ) can be used to convert a bouding box to a clip box
|
||||
(see example in deltrack.cpp)
|
||||
+eeschema:
|
||||
restored: missing lines in schedit.cpp (problems in a lot of commands)
|
||||
restored: missing lines in schedit.cpp (problems in a lot of commands)
|
||||
|
||||
|
||||
2008-Mar-06 UPDATE Igor Plyatov <plyatov@mail.ru>
|
||||
|
|
|
@ -96,20 +96,23 @@ public:
|
|||
wxPoint CursorRealPosition( const wxPoint& ScreenPos );
|
||||
wxPoint CursorScreenPosition();
|
||||
|
||||
/** Function ConvertPcbUnitsToPixelsUnits
|
||||
* Convert pos and size of the given EDA_Rect to pos and size in pixels,
|
||||
* relative to the current draw area (origin 0,0 is the left top visible corner draw area)
|
||||
* according to the current scrool and zoom
|
||||
* @param aRect = the given rect
|
||||
*/
|
||||
void ConvertPcbUnitsToPixelsUnits( EDA_Rect & aRect);
|
||||
/** Function ConvertPcbUnitsToPixelsUnits
|
||||
* Convert a given wxPoint position (in internal units) to the pos in pixels,
|
||||
* relative to the current draw area (origin 0,0 is the left top visible corner draw area)
|
||||
* according to the current scrool and zoom
|
||||
* @param aPosition = the given position
|
||||
*/
|
||||
void ConvertPcbUnitsToPixelsUnits( wxPoint & aPosition);
|
||||
/**
|
||||
* Function ConvertPcbUnitsToPixelsUnits
|
||||
* converts pos and size of the given EDA_Rect to pos and size in pixels,
|
||||
* relative to the current draw area (origin 0,0 is the left top visible
|
||||
* corner of draw area) according to the current scroll and zoom.
|
||||
* @param aRect = the rectangle to convert
|
||||
*/
|
||||
void ConvertPcbUnitsToPixelsUnits( EDA_Rect* aRect );
|
||||
|
||||
/**
|
||||
* Function ConvertPcbUnitsToPixelsUnits
|
||||
* converts a given wxPoint position (in internal units) to units of pixels,
|
||||
* relative to the current draw area (origin 0,0 is the left top visible
|
||||
* corner of draw area) according to the current scroll and zoom.
|
||||
* @param aPosition = the position to convert
|
||||
*/
|
||||
void ConvertPcbUnitsToPixelsUnits( wxPoint* aPosition );
|
||||
|
||||
wxPoint GetScreenCenterRealPosition( void );
|
||||
void MouseToCursorSchema();
|
||||
|
|
|
@ -207,7 +207,8 @@ int TRACK::IsPointOnEnds( const wxPoint& point, int min_dist )
|
|||
|
||||
EDA_Rect TRACK::GetBoundingBox() const
|
||||
{
|
||||
int radius = m_Width/2; // end of track is round, this is its radius
|
||||
// end of track is round, this is its radius, rounded up
|
||||
int radius = ( m_Width+1 )/2;
|
||||
|
||||
int ymax = MAX( m_Start.y, m_End.y );
|
||||
int xmax = MAX( m_Start.x, m_End.x );
|
||||
|
@ -221,7 +222,8 @@ EDA_Rect TRACK::GetBoundingBox() const
|
|||
ymin -= radius;
|
||||
xmin -= radius;
|
||||
|
||||
return EDA_Rect( wxPoint( xmin, ymin ), wxSize( xmax-xmin, ymax-ymin ) );
|
||||
// return a rectangle which is [pos,dim) in nature. therefore the +1
|
||||
return EDA_Rect( wxPoint( xmin, ymin ), wxSize( xmax-xmin+1, ymax-ymin+1 ) );
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -375,13 +375,13 @@ static bool Magnetize( BOARD* m_Pcb, WinEDA_PcbFrame* frame,
|
|||
if( !doCheckNet || !currTrack || currTrack->GetNet() == via->GetNet() )
|
||||
{
|
||||
*curpos = via->m_Start;
|
||||
D(printf("via hit\n");)
|
||||
// D(printf("via hit\n");)
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
D( printf( "skipping self\n" ); )
|
||||
// D( printf( "skipping self\n" ); )
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -393,7 +393,7 @@ static bool Magnetize( BOARD* m_Pcb, WinEDA_PcbFrame* frame,
|
|||
if( !track || track->Type() != TYPETRACK )
|
||||
return false;
|
||||
|
||||
D( printf( "Project\n" ); )
|
||||
// D( printf( "Project\n" ); )
|
||||
return Project( curpos, on_grid, track );
|
||||
}
|
||||
|
||||
|
@ -431,7 +431,7 @@ static bool Magnetize( BOARD* m_Pcb, WinEDA_PcbFrame* frame,
|
|||
|
||||
if( Join( curpos, track->m_Start, track->m_End, currTrack->m_Start, currTrack->m_End ) )
|
||||
{
|
||||
D(printf( "join currTrack->Type()=%d\n", currTrack->Type() );)
|
||||
// D(printf( "join currTrack->Type()=%d\n", currTrack->Type() );)
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -453,14 +453,14 @@ static bool Magnetize( BOARD* m_Pcb, WinEDA_PcbFrame* frame,
|
|||
{
|
||||
if( distStart <= currTrack->m_Width/2 )
|
||||
{
|
||||
D(printf("nearest end is start\n");)
|
||||
// D(printf("nearest end is start\n");)
|
||||
*curpos = track->m_Start;
|
||||
return true;
|
||||
}
|
||||
|
||||
if( distEnd <= currTrack->m_Width/2 )
|
||||
{
|
||||
D(printf("nearest end is end\n");)
|
||||
// D(printf("nearest end is end\n");)
|
||||
*curpos = track->m_End;
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -130,15 +130,16 @@ TRACK* WinEDA_PcbFrame::Delete_Segment( wxDC* DC, TRACK* Track )
|
|||
EDA_Rect dirty = Track->GetBoundingBox();
|
||||
|
||||
// Convert the rect coordinates and size in pixels (make a draw clip box):
|
||||
DrawPanel->ConvertPcbUnitsToPixelsUnits( dirty );
|
||||
DrawPanel->ConvertPcbUnitsToPixelsUnits( &dirty );
|
||||
|
||||
/* now that TRACK::GetBoundingBox() returns a [,) type of rectangle, and
|
||||
rounds up the track radius, let's see if this is really needed.
|
||||
// Ensure the last line and column are in the dirty rectangle after truncatures
|
||||
dirty.m_Size.x += 1; dirty.m_Size.y += 1;
|
||||
*/
|
||||
|
||||
// pass wxRect() via EDA_Rect::operator wxRect() overload
|
||||
wxRect dirtyR = dirty;
|
||||
|
||||
DrawPanel->RefreshRect( dirtyR, TRUE );
|
||||
DrawPanel->RefreshRect( dirty, TRUE );
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -267,52 +267,50 @@ bool WinEDA_DrawPanel::IsPointOnDisplay( wxPoint ref_pos )
|
|||
|
||||
|
||||
/************************************************************************/
|
||||
void WinEDA_DrawPanel::ConvertPcbUnitsToPixelsUnits( EDA_Rect& aRect )
|
||||
void WinEDA_DrawPanel::ConvertPcbUnitsToPixelsUnits( EDA_Rect* aRect )
|
||||
/************************************************************************/
|
||||
|
||||
/** Function ConvertPcbUnitsToPixelsUnits
|
||||
* Convert pos and size off the given EDA_Rect to pos and size in pixels,
|
||||
* relative to the current draw area (origin 0,0 is the left top visible corner draw area)
|
||||
* according to the current scrool and zoom
|
||||
* @param aRect = the given rect
|
||||
*/
|
||||
{
|
||||
// Calculate the draw area origin in internal units:
|
||||
wxPoint pos = aRect.GetPosition();
|
||||
wxPoint pos = aRect->GetPosition();
|
||||
|
||||
ConvertPcbUnitsToPixelsUnits( pos );
|
||||
aRect.SetOrigin( pos ); // rect origin in pixel units
|
||||
aRect.m_Size.x /= GetZoom();
|
||||
aRect.m_Size.y /= GetZoom(); // size in pixel units
|
||||
ConvertPcbUnitsToPixelsUnits( &pos );
|
||||
|
||||
aRect->SetOrigin( pos ); // rect origin in pixel units
|
||||
|
||||
aRect->m_Size.x /= GetZoom();
|
||||
aRect->m_Size.y /= GetZoom(); // size in pixel units
|
||||
}
|
||||
|
||||
|
||||
/***************************************************************************/
|
||||
void WinEDA_DrawPanel::ConvertPcbUnitsToPixelsUnits( wxPoint& aPosition )
|
||||
void WinEDA_DrawPanel::ConvertPcbUnitsToPixelsUnits( wxPoint* aPosition )
|
||||
/***************************************************************************/
|
||||
|
||||
/** Function ConvertPcbUnitsToPixelsUnits
|
||||
* Convert a given wxPoint position (in internal units) to the pos in pixels,
|
||||
* relative to the current draw area (origin 0,0 is the left top visible corner draw area)
|
||||
* according to the current scrool and zoom
|
||||
* @param aPosition = the given position
|
||||
*/
|
||||
{
|
||||
// Calculate the draw area origin in internal units:
|
||||
wxPoint drwOrig;
|
||||
int x_axis_scale, y_axis_scale;
|
||||
|
||||
GetViewStart( &drwOrig.x, &drwOrig.y ); // Origin in scrool units;
|
||||
// Origin in scroll units;
|
||||
GetViewStart( &drwOrig.x, &drwOrig.y );
|
||||
GetScrollPixelsPerUnit( &x_axis_scale, &y_axis_scale );
|
||||
drwOrig.x *= x_axis_scale; drwOrig.y *= y_axis_scale; // Origin in pixels units;
|
||||
drwOrig.x *= GetZoom(); drwOrig.y *= GetZoom(); // Origin in internal units;
|
||||
|
||||
drwOrig += GetScreen()->m_DrawOrg; // Real origin, according to the "plot" origin
|
||||
// Origin in pixels units
|
||||
drwOrig.x *= x_axis_scale;
|
||||
drwOrig.y *= y_axis_scale;
|
||||
|
||||
aPosition -= drwOrig; // position in internal units, relative to the visible draw area origin
|
||||
// Origin in internal units
|
||||
drwOrig.x *= GetZoom();
|
||||
drwOrig.y *= GetZoom();
|
||||
|
||||
aPosition.x /= GetZoom();
|
||||
aPosition.y /= GetZoom(); // position in pixels, relative to the visible draw area origin
|
||||
// Real origin, according to the "plot" origin
|
||||
drwOrig += GetScreen()->m_DrawOrg;
|
||||
|
||||
// position in internal units, relative to the visible draw area origin
|
||||
*aPosition -= drwOrig;
|
||||
|
||||
// position in pixels, relative to the visible draw area origin
|
||||
aPosition->x /= GetZoom();
|
||||
aPosition->y /= GetZoom();
|
||||
}
|
||||
|
||||
|
||||
|
@ -546,17 +544,13 @@ void WinEDA_DrawPanel::OnPaint( wxPaintEvent& event )
|
|||
|
||||
org = m_ClipBox.GetOrigin();
|
||||
|
||||
static int counter;
|
||||
|
||||
wxRegion upd = GetUpdateRegion(); // get the update rect list
|
||||
|
||||
++counter;
|
||||
|
||||
// get the union of all rectangles in the update region, 'upd'
|
||||
PaintClipBox = upd.GetBox();
|
||||
|
||||
#if 1 && defined (DEBUG)
|
||||
printf( "PaintClipBox[%d]=(%d, %d, %d, %d) org=(%d, %d) m_ClipBox=(%d, %d, %d, %d)\n",
|
||||
counter,
|
||||
#if 0 && defined (DEBUG)
|
||||
printf( "PaintClipBox=(%d, %d, %d, %d) org=(%d, %d) m_ClipBox=(%d, %d, %d, %d)\n",
|
||||
PaintClipBox.x,
|
||||
PaintClipBox.y,
|
||||
PaintClipBox.width,
|
||||
|
@ -583,9 +577,8 @@ void WinEDA_DrawPanel::OnPaint( wxPaintEvent& event )
|
|||
#endif
|
||||
|
||||
|
||||
#if 1 // && defined(DEBUG)
|
||||
printf( "PaintClipBox[%d]=(%d, %d, %d, %d) org=(%d, %d) m_ClipBox=(%d, %d, %d, %d)\n",
|
||||
counter,
|
||||
#if 0 && defined(DEBUG)
|
||||
printf( "PaintClipBox=(%d, %d, %d, %d) org=(%d, %d) m_ClipBox=(%d, %d, %d, %d)\n",
|
||||
PaintClipBox.x,
|
||||
PaintClipBox.y,
|
||||
PaintClipBox.width,
|
||||
|
@ -599,9 +592,12 @@ void WinEDA_DrawPanel::OnPaint( wxPaintEvent& event )
|
|||
|
||||
PaintClipBox = m_ClipBox;
|
||||
|
||||
wxDCClipper* dcclip = new wxDCClipper( paintDC, PaintClipBox );
|
||||
ReDraw( &paintDC, TRUE );
|
||||
delete dcclip;
|
||||
// call ~wxDCClipper() before ~wxPaintDC()
|
||||
{
|
||||
wxDCClipper dcclip( paintDC, PaintClipBox );
|
||||
|
||||
ReDraw( &paintDC, TRUE );
|
||||
}
|
||||
|
||||
m_ClipBox = tmp;
|
||||
event.Skip();
|
||||
|
|
Loading…
Reference in New Issue