Libedit: actual line thickness taken in account by collector. Thick lines are now more easy to locate. Fix incorrect boundary box calculations for LIB_PIN items. Very minor other fixes.

This commit is contained in:
jean-pierre charras 2011-05-25 12:42:56 +02:00
parent 0b91eb30b2
commit fb8a6bf164
18 changed files with 1344 additions and 40 deletions

View File

@ -6,7 +6,7 @@
#endif #endif
#ifndef KICAD_BUILD_VERSION #ifndef KICAD_BUILD_VERSION
#define KICAD_BUILD_VERSION "(2011-05-12)" #define KICAD_BUILD_VERSION "(2011-05-25)"
#endif #endif

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Sep 8 2010) // C++ code generated with wxFormBuilder (version Nov 17 2010)
// http://www.wxformbuilder.org/ // http://www.wxformbuilder.org/
// //
// PLEASE DO "NOT" EDIT THIS FILE! // PLEASE DO "NOT" EDIT THIS FILE!
@ -151,7 +151,7 @@ DIALOG_EESCHEMA_OPTIONS_BASE::DIALOG_EESCHEMA_OPTIONS_BASE( wxWindow* parent, wx
m_panel1->SetSizer( p1mainSizer ); m_panel1->SetSizer( p1mainSizer );
m_panel1->Layout(); m_panel1->Layout();
p1mainSizer->Fit( m_panel1 ); p1mainSizer->Fit( m_panel1 );
m_notebook1->AddPage( m_panel1, _("General Options"), false ); m_notebook1->AddPage( m_panel1, _("General Options"), true );
m_panel2 = new wxPanel( m_notebook1, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); m_panel2 = new wxPanel( m_notebook1, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
m_panel2->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); m_panel2->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) );
m_panel2->SetToolTip( _("User defined field names for schematic components. ") ); m_panel2->SetToolTip( _("User defined field names for schematic components. ") );
@ -240,7 +240,7 @@ DIALOG_EESCHEMA_OPTIONS_BASE::DIALOG_EESCHEMA_OPTIONS_BASE( wxWindow* parent, wx
m_panel2->SetSizer( bSizer6 ); m_panel2->SetSizer( bSizer6 );
m_panel2->Layout(); m_panel2->Layout();
bSizer6->Fit( m_panel2 ); bSizer6->Fit( m_panel2 );
m_notebook1->AddPage( m_panel2, _("Template Field Names"), true ); m_notebook1->AddPage( m_panel2, _("Template Field Names"), false );
bOptionsSizer->Add( m_notebook1, 1, wxEXPAND, 0 ); bOptionsSizer->Add( m_notebook1, 1, wxEXPAND, 0 );

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Sep 8 2010) // C++ code generated with wxFormBuilder (version Nov 17 2010)
// http://www.wxformbuilder.org/ // http://www.wxformbuilder.org/
// //
// PLEASE DO "NOT" EDIT THIS FILE! // PLEASE DO "NOT" EDIT THIS FILE!
@ -101,7 +101,7 @@ class DIALOG_EESCHEMA_OPTIONS_BASE : public wxDialog
public: public:
DIALOG_EESCHEMA_OPTIONS_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Schematic Editor Options"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER ); DIALOG_EESCHEMA_OPTIONS_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Schematic Editor Options"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
~DIALOG_EESCHEMA_OPTIONS_BASE(); ~DIALOG_EESCHEMA_OPTIONS_BASE();
}; };

View File

