Commit eda39ae8 authored by CHARRAS's avatar CHARRAS

pcbnew: drc control now generates a DRC report file

parent b9259f85
......@@ -4,6 +4,12 @@ Started 2007-June-11
Please add newer entries at the top, list the date and your name with
email address.
2007-aug-02 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
================================================================================
+ pcbnew
Drc test now generates a DRC file report.
2007-Jul-31 UPDATE Geoff Harland <gharlandau@yahoo.com.au>
================================================================================
+ pcbnew
......
No preview for this file type
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -59,6 +59,8 @@ BEGIN_EVENT_TABLE( WinEDA_DrcFrame, wxDialog )
EVT_BUTTON( wxID_CLOSE, WinEDA_DrcFrame::OnCloseClick )
EVT_BUTTON( ID_BUTTON_BROWSE_RPT_FILE, WinEDA_DrcFrame::OnButtonBrowseRptFileClick )
////@end WinEDA_DrcFrame event table entries
END_EVENT_TABLE()
......@@ -98,6 +100,8 @@ bool WinEDA_DrcFrame::Create( wxWindow* parent, wxWindowID id, const wxString& c
m_Pad2PadTestCtrl = NULL;
m_UnconnectedTestCtrl = NULL;
m_ZonesTestCtrl = NULL;
m_CreateRptCtrl = NULL;
m_RptFilenameCtrl = NULL;
m_logWindow = NULL;
////@end WinEDA_DrcFrame member initialisation
......@@ -124,7 +128,7 @@ void WinEDA_DrcFrame::CreateControls()
SetFont(*g_DialogFont);
////@begin WinEDA_DrcFrame content construction
// Generated by DialogBlocks, 30/07/2007 12:44:15 (unregistered)
// Generated by DialogBlocks, 02/08/2007 10:11:17 (unregistered)
WinEDA_DrcFrame* itemDialog1 = this;
......@@ -162,39 +166,54 @@ void WinEDA_DrcFrame::CreateControls()
m_ZonesTestCtrl->SetValue(false);
itemStaticBoxSizer8->Add(m_ZonesTestCtrl, 0, wxGROW|wxALL, 5);
wxBoxSizer* itemBoxSizer12 = new wxBoxSizer(wxVERTICAL);
m_CommandSizer->Add(itemBoxSizer12, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
m_CreateRptCtrl = new wxCheckBox( itemDialog1, ID_CHECKBOX_CREATE_FILE, _("Create Report file"), wxDefaultPosition, wxDefaultSize, 0 );
m_CreateRptCtrl->SetValue(false);
itemStaticBoxSizer8->Add(m_CreateRptCtrl, 0, wxGROW|wxALL, 5);
wxBoxSizer* itemBoxSizer13 = new wxBoxSizer(wxVERTICAL);
m_CommandSizer->Add(itemBoxSizer13, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
wxBoxSizer* itemBoxSizer14 = new wxBoxSizer(wxHORIZONTAL);
itemBoxSizer13->Add(itemBoxSizer14, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
wxBoxSizer* itemBoxSizer15 = new wxBoxSizer(wxVERTICAL);
itemBoxSizer14->Add(itemBoxSizer15, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
wxBoxSizer* itemBoxSizer13 = new wxBoxSizer(wxHORIZONTAL);
itemBoxSizer12->Add(itemBoxSizer13, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
wxButton* itemButton16 = new wxButton( itemDialog1, ID_DRC_RUN, _("Test Drc"), wxDefaultPosition, wxDefaultSize, 0 );
itemButton16->SetForegroundColour(wxColour(202, 0, 0));
itemBoxSizer15->Add(itemButton16, 0, wxGROW|wxALL, 5);
wxBoxSizer* itemBoxSizer14 = new wxBoxSizer(wxVERTICAL);
itemBoxSizer13->Add(itemBoxSizer14, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
wxButton* itemButton17 = new wxButton( itemDialog1, ID_STOP_CONTROL_DRC, _("Stop Drc"), wxDefaultPosition, wxDefaultSize, 0 );
itemButton17->SetForegroundColour(wxColour(0, 128, 128));
itemBoxSizer15->Add(itemButton17, 0, wxGROW|wxALL, 5);
wxButton* itemButton15 = new wxButton( itemDialog1, ID_DRC_RUN, _("Test Drc"), wxDefaultPosition, wxDefaultSize, 0 );
itemButton15->SetForegroundColour(wxColour(202, 0, 0));
itemBoxSizer14->Add(itemButton15, 0, wxGROW|wxALL, 5);
wxBoxSizer* itemBoxSizer18 = new wxBoxSizer(wxVERTICAL);
itemBoxSizer14->Add(itemBoxSizer18, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
wxButton* itemButton16 = new wxButton( itemDialog1, ID_STOP_CONTROL_DRC, _("Stop Drc"), wxDefaultPosition, wxDefaultSize, 0 );
itemButton16->SetForegroundColour(wxColour(0, 128, 128));
itemBoxSizer14->Add(itemButton16, 0, wxGROW|wxALL, 5);
wxButton* itemButton19 = new wxButton( itemDialog1, ID_ERASE_DRC_MARKERS, _("Del Markers"), wxDefaultPosition, wxDefaultSize, 0 );
itemButton19->SetForegroundColour(wxColour(0, 128, 0));
itemBoxSizer18->Add(itemButton19, 0, wxGROW|wxALL, 5);
wxBoxSizer* itemBoxSizer17 = new wxBoxSizer(wxVERTICAL);
itemBoxSizer13->Add(itemBoxSizer17, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
wxButton* itemButton20 = new wxButton( itemDialog1, ID_LIST_UNCONNECTED_PADS, _("List Unconn"), wxDefaultPosition, wxDefaultSize, 0 );
itemButton20->SetForegroundColour(wxColour(0, 0, 255));
itemBoxSizer18->Add(itemButton20, 0, wxGROW|wxALL, 5);
wxButton* itemButton18 = new wxButton( itemDialog1, ID_ERASE_DRC_MARKERS, _("Del Markers"), wxDefaultPosition, wxDefaultSize, 0 );
itemButton18->SetForegroundColour(wxColour(0, 128, 0));
itemBoxSizer17->Add(itemButton18, 0, wxGROW|wxALL, 5);
wxButton* itemButton21 = new wxButton( itemDialog1, wxID_CLOSE, _("&Close"), wxDefaultPosition, wxDefaultSize, 0 );
itemBoxSizer13->Add(itemButton21, 0, wxGROW|wxALL, 5);
wxButton* itemButton19 = new wxButton( itemDialog1, ID_LIST_UNCONNECTED_PADS, _("List Unconn"), wxDefaultPosition, wxDefaultSize, 0 );
itemButton19->SetForegroundColour(wxColour(0, 0, 255));
itemBoxSizer17->Add(itemButton19, 0, wxGROW|wxALL, 5);
wxStaticBox* itemStaticBoxSizer22Static = new wxStaticBox(itemDialog1, wxID_ANY, _("Report File"));
wxStaticBoxSizer* itemStaticBoxSizer22 = new wxStaticBoxSizer(itemStaticBoxSizer22Static, wxVERTICAL);
itemBoxSizer13->Add(itemStaticBoxSizer22, 0, wxGROW|wxALL, 5);
wxButton* itemButton20 = new wxButton( itemDialog1, wxID_CLOSE, _("&Close"), wxDefaultPosition, wxDefaultSize, 0 );
itemBoxSizer12->Add(itemButton20, 0, wxGROW|wxALL, 5);
wxButton* itemButton23 = new wxButton( itemDialog1, ID_BUTTON_BROWSE_RPT_FILE, _("Browse"), wxDefaultPosition, wxDefaultSize, 0 );
itemButton23->SetForegroundColour(wxColour(0, 128, 128));
itemStaticBoxSizer22->Add(itemButton23, 0, wxALIGN_LEFT|wxALL, 5);
wxStaticText* itemStaticText21 = new wxStaticText( itemDialog1, wxID_STATIC, _("Messages:"), wxDefaultPosition, wxDefaultSize, 0 );
m_MainSizer->Add(itemStaticText21, 0, wxGROW|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5);
m_RptFilenameCtrl = new wxTextCtrl( itemDialog1, ID_TEXTCTRL_GET_RPT_FILENAME, _T(""), wxDefaultPosition, wxDefaultSize, 0 );
itemStaticBoxSizer22->Add(m_RptFilenameCtrl, 0, wxGROW|wxALL, 5);
wxStaticText* itemStaticText25 = new wxStaticText( itemDialog1, wxID_STATIC, _("Messages:"), wxDefaultPosition, wxDefaultSize, 0 );
m_MainSizer->Add(itemStaticText25, 0, wxGROW|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5);
m_logWindow = new wxTextCtrl( itemDialog1, ID_TEXTCTRL, _T(""), wxDefaultPosition, wxSize(-1, 200), wxTE_MULTILINE|wxTE_READONLY );
m_MainSizer->Add(m_logWindow, 0, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5);
......@@ -203,9 +222,12 @@ void WinEDA_DrcFrame::CreateControls()
m_Pad2PadTestCtrl->SetValidator( wxGenericValidator(& s_Pad2PadTestOpt) );
m_UnconnectedTestCtrl->SetValidator( wxGenericValidator(& s_UnconnectedTestOpt) );
m_ZonesTestCtrl->SetValidator( wxGenericValidator(& s_ZonesTestOpt) );
m_CreateRptCtrl->SetValidator( wxGenericValidator(& s_CreateRptFileOpt) );
////@end WinEDA_DrcFrame content construction
AddUnitSymbol(*m_ClearenceTitle);
m_RptFilenameCtrl->SetValue(s_RptFilename);
}
/*!
......@@ -288,6 +310,7 @@ void WinEDA_DrcFrame::OnCloseClick( wxCommandEvent& event )
s_Pad2PadTestOpt = m_Pad2PadTestCtrl->IsChecked();
s_UnconnectedTestOpt = m_UnconnectedTestCtrl->IsChecked();
s_ZonesTestOpt = m_ZonesTestCtrl->IsChecked();
s_CreateRptFileOpt = m_CreateRptCtrl->IsChecked();
Close();
}
......@@ -304,6 +327,35 @@ void WinEDA_DrcFrame::OnCloseWindow( wxCloseEvent& event )
s_Pad2PadTestOpt = m_Pad2PadTestCtrl->IsChecked();
s_UnconnectedTestOpt = m_UnconnectedTestCtrl->IsChecked();
s_ZonesTestOpt = m_ZonesTestCtrl->IsChecked();
s_CreateRptFileOpt = m_CreateRptCtrl->IsChecked();
event.Skip();
}
/*!
* wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_BUTTON_BROWSE_RPT_FILE
*/
void WinEDA_DrcFrame::OnButtonBrowseRptFileClick( wxCommandEvent& event )
{
wxString FileName, Mask(wxT("*")), Ext(wxT(".rpt"));
FileName = m_Parent->m_CurrentScreen->m_FileName;
ChangeFileNameExt(FileName, wxT("-drc") + Ext);
Mask += Ext;
FileName = EDA_FileSelector(_("Drill Report file"),
wxEmptyString, /* Chemin par defaut */
FileName, /* nom fichier par defaut */
Ext, /* extension par defaut */
Mask, /* Masque d'affichage */
this,
wxFD_SAVE,
TRUE
);
if ( FileName.IsEmpty()) return;
m_RptFilenameCtrl->SetValue(FileName);
s_RptFilename = FileName;
}
......@@ -44,10 +44,13 @@ class wxBoxSizer;
#define ID_CHECKBOX_PAD2PAD 10009
#define ID_CHECKBOX 10008
#define ID_CHECKBOX_TEST_ZONES 10007
#define ID_CHECKBOX_CREATE_FILE 10012
#define ID_DRC_RUN 10003
#define ID_STOP_CONTROL_DRC 10004
#define ID_ERASE_DRC_MARKERS 10005
#define ID_LIST_UNCONNECTED_PADS 10006
#define ID_BUTTON_BROWSE_RPT_FILE 10011
#define ID_TEXTCTRL_GET_RPT_FILENAME 10010
#define ID_TEXTCTRL 10001
#define SYMBOL_WINEDA_DRCFRAME_STYLE wxCAPTION|wxRESIZE_BORDER|wxSYSTEM_MENU|wxCLOSE_BOX
#define SYMBOL_WINEDA_DRCFRAME_TITLE _("DRC Control")
......@@ -105,6 +108,9 @@ public:
/// wxEVT_COMMAND_BUTTON_CLICKED event handler for wxID_CLOSE
void OnCloseClick( wxCommandEvent& event );
/// wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_BUTTON_BROWSE_RPT_FILE
void OnButtonBrowseRptFileClick( wxCommandEvent& event );
////@end WinEDA_DrcFrame event handler declarations
////@begin WinEDA_DrcFrame member function declarations
......@@ -131,6 +137,8 @@ public:
wxCheckBox* m_Pad2PadTestCtrl;
wxCheckBox* m_UnconnectedTestCtrl;
wxCheckBox* m_ZonesTestCtrl;
wxCheckBox* m_CreateRptCtrl;
wxTextCtrl* m_RptFilenameCtrl;
wxTextCtrl* m_logWindow;
////@end WinEDA_DrcFrame member variables
WinEDA_PcbFrame * m_Parent;
......
......@@ -17,15 +17,17 @@ class WinEDA_DrcFrame;
WinEDA_DrcFrame * DrcFrame;
/* saving drc options */
bool s_Pad2PadTestOpt = true;
bool s_UnconnectedTestOpt = true;
bool s_ZonesTestOpt = false;
int NumberOfErrors;
static bool s_Pad2PadTestOpt = true;
static bool s_UnconnectedTestOpt = true;
static bool s_ZonesTestOpt = false;
static bool s_CreateRptFileOpt = false;
static FILE * s_RptFile = NULL;
static wxString s_RptFilename;
static int ErrorsDRC_Count;
static MARQUEUR * current_marqueur; /* Pour gestion des marqueurs sur pcb */
bool AbortDrc, DrcInProgress = FALSE;
static bool AbortDrc, DrcInProgress = FALSE;
static int spot_cX, spot_cY; /* position d'elements a tester */
static int finx, finy; // coord relatives de l'extremite du segm de reference
static int segm_angle; // angle d'inclinaison du segment de reference en 0,1 degre
......@@ -68,7 +70,10 @@ int ii;
wxString msg;
float convert = 0.0001;
m_logWindow->AppendText(_("Look for active routes\n"));
msg = _("Look for active routes\n");
m_logWindow->AppendText(msg);
if ( s_RptFile ) fprintf(s_RptFile, "%s", CONV_TO_UTF8(msg) );
m_UnconnectedCount = 0;
for( ii = m_Parent->m_Pcb->GetNumRatsnests() ;ii > 0; Ratsnest++, ii--)
{
......@@ -82,6 +87,7 @@ float convert = 0.0001;
msg.Printf(_("%d > Pad %s (%s) @ %.4f,%.4f and "), m_UnconnectedCount,
pad_name.GetData(), module_name.GetData(), pad->m_Pos.x * convert, pad->m_Pos.y * convert);
m_logWindow->AppendText(msg);
if ( s_RptFile ) fprintf(s_RptFile, "%s", CONV_TO_UTF8(msg) );
pad = Ratsnest->pad_end;
pad->Draw(panel, m_DC, wxPoint(0,0),draw_mode);
......@@ -90,11 +96,13 @@ float convert = 0.0001;
msg.Printf(_("Pad %s (%s) @ %.4f,%.4f\n"),
pad_name.GetData(), module_name.GetData(), pad->m_Pos.x * convert, pad->m_Pos.y * convert);
m_logWindow->AppendText(msg);
if ( s_RptFile ) fprintf(s_RptFile, "%s", CONV_TO_UTF8(msg) );
}
if ( m_UnconnectedCount ) msg.Printf(_("Active routes: %d\n"), m_UnconnectedCount);
else msg = _("OK! (No active routes)\n");
m_logWindow->AppendText(msg);
if ( s_RptFile ) fprintf(s_RptFile, "%s", CONV_TO_UTF8(msg) );
}
......@@ -104,8 +112,24 @@ void WinEDA_DrcFrame::TestDrc(wxCommandEvent & event)
{
int errors;
wxString msg;
if ( ! DrcInProgress )
{
if ( m_CreateRptCtrl->IsChecked() ) // Create a file rpt
{
s_RptFilename = m_RptFilenameCtrl->GetValue();
if ( s_RptFilename.IsEmpty() ) OnButtonBrowseRptFileClick( event );
if ( ! s_RptFilename.IsEmpty() ) s_RptFile = wxFopen(s_RptFilename, wxT("w"));
else s_RptFile = NULL;
}
if ( s_RptFile )
{
fprintf(s_RptFile, "Drc report for %s\n", CONV_TO_UTF8(m_Parent->m_CurrentScreen->m_FileName) );
char line[256];
fprintf(s_RptFile, "Created on %s\n", DateAndTime(line));
}
s_Pad2PadTestOpt = m_Pad2PadTestCtrl->IsChecked();
s_UnconnectedTestOpt = m_UnconnectedTestCtrl->IsChecked();
s_ZonesTestOpt = m_ZonesTestCtrl->IsChecked();
......@@ -123,6 +147,17 @@ wxString msg;
else if ( m_UnconnectedCount == 0 )
msg = _("** End Drc: No Error **\n");
m_logWindow->AppendText(msg);
if ( s_RptFile ) fprintf(s_RptFile, "%s", CONV_TO_UTF8(msg) );
if ( s_RptFile )
{
msg.Printf( _("Report file <%s> created\n"), s_RptFilename.GetData());
m_logWindow->AppendText(msg);
fclose(s_RptFile);
s_RptFile = NULL;
}
}
else wxBell();
}
......@@ -180,7 +215,7 @@ wxString Line;
#define PRINT_ZONE_ERR_POS 70
DrcInProgress = TRUE;
NumberOfErrors = 0;
ErrorsDRC_Count = 0;
Compile_Ratsnest(DC, TRUE);
MsgPanel->EraseMsgBox();
......@@ -217,9 +252,9 @@ wxString Line;
if( Marqueur == NULL )
{
DisplayError(this, wxT("Test_Drc(): internal err"));
return NumberOfErrors;
return ErrorsDRC_Count;
}
Line.Printf( wxT("%d"),NumberOfErrors) ;
Line.Printf( wxT("%d"),ErrorsDRC_Count) ;
Affiche_1_Parametre(this, PRINT_PAD_ERR_POS,wxEmptyString,Line, LIGHTRED);
Marqueur->Pnext = m_Pcb->m_Drawings;
Marqueur->Pback = m_Pcb;
......@@ -275,7 +310,7 @@ wxString Line;
if( Marqueur == NULL )
{
DisplayError(this, wxT("Test_Drc(): internal err"));
return NumberOfErrors;
return ErrorsDRC_Count;
}
Marqueur->Pnext = m_Pcb->m_Drawings;
Marqueur->Pback = m_Pcb;
......@@ -286,7 +321,7 @@ wxString Line;
GRSetDrawMode(DC, GR_OR);
pt_segm->Draw(DrawPanel, DC, RED^LIGHTRED );
Line.Printf( wxT("%d"),NumberOfErrors);
Line.Printf( wxT("%d"),ErrorsDRC_Count);
Affiche_1_Parametre(this, PRINT_TRACK_ERR_POS,wxEmptyString,Line, LIGHTRED);
}
}
......@@ -340,7 +375,7 @@ wxString Line;
if( Marqueur == NULL )
{
DisplayError(this, wxT("Test_Drc(): internal err"));
return NumberOfErrors;
return ErrorsDRC_Count;
}
Marqueur->Pnext = m_Pcb->m_Drawings;
Marqueur->Pback = m_Pcb;
......@@ -351,7 +386,7 @@ wxString Line;
GRSetDrawMode(DC, GR_OR);
pt_segm->Draw(DrawPanel, DC, RED^LIGHTRED );
Line.Printf( wxT("%d"),NumberOfErrors);
Line.Printf( wxT("%d"),ErrorsDRC_Count);
Affiche_1_Parametre(this, PRINT_ZONE_ERR_POS, wxEmptyString, Line, LIGHTRED);
}
......@@ -366,7 +401,7 @@ wxString Line;
if( Marqueur == NULL )
{
DisplayError(this, wxT("Test_Drc(): internal err"));
return NumberOfErrors;
return ErrorsDRC_Count;
}
Marqueur->Pnext = m_Pcb->m_Drawings;
Marqueur->Pback = m_Pcb;
......@@ -377,7 +412,7 @@ wxString Line;
GRSetDrawMode(DC, GR_OR);
pt_segm->Draw(DrawPanel, DC, RED^LIGHTRED );
Line.Printf( wxT("%d"),NumberOfErrors);
Line.Printf( wxT("%d"),ErrorsDRC_Count);
Affiche_1_Parametre(this, PRINT_ZONE_ERR_POS, wxEmptyString, Line, LIGHTRED);
}
}
......@@ -386,7 +421,7 @@ wxString Line;
AbortDrc = FALSE;
DrcInProgress = FALSE;
return NumberOfErrors;
return ErrorsDRC_Count;
}
......@@ -462,7 +497,7 @@ wxPoint shape_pos;
spot_cY = pseudo_pad.m_Pos.y - org_Y;
if( TestClearanceSegmToPad(&pseudo_pad, w_dist, g_DesignSettings.m_TrackClearence) != OK_DRC )
{
NumberOfErrors++;
ErrorsDRC_Count++;
if( show_err )
Affiche_Erreur_DRC(frame->DrawPanel, DC,
frame->m_Pcb, pt_segment,pt_pad,0);
......@@ -485,7 +520,7 @@ wxPoint shape_pos;
/* extremite sur pad ou defaut d'isolation trouve */
else
{
NumberOfErrors++;
ErrorsDRC_Count++;
if( show_err )
Affiche_Erreur_DRC(frame->DrawPanel, DC,
frame->m_Pcb, pt_segment,pt_pad,1);
......@@ -527,7 +562,7 @@ wxPoint shape_pos;
{
if( (int)hypot((float)x0,(float)y0) < w_dist )
{
NumberOfErrors++;
ErrorsDRC_Count++;
if( show_err)
Affiche_Erreur_DRC(frame->DrawPanel, DC, frame->m_Pcb, pt_segment,pttrack,21);
return(BAD_DRC) ;
......@@ -544,7 +579,7 @@ wxPoint shape_pos;
if( TestMarginToCircle(x0, y0, w_dist, dx) == BAD_DRC )
{
NumberOfErrors++;
ErrorsDRC_Count++;
if(show_err)
Affiche_Erreur_DRC(frame->DrawPanel, DC, frame->m_Pcb, pt_segment,pttrack,20);
return(BAD_DRC) ;
......@@ -563,7 +598,7 @@ wxPoint shape_pos;
if ( pttrack->m_StructType == TYPEVIA )
{
if( TestMarginToCircle(x0, y0,w_dist,segm_long) == OK_DRC) continue;
NumberOfErrors++;
ErrorsDRC_Count++;
if(show_err)
Affiche_Erreur_DRC(frame->DrawPanel, DC, frame->m_Pcb, pt_segment,pttrack,21);
return(BAD_DRC) ;
......@@ -584,14 +619,14 @@ wxPoint shape_pos;
/* test fin tenant compte des formes arrondies des extremites */
if ( x0 >= 0 && x0 <= segm_long )
{
NumberOfErrors++;
ErrorsDRC_Count++;
if ( show_err )
Affiche_Erreur_DRC(frame->DrawPanel, DC, frame->m_Pcb, pt_segment,pttrack,2);
return(BAD_DRC) ;
}
if( TestMarginToCircle(x0, y0, w_dist,segm_long) == BAD_DRC)
{
NumberOfErrors++;
ErrorsDRC_Count++;
if(show_err)
Affiche_Erreur_DRC(frame->DrawPanel, DC, frame->m_Pcb, pt_segment,pttrack,2);
return(BAD_DRC) ;
......@@ -602,14 +637,14 @@ wxPoint shape_pos;
/* test fin tenant compte des formes arrondies des extremites */
if ( xf >= 0 && xf <= segm_long )
{
NumberOfErrors++;
ErrorsDRC_Count++;
if(show_err)
Affiche_Erreur_DRC(frame->DrawPanel, DC, frame->m_Pcb, pt_segment,pttrack,3);
return(BAD_DRC) ;
}
if( TestMarginToCircle(xf, yf, w_dist,segm_long) == BAD_DRC)
{
NumberOfErrors++;
ErrorsDRC_Count++;
if(show_err)
Affiche_Erreur_DRC(frame->DrawPanel, DC, frame->m_Pcb, pt_segment,pttrack,3);
return(BAD_DRC) ;
......@@ -618,7 +653,7 @@ wxPoint shape_pos;
if ( x0 <=0 && xf >= 0 )
{
NumberOfErrors++;
ErrorsDRC_Count++;
if(show_err)
Affiche_Erreur_DRC(frame->DrawPanel, DC, frame->m_Pcb, pt_segment,pttrack,4);
return(BAD_DRC) ;
......@@ -633,7 +668,7 @@ wxPoint shape_pos;
if( y0 > yf ) EXCHG(y0, yf);
if( (y0 < 0) && (yf > 0) )
{
NumberOfErrors++;
ErrorsDRC_Count++;
if( show_err)
Affiche_Erreur_DRC(frame->DrawPanel, DC, frame->m_Pcb, pt_segment,pttrack,6);
return(BAD_DRC);
......@@ -643,14 +678,14 @@ wxPoint shape_pos;
de reference */
if(TestMarginToCircle(x0,y0,w_dist,segm_long) == BAD_DRC)
{
NumberOfErrors++;
ErrorsDRC_Count++;
if(show_err)
Affiche_Erreur_DRC(frame->DrawPanel, DC, frame->m_Pcb, pt_segment,pttrack,7);
return(BAD_DRC) ;
}
if(TestMarginToCircle(xf,yf,w_dist,segm_long) == BAD_DRC)
{
NumberOfErrors++;
ErrorsDRC_Count++;
if(show_err)
Affiche_Erreur_DRC(frame->DrawPanel, DC, frame->m_Pcb, pt_segment,pttrack,8);
return(BAD_DRC) ;
......@@ -677,7 +712,7 @@ wxPoint shape_pos;
if(bflag == BAD_DRC)
{
NumberOfErrors++;
ErrorsDRC_Count++;
if(show_err)
Affiche_Erreur_DRC(frame->DrawPanel, DC, frame->m_Pcb, pt_segment,pttrack,9);
return(BAD_DRC) ;
......@@ -705,14 +740,14 @@ wxPoint shape_pos;
RotatePoint(&rxf,&ryf, angle);
if(TestMarginToCircle(rx0,ry0,w_dist,dx) == BAD_DRC)
{
NumberOfErrors++;
ErrorsDRC_Count++;
if(show_err)
Affiche_Erreur_DRC(frame->DrawPanel, DC, frame->m_Pcb, pt_segment,pttrack,10);
return(BAD_DRC) ;
}
if(TestMarginToCircle(rxf,ryf,w_dist,dx) == BAD_DRC)
{
NumberOfErrors++;
ErrorsDRC_Count++;
if(show_err)
Affiche_Erreur_DRC(frame->DrawPanel, DC, frame->m_Pcb, pt_segment,pttrack,11);
return(BAD_DRC) ;
......@@ -765,7 +800,7 @@ LISTE_PAD * pad_list = start_buffer;
if( Pad_to_Pad_Isol(pad_ref, pad, g_DesignSettings.m_TrackClearence) == OK_DRC ) continue ;
else /* defaut d'isolation trouve */
{
NumberOfErrors++;
ErrorsDRC_Count++;
if( show_err )
Affiche_Erreur_DRC(frame->DrawPanel, DC, frame->m_Pcb, pad_ref, pad);
return(BAD_DRC);
......@@ -1106,29 +1141,46 @@ static void Affiche_Erreur_DRC(WinEDA_DrawPanel * panel, wxDC * DC, BOARD * Pcb,
*/
{
wxPoint erc_pos;
D_PAD * pad;
TRACK * pt_segm;
wxString msg;
wxString tracktype, netname1, netname2;
EQUIPOT * equipot = GetEquipot(Pcb, pt_ref->m_NetCode);
if ( equipot ) netname1 = equipot->m_Netname;
else netname1 = wxT("<noname>");
netname2 = wxT("<noname>");
tracktype = wxT("Track");
if ( pt_ref->m_StructType == TYPEVIA ) tracktype = wxT("Via");
if ( pt_ref->m_StructType == TYPEZONE ) tracktype = wxT("Zone");
if( ((EDA_BaseStruct*)pt_item)->m_StructType == TYPEPAD )
{
pad = (D_PAD*) pt_item;
D_PAD * pad = (D_PAD*) pt_item;
equipot = GetEquipot(Pcb, pad->m_NetCode);
if ( equipot ) netname2 = equipot->m_Netname;
erc_pos = pad->m_Pos;
wxString pad_name = pad->ReturnStringPadName();
wxString module_name = ((MODULE*)(pad->m_Parent))->m_Reference->m_Text;
msg.Printf(_("%d Drc Err %d PAD %s (%s) @ %d,%d\n"),
NumberOfErrors, errnumber,
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(),
netname2.GetData(),
erc_pos.x, erc_pos.y);
}
else /* erreur sur segment de piste */
{
pt_segm = (TRACK *) pt_item;
equipot = GetEquipot(Pcb, pt_segm->m_NetCode);
if ( equipot ) netname2 = equipot->m_Netname;
erc_pos = pt_segm->m_Start;
if(pt_segm->m_StructType == TYPEVIA)
{
msg.Printf(_("%d Err type %d: sur VIA @ %d,%d\n"),
NumberOfErrors, errnumber,erc_pos.x,erc_pos.y);
msg.Printf(_("%d Err type %d: %s (net %s) and VIA (net %s) @ %d,%d\n"),
ErrorsDRC_Count, errnumber, tracktype.GetData(),
netname1.GetData(), netname2.GetData(),
erc_pos.x,erc_pos.y);
}
else
{
......@@ -1138,13 +1190,16 @@ wxString msg;
{
EXCHG(erc_pos_f.x, erc_pos.x); EXCHG(erc_pos_f.y, erc_pos.y);
}
msg.Printf(_("%d Err type %d: sur SEGMENT @ %d,%d\n"),
NumberOfErrors, errnumber,erc_pos.x,erc_pos.y);
msg.Printf(_("%d Err type %d: %s (net %s) and track (net %s) @ %d,%d\n"),
ErrorsDRC_Count, errnumber, tracktype.GetData(),
netname1.GetData(), netname2.GetData(),
erc_pos.x,erc_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 = wxPoint(erc_pos.x, erc_pos.y);
......@@ -1172,12 +1227,22 @@ wxString msg;
wxString module_name1 = ((MODULE*)(pad1->m_Parent))->m_Reference->m_Text;
wxString pad_name2 = pad2->ReturnStringPadName();
wxString module_name2 = ((MODULE*)(pad2->m_Parent))->m_Reference->m_Text;
msg.Printf( _("%d Drc Err: PAD %s (%s) @ %d,%d and PAD %s (%s) @ %d,%d\n"),
NumberOfErrors, pad_name1.GetData(), module_name1.GetData(), pad1->m_Pos.x,pad1->m_Pos.y,
pad_name2.GetData(), module_name2.GetData(), pad2->m_Pos.x, pad2->m_Pos.y);
wxString netname1, netname2;
EQUIPOT * equipot = GetEquipot(Pcb, pad1->m_NetCode);
if ( equipot ) netname1 = equipot->m_Netname;
else netname1 = wxT("<noname>");
equipot = GetEquipot(Pcb, pad2->m_NetCode);
if ( equipot ) netname2 = equipot->m_Netname;
else 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);
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;
......
......@@ -716,6 +716,64 @@
<string name="proxy-Custom arguments">""</string>
<string name="proxy-Custom ctor arguments">""</string>
</document>
<document>
<string name="title">"wxCheckBox: ID_CHECKBOX_CREATE_FILE"</string>
<string name="type">"dialog-control-document"</string>
<string name="filename">""</string>
<string name="icon-name">"checkbox"</string>
<long name="is-transient">0</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">0</long>
<string name="created">"2/8/2007"</string>
<string name="proxy-type">"wbCheckBoxProxy"</string>
<string name="proxy-Id name">"ID_CHECKBOX_CREATE_FILE"</string>
<long name="proxy-Id value">10012</long>
<string name="proxy-Class">"wxCheckBox"</string>
<string name="proxy-Base class">"wxCheckBox"</string>
<bool name="proxy-External implementation">1</bool>
<bool name="proxy-Separate files">0</bool>
<string name="proxy-Implementation filename">""</string>
<string name="proxy-Header filename">""</string>
<string name="proxy-Member variable name">"m_CreateRptCtrl"</string>
<string name="proxy-Label">"Create Report file"</string>
<bool name="proxy-Initial value">0</bool>
<string name="proxy-Help text">""</string>
<string name="proxy-Tooltip text">""</string>
<string name="proxy-Data variable">"s_CreateRptFileOpt"</string>
<string name="proxy-Data validator">"wxGenericValidator(&amp; %VARIABLE%)"</string>
<string name="proxy-Background colour">""</string>
<string name="proxy-Foreground colour">""</string>
<string name="proxy-Font">""</string>
<bool name="proxy-Hidden">0</bool>
<bool name="proxy-Enabled">1</bool>
<string name="proxy-Platform">"&lt;Any platform&gt;"</string>
<bool name="proxy-wxALIGN_RIGHT">0</bool>
<bool name="proxy-wxCHK_2STATE">0</bool>
<bool name="proxy-wxCHK_3STATE">0</bool>
<bool name="proxy-wxCHK_ALLOW_3RD_STATE_FOR_USER">0</bool>
<bool name="proxy-wxWANTS_CHARS">0</bool>
<bool name="proxy-wxNO_FULL_REPAINT_ON_RESIZE">0</bool>
<bool name="proxy-wxFULL_REPAINT_ON_RESIZE">0</bool>
<string name="proxy-Custom styles">""</string>
<long name="proxy-X">-1</long>
<long name="proxy-Y">-1</long>
<long name="proxy-Width">-1</long>
<long name="proxy-Height">-1</long>
<string name="proxy-AlignH">"Expand"</string>
<string name="proxy-AlignV">"Centre"</string>
<long name="proxy-Stretch factor">0</long>
<long name="proxy-Border">5</long>
<bool name="proxy-wxLEFT">1</bool>
<bool name="proxy-wxRIGHT">1</bool>
<bool name="proxy-wxTOP">1</bool>
<bool name="proxy-wxBOTTOM">1</bool>
<bool name="proxy-wxSHAPED">0</bool>
<bool name="proxy-wxADJUST_MINSIZE">0</bool>
<bool name="proxy-wxFIXED_MINSIZE">0</bool>
<string name="proxy-Custom arguments">""</string>
<string name="proxy-Custom ctor arguments">""</string>
</document>
</document>
</document>
<document>
......@@ -1116,6 +1174,175 @@
<string name="proxy-Custom arguments">""</string>
<string name="proxy-Custom ctor arguments">""</string>
</document>
<document>
<string name="title">"wxStaticBoxSizer V"</string>
<string name="type">"dialog-control-document"</string>
<string name="filename">""</string>
<string name="icon-name">"sizer"</string>
<long name="is-transient">0</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">0</long>
<string name="created">"2/8/2007"</string>
<string name="proxy-type">"wbStaticBoxSizerProxy"</string>
<string name="proxy-Id name">"wxID_ANY"</string>
<long name="proxy-Id value">-1</long>
<string name="proxy-Label">"Report File"</string>
<string name="proxy-Member variable name">""</string>
<string name="proxy-Sizer member variable name">""</string>
<string name="proxy-Foreground colour">""</string>
<string name="proxy-Font">""</string>
<bool name="proxy-Hidden">0</bool>
<bool name="proxy-Enabled">1</bool>
<string name="proxy-Static box class">"wxStaticBox"</string>
<string name="proxy-Orientation">"Vertical"</string>
<string name="proxy-AlignH">"Expand"</string>
<string name="proxy-AlignV">"Centre"</string>
<long name="proxy-Stretch factor">0</long>
<long name="proxy-Border">5</long>
<bool name="proxy-wxLEFT">1</bool>
<bool name="proxy-wxRIGHT">1</bool>
<bool name="proxy-wxTOP">1</bool>
<bool name="proxy-wxBOTTOM">1</bool>
<bool name="proxy-wxSHAPED">0</bool>
<bool name="proxy-wxADJUST_MINSIZE">0</bool>
<bool name="proxy-wxFIXED_MINSIZE">0</bool>
<string name="proxy-Platform">"&lt;Any platform&gt;"</string>
<document>
<string name="title">"wxButton: ID_BUTTON_BROWSE_RPT_FILE"</string>
<string name="type">"dialog-control-document"</string>
<string name="filename">""</string>
<string name="icon-name">"dialogcontrol"</string>
<long name="is-transient">0</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">0</long>
<string name="created">"2/8/2007"</string>
<string name="proxy-type">"wbButtonProxy"</string>
<string name="event-handler-0">"wxEVT_COMMAND_BUTTON_CLICKED|OnButtonBrowseRptFileClick|NONE||"</string>
<string name="proxy-Id name">"ID_BUTTON_BROWSE_RPT_FILE"</string>
<long name="proxy-Id value">10011</long>
<string name="proxy-Class">"wxButton"</string>
<string name="proxy-Base class">"wxButton"</string>
<bool name="proxy-External implementation">1</bool>
<bool name="proxy-Separate files">0</bool>
<string name="proxy-Implementation filename">""</string>
<string name="proxy-Header filename">""</string>
<string name="proxy-Member variable name">""</string>
<string name="proxy-Label">"Browse"</string>
<bool name="proxy-Default">0</bool>
<string name="proxy-Help text">""</string>
<string name="proxy-Tooltip text">""</string>
<string name="proxy-Background colour">""</string>
<string name="proxy-Foreground colour">"008080"</string>
<string name="proxy-Font">""</string>
<bool name="proxy-Hidden">0</bool>
<bool name="proxy-Enabled">1</bool>
<string name="proxy-Platform">"&lt;Any platform&gt;"</string>
<bool name="proxy-wxBU_LEFT">0</bool>
<bool name="proxy-wxBU_RIGHT">0</bool>
<bool name="proxy-wxBU_TOP">0</bool>
<bool name="proxy-wxBU_BOTTOM">0</bool>
<bool name="proxy-wxBU_EXACTFIT">0</bool>
<bool name="proxy-wxNO_BORDER">0</bool>
<bool name="proxy-wxWANTS_CHARS">0</bool>
<bool name="proxy-wxNO_FULL_REPAINT_ON_RESIZE">0</bool>
<bool name="proxy-wxFULL_REPAINT_ON_RESIZE">0</bool>
<string name="proxy-Custom styles">""</string>
<long name="proxy-X">-1</long>
<long name="proxy-Y">-1</long>
<long name="proxy-Width">-1</long>
<long name="proxy-Height">-1</long>
<string name="proxy-AlignH">"Left"</string>
<string name="proxy-AlignV">"Centre"</string>
<long name="proxy-Stretch factor">0</long>
<long name="proxy-Border">5</long>
<bool name="proxy-wxLEFT">1</bool>
<bool name="proxy-wxRIGHT">1</bool>
<bool name="proxy-wxTOP">1</bool>
<bool name="proxy-wxBOTTOM">1</bool>
<bool name="proxy-wxSHAPED">0</bool>
<bool name="proxy-wxADJUST_MINSIZE">0</bool>
<bool name="proxy-wxFIXED_MINSIZE">0</bool>
<string name="proxy-Custom arguments">""</string>
<string name="proxy-Custom ctor arguments">""</string>
</document>
<document>
<string name="title">"wxTextCtrl: ID_TEXTCTRL_GET_RPT_FILENAME"</string>
<string name="type">"dialog-control-document"</string>
<string name="filename">""</string>
<string name="icon-name">"textctrl"</string>
<long name="is-transient">0</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">0</long>
<string name="created">"2/8/2007"</string>
<string name="proxy-type">"wbTextCtrlProxy"</string>
<string name="proxy-Id name">"ID_TEXTCTRL_GET_RPT_FILENAME"</string>
<long name="proxy-Id value">10010</long>
<string name="proxy-Class">"wxTextCtrl"</string>
<string name="proxy-Base class">"wxTextCtrl"</string>
<bool name="proxy-External implementation">1</bool>
<bool name="proxy-Separate files">0</bool>
<string name="proxy-Implementation filename">""</string>
<string name="proxy-Header filename">""</string>
<string name="proxy-Member variable name">"m_RptFilenameCtrl"</string>
<string name="proxy-Initial value">""</string>
<long name="proxy-Max length">0</long>
<string name="proxy-Help text">""</string>
<string name="proxy-Tooltip text">""</string>
<string name="proxy-Background colour">""</string>
<string name="proxy-Foreground colour">""</string>
<string name="proxy-Font">""</string>
<bool name="proxy-Hidden">0</bool>
<bool name="proxy-Enabled">1</bool>
<string name="proxy-Platform">"&lt;Any platform&gt;"</string>
<string name="proxy-Data variable">""</string>
<string name="proxy-Data validator">""</string>
<bool name="proxy-wxTE_MULTILINE">0</bool>
<bool name="proxy-wxTE_PROCESS_ENTER">0</bool>
<bool name="proxy-wxTE_PROCESS_TAB">0</bool>
<bool name="proxy-wxTE_PASSWORD">0</bool>
<bool name="proxy-wxTE_READONLY">0</bool>
<bool name="proxy-wxTE_RICH">0</bool>
<bool name="proxy-wxTE_RICH2">0</bool>
<bool name="proxy-wxTE_AUTO_URL">0</bool>
<bool name="proxy-wxTE_NOHIDESEL">0</bool>
<bool name="proxy-wxTE_LEFT">0</bool>
<bool name="proxy-wxTE_CENTRE">0</bool>
<bool name="proxy-wxTE_RIGHT">0</bool>
<bool name="proxy-wxHSCROLL">0</bool>
<bool name="proxy-wxTE_CHARWRAP">0</bool>
<bool name="proxy-wxTE_WORDWRAP">0</bool>
<bool name="proxy-wxNO_BORDER">0</bool>
<bool name="proxy-wxSIMPLE_BORDER">0</bool>
<bool name="proxy-wxDOUBLE_BORDER">0</bool>
<bool name="proxy-wxSUNKEN_BORDER">0</bool>
<bool name="proxy-wxRAISED_BORDER">0</bool>
<bool name="proxy-wxSTATIC_BORDER">0</bool>
<bool name="proxy-wxWANTS_CHARS">0</bool>
<bool name="proxy-wxNO_FULL_REPAINT_ON_RESIZE">0</bool>
<bool name="proxy-wxFULL_REPAINT_ON_RESIZE">0</bool>
<string name="proxy-Custom styles">""</string>
<long name="proxy-X">-1</long>
<long name="proxy-Y">-1</long>
<long name="proxy-Width">-1</long>
<long name="proxy-Height">-1</long>
<string name="proxy-AlignH">"Expand"</string>
<string name="proxy-AlignV">"Centre"</string>
<long name="proxy-Stretch factor">0</long>
<long name="proxy-Border">5</long>
<bool name="proxy-wxLEFT">1</bool>
<bool name="proxy-wxRIGHT">1</bool>
<bool name="proxy-wxTOP">1</bool>
<bool name="proxy-wxBOTTOM">1</bool>
<bool name="proxy-wxSHAPED">0</bool>
<bool name="proxy-wxADJUST_MINSIZE">0</bool>
<bool name="proxy-wxFIXED_MINSIZE">0</bool>
<string name="proxy-Custom arguments">""</string>
<string name="proxy-Custom ctor arguments">""</string>
</document>
</document>
</document>
</document>
<document>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment