Eeschema: fix issues in drag command (mainly hotkey command and forgotten wire ends connected to components to drag).

Rename EDA_Rect::Inside to EDA_Rect::Contains ( EDA_Rect::Inside( const EDA_Rect& aRect ) was very ambiguous )
 Fix some Doxygen warnings and erroneous comments; Add comments.
This commit is contained in:
jean-pierre charras 2010-12-20 18:44:25 +01:00
parent 597f67755b
commit 5bab73d638
37 changed files with 196 additions and 168 deletions

View File

@ -4,6 +4,14 @@ KiCad ChangeLog 2010
Please add newer entries at the top, list the date and your name with Please add newer entries at the top, list the date and your name with
email address. email address.
2010-dec-20, UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
================================================================================
common:
Rename EDA_Rect::Inside to EDA_Rect::Contains
( EDA_Rect::Inside( const EDA_Rect& aRect ) was very ambiguous )
Fix some Doxygen warnings and erroneous comments
2010-Dec-19 UPDATE Dick Hollenbeck <dick@softplc.com> 2010-Dec-19 UPDATE Dick Hollenbeck <dick@softplc.com>
================================================================================ ================================================================================
++new: ++new:

View File

@ -315,7 +315,7 @@ bool EDA_TextStruct::TextHitTest( const wxPoint& aPoint, int aAccuracy ) const
rect.Inflate( aAccuracy ); rect.Inflate( aAccuracy );
RotatePoint( &location, m_Pos, -m_Orient ); RotatePoint( &location, m_Pos, -m_Orient );
return rect.Inside( location ); return rect.Contains( location );
} }
@ -326,7 +326,7 @@ bool EDA_TextStruct::TextHitTest( const EDA_Rect& aRect, bool aContains, int aAc
rect.Inflate( aAccuracy ); rect.Inflate( aAccuracy );
if( aContains ) if( aContains )
return rect.Inside( GetTextBox( -1 ) ); return rect.Contains( GetTextBox( -1 ) );
return rect.Intersects( GetTextBox( -1 ) ); return rect.Intersects( GetTextBox( -1 ) );
} }
@ -515,48 +515,59 @@ void EDA_Rect::Move( const wxPoint& aMoveVector )
/* Return TRUE if point is in Rect /* Return TRUE if point is in Rect
* Accept rect size < 0 * Accept rect size < 0
*/ */
bool EDA_Rect::Inside( const wxPoint& point ) const bool EDA_Rect::Contains( const wxPoint& aPoint ) const
{ {
int rel_posx = point.x - m_Pos.x; wxPoint rel_pos = aPoint - m_Pos;
int rel_posy = point.y - m_Pos.y;
wxSize size = m_Size; wxSize size = m_Size;
if( size.x < 0 ) if( size.x < 0 )
{ {
size.x = -size.x; size.x = -size.x;
rel_posx += size.x; rel_pos.x += size.x;
} }
if( size.y < 0 ) if( size.y < 0 )
{ {
size.y = -size.y; size.y = -size.y;
rel_posy += size.y; rel_pos.y += size.y;
} }
return (rel_posx >= 0) && (rel_posy >= 0) && ( rel_posy <= size.y) && ( rel_posx <= size.x); return (rel_pos.x >= 0) && (rel_pos.y >= 0) && ( rel_pos.y <= size.y) && ( rel_pos.x <= size.x);
} }
/*
bool EDA_Rect::Inside( const EDA_Rect& aRect ) const * return true if aRect is inside me (or on boundaries)
*/
bool EDA_Rect::Contains( const EDA_Rect& aRect ) const
{ {
wxRect rect = aRect; return Contains(aRect.GetOrigin() ) && Contains(aRect.GetEnd() );
wxRect me = wxRect();
return me.Contains( rect );
} }
bool EDA_Rect::Intersects( const EDA_Rect aRect ) const /* Intersects
* test for a common area between 2 rect.
* return true if at least a common point is found
*/
bool EDA_Rect::Intersects( const EDA_Rect& aRect ) const
{ {
// this logic taken from wxWidgets' geometry.cpp file: // this logic taken from wxWidgets' geometry.cpp file:
bool rc; bool rc;
EDA_Rect me(*this);
EDA_Rect rect(aRect);
me.Normalize(); // ensure size is >= 0
rect.Normalize(); // ensure size is >= 0
int left = MAX( m_Pos.x, aRect.m_Pos.x ); // calculate the left common area coordinate:
int right = MIN( m_Pos.x + m_Size.x, aRect.m_Pos.x + aRect.m_Size.x ); int left = MAX( me.m_Pos.x, rect.m_Pos.x );
int top = MAX( m_Pos.y, aRect.m_Pos.y ); // calculate the right common area coordinate:
int bottom = MIN( m_Pos.y + m_Size.y, aRect.m_Pos.y + aRect.m_Size.y ); int right = MIN( me.m_Pos.x + m_Size.x, rect.m_Pos.x + rect.m_Size.x );
// calculate the upper common area coordinate:
int top = MAX( me.m_Pos.y, aRect.m_Pos.y );
// calculate the lower common area coordinate:
int bottom = MIN( me.m_Pos.y + m_Size.y, rect.m_Pos.y + rect.m_Size.y );
if( left < right && top < bottom ) // if a common area exists, it must have a positive (null accepted) size
if( left <= right && top <= bottom )
rc = true; rc = true;
else else
rc = false; rc = false;

View File

@ -118,7 +118,7 @@ bool MARKER_BASE::HitTestMarker( const wxPoint& refPos ) const
rel_pos.x /= m_ScalingFactor; rel_pos.x /= m_ScalingFactor;
rel_pos.y /= m_ScalingFactor; rel_pos.y /= m_ScalingFactor;
return m_ShapeBoundingBox.Inside( rel_pos ); return m_ShapeBoundingBox.Contains( rel_pos );
} }

View File

@ -251,7 +251,7 @@ bool WinEDA_DrawPanel::IsPointOnDisplay( wxPoint ref_pos )
GetScreen()->Unscale( display_rect.m_Size ); GetScreen()->Unscale( display_rect.m_Size );
#endif #endif
return display_rect.Inside( ref_pos ); return display_rect.Contains( ref_pos );
} }

View File

