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
b3a6ddb6
Commit
b3a6ddb6
authored
Dec 16, 2011
by
Dick Hollenbeck
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
improvements, hopefully
parent
fac288cf
Changes
8
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
151 additions
and
94 deletions
+151
-94
class_pad.cpp
pcbnew/class_pad.cpp
+35
-16
class_pad.h
pcbnew/class_pad.h
+19
-16
drc.cpp
pcbnew/drc.cpp
+1
-1
gen_modules_placefile.cpp
pcbnew/gen_modules_placefile.cpp
+1
-1
kicad_plugin.cpp
pcbnew/kicad_plugin.cpp
+53
-15
kicad_plugin.h
pcbnew/kicad_plugin.h
+1
-0
netlist.cpp
pcbnew/netlist.cpp
+40
-44
xchgmod.cpp
pcbnew/xchgmod.cpp
+1
-1
No files found.
pcbnew/class_pad.cpp
View file @
b3a6ddb6
...
...
@@ -141,6 +141,9 @@ const wxPoint D_PAD::ReturnShapePos()
const
wxString
D_PAD
::
GetPadName
()
const
{
#if 0 // m_Padname is not ASCII and not UTF8, it is LATIN1 basically, whatever
// 8 bit font is supported in KiCad plotting and drawing.
// Return pad name as wxString, assume it starts as a non-terminated
// utf8 character sequence
...
...
@@ -151,11 +154,21 @@ const wxString D_PAD::GetPadName() const
temp[sizeof(m_Padname)] = 0;
return FROM_UTF8( temp );
#else
wxString
name
;
ReturnStringPadName
(
name
);
return
name
;
#endif
}
void
D_PAD
::
ReturnStringPadName
(
wxString
&
text
)
const
{
#if 0 // m_Padname is not ASCII and not UTF8, it is LATIN1 basically, whatever
// 8 bit font is supported in KiCad plotting and drawing.
// Return pad name as wxString, assume it starts as a non-terminated
// utf8 character sequence
...
...
@@ -166,6 +179,20 @@ void D_PAD::ReturnStringPadName( wxString& text ) const
temp[sizeof(m_Padname)] = 0;
text = FROM_UTF8( temp );
#else
text
.
Empty
();
for
(
int
ii
=
0
;
ii
<
PADNAMEZ
;
ii
++
)
{
if
(
!
m_Padname
[
ii
]
)
break
;
// add an unsigned 8 bit byte, which is LATIN1 or CRYLIC
text
.
Append
(
(
unsigned
char
)
m_Padname
[
ii
]
);
}
#endif
}
...
...
@@ -176,25 +203,17 @@ void D_PAD::SetPadName( const wxString& name )
len
=
name
.
Length
();
if
(
len
>
4
)
len
=
4
;
if
(
len
>
PADNAMEZ
)
len
=
PADNAMEZ
;
for
(
ii
=
0
;
ii
<
len
;
ii
++
)
m_Padname
[
ii
]
=
name
.
GetChar
(
ii
);
// m_Padname[] is not UTF8, it is an 8 bit character that matches the KiCad font,
// so only copy the lower 8 bits of each character.
for
(
ii
=
len
;
ii
<
4
;
ii
++
)
m_Padname
[
ii
]
=
0
;
}
void
D_PAD
::
SetPadName
(
const
char
*
aName
)
{
unsigned
i
;
for
(
i
=
0
;
i
<
sizeof
(
m_Padname
)
&&
*
aName
;
++
i
)
m_Padname
[
i
]
=
*
aName
++
;
for
(
ii
=
0
;
ii
<
len
;
ii
++
)
m_Padname
[
ii
]
=
(
char
)
name
.
GetChar
(
ii
);
while
(
i
<
sizeof
(
m_Padname
)
)
m_Padname
[
i
++
]
=
0
;
for
(
ii
=
len
;
ii
<
PADNAMEZ
;
ii
++
)
m_Padname
[
i
i
]
=
'\0'
;
}
...
...
pcbnew/class_pad.h
View file @
b3a6ddb6
...
...
@@ -71,18 +71,21 @@ private:
wxString
m_Netname
;
// Full net name like /mysheet/mysubsheet/vout used by Eeschema
wxString
m_ShortNetname
;
// short net name, like vout from /mysheet/mysubsheet/vout
public
:
wxPoint
m_Pos
;
// pad Position on board
/// Pad name (4 char) or a long identifier (used in pad name
/// comparisons because this is faster than string comparison)
union
{
unsigned
long
m_NumPadName
;
char
m_Padname
[
4
];
/* Pad name (4 char) or a long identifier (used in pad name
* comparisons because this is faster than string comparison)
*/
#define PADNAMEZ 4
char
m_Padname
[
PADNAMEZ
];
// zero padded at end to full size
wxUint32
m_NumPadName
;
// same number of bytes as m_Padname[]
};
int
m_SubRatsnest
;
// variable used in rats nest computations
// handle subnet (block) number in ratsnest connection
public
:
wxPoint
m_Pos
;
// pad Position on board
int
m_layerMask
;
// Bitwise layer :1= copper layer, 15= cmp,
// 2..14 = internal layers
// 16 .. 31 = technical layers
...
...
@@ -134,10 +137,6 @@ public:
double
m_LocalSolderPasteMarginRatio
;
// Local solder mask margin ratio value of pad size
// The final margin is the sum of these 2 values
private
:
int
m_SubRatsnest
;
// variable used in rats nest computations
// handle subnet (block) number in ratsnest connection
public
:
D_PAD
(
MODULE
*
parent
);
D_PAD
(
D_PAD
*
pad
);
...
...
@@ -147,6 +146,14 @@ public:
D_PAD
*
Next
()
{
return
(
D_PAD
*
)
Pnext
;
}
void
SetPadName
(
const
wxString
&
name
);
// Change pad name
const
wxString
GetPadName
()
const
;
bool
PadNameEqual
(
const
D_PAD
*
other
)
const
{
return
m_NumPadName
==
other
->
m_NumPadName
;
// hide tricks behind sensible API
}
/**
* Function SetNetname
* @param aNetname: the new netname
...
...
@@ -347,10 +354,6 @@ public:
*/
int
BuildSegmentFromOvalShape
(
wxPoint
&
aSegStart
,
wxPoint
&
aSegEnd
,
int
aRotation
)
const
;
void
SetPadName
(
const
wxString
&
name
);
// Change pad name
void
SetPadName
(
const
char
*
aName
);
const
wxString
GetPadName
()
const
;
void
ReturnStringPadName
(
wxString
&
text
)
const
;
// Return pad name as string in a buffer
void
ComputeShapeMaxRadius
();
// compute radius
...
...
pcbnew/drc.cpp
View file @
b3a6ddb6
...
...
@@ -664,7 +664,7 @@ bool DRC::doPadToPadsDrc( D_PAD* aRefPad, D_PAD** aStart, D_PAD** aEnd, int x_li
// one can argue that this 2nd test is not necessary, that any
// two pads from a single module are acceptable. This 2nd test
// should eventually be a configuration option.
if
(
pad
->
m_NumPadName
==
aRefPad
->
m_NumPadName
)
if
(
pad
->
PadNameEqual
(
aRefPad
)
)
continue
;
}
...
...
pcbnew/gen_modules_placefile.cpp
View file @
b3a6ddb6
...
...
@@ -435,7 +435,7 @@ void PCB_EDIT_FRAME::GenModuleReport( wxCommandEvent& event )
for
(
pad
=
Module
->
m_Pads
;
pad
!=
NULL
;
pad
=
pad
->
Next
()
)
{
fprintf
(
rptfile
,
"$PAD
\"
%
.4s
\"\n
"
,
pad
->
m_Padname
);
fprintf
(
rptfile
,
"$PAD
\"
%
s
\"\n
"
,
TO_UTF8
(
pad
->
GetPadName
()
)
);
sprintf
(
line
,
"position %9.6f %9.6f
\n
"
,
pad
->
m_Pos0
.
x
*
conv_unit
,
pad
->
m_Pos0
.
y
*
conv_unit
);
...
...
pcbnew/kicad_plugin.cpp
View file @
b3a6ddb6
...
...
@@ -60,13 +60,7 @@
#include <auto_ptr.h>
#include <kicad_string.h>
#include <macros.h>
#include <build_version.h>
//#include <fctsys.h>
//#include <confirm.h>
//#include <wxPcbStruct.h">
//#include <pcbcommon.h>
//#include <build_version.h>
#include <zones.h>
#ifdef CVPCB
...
...
@@ -90,17 +84,15 @@
#include <wx/ffile.h>
//#define KICAD_NANOMETRE
#define VERSION_ERROR_FORMAT _( "File '%s' is format version: %d.\nI only support format version <= %d.\nPlease upgrade PCBNew to load this file." )
#define UNKNOWN_GRAPHIC_FORMAT _( "unknown graphic type: %d")
#define UNKNOWN_PAD_FORMAT _( "unknown pad type: %d")
#define UNKNOWN_PAD_ATTRIBUTE _( "unknown pad attribute: %d" )
/*
#include <pcbnew.h>
#include <pcbnew_id.h>
#include <autorout.h>
*/
/// C string compare test for a specific length of characters.
...
...
@@ -330,6 +322,8 @@ void KICAD_PLUGIN::checkVersion()
m_error
.
Printf
(
VERSION_ERROR_FORMAT
,
ver
);
THROW_IO_ERROR
(
m_error
);
}
m_loading_format_version
=
ver
;
}
...
...
@@ -1039,11 +1033,15 @@ void KICAD_PLUGIN::loadPAD( MODULE* aModule )
// e.g. "Sh "A2" C 520 520 0 0 900"
// or "Sh "1" R 157 1378 0 0 900"
char
padname
[
sizeof
(
pad
->
m_Padname
)
+
1
];
// mypadname is LATIN1/CRYLIC for BOARD_FORMAT_VERSION 1,
// but for BOARD_FORMAT_VERSION 2, it is UTF8 from disk.
// So we have to go through two code paths. Moving forward
// padnames will be in UTF8 on disk, as are all KiCad strings on disk.
char
mypadname
[
50
];
data
=
line
+
SZ
(
"Sh"
)
+
1
;
// +1 skips trailing whitespace
data
=
data
+
ReadDelimitedText
(
padname
,
data
,
sizeof
(
padname
)
)
+
1
;
// +1 trailing whitespace
data
=
data
+
ReadDelimitedText
(
mypadname
,
data
,
sizeof
(
my
padname
)
)
+
1
;
// +1 trailing whitespace
// sscanf( PtLine, " %s %d %d %d %d %d", BufCar, &m_Size.x, &m_Size.y, &m_DeltaSize.x, &m_DeltaSize.y, &m_Orient );
...
...
@@ -1066,6 +1064,26 @@ void KICAD_PLUGIN::loadPAD( MODULE* aModule )
THROW_IO_ERROR
(
m_error
);
}
// go through a wxString to establish a universal character set properly
wxString
padname
;
if
(
m_loading_format_version
==
1
)
{
// add 8 bit bytes, file format 1 was KiCad font type byte,
// simply promote those 8 bit bytes up into UNICODE. (subset of LATIN1)
const
unsigned
char
*
cp
=
(
unsigned
char
*
)
mypadname
;
while
(
*
cp
)
{
padname
+=
*
cp
++
;
// unsigned, ls 8 bits only
}
}
else
{
// version 2, which is UTF8.
padname
=
FROM_UTF8
(
mypadname
);
}
// chances are both were ASCII, but why take chances?
pad
->
SetPadName
(
padname
);
pad
->
SetShape
(
padshape
);
pad
->
SetSize
(
wxSize
(
size_x
,
size_y
)
);
...
...
@@ -3059,8 +3077,28 @@ void KICAD_PLUGIN::savePAD( const D_PAD* me ) const
THROW_IO_ERROR
(
wxString
::
Format
(
UNKNOWN_PAD_FORMAT
,
me
->
GetShape
()
)
);
}
// universal character set padname
wxString
padname
=
me
->
GetPadName
();
#if BOARD_FORMAT_VERSION == 1
char
mypadname
[
PADNAMEZ
+
1
];
int
i
;
for
(
i
=
0
;
i
<
PADNAMEZ
&&
padname
[
i
];
++
i
)
{
// truncate from universal character down to 8 bit foreign jibber jabber byte
mypadname
[
i
]
=
(
char
)
padname
[
i
];
}
mypadname
[
i
]
=
0
;
fprintf
(
m_fp
,
"Sh
\"
%s
\"
%c %s %s %s
\n
"
,
mypadname
,
// probably ASCII, but possibly jibber jabber
#else
fprintf
(
m_fp
,
"Sh %s %c %s %s %s
\n
"
,
EscapedUTF8
(
me
->
GetPadName
()
).
c_str
(),
#endif
cshape
,
fmtBIUSize
(
me
->
GetSize
()
).
c_str
(),
fmtBIUSize
(
me
->
GetDelta
()
).
c_str
(),
...
...
pcbnew/kicad_plugin.h
View file @
b3a6ddb6
...
...
@@ -80,6 +80,7 @@ protected:
wxString
m_filename
;
///< for saves only, name is in m_reader for loads
wxString
m_field
;
///< reused to stuff MODULE fields.
int
m_loading_format_version
;
///< which BOARD_FORMAT_VERSION am I Load()ing?
/// initialize PLUGIN like a constructor would, and futz with fresh BOARD if needed.
void
init
(
PROPERTIES
*
aProperties
);
...
...
pcbnew/netlist.cpp
View file @
b3a6ddb6
...
...
@@ -97,7 +97,8 @@ public:
bool
m_ChangeFootprints
;
// Set to true to change existing footprints to new ones
// when netlist gives a different footprint name
public
:
NETLIST_READER
(
PCB_EDIT_FRAME
*
aFrame
,
wxTextCtrl
*
aMessageWindow
=
NULL
)
public
:
NETLIST_READER
(
PCB_EDIT_FRAME
*
aFrame
,
wxTextCtrl
*
aMessageWindow
=
NULL
)
{
m_pcbframe
=
aFrame
;
m_messageWindow
=
aMessageWindow
;
...
...
@@ -199,7 +200,7 @@ private:
static
FILE
*
OpenNetlistFile
(
const
wxString
&
aFullFileName
)
{
if
(
aFullFileName
.
IsEmpty
()
)
return
false
;
/
* No filename: exit */
return
false
;
/
/ No filename: exit
FILE
*
file
=
wxFopen
(
aFullFileName
,
wxT
(
"rt"
)
);
...
...
@@ -341,7 +342,7 @@ void NETLIST_READER::RemoveExtraFootprints( const wxString& aNetlistFileName )
for
(
ii
=
0
;
ii
<
modulesCount
;
ii
++
)
{
if
(
module
->
m_Reference
->
m_Text
.
CmpNoCase
(
componentsInNetlist
[
ii
]
)
==
0
)
break
;
/
* Module is found in net list. */
break
;
/
/ Module is found in net list.
}
if
(
ii
==
modulesCount
)
// Module not found in netlist.
...
...
@@ -404,7 +405,7 @@ bool NETLIST_READER::ReadNetList( FILE* aFile,
{
char
*
line
=
StrPurge
(
netlineReader
.
Line
()
);
if
(
is_comment
)
/
* Comments in progress */
if
(
is_comment
)
/
/ Comments in progress
{
// Test for end of the current comment
if
(
(
line
=
strchr
(
line
,
'}'
)
)
==
NULL
)
...
...
@@ -412,7 +413,7 @@ bool NETLIST_READER::ReadNetList( FILE* aFile,
is_comment
=
false
;
}
if
(
*
line
==
'{'
)
/
* Start Comment */
if
(
*
line
==
'{'
)
/
/ Start Comment
{
is_comment
=
true
;
...
...
@@ -438,7 +439,7 @@ bool NETLIST_READER::ReadNetList( FILE* aFile,
}
}
/
* Load new footprints */
/
/ Load new footprints
bool
success
=
loadNewModules
();
if
(
!
success
)
...
...
@@ -487,11 +488,9 @@ bool NETLIST_READER::ReadNetList( FILE* aFile,
// footprint not found in library)
continue
;
}
else
/
* clear pads netnames */
else
/
/ clear pads netnames
{
D_PAD
*
pad
=
m_currModule
->
m_Pads
;
for
(
;
pad
!=
NULL
;
pad
=
pad
->
Next
()
)
for
(
D_PAD
*
pad
=
m_currModule
->
m_Pads
;
pad
;
pad
=
pad
->
Next
()
)
{
pad
->
SetNetname
(
wxEmptyString
);
}
...
...
@@ -576,7 +575,7 @@ MODULE* NETLIST_READER::ReadNetlistModuleDescr( char* aText, bool aTstOnly )
if
(
error
)
return
NULL
;
/
* Test if module is already loaded. */
/
/ Test if module is already loaded.
wxString
*
identMod
=
&
textCmpReference
;
if
(
m_UseTimeStamp
)
...
...
@@ -590,12 +589,12 @@ MODULE* NETLIST_READER::ReadNetlistModuleDescr( char* aText, bool aTstOnly )
{
nextModule
=
module
->
Next
();
if
(
m_UseTimeStamp
)
/
* identification by time stamp */
if
(
m_UseTimeStamp
)
/
/ identification by time stamp
{
if
(
timeStampPath
.
CmpNoCase
(
module
->
m_Path
)
==
0
)
found
=
true
;
}
else
/
* identification by Reference */
else
/
/ identification by Reference
{
if
(
textCmpReference
.
CmpNoCase
(
module
->
m_Reference
->
m_Text
)
==
0
)
found
=
true
;
...
...
@@ -696,36 +695,34 @@ MODULE* NETLIST_READER::ReadNetlistModuleDescr( char* aText, bool aTstOnly )
*/
bool
NETLIST_READER
::
SetPadNetName
(
char
*
aText
)
{
D_PAD
*
pad
;
char
*
TextPinName
,
*
TextNetName
;
bool
found
;
bool
error
=
false
;
char
Line
[
256
];
char
*
p
;
char
line
[
256
];
if
(
m_currModule
==
NULL
)
return
false
;
str
cpy
(
Line
,
aText
);
str
ncpy
(
line
,
aText
,
sizeof
(
line
)
);
if
(
(
TextPinName
=
strtok
(
L
ine
,
" ()
\t\n
"
)
)
==
NULL
)
error
=
tru
e
;
if
(
(
p
=
strtok
(
l
ine
,
" ()
\t\n
"
)
)
==
NULL
)
return
fals
e
;
if
(
(
TextNetName
=
strtok
(
NULL
,
" ()
\t\n
"
)
)
==
NULL
)
error
=
true
;
wxString
pinName
=
FROM_UTF8
(
p
);
if
(
error
)
return
0
;
if
(
(
p
=
strtok
(
NULL
,
" ()
\t\n
"
)
)
==
NULL
)
return
false
;
pad
=
m_currModule
->
m_Pads
;
found
=
false
;
wxString
netName
=
FROM_UTF8
(
p
);
for
(
;
pad
!=
NULL
;
pad
=
pad
->
Next
()
)
bool
found
=
false
;
for
(
D_PAD
*
pad
=
m_currModule
->
m_Pads
;
pad
;
pad
=
pad
->
Next
()
)
{
if
(
strnicmp
(
TextPinName
,
pad
->
m_Padname
,
4
)
==
0
)
wxString
padName
=
pad
->
GetPadName
();
if
(
padName
==
pinName
)
{
found
=
true
;
if
(
*
TextNetName
!=
'?'
)
pad
->
SetNetname
(
FROM_UTF8
(
TextNetName
)
);
if
(
(
char
)
netName
[
0
]
!=
'?'
)
pad
->
SetNetname
(
netName
);
else
pad
->
SetNetname
(
wxEmptyString
);
}
...
...
@@ -736,10 +733,9 @@ bool NETLIST_READER::SetPadNetName( char* aText )
if
(
m_messageWindow
)
{
wxString
msg
;
wxString
pin_name
=
FROM_UTF8
(
TextPinName
);
msg
.
Printf
(
_
(
"Module [%s]: Pad [%s] not found"
),
GetChars
(
m_currModule
->
m_Reference
->
m_Text
),
GetChars
(
pin
_n
ame
)
);
GetChars
(
pin
N
ame
)
);
m_messageWindow
->
AppendText
(
msg
+
wxT
(
"
\n
"
)
);
}
}
...
...
@@ -812,12 +808,12 @@ void PCB_EDIT_FRAME::Test_Duplicate_Missing_And_Extra_Footprints(
return
;
}
/
* Build the list of references of the net list modules. */
/
/ Build the list of references of the net list modules.
NETLIST_READER
netList_Reader
(
this
);
NbModulesNetListe
=
netList_Reader
.
BuildComponentsListFromNetlist
(
aNetlistFullFilename
,
tmp
);
if
(
NbModulesNetListe
<
0
)
return
;
/
* File not found */
return
;
/
/ File not found
if
(
NbModulesNetListe
==
0
)
{
...
...
@@ -825,7 +821,7 @@ void PCB_EDIT_FRAME::Test_Duplicate_Missing_And_Extra_Footprints(
return
;
}
/
* Search for duplicate footprints. */
/
/ Search for duplicate footprints.
list
.
Add
(
_
(
"Duplicates"
)
);
MODULE
*
module
=
GetBoard
()
->
m_Modules
;
...
...
@@ -849,7 +845,7 @@ void PCB_EDIT_FRAME::Test_Duplicate_Missing_And_Extra_Footprints(
}
}
/
* Search for the missing module by the net list. */
/
/ Search for the missing module by the net list.
list
.
Add
(
_
(
"Missing:"
)
);
for
(
ii
=
0
;
ii
<
NbModulesNetListe
;
ii
++
)
...
...
@@ -871,7 +867,7 @@ void PCB_EDIT_FRAME::Test_Duplicate_Missing_And_Extra_Footprints(
}
}
/
* Search for modules not in net list. */
/
/ Search for modules not in net list.
list
.
Add
(
_
(
"Not in Netlist:"
)
);
module
=
GetBoard
()
->
m_Modules
;
...
...
@@ -881,11 +877,11 @@ void PCB_EDIT_FRAME::Test_Duplicate_Missing_And_Extra_Footprints(
{
if
(
module
->
m_Reference
->
m_Text
.
CmpNoCase
(
tmp
[
ii
]
)
==
0
)
{
break
;
/
* Module is in net list. */
break
;
/
/ Module is in net list.
}
}
if
(
ii
==
NbModulesNetListe
)
/
* Module not found in netlist */
if
(
ii
==
NbModulesNetListe
)
/
/ Module not found in netlist
{
list
.
Add
(
module
->
m_Reference
->
m_Text
);
nberr
++
;
...
...
@@ -938,7 +934,7 @@ int NETLIST_READER::BuildComponentsListFromNetlist( const wxString& aNetlistFile
is_comment
=
false
;
}
if
(
*
text
==
'{'
)
/
* Comments. */
if
(
*
text
==
'{'
)
/
/ Comments.
{
is_comment
=
true
;
...
...
@@ -1035,7 +1031,7 @@ bool NETLIST_READER::readModuleComponentLinkfile( const wxString* aCmpIdent,
if
(
!
buffer
.
StartsWith
(
wxT
(
"BeginCmp"
)
)
)
continue
;
/
* Begin component description. */
/
/ Begin component description.
refcurrcmp
.
Empty
();
idmod
.
Empty
();
timestamp
.
Empty
();
...
...
@@ -1130,7 +1126,7 @@ bool NETLIST_READER::loadNewModules()
if
(
(
ii
==
0
)
||
(
ref
->
m_LibName
!=
cmp
->
m_LibName
)
)
{
/
* New footprint : must be loaded from a library */
/
/ New footprint : must be loaded from a library
Module
=
m_pcbframe
->
GetModuleLibrary
(
wxEmptyString
,
cmp
->
m_LibName
,
false
);
ref
=
cmp
;
...
...
@@ -1167,7 +1163,7 @@ bool NETLIST_READER::loadNewModules()
{
// Footprint already loaded from a library, duplicate it (faster)
if
(
Module
==
NULL
)
continue
;
/
* Module does not exist in library. */
continue
;
/
/ Module does not exist in library.
MODULE
*
newmodule
=
new
MODULE
(
pcb
);
newmodule
->
Copy
(
Module
);
...
...
pcbnew/xchgmod.cpp
View file @
b3a6ddb6
...
...
@@ -530,7 +530,7 @@ void PCB_EDIT_FRAME::Exchange_Module( MODULE* aOldModule,
for
(
;
old_pad
!=
NULL
;
old_pad
=
old_pad
->
Next
()
)
{
if
(
strnicmp
(
pad
->
m_Padname
,
old_pad
->
m_Padname
,
sizeof
(
pad
->
m_Padname
)
)
==
0
)
if
(
pad
->
PadNameEqual
(
old_pad
)
)
{
pad
->
SetNetname
(
old_pad
->
GetNetname
()
);
pad
->
SetNet
(
old_pad
->
GetNet
()
);
...
...
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