improved pcbnew marker support
This commit is contained in:
parent
d985f2d640
commit
aba115f0fb
|
@ -13,6 +13,9 @@ email address.
|
|||
added EDA_BaseStruct::DeleteStructList()
|
||||
deleted gerbview/struct.cpp, pcbnew/struct.cpp,
|
||||
BOARD::~BOARD() now deletes objects that it owns.
|
||||
Collectors now finds MARQUEURs also
|
||||
added MARQUEURS::Display_Infos()
|
||||
added MARQUEURS::HitTest()
|
||||
|
||||
|
||||
2007-Oct-2 UPDATE Dick Hollenbeck <dick@softplc.com>
|
||||
|
|
|
@ -190,6 +190,7 @@ void BASE_SCREEN::SetZoomList( int* zoomlist )
|
|||
// Init liste
|
||||
if( m_ZoomList )
|
||||
free( m_ZoomList );
|
||||
|
||||
m_ZoomList = (int*) MyZMalloc( nbitems * sizeof( int) );
|
||||
|
||||
for( ii = 0, zoom = zoomlist; ii < nbitems; zoom++, ii++ )
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/******************************************************************/
|
||||
/* msgpanel.cpp - fonctions des classes du type WinEDA_MsgPanel */
|
||||
/******************************************************************/
|
||||
/******************************************************************/
|
||||
/* msgpanel.cpp - fonctions des classes du type WinEDA_MsgPanel */
|
||||
/******************************************************************/
|
||||
|
||||
#ifdef __GNUG__
|
||||
#pragma implementation
|
||||
|
@ -14,131 +14,132 @@
|
|||
#include "common.h"
|
||||
|
||||
/* table des evenements captes par un WinEDA_MsgPanel */
|
||||
BEGIN_EVENT_TABLE(WinEDA_MsgPanel, wxPanel)
|
||||
EVT_PAINT(WinEDA_MsgPanel::OnPaint)
|
||||
BEGIN_EVENT_TABLE( WinEDA_MsgPanel, wxPanel )
|
||||
EVT_PAINT( WinEDA_MsgPanel::OnPaint )
|
||||
END_EVENT_TABLE()
|
||||
|
||||
|
||||
/***********************************************************/
|
||||
/* Fonctions de base de WinEDA_MsgPanel: l'ecran de messages */
|
||||
/***********************************************************/
|
||||
|
||||
/***********************************************************/
|
||||
/* Fonctions de base de WinEDA_MsgPanel: l'ecran de messages */
|
||||
/***********************************************************/
|
||||
|
||||
WinEDA_MsgPanel::WinEDA_MsgPanel(WinEDA_DrawFrame *parent, int id,
|
||||
const wxPoint& pos, const wxSize& size):
|
||||
wxPanel(parent, id, pos, size )
|
||||
WinEDA_MsgPanel::WinEDA_MsgPanel( WinEDA_DrawFrame* parent, int id,
|
||||
const wxPoint& pos, const wxSize& size ) :
|
||||
wxPanel( parent, id, pos, size )
|
||||
{
|
||||
m_Parent = parent;
|
||||
SetFont( *g_MsgFont );
|
||||
m_Parent = parent;
|
||||
SetFont( *g_MsgFont );
|
||||
}
|
||||
|
||||
|
||||
|
||||
WinEDA_MsgPanel::~WinEDA_MsgPanel()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*************************************************/
|
||||
void WinEDA_MsgPanel::OnPaint(wxPaintEvent & event)
|
||||
void WinEDA_MsgPanel::OnPaint( wxPaintEvent& event )
|
||||
/*************************************************/
|
||||
{
|
||||
wxPaintDC dc(this);
|
||||
wxPaintDC dc( this );
|
||||
|
||||
EraseMsgBox(&dc); event.Skip();
|
||||
EraseMsgBox( &dc ); event.Skip();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/*****************************************************************************/
|
||||
void WinEDA_MsgPanel::Affiche_1_Parametre(int pos_X,const wxString & texte_H,
|
||||
const wxString & texte_L,int color)
|
||||
void WinEDA_MsgPanel::Affiche_1_Parametre( int pos_X, const wxString& texte_H,
|
||||
const wxString& texte_L, int color )
|
||||
/*****************************************************************************/
|
||||
|
||||
/*
|
||||
Routine d'affichage d'un parametre.
|
||||
pos_X = cadrage horizontal
|
||||
si pos_X < 0 : la position horizontale est la derniere
|
||||
valeur demandee >= 0
|
||||
texte_H = texte a afficher en ligne superieure.
|
||||
si "", par d'affichage sur cette ligne
|
||||
texte_L = texte a afficher en ligne inferieure.
|
||||
si "", par d'affichage sur cette ligne
|
||||
color = couleur d'affichage
|
||||
*/
|
||||
* Routine d'affichage d'un parametre.
|
||||
* pos_X = cadrage horizontal
|
||||
* si pos_X < 0 : la position horizontale est la derniere
|
||||
* valeur demandee >= 0
|
||||
* texte_H = texte a afficher en ligne superieure.
|
||||
* si "", par d'affichage sur cette ligne
|
||||
* texte_L = texte a afficher en ligne inferieure.
|
||||
* si "", par d'affichage sur cette ligne
|
||||
* color = couleur d'affichage
|
||||
*/
|
||||
{
|
||||
static int old_pos_X;
|
||||
wxPoint pos;
|
||||
wxSize FontSizeInPixels, DrawSize;
|
||||
wxClientDC dc(this);
|
||||
static int old_pos_X;
|
||||
wxPoint pos;
|
||||
wxSize FontSizeInPixels, DrawSize;
|
||||
|
||||
DrawSize = GetClientSize();
|
||||
wxClientDC dc( this );
|
||||
|
||||
DrawSize = GetClientSize();
|
||||
|
||||
dc.SetBackground( *wxBLACK_BRUSH );
|
||||
dc.SetBackgroundMode( wxSOLID );
|
||||
|
||||
dc.SetBackground(* wxBLACK_BRUSH );
|
||||
dc.SetBackgroundMode(wxSOLID);
|
||||
// dc.SetBackgroundMode(wxTRANSPARENT);
|
||||
dc.SetTextBackground(GetBackgroundColour());
|
||||
dc.SetFont(*g_MsgFont);
|
||||
dc.GetTextExtent( wxT("W"), &FontSizeInPixels.x, &FontSizeInPixels.y );
|
||||
dc.SetTextBackground( GetBackgroundColour() );
|
||||
dc.SetFont( *g_MsgFont );
|
||||
dc.GetTextExtent( wxT( "W" ), &FontSizeInPixels.x, &FontSizeInPixels.y );
|
||||
|
||||
if ( color >= 0 )
|
||||
{
|
||||
color &= MASKCOLOR;
|
||||
dc.SetTextForeground(wxColour(
|
||||
ColorRefs[color].m_Red, ColorRefs[color].m_Green,
|
||||
ColorRefs[color].m_Blue) );
|
||||
}
|
||||
if( color >= 0 )
|
||||
{
|
||||
color &= MASKCOLOR;
|
||||
dc.SetTextForeground( wxColour(
|
||||
ColorRefs[color].m_Red, ColorRefs[color].m_Green,
|
||||
ColorRefs[color].m_Blue ) );
|
||||
}
|
||||
|
||||
if ( pos_X >= 0 )
|
||||
{
|
||||
old_pos_X = pos.x = pos_X * (FontSizeInPixels.x + 2);
|
||||
}
|
||||
else pos.x = old_pos_X;
|
||||
if( pos_X >= 0 )
|
||||
{
|
||||
old_pos_X = pos.x = pos_X * (FontSizeInPixels.x + 2);
|
||||
}
|
||||
else
|
||||
pos.x = old_pos_X;
|
||||
|
||||
|
||||
if( !texte_H.IsEmpty())
|
||||
{
|
||||
pos.y = (DrawSize.y/2) - FontSizeInPixels.y;;
|
||||
dc.DrawText(texte_H.GetData(), pos.x, pos.y);
|
||||
}
|
||||
if( !texte_L.IsEmpty())
|
||||
{
|
||||
pos.y = DrawSize.y - FontSizeInPixels.y;
|
||||
dc.DrawText(texte_L.GetData(), pos.x, pos.y);
|
||||
}
|
||||
if( !texte_H.IsEmpty() )
|
||||
{
|
||||
pos.y = (DrawSize.y / 2) - FontSizeInPixels.y;;
|
||||
dc.DrawText( texte_H.GetData(), pos.x, pos.y );
|
||||
}
|
||||
|
||||
if( !texte_L.IsEmpty() )
|
||||
{
|
||||
pos.y = DrawSize.y - FontSizeInPixels.y;
|
||||
dc.DrawText( texte_L.GetData(), pos.x, pos.y );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/****************************************/
|
||||
void WinEDA_MsgPanel::EraseMsgBox()
|
||||
/****************************************/
|
||||
|
||||
/* Effacement de la fenetre d'affichage des messages de bas d'ecran
|
||||
*/
|
||||
*/
|
||||
{
|
||||
wxClientDC dc(this);
|
||||
EraseMsgBox(&dc);
|
||||
}
|
||||
wxClientDC dc( this );
|
||||
|
||||
/*******************************************/
|
||||
void WinEDA_MsgPanel::EraseMsgBox(wxDC * DC)
|
||||
/*******************************************/
|
||||
{
|
||||
wxSize size;
|
||||
wxColor color;
|
||||
wxPen pen;
|
||||
wxBrush brush;
|
||||
|
||||
size = GetClientSize();
|
||||
color = GetBackgroundColour();
|
||||
pen.SetColour(color);
|
||||
brush.SetColour(color);
|
||||
brush.SetStyle(wxSOLID);
|
||||
DC->SetPen(pen);
|
||||
DC->SetBrush(brush);
|
||||
|
||||
DC->DrawRectangle(0,0,size.x,size.y);
|
||||
DC->SetBrush(wxNullBrush);
|
||||
DC->SetPen(wxNullPen);
|
||||
EraseMsgBox( &dc );
|
||||
}
|
||||
|
||||
|
||||
/*******************************************/
|
||||
void WinEDA_MsgPanel::EraseMsgBox( wxDC* DC )
|
||||
/*******************************************/
|
||||
{
|
||||
wxSize size;
|
||||
wxColor color;
|
||||
wxPen pen;
|
||||
wxBrush brush;
|
||||
|
||||
size = GetClientSize();
|
||||
color = GetBackgroundColour();
|
||||
pen.SetColour( color );
|
||||
brush.SetColour( color );
|
||||
brush.SetStyle( wxSOLID );
|
||||
DC->SetPen( pen );
|
||||
DC->SetBrush( brush );
|
||||
|
||||
DC->DrawRectangle( 0, 0, size.x, size.y );
|
||||
DC->SetBrush( wxNullBrush );
|
||||
DC->SetPen( wxNullPen );
|
||||
}
|
||||
|
|
|
@ -225,7 +225,7 @@ void WinEDA_SchematicFrame::OnHotKey( wxDC* DC, int hotkey,
|
|||
case HK_NEXT_SEARCH:
|
||||
if( ItemInEdit )
|
||||
break;
|
||||
if( g_LastSearchIsMarker )
|
||||
if( g_LastSearchIsMarker )
|
||||
WinEDA_SchematicFrame::FindMarker( 1 );
|
||||
else
|
||||
FindSchematicItem( wxEmptyString, 2 );
|
||||
|
|
|
@ -448,6 +448,23 @@ public:
|
|||
~MARQUEUR();
|
||||
void UnLink();
|
||||
void Draw( WinEDA_DrawPanel* panel, wxDC* DC, int DrawMode );
|
||||
|
||||
/**
|
||||
* Function Display_Infos
|
||||
* has knowledge about the frame and how and where to put status information
|
||||
* about this object into the frame's message panel.
|
||||
* @param frame A WinEDA_DrawFrame in which to print status information.
|
||||
*/
|
||||
void Display_Infos( WinEDA_DrawFrame* frame );
|
||||
|
||||
|
||||
/**
|
||||
* Function HitTest
|
||||
* tests if the given wxPoint is within the bounds of this object.
|
||||
* @param ref_pos A wxPoint to test
|
||||
* @return bool - true if a hit, else false
|
||||
*/
|
||||
bool HitTest( const wxPoint& ref_pos );
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -179,7 +179,7 @@ wxString BOARD_ITEM::MenuText( const BOARD* aPcb ) const
|
|||
break;
|
||||
|
||||
case TYPEMARQUEUR:
|
||||
text << _( "Marker" );
|
||||
text << _( "Marker" ) << wxT( " @(" ) << ((MARQUEUR*)item)->m_Pos.x << wxT(",") << ((MARQUEUR*)item)->m_Pos.y << wxT(")");
|
||||
break;
|
||||
|
||||
case TYPECOTATION:
|
||||
|
|
|
@ -681,7 +681,7 @@ void TRACK::Display_Infos( WinEDA_DrawFrame* frame )
|
|||
switch( Type() )
|
||||
{
|
||||
case TYPEVIA:
|
||||
msg = g_ViaType_Name[m_Shape & 255];
|
||||
msg = g_ViaType_Name[Shape()];
|
||||
break;
|
||||
|
||||
case TYPETRACK:
|
||||
|
@ -764,6 +764,7 @@ void TRACK::Display_Infos( WinEDA_DrawFrame* frame )
|
|||
|
||||
int drill_value = m_Drill >= 0 ?
|
||||
m_Drill : g_DesignSettings.m_ViaDrill;
|
||||
|
||||
valeur_param( (unsigned) drill_value, msg );
|
||||
|
||||
text_pos += 8;
|
||||
|
|
|
@ -303,6 +303,36 @@ void MARQUEUR::UnLink()
|
|||
}
|
||||
|
||||
|
||||
void MARQUEUR::Display_Infos( WinEDA_DrawFrame* frame )
|
||||
{
|
||||
int text_pos;
|
||||
|
||||
frame->MsgPanel->EraseMsgBox();
|
||||
|
||||
text_pos = 1;
|
||||
Affiche_1_Parametre( frame, text_pos, _( "Type" ), _("Marker"), DARKCYAN );
|
||||
|
||||
text_pos = 12;
|
||||
Affiche_1_Parametre( frame, text_pos, _( "Marker Error Text" ), m_Diag, RED );
|
||||
}
|
||||
|
||||
|
||||
bool MARQUEUR::HitTest( const wxPoint& refPos )
|
||||
{
|
||||
// currently the MARKER is about 14 pixels by 14 pixels
|
||||
int xCenter = m_Pos.x + 7;
|
||||
int yCenter = m_Pos.y + 7;
|
||||
|
||||
int dx = refPos.x - xCenter;
|
||||
int dy = refPos.y - yCenter;
|
||||
|
||||
if( ABS(dx) <= 7 && ABS(dy) <= 7 )
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/**************************************************/
|
||||
/* Class SCREEN: classe de gestion d'un affichage */
|
||||
/***************************************************/
|
||||
|
|
|
@ -33,8 +33,12 @@
|
|||
|
||||
// see collectors.h
|
||||
const KICAD_T GENERAL_COLLECTOR::AllBoardItems[] = {
|
||||
|
||||
// there are some restrictions on the order of items in the general case.
|
||||
// all items in m_Drawings for instance should be contiguous.
|
||||
TYPETEXTE,
|
||||
TYPEDRAWSEGMENT,
|
||||
TYPEMARQUEUR,
|
||||
TYPECOTATION,
|
||||
TYPEVIA,
|
||||
TYPETRACK,
|
||||
|
@ -49,6 +53,7 @@ const KICAD_T GENERAL_COLLECTOR::AllBoardItems[] = {
|
|||
const KICAD_T GENERAL_COLLECTOR::PrimaryItems[] = {
|
||||
TYPETEXTE,
|
||||
TYPEDRAWSEGMENT,
|
||||
TYPEMARQUEUR,
|
||||
TYPECOTATION,
|
||||
TYPEVIA,
|
||||
TYPETRACK,
|
||||
|
@ -60,6 +65,7 @@ const KICAD_T GENERAL_COLLECTOR::PrimaryItems[] = {
|
|||
const KICAD_T GENERAL_COLLECTOR::AllButZones[] = {
|
||||
TYPETEXTE,
|
||||
TYPEDRAWSEGMENT,
|
||||
TYPEMARQUEUR,
|
||||
TYPECOTATION,
|
||||
TYPEVIA,
|
||||
TYPETRACK,
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
/****************************************************************/
|
||||
/* Routines generales d'affichage des curseurs et des marqueurs */
|
||||
/****************************************************************/
|
||||
/****************************************************************/
|
||||
/* Routines generales d'affichage des curseurs et des marqueurs */
|
||||
/****************************************************************/
|
||||
|
||||
/* fichier curseurs.cpp */
|
||||
/* fichier curseurs.cpp */
|
||||
|
||||
#include "fctsys.h"
|
||||
#include "gr_basic.h"
|
||||
|
@ -14,57 +14,61 @@
|
|||
/* Routines Locales : */
|
||||
|
||||
|
||||
/* Forme (bit_map) du marqueur */
|
||||
static char Default_MarkerBitmap[]=
|
||||
{
|
||||
12, 12, /* Dimensions x et y du dessin de marqueurs*/
|
||||
1,1,1,1,1,1,1,1,0,0,0,0, /* bitmap: 1 = color, 0 = notrace */
|
||||
1,1,1,0,1,0,1,1,0,0,0,0,
|
||||
1,1,1,1,0,0,0,1,0,0,0,0,
|
||||
1,0,1,1,1,0,0,0,0,0,0,0,
|
||||
1,1,0,1,1,1,0,0,0,0,0,0,
|
||||
1,1,0,0,1,1,1,0,0,0,0,0,
|
||||
1,1,1,0,0,1,1,1,0,0,0,0,
|
||||
0,0,0,0,0,0,1,1,1,0,0,0,
|
||||
0,0,0,0,0,0,0,1,1,1,0,0,
|
||||
0,0,0,0,0,0,0,0,1,1,1,0,
|
||||
0,0,0,0,0,0,0,0,0,1,1,1,
|
||||
0,0,0,0,0,0,0,0,0,0,1,0
|
||||
};
|
||||
|
||||
|
||||
/**********************************************************************/
|
||||
void MARQUEUR::Draw( WinEDA_DrawPanel * panel, wxDC * DC, int DrawMode)
|
||||
/**********************************************************************/
|
||||
/*
|
||||
Trace un repere sur l'ecran au point de coordonnees PCB pos
|
||||
Le marqueur est defini par un tableau de 2 + (lig*col) elements:
|
||||
1er element: dim nbre ligne
|
||||
2er element: dim nbre col
|
||||
suite: lig * col elements a 0 ou 1 : si 1 mise a color du pixel
|
||||
*/
|
||||
/* Forme (bit_map) du marqueur */
|
||||
static char Default_MarkerBitmap[] =
|
||||
{
|
||||
int px, py;
|
||||
int ii, ii_max, jj, jj_max;
|
||||
char * pt_bitmap = m_Bitmap;
|
||||
|
||||
if ( pt_bitmap == NULL ) pt_bitmap = Default_MarkerBitmap;
|
||||
12, 12, /* Dimensions x et y du dessin de marqueurs*/
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, /* bitmap: 1 = color, 0 = notrace */
|
||||
1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0,
|
||||
1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0,
|
||||
1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
|
||||
1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0,
|
||||
1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0,
|
||||
1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0
|
||||
};
|
||||
|
||||
GRSetDrawMode(DC, DrawMode);
|
||||
|
||||
px = GRMapX(m_Pos.x); py = GRMapY(m_Pos.y);
|
||||
/**********************************************************************/
|
||||
void MARQUEUR::Draw( WinEDA_DrawPanel* panel, wxDC* DC, int DrawMode )
|
||||
/**********************************************************************/
|
||||
|
||||
/* Lecture des dimensions */
|
||||
ii_max = *(pt_bitmap++); jj_max = *(pt_bitmap++);
|
||||
/*
|
||||
* Trace un repere sur l'ecran au point de coordonnees PCB pos
|
||||
* Le marqueur est defini par un tableau de 2 + (lig*col) elements:
|
||||
* 1er element: dim nbre ligne
|
||||
* 2er element: dim nbre col
|
||||
* suite: lig * col elements a 0 ou 1 : si 1 mise a color du pixel
|
||||
*/
|
||||
{
|
||||
int px, py;
|
||||
int ii, ii_max, jj, jj_max;
|
||||
char* pt_bitmap = m_Bitmap;
|
||||
|
||||
/* Trace du bitmap */
|
||||
for( ii = 0; ii < ii_max; ii++)
|
||||
{
|
||||
for( jj = 0; jj < jj_max; jj++, pt_bitmap++)
|
||||
{
|
||||
if(*pt_bitmap) GRSPutPixel(&panel->m_ClipBox, DC,
|
||||
px+ii , py+jj , m_Color);
|
||||
}
|
||||
}
|
||||
if( pt_bitmap == NULL )
|
||||
pt_bitmap = Default_MarkerBitmap;
|
||||
|
||||
GRSetDrawMode( DC, DrawMode );
|
||||
|
||||
px = GRMapX( m_Pos.x );
|
||||
py = GRMapY( m_Pos.y );
|
||||
|
||||
/* Lecture des dimensions */
|
||||
ii_max = *(pt_bitmap++);
|
||||
jj_max = *(pt_bitmap++);
|
||||
|
||||
/* Trace du bitmap */
|
||||
for( ii = 0; ii < ii_max; ii++ )
|
||||
{
|
||||
for( jj = 0; jj < jj_max; jj++, pt_bitmap++ )
|
||||
{
|
||||
if( *pt_bitmap )
|
||||
GRSPutPixel( &panel->m_ClipBox, DC,
|
||||
px + ii, py + jj, m_Color );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -46,10 +46,12 @@ static bool Test_Pad_to_Pads_Drc( WinEDA_BasePcbFrame* frame,
|
|||
static int TestClearanceSegmToPad( const D_PAD* pad_to_test, int seg_width, int isol );
|
||||
static int TestMarginToCircle( int cx, int cy, int rayon, int longueur );
|
||||
static int Tst_Ligne( int x1, int y1, int x2, int y2 );
|
||||
|
||||
static void Affiche_Erreur_DRC( WinEDA_DrawPanel* panel, wxDC* DC, BOARD* Pcb,
|
||||
TRACK* pt_ref, BOARD_ITEM* pt_item, int errnumber );
|
||||
static void Affiche_Erreur_DRC( WinEDA_DrawPanel* panel, wxDC* DC,
|
||||
BOARD* Pcb, D_PAD* pad1, D_PAD* pad2 );
|
||||
|
||||
static void Affiche_Erreur_DRC( WinEDA_DrawPanel* panel, wxDC* DC, BOARD* Pcb,
|
||||
D_PAD* pad1, D_PAD* pad2 );
|
||||
|
||||
|
||||
/*******************************************/
|
||||
|
@ -923,6 +925,7 @@ static bool Test_Pad_to_Pads_Drc( WinEDA_BasePcbFrame* frame,
|
|||
MaskLayer = pad_ref->m_Masque_Layer & ALL_CU_LAYERS;
|
||||
int x_limite = max_size + g_DesignSettings.m_TrackClearence +
|
||||
pad_ref->m_Rayon + pad_ref->m_Pos.x;
|
||||
|
||||
for( ; pad_list < end_buffer; pad_list++ )
|
||||
{
|
||||
pad = *pad_list;
|
||||
|
@ -939,11 +942,11 @@ static bool Test_Pad_to_Pads_Drc( WinEDA_BasePcbFrame* frame,
|
|||
continue;
|
||||
|
||||
/* The pad must be in a net (i.e pt_pad->m_NetCode != 0 ),
|
||||
* But noe probleme if pads have the same netcode (same net)*/
|
||||
* But no problem if pads have the same netcode (same net)*/
|
||||
if( pad->m_NetCode && (pad_ref->m_NetCode == pad->m_NetCode) )
|
||||
continue;
|
||||
|
||||
/* No proble if pads are from the same footprint
|
||||
/* No problem if pads are from the same footprint
|
||||
* and have the same pad number ( equivalent pads ) */
|
||||
if( (pad->m_Parent == pad_ref->m_Parent) && (pad->m_NumPadName == pad_ref->m_NumPadName) )
|
||||
continue;
|
||||
|
@ -1151,6 +1154,7 @@ static int TestClearanceSegmToPad( const D_PAD* pad_to_test, int w_segm, int dis
|
|||
|
||||
if( bflag == OK_DRC )
|
||||
return OK_DRC;
|
||||
|
||||
/* Erreur DRC : analyse fine de la forme de la pastille */
|
||||
|
||||
switch( pad_to_test->m_PadShape )
|
||||
|
@ -1360,7 +1364,7 @@ static void Affiche_Erreur_DRC( WinEDA_DrawPanel* panel, wxDC* DC, BOARD* Pcb,
|
|||
|
||||
wxString module_name = ( (MODULE*) (pad->m_Parent) )->m_Reference->m_Text;
|
||||
|
||||
msg.Printf( _( "%d Drc Err %d %s (net %s)and PAD %s (%s) net %s @ %d,%d\n" ),
|
||||
msg.Printf( _( "%d Drc Err %d %s (net %s) and PAD %s (%s) net %s @ %d,%d\n" ),
|
||||
ErrorsDRC_Count, errnumber, tracktype.GetData(),
|
||||
netname1.GetData(),
|
||||
pad_name.GetData(), module_name.GetData(),
|
||||
|
@ -1437,12 +1441,14 @@ static void Affiche_Erreur_DRC( WinEDA_DrawPanel* panel, wxDC* DC, BOARD* Pcb,
|
|||
wxString pad_name2 = pad2->ReturnStringPadName();
|
||||
wxString module_name2 = ( (MODULE*) (pad2->m_Parent) )->m_Reference->m_Text;
|
||||
wxString netname1, netname2;
|
||||
|
||||
EQUIPOT* equipot = Pcb->FindNet( pad1->m_NetCode );
|
||||
|
||||
if( equipot )
|
||||
netname1 = equipot->m_Netname;
|
||||
else
|
||||
netname1 = wxT( "<noname>" );
|
||||
|
||||
equipot = Pcb->FindNet( pad2->m_NetCode );
|
||||
if( equipot )
|
||||
netname2 = equipot->m_Netname;
|
||||
|
@ -1450,19 +1456,21 @@ static void Affiche_Erreur_DRC( WinEDA_DrawPanel* panel, wxDC* DC, BOARD* Pcb,
|
|||
netname2 = wxT( "<noname>" );
|
||||
|
||||
msg.Printf( _( "%d Drc Err: PAD %s (%s) net %s @ %d,%d and PAD %s (%s) net %s @ %d,%d\n" ),
|
||||
ErrorsDRC_Count, pad_name1.GetData(), module_name1.GetData(),
|
||||
netname1.GetData(), pad1->m_Pos.x, pad1->m_Pos.y,
|
||||
pad_name2.GetData(), module_name2.GetData(),
|
||||
netname2.GetData(), pad2->m_Pos.x, pad2->m_Pos.y );
|
||||
ErrorsDRC_Count,
|
||||
pad_name1.GetData(), module_name1.GetData(), netname1.GetData(), pad1->m_Pos.x, pad1->m_Pos.y,
|
||||
pad_name2.GetData(), module_name2.GetData(), netname2.GetData(), pad2->m_Pos.x, pad2->m_Pos.y );
|
||||
|
||||
if( DrcFrame )
|
||||
DrcFrame->m_logWindow->AppendText( msg );
|
||||
else
|
||||
panel->m_Parent->Affiche_Message( msg );
|
||||
|
||||
if( s_RptFile )
|
||||
fprintf( s_RptFile, "%s", CONV_TO_UTF8( msg ) );
|
||||
|
||||
if( current_marqueur == NULL )
|
||||
current_marqueur = new MARQUEUR( Pcb );
|
||||
|
||||
current_marqueur->m_Pos = pad1->m_Pos;
|
||||
current_marqueur->m_Color = WHITE;
|
||||
current_marqueur->m_Diag = msg;
|
||||
|
|
|
@ -47,10 +47,9 @@ void WinEDA_PcbFindFrame::FindItem( wxCommandEvent& event )
|
|||
PCB_SCREEN* screen = m_Parent->GetScreen();
|
||||
wxPoint locate_pos;
|
||||
wxString msg;
|
||||
bool succes = FALSE;
|
||||
bool FindMarker = FALSE;
|
||||
MODULE* Module;
|
||||
int StartCount;
|
||||
BOARD_ITEM* foundItem = 0;
|
||||
|
||||
switch( event.GetId() )
|
||||
{
|
||||
|
@ -60,6 +59,7 @@ void WinEDA_PcbFindFrame::FindItem( wxCommandEvent& event )
|
|||
|
||||
case ID_FIND_MARKER:
|
||||
s_MarkerCount = 0;
|
||||
// fall thru
|
||||
|
||||
case ID_FIND_NEXT_MARKER:
|
||||
FindMarker = TRUE;
|
||||
|
@ -73,16 +73,17 @@ void WinEDA_PcbFindFrame::FindItem( wxCommandEvent& event )
|
|||
|
||||
if( FindMarker )
|
||||
{
|
||||
MARQUEUR* Marker = (MARQUEUR*) m_Parent->m_Pcb->m_Drawings;
|
||||
for( ; Marker != NULL; Marker = (MARQUEUR*) Marker->Pnext )
|
||||
MARQUEUR* marker = (MARQUEUR*) m_Parent->m_Pcb->m_Drawings;
|
||||
for( ; marker; marker = (MARQUEUR*) marker->Next() )
|
||||
{
|
||||
if( Marker->Type() != TYPEMARQUEUR )
|
||||
if( marker->Type() != TYPEMARQUEUR )
|
||||
continue;
|
||||
|
||||
StartCount++;
|
||||
if( StartCount > s_MarkerCount )
|
||||
{
|
||||
succes = TRUE;
|
||||
locate_pos = Marker->m_Pos;
|
||||
foundItem = marker;
|
||||
locate_pos = marker->m_Pos;
|
||||
s_MarkerCount++;
|
||||
break;
|
||||
}
|
||||
|
@ -90,27 +91,27 @@ void WinEDA_PcbFindFrame::FindItem( wxCommandEvent& event )
|
|||
}
|
||||
else
|
||||
{
|
||||
for( Module = m_Parent->m_Pcb->m_Modules; Module != NULL; Module = (MODULE*) Module->Pnext )
|
||||
for( MODULE* module = m_Parent->m_Pcb->m_Modules; module; module = (MODULE*) module->Next() )
|
||||
{
|
||||
if( WildCompareString( s_OldStringFound, Module->m_Reference->m_Text.GetData(),
|
||||
if( WildCompareString( s_OldStringFound, module->GetReference().GetData(),
|
||||
FALSE ) )
|
||||
{
|
||||
StartCount++;
|
||||
if( StartCount > s_ItemCount )
|
||||
{
|
||||
succes = TRUE;
|
||||
locate_pos = Module->m_Pos;
|
||||
foundItem = module;
|
||||
locate_pos = module->m_Pos;
|
||||
s_ItemCount++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if( WildCompareString( s_OldStringFound, Module->m_Value->m_Text.GetData(), FALSE ) )
|
||||
if( WildCompareString( s_OldStringFound, module->m_Value->m_Text.GetData(), FALSE ) )
|
||||
{
|
||||
StartCount++;
|
||||
if( StartCount > s_ItemCount )
|
||||
{
|
||||
succes = TRUE;
|
||||
locate_pos = Module->m_Pos;
|
||||
foundItem = module;
|
||||
locate_pos = module->m_Pos;
|
||||
s_ItemCount++;
|
||||
break;
|
||||
}
|
||||
|
@ -118,8 +119,17 @@ void WinEDA_PcbFindFrame::FindItem( wxCommandEvent& event )
|
|||
}
|
||||
}
|
||||
|
||||
if( succes )
|
||||
{
|
||||
if( foundItem )
|
||||
{
|
||||
m_Parent->SetCurItem( foundItem );
|
||||
|
||||
if( FindMarker )
|
||||
msg = _( "Marker found" );
|
||||
else
|
||||
msg.Printf( _( "<%s> Found" ), s_OldStringFound.GetData() );
|
||||
|
||||
m_Parent->Affiche_Message( msg );
|
||||
|
||||
/* Il y a peut-etre necessite de recadrer le dessin: */
|
||||
if( !m_Parent->DrawPanel->IsPointOnDisplay( locate_pos ) )
|
||||
{
|
||||
|
@ -135,21 +145,18 @@ void WinEDA_PcbFindFrame::FindItem( wxCommandEvent& event )
|
|||
m_Parent->DrawPanel->MouseToCursorSchema();
|
||||
m_Parent->DrawPanel->CursorOn( m_DC );
|
||||
}
|
||||
|
||||
if( FindMarker )
|
||||
msg = _( "Marker found" );
|
||||
else
|
||||
msg.Printf( _( "<%s> Found" ), s_OldStringFound.GetData() );
|
||||
m_Parent->Affiche_Message( msg );
|
||||
|
||||
EndModal( 1 );
|
||||
}
|
||||
else
|
||||
{
|
||||
m_Parent->Affiche_Message( wxEmptyString );
|
||||
|
||||
if( FindMarker )
|
||||
msg = _( "Marker not found" );
|
||||
else
|
||||
msg.Printf( _( "<%s> Not Found" ), s_OldStringFound.GetData() );
|
||||
|
||||
DisplayError( this, msg, 10 );
|
||||
EndModal( 0 );
|
||||
}
|
||||
|
|
|
@ -565,6 +565,7 @@ void WinEDA_DrawFrame::OnZoom( int zoom_type )
|
|||
case ID_POPUP_ZOOM_PLUS:
|
||||
case ID_ZOOM_PLUS_KEY:
|
||||
move_mouse_cursor = TRUE;
|
||||
// fall thru
|
||||
|
||||
case ID_ZOOM_PLUS_BUTT:
|
||||
if( zoom_type == ID_ZOOM_PLUS_BUTT )
|
||||
|
@ -576,6 +577,7 @@ void WinEDA_DrawFrame::OnZoom( int zoom_type )
|
|||
case ID_POPUP_ZOOM_MOINS:
|
||||
case ID_ZOOM_MOINS_KEY:
|
||||
move_mouse_cursor = TRUE;
|
||||
// fall thru
|
||||
|
||||
case ID_ZOOM_MOINS_BUTT:
|
||||
if( zoom_type == ID_ZOOM_MOINS_BUTT )
|
||||
|
|
5
todo.txt
5
todo.txt
|
@ -51,3 +51,8 @@ understanding by new developers.
|
|||
*** Implement the graying in/out of "Edit/Undo", "Edit/Redo" menu items,
|
||||
when Undo/Redo stack is empty/filled.
|
||||
|
||||
|
||||
*** Implement action for ID_POPUP_PCB_DELETE_MARKER, since onrightclick.cpp
|
||||
can now identify a marker. To see where the user gets a menu to delete a marker:
|
||||
void WinEDA_PcbFrame::OnRightClick( const wxPoint& aMousePos, wxMenu* aPopMenu )
|
||||
|
||||
|
|
Loading…
Reference in New Issue