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
40e2fed3
Commit
40e2fed3
authored
Feb 08, 2008
by
dickelbeck
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
specctra export pad fixes
parent
7dbb0da3
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
81 additions
and
67 deletions
+81
-67
specctra_export.cpp
pcbnew/specctra_export.cpp
+81
-67
No files found.
pcbnew/specctra_export.cpp
View file @
40e2fed3
...
...
@@ -435,6 +435,7 @@ PADSTACK* SPECCTRA_DB::makeVia( int aCopperDiameter )
void
SPECCTRA_DB
::
makePADSTACKs
(
BOARD
*
aBoard
,
TYPE_COLLECTOR
&
aPads
)
{
char
name
[
80
];
// padstack name builder
std
::
string
uniqifier
;
if
(
aPads
.
GetCount
()
)
{
...
...
@@ -466,9 +467,7 @@ void SPECCTRA_DB::makePADSTACKs( BOARD* aBoard, TYPE_COLLECTOR& aPads )
if
(
(
!
doLayer
[
0
]
&&
!
doLayer
[
1
])
||
(
pad
->
m_PadShape
==
PAD_CIRCLE
&&
pad
->
m_Drill
.
x
>=
pad
->
m_Size
.
x
)
)
{
// padstacks.size()-1 is the index of the matching padstack in LIBRARY::padstacks
pad
->
m_logical_connexion
=
pcb
->
library
->
padstacks
.
size
()
-
1
;
// pad->m_logical_connexion = pcb->library->padstacks.size()-1;
continue
;
}
...
...
@@ -480,19 +479,49 @@ void SPECCTRA_DB::makePADSTACKs( BOARD* aBoard, TYPE_COLLECTOR& aPads )
// padstacks.size()-1 is the index of the matching padstack in LIBRARY::padstacks
pad
->
m_logical_connexion
=
pcb
->
library
->
padstacks
.
size
()
-
1
;
// For now, we will report only one layer for the pads. SMD pads are reported on the
// top layer, and through hole are reported on <reserved_layer_name> "signal".
// We could do better if there was actually a "layer type" field within
// Kicad which would hold one of: T_signal, T_power, T_mixed, T_jumper
// See bottom of page 74 of the SECCTRA Design Language Reference, May 2000.
int
reportedLayers
=
1
;
// how many layers are reported.
/* Through hole pads are reported on the <reserved_layer_name>
"signal". Reporting through hole pads on the special
"signal" layer may have problems when power layers are in the layer
stack. See bottom of page 74 of the SECCTRA Design Language
Reference, May 2000. We could do better if there was actually a
"layer type" field within Kicad which would hold one of: T_signal,
T_power, T_mixed, T_jumper.
doLayer
[
0
]
=
true
;
PAD_SMD and PAD_CONN are reported on each layer for which
they are present.
*/
const
char
*
layerName
=
(
pad
->
m_Attribut
==
PAD_SMD
)
?
layerIds
[
0
].
c_str
()
:
"signal"
;
int
reportedLayers
;
// how many layers are reported.
const
char
*
layerName
[
NB_COPPER_LAYERS
];
static
const
char
signal
[]
=
"signal"
;
if
(
pad
->
m_Attribut
==
PAD_SMD
||
pad
->
m_Attribut
==
PAD_CONN
)
{
reportedLayers
=
0
;
int
coppers
=
0
;
// will always be one for now
uniqifier
=
'['
;
if
(
doLayer
[
0
]
)
{
layerName
[
reportedLayers
++
]
=
layerIds
[
0
].
c_str
();
uniqifier
+=
'T'
;
// T for top, could have used a layer index here alternatively
}
if
(
doLayer
[
1
]
)
{
int
pcbLayerNdx
=
kicadLayer2pcb
[
COPPER_LAYER_N
];
layerName
[
reportedLayers
++
]
=
layerIds
[
pcbLayerNdx
].
c_str
();
uniqifier
+=
'B'
;
// B for bottom
}
uniqifier
+=
']'
;
}
else
{
reportedLayers
=
1
;
layerName
[
0
]
=
signal
;
uniqifier
=
"[A]"
;
// A for all
}
switch
(
pad
->
m_PadShape
)
{
...
...
@@ -501,9 +530,7 @@ void SPECCTRA_DB::makePADSTACKs( BOARD* aBoard, TYPE_COLLECTOR& aPads )
{
double
diameter
=
scale
(
pad
->
m_Size
.
x
);
for
(
int
layer
=
0
;
layer
<
reportedLayers
;
++
layer
)
{
if
(
doLayer
[
layer
]
)
for
(
int
ndx
=
0
;
ndx
<
reportedLayers
;
++
ndx
)
{
SHAPE
*
shape
=
new
SHAPE
(
padstack
);
padstack
->
Append
(
shape
);
...
...
@@ -511,13 +538,12 @@ void SPECCTRA_DB::makePADSTACKs( BOARD* aBoard, TYPE_COLLECTOR& aPads )
CIRCLE
*
circle
=
new
CIRCLE
(
shape
);
shape
->
SetShape
(
circle
);
circle
->
SetLayerId
(
layerName
);
circle
->
SetLayerId
(
layerName
[
ndx
]
);
circle
->
SetDiameter
(
diameter
);
++
coppers
;
}
}
snprintf
(
name
,
sizeof
(
name
),
"Round%dPad_%.6g_mil"
,
coppers
,
scale
(
pad
->
m_Size
.
x
)
);
snprintf
(
name
,
sizeof
(
name
),
"Round%sPad_%.6g_mil"
,
uniqifier
.
c_str
(),
scale
(
pad
->
m_Size
.
x
)
);
name
[
sizeof
(
name
)
-
1
]
=
0
;
// @todo verify that all pad names are unique, there is a chance that
...
...
@@ -536,9 +562,7 @@ void SPECCTRA_DB::makePADSTACKs( BOARD* aBoard, TYPE_COLLECTOR& aPads )
POINT
lowerLeft
(
-
dx
,
-
dy
);
POINT
upperRight
(
dx
,
dy
);
for
(
int
layer
=
0
;
layer
<
reportedLayers
;
++
layer
)
{
if
(
doLayer
[
layer
]
)
for
(
int
ndx
=
0
;
ndx
<
reportedLayers
;
++
ndx
)
{
SHAPE
*
shape
=
new
SHAPE
(
padstack
);
padstack
->
Append
(
shape
);
...
...
@@ -546,14 +570,12 @@ void SPECCTRA_DB::makePADSTACKs( BOARD* aBoard, TYPE_COLLECTOR& aPads )
RECTANGLE
*
rect
=
new
RECTANGLE
(
shape
);
shape
->
SetShape
(
rect
);
rect
->
SetLayerId
(
layerName
);
rect
->
SetLayerId
(
layerName
[
ndx
]
);
rect
->
SetCorners
(
lowerLeft
,
upperRight
);
++
coppers
;
}
}
snprintf
(
name
,
sizeof
(
name
),
"Rect%
d
Pad_%.6gx%.6g_mil"
,
coppers
,
scale
(
pad
->
m_Size
.
x
),
scale
(
pad
->
m_Size
.
y
)
);
snprintf
(
name
,
sizeof
(
name
),
"Rect%
s
Pad_%.6gx%.6g_mil"
,
uniqifier
.
c_str
()
,
scale
(
pad
->
m_Size
.
x
),
scale
(
pad
->
m_Size
.
y
)
);
name
[
sizeof
(
name
)
-
1
]
=
0
;
// @todo verify that all pad names are unique, there is a chance that
...
...
@@ -574,20 +596,16 @@ void SPECCTRA_DB::makePADSTACKs( BOARD* aBoard, TYPE_COLLECTOR& aPads )
{
double
radius
=
dy
;
for
(
int
layer
=
0
;
layer
<
reportedLayers
;
++
layer
)
{
if
(
doLayer
[
layer
]
)
for
(
int
ndx
=
0
;
ndx
<
reportedLayers
;
++
ndx
)
{
SHAPE
*
shape
;
PATH
*
path
;
// see http://www.freerouting.net/usren/viewtopic.php?f=3&t=317#p408
shape
=
new
SHAPE
(
padstack
);
padstack
->
Append
(
shape
);
path
=
makePath
(
POINT
(
-
dr
,
0.0
),
POINT
(
dr
,
0.0
),
layerName
);
path
=
makePath
(
POINT
(
-
dr
,
0.0
),
POINT
(
dr
,
0.0
),
layerName
[
ndx
]
);
shape
->
SetShape
(
path
);
path
->
aperture_width
=
2.0
*
radius
;
++
coppers
;
}
}
}
else
// oval is vertical
...
...
@@ -596,25 +614,21 @@ void SPECCTRA_DB::makePADSTACKs( BOARD* aBoard, TYPE_COLLECTOR& aPads )
dr
=
-
dr
;
for
(
int
layer
=
0
;
layer
<
reportedLayers
;
++
layer
)
{
if
(
doLayer
[
layer
]
)
for
(
int
ndx
=
0
;
ndx
<
reportedLayers
;
++
ndx
)
{
SHAPE
*
shape
;
PATH
*
path
;
// see http://www.freerouting.net/usren/viewtopic.php?f=3&t=317#p408
shape
=
new
SHAPE
(
padstack
);
padstack
->
Append
(
shape
);
path
=
makePath
(
POINT
(
0.0
,
-
dr
),
POINT
(
0.0
,
dr
),
layerName
);
path
=
makePath
(
POINT
(
0.0
,
-
dr
),
POINT
(
0.0
,
dr
),
layerName
[
ndx
]
);
shape
->
SetShape
(
path
);
path
->
aperture_width
=
2.0
*
radius
;
++
coppers
;
}
}
}
snprintf
(
name
,
sizeof
(
name
),
"Oval%
d
Pad_%.6gx%.6g_mil"
,
coppers
,
scale
(
pad
->
m_Size
.
x
),
scale
(
pad
->
m_Size
.
y
)
);
snprintf
(
name
,
sizeof
(
name
),
"Oval%
s
Pad_%.6gx%.6g_mil"
,
uniqifier
.
c_str
()
,
scale
(
pad
->
m_Size
.
x
),
scale
(
pad
->
m_Size
.
y
)
);
name
[
sizeof
(
name
)
-
1
]
=
0
;
// @todo verify that all pad names are unique, there is a chance that
...
...
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