Patch originating from Jonas Diemer
This commit is contained in:
parent
a1edf83826
commit
ae459044de
|
@ -962,13 +962,17 @@ void DeleteStruct( WinEDA_DrawPanel* panel, wxDC* DC, EDA_BaseStruct* DrawStruct
|
|||
{
|
||||
screen->RemoveFromDrawList( DrawStruct );
|
||||
|
||||
if( DrawStruct->Type() == DRAW_SEGMENT_STRUCT_TYPE )
|
||||
if( (DrawStruct->Type() == DRAW_SEGMENT_STRUCT_TYPE) ||
|
||||
(DrawStruct->Type() == DRAW_JUNCTION_STRUCT_TYPE) ||
|
||||
(DrawStruct->Type() == DRAW_LIB_ITEM_STRUCT_TYPE) )
|
||||
{
|
||||
D( printf("PostDirtyRect()\n"); )
|
||||
panel->PostDirtyRect( ((EDA_DrawLineStruct*)DrawStruct)->GetBoundingBox() );
|
||||
panel->PostDirtyRect( DrawStruct->GetBoundingBox() );
|
||||
}
|
||||
else
|
||||
{
|
||||
D( DrawStruct->Show( 0, std::cout ); ) // tell me which classes still need GetBoundingBox support
|
||||
RedrawOneStruct( panel, DC, DrawStruct, g_XorMode );
|
||||
}
|
||||
|
||||
/* Unlink the structure */
|
||||
DrawStruct->Pnext = DrawStruct->Pback = NULL; // Only one struct -> no link
|
||||
|
|
|
@ -241,7 +241,7 @@ void EDA_DrawLineStruct::Show( int nestLevel, std::ostream& os )
|
|||
|
||||
|
||||
|
||||
EDA_Rect EDA_DrawLineStruct::GetBoundingBox() const
|
||||
EDA_Rect EDA_DrawLineStruct::GetBoundingBox()
|
||||
{
|
||||
int width = 25;
|
||||
|
||||
|
@ -257,7 +257,49 @@ EDA_Rect EDA_DrawLineStruct::GetBoundingBox() const
|
|||
return ret;
|
||||
}
|
||||
|
||||
EDA_Rect DrawJunctionStruct::GetBoundingBox()
|
||||
{
|
||||
int width = DRAWJUNCTION_SIZE * 2;
|
||||
int xmin = m_Pos.x - DRAWJUNCTION_SIZE ;
|
||||
int ymin = m_Pos.y - DRAWJUNCTION_SIZE;
|
||||
|
||||
EDA_Rect ret( wxPoint( xmin, ymin ), wxSize( width, width ) );
|
||||
|
||||
return ret;
|
||||
};
|
||||
|
||||
|
||||
EDA_Rect EDA_SchComponentStruct::GetBoundingBox()
|
||||
{
|
||||
const int PADDING = 40;
|
||||
int xmin, xmax, ymin, ymax;
|
||||
|
||||
// This gives a reasonable approximation (but some things are missing so...
|
||||
EDA_Rect ret = GetBoundaryBox();
|
||||
xmin = ret.m_Pos.x;
|
||||
ymin = ret.m_Pos.y;
|
||||
xmax = ret.m_Pos.x + ret.m_Size.x;
|
||||
ymax = ret.m_Pos.y + ret.m_Size.y;
|
||||
|
||||
// Include BoundingBoxes of fields
|
||||
for( int i = REFERENCE; i < NUMBER_OF_FIELDS; i++ )
|
||||
{
|
||||
EDA_Rect box = m_Field[i].GetBoundaryBox();
|
||||
xmin = MIN( xmin, box.m_Pos.x);
|
||||
ymin = MIN( ymin, box.m_Pos.y);
|
||||
xmax = MAX( xmax, box.m_Pos.x + box.m_Size.x);
|
||||
ymax = MAX( ymax, box.m_Pos.y + box.m_Size.y);
|
||||
}
|
||||
|
||||
// ... add padding TODO: improve this
|
||||
ret.m_Pos.x = xmin - PADDING;
|
||||
ret.m_Pos.y = ymin - PADDING;
|
||||
ret.m_Size.x = xmax - xmin + 2*PADDING;
|
||||
ret.m_Size.y = ymax - ymin + 2*PADDING;
|
||||
|
||||
D( printf("final box: %d,%d, %d,%d\n", ret.m_Pos.x, ret.m_Pos.y, ret.m_Size.x, ret.m_Size.y); )
|
||||
return ret;
|
||||
}
|
||||
|
||||
/****************************/
|
||||
/* Class DrawPolylineStruct */
|
||||
|
|
|
@ -234,7 +234,7 @@ EDA_SchComponentStruct::EDA_SchComponentStruct( const wxPoint& pos ) :
|
|||
|
||||
|
||||
/************************************************/
|
||||
EDA_Rect EDA_SchComponentStruct::GetBoundaryBox()
|
||||
EDA_Rect EDA_SchComponentStruct::GetBoundaryBox() const
|
||||
/************************************************/
|
||||
{
|
||||
EDA_LibComponentStruct* Entry = FindLibPart( m_ChipName.GetData(), wxEmptyString, FIND_ROOT );
|
||||
|
@ -733,7 +733,7 @@ bool PartTextStruct::IsVoid()
|
|||
|
||||
|
||||
/********************************************/
|
||||
EDA_Rect PartTextStruct::GetBoundaryBox()
|
||||
EDA_Rect PartTextStruct::GetBoundaryBox() const
|
||||
/********************************************/
|
||||
|
||||
/* return
|
||||
|
|
|
@ -59,7 +59,7 @@ public:
|
|||
void PartTextCopy( PartTextStruct* target );
|
||||
void Place( WinEDA_DrawFrame* frame, wxDC* DC );
|
||||
|
||||
EDA_Rect GetBoundaryBox();
|
||||
EDA_Rect GetBoundaryBox() const;
|
||||
bool IsVoid();
|
||||
void SwapData( PartTextStruct* copyitem );
|
||||
};
|
||||
|
@ -123,7 +123,8 @@ public:
|
|||
wxPoint GetScreenCoord( const wxPoint& coord );
|
||||
void Display_Infos( WinEDA_DrawFrame* frame );
|
||||
void ClearAnnotation();
|
||||
EDA_Rect GetBoundaryBox();
|
||||
EDA_Rect GetBoundaryBox() const;
|
||||
EDA_Rect GetBoundingBox();
|
||||
|
||||
const wxString& ReturnFieldName( int aFieldNdx ) const;
|
||||
|
||||
|
|
|
@ -91,12 +91,7 @@ public:
|
|||
return m_Start == m_End;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Function GetBoundingBox
|
||||
* returns the bounding box of this TRACK
|
||||
*/
|
||||
EDA_Rect GetBoundingBox() const;
|
||||
EDA_Rect GetBoundingBox();
|
||||
|
||||
virtual void Draw( WinEDA_DrawPanel* panel, wxDC* DC, const wxPoint& offset, int draw_mode,
|
||||
int Color = -1 );
|
||||
|
@ -234,6 +229,7 @@ public:
|
|||
return wxT( "DrawJunction" );
|
||||
}
|
||||
|
||||
EDA_Rect GetBoundingBox();
|
||||
|
||||
DrawJunctionStruct* GenCopy();
|
||||
virtual void Draw( WinEDA_DrawPanel* panel, wxDC* DC, const wxPoint& offset,
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*********************************************************************/
|
||||
/* base_struct.h : Basic classes for most kicad item descriptions */
|
||||
/* base_struct.h : Basic classes for most kicad item descriptions */
|
||||
/*********************************************************************/
|
||||
|
||||
#ifndef BASE_STRUCT_H
|
||||
|
@ -125,6 +125,78 @@ public:
|
|||
};
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Class EDA_Rect
|
||||
* handles the component boundary box.
|
||||
* This class is similar to wxRect, but some wxRect functions are very curious,
|
||||
* so I prefer this suitable class
|
||||
*/
|
||||
class EDA_Rect
|
||||
{
|
||||
public:
|
||||
wxPoint m_Pos; // Rectangle Origin
|
||||
wxSize m_Size; // Rectangle Size
|
||||
|
||||
public:
|
||||
EDA_Rect() { };
|
||||
|
||||
EDA_Rect( const wxPoint& aPos, const wxSize& aSize ) :
|
||||
m_Pos( aPos ), m_Size( aSize )
|
||||
{}
|
||||
|
||||
wxPoint Centre()
|
||||
{
|
||||
return wxPoint( m_Pos.x + (m_Size.x >> 1), m_Pos.y + (m_Size.y >> 1) );
|
||||
}
|
||||
|
||||
|
||||
void Normalize(); // Ensure the height and width are >= 0
|
||||
bool Inside( const wxPoint& point ); // Return TRUE if point is in Rect
|
||||
|
||||
bool Inside( int x, int y ) { return Inside( wxPoint( x, y ) ); }
|
||||
wxSize GetSize() { return m_Size; }
|
||||
int GetX() { return m_Pos.x; }
|
||||
int GetY() { return m_Pos.y; }
|
||||
wxPoint GetOrigin() { return m_Pos; }
|
||||
wxPoint GetPosition() { return m_Pos; }
|
||||
wxPoint GetEnd() { return wxPoint( GetRight(), GetBottom() ); }
|
||||
int GetWidth() { return m_Size.x; }
|
||||
int GetHeight() { return m_Size.y; }
|
||||
int GetRight() { return m_Pos.x + m_Size.x; }
|
||||
int GetBottom() { return m_Pos.y + m_Size.y; }
|
||||
void SetOrigin( const wxPoint& pos ) { m_Pos = pos; }
|
||||
void SetOrigin( int x, int y ) { m_Pos.x = x; m_Pos.y = y; }
|
||||
void SetSize( const wxSize& size ) { m_Size = size; }
|
||||
void SetSize( int w, int h ) { m_Size.x = w; m_Size.y = h; }
|
||||
void Offset( int dx, int dy ) { m_Pos.x += dx; m_Pos.y += dy; }
|
||||
void Offset( const wxPoint& offset ) { m_Pos.x += offset.x; m_Pos.y += offset.y; }
|
||||
void SetX( int val ) { m_Pos.x = val; }
|
||||
void SetY( int val ) { m_Pos.y = val; }
|
||||
void SetWidth( int val ) { m_Size.x = val; }
|
||||
void SetHeight( int val ) { m_Size.y = val; }
|
||||
void SetEnd( const wxPoint& pos )
|
||||
{
|
||||
m_Size.x = pos.x - m_Pos.x; m_Size.y = pos.y - m_Pos.y;
|
||||
}
|
||||
|
||||
/**
|
||||
* Function Intersects
|
||||
* @return bool - true if the argument rectangle intersects this rectangle.
|
||||
*/
|
||||
bool Intersects( const EDA_Rect aRect ) const;
|
||||
|
||||
|
||||
/**
|
||||
* Function operator(wxRect)
|
||||
* overloads the cast operator to return a wxRect
|
||||
*/
|
||||
operator wxRect() const { return wxRect( m_Pos, m_Size ); }
|
||||
|
||||
EDA_Rect& Inflate( wxCoord dx, wxCoord dy );
|
||||
};
|
||||
|
||||
|
||||
/********************************************************************/
|
||||
/* Classes de base: servent a deriver les classes reellement utiles */
|
||||
/********************************************************************/
|
||||
|
@ -268,6 +340,19 @@ public:
|
|||
return false; // derived classes should override this function
|
||||
}
|
||||
|
||||
/**
|
||||
* Function GetBoundingBox
|
||||
* returns the orthogonal, bounding box of this object for display purposes.
|
||||
* This box should be an enclosing perimeter for visible components of this
|
||||
* object, and the units should be in the pcb or schematic coordinate system.
|
||||
* It is OK to overestimate the size by a few counts.
|
||||
*/
|
||||
virtual EDA_Rect GetBoundingBox()
|
||||
{
|
||||
// return a zero-sized box per default. derived classes should override this
|
||||
EDA_Rect ret( wxPoint( 0, 0 ), wxSize( 0, 0 ) );
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* Function IterateForward
|
||||
|
@ -414,7 +499,7 @@ public:
|
|||
virtual ~EDA_TextStruct();
|
||||
void CreateDrawData();
|
||||
|
||||
int GetLength() { return m_Text.Length(); };
|
||||
int GetLength() const { return m_Text.Length(); };
|
||||
|
||||
/** Function Pitch()
|
||||
* @return distance between 2 caracteres
|
||||
|
@ -600,74 +685,4 @@ public:
|
|||
DrawPickedStruct* Next() { return (DrawPickedStruct*) Pnext; }
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Class EDA_Rect
|
||||
* handles the component boundary box.
|
||||
* This class is similar to wxRect, but some wxRect functions are very curious,
|
||||
* so I prefer this suitable class
|
||||
*/
|
||||
class EDA_Rect
|
||||
{
|
||||
public:
|
||||
wxPoint m_Pos; // Rectangle Origin
|
||||
wxSize m_Size; // Rectangle Size
|
||||
|
||||
public:
|
||||
EDA_Rect() { };
|
||||
EDA_Rect( const wxPoint& aPos, const wxSize& aSize ) :
|
||||
m_Pos( aPos ), m_Size( aSize )
|
||||
{}
|
||||
|
||||
wxPoint Centre()
|
||||
{
|
||||
return wxPoint( m_Pos.x + (m_Size.x >> 1), m_Pos.y + (m_Size.y >> 1) );
|
||||
}
|
||||
|
||||
|
||||
void Normalize(); // Ensure the height and width are >= 0
|
||||
bool Inside( const wxPoint& point ); // Return TRUE if point is in Rect
|
||||
|
||||
bool Inside( int x, int y ) { return Inside( wxPoint( x, y ) ); }
|
||||
wxSize GetSize() { return m_Size; }
|
||||
int GetX() { return m_Pos.x; }
|
||||
int GetY() { return m_Pos.y; }
|
||||
wxPoint GetOrigin() { return m_Pos; }
|
||||
wxPoint GetPosition() { return m_Pos; }
|
||||
wxPoint GetEnd() { return wxPoint( GetRight(), GetBottom() ); }
|
||||
int GetWidth() { return m_Size.x; }
|
||||
int GetHeight() { return m_Size.y; }
|
||||
int GetRight() { return m_Pos.x + m_Size.x; }
|
||||
int GetBottom() { return m_Pos.y + m_Size.y; }
|
||||
void SetOrigin( const wxPoint& pos ) { m_Pos = pos; }
|
||||
void SetOrigin( int x, int y ) { m_Pos.x = x; m_Pos.y = y; }
|
||||
void SetSize( const wxSize& size ) { m_Size = size; }
|
||||
void SetSize( int w, int h ) { m_Size.x = w; m_Size.y = h; }
|
||||
void Offset( int dx, int dy ) { m_Pos.x += dx; m_Pos.y += dy; }
|
||||
void Offset( const wxPoint& offset ) { m_Pos.x += offset.x; m_Pos.y += offset.y; }
|
||||
void SetX( int val ) { m_Pos.x = val; }
|
||||
void SetY( int val ) { m_Pos.y = val; }
|
||||
void SetWidth( int val ) { m_Size.x = val; }
|
||||
void SetHeight( int val ) { m_Size.y = val; }
|
||||
void SetEnd( const wxPoint& pos )
|
||||
{
|
||||
m_Size.x = pos.x - m_Pos.x; m_Size.y = pos.y - m_Pos.y;
|
||||
}
|
||||
|
||||
/**
|
||||
* Function Intersects
|
||||
* @return bool - true if the argument rectangle intersects this rectangle.
|
||||
*/
|
||||
bool Intersects( const EDA_Rect aRect ) const;
|
||||
|
||||
|
||||
/**
|
||||
* Function operator(wxRect)
|
||||
* overloads the cast operator to return a wxRect
|
||||
*/
|
||||
operator wxRect() const { return wxRect( m_Pos, m_Size ); }
|
||||
|
||||
EDA_Rect& Inflate( wxCoord dx, wxCoord dy );
|
||||
};
|
||||
|
||||
#endif /* BASE_STRUCT_H */
|
||||
|
|
|
@ -219,7 +219,7 @@ int TRACK::IsPointOnEnds( const wxPoint& point, int min_dist )
|
|||
}
|
||||
|
||||
|
||||
EDA_Rect TRACK::GetBoundingBox() const
|
||||
EDA_Rect TRACK::GetBoundingBox()
|
||||
{
|
||||
// end of track is round, this is its radius, rounded up
|
||||
int radius = ( m_Width+1 )/2;
|
||||
|
|
|
@ -67,12 +67,7 @@ public:
|
|||
return m_Start; // it had to be start or end.
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Function GetBoundingBox
|
||||
* returns the bounding box of this TRACK
|
||||
*/
|
||||
EDA_Rect GetBoundingBox() const;
|
||||
EDA_Rect GetBoundingBox();
|
||||
|
||||
|
||||
/* supprime du chainage la structure Struct */
|
||||
|
|
Loading…
Reference in New Issue