@ -159,7 +159,7 @@ bool LIB_ARC::Load( char* aLine, wxString& aErrorMsg )
bool LIB_ARC::HitTest( const wxPoint& aRefPoint ) bool LIB_ARC::HitTest( const wxPoint& aRefPoint )
{ {
int mindist = m_Width ? m_Width / 2 : g_DrawDefaultLineThickness / 2; int mindist = GetPenSize() / 2;
// Have a minimal tolerance for hit test // Have a minimal tolerance for hit test
if( mindist < MINIMUM_SELECTION_DISTANCE ) if( mindist < MINIMUM_SELECTION_DISTANCE )
@ -172,6 +172,9 @@ bool LIB_ARC::HitTest( const wxPoint& aRefPoint )
bool LIB_ARC::HitTest( wxPoint aPosition, int aThreshold, const TRANSFORM& aTransform ) bool LIB_ARC::HitTest( wxPoint aPosition, int aThreshold, const TRANSFORM& aTransform )
{ {
if( aThreshold < 0 )
aThreshold = GetPenSize() / 2;
// TODO: use aTransMat to calculates parameters // TODO: use aTransMat to calculates parameters
wxPoint relativePosition = aPosition; wxPoint relativePosition = aPosition;

View File

@ -328,7 +328,7 @@ void LIB_BEZIER::drawGraphic( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint&
*/ */
bool LIB_BEZIER::HitTest( const wxPoint& aRefPos ) bool LIB_BEZIER::HitTest( const wxPoint& aRefPos )
{ {
int mindist = m_Width ? m_Width / 2 : g_DrawDefaultLineThickness / 2; int mindist = GetPenSize() / 2;
// Have a minimal tolerance for hit test // Have a minimal tolerance for hit test
if ( mindist < MINIMUM_SELECTION_DISTANCE ) if ( mindist < MINIMUM_SELECTION_DISTANCE )
mindist = MINIMUM_SELECTION_DISTANCE; mindist = MINIMUM_SELECTION_DISTANCE;
@ -346,6 +346,9 @@ bool LIB_BEZIER::HitTest( wxPoint aPosRef, int aThreshold, const TRANSFORM& aTra
{ {
wxPoint ref, start, end; wxPoint ref, start, end;
if( aThreshold < 0 )
aThreshold = GetPenSize() / 2;
for( unsigned ii = 1; ii < GetCornerCount(); ii++ ) for( unsigned ii = 1; ii < GetCornerCount(); ii++ )
{ {
start = aTransform.TransformCoordinate( m_PolyPoints[ii - 1] ); start = aTransform.TransformCoordinate( m_PolyPoints[ii - 1] );

View File

@ -78,7 +78,7 @@ bool LIB_CIRCLE::Load( char* aLine, wxString& aErrorMsg )
*/ */
bool LIB_CIRCLE::HitTest( const wxPoint& aPosRef ) bool LIB_CIRCLE::HitTest( const wxPoint& aPosRef )
{ {
int mindist = m_Width ? m_Width / 2 : g_DrawDefaultLineThickness / 2; int mindist = GetPenSize() / 2;
// Have a minimal tolerance for hit test // Have a minimal tolerance for hit test
if( mindist < MINIMUM_SELECTION_DISTANCE ) if( mindist < MINIMUM_SELECTION_DISTANCE )
@ -97,6 +97,9 @@ bool LIB_CIRCLE::HitTest( const wxPoint& aPosRef )
*/ */
bool LIB_CIRCLE::HitTest( wxPoint aPosRef, int aThreshold, const TRANSFORM& aTransform ) bool LIB_CIRCLE::HitTest( wxPoint aPosRef, int aThreshold, const TRANSFORM& aTransform )
{ {
if( aThreshold < 0 )
aThreshold = GetPenSize() / 2;
wxPoint relpos = aPosRef - aTransform.TransformCoordinate( m_Pos ); wxPoint relpos = aPosRef - aTransform.TransformCoordinate( m_Pos );
int dist = wxRound( sqrt( ( (double) relpos.x * relpos.x ) + int dist = wxRound( sqrt( ( (double) relpos.x * relpos.x ) +

View File

@ -101,7 +101,7 @@ SEARCH_RESULT LIB_COLLECTOR::Inspect( EDA_ITEM* aItem, const void* aTestData )
if( ( m_data.m_unit && item->GetUnit() && ( m_data.m_unit != item->GetUnit() ) ) if( ( m_data.m_unit && item->GetUnit() && ( m_data.m_unit != item->GetUnit() ) )
|| ( m_data.m_convert && item->GetConvert() && ( m_data.m_convert != item->GetConvert() ) ) || ( m_data.m_convert && item->GetConvert() && ( m_data.m_convert != item->GetConvert() ) )
|| !item->HitTest( m_RefPos, 2, DefaultTransform ) ) || !item->HitTest( m_RefPos, -1, DefaultTransform ) )
return SEARCH_CONTINUE; return SEARCH_CONTINUE;
Append( aItem ); Append( aItem );

View File

@ -22,7 +22,7 @@ class LIB_PIN;
extern const int fill_tab[]; extern const int fill_tab[];
#define MINIMUM_SELECTION_DISTANCE 15 // Minimum selection distance in mils #define MINIMUM_SELECTION_DISTANCE 2 // Minimum selection distance in internal units
/** /**
@ -218,6 +218,9 @@ public:
* @param aPosition - a wxPoint to test * @param aPosition - a wxPoint to test
* @param aThreshold - max distance to this object (usually the half * @param aThreshold - max distance to this object (usually the half
* thickness of a line) * thickness of a line)
* if < 0, it will be automatically set to half
* pen size when locating lines or arcs
* and set to 0 for other items
* @param aTransform - the transform matrix * @param aTransform - the transform matrix
* @return - true if the point \a aPosition is near this object * @return - true if the point \a aPosition is near this object
*/ */

View File

@ -349,6 +349,9 @@ bool LIB_FIELD::HitTest( const wxPoint& aPosition )
bool LIB_FIELD::HitTest( wxPoint aPosition, int aThreshold, const TRANSFORM& aTransform ) bool LIB_FIELD::HitTest( wxPoint aPosition, int aThreshold, const TRANSFORM& aTransform )
{ {
if( aThreshold < 0 )
aThreshold = 0;
int extraCharCount = 0; int extraCharCount = 0;
// Reference designator text has one or 2 additional character (displays // Reference designator text has one or 2 additional character (displays

View File

@ -531,6 +531,9 @@ bool LIB_PIN::HitTest( const wxPoint& aPosition )
bool LIB_PIN::HitTest( wxPoint aPosition, int aThreshold, const TRANSFORM& aTransform ) bool LIB_PIN::HitTest( wxPoint aPosition, int aThreshold, const TRANSFORM& aTransform )
{ {
if( aThreshold < 0 )
aThreshold = 0;
TRANSFORM transform = DefaultTransform; TRANSFORM transform = DefaultTransform;
DefaultTransform = aTransform; DefaultTransform = aTransform;
@ -1048,7 +1051,7 @@ void LIB_PIN::DrawPinSymbol( EDA_DRAW_PANEL* aPanel,
/* Draw the pin end target (active end of the pin) /* Draw the pin end target (active end of the pin)
*/ */
BASE_SCREEN* screen = aPanel ? aPanel->GetScreen() : NULL; BASE_SCREEN* screen = aPanel ? aPanel->GetScreen() : NULL;
#define NCSYMB_PIN_DIM TARGET_PIN_DIAM #define NCSYMB_PIN_DIM TARGET_PIN_RADIUS
if( m_type == PIN_NC ) // Draw a N.C. symbol if( m_type == PIN_NC ) // Draw a N.C. symbol
{ {
GRLine( clipbox, aDC, GRLine( clipbox, aDC,
@ -1064,7 +1067,7 @@ void LIB_PIN::DrawPinSymbol( EDA_DRAW_PANEL* aPanel,
*/ */
else if( screen == NULL || !screen->m_IsPrinting ) else if( screen == NULL || !screen->m_IsPrinting )
{ {
GRCircle( clipbox, aDC, posX, posY, TARGET_PIN_DIAM, 0, color ); GRCircle( clipbox, aDC, posX, posY, TARGET_PIN_RADIUS, 0, color );
} }
} }
@ -1504,7 +1507,7 @@ wxPoint LIB_PIN::ReturnPinEndPoint() const
} }
int LIB_PIN::ReturnPinDrawOrient( const TRANSFORM& aTransform ) int LIB_PIN::ReturnPinDrawOrient( const TRANSFORM& aTransform ) const
{ {
int orient; int orient;
wxPoint end; // position of pin end starting at 0,0 according to its orientation, length = 1 wxPoint end; // position of pin end starting at 0,0 according to its orientation, length = 1
@ -1816,7 +1819,8 @@ EDA_RECT LIB_PIN::GetBoundingBox() const
int nameTextOffset = 0; int nameTextOffset = 0;
bool showName = !m_name.IsEmpty() && (m_name != wxT( "~" )); bool showName = !m_name.IsEmpty() && (m_name != wxT( "~" ));
bool showNum = m_number != 0; bool showNum = m_number != 0;
int symbolY = TARGET_PIN_DIAM / 2; int minsizeV = TARGET_PIN_RADIUS;
if( entry ) if( entry )
{ {
@ -1831,16 +1835,16 @@ EDA_RECT LIB_PIN::GetBoundingBox() const
// First, calculate boundary box corners position // First, calculate boundary box corners position
int numberTextLength = showNum ? m_PinNumSize * GetNumberString().Len() : 0; int numberTextLength = showNum ? m_PinNumSize * GetNumberString().Len() : 0;
// Actual text height are bigger than text size // Actual text height is bigger than text size
int numberTextHeight = showNum ? wxRound( m_PinNumSize * 1.1 ) : 0; int numberTextHeight = showNum ? wxRound( m_PinNumSize * 1.1 ) : 0;
if( m_shape & INVERT ) if( m_shape & INVERT )
symbolY = INVERT_PIN_RADIUS; minsizeV = MAX( TARGET_PIN_RADIUS, INVERT_PIN_RADIUS );
// calculate top left corner position // calculate top left corner position
// for the default pin orientation (PIN_RIGHT) // for the default pin orientation (PIN_RIGHT)
begin.y = numberTextHeight + TXTMARGE; begin.y = MAX( minsizeV, numberTextHeight + TXTMARGE );
begin.x = MIN( -TARGET_PIN_DIAM / 2, m_length - (numberTextLength / 2) ); begin.x = MIN( -TARGET_PIN_RADIUS, m_length - (numberTextLength / 2) );
// calculate bottom right corner position and adjust top left corner position // calculate bottom right corner position and adjust top left corner position
int nameTextLength = 0; int nameTextLength = 0;
@ -1856,20 +1860,30 @@ EDA_RECT LIB_PIN::GetBoundingBox() const
nameTextLength = ( m_PinNameSize * length ) + nameTextOffset; nameTextLength = ( m_PinNameSize * length ) + nameTextOffset;
// Actual text height are bigger than text size // Actual text height are bigger than text size
nameTextHeight = wxRound( m_PinNameSize * 1.1 ); nameTextHeight = wxRound( m_PinNameSize * 1.1 ) + TXTMARGE;
} }
end.x = m_length + nameTextLength; if( nameTextOffset ) // for values > 0, pin name is inside the body
{
end.y = -nameTextHeight / 2; end.x = m_length + nameTextLength;
if( end.y > -symbolY ) end.y = MIN( -minsizeV, -nameTextHeight / 2 );
end.y = -symbolY; }
else // if value == 0:
// pin name is ouside the body, and above the pin line
// pin num is below the pin line
{
end.x = MAX(m_length, nameTextLength);
end.y = -begin.y;
begin.y = MAX( minsizeV, nameTextHeight );
}
// Now, calculate boundary box corners position for the actual pin orientation // Now, calculate boundary box corners position for the actual pin orientation
switch( m_orientation ) int orient = ReturnPinDrawOrient( DefaultTransform );
/* Calculate the pin position */
switch( orient )
{ {
case PIN_UP: case PIN_UP:
// Pin is rotated and texts positions are mirrored // Pin is rotated and texts positions are mirrored
RotatePoint( &begin, wxPoint( 0, 0 ), -900 ); RotatePoint( &begin, wxPoint( 0, 0 ), -900 );
RotatePoint( &end, wxPoint( 0, 0 ), -900 ); RotatePoint( &end, wxPoint( 0, 0 ), -900 );
@ -1883,8 +1897,6 @@ EDA_RECT LIB_PIN::GetBoundingBox() const
break; break;
case PIN_LEFT: case PIN_LEFT:
// Pin is mirrored, not rotated by 180.0 degrees
NEGATE( begin.x ); NEGATE( begin.x );
NEGATE( end.x ); NEGATE( end.x );
break; break;
@ -1893,8 +1905,13 @@ EDA_RECT LIB_PIN::GetBoundingBox() const
break; break;
} }
begin = DefaultTransform.TransformCoordinate( begin + m_position); // Draw Y axis is reversed in schematic:
end = DefaultTransform.TransformCoordinate( end + m_position); NEGATE( begin.y );
NEGATE( end.y );
wxPoint pos1 = DefaultTransform.TransformCoordinate( m_position );
begin += pos1;
end += pos1;
bbox.SetOrigin( begin ); bbox.SetOrigin( begin );
bbox.SetEnd( end ); bbox.SetEnd( end );

View File

@ -12,7 +12,7 @@
class SCH_COMPONENT; class SCH_COMPONENT;
#define TARGET_PIN_DIAM 12 /* Circle diameter drawn at the active end of pins */ #define TARGET_PIN_RADIUS 12 /* Circle diameter drawn at the active end of pins */
#define DEFAULT_TEXT_SIZE 50 /* Default size for field texts */ #define DEFAULT_TEXT_SIZE 50 /* Default size for field texts */
#define PART_NAME_LEN 15 /* Maximum length of part name. */ #define PART_NAME_LEN 15 /* Maximum length of part name. */
@ -169,7 +169,7 @@ public:
* according to its orientation and the matrix transform (rot, mirror) \a aTransform * according to its orientation and the matrix transform (rot, mirror) \a aTransform
* @param aTransform = transform matrix * @param aTransform = transform matrix
*/ */
int ReturnPinDrawOrient( const TRANSFORM& aTransform ); int ReturnPinDrawOrient( const TRANSFORM& aTransform ) const;
/** /**
* Fill a string buffer with pin number. * Fill a string buffer with pin number.

View File

@ -321,7 +321,7 @@ void LIB_POLYLINE::drawGraphic( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint
bool LIB_POLYLINE::HitTest( const wxPoint& aPosition ) bool LIB_POLYLINE::HitTest( const wxPoint& aPosition )
{ {
int mindist = m_Width ? m_Width / 2 : g_DrawDefaultLineThickness / 2; int mindist = GetPenSize() / 2;
// Have a minimal tolerance for hit test // Have a minimal tolerance for hit test
if( mindist < MINIMUM_SELECTION_DISTANCE ) if( mindist < MINIMUM_SELECTION_DISTANCE )
@ -334,6 +334,9 @@ bool LIB_POLYLINE::HitTest( wxPoint aPosition, int aThreshold, const TRANSFORM&
{ {
wxPoint ref, start, end; wxPoint ref, start, end;
if( aThreshold < 0 )
aThreshold = GetPenSize() / 2;
for( unsigned ii = 1; ii < GetCornerCount(); ii++ ) for( unsigned ii = 1; ii < GetCornerCount(); ii++ )
{ {
start = aTransform.TransformCoordinate( m_PolyPoints[ii - 1] ); start = aTransform.TransformCoordinate( m_PolyPoints[ii - 1] );

View File

@ -262,6 +262,9 @@ bool LIB_RECTANGLE::HitTest( const wxPoint& aPosition )
bool LIB_RECTANGLE::HitTest( wxPoint aPosition, int aThreshold, const TRANSFORM& aTransform ) bool LIB_RECTANGLE::HitTest( wxPoint aPosition, int aThreshold, const TRANSFORM& aTransform )
{ {
if( aThreshold < 0 )
aThreshold = GetPenSize() / 2;
wxPoint actualStart = aTransform.TransformCoordinate( m_Pos ); wxPoint actualStart = aTransform.TransformCoordinate( m_Pos );
wxPoint actualEnd = aTransform.TransformCoordinate( m_End ); wxPoint actualEnd = aTransform.TransformCoordinate( m_End );

View File

@ -169,6 +169,9 @@ bool LIB_TEXT::HitTest( const wxPoint& aPosition )
bool LIB_TEXT::HitTest( wxPoint aPosition, int aThreshold, const TRANSFORM& aTransform ) bool LIB_TEXT::HitTest( wxPoint aPosition, int aThreshold, const TRANSFORM& aTransform )
{ {
if( aThreshold < 0 )
aThreshold = 0;
wxPoint physicalpos = aTransform.TransformCoordinate( m_Pos ); wxPoint physicalpos = aTransform.TransformCoordinate( m_Pos );
wxPoint tmp = m_Pos; wxPoint tmp = m_Pos;
m_Pos = physicalpos; m_Pos = physicalpos;

View File

@ -502,14 +502,16 @@ wxPoint SCH_SHEET::GetSheetNamePosition()
wxPoint SCH_SHEET::GetFileNamePosition() wxPoint SCH_SHEET::GetFileNamePosition()
{ {
wxPoint pos = m_Pos; wxPoint pos = m_Pos;
int margin = GetPenSize() + 4;
if( IsVerticalOrientation() ) if( IsVerticalOrientation() )
{ {
pos.x += m_Size.x+4; pos.x += m_Size.x + margin;
pos.y += m_Size.y; pos.y += m_Size.y;
} }
else else
{ {
pos.y += m_Size.y + 4; pos.y += m_Size.y + margin;
} }
return pos; return pos;

View File

@ -17,7 +17,7 @@
; General Product Description Definitions ; General Product Description Definitions
!define PRODUCT_NAME "KiCad" !define PRODUCT_NAME "KiCad"
!define PRODUCT_VERSION "2011.05.12" !define PRODUCT_VERSION "2011.05.25"
!define PRODUCT_WEB_SITE "http://iut-tice.ujf-grenoble.fr/kicad/" !define PRODUCT_WEB_SITE "http://iut-tice.ujf-grenoble.fr/kicad/"
!define SOURCEFORGE_WEB_SITE "http://kicad.sourceforge.net/" !define SOURCEFORGE_WEB_SITE "http://kicad.sourceforge.net/"
!define COMPANY_NAME "" !define COMPANY_NAME ""

View File

@ -1,4 +1,4 @@
release version: release version:
2011 may 12 2011 may 25
files (.zip,.tgz): files (.zip,.tgz):
kicad-2011-05-12 kicad-2011-05-12