@ -188,7 +188,7 @@ int GRMapY( int y )
*/ */
static bool clipLine( EDA_Rect* aClipBox, int& x1, int& y1, int& x2, int& y2 ) static bool clipLine( EDA_Rect* aClipBox, int& x1, int& y1, int& x2, int& y2 )
{ {
if( aClipBox->Inside( x1, y1 ) && aClipBox->Inside( x2, y2 ) ) if( aClipBox->Contains( x1, y1 ) && aClipBox->Contains( x2, y2 ) )
return false; return false;
wxRect rect = *aClipBox; wxRect rect = *aClipBox;
@ -206,7 +206,7 @@ static bool clipLine( EDA_Rect* aClipBox, int& x1, int& y1, int& x2, int& y2 )
tmpY2 = y2; tmpY2 = y2;
#endif #endif
if( aClipBox->Inside( x1, y1 ) ) if( aClipBox->Contains( x1, y1 ) )
{ {
if( x1 == x2 ) /* Vertical line, clip Y. */ if( x1 == x2 ) /* Vertical line, clip Y. */
{ {
@ -263,7 +263,7 @@ static bool clipLine( EDA_Rect* aClipBox, int& x1, int& y1, int& x2, int& y2 )
#endif #endif
return false; return false;
} }
else if( aClipBox->Inside( x2, y2 ) ) else if( aClipBox->Contains( x2, y2 ) )
{ {
if( x1 == x2 ) /* Vertical line, clip Y. */ if( x1 == x2 ) /* Vertical line, clip Y. */
{ {
@ -704,7 +704,7 @@ void GRPutPixel( EDA_Rect* ClipBox, wxDC* DC, int x, int y, int Color )
void GRSPutPixel( EDA_Rect* ClipBox, wxDC* DC, int x, int y, int Color ) void GRSPutPixel( EDA_Rect* ClipBox, wxDC* DC, int x, int y, int Color )
{ {
if( ClipBox && !ClipBox->Inside( x, y ) ) if( ClipBox && !ClipBox->Contains( x, y ) )
return; return;
GRSetColorPen( DC, Color ); GRSetColorPen( DC, Color );

View File

@ -170,15 +170,14 @@ wxString ReturnKeyNameFromKeyCode( int aKeycode, bool* aIsFound )
} }
/** /* AddHotkeyName
* Function AddHotkeyName
* Add the key name from the Command id value ( m_Idcommand member value) * Add the key name from the Command id value ( m_Idcommand member value)
* @param aText = a wxString. returns aText + key name * aText = a wxString. returns aText + key name
* @param aList = pointer to a Ki_HotkeyInfo list of commands * aList = pointer to a Ki_HotkeyInfo list of commands
* @param aCommandId = Command Id value * aCommandId = Command Id value
* @param aIsShortCut = true to add <tab><keyname> (active shortcuts in menus) * aIsShortCut = true to add <tab><keyname> (active shortcuts in menus)
* = false to add <spaces><(keyname)> * = false to add <spaces><(keyname)>
* @return a wxString (aTest + key name) if key found or aText without modification * Return a wxString (aTest + key name) if key found or aText without modification
*/ */
wxString AddHotkeyName( const wxString& aText, Ki_HotkeyInfo** aList, wxString AddHotkeyName( const wxString& aText, Ki_HotkeyInfo** aList,
int aCommandId, bool aIsShortCut ) int aCommandId, bool aIsShortCut )
@ -200,15 +199,14 @@ wxString AddHotkeyName( const wxString& aText, Ki_HotkeyInfo** aList,
} }
/** /* AddHotkeyName
* Function AddHotkeyName
* Add the key name from the Command id value ( m_Idcommand member value) * Add the key name from the Command id value ( m_Idcommand member value)
* @param aText = a wxString. returns aText + key name * aText = a wxString. returns aText + key name
* @param aList = pointer to a Ki_HotkeyInfoSectionDescriptor DescrList of commands * aList = pointer to a Ki_HotkeyInfoSectionDescriptor DescrList of commands
* @param aCommandId = Command Id value * aCommandId = Command Id value
* @param aIsShortCut = true to add <tab><keyname> (active shortcuts in menus) * aIsShortCut = true to add <tab><keyname> (active shortcuts in menus)
* = false to add <spaces><(keyname)> * = false to add <spaces><(keyname)>
* @return a wxString (aTest + key name) if key found or aText without modification * Return a wxString (aText + key name) if key found or aText without modification
*/ */
wxString AddHotkeyName( const wxString& aText, wxString AddHotkeyName( const wxString& aText,
struct Ki_HotkeyInfoSectionDescriptor* aDescList, struct Ki_HotkeyInfoSectionDescriptor* aDescList,
@ -325,13 +323,9 @@ int ReturnKeyCodeFromKeyName( const wxString& keyname )
} }
/** /* DisplayHotkeyList
* Function DisplayHotkeyList
* Displays the current hotkey list * Displays the current hotkey list
* @param aFrame = current active frame * aList = a Ki_HotkeyInfoSectionDescriptor list(Null terminated)
* @param aList = pointer to a Ki_HotkeyInfoSectionDescriptor list
*(Null terminated)
* @return none
*/ */
void DisplayHotkeyList( WinEDA_DrawFrame* aFrame, void DisplayHotkeyList( WinEDA_DrawFrame* aFrame,
struct Ki_HotkeyInfoSectionDescriptor* aDescList ) struct Ki_HotkeyInfoSectionDescriptor* aDescList )
@ -478,7 +472,6 @@ int WinEDA_BasicFrame::ReadHotkeyConfigFile(
return 1; return 1;
} }
void ReadHotkeyConfig( const wxString& Appname, void ReadHotkeyConfig( const wxString& Appname,
struct Ki_HotkeyInfoSectionDescriptor* aDescList ) struct Ki_HotkeyInfoSectionDescriptor* aDescList )
{ {
@ -496,11 +489,9 @@ void ReadHotkeyConfig( const wxString& Appname,
ParseHotkeyConfig( data, aDescList ); ParseHotkeyConfig( data, aDescList );
} }
/* Function ReadHotkeyConfig
/**
* Function ReadHotkeyConfig
* Read configuration data and fill the current hotkey list with hotkeys * Read configuration data and fill the current hotkey list with hotkeys
* @param aDescList = current hotkey list descr. to initialise. * aDescList is the current hotkey list descr. to initialise.
*/ */
int WinEDA_BasicFrame::ReadHotkeyConfig( struct Ki_HotkeyInfoSectionDescriptor* aDescList ) int WinEDA_BasicFrame::ReadHotkeyConfig( struct Ki_HotkeyInfoSectionDescriptor* aDescList )
{ {
@ -509,16 +500,14 @@ int WinEDA_BasicFrame::ReadHotkeyConfig( struct Ki_HotkeyInfoSectionDescriptor*
} }
/** /* Function ParseHotkeyConfig
* Function ParseHotkeyConfig
* the input format is: shortcut "key" "function" * the input format is: shortcut "key" "function"
* lines starting by # are ignored (comments) * lines starting by # are ignored (comments)
* lines like [xxx] are tags (example: [common] or [libedit] which identify * lines like [xxx] are tags (example: [common] or [libedit] which identify sections
* sections
*/ */
void ParseHotkeyConfig( void ParseHotkeyConfig(
const wxString& data, const wxString& data,
struct Ki_HotkeyInfoSectionDescriptor* DescList ) struct Ki_HotkeyInfoSectionDescriptor* aDescList )
{ {
/* Read the config */ /* Read the config */
wxStringTokenizer tokenizer( data, L"\r\n", wxTOKEN_STRTOK ); wxStringTokenizer tokenizer( data, L"\r\n", wxTOKEN_STRTOK );
@ -536,7 +525,7 @@ void ParseHotkeyConfig(
if( line_type[0] == '[' ) // A tag is found. search infos in list if( line_type[0] == '[' ) // A tag is found. search infos in list
{ {
CurrentHotkeyList = 0; CurrentHotkeyList = 0;
Ki_HotkeyInfoSectionDescriptor* DList = DescList; Ki_HotkeyInfoSectionDescriptor* DList = aDescList;
for( ; DList->m_HK_InfoList; DList++ ) for( ; DList->m_HK_InfoList; DList++ )
{ {
if( *DList->m_SectionTag == line_type ) if( *DList->m_SectionTag == line_type )
@ -639,8 +628,7 @@ void WinEDA_BasicFrame::ExportHotkeyConfigToFile(
} }
/** add hotkey config options submenu to a menu /* add hotkey config options submenu to aMenu
* @param menu : root menu
*/ */
void AddHotkeyConfigMenu( wxMenu* aMenu ) void AddHotkeyConfigMenu( wxMenu* aMenu )
{ {

View File

@ -37,9 +37,9 @@ void DuplicateItemsInList( SCH_SCREEN* screen,
static void CollectStructsToDrag( SCH_SCREEN* screen ); static void CollectStructsToDrag( SCH_SCREEN* screen );
static void AddPickedItem( SCH_SCREEN* screen, wxPoint aPosition ); static void AddPickedItem( SCH_SCREEN* screen, wxPoint aPosition );
static LIB_PIN* GetNextPinPosition( SCH_COMPONENT* aDrawLibItem, static LIB_PIN* GetNextPinPosition( SCH_COMPONENT* aComponent,
wxPoint& aPosition, wxPoint& aPosition,
bool aSearchFirst ); LIB_PIN* aPin );
static void DrawMovingBlockOutlines( WinEDA_DrawPanel* panel, wxDC* DC, bool erase ); static void DrawMovingBlockOutlines( WinEDA_DrawPanel* panel, wxDC* DC, bool erase );
static void SaveStructListForPaste( PICKED_ITEMS_LIST& aItemsList ); static void SaveStructListForPaste( PICKED_ITEMS_LIST& aItemsList );
@ -226,6 +226,7 @@ bool SCH_EDIT_FRAME::HandleBlockEnd( wxDC* DC )
} }
if( DrawPanel->ManageCurseur != NULL ) if( DrawPanel->ManageCurseur != NULL )
{
switch( block->m_Command ) switch( block->m_Command )
{ {
case BLOCK_IDLE: case BLOCK_IDLE:
@ -234,14 +235,14 @@ bool SCH_EDIT_FRAME::HandleBlockEnd( wxDC* DC )
case BLOCK_DRAG: /* Drag */ case BLOCK_DRAG: /* Drag */
BreakSegmentOnJunction( GetScreen() ); BreakSegmentOnJunction( GetScreen() );
// fall through
case BLOCK_ROTATE: case BLOCK_ROTATE:
case BLOCK_MIRROR_X: case BLOCK_MIRROR_X:
case BLOCK_MIRROR_Y: case BLOCK_MIRROR_Y:
case BLOCK_MOVE: /* Move */ case BLOCK_MOVE: /* Move */
case BLOCK_COPY: /* Copy */ case BLOCK_COPY: /* Copy */
PickItemsInBlock( GetScreen()->m_BlockLocate, GetScreen() ); PickItemsInBlock( GetScreen()->m_BlockLocate, GetScreen() );
// fall through
case BLOCK_PRESELECT_MOVE: /* Move with preselection list*/ case BLOCK_PRESELECT_MOVE: /* Move with preselection list*/
if( block->GetCount() ) if( block->GetCount() )
{ {
@ -301,6 +302,7 @@ bool SCH_EDIT_FRAME::HandleBlockEnd( wxDC* DC )
case BLOCK_ABORT: /* not executed here */ case BLOCK_ABORT: /* not executed here */
break; break;
} }
}
if( block->m_Command == BLOCK_ABORT ) if( block->m_Command == BLOCK_ABORT )
{ {
@ -595,7 +597,8 @@ void SCH_EDIT_FRAME::PasteListOfItems( wxDC* DC )
} }
/* creates the list of items found when a drag block is initiated. /* Set in m_BlockLocate.m_ItemsSelection items members .m_Flags to SELECTED
* Creates the list of items found when a drag block is initiated.
* items are those selected in window block an some items outside this area but * items are those selected in window block an some items outside this area but
* connected to a selected item (connected wires to a component or an entry ) * connected to a selected item (connected wires to a component or an entry )
*/ */
@ -624,14 +627,14 @@ static void CollectStructsToDrag( SCH_SCREEN* screen )
/* Remove the displacement of segment and undo the selection. */ /* Remove the displacement of segment and undo the selection. */
for( unsigned ii = 0; ii < pickedlist->GetCount(); ii++ ) for( unsigned ii = 0; ii < pickedlist->GetCount(); ii++ )
{ {
Struct = (SCH_ITEM*)(SCH_ITEM*) pickedlist->GetPickedItem( ii ); Struct = (SCH_ITEM*)pickedlist->GetPickedItem( ii );
if( Struct->Type() == SCH_LINE_T ) if( Struct->Type() == SCH_LINE_T )
{ {
SegmStruct = (SCH_LINE*) Struct; SegmStruct = (SCH_LINE*) Struct;
if( !screen->m_BlockLocate.Inside( SegmStruct->m_Start ) ) if( !screen->m_BlockLocate.Contains( SegmStruct->m_Start ) )
SegmStruct->m_Flags |= STARTPOINT; SegmStruct->m_Flags |= STARTPOINT;
if( !screen->m_BlockLocate.Inside( SegmStruct->m_End ) ) if( !screen->m_BlockLocate.Contains( SegmStruct->m_End ) )
SegmStruct->m_Flags |= ENDPOINT; SegmStruct->m_Flags |= ENDPOINT;
// Save m_Flags for Undo/redo drag operations: // Save m_Flags for Undo/redo drag operations:
@ -642,17 +645,16 @@ static void CollectStructsToDrag( SCH_SCREEN* screen )
/* Search for other items to drag. They are end wires connected to selected /* Search for other items to drag. They are end wires connected to selected
* items * items
*/ */
for( unsigned ii = 0; ii < pickedlist->GetCount(); ii++ ) for( unsigned ii = 0; ii < pickedlist->GetCount(); ii++ )
{ {
Struct = (SCH_ITEM*)(SCH_ITEM*) pickedlist->GetPickedItem( ii ); Struct = (SCH_ITEM*)pickedlist->GetPickedItem( ii );
if( ( Struct->Type() == SCH_LABEL_T ) if( ( Struct->Type() == SCH_LABEL_T )
|| ( Struct->Type() == SCH_GLOBAL_LABEL_T ) || ( Struct->Type() == SCH_GLOBAL_LABEL_T )
|| ( Struct->Type() == SCH_HIERARCHICAL_LABEL_T ) ) || ( Struct->Type() == SCH_HIERARCHICAL_LABEL_T ) )
{ {
#undef STRUCT #undef STRUCT
#define STRUCT ( (SCH_TEXT*) Struct ) #define STRUCT ( (SCH_TEXT*) Struct )
if( !screen->m_BlockLocate.Inside( STRUCT->m_Pos ) ) if( !screen->m_BlockLocate.Contains( STRUCT->m_Pos ) )
{ {
AddPickedItem( screen, STRUCT->m_Pos ); AddPickedItem( screen, STRUCT->m_Pos );
} }
@ -661,20 +663,20 @@ static void CollectStructsToDrag( SCH_SCREEN* screen )
if( Struct->Type() == SCH_COMPONENT_T ) if( Struct->Type() == SCH_COMPONENT_T )
{ {
// Add all pins of the selected component to list // Add all pins of the selected component to list
LIB_PIN* pin;
wxPoint pos; wxPoint pos;
pin = GetNextPinPosition( (SCH_COMPONENT*) Struct, pos, true ); LIB_PIN* pin = GetNextPinPosition( (SCH_COMPONENT*) Struct, pos, NULL );
while( pin ) while( pin )
{ {
if( !screen->m_BlockLocate.Inside( pos ) ) if( !screen->m_BlockLocate.Contains( pos ) )
{ {
// This pin is outside area, // This pin is outside area,
// but because it it the pin of a selected component // but because it is a pin of a selected component
// we must also select connected items to this pin // we must also select connected items to this pin
// and mainly wires
AddPickedItem( screen, pos ); AddPickedItem( screen, pos );
} }
pin = GetNextPinPosition( (SCH_COMPONENT*) Struct, pos, false ); pin = GetNextPinPosition( (SCH_COMPONENT*) Struct, pos, pin );
} }
} }
@ -774,7 +776,6 @@ static void AddPickedItem( SCH_SCREEN* screen, wxPoint position )
{ {
Struct->m_Flags = SELECTED | ENDPOINT | STARTPOINT; Struct->m_Flags = SELECTED | ENDPOINT | STARTPOINT;
Struct->m_Flags &= ~STARTPOINT; Struct->m_Flags &= ~STARTPOINT;
// Save m_Flags for Undo/redo drag operations: // Save m_Flags for Undo/redo drag operations:
picker.m_PickerFlags = Struct->m_Flags; picker.m_PickerFlags = Struct->m_Flags;
pickedlist->PushItem( picker ); pickedlist->PushItem( picker );
@ -783,7 +784,6 @@ static void AddPickedItem( SCH_SCREEN* screen, wxPoint position )
{ {
Struct->m_Flags = SELECTED | ENDPOINT | STARTPOINT; Struct->m_Flags = SELECTED | ENDPOINT | STARTPOINT;
Struct->m_Flags &= ~ENDPOINT; Struct->m_Flags &= ~ENDPOINT;
// Save m_Flags for Undo/redo drag operations: // Save m_Flags for Undo/redo drag operations:
picker.m_PickerFlags = Struct->m_Flags; picker.m_PickerFlags = Struct->m_Flags;
pickedlist->PushItem( picker ); pickedlist->PushItem( picker );
@ -856,53 +856,45 @@ static void AddPickedItem( SCH_SCREEN* screen, wxPoint position )
/** GetNextPinPosition() /** GetNextPinPosition()
* calculate position of the "next" pin of the aDrawLibItem component * calculate position of the "next" pin of the aDrawLibItem component
* @param aDrawLibItem = component to test. * @param aComponent = component to test.
* @param aPosition = the calculated pin position, according to the component * @param aPosition = the calculated pin position, according to the component
* orientation and position * orientation and position
* @param aSearchFirst = if true, search for the first pin * @param aSearchFirst = if true, search for the first pin
* @return a pointer to the pin * @return a pointer to the pin
*/ */
static LIB_PIN* GetNextPinPosition( SCH_COMPONENT* aDrawLibItem, static LIB_PIN* GetNextPinPosition( SCH_COMPONENT* aComponent,
wxPoint& aPosition, wxPoint& aPosition,
bool aSearchFirst ) LIB_PIN* aPin )
{ {
static LIB_COMPONENT* Entry; static LIB_COMPONENT* Entry;
static int Multi, convert;
TRANSFORM transform;
static wxPoint CmpPosition;
static LIB_PIN* Pin;
if( aSearchFirst ) if( aPin == NULL )
{ {
Entry = CMP_LIBRARY::FindLibraryComponent( aDrawLibItem->GetLibName() ); Entry = CMP_LIBRARY::FindLibraryComponent( aComponent->GetLibName() );
if( Entry == NULL ) if( Entry == NULL )
return NULL; return NULL;
Pin = Entry->GetNextPin();
Multi = aDrawLibItem->GetUnit();
convert = aDrawLibItem->GetConvert();
CmpPosition = aDrawLibItem->m_Pos;
transform = aDrawLibItem->GetTransform();
} }
else
Pin = Entry->GetNextPin( Pin );
for( ; Pin != NULL; Pin = Entry->GetNextPin( Pin ) ) aPin = Entry->GetNextPin( aPin );
int multi = aComponent->GetUnit();
int convert = aComponent->GetConvert();
for( ; aPin != NULL; aPin = Entry->GetNextPin( aPin ) )
{ {
wxASSERT( Pin->Type() == LIB_PIN_T ); wxASSERT( aPin->Type() == LIB_PIN_T );
/* Skip items not used for this part */ /* Skip items not used for this part */
if( Multi && Pin->GetUnit() && ( Pin->GetUnit() != Multi ) ) if( multi && aPin->GetUnit() && ( aPin->GetUnit() != multi ) )
continue; continue;
if( convert && Pin->GetConvert() && ( Pin->GetConvert() != convert ) ) if( convert && aPin->GetConvert() && ( aPin->GetConvert() != convert ) )
continue; continue;
/* Calculate the pin position (according to the component orientation) /* Calculate the pin position (according to the component orientation)
*/ */
aPosition = DefaultTransform.TransformCoordinate( Pin->GetPosition() ) + CmpPosition; aPosition = aComponent->GetPinPhysicalPosition( aPin );
return Pin; return aPin;
} }
return NULL; return NULL;

View File

@ -748,7 +748,12 @@ void SCH_EDIT_FRAME::OnHotKey( wxDC* DC, int hotkey, EDA_ITEM* DrawStruct )
case SCH_LINE_T: case SCH_LINE_T:
if( ( (SCH_ITEM*) DrawStruct )->GetLayer() == LAYER_WIRE ) if( ( (SCH_ITEM*) DrawStruct )->GetLayer() == LAYER_WIRE )
wxPostEvent( this, eventDragWire ); {
if( HK_Descr->m_Idcommand == HK_DRAG )
wxPostEvent( this, eventDragWire );
else
wxPostEvent( this, eventMoveItem );
}
break; break;
default: default:

View File

@ -263,8 +263,8 @@ void LIB_ARC::DoOffset( const wxPoint& aOffset )
bool LIB_ARC::DoTestInside( EDA_Rect& aRect ) const bool LIB_ARC::DoTestInside( EDA_Rect& aRect ) const
{ {
return aRect.Inside( m_ArcStart.x, -m_ArcStart.y ) return aRect.Contains( m_ArcStart.x, -m_ArcStart.y )
|| aRect.Inside( m_ArcEnd.x, -m_ArcEnd.y ); || aRect.Contains( m_ArcEnd.x, -m_ArcEnd.y );
} }

View File

@ -164,7 +164,7 @@ bool LIB_BEZIER::DoTestInside( EDA_Rect& aRect ) const
{ {
for( size_t i = 0; i < m_PolyPoints.size(); i++ ) for( size_t i = 0; i < m_PolyPoints.size(); i++ )
{ {
if( aRect.Inside( m_PolyPoints[i].x, -m_PolyPoints[i].y ) ) if( aRect.Contains( m_PolyPoints[i].x, -m_PolyPoints[i].y ) )
return true; return true;
} }

View File

@ -152,7 +152,7 @@ bool LIB_CIRCLE::DoTestInside( EDA_Rect& aRect ) const
* FIXME: This fails to take into account the radius around the center * FIXME: This fails to take into account the radius around the center
* point. * point.
*/ */
return aRect.Inside( m_Pos.x, -m_Pos.y ); return aRect.Contains( m_Pos.x, -m_Pos.y );
} }

View File

@ -466,7 +466,7 @@ bool LIB_FIELD::DoTestInside( EDA_Rect& rect ) const
* FIXME: This fails to take into acount the size and/or orientation of * FIXME: This fails to take into acount the size and/or orientation of
* the text. * the text.
*/ */
return rect.Inside( m_Pos.x, -m_Pos.y ); return rect.Contains( m_Pos.x, -m_Pos.y );
} }

View File

@ -1653,7 +1653,7 @@ bool LIB_PIN::DoTestInside( EDA_Rect& rect ) const
{ {
wxPoint end = ReturnPinEndPoint(); wxPoint end = ReturnPinEndPoint();
return rect.Inside( m_position.x, -m_position.y ) || rect.Inside( end.x, -end.y ); return rect.Contains( m_position.x, -m_position.y ) || rect.Contains( end.x, -end.y );
} }

View File

@ -162,7 +162,7 @@ bool LIB_POLYLINE::DoTestInside( EDA_Rect& aRect ) const
{ {
for( size_t i = 0; i < m_PolyPoints.size(); i++ ) for( size_t i = 0; i < m_PolyPoints.size(); i++ )
{ {
if( aRect.Inside( m_PolyPoints[i].x, -m_PolyPoints[i].y ) ) if( aRect.Contains( m_PolyPoints[i].x, -m_PolyPoints[i].y ) )
return true; return true;
} }

View File

@ -119,7 +119,7 @@ void LIB_RECTANGLE::DoOffset( const wxPoint& aOffset )
bool LIB_RECTANGLE::DoTestInside( EDA_Rect& aRect ) const bool LIB_RECTANGLE::DoTestInside( EDA_Rect& aRect ) const
{ {
return aRect.Inside( m_Pos.x, -m_Pos.y ) || aRect.Inside( m_End.x, -m_End.y ); return aRect.Contains( m_Pos.x, -m_Pos.y ) || aRect.Contains( m_End.x, -m_End.y );
} }

View File

@ -223,7 +223,7 @@ bool LIB_TEXT::DoTestInside( EDA_Rect& rect ) const
* FIXME: This should calculate the text size and justification and * FIXME: This should calculate the text size and justification and
* use rectangle instect. * use rectangle instect.
*/ */
return rect.Inside( m_Pos.x, -m_Pos.y ); return rect.Contains( m_Pos.x, -m_Pos.y );
} }

View File

@ -139,6 +139,7 @@ int PickItemsInBlock( BLOCK_SELECTOR& aBlock, SCH_SCREEN* aScreen )
for( ; item != NULL; item = item->Next() ) for( ; item != NULL; item = item->Next() )
{ {
// an item is picked if its bounding box intersects the reference area
if( item->HitTest( area ) ) if( item->HitTest( area ) )
{ {
/* Put this structure in the picked list: */ /* Put this structure in the picked list: */
@ -310,7 +311,7 @@ bool SnapPoint2( const wxPoint& aPosRef, int SearchMask, SCH_ITEM* DrawList )
EDA_Rect BoundaryBox = field->GetBoundingBox(); EDA_Rect BoundaryBox = field->GetBoundingBox();
if( BoundaryBox.Inside( aPosRef ) ) if( BoundaryBox.Contains( aPosRef ) )
{ {
LastSnappedStruct = field; LastSnappedStruct = field;
return true; return true;
@ -323,7 +324,7 @@ bool SnapPoint2( const wxPoint& aPosRef, int SearchMask, SCH_ITEM* DrawList )
#define STRUCT ( (SCH_COMPONENT*) DrawList ) #define STRUCT ( (SCH_COMPONENT*) DrawList )
EDA_Rect BoundaryBox = STRUCT->GetBoundingBox(); EDA_Rect BoundaryBox = STRUCT->GetBoundingBox();
if( BoundaryBox.Inside( aPosRef ) ) if( BoundaryBox.Contains( aPosRef ) )
{ {
LastSnappedStruct = DrawList; LastSnappedStruct = DrawList;
return true; return true;

View File

@ -1664,7 +1664,7 @@ bool SCH_COMPONENT::DoHitTest( const wxPoint& aPoint, int aAccuracy, SCH_FILTER_
bBox = GetField( ii )->GetBoundingBox(); bBox = GetField( ii )->GetBoundingBox();
bBox.Inflate( aAccuracy ); bBox.Inflate( aAccuracy );
if( bBox.Inside( aPoint ) ) if( bBox.Contains( aPoint ) )
return true; return true;
} }
} }
@ -1674,7 +1674,7 @@ bool SCH_COMPONENT::DoHitTest( const wxPoint& aPoint, int aAccuracy, SCH_FILTER_
bBox = GetBodyBoundingBox(); bBox = GetBodyBoundingBox();
bBox.Inflate( aAccuracy ); bBox.Inflate( aAccuracy );
if( bBox.Inside( aPoint ) ) if( bBox.Contains( aPoint ) )
return true; return true;
} }
@ -1689,7 +1689,7 @@ bool SCH_COMPONENT::DoHitTest( const EDA_Rect& aRect, bool aContained, int aAccu
rect.Inflate( aAccuracy ); rect.Inflate( aAccuracy );
if( aContained ) if( aContained )
return rect.Inside( GetBoundingBox() ); return rect.Contains( GetBoundingBox() );
return rect.Intersects( GetBoundingBox() ); return rect.Intersects( GetBoundingBox() );
} }

View File

@ -469,7 +469,7 @@ bool SCH_FIELD::DoHitTest( const wxPoint& aPoint, int aAccuracy ) const
rect.Inflate( aAccuracy ); rect.Inflate( aAccuracy );
return rect.Inside( aPoint ); return rect.Contains( aPoint );
} }
@ -484,7 +484,7 @@ bool SCH_FIELD::DoHitTest( const EDA_Rect& aRect, bool aContained, int aAccuracy
rect.Inflate( aAccuracy ); rect.Inflate( aAccuracy );
if( aContained ) if( aContained )
return rect.Inside( GetBoundingBox() ); return rect.Contains( GetBoundingBox() );
return rect.Intersects( GetBoundingBox() ); return rect.Intersects( GetBoundingBox() );
} }

View File

@ -262,7 +262,7 @@ bool SCH_BUS_ENTRY::DoHitTest( const EDA_Rect& aRect, bool aContained, int aAccu
rect.Inflate( aAccuracy ); rect.Inflate( aAccuracy );
if( aContained ) if( aContained )
return rect.Inside( GetBoundingBox() ); return rect.Contains( GetBoundingBox() );
return rect.Intersects( GetBoundingBox() ); return rect.Intersects( GetBoundingBox() );
} }
@ -433,7 +433,7 @@ bool SCH_JUNCTION::DoHitTest( const wxPoint& aPoint, int aAccuracy, SCH_FILTER_T
rect.Inflate( aAccuracy ); rect.Inflate( aAccuracy );
return rect.Inside( aPoint ); return rect.Contains( aPoint );
} }
@ -444,7 +444,7 @@ bool SCH_JUNCTION::DoHitTest( const EDA_Rect& aRect, bool aContained, int aAccur
rect.Inflate( aAccuracy ); rect.Inflate( aAccuracy );
if( aContained ) if( aContained )
return rect.Inside( GetBoundingBox() ); return rect.Contains( GetBoundingBox() );
return rect.Intersects( GetBoundingBox() ); return rect.Intersects( GetBoundingBox() );
} }
@ -628,7 +628,7 @@ bool SCH_NO_CONNECT::DoHitTest( const EDA_Rect& aRect, bool aContained, int aAcc
rect.Inflate( aAccuracy ); rect.Inflate( aAccuracy );
if( aContained ) if( aContained )
return rect.Inside( GetBoundingBox() ); return rect.Contains( GetBoundingBox() );
return rect.Intersects( GetBoundingBox() ); return rect.Intersects( GetBoundingBox() );
} }
@ -1048,7 +1048,7 @@ bool SCH_LINE::DoHitTest( const EDA_Rect& aRect, bool aContained, int aAccuracy
rect.Inflate( aAccuracy ); rect.Inflate( aAccuracy );
if( aContained ) if( aContained )
return rect.Inside( GetBoundingBox() ); return rect.Contains( GetBoundingBox() );
return rect.Intersects( GetBoundingBox() ); return rect.Intersects( GetBoundingBox() );
} }
@ -1278,7 +1278,7 @@ bool SCH_POLYLINE::DoHitTest( const EDA_Rect& aRect, bool aContained, int aAccur
rect.Inflate( aAccuracy ); rect.Inflate( aAccuracy );
if( aContained ) if( aContained )
return rect.Inside( GetBoundingBox() ); return rect.Contains( GetBoundingBox() );
return rect.Intersects( GetBoundingBox() ); return rect.Intersects( GetBoundingBox() );
} }

View File

@ -1145,7 +1145,7 @@ bool SCH_SHEET::DoHitTest( const wxPoint& aPoint, int aAccuracy, SCH_FILTER_T aF
rect.Inflate( aAccuracy ); rect.Inflate( aAccuracy );
return rect.Inside( aPoint ); return rect.Contains( aPoint );
} }
@ -1156,7 +1156,7 @@ bool SCH_SHEET::DoHitTest( const EDA_Rect& aRect, bool aContained, int aAccuracy
rect.Inflate( aAccuracy ); rect.Inflate( aAccuracy );
if( aContained ) if( aContained )
return rect.Inside( GetBoundingBox() ); return rect.Contains( GetBoundingBox() );
return rect.Intersects( GetBoundingBox() ); return rect.Intersects( GetBoundingBox() );
} }

View File

@ -454,7 +454,6 @@ void SCH_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event )
case ID_POPUP_SCH_DRAG_WIRE_REQUEST: case ID_POPUP_SCH_DRAG_WIRE_REQUEST:
DrawPanel->MouseToCursorSchema(); DrawPanel->MouseToCursorSchema();
// The easiest way to handle a drag component is to simulate a // The easiest way to handle a drag component is to simulate a
// block drag command // block drag command
if( screen->m_BlockLocate.m_State == STATE_NO_BLOCK ) if( screen->m_BlockLocate.m_State == STATE_NO_BLOCK )
@ -472,13 +471,12 @@ void SCH_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event )
// TODO: a better way to drag only wires // TODO: a better way to drag only wires
SCH_LINE* segm = (SCH_LINE*) screen->GetCurItem(); SCH_LINE* segm = (SCH_LINE*) screen->GetCurItem();
if( !screen->m_BlockLocate.Inside( segm->m_Start ) if( !screen->m_BlockLocate.Contains( segm->m_Start )
&& !screen->m_BlockLocate.Inside( segm->m_End ) ) && !screen->m_BlockLocate.Contains( segm->m_End ) )
{ {
screen->m_BlockLocate.SetOrigin( segm->m_Start ); screen->m_BlockLocate.SetOrigin( segm->m_Start );
screen->m_BlockLocate.SetEnd( segm->m_End ); screen->m_BlockLocate.SetEnd( segm->m_End );
} }
HandleBlockEnd( &dc ); HandleBlockEnd( &dc );
} }
break; break;

View File

@ -668,10 +668,10 @@ bool GERBER_DRAW_ITEM::HitTest( EDA_Rect& aRefArea )
{ {
wxPoint pos = GetABPosition( m_Start ); wxPoint pos = GetABPosition( m_Start );
if( aRefArea.Inside( pos ) ) if( aRefArea.Contains( pos ) )
return true; return true;
pos = GetABPosition( m_End ); pos = GetABPosition( m_End );
if( aRefArea.Inside( pos ) ) if( aRefArea.Contains( pos ) )
return true; return true;
return false; return false;
} }

View File

@ -146,7 +146,9 @@ public:
* Class EDA_Rect * Class EDA_Rect
* handles the component boundary box. * handles the component boundary box.
* This class is similar to wxRect, but some wxRect functions are very curious, * This class is similar to wxRect, but some wxRect functions are very curious,
* so I prefer this suitable class * and are working only if dimensions are >= 0 (not always the case in kicad)
* and also kicad needs some specific method.
* so I prefer this more suitable class
*/ */
class EDA_Rect class EDA_Rect
{ {
@ -173,11 +175,33 @@ public:
*/ */
void Move( const wxPoint& aMoveVector ); void Move( const wxPoint& aMoveVector );
void Normalize(); // Ensure the height and width are >= 0 /**
bool Inside( const wxPoint& point ) const; // Return TRUE if point is in Rect * Function Normalize
* Ensure the height and width are >= 0
*/
void Normalize();
/**
* Function Contains
* @param aPoint = the wxPoint to test
* @return true if aPoint is inside the boundary box. A point on a edge is seen as inside
*/
bool Contains( const wxPoint& aPoint ) const;
/**
* Function Contains
* @param x = the x coordinate of the point to test
* @param y = the x coordinate of the point to test
* @return true if point is inside the boundary box. A point on a edge is seen as inside
*/
bool Contains( int x, int y ) const { return Contains( wxPoint( x, y ) ); }
/**
* Function Contains
* @param aRect = the EDA_Rect to test
* @return true if aRect is Contained. A common edge is seen as contained
*/
bool Contains( const EDA_Rect& aRect ) const;
bool Inside( int x, int y ) const { return Inside( wxPoint( x, y ) ); }
bool Inside( const EDA_Rect& aRect ) const;
wxSize GetSize() const { return m_Size; } wxSize GetSize() const { return m_Size; }
int GetX() const { return m_Pos.x; } int GetX() const { return m_Pos.x; }
int GetY() const { return m_Pos.y; } int GetY() const { return m_Pos.y; }
@ -209,8 +233,9 @@ public:
/** /**
* Function Intersects * Function Intersects
* @return bool - true if the argument rectangle intersects this rectangle. * @return bool - true if the argument rectangle intersects this rectangle.
* (i.e. if the 2 rectangles have at least a common point)
*/ */
bool Intersects( const EDA_Rect aRect ) const; bool Intersects( const EDA_Rect& aRect ) const;
/** /**

View File

@ -137,17 +137,18 @@ void DisplayHotkeyList( WinEDA_DrawFrame* aFrame
*/ */
Ki_HotkeyInfo* GetDescriptorFromHotkey( int aKey, Ki_HotkeyInfo** aList ); Ki_HotkeyInfo* GetDescriptorFromHotkey( int aKey, Ki_HotkeyInfo** aList );
/** function ReadHotkeyConfig * Read hotkey configuration for a given /**
app, possibly before the frame for that app has been created * Function ReadHotkeyConfig
* Read hotkey configuration for a given app,
@param Appname = the value of the app's m_FrameName * possibly before the frame for that app has been created
@param DescList = the hotkey data * @param Appname = the value of the app's m_FrameName
* @param aDescList = the hotkey data
*/ */
void ReadHotkeyConfig( const wxString& Appname, void ReadHotkeyConfig( const wxString& Appname,
struct Ki_HotkeyInfoSectionDescriptor* DescList ); struct Ki_HotkeyInfoSectionDescriptor* aDescList );
void ParseHotkeyConfig( const wxString& data, void ParseHotkeyConfig( const wxString& data,
struct Ki_HotkeyInfoSectionDescriptor* DescList ); struct Ki_HotkeyInfoSectionDescriptor* aDescList );
// common hotkeys event id // common hotkeys event id

View File

@ -271,11 +271,11 @@ public:
/** /**
* Function HitTest(). * Function HitTest().
* Test if \a aRect intersects or is contained within the bounding box of an item. * Test if \a aRect intersects or contains the bounding box of me.
* *
* @param aRect - Rectangle to test. * @param aRect - Rectangle to test.
* @param aContained - Set to true to test for containment instead of an intersection. * @param aContained - Set to true to test for containment instead of an intersection.
* @param aAccuracy - Increase the item bounding box by this amount. * @param aAccuracy - Increase aRect by this amount.
* @return True if \a aRect contains or intersects the item bounding box. * @return True if \a aRect contains or intersects the item bounding box.
*/ */
bool HitTest( const EDA_Rect& aRect, bool aContained = false, int aAccuracy = 0 ) const bool HitTest( const EDA_Rect& aRect, bool aContained = false, int aAccuracy = 0 ) const

View File

@ -224,7 +224,7 @@ void WinEDA_PcbFrame::AutoMoveModulesOnPcb( bool PlaceModulesHorsPcb )
Module = moduleList[ii]; Module = moduleList[ii];
if( PlaceModulesHorsPcb && edgesExists ) if( PlaceModulesHorsPcb && edgesExists )
{ {
if( GetBoard()->m_BoundaryBox.Inside( Module->m_Pos ) ) if( GetBoard()->m_BoundaryBox.Contains( Module->m_Pos ) )
continue; continue;
} }
surface += Module->m_Surface; surface += Module->m_Surface;
@ -243,7 +243,7 @@ void WinEDA_PcbFrame::AutoMoveModulesOnPcb( bool PlaceModulesHorsPcb )
if( PlaceModulesHorsPcb && edgesExists ) if( PlaceModulesHorsPcb && edgesExists )
{ {
if( GetBoard()->m_BoundaryBox.Inside( Module->m_Pos ) ) if( GetBoard()->m_BoundaryBox.Contains( Module->m_Pos ) )
continue; continue;
} }

View File

@ -150,7 +150,7 @@ void WinEDA_PcbFrame::AutoPlaceModule( MODULE* Module,
Module->m_ModuleStatus &= ~MODULE_is_PLACED; Module->m_ModuleStatus &= ~MODULE_is_PLACED;
if( Module->m_ModuleStatus & MODULE_is_LOCKED ) if( Module->m_ModuleStatus & MODULE_is_LOCKED )
break; break;
if( !GetBoard()->m_BoundaryBox.Inside( Module->m_Pos ) ) if( !GetBoard()->m_BoundaryBox.Contains( Module->m_Pos ) )
Module->m_ModuleStatus |= MODULE_to_PLACE; Module->m_ModuleStatus |= MODULE_to_PLACE;
break; break;

View File

@ -657,7 +657,7 @@ int MarkItemsInBloc( MODULE* module, EDA_Rect& Rect )
{ {
pad->m_Selected = 0; pad->m_Selected = 0;
pos = pad->GetPosition(); pos = pad->GetPosition();
if( Rect.Inside( pos ) ) if( Rect.Contains( pos ) )
{ {
pad->m_Selected = IS_SELECTED; pad->m_Selected = IS_SELECTED;
ItemsCount++; ItemsCount++;
@ -673,13 +673,13 @@ int MarkItemsInBloc( MODULE* module, EDA_Rect& Rect )
{ {
case TYPE_EDGE_MODULE: case TYPE_EDGE_MODULE:
pos = ( (EDGE_MODULE*) item )->m_Start; pos = ( (EDGE_MODULE*) item )->m_Start;
if( Rect.Inside( pos ) ) if( Rect.Contains( pos ) )
{ {
item->m_Selected = IS_SELECTED; item->m_Selected = IS_SELECTED;
ItemsCount++; ItemsCount++;
} }
pos = ( (EDGE_MODULE*) item )->m_End; pos = ( (EDGE_MODULE*) item )->m_End;
if( Rect.Inside( pos ) ) if( Rect.Contains( pos ) )
{ {
item->m_Selected = IS_SELECTED; item->m_Selected = IS_SELECTED;
ItemsCount++; ItemsCount++;
@ -688,7 +688,7 @@ int MarkItemsInBloc( MODULE* module, EDA_Rect& Rect )
case TYPE_TEXTE_MODULE: case TYPE_TEXTE_MODULE:
pos = ( (TEXTE_MODULE*) item )->GetPosition(); pos = ( (TEXTE_MODULE*) item )->GetPosition();
if( Rect.Inside( pos ) ) if( Rect.Contains( pos ) )
{ {
item->m_Selected = IS_SELECTED; item->m_Selected = IS_SELECTED;
ItemsCount++; ItemsCount++;

View File

@ -738,7 +738,7 @@ bool DIMENSION::HitTest( const wxPoint& ref_pos )
*/ */
bool DIMENSION::HitTest( EDA_Rect& refArea ) bool DIMENSION::HitTest( EDA_Rect& refArea )
{ {
if( refArea.Inside( m_Pos ) ) if( refArea.Contains( m_Pos ) )
return true; return true;
return false; return false;
} }

View File

@ -487,9 +487,9 @@ bool DRAWSEGMENT::HitTest( const wxPoint& ref_pos )
*/ */
bool DRAWSEGMENT::HitTest( EDA_Rect& refArea ) bool DRAWSEGMENT::HitTest( EDA_Rect& refArea )
{ {
if( refArea.Inside( m_Start ) ) if( refArea.Contains( m_Start ) )
return true; return true;
if( refArea.Inside( m_End ) ) if( refArea.Contains( m_End ) )
return true; return true;
return false; return false;
} }

View File

@ -200,7 +200,7 @@ bool MIREPCB::HitTest( const wxPoint& refPos )
*/ */
bool MIREPCB::HitTest( EDA_Rect& refArea ) bool MIREPCB::HitTest( EDA_Rect& refArea )
{ {
if( refArea.Inside( m_Pos ) ) if( refArea.Contains( m_Pos ) )
return true; return true;
return false; return false;
} }

View File

@ -875,13 +875,12 @@ void MODULE::DisplayInfo( WinEDA_DrawFrame* frame )
bool MODULE::HitTest( const wxPoint& refPos ) bool MODULE::HitTest( const wxPoint& refPos )
{ {
/* Calculation of the cursor coordinate relative to module */ /* Calculation of the cursor coordinate relative to module */
int spot_cX = refPos.x - m_Pos.x; wxPoint pos = refPos - m_Pos;
int spot_cY = refPos.y - m_Pos.y;
RotatePoint( &spot_cX, &spot_cY, -m_Orient ); RotatePoint( &pos, -m_Orient );
/* Check if cursor is in the rectangle. */ /* Check if cursor is in the rectangle. */
if( m_BoundaryBox.Inside( spot_cX, spot_cY ) ) if( m_BoundaryBox.Contains( pos ) )
return true; return true;
return false; return false;

View File

@ -291,7 +291,7 @@ bool TEXTE_MODULE::HitTest( const wxPoint& refPos )
rel_pos = refPos; rel_pos = refPos;
RotatePoint( &rel_pos, m_Pos, -GetDrawRotation() ); RotatePoint( &rel_pos, m_Pos, -GetDrawRotation() );
if( area.Inside( rel_pos ) ) if( area.Contains( rel_pos ) )
return true; return true;
return false; return false;

View File

@ -1175,9 +1175,9 @@ bool TRACK::HitTest( const wxPoint& ref_pos )
*/ */
bool TRACK::HitTest( EDA_Rect& refArea ) bool TRACK::HitTest( EDA_Rect& refArea )
{ {
if( refArea.Inside( m_Start ) ) if( refArea.Contains( m_Start ) )
return true; return true;
if( refArea.Inside( m_End ) ) if( refArea.Contains( m_End ) )
return true; return true;
return false; return false;
} }

View File

@ -90,7 +90,7 @@ void ZONE_CONTAINER::Test_For_Copper_Island_And_Remove_Insulated_Islands( BOARD
ic++ ) ic++ )
{ // test if this area is connected to a board item: { // test if this area is connected to a board item:
wxPoint pos = ListPointsCandidates[ic]; wxPoint pos = ListPointsCandidates[ic];
if( !bbox.Inside( pos ) ) if( !bbox.Contains( pos ) )
continue; continue;
if( TestPointInsidePolygon( if( TestPointInsidePolygon(
m_FilledPolysList, indexstart, m_FilledPolysList, indexstart,

View File

@ -130,7 +130,7 @@ void BOARD::Test_Connections_To_Copper_Areas( int aNetcode )
else else
continue; continue;
bool connected = false; bool connected = false;
if( bbox.Inside( pos1 ) ) if( bbox.Contains( pos1 ) )
{ {
if( TestPointInsidePolygon( curr_zone->m_FilledPolysList, indexstart, if( TestPointInsidePolygon( curr_zone->m_FilledPolysList, indexstart,
indexend, pos1.x, pos1.y ) ) indexend, pos1.x, pos1.y ) )
@ -138,7 +138,7 @@ void BOARD::Test_Connections_To_Copper_Areas( int aNetcode )
} }
if( !connected && (pos1 != pos2 ) ) if( !connected && (pos1 != pos2 ) )
{ {
if( bbox.Inside( pos2 ) ) if( bbox.Contains( pos2 ) )
if( TestPointInsidePolygon( curr_zone->m_FilledPolysList, indexstart, if( TestPointInsidePolygon( curr_zone->m_FilledPolysList, indexstart,
indexend, pos2.x, pos2.y ) ) indexend, pos2.x, pos2.y ) )
connected = true; connected = true;