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
4c2a1dd5
Commit
4c2a1dd5
authored
Dec 10, 2011
by
Dick Hollenbeck
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
more kicad_plugin work, make BOARD::m_NetInfo private
parent
a67ff643
Changes
27
Hide whitespace changes
Inline
Side-by-side
Showing
27 changed files
with
554 additions
and
504 deletions
+554
-504
.bzrignore
.bzrignore
+2
-2
CHANGELOG.txt
CHANGELOG.txt
+8
-0
CMakeLists.txt
CMakeLists.txt
+6
-2
dlist.h
include/dlist.h
+1
-1
board.cpp
pcbnew/board.cpp
+2
-2
class_board.cpp
pcbnew/class_board.cpp
+24
-25
class_board.h
pcbnew/class_board.h
+85
-58
class_netclass.cpp
pcbnew/class_netclass.cpp
+1
-1
class_netinfo.h
pcbnew/class_netinfo.h
+67
-62
class_netinfo_item.cpp
pcbnew/class_netinfo_item.cpp
+2
-1
class_netinfolist.cpp
pcbnew/class_netinfolist.cpp
+27
-47
clean.cpp
pcbnew/clean.cpp
+1
-1
connect.cpp
pcbnew/connect.cpp
+7
-6
drc_clearance_test_functions.cpp
pcbnew/drc_clearance_test_functions.cpp
+2
-2
export_gencad.cpp
pcbnew/export_gencad.cpp
+5
-7
highlight.cpp
pcbnew/highlight.cpp
+4
-4
ioascii.cpp
pcbnew/ioascii.cpp
+3
-3
item_io.cpp
pcbnew/item_io.cpp
+2
-3
kicad_plugin.cpp
pcbnew/kicad_plugin.cpp
+232
-248
kicad_plugin.h
pcbnew/kicad_plugin.h
+50
-5
librairi.cpp
pcbnew/librairi.cpp
+1
-1
loadcmp.cpp
pcbnew/loadcmp.cpp
+2
-2
modedit.cpp
pcbnew/modedit.cpp
+1
-1
modules.cpp
pcbnew/modules.cpp
+1
-1
ratsnest.cpp
pcbnew/ratsnest.cpp
+12
-12
solve.cpp
pcbnew/solve.cpp
+3
-4
specctra_export.cpp
pcbnew/specctra_export.cpp
+3
-3
No files found.
.bzrignore
View file @
4c2a1dd5
...
...
@@ -17,8 +17,8 @@ install_manifest.txt
Documentation/doxygen
*.cmake
*.bak
pcbnew
/pcb_plot_params_keywords.cpp
pcbnew
/pcb_plot_params_lexer.h
common
/pcb_plot_params_keywords.cpp
common
/pcb_plot_params_lexer.h
pcbnew/specctra_keywords.cpp
pcbnew/specctra_lexer.h
new/html
...
...
CHANGELOG.txt
View file @
4c2a1dd5
...
...
@@ -4,6 +4,14 @@ KiCad ChangeLog 2011
Please add newer entries at the top, list the date and your name with
email address.
2011-Dec-9 UPDATE Dick Hollenbeck <dick@softplc.com>
================================================================================
++PCBNew
* added BOARD::GetPad(int), made BOARD::m_NetInfo private
* more kicad_plugin work.
2011-Dec-5 UPDATE Dick Hollenbeck <dick@softplc.com>
================================================================================
++PCBNew
...
...
CMakeLists.txt
View file @
4c2a1dd5
...
...
@@ -276,9 +276,13 @@ add_subdirectory(template)
#================================================
find_package
(
Doxygen
)
if
(
DOXYGEN_FOUND
)
add_custom_target
(
doxygen-docs
${
DOXYGEN_EXECUTABLE
}
add_custom_target
(
doxygen-docs
${
CMAKE_COMMAND
}
-E remove_directory Documentation/doxygen
COMMAND
${
DOXYGEN_EXECUTABLE
}
WORKING_DIRECTORY
${
CMAKE_CURRENT_SOURCE_DIR
}
DEPENDS Doxyfile
)
DEPENDS Doxyfile
COMMENT
"building doxygen docs into directory Documentation/doxygen/html"
)
else
(
DOXYGEN_FOUND
)
message
(
STATUS
"WARNING: Doxygen not found - doxygen-docs (Source Docs) target not created"
)
endif
()
...
...
include/dlist.h
View file @
4c2a1dd5
...
...
@@ -113,7 +113,7 @@ public:
* Function GetCount
* returns the number of elements in the list.
*/
unsigned
GetCount
()
{
return
count
;
}
unsigned
GetCount
()
const
{
return
count
;
}
#if defined(DEBUG)
void
VerifyListIntegrity
();
...
...
pcbnew/board.cpp
View file @
4c2a1dd5
...
...
@@ -203,9 +203,9 @@ void PlaceCells( BOARD* aPcb, int net_code, int flag )
via_marge
=
clearance
+
(
viaSize
/
2
);
// Place PADS on matrix routing:
for
(
unsigned
i
=
0
;
i
<
aPcb
->
GetPad
s
Count
();
++
i
)
for
(
unsigned
i
=
0
;
i
<
aPcb
->
GetPadCount
();
++
i
)
{
D_PAD
*
pad
=
aPcb
->
m_NetInfo
->
GetPad
(
i
);
D_PAD
*
pad
=
aPcb
->
GetPad
(
i
);
if
(
net_code
!=
pad
->
GetNet
()
||
(
flag
&
FORCE_PADS
)
)
{
...
...
pcbnew/class_board.cpp
View file @
4c2a1dd5
...
...
@@ -30,6 +30,7 @@ wxPoint BOARD_ITEM::ZeroOffset( 0, 0 );
BOARD
::
BOARD
()
:
BOARD_ITEM
(
(
BOARD_ITEM
*
)
NULL
,
PCB_T
),
m_NetInfo
(
this
),
m_NetClasses
(
this
)
{
// we have not loaded a board yet, assume latest until then.
...
...
@@ -42,8 +43,8 @@ BOARD::BOARD() :
m_CurrentZoneContour
=
NULL
;
// This ZONE_CONTAINER handle the
// zone contour currently in progress
m_NetInfo
=
new
NETINFO_LIST
(
this
);
// handle nets info list (name, design constraints ..
m_NetInfo
->
BuildListOfNets
();
// prepare pads and nets lists
containers.
BuildListOfNets
();
// prepare pad and netlist
containers.
for
(
int
layer
=
0
;
layer
<
NB_COPPER_LAYERS
;
++
layer
)
{
...
...
@@ -89,8 +90,6 @@ BOARD::~BOARD()
delete
m_CurrentZoneContour
;
m_CurrentZoneContour
=
NULL
;
delete
m_NetInfo
;
}
...
...
@@ -814,25 +813,25 @@ void BOARD::DeleteZONEOutlines()
}
int
BOARD
::
GetNumSegmTrack
()
int
BOARD
::
GetNumSegmTrack
()
const
{
return
m_Track
.
GetCount
();
}
int
BOARD
::
GetNumSegmZone
()
int
BOARD
::
GetNumSegmZone
()
const
{
return
m_Zone
.
GetCount
();
}
unsigned
BOARD
::
GetNoconnectCount
()
unsigned
BOARD
::
GetNoconnectCount
()
const
{
return
m_NbNoconnect
;
}
unsigned
BOARD
::
GetNodesCount
()
unsigned
BOARD
::
GetNodesCount
()
const
{
return
m_NbNodes
;
}
...
...
@@ -844,7 +843,7 @@ EDA_RECT BOARD::ComputeBoundingBox( bool aBoardEdgesOnly )
EDA_RECT
area
;
// Check segments, dimensions, texts, and fiducials
for
(
BOARD_ITEM
*
item
=
m_Drawings
;
item
!=
NULL
;
item
=
item
->
Next
()
)
for
(
BOARD_ITEM
*
item
=
m_Drawings
;
item
;
item
=
item
->
Next
()
)
{
if
(
aBoardEdgesOnly
&&
(
item
->
Type
()
!=
PCB_LINE_T
||
item
->
GetLayer
()
!=
EDGE_N
)
)
continue
;
...
...
@@ -931,7 +930,7 @@ void BOARD::DisplayInfo( EDA_DRAW_FRAME* frame )
trackSegmentsCount
++
;
}
txt
.
Printf
(
wxT
(
"%d"
),
GetPad
s
Count
()
);
txt
.
Printf
(
wxT
(
"%d"
),
GetPadCount
()
);
frame
->
AppendMsgPanel
(
_
(
"Pads"
),
txt
,
DARKGREEN
);
txt
.
Printf
(
wxT
(
"%d"
),
viasCount
);
...
...
@@ -943,7 +942,7 @@ void BOARD::DisplayInfo( EDA_DRAW_FRAME* frame )
txt
.
Printf
(
wxT
(
"%d"
),
GetNodesCount
()
);
frame
->
AppendMsgPanel
(
_
(
"Nodes"
),
txt
,
DARKCYAN
);
txt
.
Printf
(
wxT
(
"%d"
),
m_NetInfo
->
G
etCount
()
);
txt
.
Printf
(
wxT
(
"%d"
),
m_NetInfo
.
GetN
etCount
()
);
frame
->
AppendMsgPanel
(
_
(
"Nets"
),
txt
,
RED
);
/* These parameters are known only if the full ratsnest is available,
...
...
@@ -1229,10 +1228,10 @@ SEARCH_RESULT BOARD::Visit( INSPECTOR* inspector, const void* testData,
NETINFO_ITEM
*
BOARD
::
FindNet
(
int
aNetcode
)
const
{
// the first valid netcode is 1 and the last is m_NetInfo
->
GetCount()-1.
// the first valid netcode is 1 and the last is m_NetInfo
.
GetCount()-1.
// zero is reserved for "no connection" and is not used.
// NULL is returned for non valid netcodes
NETINFO_ITEM
*
net
=
m_NetInfo
->
GetNetItem
(
aNetcode
);
NETINFO_ITEM
*
net
=
m_NetInfo
.
GetNetItem
(
aNetcode
);
#if defined(DEBUG)
if
(
net
)
// item can be NULL if anetcode is not valid
...
...
@@ -1256,7 +1255,7 @@ NETINFO_ITEM* BOARD::FindNet( const wxString& aNetname ) const
if
(
aNetname
.
IsEmpty
()
)
return
NULL
;
int
ncount
=
m_NetInfo
->
G
etCount
();
int
ncount
=
m_NetInfo
.
GetN
etCount
();
// Search for a netname = aNetname
#if 0
...
...
@@ -1264,7 +1263,7 @@ NETINFO_ITEM* BOARD::FindNet( const wxString& aNetname ) const
// Use a sequential search: easy to understand, but slow
for( int ii = 1; ii < ncount; ii++ )
{
NETINFO_ITEM* item = m_NetInfo
->
GetNetItem( ii );
NETINFO_ITEM* item = m_NetInfo
.
GetNetItem( ii );
if( item && item->GetNetname() == aNetname )
{
...
...
@@ -1289,7 +1288,7 @@ NETINFO_ITEM* BOARD::FindNet( const wxString& aNetname ) const
if
(
(
ii
&
1
)
&&
(
ii
>
1
)
)
ncount
++
;
NETINFO_ITEM
*
item
=
m_NetInfo
->
GetNetItem
(
index
);
NETINFO_ITEM
*
item
=
m_NetInfo
.
GetNetItem
(
index
);
if
(
item
==
NULL
)
return
NULL
;
...
...
@@ -1370,18 +1369,18 @@ static bool s_SortByNodes( const NETINFO_ITEM* a, const NETINFO_ITEM* b )
int
BOARD
::
ReturnSortedNetnamesList
(
wxArrayString
&
aNames
,
bool
aSortbyPadsCount
)
{
if
(
m_NetInfo
->
G
etCount
()
==
0
)
if
(
m_NetInfo
.
GetN
etCount
()
==
0
)
return
0
;
// Build the list
std
::
vector
<
NETINFO_ITEM
*>
netBuffer
;
netBuffer
.
reserve
(
m_NetInfo
->
G
etCount
()
);
netBuffer
.
reserve
(
m_NetInfo
.
GetN
etCount
()
);
for
(
unsigned
ii
=
1
;
ii
<
m_NetInfo
->
G
etCount
();
ii
++
)
for
(
unsigned
ii
=
1
;
ii
<
m_NetInfo
.
GetN
etCount
();
ii
++
)
{
if
(
m_NetInfo
->
GetNetItem
(
ii
)
->
GetNet
()
>
0
)
netBuffer
.
push_back
(
m_NetInfo
->
GetNetItem
(
ii
)
);
if
(
m_NetInfo
.
GetNetItem
(
ii
)
->
GetNet
()
>
0
)
netBuffer
.
push_back
(
m_NetInfo
.
GetNetItem
(
ii
)
);
}
// sort the list
...
...
@@ -1561,9 +1560,9 @@ D_PAD* BOARD::GetPad( TRACK* aTrace, int aEndPoint )
D_PAD
*
BOARD
::
GetPadFast
(
const
wxPoint
&
aPosition
,
int
aLayerMask
)
{
for
(
unsigned
i
=
0
;
i
<
GetPad
s
Count
();
++
i
)
for
(
unsigned
i
=
0
;
i
<
GetPadCount
();
++
i
)
{
D_PAD
*
pad
=
m_NetInfo
->
GetPad
(
i
);
D_PAD
*
pad
=
m_NetInfo
.
GetPad
(
i
);
if
(
pad
->
m_Pos
!=
aPosition
)
continue
;
...
...
@@ -1675,8 +1674,8 @@ static bool sortPadsByXthenYCoord( D_PAD* const & ref, D_PAD* const & comp )
void
BOARD
::
GetSortedPadListByXthenYCoord
(
std
::
vector
<
D_PAD
*>&
aVector
)
{
aVector
.
insert
(
aVector
.
end
(),
m_NetInfo
->
m_PadsFullList
.
begin
(),
m_NetInfo
->
m_PadsFullList
.
end
()
);
aVector
.
insert
(
aVector
.
end
(),
m_NetInfo
.
m_PadsFullList
.
begin
(),
m_NetInfo
.
m_PadsFullList
.
end
()
);
sort
(
aVector
.
begin
(),
aVector
.
end
(),
sortPadsByXthenYCoord
);
}
...
...
pcbnew/class_board.h
View file @
4c2a1dd5
...
...
@@ -38,7 +38,8 @@ typedef std::vector< TRACK* > TRACK_PTRS;
* Enum LAYER_T
* gives the allowed types of layers, same as Specctra DSN spec.
*/
enum
LAYER_T
{
enum
LAYER_T
{
LT_SIGNAL
,
LT_POWER
,
LT_MIXED
,
...
...
@@ -169,6 +170,23 @@ private:
EDA_RECT
m_BoundingBox
;
NETINFO_LIST
m_NetInfo
;
///< net info list (name, design constraints ..
BOARD_DESIGN_SETTINGS
m_designSettings
;
COLORS_DESIGN_SETTINGS
*
m_colorsSettings
;
// Link to current colors settings
/**
* Function chainMarkedSegments
* is used by MarkTrace() to set the BUSY flag of connected segments of the trace
* segment located at \a aPosition on aLayerMask.
* Vias are put in list but their flags BUSY is not set
* @param aPosition A wxPoint object containing the position of the starting search.
* @param aLayerMask The allowed layers for segments to search.
* @param aList The track list to fill with points of flagged segments.
*/
void
chainMarkedSegments
(
wxPoint
aPosition
,
int
aLayerMask
,
TRACK_PTRS
*
aList
);
public
:
/// Flags used in ratsnest calculation and update.
...
...
@@ -185,9 +203,6 @@ public:
DLIST
<
TRACK
>
m_Track
;
// linked list of TRACKs and SEGVIAs
DLIST
<
SEGZONE
>
m_Zone
;
// linked list of SEGZONEs
/// nets info list (name, design constraints ..
NETINFO_LIST
*
m_NetInfo
;
/// Ratsnest list for the BOARD
std
::
vector
<
RATSNEST_ITEM
>
m_FullRatsnest
;
...
...
@@ -223,22 +238,7 @@ public:
// Index for m_TrackWidthList to select the value.
unsigned
m_TrackWidthSelector
;
private
:
BOARD_DESIGN_SETTINGS
m_designSettings
;
COLORS_DESIGN_SETTINGS
*
m_colorsSettings
;
// Link to current colors settings
/**
* Function chainMarkedSegments
* is used by MarkTrace() to set the BUSY flag of connected segments of the trace
* segment located at \a aPosition on aLayerMask.
* Vias are put in list but their flags BUSY is not set
* @param aPosition A wxPoint object containing the position of the starting search.
* @param aLayerMask The allowed layers for segments to search.
* @param aList The track list to fill with points of flagged segments.
*/
void
chainMarkedSegments
(
wxPoint
aPosition
,
int
aLayerMask
,
TRACK_PTRS
*
aList
);
public
:
BOARD
();
~
BOARD
();
...
...
@@ -310,7 +310,6 @@ public:
*/
void
DeleteZONEOutlines
();
/**
* Function GetMARKER
* returns the MARKER at a given index.
...
...
@@ -325,7 +324,6 @@ public:
return
NULL
;
}
/**
* Function GetMARKERCount
* @return int - The number of MARKER_PCBS.
...
...
@@ -335,7 +333,6 @@ public:
return
(
int
)
m_markers
.
size
();
}
/**
* Function ResetHighLight
* Reset all high light data to the init state
...
...
@@ -361,7 +358,6 @@ public:
m_hightLight
.
m_netCode
=
aNetCode
;
}
/**
* Function IsHighLightNetON
* @return true if a net is currently highlighted
...
...
@@ -610,19 +606,19 @@ public:
*/
int
GetLayerColor
(
int
aLayer
);
/* Functions to get some items count */
int
GetNumSegmTrack
();
/*
*
Functions to get some items count */
int
GetNumSegmTrack
()
const
;
/* Calculate the zone segment count */
int
GetNumSegmZone
();
/*
*
Calculate the zone segment count */
int
GetNumSegmZone
()
const
;
unsigned
GetNoconnectCount
()
;
// Return the number of missing links.
unsigned
GetNoconnectCount
()
const
;
// Return the number of missing links.
/**
* Function GetNumRatsnests
* @return int - The number of rats
*/
unsigned
GetRatsnestsCount
()
unsigned
GetRatsnestsCount
()
const
{
return
m_FullRatsnest
.
size
();
}
...
...
@@ -632,15 +628,71 @@ public:
* Function GetNodesCount
* @return the number of pads members of nets (i.e. with netcode > 0)
*/
unsigned
GetNodesCount
();
unsigned
GetNodesCount
()
const
;
/**
* Function GetPad
s
Count
* Function GetPadCount
* @return the number of pads in board
*/
unsigned
GetPadsCount
()
unsigned
GetPadCount
()
const
{
return
m_NetInfo
.
GetPadCount
();
}
/**
* Function GetPad
* @return D_PAD* - at the \a aIndex from m_NetInfo
*/
D_PAD
*
GetPad
(
unsigned
aIndex
)
const
{
return
m_NetInfo
.
GetPad
(
aIndex
);
}
/**
* Function GetPads
* returns a list of all the pads by value. The returned list is not
* sorted and contains pointers to PADS, but those pointers do not convey
* ownership of the respective PADs.
* @return std::vector<D_PAD*> - a full list of pads
*/
std
::
vector
<
D_PAD
*>
GetPads
()
{
return
m_NetInfo
.
m_PadsFullList
;
}
void
BuildListOfNets
()
{
m_NetInfo
.
buildListOfNets
();
}
/**
* Function FindNet
* searches for a net with the given netcode.
* @param aNetcode A netcode to search for.
* @return NETINFO_ITEM_ITEM* - the net or NULL if not found.
*/
NETINFO_ITEM
*
FindNet
(
int
aNetcode
)
const
;
/**
* Function FindNet overloaded
* searches for a net with the given name.
* @param aNetname A Netname to search for.
* @return NETINFO_ITEM* - the net or NULL if not found.
*/
NETINFO_ITEM
*
FindNet
(
const
wxString
&
aNetname
)
const
;
void
AppendNet
(
NETINFO_ITEM
*
aNewNet
)
{
m_NetInfo
.
AppendNet
(
aNewNet
);
}
/**
* Function GetNetCount
* @return the number of nets (NETINFO_ITEM)
*/
unsigned
GetNetCount
()
const
{
return
m_NetInfo
->
GetPads
Count
();
return
m_NetInfo
.
GetNet
Count
();
}
/**
...
...
@@ -709,23 +761,6 @@ public:
SEARCH_RESULT
Visit
(
INSPECTOR
*
inspector
,
const
void
*
testData
,
const
KICAD_T
scanTypes
[]
);
/**
* Function FindNet
* searches for a net with the given netcode.
* @param aNetcode A netcode to search for.
* @return NETINFO_ITEM_ITEM* - the net or NULL if not found.
*/
NETINFO_ITEM
*
FindNet
(
int
aNetcode
)
const
;
/**
* Function FindNet overloaded
* searches for a net with the given name.
* @param aNetname A Netname to search for.
* @return NETINFO_ITEM* - the net or NULL if not found.
*/
NETINFO_ITEM
*
FindNet
(
const
wxString
&
aNetname
)
const
;
/**
* Function FindModuleByReference
* searches for a MODULE within this board with the given
...
...
@@ -787,7 +822,6 @@ public:
return
m_TrackWidthList
[
m_TrackWidthSelector
];
}
/**
* Function GetCurrentViaSize
* @return the current via size, according to the selected options
...
...
@@ -799,7 +833,6 @@ public:
return
m_ViasDimensionsList
[
m_ViaSizeSelector
].
m_Diameter
;
}
/**
* Function GetCurrentViaDrill
* @return the current via size, according to the selected options
...
...
@@ -837,7 +870,6 @@ public:
*/
bool
Save
(
FILE
*
aFile
)
const
;
/**
* Function GetClass
* returns the class name.
...
...
@@ -848,7 +880,6 @@ public:
return
wxT
(
"BOARD"
);
}
#if defined(DEBUG)
/**
...
...
@@ -922,7 +953,6 @@ public:
return
NULL
;
}
/**
* Function GetAreaIndex
* returns the Area Index for the given Zone Container.
...
...
@@ -940,7 +970,6 @@ public:
return
-
1
;
}
/**
* Function GetAreaCount
* @return int - The number of Areas or ZONE_CONTAINER.
...
...
@@ -950,7 +979,6 @@ public:
return
(
int
)
m_ZoneDescriptorList
.
size
();
}
/* Functions used in test, merge and cut outlines */
/**
...
...
@@ -1196,7 +1224,6 @@ public:
*/
void
GetSortedPadListByXthenYCoord
(
std
::
vector
<
D_PAD
*>&
aVector
);
/**
* Function GetTrace
* find the segment of \a aTrace at \a aPosition on \a aLayer if \a Layer is visible.
...
...
pcbnew/class_netclass.cpp
View file @
4c2a1dd5
...
...
@@ -195,7 +195,7 @@ void BOARD::SynchronizeNetsAndNetClasses()
// set all NETs to the default NETCLASS, then later override some
// as we go through the NETCLASSes.
int
count
=
m_NetInfo
->
G
etCount
();
int
count
=
m_NetInfo
.
GetN
etCount
();
for
(
int
i
=
0
;
i
<
count
;
++
i
)
{
NETINFO_ITEM
*
net
=
FindNet
(
i
);
...
...
pcbnew/class_netinfo.h
View file @
4c2a1dd5
...
...
@@ -26,7 +26,6 @@ class BOARD;
class
BOARD_ITEM
;
/* Class RATSNEST_ITEM: describes a ratsnest line: a straight line connecting 2 pads */
/*****************************/
/* flags for a RATSNEST_ITEM */
...
...
@@ -37,6 +36,11 @@ class BOARD_ITEM;
#define CH_ACTIF 8
/* Not routed. */
#define LOCAL_RATSNEST_ITEM 0x8000
/* Line between two pads of a single module. */
/**
* Class RATSNEST_ITEM
* describes a ratsnest line: a straight line connecting 2 pads
*/
class
RATSNEST_ITEM
{
private
:
...
...
@@ -59,7 +63,6 @@ public:
return
m_NetCode
;
}
void
SetNet
(
int
aNetCode
)
{
m_NetCode
=
aNetCode
;
...
...
@@ -87,37 +90,38 @@ public:
};
/***************************************************************/
/******************* class NETINFO *****************************/
/***************************************************************/
/**
* Class NETINFO
* is a container class for NETINFO_ITEM elements, which are the nets. That makes
* this class a container for the nets.
*/
class
NETINFO_LIST
{
private
:
BOARD
*
m_Parent
;
std
::
vector
<
NETINFO_ITEM
*>
m_NetBuffer
;
// nets buffer list (name, design constraints ..
friend
class
BOARD
;
public
:
std
::
vector
<
D_PAD
*>
m_PadsFullList
;
// Entry for a sorted pad list (used in ratsnest
// calculations)
public
:
NETINFO_LIST
(
BOARD
*
aParent
);
NETINFO_LIST
(
BOARD
*
aParent
);
~
NETINFO_LIST
();
/**
* Function GetItem
* @param aNetcode = netcode to identify a given NETINFO_ITEM
* @return a NETINFO_ITEM pointer to the selected NETINFO_ITEM by its
* netcode, or NULL if not found
* @return NETINFO_ITEM* - by \a aNetcode, or NULL if not found
*/
NETINFO_ITEM
*
GetNetItem
(
int
aNetcode
);
NETINFO_ITEM
*
GetNetItem
(
int
aNetcode
)
const
{
if
(
unsigned
(
aNetcode
)
>=
GetNetCount
()
)
// catches < 0 too
return
NULL
;
return
m_NetBuffer
[
aNetcode
];
}
/**
* Function GetCount
* Function Get
Net
Count
* @return the number of nets ( always >= 1 )
* becuse the first net is the "not connected" net and always exists
* bec
a
use the first net is the "not connected" net and always exists
*/
unsigned
Get
Count
()
{
return
m_NetBuffer
.
size
();
}
unsigned
Get
NetCount
()
const
{
return
m_NetBuffer
.
size
();
}
/**
* Function Append
...
...
@@ -126,33 +130,28 @@ public: NETINFO_LIST( BOARD* aParent );
void
AppendNet
(
NETINFO_ITEM
*
aNewElement
);
/**
* Function DeleteData
* delete the list of nets (and free memory)
*/
void
DeleteData
();
/**
* Function BuildListOfNets
* Build or rebuild the list of NETINFO_ITEM m_NetBuffer
* The list is sorted by names.
* Function GetPadCount
* @return the number of pads in board
*/
void
BuildListOfNets
();
unsigned
GetPadCount
()
const
{
return
m_PadsFullList
.
size
();
}
/**
* Function GetPadsCount
* @return the number of pads in board
*/
unsigned
GetPadsCount
()
* Function GetPads
* returns a list of all the pads. The returned list is not
* sorted and contains pointers to PADS, but those pointers do not convey
* ownership of the respective PADs.
* @return std::vector<D_PAD*>& - a full list of pads
std::vector<D_PAD*>& GetPads()
{
return
m_PadsFullList
.
size
()
;
return m_PadsFullList;
}
*/
/**
* Function GetPad
* @return the pad idx from m_PadsFullList
*/
D_PAD
*
GetPad
(
unsigned
aIdx
)
D_PAD
*
GetPad
(
unsigned
aIdx
)
const
{
if
(
aIdx
<
m_PadsFullList
.
size
()
)
return
m_PadsFullList
[
aIdx
];
...
...
@@ -160,19 +159,36 @@ public: NETINFO_LIST( BOARD* aParent );
return
NULL
;
}
private
:
/**
* Function Build_Pads_Full_List
* Create the pad list
* initialise:
* Function DeleteData
* deletes the list of nets (and free memory)
*/
void
clear
();
/**
* Function BuildListOfNets
* builds or rebuilds the list of NETINFO_ITEMs
* The list is sorted by names.
*/
void
buildListOfNets
();
/**
* Function buildPadsFullList
* creates the pad list, and initializes:
* m_Pads (list of pads)
* set m_Status_Pcb = LISTE_PAD_OK;
* and clear for all pads in list the m_SubRatsnest member;
* clear m_Pcb->m_FullRatsnest
*/
void
Build_Pads_Full_List
();
void
buildPadsFullList
();
BOARD
*
m_Parent
;
std
::
vector
<
NETINFO_ITEM
*>
m_NetBuffer
;
///< net list (name, design constraints ..)
std
::
vector
<
D_PAD
*>
m_PadsFullList
;
///< contains all pads, sorted by pad's netname.
///< can be used in ratsnest calculations.
};
...
...
@@ -183,11 +199,11 @@ private:
class
NETINFO_ITEM
{
private
:
int
m_NetCode
;
//
this is a number equivalent to the net name
//
Used for fast comparisons in ratsnest and DRC computations.
int
m_NetCode
;
//
/< A number equivalent to the net name.
///<
Used for fast comparisons in ratsnest and DRC computations.
wxString
m_Netname
;
// Full net name like /mysheet/mysubsheet/vout
// used by Eeschema
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
...
...
@@ -233,13 +249,11 @@ public:
m_NetClassName
=
NETCLASS
::
Default
;
}
NETCLASS
*
GetNetClass
()
{
return
m_NetClass
;
}
/**
* Function GetClassName
* returns the class name
...
...
@@ -249,7 +263,6 @@ public:
return
m_NetClassName
;
}
#if 1
/**
...
...
@@ -272,7 +285,6 @@ public:
return
m_NetClass
->
GetViaDiameter
();
}
/**
* Function GetMicroViaSize
* returns the size of vias used to route this net
...
...
@@ -283,7 +295,6 @@ public:
return
m_NetClass
->
GetuViaDiameter
();
}
/**
* Function GetViaDrillSize
* returns the size of via drills used to route this net
...
...
@@ -294,7 +305,6 @@ public:
return
m_NetClass
->
GetViaDrill
();
}
/**
* Function GetViaDrillSize
* returns the size of via drills used to route this net
...
...
@@ -318,7 +328,6 @@ public:
return m_NetClass->GetViaMinSize();
}
#endif
/**
...
...
@@ -331,7 +340,6 @@ public:
return
m_NetClass
->
GetClearance
();
}
#endif
/* Reading and writing data on files */
...
...
@@ -346,7 +354,6 @@ public:
*/
bool
Save
(
FILE
*
aFile
)
const
;
/**
* Function Draw
* @todo we actually could show a NET, simply show all the tracks and
...
...
@@ -354,7 +361,6 @@ public:
*/
void
Draw
(
EDA_DRAW_PANEL
*
panel
,
wxDC
*
DC
,
int
aDrawMode
,
const
wxPoint
&
offset
);
/**
* Function GetNet
* @return int - the netcode
...
...
@@ -383,14 +389,13 @@ public:
*/
void
SetNetname
(
const
wxString
&
aNetname
);
/**
* Function DisplayInfo
* has knowledge about the frame and how and where to put status information
* about this object into the frame's message panel.
* Is virtual from EDA_ITEM.
* @param frame A EDA_DRAW_FRAME in which to print status information.
*/
/**
* Function DisplayInfo
* has knowledge about the frame and how and where to put status information
* about this object into the frame's message panel.
* Is virtual from EDA_ITEM.
* @param frame A EDA_DRAW_FRAME in which to print status information.
*/
void
DisplayInfo
(
EDA_DRAW_FRAME
*
frame
);
};
...
...
pcbnew/class_netinfo_item.cpp
View file @
4c2a1dd5
...
...
@@ -140,7 +140,6 @@ void NETINFO_ITEM::DisplayInfo( EDA_DRAW_FRAME* frame )
// Displays the net lenght of internal ICs connections (wires inside ICs):
txt
=
frame
->
CoordinateToString
(
lengthdie
);
frame
->
AppendMsgPanel
(
_
(
"On Die"
),
txt
,
RED
);
}
...
...
@@ -170,7 +169,9 @@ void RATSNEST_ITEM::Draw( EDA_DRAW_PANEL* panel,
const
wxPoint
&
aOffset
)
{
GRSetDrawMode
(
DC
,
aDrawMode
);
int
color
=
g_ColorsSettings
.
GetItemColor
(
RATSNEST_VISIBLE
);
GRLine
(
&
panel
->
m_ClipBox
,
DC
,
m_PadStart
->
m_Pos
-
aOffset
,
m_PadEnd
->
m_Pos
-
aOffset
,
0
,
color
);
}
pcbnew/class_netinfolist.cpp
View file @
4c2a1dd5
...
...
@@ -23,31 +23,13 @@ NETINFO_LIST::NETINFO_LIST( BOARD* aParent )
NETINFO_LIST
::~
NETINFO_LIST
()
{
DeleteData
();
clear
();
}
/**
* Function GetItem
* @param aNetcode = netcode to identify a given NETINFO_ITEM
* @return a NETINFO_ITEM pointer to the selected NETINFO_ITEM by its netcode, or NULL if not found
*/
NETINFO_ITEM
*
NETINFO_LIST
::
GetNetItem
(
int
aNetcode
)
void
NETINFO_LIST
::
clear
()
{
if
(
aNetcode
<
0
||
(
aNetcode
>
(
int
)
(
GetCount
()
-
1
)
)
)
return
NULL
;
return
m_NetBuffer
[
aNetcode
];
}
/**
* Function DeleteData
* delete the list of nets (and free memory)
*/
void
NETINFO_LIST
::
DeleteData
()
{
for
(
unsigned
ii
=
0
;
ii
<
GetCount
();
ii
++
)
for
(
unsigned
ii
=
0
;
ii
<
GetNetCount
();
ii
++
)
delete
m_NetBuffer
[
ii
];
m_NetBuffer
.
clear
();
...
...
@@ -72,7 +54,7 @@ void NETINFO_LIST::AppendNet( NETINFO_ITEM* aNewElement )
* and expects to have a nets list sorted by an alphabetic case sensitive sort
*/
static
bool
P
adlistSortByNetnames
(
const
D_PAD
*
a
,
const
D_PAD
*
b
)
static
bool
p
adlistSortByNetnames
(
const
D_PAD
*
a
,
const
D_PAD
*
b
)
{
return
(
a
->
GetNetname
().
Cmp
(
b
->
GetNetname
()
)
)
<
0
;
}
...
...
@@ -90,23 +72,23 @@ static bool PadlistSortByNetnames( const D_PAD* a, const D_PAD* b )
* and expects to have a nets list sorted by an alphabetic case sensitive sort
* So do not change Build_Pads_Full_List() taht build a sorted list of pads
*/
void
NETINFO_LIST
::
B
uildListOfNets
()
void
NETINFO_LIST
::
b
uildListOfNets
()
{
D_PAD
*
pad
;
int
nodes_count
=
0
;
NETINFO_ITEM
*
net_item
;
D_PAD
*
pad
;
int
nodes_count
=
0
;
NETINFO_ITEM
*
net_item
;
DeleteData
();
// Remove all nets info and free memory
clear
();
// Remove all nets info and free memory
// Create and add the "unconnected net", always existing,
// used to handle pads and tracks that are not member of a "real" net
net_item
=
new
NETINFO_ITEM
(
(
BOARD_ITEM
*
)
m_Parent
);
AppendNet
(
net_item
);
/
* Build the PAD list, sorted by net */
Build_Pads_Full_
List
();
/
/ Build the PAD list, sorted by net
buildPadsFull
List
();
/
* Build netnames list, and create a netcode for each netname */
/
/ Build netnames list, and create a netcode for each netname
D_PAD
*
last_pad
=
NULL
;
int
netcode
=
0
;
...
...
@@ -158,21 +140,20 @@ void NETINFO_LIST::BuildListOfNets()
}
/**
* Function Build_Pads_Full_List
* Create the pad list, sorted by net names (sorted by an alphabetic case sensitive sort)
* initialise:
* m_Pads (list of pads)
* set m_Status_Pcb = LISTE_PAD_OK;
* also clear m_Pcb->m_FullRatsnest that could have bad data
* (m_Pcb->m_FullRatsnest uses pointer to pads)
* Be aware NETINFO_ITEM* BOARD::FindNet( const wxString& aNetname )
* when search a net by its net name does a binary search
* and expects to have a nets list sorted by an alphabetic case sensitive sort
* So do not change the sort function used here
*/
void
NETINFO_LIST
::
Build_Pads_Full_List
()
void
NETINFO_LIST
::
buildPadsFullList
()
{
/*
* initialize:
* m_Pads (list of pads)
* set m_Status_Pcb = LISTE_PAD_OK;
* also clear m_Pcb->m_FullRatsnest that could have bad data
* (m_Pcb->m_FullRatsnest uses pointer to pads)
* Be aware NETINFO_ITEM* BOARD::FindNet( const wxString& aNetname )
* when search a net by its net name does a binary search
* and expects to have a nets list sorted by an alphabetic case sensitive sort
* So do not change the sort function used here
*/
if
(
m_Parent
->
m_Status_Pcb
&
LISTE_PAD_OK
)
return
;
...
...
@@ -180,7 +161,7 @@ void NETINFO_LIST::Build_Pads_Full_List()
m_PadsFullList
.
clear
();
m_Parent
->
m_FullRatsnest
.
clear
();
/
* Clear variables used in rastnest computation */
/
/ Clear variables used in ratsnest computation
for
(
MODULE
*
module
=
m_Parent
->
m_Modules
;
module
;
module
=
module
->
Next
()
)
{
for
(
D_PAD
*
pad
=
module
->
m_Pads
;
pad
;
pad
=
pad
->
Next
()
)
...
...
@@ -193,8 +174,7 @@ void NETINFO_LIST::Build_Pads_Full_List()
}
// Sort pad list per net
//
sort
(
m_PadsFullList
.
begin
(),
m_PadsFullList
.
end
(),
PadlistSortByNetnames
);
sort
(
m_PadsFullList
.
begin
(),
m_PadsFullList
.
end
(),
padlistSortByNetnames
);
m_Parent
->
m_Status_Pcb
=
LISTE_PAD_OK
;
}
pcbnew/clean.cpp
View file @
4c2a1dd5
...
...
@@ -69,7 +69,7 @@ void CleanupTracks( PCB_EDIT_FRAME* aFrame,
/* Rebuild the pad infos (pad list and netcodes) to ensure an up to date info */
aFrame
->
GetBoard
()
->
m_Status_Pcb
=
0
;
aFrame
->
GetBoard
()
->
m_NetInfo
->
BuildListOfNets
();
aFrame
->
GetBoard
()
->
BuildListOfNets
();
if
(
aCleanVias
)
// delete redundant vias
{
...
...
pcbnew/connect.cpp
View file @
4c2a1dd5
...
...
@@ -677,9 +677,9 @@ void CONNECTIONS::Propagate_SubNets()
void
PCB_BASE_FRAME
::
TestConnections
()
{
// Clear the cluster identifier for all pads
for
(
unsigned
i
=
0
;
i
<
m_Pcb
->
GetPad
s
Count
();
++
i
)
for
(
unsigned
i
=
0
;
i
<
m_Pcb
->
GetPadCount
();
++
i
)
{
D_PAD
*
pad
=
m_Pcb
->
m_NetInfo
->
GetPad
(
i
);
D_PAD
*
pad
=
m_Pcb
->
GetPad
(
i
);
pad
->
SetZoneSubNet
(
0
);
pad
->
SetSubNet
(
0
);
...
...
@@ -720,9 +720,9 @@ void PCB_BASE_FRAME::TestNetConnection( wxDC* aDC, int aNetCode )
Compile_Ratsnest
(
aDC
,
true
);
// Clear the cluster identifier (subnet) of pads for this net
for
(
unsigned
i
=
0
;
i
<
m_Pcb
->
GetPad
s
Count
();
++
i
)
for
(
unsigned
i
=
0
;
i
<
m_Pcb
->
GetPadCount
();
++
i
)
{
D_PAD
*
pad
=
m_Pcb
->
m_NetInfo
->
GetPad
(
i
);
D_PAD
*
pad
=
m_Pcb
->
GetPad
(
i
);
int
pad_net_code
=
pad
->
GetNet
();
if
(
pad_net_code
<
aNetCode
)
...
...
@@ -786,7 +786,8 @@ void PCB_BASE_FRAME::RecalculateAllTracksNetcode()
TRACK
*
curr_track
;
// Build the net info list
GetBoard
()
->
m_NetInfo
->
BuildListOfNets
();
GetBoard
()
->
BuildListOfNets
();
// Reset variables and flags used in computation
curr_track
=
m_Pcb
->
m_Track
;
for
(
;
curr_track
!=
NULL
;
curr_track
=
curr_track
->
Next
()
)
...
...
@@ -801,7 +802,7 @@ void PCB_BASE_FRAME::RecalculateAllTracksNetcode()
}
// If no pad, reset pointers and netcode, and do nothing else
if
(
m_Pcb
->
GetPad
s
Count
()
==
0
)
if
(
m_Pcb
->
GetPadCount
()
==
0
)
return
;
CONNECTIONS
connections
(
m_Pcb
);
...
...
pcbnew/drc_clearance_test_functions.cpp
View file @
4c2a1dd5
...
...
@@ -276,9 +276,9 @@ bool DRC::doTrackDrc( TRACK* aRefSeg, TRACK* aStart, bool testPads )
// Compute the min distance to pads
if
(
testPads
)
{
for
(
unsigned
ii
=
0
;
ii
<
m_pcb
->
GetPad
s
Count
();
++
ii
)
for
(
unsigned
ii
=
0
;
ii
<
m_pcb
->
GetPadCount
();
++
ii
)
{
D_PAD
*
pad
=
m_pcb
->
m_NetInfo
->
GetPad
(
ii
);
D_PAD
*
pad
=
m_pcb
->
GetPad
(
ii
);
/* No problem if pads are on an other layer,
* But if a drill hole exists (a pad on a single layer can have a hole!)
...
...
pcbnew/export_gencad.cpp
View file @
4c2a1dd5
...
...
@@ -262,12 +262,10 @@ static void CreatePadsShapesSection( FILE* aFile, BOARD* aPcb )
fputs
(
"$PADS
\n
"
,
aFile
);
// Enumerate and sort the pads
if
(
aPcb
->
GetPad
s
Count
()
>
0
)
if
(
aPcb
->
GetPadCount
()
>
0
)
{
pads
.
insert
(
pads
.
end
(),
aPcb
->
m_NetInfo
->
m_PadsFullList
.
begin
(),
aPcb
->
m_NetInfo
->
m_PadsFullList
.
end
()
);
qsort
(
&
pads
[
0
],
aPcb
->
GetPadsCount
(),
sizeof
(
D_PAD
*
),
pads
=
aPcb
->
GetPads
();
qsort
(
&
pads
[
0
],
aPcb
->
GetPadCount
(),
sizeof
(
D_PAD
*
),
PadListSortByShape
);
}
...
...
@@ -643,9 +641,9 @@ static void CreateSignalsSection( FILE* aFile, BOARD* aPcb )
fputs
(
"$SIGNALS
\n
"
,
aFile
);
for
(
unsigned
ii
=
0
;
ii
<
aPcb
->
m_NetInfo
->
G
etCount
();
ii
++
)
for
(
unsigned
ii
=
0
;
ii
<
aPcb
->
GetN
etCount
();
ii
++
)
{
net
=
aPcb
->
m_NetInfo
->
GetNetItem
(
ii
);
net
=
aPcb
->
FindNet
(
ii
);
if
(
net
->
GetNetname
()
==
wxEmptyString
)
// dummy netlist (no connection)
{
...
...
pcbnew/highlight.cpp
View file @
4c2a1dd5
...
...
@@ -63,9 +63,9 @@ void PCB_EDIT_FRAME::ListNetsAndSelect( wxCommandEvent& event )
return
;
wxString
Line
;
for
(
unsigned
ii
=
0
;
ii
<
GetBoard
()
->
m_NetInfo
->
G
etCount
();
ii
++
)
for
(
unsigned
ii
=
0
;
ii
<
GetBoard
()
->
GetN
etCount
();
ii
++
)
{
net
=
GetBoard
()
->
m_NetInfo
->
GetNetItem
(
ii
);
net
=
GetBoard
()
->
m_NetInfo
.
GetNetItem
(
ii
);
if
(
!
WildCompareString
(
netFilter
,
net
->
GetNetname
(),
false
)
)
continue
;
...
...
@@ -84,9 +84,9 @@ void PCB_EDIT_FRAME::ListNetsAndSelect( wxCommandEvent& event )
unsigned
netcode
=
(
unsigned
)
choiceDlg
.
GetSelection
();
// Search for the net selected.
for
(
unsigned
ii
=
0
;
ii
<
GetBoard
()
->
m_NetInfo
->
G
etCount
();
ii
++
)
for
(
unsigned
ii
=
0
;
ii
<
GetBoard
()
->
GetN
etCount
();
ii
++
)
{
net
=
GetBoard
()
->
m_NetInfo
->
GetNetItem
(
ii
);
net
=
GetBoard
()
->
FindNet
(
ii
);
if
(
!
WildCompareString
(
netFilter
,
net
->
GetNetname
(),
false
)
)
continue
;
...
...
pcbnew/ioascii.cpp
View file @
4c2a1dd5
...
...
@@ -824,7 +824,7 @@ bool PCB_EDIT_FRAME::WriteGeneralDescrPcb( FILE* File )
fprintf
(
File
,
"Nzone %d
\n
"
,
GetBoard
()
->
GetNumSegmZone
()
);
fprintf
(
File
,
"BoardThickness %d
\n
"
,
GetBoard
()
->
GetDesignSettings
().
m_BoardThickness
);
fprintf
(
File
,
"Nmodule %d
\n
"
,
NbModules
);
fprintf
(
File
,
"Nnets %d
\n
"
,
GetBoard
()
->
m_NetInfo
->
G
etCount
()
);
fprintf
(
File
,
"Nnets %d
\n
"
,
GetBoard
()
->
GetN
etCount
()
);
fprintf
(
File
,
"$EndGENERAL
\n\n
"
);
return
true
;
}
...
...
@@ -1010,7 +1010,7 @@ int PCB_EDIT_FRAME::ReadPcbFile( LINE_READER* aReader, bool Append )
if
(
TESTLINE
(
"EQUIPOT"
)
)
{
NETINFO_ITEM
*
net
=
new
NETINFO_ITEM
(
board
);
board
->
m_NetInfo
->
AppendNet
(
net
);
board
->
m_NetInfo
.
AppendNet
(
net
);
net
->
ReadDescr
(
aReader
);
continue
;
}
...
...
@@ -1133,7 +1133,7 @@ int PCB_EDIT_FRAME::ReadPcbFile( LINE_READER* aReader, bool Append )
GetBoard
()
->
m_Status_Pcb
=
0
;
// Build the net info list
GetBoard
()
->
m_NetInfo
->
BuildListOfNets
();
GetBoard
()
->
m_NetInfo
.
BuildListOfNets
();
board
->
SynchronizeNetsAndNetClasses
();
...
...
pcbnew/item_io.cpp
View file @
4c2a1dd5
...
...
@@ -41,7 +41,6 @@
#include "pcbnew.h"
#include "pcbnew_id.h"
#include "autorout.h"
#include "pcb_plot_params.h"
#include "3d_struct.h"
#include "trigo.h"
...
...
@@ -60,8 +59,8 @@ bool BOARD::Save( FILE* aFile ) const
BOARD_ITEM
*
item
;
// save the nets
for
(
unsigned
ii
=
0
;
ii
<
m_NetInfo
->
G
etCount
();
ii
++
)
if
(
!
m_NetInfo
->
GetNetItem
(
ii
)
->
Save
(
aFile
)
)
for
(
unsigned
ii
=
0
;
ii
<
GetN
etCount
();
ii
++
)
if
(
!
FindNet
(
ii
)
->
Save
(
aFile
)
)
goto
out
;
// Saved nets do not include netclass names, so save netclasses after nets.
...
...
pcbnew/kicad_plugin.cpp
View file @
4c2a1dd5
...
...
@@ -232,7 +232,7 @@ void KICAD_PLUGIN::loadAllSections( bool doAppend )
else
if
(
TESTLINE
(
"$TEXTPCB"
)
)
{
loadPCB_TEXT
E
();
loadPCB_TEXT
();
}
else
if
(
TESTLINE
(
"$TRACK"
)
)
...
...
@@ -362,8 +362,7 @@ void KICAD_PLUGIN::loadGENERAL()
else
if
(
TESTLINE
(
"Ly"
)
)
// Old format for Layer count
{
int
layer_mask
=
hexParse
(
line
+
SZ
(
"Ly"
)
);
int
layer_mask
=
hexParse
(
line
+
SZ
(
"Ly"
)
);
int
layer_count
=
0
;
for
(
int
ii
=
0
;
ii
<
NB_COPPER_LAYERS
&&
layer_mask
;
++
ii
,
layer_mask
>>=
1
)
...
...
@@ -566,7 +565,7 @@ void KICAD_PLUGIN::loadSETUP()
*/
}
#if defined(PCBNEW)
#if
1 //
defined(PCBNEW)
else
if
(
TESTLINE
(
"Layers"
)
)
{
...
...
@@ -853,13 +852,6 @@ void KICAD_PLUGIN::loadMODULE()
if
(
TESTLINE
(
"D"
)
)
// read a drawing item, e.g. "DS"
{
loadEDGE_MODULE
(
module
.
get
()
);
/*
EDGE_MODULE * edge;
edge = new EDGE_MODULE( this );
m_Drawings.PushBack( edge );
edge->ReadDescr( m_reader );
edge->SetDrawCoord();
*/
}
else
if
(
TESTLINE
(
"$PAD"
)
)
...
...
@@ -886,7 +878,7 @@ void KICAD_PLUGIN::loadMODULE()
textm
=
new
TEXTE_MODULE
(
module
.
get
()
);
module
->
m_Drawings
.
PushBack
(
textm
);
}
load
TEXTE_MODULE
(
textm
);
load
MODULE_TEXT
(
textm
);
}
else
if
(
TESTLINE
(
"Po"
)
)
...
...
@@ -1315,13 +1307,13 @@ void KICAD_PLUGIN::loadEDGE_MODULE( MODULE* aModule )
aModule
->
m_Drawings
.
PushBack
(
em
);
// this had been done at the MODULE level before, presumably because
it needs
// to be already added to a module before this function will work.
// this had been done at the MODULE level before, presumably because
the
//
EDGE_MODULE needs
to be already added to a module before this function will work.
em
->
SetDrawCoord
();
}
void
KICAD_PLUGIN
::
load
TEXTE_MODULE
(
TEXTE_MODULE
*
aText
)
void
KICAD_PLUGIN
::
load
MODULE_TEXT
(
TEXTE_MODULE
*
aText
)
{
const
char
*
data
;
char
*
line
=
m_reader
->
Line
();
// current (old) line
...
...
@@ -1334,7 +1326,7 @@ void KICAD_PLUGIN::loadTEXTE_MODULE( TEXTE_MODULE* aText )
int
type
=
intParse
(
line
+
1
,
&
data
);
BIU
pos0_x
=
biuParse
(
data
,
&
data
);
BIU
pos0_y
=
biuParse
(
data
,
&
data
);
BIU
size0_y
=
biuParse
(
data
,
&
data
);
// why y?
BIU
size0_y
=
biuParse
(
data
,
&
data
);
BIU
size0_x
=
biuParse
(
data
,
&
data
);
double
orient
=
degParse
(
data
,
&
data
);
BIU
thickn
=
biuParse
(
data
,
&
data
);
...
...
@@ -1586,7 +1578,7 @@ void KICAD_PLUGIN::loadNETINFO_ITEM()
char
buf
[
1024
];
NETINFO_ITEM
*
net
=
new
NETINFO_ITEM
(
m_board
);
m_board
->
m_NetInfo
->
AppendNet
(
net
);
m_board
->
AppendNet
(
net
);
while
(
READLINE
()
)
{
...
...
@@ -1612,7 +1604,7 @@ void KICAD_PLUGIN::loadNETINFO_ITEM()
}
void
KICAD_PLUGIN
::
loadPCB_TEXT
E
()
void
KICAD_PLUGIN
::
loadPCB_TEXT
()
{
/* examples:
For a single line text:
...
...
@@ -1746,7 +1738,8 @@ void KICAD_PLUGIN::loadTrackList( TRACK* aInsertBeforeMe, int aStructType )
// example first line:
// "Po 0 23994 28800 24400 28800 150 -1\r\n"
char
*
line
=
m_reader
->
Line
();
const
char
*
data
;
char
*
line
=
m_reader
->
Line
();
if
(
line
[
0
]
==
'$'
)
// $EndTRACK
return
;
// preferred exit
...
...
@@ -1755,9 +1748,7 @@ void KICAD_PLUGIN::loadTrackList( TRACK* aInsertBeforeMe, int aStructType )
assert
(
TESTLINE
(
"Po"
)
);
const
char
*
data
=
line
+
SZ
(
"Po"
);
int
shape
=
intParse
(
data
,
&
data
);
int
shape
=
intParse
(
line
+
SZ
(
"Po"
),
&
data
);
BIU
start_x
=
biuParse
(
data
,
&
data
);
BIU
start_y
=
biuParse
(
data
,
&
data
);
BIU
end_x
=
biuParse
(
data
,
&
data
);
...
...
@@ -1781,11 +1772,15 @@ void KICAD_PLUGIN::loadTrackList( TRACK* aInsertBeforeMe, int aStructType )
// example second line:
// "De 0 0 463 0 800000\r\n"
#if 1
assert
(
TESTLINE
(
"Po"
)
);
#else
if
(
!
TESTLINE
(
"De"
)
)
{
// mandatory 2nd line is missing
THROW_IO_ERROR
(
"Missing 2nd line of a TRACK def"
);
}
#endif
int
makeType
;
long
timeStamp
;
...
...
@@ -2530,6 +2525,8 @@ void KICAD_PLUGIN::Save( const wxString& aFileName, BOARD* aBoard, PROPERTIES* a
THROW_IO_ERROR
(
m_error
);
}
m_filename
=
aFileName
;
// wxf now owns fp, will close on exception or return
wxFFile
wxf
(
fp
);
...
...
@@ -2537,174 +2534,214 @@ void KICAD_PLUGIN::Save( const wxString& aFileName, BOARD* aBoard, PROPERTIES* a
init
(
aProperties
);
// saveAllSections();
saveAllSections
();
}
void
KICAD_PLUGIN
::
checkWriteError
(
const
char
*
aCaller
)
const
{
if
(
ferror
(
m_fp
)
)
{
THROW_IO_ERROR
(
wxString
::
Format
(
_
(
"error writing to file '%s' from function %s"
),
m_filename
.
GetData
(),
FROM_UTF8
(
aCaller
).
GetData
()
)
);
}
}
#if 0
void
KICAD_PLUGIN
::
saveAllSections
()
const
{
// $GENERAL section is first
saveGENERAL
();
// $SHEETDESCR section is next
saveSHEET
();
// $SETUP section is next
saveSETUP
();
// Then follows $EQUIPOT and all the rest
saveBOARD
();
}
void KICAD_PLUGIN::save
BOARD
() const
void
KICAD_PLUGIN
::
save
GENERAL
()
const
{
bool rc = false;
BOARD_ITEM* item;
}
void
KICAD_PLUGIN
::
saveSHEET
()
const
{
}
void
KICAD_PLUGIN
::
saveSETUP
()
const
{
}
void
KICAD_PLUGIN
::
saveBOARD
()
const
{
#if 0
// save the nets
for( unsigned ii = 0; ii < m_NetInfo->GetCount(); ii++ )
if( !m_NetInfo->GetNetItem( ii )->Save( aFile )
)
goto out
;
int netcount = m_board->GetNetCount();
for( int i = 0; i < netcount; ++i
)
saveNETINFO_ITEM( m_board->FindNet( i ) )
;
// Saved nets do not include netclass names, so save netclasses after nets.
m_NetClasses.Save( aFile
);
saveNETCLASSES(
);
// save the modules
for( item = m_Modules; item; item = item->Next() )
if( !item->Save( aFile ) )
goto out;
for( MODULE* m = m_board->m_Modules; m; m = (MODULE*) m->Next() )
saveMODULE( m );
for( item = m_Drawings; item; item = item->Next() )
// save the graphics owned by the board (not owned by a module)
for( BOARD_ITEM* gr = m_board->m_Drawings; gr; gr = gr->Next() )
{
switch(
item
->Type() )
switch(
gr
->Type() )
{
case PCB_TEXT_T:
savePCB_TEXT( (TEXTE_PCB*) gr );
break;
case PCB_LINE_T:
saveEDGE_MODULE( (EDGE_MODULE*) gr );
break;
case PCB_TARGET_T:
saveTARGET( (PCB_TARGET*) gr );
break;
case PCB_DIMENSION_T:
if( !item->Save( aFile ) )
goto out;
saveDIMENTION( (DIMENSION*) gr );
break;
default:
// future: throw exception here
#if defined(DEBUG)
printf( "BOARD::Save() ignoring m_Drawings type %d\n", item->Type() );
#endif
break;
THROW_IO_ERROR( wxString::Format( _( "unknown graphic type %d"), gr->Type() ) );
}
}
// do not save MARKER_PCBs, they can be regenerated easily
// save the tracks & vias
fprintf( aFile, "$TRACK\n" );
fprintf( m_fp, "$TRACK\n" );
for( TRACK* track = m_board->m_Track; track; track = track->Next() )
saveTRACK( (TRACK*) track );
fprintf( m_fp, "$EndTRACK\n" );
for( item = m_Track; item; item = item->Next() )
{
if( !item->Save( aFile
) )
goto out
;
}
// save the zones
fprintf( m_fp, "$ZONE\n" );
for( SEGZONE* zone = m_board->m_Zone; zone; zone = zone->Next(
) )
saveSEGZONE( zone )
;
fprintf( m_fp, "$EndZONE\n" );
fprintf( aFile, "$EndTRACK\n" );
// save the polygon (which are the newer technology) zones
for( int i=0; i < m_board->GetAreaCount(); ++i )
saveZONE_CONTAINER( m_board->GetArea( i ) );
// save the zones
fprintf( aFile, "$ZONE\n" );
fprintf( m_fp, "$EndBOARD\n" );
#endif
}
for( item = m_Zone; item; item = item->Next() )
{
if( !item->Save( aFile ) )
goto out;
}
fprintf( aFile, "$EndZONE\n" );
void
KICAD_PLUGIN
::
saveNETINFO_ITEM
(
const
NETINFO_ITEM
*
aNet
)
const
{
fprintf
(
m_fp
,
"$EQUIPOT
\n
"
);
fprintf
(
m_fp
,
"Na %d %s
\n
"
,
aNet
->
GetNet
(),
EscapedUTF8
(
aNet
->
GetNetname
()
).
c_str
()
);
fprintf
(
m_fp
,
"St %s
\n
"
,
"~"
);
fprintf
(
m_fp
,
"$EndEQUIPOT
\n
"
);
checkWriteError
(
__FUNCTION__
);
}
void
KICAD_PLUGIN
::
saveNETCLASSES
()
const
{
// @todo make m_NetClasses private
NETCLASSES
nc
=
m_board
->
m_NetClasses
;
// save the default first.
saveNETCLASS
(
nc
.
GetDefault
()
);
//
save the zone edges
for(
unsigned ii = 0; ii < m_ZoneDescriptorList.size(); ii++
)
//
the rest will be alphabetical in the *.brd file.
for
(
NETCLASSES
::
const_iterator
it
=
nc
.
begin
();
it
!=
nc
.
end
();
++
it
)
{
ZONE_CONTAINER* edge_zone = m_ZoneDescriptorList[ii];
edge_zone->Save( aFile );
NETCLASS
*
netclass
=
it
->
second
;
saveNETCLASS
(
netclass
);
}
checkWriteError
(
__FUNCTION__
);
}
if( fprintf( aFile, "$EndBOARD\n" ) != sizeof("$EndBOARD\n") - 1 )
goto out;
void
KICAD_PLUGIN
::
saveNETCLASS
(
const
NETCLASS
*
nc
)
const
{
fprintf
(
m_fp
,
"$NCLASS
\n
"
);
fprintf
(
m_fp
,
"Name %s
\n
"
,
EscapedUTF8
(
nc
->
GetName
()
).
c_str
()
);
fprintf
(
m_fp
,
"Desc %s
\n
"
,
EscapedUTF8
(
nc
->
GetDescription
()
).
c_str
()
);
rc = true; // wrote all OK
// Write parameters
out:
return rc;
fprintf
(
m_fp
,
"Clearance %d
\n
"
,
nc
->
GetClearance
()
);
fprintf
(
m_fp
,
"TrackWidth %d
\n
"
,
nc
->
GetTrackWidth
()
);
fprintf
(
m_fp
,
"ViaDia %d
\n
"
,
nc
->
GetViaDiameter
()
);
fprintf
(
m_fp
,
"ViaDrill %d
\n
"
,
nc
->
GetViaDrill
()
);
fprintf
(
m_fp
,
"uViaDia %d
\n
"
,
nc
->
GetuViaDiameter
()
);
fprintf
(
m_fp
,
"uViaDrill %d
\n
"
,
nc
->
GetuViaDrill
()
);
// Write members:
for
(
NETCLASS
::
const_iterator
it
=
nc
->
begin
();
it
!=
nc
->
end
();
++
it
)
fprintf
(
m_fp
,
"AddNet %s
\n
"
,
EscapedUTF8
(
*
it
).
c_str
()
);
fprintf
(
m_fp
,
"$EndNCLASS
\n
"
);
checkWriteError
(
__FUNCTION__
);
}
bool DRAWSEGMENT::Save( FILE* aFile ) const
#if 0
bool DRAWSEGMENT::Save( FILE* m_fp ) const
{
if( fprintf(
aFile
, "$DRAWSEGMENT\n" ) != sizeof("$DRAWSEGMENT\n") - 1 )
if( fprintf(
m_fp
, "$DRAWSEGMENT\n" ) != sizeof("$DRAWSEGMENT\n") - 1 )
return false;
fprintf(
aFile
, "Po %d %d %d %d %d %d\n",
fprintf(
m_fp
, "Po %d %d %d %d %d %d\n",
m_Shape,
m_Start.x, m_Start.y,
m_End.x, m_End.y, m_Width );
if( m_Type != S_CURVE )
{
fprintf(
aFile
, "De %d %d %d %lX %X\n",
fprintf(
m_fp
, "De %d %d %d %lX %X\n",
m_Layer, m_Type, m_Angle,
m_TimeStamp, ReturnStatus() );
}
else
{
fprintf(
aFile
, "De %d %d %d %lX %X %d %d %d %d\n",
fprintf(
m_fp
, "De %d %d %d %lX %X %d %d %d %d\n",
m_Layer, m_Type, m_Angle,
m_TimeStamp, ReturnStatus(),
m_BezierC1.x,m_BezierC1.y,
m_BezierC2.x,m_BezierC2.y);
}
if( fprintf(
aFile
, "$EndDRAWSEGMENT\n" ) != sizeof("$EndDRAWSEGMENT\n") - 1 )
if( fprintf(
m_fp
, "$EndDRAWSEGMENT\n" ) != sizeof("$EndDRAWSEGMENT\n") - 1 )
return false;
return true;
}
/** Note: the old name of class NETINFO_ITEM was EQUIPOT
* so in Save (and read) functions, for compatibility, we use EQUIPOT as
* keyword
*/
bool NETINFO_ITEM::Save( FILE* aFile ) const
{
bool success = false;
fprintf( aFile, "$EQUIPOT\n" );
fprintf( aFile, "Na %d %s\n", GetNet(), EscapedUTF8( m_Netname ).c_str() );
fprintf( aFile, "St %s\n", "~" );
if( fprintf( aFile, "$EndEQUIPOT\n" ) != sizeof("$EndEQUIPOT\n") - 1 )
goto out;
success = true;
out:
return success;
}
bool PCB_TARGET::Save( FILE* aFile ) const
bool PCB_TARGET::Save( FILE* m_fp ) const
{
bool rc = false;
if( fprintf(
aFile
, "$PCB_TARGET\n" ) != sizeof("$PCB_TARGET\n")-1 )
if( fprintf(
m_fp
, "$PCB_TARGET\n" ) != sizeof("$PCB_TARGET\n")-1 )
goto out;
fprintf(
aFile
, "Po %X %d %d %d %d %d %8.8lX\n",
fprintf(
m_fp
, "Po %X %d %d %d %d %d %8.8lX\n",
m_Shape, m_Layer,
m_Pos.x, m_Pos.y,
m_Size, m_Width, m_TimeStamp );
if( fprintf(
aFile
, "$EndPCB_TARGET\n" ) != sizeof("$EndPCB_TARGET\n")-1 )
if( fprintf(
m_fp
, "$EndPCB_TARGET\n" ) != sizeof("$EndPCB_TARGET\n")-1 )
goto out;
rc = true;
...
...
@@ -2714,7 +2751,7 @@ out:
}
bool ZONE_CONTAINER::Save( FILE*
aFile
) const
bool ZONE_CONTAINER::Save( FILE*
m_fp
) const
{
unsigned item_pos;
int ret;
...
...
@@ -2722,10 +2759,10 @@ bool ZONE_CONTAINER::Save( FILE* aFile ) const
int outline_hatch;
char padoption;
fprintf(
aFile
, "$CZONE_OUTLINE\n" );
fprintf(
m_fp
, "$CZONE_OUTLINE\n" );
// Save the outline main info
ret = fprintf(
aFile
, "ZInfo %8.8lX %d %s\n",
ret = fprintf(
m_fp
, "ZInfo %8.8lX %d %s\n",
m_TimeStamp, m_NetCode,
EscapedUTF8( m_Netname ).c_str() );
...
...
@@ -2733,7 +2770,7 @@ bool ZONE_CONTAINER::Save( FILE* aFile ) const
return false;
// Save the outline layer info
ret = fprintf(
aFile
, "ZLayer %d\n", m_Layer );
ret = fprintf(
m_fp
, "ZLayer %d\n", m_Layer );
if( ret < 1 )
return false;
...
...
@@ -2755,7 +2792,7 @@ bool ZONE_CONTAINER::Save( FILE* aFile ) const
break;
}
ret = fprintf(
aFile
, "ZAux %d %c\n", corners_count, outline_hatch );
ret = fprintf(
m_fp
, "ZAux %d %c\n", corners_count, outline_hatch );
if( ret < 2 )
return false;
...
...
@@ -2777,17 +2814,17 @@ bool ZONE_CONTAINER::Save( FILE* aFile ) const
break;
}
ret = fprintf(
aFile
, "ZClearance %d %c\n", m_ZoneClearance, padoption );
ret = fprintf(
m_fp
, "ZClearance %d %c\n", m_ZoneClearance, padoption );
if( ret < 2 )
return false;
ret = fprintf(
aFile
, "ZMinThickness %d\n", m_ZoneMinThickness );
ret = fprintf(
m_fp
, "ZMinThickness %d\n", m_ZoneMinThickness );
if( ret < 1 )
return false;
ret = fprintf(
aFile
,
ret = fprintf(
m_fp
,
"ZOptions %d %d %c %d %d\n",
m_FillMode,
m_ArcToSegmentsCount,
...
...
@@ -2798,7 +2835,7 @@ bool ZONE_CONTAINER::Save( FILE* aFile ) const
if( ret < 3 )
return false;
ret = fprintf(
aFile
,
ret = fprintf(
m_fp
,
"ZSmoothing %d %d\n",
cornerSmoothingType, cornerRadius );
...
...
@@ -2808,7 +2845,7 @@ bool ZONE_CONTAINER::Save( FILE* aFile ) const
// Save the corner list
for( item_pos = 0; item_pos < corners_count; item_pos++ )
{
ret = fprintf(
aFile
, "ZCorner %d %d %d\n",
ret = fprintf(
m_fp
, "ZCorner %d %d %d\n",
m_Poly->corner[item_pos].x, m_Poly->corner[item_pos].y,
m_Poly->corner[item_pos].end_contour );
...
...
@@ -2819,12 +2856,12 @@ bool ZONE_CONTAINER::Save( FILE* aFile ) const
// Save the PolysList
if( m_FilledPolysList.size() )
{
fprintf(
aFile
, "$POLYSCORNERS\n" );
fprintf(
m_fp
, "$POLYSCORNERS\n" );
for( unsigned ii = 0; ii < m_FilledPolysList.size(); ii++ )
{
const CPolyPt* corner = &m_FilledPolysList[ii];
ret = fprintf(
aFile
,
ret = fprintf(
m_fp
,
"%d %d %d %d\n",
corner->x,
corner->y,
...
...
@@ -2835,17 +2872,17 @@ bool ZONE_CONTAINER::Save( FILE* aFile ) const
return false;
}
fprintf(
aFile
, "$endPOLYSCORNERS\n" );
fprintf(
m_fp
, "$endPOLYSCORNERS\n" );
}
// Save the filling segments list
if( m_FillSegmList.size() )
{
fprintf(
aFile
, "$FILLSEGMENTS\n" );
fprintf(
m_fp
, "$FILLSEGMENTS\n" );
for( unsigned ii = 0; ii < m_FillSegmList.size(); ii++ )
{
ret = fprintf(
aFile
, "%d %d %d %d\n",
ret = fprintf(
m_fp
, "%d %d %d %d\n",
m_FillSegmList[ii].m_Start.x, m_FillSegmList[ii].m_Start.y,
m_FillSegmList[ii].m_End.x, m_FillSegmList[ii].m_End.y );
...
...
@@ -2853,74 +2890,21 @@ bool ZONE_CONTAINER::Save( FILE* aFile ) const
return false;
}
fprintf(
aFile
, "$endFILLSEGMENTS\n" );
fprintf(
m_fp
, "$endFILLSEGMENTS\n" );
}
fprintf(
aFile
, "$endCZONE_OUTLINE\n" );
fprintf(
m_fp
, "$endCZONE_OUTLINE\n" );
return true;
}
bool NETCLASSES::Save( FILE* aFile ) const
{
bool result;
// save the default first.
result = m_Default.Save( aFile );
if( result )
{
// the rest will be alphabetical in the *.brd file.
for( const_iterator i = begin(); i!=end(); ++i )
{
NETCLASS* netclass = i->second;
result = netclass->Save( aFile );
if( !result )
break;
}
}
return result;
}
bool NETCLASS::Save( FILE* aFile ) const
{
bool result = true;
fprintf( aFile, "$NCLASS\n" );
fprintf( aFile, "Name %s\n", EscapedUTF8( m_Name ).c_str() );
fprintf( aFile, "Desc %s\n", EscapedUTF8( GetDescription() ).c_str() );
// Write parameters
fprintf( aFile, "Clearance %d\n", GetClearance() );
fprintf( aFile, "TrackWidth %d\n", GetTrackWidth() );
fprintf( aFile, "ViaDia %d\n", GetViaDiameter() );
fprintf( aFile, "ViaDrill %d\n", GetViaDrill() );
fprintf( aFile, "uViaDia %d\n", GetuViaDiameter() );
fprintf( aFile, "uViaDrill %d\n", GetuViaDrill() );
// Write members:
for( const_iterator i = begin(); i!=end(); ++i )
fprintf( aFile, "AddNet %s\n", EscapedUTF8( *i ).c_str() );
fprintf( aFile, "$EndNCLASS\n" );
return result;
}
bool TEXTE_PCB::Save( FILE* aFile ) const
bool TEXTE_PCB::Save( FILE* m_fp ) const
{
if( m_Text.IsEmpty() )
return true;
if( fprintf(
aFile
, "$TEXTPCB\n" ) != sizeof("$TEXTPCB\n") - 1 )
if( fprintf(
m_fp
, "$TEXTPCB\n" ) != sizeof("$TEXTPCB\n") - 1 )
return false;
const char* style = m_Italic ? "Italic" : "Normal";
...
...
@@ -2932,14 +2916,14 @@ bool TEXTE_PCB::Save( FILE* aFile ) const
wxString txt = list->Item( ii );
if ( ii == 0 )
fprintf(
aFile
, "Te %s\n", EscapedUTF8( txt ).c_str() );
fprintf(
m_fp
, "Te %s\n", EscapedUTF8( txt ).c_str() );
else
fprintf(
aFile
, "nl %s\n", EscapedUTF8( txt ).c_str() );
fprintf(
m_fp
, "nl %s\n", EscapedUTF8( txt ).c_str() );
}
delete list;
fprintf(
aFile
, "Po %d %d %d %d %d %d\n",
fprintf(
m_fp
, "Po %d %d %d %d %d %d\n",
m_Pos.x, m_Pos.y, m_Size.x, m_Size.y, m_Thickness, m_Orient );
char hJustify = 'L';
...
...
@@ -2959,11 +2943,11 @@ bool TEXTE_PCB::Save( FILE* aFile ) const
break;
}
fprintf(
aFile
, "De %d %d %lX %s %c\n", m_Layer,
fprintf(
m_fp
, "De %d %d %lX %s %c\n", m_Layer,
m_Mirror ? 0 : 1,
m_TimeStamp, style, hJustify );
if( fprintf(
aFile
, "$EndTEXTPCB\n" ) != sizeof("$EndTEXTPCB\n") - 1 )
if( fprintf(
m_fp
, "$EndTEXTPCB\n" ) != sizeof("$EndTEXTPCB\n") - 1 )
return false;
return true;
...
...
@@ -2973,10 +2957,10 @@ bool TEXTE_PCB::Save( FILE* aFile ) const
/**
* Function Save
* writes the data structures for this object out to a FILE in "*.brd" format.
* @param
aFile
The FILE to write to.
* @param
m_fp
The FILE to write to.
* @return bool - true if success writing else false.
*/
bool TEXTE_MODULE::Save( FILE*
aFile
) const
bool TEXTE_MODULE::Save( FILE*
m_fp
) const
{
MODULE* parent = (MODULE*) GetParent();
int orient = m_Orient;
...
...
@@ -2986,7 +2970,7 @@ bool TEXTE_MODULE::Save( FILE* aFile ) const
if( parent )
orient += parent->m_Orient;
int ret = fprintf(
aFile
, "T%d %d %d %d %d %d %d %c %c %d %c %s\n",
int ret = fprintf(
m_fp
, "T%d %d %d %d %d %d %d %c %c %d %c %s\n",
m_Type,
m_Pos0.x, m_Pos0.y,
m_Size.y, m_Size.x,
...
...
@@ -3002,28 +2986,28 @@ bool TEXTE_MODULE::Save( FILE* aFile ) const
}
bool EDGE_MODULE::Save( FILE*
aFile
) const
bool EDGE_MODULE::Save( FILE*
m_fp
) const
{
int ret = -1;
switch( m_Shape )
{
case S_SEGMENT:
ret = fprintf(
aFile
, "DS %d %d %d %d %d %d\n",
ret = fprintf(
m_fp
, "DS %d %d %d %d %d %d\n",
m_Start0.x, m_Start0.y,
m_End0.x, m_End0.y,
m_Width, m_Layer );
break;
case S_CIRCLE:
ret = fprintf(
aFile
, "DC %d %d %d %d %d %d\n",
ret = fprintf(
m_fp
, "DC %d %d %d %d %d %d\n",
m_Start0.x, m_Start0.y,
m_End0.x, m_End0.y,
m_Width, m_Layer );
break;
case S_ARC:
ret = fprintf(
aFile
, "DA %d %d %d %d %d %d %d\n",
ret = fprintf(
m_fp
, "DA %d %d %d %d %d %d %d\n",
m_Start0.x, m_Start0.y,
m_End0.x, m_End0.y,
m_Angle,
...
...
@@ -3031,14 +3015,14 @@ bool EDGE_MODULE::Save( FILE* aFile ) const
break;
case S_POLYGON:
ret = fprintf(
aFile
, "DP %d %d %d %d %d %d %d\n",
ret = fprintf(
m_fp
, "DP %d %d %d %d %d %d %d\n",
m_Start0.x, m_Start0.y,
m_End0.x, m_End0.y,
(int) m_PolyPoints.size(),
m_Width, m_Layer );
for( unsigned i = 0; i<m_PolyPoints.size(); ++i )
fprintf(
aFile
, "Dl %d %d\n", m_PolyPoints[i].x, m_PolyPoints[i].y );
fprintf(
m_fp
, "Dl %d %d\n", m_PolyPoints[i].x, m_PolyPoints[i].y );
break;
...
...
@@ -3055,17 +3039,17 @@ bool EDGE_MODULE::Save( FILE* aFile ) const
}
bool TRACK::Save( FILE*
aFile
) const
bool TRACK::Save( FILE*
m_fp
) const
{
int type = 0;
if( Type() == PCB_VIA_T )
type = 1;
fprintf(
aFile
, "Po %d %d %d %d %d %d %d\n", m_Shape,
fprintf(
m_fp
, "Po %d %d %d %d %d %d %d\n", m_Shape,
m_Start.x, m_Start.y, m_End.x, m_End.y, m_Width, m_Drill );
fprintf(
aFile
, "De %d %d %d %lX %X\n",
fprintf(
m_fp
, "De %d %d %d %lX %X\n",
m_Layer, type, GetNet(),
m_TimeStamp, ReturnStatus() );
...
...
@@ -3073,7 +3057,7 @@ bool TRACK::Save( FILE* aFile ) const
}
bool DIMENSION::Save( FILE*
aFile
) const
bool DIMENSION::Save( FILE*
m_fp
) const
{
bool rc = false;
...
...
@@ -3082,54 +3066,54 @@ bool DIMENSION::Save( FILE* aFile ) const
const char keyWordLine[] = "$COTATION\n";
const char keyWordLineEnd[] = "$endCOTATION\n";
if( fputs( keyWordLine,
aFile
) == EOF )
if( fputs( keyWordLine,
m_fp
) == EOF )
goto out;
fprintf(
aFile
, "Ge %d %d %lX\n", m_Shape, m_Layer, m_TimeStamp );
fprintf(
m_fp
, "Ge %d %d %lX\n", m_Shape, m_Layer, m_TimeStamp );
fprintf(
aFile
, "Va %d\n", m_Value );
fprintf(
m_fp
, "Va %d\n", m_Value );
if( !m_Text->m_Text.IsEmpty() )
fprintf(
aFile
, "Te %s\n", EscapedUTF8( m_Text->m_Text ).c_str() );
fprintf(
m_fp
, "Te %s\n", EscapedUTF8( m_Text->m_Text ).c_str() );
else
fprintf(
aFile
, "Te \"?\"\n" );
fprintf(
m_fp
, "Te \"?\"\n" );
fprintf(
aFile
, "Po %d %d %d %d %d %d %d\n",
fprintf(
m_fp
, "Po %d %d %d %d %d %d %d\n",
m_Text->m_Pos.x, m_Text->m_Pos.y,
m_Text->m_Size.x, m_Text->m_Size.y,
m_Text->GetThickness(), m_Text->GetOrientation(),
m_Text->m_Mirror ? 0 : 1 );
fprintf(
aFile
, "Sb %d %d %d %d %d %d\n", S_SEGMENT,
fprintf(
m_fp
, "Sb %d %d %d %d %d %d\n", S_SEGMENT,
m_crossBarOx, m_crossBarOy,
m_crossBarFx, m_crossBarFy, m_Width );
fprintf(
aFile
, "Sd %d %d %d %d %d %d\n", S_SEGMENT,
fprintf(
m_fp
, "Sd %d %d %d %d %d %d\n", S_SEGMENT,
m_featureLineDOx, m_featureLineDOy,
m_featureLineDFx, m_featureLineDFy, m_Width );
fprintf(
aFile
, "Sg %d %d %d %d %d %d\n", S_SEGMENT,
fprintf(
m_fp
, "Sg %d %d %d %d %d %d\n", S_SEGMENT,
m_featureLineGOx, m_featureLineGOy,
m_featureLineGFx, m_featureLineGFy, m_Width );
fprintf(
aFile
, "S1 %d %d %d %d %d %d\n", S_SEGMENT,
fprintf(
m_fp
, "S1 %d %d %d %d %d %d\n", S_SEGMENT,
m_arrowD1Ox, m_arrowD1Oy,
m_arrowD1Fx, m_arrowD1Fy, m_Width );
fprintf(
aFile
, "S2 %d %d %d %d %d %d\n", S_SEGMENT,
fprintf(
m_fp
, "S2 %d %d %d %d %d %d\n", S_SEGMENT,
m_arrowD2Ox, m_arrowD2Oy,
m_arrowD2Fx, m_arrowD2Fy, m_Width );
fprintf(
aFile
, "S3 %d %d %d %d %d %d\n", S_SEGMENT,
fprintf(
m_fp
, "S3 %d %d %d %d %d %d\n", S_SEGMENT,
m_arrowG1Ox, m_arrowG1Oy,
m_arrowG1Fx, m_arrowG1Fy, m_Width );
fprintf(
aFile
, "S4 %d %d %d %d %d %d\n", S_SEGMENT,
fprintf(
m_fp
, "S4 %d %d %d %d %d %d\n", S_SEGMENT,
m_arrowG2Ox, m_arrowG2Oy,
m_arrowG2Fx, m_arrowG2Fy, m_Width );
if( fputs( keyWordLineEnd,
aFile
) == EOF )
if( fputs( keyWordLineEnd,
m_fp
) == EOF )
goto out;
rc = true;
...
...
@@ -3139,13 +3123,13 @@ out:
}
bool D_PAD::Save( FILE*
aFile
) const
bool D_PAD::Save( FILE*
m_fp
) const
{
int cshape;
const char* texttype;
// check the return values for first and last fprints() in this function
if( fprintf(
aFile
, "$PAD\n" ) != sizeof("$PAD\n") - 1 )
if( fprintf(
m_fp
, "$PAD\n" ) != sizeof("$PAD\n") - 1 )
return false;
switch( m_PadShape )
...
...
@@ -3168,18 +3152,18 @@ bool D_PAD::Save( FILE* aFile ) const
break;
}
fprintf(
aFile
, "Sh \"%.4s\" %c %d %d %d %d %d\n",
fprintf(
m_fp
, "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 );
fprintf(
aFile
, "Dr %d %d %d", m_Drill.x, m_Offset.x, m_Offset.y );
fprintf(
m_fp
, "Dr %d %d %d", m_Drill.x, m_Offset.x, m_Offset.y );
if( m_DrillShape == PAD_OVAL )
{
fprintf(
aFile
, " %c %d %d", 'O', m_Drill.x, m_Drill.y );
fprintf(
m_fp
, " %c %d %d", 'O', m_Drill.x, m_Drill.y );
}
fprintf(
aFile
, "\n" );
fprintf(
m_fp
, "\n" );
switch( m_Attribut )
{
...
...
@@ -3201,42 +3185,42 @@ bool D_PAD::Save( FILE* aFile ) const
break;
}
fprintf(
aFile
, "At %s N %8.8X\n", texttype, m_layerMask );
fprintf(
m_fp
, "At %s N %8.8X\n", texttype, m_layerMask );
fprintf(
aFile
, "Ne %d %s\n", GetNet(), EscapedUTF8( m_Netname ).c_str() );
fprintf(
m_fp
, "Ne %d %s\n", GetNet(), EscapedUTF8( m_Netname ).c_str() );
fprintf(
aFile
, "Po %d %d\n", m_Pos0.x, m_Pos0.y );
fprintf(
m_fp
, "Po %d %d\n", m_Pos0.x, m_Pos0.y );
if( m_LengthDie != 0 )
fprintf(
aFile
, "Le %d\n", m_LengthDie );
fprintf(
m_fp
, "Le %d\n", m_LengthDie );
if( m_LocalSolderMaskMargin != 0 )
fprintf(
aFile
, ".SolderMask %d\n", m_LocalSolderMaskMargin );
fprintf(
m_fp
, ".SolderMask %d\n", m_LocalSolderMaskMargin );
if( m_LocalSolderPasteMargin != 0 )
fprintf(
aFile
, ".SolderPaste %d\n", m_LocalSolderPasteMargin );
fprintf(
m_fp
, ".SolderPaste %d\n", m_LocalSolderPasteMargin );
if( m_LocalSolderPasteMarginRatio != 0 )
fprintf(
aFile
, ".SolderPasteRatio %g\n", m_LocalSolderPasteMarginRatio );
fprintf(
m_fp
, ".SolderPasteRatio %g\n", m_LocalSolderPasteMarginRatio );
if( m_LocalClearance != 0 )
fprintf(
aFile
, ".LocalClearance %d\n", m_LocalClearance );
fprintf(
m_fp
, ".LocalClearance %d\n", m_LocalClearance );
if( fprintf(
aFile
, "$EndPAD\n" ) != sizeof("$EndPAD\n") - 1 )
if( fprintf(
m_fp
, "$EndPAD\n" ) != sizeof("$EndPAD\n") - 1 )
return false;
return true;
}
bool MODULE::Save( FILE*
aFile
) const
bool MODULE::Save( FILE*
m_fp
) const
{
char statusTxt[8];
BOARD_ITEM* item;
bool rc = false;
fprintf(
aFile
, "$MODULE %s\n", TO_UTF8( m_LibRef ) );
fprintf(
m_fp
, "$MODULE %s\n", TO_UTF8( m_LibRef ) );
memset( statusTxt, 0, sizeof(statusTxt) );
if( IsLocked() )
...
...
@@ -3249,59 +3233,59 @@ bool MODULE::Save( FILE* aFile ) const
else
statusTxt[1] = '~';
fprintf(
aFile
, "Po %d %d %d %d %8.8lX %8.8lX %s\n",
fprintf(
m_fp
, "Po %d %d %d %d %8.8lX %8.8lX %s\n",
m_Pos.x, m_Pos.y,
m_Orient, m_Layer, m_LastEdit_Time,
m_TimeStamp, statusTxt );
fprintf(
aFile
, "Li %s\n", TO_UTF8( m_LibRef ) );
fprintf(
m_fp
, "Li %s\n", TO_UTF8( m_LibRef ) );
if( !m_Doc.IsEmpty() )
{
fprintf(
aFile
, "Cd %s\n", TO_UTF8( m_Doc ) );
fprintf(
m_fp
, "Cd %s\n", TO_UTF8( m_Doc ) );
}
if( !m_KeyWord.IsEmpty() )
{
fprintf(
aFile
, "Kw %s\n", TO_UTF8( m_KeyWord ) );
fprintf(
m_fp
, "Kw %s\n", TO_UTF8( m_KeyWord ) );
}
fprintf(
aFile
, "Sc %8.8lX\n", m_TimeStamp );
fprintf(
aFile
, "AR %s\n", TO_UTF8( m_Path ) );
fprintf(
aFile
, "Op %X %X 0\n", m_CntRot90, m_CntRot180 );
fprintf(
m_fp
, "Sc %8.8lX\n", m_TimeStamp );
fprintf(
m_fp
, "AR %s\n", TO_UTF8( m_Path ) );
fprintf(
m_fp
, "Op %X %X 0\n", m_CntRot90, m_CntRot180 );
if( m_LocalSolderMaskMargin != 0 )
fprintf(
aFile
, ".SolderMask %d\n", m_LocalSolderMaskMargin );
fprintf(
m_fp
, ".SolderMask %d\n", m_LocalSolderMaskMargin );
if( m_LocalSolderPasteMargin != 0 )
fprintf(
aFile
, ".SolderPaste %d\n", m_LocalSolderPasteMargin );
fprintf(
m_fp
, ".SolderPaste %d\n", m_LocalSolderPasteMargin );
if( m_LocalSolderPasteMarginRatio != 0 )
fprintf(
aFile
, ".SolderPasteRatio %g\n", m_LocalSolderPasteMarginRatio );
fprintf(
m_fp
, ".SolderPasteRatio %g\n", m_LocalSolderPasteMarginRatio );
if( m_LocalClearance != 0 )
fprintf(
aFile
, ".LocalClearance %d\n", m_LocalClearance );
fprintf(
m_fp
, ".LocalClearance %d\n", m_LocalClearance );
// attributes
if( m_Attributs != MOD_DEFAULT )
{
fprintf(
aFile
, "At " );
fprintf(
m_fp
, "At " );
if( m_Attributs & MOD_CMS )
fprintf(
aFile
, "SMD " );
fprintf(
m_fp
, "SMD " );
if( m_Attributs & MOD_VIRTUAL )
fprintf(
aFile
, "VIRTUAL " );
fprintf(
m_fp
, "VIRTUAL " );
fprintf(
aFile
, "\n" );
fprintf(
m_fp
, "\n" );
}
// save reference
if( !m_Reference->Save(
aFile
) )
if( !m_Reference->Save(
m_fp
) )
goto out;
// save value
if( !m_Value->Save(
aFile
) )
if( !m_Value->Save(
m_fp
) )
goto out;
// save drawing elements
...
...
@@ -3311,7 +3295,7 @@ bool MODULE::Save( FILE* aFile ) const
{
case PCB_MODULE_TEXT_T:
case PCB_MODULE_EDGE_T:
if( !item->Save(
aFile
) )
if( !item->Save(
m_fp
) )
goto out;
break;
...
...
@@ -3326,12 +3310,12 @@ bool MODULE::Save( FILE* aFile ) const
// save the pads
for( item = m_Pads; item; item = item->Next() )
if( !item->Save(
aFile
) )
if( !item->Save(
m_fp
) )
goto out;
Write_3D_Descr(
aFile
);
Write_3D_Descr(
m_fp
);
fprintf(
aFile
, "$EndMODULE %s\n", TO_UTF8( m_LibRef ) );
fprintf(
m_fp
, "$EndMODULE %s\n", TO_UTF8( m_LibRef ) );
rc = true;
out:
...
...
pcbnew/kicad_plugin.h
View file @
4c2a1dd5
...
...
@@ -40,6 +40,9 @@ class ZONE_CONTAINER;
class
DIMENSION
;
class
NETINFO_ITEM
;
class
TEXTE_MODULE
;
class
EDGE_MODULE
;
class
TRACK
;
class
SEGZONE
;
/**
...
...
@@ -73,6 +76,7 @@ protected:
LINE_READER
*
m_reader
;
///< no ownership here.
FILE
*
m_fp
;
///< no ownership here.
wxString
m_filename
;
///< for saves only, name is in m_reader for loads
wxString
m_field
;
///< reused to stuff MODULE fields.
...
...
@@ -88,9 +92,6 @@ protected:
double
biuToDisk
;
///< convert from BIUs to disk engineering units with this scale factor
double
diskToBiu
;
///< convert from disk engineering units to BIUs with this scale factor
/// convert a BIU to engineering units by scaling and formatting to ASCII.
std
::
string
biuFmt
(
BIU
aValue
);
/**
* Function biuParse
* parses an ASCII decimal floating point value and scales it into a BIU
...
...
@@ -133,12 +134,12 @@ protected:
void
loadMODULE
();
void
load3D
(
MODULE
*
aModule
);
void
loadPAD
(
MODULE
*
aModule
);
void
load
TEXTE_MODULE
(
TEXTE_MODULE
*
aText
);
void
load
MODULE_TEXT
(
TEXTE_MODULE
*
aText
);
void
loadEDGE_MODULE
(
MODULE
*
aModule
);
void
loadDRAWSEGMENT
();
void
loadNETINFO_ITEM
();
void
loadPCB_TEXT
E
();
void
loadPCB_TEXT
();
void
loadNETCLASS
();
/**
...
...
@@ -158,6 +159,50 @@ protected:
void
loadPCB_TARGET
();
// "$PCB_TARGET"
//-----</ load/parse functions>---------------------------------------------
//-----<save functions>-----------------------------------------------------
/**
* Function checkWriteError
* checks to see if there is an error on the output FILE, and its ability to
* continue saving to disk.
*/
void
checkWriteError
(
const
char
*
aCaller
)
const
;
/// convert a BIU to engineering units by scaling and formatting to ASCII.
std
::
string
biuFmt
(
BIU
aValue
);
void
saveAllSections
()
const
;
void
saveGENERAL
()
const
;
void
saveSHEET
()
const
;
void
saveSETUP
()
const
;
void
saveBOARD
()
const
;
void
saveMODULE
(
const
MODULE
*
aModule
)
const
;
void
saveNETINFO_ITEM
(
const
NETINFO_ITEM
*
aNet
)
const
;
void
saveNETCLASSES
()
const
;
void
saveNETCLASS
(
const
NETCLASS
*
aNetclass
)
const
;
void
savePCB_TEXT
(
const
TEXTE_PCB
*
aText
)
const
;
void
saveEDGE_MODULE
(
const
EDGE_MODULE
*
aEdge
)
const
;
void
saveTARGET
(
const
PCB_TARGET
*
aTarget
)
const
;
void
saveDIMENTION
(
const
DIMENSION
*
aDimension
)
const
;
void
saveTRACK
(
const
TRACK
*
aTrack
)
const
;
/**
* Function saveSEGZONE
* saves the oldschool zones, now outdated in favor of polygon zones.
*/
void
saveSEGZONE
(
const
SEGZONE
*
aZone
)
const
;
/**
* Function saveZONE_CONTAINER
* saves the new polygon zones.
*/
void
saveZONE_CONTAINER
(
const
ZONE_CONTAINER
*
aZone
)
const
;
//-----</save functions>----------------------------------------------------
};
#endif // KICAD_PLUGIN_H_
pcbnew/librairi.cpp
View file @
4c2a1dd5
...
...
@@ -134,7 +134,7 @@ MODULE* FOOTPRINT_EDIT_FRAME::Import_Module()
module
->
DisplayInfo
(
this
);
PlaceModule
(
module
,
NULL
);
GetBoard
()
->
m_Status_Pcb
=
0
;
GetBoard
()
->
m_NetInfo
->
BuildListOfNets
();
GetBoard
()
->
BuildListOfNets
();
return
module
;
}
...
...
pcbnew/loadcmp.cpp
View file @
4c2a1dd5
...
...
@@ -86,7 +86,7 @@ bool FOOTPRINT_EDIT_FRAME::Load_Module_From_BOARD( MODULE* aModule )
aModule
->
m_Flags
=
0
;
GetBoard
()
->
m_NetInfo
->
BuildListOfNets
();
GetBoard
()
->
BuildListOfNets
();
GetScreen
()
->
SetCrossHairPosition
(
wxPoint
(
0
,
0
)
);
PlaceModule
(
aModule
,
NULL
);
...
...
@@ -196,7 +196,7 @@ MODULE* PCB_BASE_FRAME::Load_Module_From_Library( const wxString& library, wxDC*
*/
// GetBoard()->m_Pcb->m_NetInfo
->
BuildListOfNets();
// GetBoard()->m_Pcb->m_NetInfo
.
BuildListOfNets();
RecalculateAllTracksNetcode
();
if
(
DC
)
...
...
pcbnew/modedit.cpp
View file @
4c2a1dd5
...
...
@@ -242,7 +242,7 @@ void FOOTPRINT_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event )
// Initialize data relative to nets and netclasses (for a new
// module the defaults are used)
// This is mandatory to handle and draw pads
GetBoard
()
->
m_NetInfo
->
BuildListOfNets
();
GetBoard
()
->
BuildListOfNets
();
redraw
=
true
;
module
->
SetPosition
(
wxPoint
(
0
,
0
)
);
...
...
pcbnew/modules.cpp
View file @
4c2a1dd5
...
...
@@ -170,7 +170,7 @@ void Abort_MoveOrCopyModule( EDA_DRAW_PANEL* Panel, wxDC* DC )
module
->
DeleteStructure
();
module
=
NULL
;
pcbframe
->
GetBoard
()
->
m_Status_Pcb
=
0
;
pcbframe
->
GetBoard
()
->
m_NetInfo
->
BuildListOfNets
();
pcbframe
->
GetBoard
()
->
BuildListOfNets
();
}
}
...
...
pcbnew/ratsnest.cpp
View file @
4c2a1dd5
...
...
@@ -135,7 +135,7 @@ void PCB_BASE_FRAME::Compile_Ratsnest( wxDC* aDC, bool aDisplayStatus )
{
wxString
msg
;
GetBoard
()
->
m_Status_Pcb
=
0
;
/
* we want a full ratsnest computation, from the scratch */
GetBoard
()
->
m_Status_Pcb
=
0
;
/
/ we want a full ratsnest computation, from the scratch
ClearMsgPanel
();
// Rebuild the full pads and net info list
...
...
@@ -143,9 +143,9 @@ void PCB_BASE_FRAME::Compile_Ratsnest( wxDC* aDC, bool aDisplayStatus )
if
(
aDisplayStatus
)
{
msg
.
Printf
(
wxT
(
" %d"
),
m_Pcb
->
GetPad
s
Count
()
);
msg
.
Printf
(
wxT
(
" %d"
),
m_Pcb
->
GetPadCount
()
);
AppendMsgPanel
(
wxT
(
"Pads"
),
msg
,
RED
);
msg
.
Printf
(
wxT
(
" %d"
),
m_Pcb
->
m_NetInfo
->
G
etCount
()
);
msg
.
Printf
(
wxT
(
" %d"
),
m_Pcb
->
GetN
etCount
()
);
AppendMsgPanel
(
wxT
(
"Nets"
),
msg
,
CYAN
);
}
...
...
@@ -158,7 +158,7 @@ void PCB_BASE_FRAME::Compile_Ratsnest( wxDC* aDC, bool aDisplayStatus )
*/
Build_Board_Ratsnest
();
/
* Compute the pad connections due to the existing tracks (physical connections) */
/
/ Compute the pad connections due to the existing tracks (physical connections)
TestConnections
();
/* Compute the active ratsnest, i.e. the unconnected links
...
...
@@ -206,16 +206,16 @@ void PCB_BASE_FRAME::Build_Board_Ratsnest()
m_Pcb
->
m_FullRatsnest
.
clear
();
if
(
m_Pcb
->
GetPad
s
Count
()
==
0
)
if
(
m_Pcb
->
GetPadCount
()
==
0
)
return
;
/* Created pad list and the net_codes if needed */
if
(
(
m_Pcb
->
m_Status_Pcb
&
NET_CODES_OK
)
==
0
)
m_Pcb
->
m_NetInfo
->
BuildListOfNets
();
m_Pcb
->
BuildListOfNets
();
for
(
unsigned
ii
=
0
;
ii
<
m_Pcb
->
GetPad
s
Count
();
++
ii
)
for
(
unsigned
ii
=
0
;
ii
<
m_Pcb
->
GetPadCount
();
++
ii
)
{
pad
=
m_Pcb
->
m_NetInfo
->
GetPad
(
ii
);
pad
=
m_Pcb
->
GetPad
(
ii
);
pad
->
SetSubRatsnest
(
0
);
}
...
...
@@ -227,7 +227,7 @@ void PCB_BASE_FRAME::Build_Board_Ratsnest()
// (net_code = 0 -> no connect)
noconn
=
0
;
MIN_SPAN_TREE_PADS
min_spanning_tree
;
for
(
;
current_net_code
<
m_Pcb
->
m_NetInfo
->
G
etCount
();
current_net_code
++
)
for
(
;
current_net_code
<
m_Pcb
->
GetN
etCount
();
current_net_code
++
)
{
NETINFO_ITEM
*
net
=
m_Pcb
->
FindNet
(
current_net_code
);
...
...
@@ -439,13 +439,13 @@ void PCB_BASE_FRAME::TestForActiveLinksInRatsnest( int aNetCode )
D_PAD
*
pad
;
NETINFO_ITEM
*
net
;
if
(
m_Pcb
->
GetPad
s
Count
()
==
0
)
if
(
m_Pcb
->
GetPadCount
()
==
0
)
return
;
if
(
(
m_Pcb
->
m_Status_Pcb
&
LISTE_RATSNEST_ITEM_OK
)
==
0
)
Build_Board_Ratsnest
();
for
(
int
net_code
=
1
;
net_code
<
(
int
)
m_Pcb
->
m_NetInfo
->
G
etCount
();
net_code
++
)
for
(
int
net_code
=
1
;
net_code
<
(
int
)
m_Pcb
->
GetN
etCount
();
net_code
++
)
{
net
=
m_Pcb
->
FindNet
(
net_code
);
...
...
@@ -514,7 +514,7 @@ void PCB_BASE_FRAME::build_ratsnest_module( MODULE* aModule )
if
(
(
GetBoard
()
->
m_Status_Pcb
&
LISTE_PAD_OK
)
==
0
)
{
GetBoard
()
->
m_Status_Pcb
=
0
;
GetBoard
()
->
m_NetInfo
->
BuildListOfNets
();
GetBoard
()
->
BuildListOfNets
();
}
/* Compute the "local" ratsnest if needed (when this footprint starts move)
...
...
pcbnew/solve.cpp
View file @
4c2a1dd5
...
...
@@ -508,12 +508,11 @@ static int Autoroute_One_Track( PCB_EDIT_FRAME* pcbframe,
/* Regenerates the remaining barriers (which may encroach on the placement bits precedent)
*/
i
=
pcbframe
->
GetBoard
()
->
GetPad
s
Count
();
i
=
pcbframe
->
GetBoard
()
->
GetPadCount
();
for
(
unsigned
ii
=
0
;
ii
<
pcbframe
->
GetBoard
()
->
GetPad
s
Count
();
ii
++
)
for
(
unsigned
ii
=
0
;
ii
<
pcbframe
->
GetBoard
()
->
GetPadCount
();
ii
++
)
{
D_PAD
*
ptr
=
pcbframe
->
GetBoard
()
->
m_NetInfo
->
GetPad
(
ii
);
D_PAD
*
ptr
=
pcbframe
->
GetBoard
()
->
GetPad
(
ii
);
if
(
(
pt_cur_ch
->
m_PadStart
!=
ptr
)
&&
(
pt_cur_ch
->
m_PadEnd
!=
ptr
)
)
{
...
...
pcbnew/specctra_export.cpp
View file @
4c2a1dd5
...
...
@@ -1172,7 +1172,7 @@ void SPECCTRA_DB::FromBOARD( BOARD* aBoard ) throw( IO_ERROR )
std
::
string
componentId
;
// find the highest numbered netCode within the board.
int
highestNetCode
=
aBoard
->
m_NetInfo
->
G
etCount
()
-
1
;
int
highestNetCode
=
aBoard
->
GetN
etCount
()
-
1
;
deleteNETs
();
// expand the net vector to highestNetCode+1, setting empty to NULL
...
...
@@ -1182,9 +1182,9 @@ void SPECCTRA_DB::FromBOARD( BOARD* aBoard ) throw( IO_ERROR )
for
(
unsigned
i
=
1
;
i
<
nets
.
size
();
++
i
)
nets
[
i
]
=
new
NET
(
pcb
->
network
);
for
(
unsigned
ii
=
0
;
ii
<
aBoard
->
m_NetInfo
->
G
etCount
();
ii
++
)
for
(
unsigned
ii
=
0
;
ii
<
aBoard
->
GetN
etCount
();
ii
++
)
{
NETINFO_ITEM
*
net
=
aBoard
->
m_NetInfo
->
GetNetItem
(
ii
);
NETINFO_ITEM
*
net
=
aBoard
->
FindNet
(
ii
);
int
netcode
=
net
->
GetNet
();
if
(
netcode
>
0
)
nets
[
netcode
]
->
net_id
=
TO_UTF8
(
net
->
GetNetname
()
);
...
...
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