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
28b17187
Commit
28b17187
authored
Oct 15, 2007
by
g_harland
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Improvements related to vias
parent
460a678f
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
166 additions
and
49 deletions
+166
-49
change_log.txt
change_log.txt
+11
-4
class_track.cpp
pcbnew/class_track.cpp
+73
-22
editrack-part2.cpp
pcbnew/editrack-part2.cpp
+52
-21
ioascii.cpp
pcbnew/ioascii.cpp
+30
-2
No files found.
change_log.txt
View file @
28b17187
...
...
@@ -5,6 +5,14 @@ Please add newer entries at the top, list the date and your name with
email address.
2007-Oct-15 UPDATE Geoff Harland <gharlandau@yahoo.com.au>
================================================================================
+ pcbnew
* Made some changes involving vias so that these would have the correct value
of the Shape property assigned to them - while being created, and while files
are being saved, and while files are being loaded.
2007-Oct-14 UPDATE Dick Hollenbeck <dick@softplc.com>
================================================================================
+ pcbnew:
...
...
@@ -38,7 +46,6 @@ email address.
with genliste.cpp.notused
2007-Oct-12 UPDATE Dick Hollenbeck <dick@softplc.com>
================================================================================
+ all
...
...
@@ -70,8 +77,8 @@ email address.
Does Recalcule_all_net_connexion() work, and why is not called from anywhere?
2007-Oct-11 UPDATE Dick Hollenbeck <dick@softplc.com>
================================================================================
+ pcbnew
...
...
@@ -82,7 +89,7 @@ email address.
will redraw the DisplayPanel, now that SMD pads' colors are so dependent
on these variables.
2007-Oct-11 UPDATE Dick Hollenbeck <dick@softplc.com>
================================================================================
+ pcbnew
...
...
pcbnew/class_track.cpp
View file @
28b17187
...
...
@@ -206,14 +206,14 @@ SEARCH_RESULT TRACK::Visit( INSPECTOR* inspector, const void* testData,
return
SEARCH_QUIT
;
}
return
SEARCH_CONTINUE
;
return
SEARCH_CONTINUE
;
}
// see class_track.h
bool
SEGVIA
::
IsOnLayer
(
int
layer_number
)
const
{
/* its the same logic, don't need this
/* its the same logic, don't need this
int via_type = Shape();
if( via_type == VIA_NORMALE )
...
...
@@ -225,13 +225,12 @@ bool SEGVIA::IsOnLayer( int layer_number ) const
}
// VIA_BORGNE ou VIA_ENTERREE:
*/
*/
int
bottom_layer
,
top_layer
;
ReturnLayerPair
(
&
top_layer
,
&
bottom_layer
);
if
(
bottom_layer
<=
layer_number
&&
layer_number
<=
top_layer
)
if
(
bottom_layer
<=
layer_number
&&
layer_number
<=
top_layer
)
return
true
;
else
return
false
;
...
...
@@ -250,18 +249,17 @@ int TRACK::ReturnMaskLayer()
if
(
Type
()
==
TYPEVIA
)
{
int
via_type
=
Shape
();
if
(
via_type
==
VIA_NORMALE
)
return
ALL_CU_LAYERS
;
// VIA_BORGNE ou VIA_ENTERREE:
int
bottom_layer
;
int
top_layer
;
int
bottom_layer
,
top_layer
;
// ReturnLayerPair() knows how layers are stored
((
SEGVIA
*
)
this
)
->
ReturnLayerPair
(
&
top_layer
,
&
bottom_layer
);
int
layermask
=
0
;
while
(
bottom_layer
<=
top_layer
)
{
...
...
@@ -287,7 +285,7 @@ void SEGVIA::SetLayerPair( int top_layer, int bottom_layer )
if
(
via_type
==
VIA_NORMALE
)
{
top_layer
=
LAYER_CMP_N
;
top_layer
=
LAYER_CMP_N
;
bottom_layer
=
COPPER_LAYER_N
;
}
...
...
@@ -549,6 +547,7 @@ bool TRACK::WriteTrackDescr( FILE* File )
/********************************************/
{
int
type
=
0
;
int
shape
;
// Stores genuine value of via's shape property
if
(
Type
()
==
TYPEVIA
)
type
=
1
;
...
...
@@ -556,7 +555,50 @@ bool TRACK::WriteTrackDescr( FILE* File )
if
(
GetState
(
DELETED
)
)
return
FALSE
;
fprintf
(
File
,
"Po %d %d %d %d %d %d %d
\n
"
,
m_Shape
,
// In the case of a via, check the values of its top_layer and
// bottom_layer properties, to determine what value should *really*
// be assigned to its shape property (as all versions of KiCad up
// until revision 335 (committed on 2007-Oct-13) could sometimes
// assign an inappropriate value to that property).
if
(
Type
()
==
TYPEVIA
)
{
// int bottom_layer, top_layer;
// ((SEGVIA*)this)->ReturnLayerPair( &top_layer, &bottom_layer );
// For reasons of efficiency, replace the previous two commands
// with these (next three) commands.
int
bottom_layer
=
(
m_Layer
>>
4
)
&
15
;
int
top_layer
=
m_Layer
&
15
;
if
(
bottom_layer
>
top_layer
)
EXCHG
(
bottom_layer
,
top_layer
);
// Now determine what type of via this really is
if
(
bottom_layer
==
COPPER_LAYER_N
&&
top_layer
==
CMP_N
)
{
// The via is really of a "standard" (through-hole) type
shape
=
VIA_NORMALE
;
}
else
if
(
bottom_layer
==
COPPER_LAYER_N
||
top_layer
==
CMP_N
)
{
// The via is really of a "blind" type
shape
=
VIA_BORGNE
;
}
else
{
// The via is really of a "buried" type
shape
=
VIA_ENTERREE
;
}
}
else
shape
=
m_Shape
;
// Cater for other (non-via) types of objects
// fprintf( File, "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 );
// (Replace m_Shape within the previous command with shape)
fprintf
(
File
,
"Po %d %d %d %d %d %d %d
\n
"
,
shape
,
m_Start
.
x
,
m_Start
.
y
,
m_End
.
x
,
m_End
.
y
,
m_Width
,
m_Drill
);
fprintf
(
File
,
"De %d %d %d %lX %X
\n
"
,
...
...
@@ -701,8 +743,8 @@ void TRACK::Draw( WinEDA_DrawPanel* panel, wxDC* DC, int draw_mode )
}
/* Trace de l'isolation (pour segments type CUIVRE et TRACK uniquement */
if
(
(
DisplayOpt
.
DisplayTrackIsol
)
&&
(
m_Layer
<=
CMP_N
)
&&
(
Type
()
==
TYPETRACK
)
)
if
(
DisplayOpt
.
DisplayTrackIsol
&&
(
m_Layer
<=
CMP_N
)
&&
(
Type
()
==
TYPETRACK
)
)
{
GRCSegm
(
&
panel
->
m_ClipBox
,
DC
,
m_Start
.
x
,
m_Start
.
y
,
m_End
.
x
,
m_End
.
y
,
...
...
@@ -903,11 +945,22 @@ void SEGVIA::Show( int nestLevel, std::ostream& os )
switch
(
Shape
()
)
{
case
VIA_NORMALE
:
cp
=
"through"
;
break
;
case
VIA_ENTERREE
:
cp
=
"blind"
;
break
;
case
VIA_BORGNE
:
cp
=
"buried"
;
break
;
case
VIA_NORMALE
:
cp
=
"through"
;
break
;
case
VIA_ENTERREE
:
cp
=
"blind"
;
break
;
case
VIA_BORGNE
:
cp
=
"buried"
;
break
;
default
:
case
VIA_NOT_DEFINED
:
cp
=
"undefined"
;
break
;
case
VIA_NOT_DEFINED
:
cp
=
"undefined"
;
break
;
}
int
topLayer
;
...
...
@@ -933,5 +986,3 @@ void SEGVIA::Show( int nestLevel, std::ostream& os )
#endif
pcbnew/editrack-part2.cpp
View file @
28b17187
...
...
@@ -214,42 +214,73 @@ void WinEDA_PcbFrame::Other_Layer_Route( TRACK* track, wxDC* DC )
DrawPanel
->
ManageCurseur
(
DrawPanel
,
DC
,
FALSE
);
/* create the via */
Via
=
new
SEGVIA
(
m_Pcb
);
Via
->
m_Flags
=
IS_NEW
;
Via
->
m_Width
=
g_DesignSettings
.
m_CurrentViaSize
;
Via
->
m_Shape
=
g_DesignSettings
.
m_CurrentViaType
;
Via
->
SetNet
(
g_HightLigth_NetCode
);
Via
->
m_Start
=
Via
->
m_End
=
g_CurrentTrackSegment
->
m_End
;
// Create the via - but before doing so, determine what
// value should really be assigned to its Shape property.
// (Use ii to temporarily "store" the appropriate value.)
int
old_layer
=
GetScreen
()
->
m_Active_Layer
;
//swap the layers.
//
swap the layers.
if
(
GetScreen
()
->
m_Active_Layer
!=
GetScreen
()
->
m_Route_Layer_TOP
)
GetScreen
()
->
m_Active_Layer
=
GetScreen
()
->
m_Route_Layer_TOP
;
else
GetScreen
()
->
m_Active_Layer
=
GetScreen
()
->
m_Route_Layer_BOTTOM
;
/* Adjust the via layer pair */
if
(
Via
->
Shape
()
==
VIA_ENTERREE
)
/* Assess the type of via */
if
(
g_DesignSettings
.
m_CurrentViaType
==
VIA_NORMALE
)
// normal via
{
Via
->
SetLayerPair
(
old_layer
,
GetScreen
()
->
m_Active_Layer
)
;
ii
=
VIA_NORMALE
;
}
else
if
(
Via
->
Shape
()
==
VIA_BORGNE
)
//blind via
else
// Either a blind via or buried via was "requested", but still
// check both layers of the layer pair, to determine the truly
// appropriate value to assign to the via's Type property.
{
// A revoir! ( la via devrait deboucher sur 1 cote )
Via
->
SetLayerPair
(
old_layer
,
GetScreen
()
->
m_Active_Layer
);
if
(
(
old_layer
==
COPPER_LAYER_N
&&
GetScreen
()
->
m_Active_Layer
==
CMP_N
)
||
(
old_layer
==
CMP_N
&&
GetScreen
()
->
m_Active_Layer
==
COPPER_LAYER_N
)
)
{
// Specify the via's Shape property as Standard
ii
=
VIA_NORMALE
;
}
else
if
(
old_layer
==
COPPER_LAYER_N
||
old_layer
==
CMP_N
||
GetScreen
()
->
m_Active_Layer
==
COPPER_LAYER_N
||
GetScreen
()
->
m_Active_Layer
==
CMP_N
)
{
// Specify the via's Shape property as Blind
ii
=
VIA_BORGNE
;
}
else
{
// Specify the via's Shape property as Buried
ii
=
VIA_ENTERREE
;
}
}
else
{
Via
=
new
SEGVIA
(
m_Pcb
);
Via
->
m_Flags
=
IS_NEW
;
Via
->
m_Width
=
g_DesignSettings
.
m_CurrentViaSize
;
Via
->
m_Shape
=
ii
;
// ( instead of g_DesignSettings.m_CurrentViaType )
Via
->
SetNet
(
g_HightLigth_NetCode
);
Via
->
m_Start
=
Via
->
m_End
=
g_CurrentTrackSegment
->
m_End
;
/* Adjust the via layer pair */
if
(
Via
->
Shape
()
==
VIA_NORMALE
)
// Normal via
{
// Usual via is from copper to component; layer pair is 0 and 0x0F.
Via
->
SetLayerPair
(
COPPER_LAYER_N
,
LAYER_CMP_N
);
}
if
(
Drc_On
&&
(
Drc
(
this
,
DC
,
Via
,
m_Pcb
->
m_Track
,
1
)
==
BAD_DRC
)
)
else
// Either a blind via or buried via.
{
if
(
old_layer
<
GetScreen
()
->
m_Active_Layer
)
Via
->
SetLayerPair
(
old_layer
,
GetScreen
()
->
m_Active_Layer
);
else
Via
->
SetLayerPair
(
GetScreen
()
->
m_Active_Layer
,
old_layer
);
}
if
(
Drc_On
&&
(
Drc
(
this
,
DC
,
Via
,
m_Pcb
->
m_Track
,
1
)
==
BAD_DRC
)
)
{
/* DRC fault: the Via cannot be placed here ... */
delete
Via
;
...
...
pcbnew/ioascii.cpp
View file @
28b17187
...
...
@@ -170,9 +170,37 @@ int WinEDA_BasePcbFrame::ReadListeSegmentDescr( wxDC* DC, FILE* File,
&
PtSegm
->
m_End
.
x
,
&
PtSegm
->
m_End
.
y
,
&
width
,
&
PtSegm
->
m_Drill
);
PtSegm
->
m_Width
=
width
;
PtSegm
->
m_Width
=
width
;
// Before specifying the value for any new via's Shape property, check
// the values of its top_layer and bottom_layer properties, to determine
// what value should *really* be assigned to that property (as all
// versions of KiCad up until revision 335 (committed on 2007-Oct-13)
// could sometimes assign an inappropriate value to that property).
if
(
makeType
==
TYPEVIA
)
{
int
b_layer
=
(
layer
>>
4
)
&
15
;
int
t_layer
=
layer
&
15
;
if
(
(
(
b_layer
==
COPPER_LAYER_N
)
&&
(
t_layer
==
CMP_N
)
)
||
(
(
b_layer
==
CMP_N
)
&&
(
t_layer
==
COPPER_LAYER_N
)
)
)
{
// The via is really of a "standard" (through-hole) type
shape
=
VIA_NORMALE
;
}
else
if
(
(
b_layer
==
COPPER_LAYER_N
)
||
(
t_layer
==
CMP_N
)
||
(
b_layer
==
CMP_N
)
||
(
t_layer
==
COPPER_LAYER_N
)
)
{
// The via is really of a "blind" type
shape
=
VIA_BORGNE
;
}
else
{
// The via is really of a "buried" type
shape
=
VIA_ENTERREE
;
}
}
PtSegm
->
m_Shape
=
shape
;
if
(
arg_count
<
7
)
PtSegm
->
m_Drill
=
-
1
;
...
...
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