Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
K
kicad-source-mirror
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Commits
Open sidebar
Elphel
kicad-source-mirror
Commits
f50ec6e0
Commit
f50ec6e0
authored
Jan 24, 2008
by
dickelbeck
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
D_PAD::Compare()
parent
1969a511
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
111 additions
and
143 deletions
+111
-143
change_log.txt
change_log.txt
+10
-1
class_pad.cpp
pcbnew/class_pad.cpp
+73
-106
class_pad.h
pcbnew/class_pad.h
+12
-3
export_gencad.cpp
pcbnew/export_gencad.cpp
+4
-33
todo.txt
todo.txt
+12
-0
No files found.
change_log.txt
View file @
f50ec6e0
...
...
@@ -4,14 +4,23 @@ Started 2007-June-11
Please add newer entries at the top, list the date and your name with
email address.
2008-Jan-24 UPDATE Dick Hollenbeck <dick@softplc.com>
================================================================================
+pcbnew:
* Export a specctra *.dsn file includes some padstacks, not ovals yet.
* Many many refinements to specctra.cpp and specctra.h.
* added COLLECTOR::BasePtr(), which is used in qsort. Could have used
* std::sort() instead.
* Wrote D_PAD::Compare()
* updated todo.txt
2008-Jan-24 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
================================================================================
+pcbnew:
Bugs about fill zones removed (not all, of course).
Fixed an old bug in block delete (could crashes pcbnew after deleting footprints).
2008-Jan-23 UPDATE Dick Hollenbeck <dick@softplc.com>
================================================================================
+pcbnew:
...
...
pcbnew/class_pad.cpp
View file @
f50ec6e0
...
...
@@ -245,16 +245,15 @@ void D_PAD::Draw( WinEDA_DrawPanel* panel, wxDC* DC, const wxPoint& offset, int
(
PCB_SCREEN
*
)
panel
->
m_Parent
->
m_CurrentScreen
:
(
PCB_SCREEN
*
)
ActiveScreen
;
if
(
panel
)
// Use current frame setting
{
frame
=
(
WinEDA_BasePcbFrame
*
)
panel
->
m_Parent
;
}
else
// Use board frame setting
if
(
DisplayOpt
.
DisplayPadFill
==
FILLED
)
fillpad
=
1
;
if
(
frame
->
m_DisplayPadFill
==
FILLED
)
fillpad
=
1
;
if
(
panel
)
// Use current frame setting
{
frame
=
(
WinEDA_BasePcbFrame
*
)
panel
->
m_Parent
;
}
else
if
(
DisplayOpt
.
DisplayPadFill
==
FILLED
)
// Use board frame setting
fillpad
=
1
;
if
(
frame
->
m_DisplayPadFill
==
FILLED
)
fillpad
=
1
;
zoom
=
screen
->
GetZoom
();
#ifdef PCBNEW
...
...
@@ -331,7 +330,6 @@ void D_PAD::Draw( WinEDA_DrawPanel* panel, wxDC* DC, const wxPoint& offset, int
}
//-----<test this>-----
// if PAD_SMD pad and high contrast mode
if
(
m_Attribut
==
PAD_SMD
&&
DisplayOpt
.
ContrastModeDisplay
)
{
...
...
@@ -376,8 +374,6 @@ void D_PAD::Draw( WinEDA_DrawPanel* panel, wxDC* DC, const wxPoint& offset, int
}
}
}
//-----</test this>----
if
(
draw_mode
&
GR_SURBRILL
)
{
...
...
@@ -463,6 +459,7 @@ void D_PAD::Draw( WinEDA_DrawPanel* panel, wxDC* DC, const wxPoint& offset, int
if
(
DisplayIsol
)
{
rotdx
=
rotdx
+
g_DesignSettings
.
m_TrackClearence
+
g_DesignSettings
.
m_TrackClearence
;
GRCSegm
(
&
panel
->
m_ClipBox
,
DC
,
ux0
+
delta_cx
,
uy0
+
delta_cy
,
ux0
-
delta_cx
,
uy0
-
delta_cy
,
rotdx
,
color
);
...
...
@@ -499,7 +496,9 @@ void D_PAD::Draw( WinEDA_DrawPanel* panel, wxDC* DC, const wxPoint& offset, int
if
(
DisplayIsol
)
{
dx
+=
g_DesignSettings
.
m_TrackClearence
;
dy
+=
g_DesignSettings
.
m_TrackClearence
;
dx
+=
g_DesignSettings
.
m_TrackClearence
;
dy
+=
g_DesignSettings
.
m_TrackClearence
;
coord
[
0
].
x
=
-
dx
-
ddy
;
coord
[
0
].
y
=
dy
+
ddx
;
...
...
@@ -763,97 +762,6 @@ int D_PAD::ReadDescr( FILE* File, int* LineNum )
}
#if 0
/***********************************/
int D_PAD::WriteDescr( FILE* File )
/***********************************/
/* Sauvegarde de la description d'un PAD
*/
{
int cshape, NbLigne = 0;;
const char* texttype;
if( GetState( DELETED ) )
return NbLigne;
/* Generation du fichier pad: */
fprintf( File, "$PAD\n" ); NbLigne++;
switch( m_PadShape )
{
case PAD_CIRCLE:
cshape = 'C'; break;
case PAD_RECT:
cshape = 'R'; break;
case PAD_OVAL:
cshape = 'O'; break;
case PAD_TRAPEZOID:
cshape = 'T'; break;
default:
cshape = 'C';
DisplayError( NULL, _( "Unknown Pad shape" ) );
break;
}
fprintf( File, "Sh \"%.4s\" %c %d %d %d %d %d\n",
m_Padname, cshape, m_Size.x, m_Size.y,
m_DeltaSize.x, m_DeltaSize.y, m_Orient );
NbLigne++;
fprintf( File, "Dr %d %d %d", m_Drill.x, m_Offset.x, m_Offset.y );
if( m_DrillShape == PAD_OVAL )
{
fprintf( File, " %c %d %d", 'O', m_Drill.x, m_Drill.y );
}
fprintf( File, "\n" );
NbLigne++;
switch( m_Attribut )
{
case PAD_STANDARD:
texttype = "STD"; break;
case PAD_SMD:
texttype = "SMD"; break;
case PAD_CONN:
texttype = "CONN"; break;
case PAD_P_HOLE:
texttype = "HOLE"; break;
case MECA:
texttype = "MECA"; break;
default:
texttype = "STD";
DisplayError( NULL, wxT( "attribut Pad inconnu" ) );
break;
}
fprintf( File, "At %s N %8.8X\n", texttype, m_Masque_Layer );
NbLigne++;
fprintf( File, "Ne %d \"%s\"\n", GetNet(), CONV_TO_UTF8( m_Netname ) );
NbLigne++;
fprintf( File, "Po %d %d\n", m_Pos0.x, m_Pos0.y );
NbLigne++;
fprintf( File, "$EndPAD\n" );
NbLigne++;
return NbLigne;
}
#endif
bool
D_PAD
::
Save
(
FILE
*
aFile
)
const
{
int
cshape
;
...
...
@@ -1167,8 +1075,66 @@ bool D_PAD::HitTest( const wxPoint& ref_pos )
}
/************************************************************/
int
D_PAD
::
Compare
(
const
D_PAD
*
padref
,
const
D_PAD
*
padcmp
)
/************************************************************/
{
int
diff
;
if
(
(
diff
=
padref
->
m_PadShape
-
padcmp
->
m_PadShape
)
)
return
diff
;
if
(
(
diff
=
padref
->
m_Size
.
x
-
padcmp
->
m_Size
.
x
)
)
return
diff
;
if
(
(
diff
=
padref
->
m_Size
.
y
-
padcmp
->
m_Size
.
y
)
)
return
diff
;
if
(
(
diff
=
padref
->
m_Offset
.
x
-
padcmp
->
m_Offset
.
x
)
)
return
diff
;
if
(
(
diff
=
padref
->
m_Offset
.
y
-
padcmp
->
m_Offset
.
y
)
)
return
diff
;
if
(
(
diff
=
padref
->
m_DeltaSize
.
x
-
padcmp
->
m_DeltaSize
.
x
)
)
return
diff
;
if
(
(
diff
=
padref
->
m_DeltaSize
.
y
-
padcmp
->
m_DeltaSize
.
y
)
)
return
diff
;
// @todo check if export_gencad still works:
// specctra_export needs this, but maybe export_gencad does not. added on Jan 24 2008 by Dick.
if
(
(
diff
=
padref
->
m_Masque_Layer
-
padcmp
->
m_Masque_Layer
)
)
return
diff
;
return
0
;
}
#if defined (DEBUG)
// @todo: could this be useable elsewhere also?
static
const
char
*
ShowPadType
(
int
aPadType
)
{
switch
(
aPadType
)
{
case
PAD_CIRCLE
:
return
"circle"
;
case
PAD_OVAL
:
return
"oval"
;
case
PAD_RECT
:
return
"rect"
;
case
PAD_TRAPEZOID
:
return
"trap"
;
default
:
return
"??unknown??"
;
}
}
static
const
char
*
ShowPadAttr
(
int
aPadAttr
)
{
switch
(
aPadAttr
)
{
case
PAD_STANDARD
:
return
"STD"
;
case
PAD_SMD
:
return
"SMD"
;
case
PAD_CONN
:
return
"CONN"
;
case
PAD_P_HOLE
:
return
"HOLE"
;
case
PAD_MECA
:
return
"MECA"
;
default
:
return
"??unkown??"
;
}
}
/**
* Function Show
* is used to output the object tree, currently for debugging only.
...
...
@@ -1186,6 +1152,8 @@ void D_PAD::Show( int nestLevel, std::ostream& os )
// for now, make it look like XML:
NestedSpace
(
nestLevel
,
os
)
<<
'<'
<<
GetClass
().
Lower
().
mb_str
()
<<
" shape=
\"
"
<<
ShowPadType
(
m_PadShape
)
<<
'"'
<<
" attr=
\"
"
<<
ShowPadAttr
(
m_Attribut
)
<<
'"'
<<
" num=
\"
"
<<
padname
<<
'"'
<<
" net=
\"
"
<<
m_Netname
.
mb_str
()
<<
'"'
<<
" netcode=
\"
"
<<
GetNet
()
<<
'"'
<<
...
...
@@ -1196,5 +1164,4 @@ void D_PAD::Show( int nestLevel, std::ostream& os )
// NestedSpace( nestLevel, os ) << "</" << GetClass().Lower().mb_str() << ">\n";
}
#endif
pcbnew/class_pad.h
View file @
f50ec6e0
...
...
@@ -27,12 +27,12 @@ public:
wxString
m_Netname
;
/* Net Name */
int
m_Masque_Layer
;
// Bitwise layer :1= copper layer, 15= cmp,
int
m_Masque_Layer
;
// Bitwise layer :1= copper layer, 15= cmp,
// 2..14 = internal layers
// 16 .. 31 = technical layers
int
m_PadShape
;
// Shape: PAD_CIRCLE, PAD_RECT,
OVAL,
TRAPEZOID
int
m_DrillShape
;
// Shape PAD_CIRCLE, OVAL
int
m_PadShape
;
// Shape: PAD_CIRCLE, PAD_RECT,
PAD_OVAL, PAD_
TRAPEZOID
int
m_DrillShape
;
// Shape PAD_CIRCLE,
PAD_
OVAL
wxSize
m_Drill
;
// Drill diam (drill shape = PAD_CIRCLE) or drill size(shape = OVAL)
// for drill shape = PAD_CIRCLE, drill diam = m_Drill.x
...
...
@@ -152,6 +152,15 @@ public:
{
return
wxT
(
"PAD"
);
}
/**
* Function Compare
* compares two pads and return 0 if they are equal.
* @return int - <0 if left less than right, 0 if equal, >0 if left greater than right.
*/
static
int
Compare
(
const
D_PAD
*
padref
,
const
D_PAD
*
padcmp
);
#if defined (DEBUG)
/**
...
...
pcbnew/export_gencad.cpp
View file @
f50ec6e0
...
...
@@ -145,32 +145,11 @@ void WinEDA_PcbFrame::ExportToGenCAD( wxCommandEvent& event )
/**************************************************************************/
static
int
Pad_list_Sort_by_Shapes
(
const
void
*
refptr
,
const
void
*
objptr
)
/**************************************************************************/
/*
* Routine de tri de la liste des pads par type, puis pa taille
*/
{
const
D_PAD
*
padref
,
*
padcmp
;
int
diff
;
const
D_PAD
*
padref
=
*
(
D_PAD
**
)
refptr
;
const
D_PAD
*
padcmp
=
*
(
D_PAD
**
)
objptr
;
padref
=
*
(
(
D_PAD
**
)
refptr
);
padcmp
=
*
(
(
D_PAD
**
)
objptr
);
if
(
(
diff
=
padref
->
m_PadShape
-
padcmp
->
m_PadShape
)
)
return
diff
;
if
(
(
diff
=
padref
->
m_Size
.
x
-
padcmp
->
m_Size
.
x
)
)
return
diff
;
if
(
(
diff
=
padref
->
m_Size
.
y
-
padcmp
->
m_Size
.
y
)
)
return
diff
;
if
(
(
diff
=
padref
->
m_Offset
.
x
-
padcmp
->
m_Offset
.
x
)
)
return
diff
;
if
(
(
diff
=
padref
->
m_Offset
.
y
-
padcmp
->
m_Offset
.
y
)
)
return
diff
;
if
(
(
diff
=
padref
->
m_DeltaSize
.
x
-
padcmp
->
m_DeltaSize
.
x
)
)
return
diff
;
if
(
(
diff
=
padref
->
m_DeltaSize
.
y
-
padcmp
->
m_DeltaSize
.
y
)
)
return
diff
;
return
0
;
return
D_PAD
::
Compare
(
padref
,
padcmp
);
}
...
...
@@ -209,15 +188,7 @@ void CreatePadsShapesSection( FILE* file, BOARD* pcb )
pad
=
*
padlist
;
pad
->
m_logical_connexion
=
pad_name_number
;
if
(
old_pad
&&
(
old_pad
->
m_PadShape
==
pad
->
m_PadShape
)
&&
(
old_pad
->
m_Size
.
x
==
pad
->
m_Size
.
x
)
&&
(
old_pad
->
m_Size
.
y
==
pad
->
m_Size
.
y
)
&&
(
old_pad
->
m_Offset
.
x
==
pad
->
m_Offset
.
x
)
&&
(
old_pad
->
m_Offset
.
y
==
pad
->
m_Offset
.
y
)
&&
(
old_pad
->
m_DeltaSize
.
x
==
pad
->
m_DeltaSize
.
x
)
&&
(
old_pad
->
m_DeltaSize
.
y
==
pad
->
m_DeltaSize
.
y
)
)
if
(
old_pad
&&
0
==
D_PAD
::
Compare
(
old_pad
,
pad
)
)
continue
;
// Forme deja generee
old_pad
=
pad
;
...
...
todo.txt
View file @
f50ec6e0
...
...
@@ -70,3 +70,15 @@ asked by: jp Charras
================================================================================
Use the collector classes in eeschema.
2008-Jan-24 Assigned To: nobody
asked by: Dick Hollenbeck
================================================================================
See specctra.h's such comment
* @todo
* I would have liked to put the flipping logic into the ExportToSPECCTRA()
* function directly, but for some strange reason,
* void Change_Side_Module( MODULE* Module, wxDC* DC ) is a member of
* of class WinEDA_BasePcbFrame rather than class BOARD.
*
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment