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
680a4407
Commit
680a4407
authored
Dec 05, 2011
by
Dick Hollenbeck
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix formatting problems that came about from incompatible tabbing in Lorenzo's patch
parent
40ee7265
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
298 additions
and
276 deletions
+298
-276
wxBasePcbFrame.h
include/wxBasePcbFrame.h
+0
-1
export_gencad.cpp
pcbnew/export_gencad.cpp
+298
-275
No files found.
include/wxBasePcbFrame.h
View file @
680a4407
...
...
@@ -80,7 +80,6 @@ public:
FOOTPRINT_EDIT_FRAME
*
m_ModuleEditFrame
;
protected
:
// EDA_RECT m_BoundaryBox; // Board size and position
BOARD
*
m_Pcb
;
GENERAL_COLLECTOR
*
m_Collector
;
...
...
pcbnew/export_gencad.cpp
View file @
680a4407
...
...
@@ -47,7 +47,7 @@
static
bool
CreateHeaderInfoData
(
FILE
*
aFile
,
PCB_EDIT_FRAME
*
frame
);
static
void
CreateArtworksSection
(
FILE
*
aFile
);
static
void
CreateArtworksSection
(
FILE
*
aFile
);
static
void
CreateTracksInfoData
(
FILE
*
aFile
,
BOARD
*
aPcb
);
static
void
CreateBoardSection
(
FILE
*
aFile
,
BOARD
*
aPcb
);
static
void
CreateComponentsSection
(
FILE
*
aFile
,
BOARD
*
aPcb
);
...
...
@@ -96,7 +96,7 @@ static const wxString GenCADLayerNameFlipped[32] =
static
int
GencadOffsetX
,
GencadOffsetY
;
/* GerbTool chokes on units different than INCH so this is the conversion
factor */
*
factor */
const
static
double
SCALE_FACTOR
=
10000.0
;
...
...
@@ -108,11 +108,13 @@ static double MapXTo( int aX )
return
(
aX
-
GencadOffsetX
)
/
SCALE_FACTOR
;
}
static
double
MapYTo
(
int
aY
)
{
return
(
GencadOffsetY
-
aY
)
/
SCALE_FACTOR
;
}
/* Driver function: processing starts here */
void
PCB_EDIT_FRAME
::
ExportToGenCAD
(
wxCommandEvent
&
aEvent
)
{
...
...
@@ -170,8 +172,8 @@ void PCB_EDIT_FRAME::ExportToGenCAD( wxCommandEvent& aEvent )
}
/* Gencad has some mandatory and some optional sections: some importer
need the padstack section (which is optional) anyway. Also the
order of the section *is* important */
*
need the padstack section (which is optional) anyway. Also the
*
order of the section *is* important */
CreateHeaderInfoData
(
file
,
this
);
// Gencad header
CreateBoardSection
(
file
,
pcb
);
// Board perimeter
...
...
@@ -180,8 +182,8 @@ void PCB_EDIT_FRAME::ExportToGenCAD( wxCommandEvent& aEvent )
CreateArtworksSection
(
file
);
// Empty but mandatory
/* Gencad splits a component info in shape, component and device.
We don't do any sharing (it would be difficult since each module is
customizable after placement) */
*
We don't do any sharing (it would be difficult since each module is
*
customizable after placement) */
CreateShapesSection
(
file
,
pcb
);
CreateComponentsSection
(
file
,
pcb
);
CreateDevicesSection
(
file
,
pcb
);
...
...
@@ -205,6 +207,7 @@ void PCB_EDIT_FRAME::ExportToGenCAD( wxCommandEvent& aEvent )
}
}
// Comparator for sorting pads with qsort
static
int
PadListSortByShape
(
const
void
*
aRefptr
,
const
void
*
aObjptr
)
{
...
...
@@ -214,24 +217,26 @@ static int PadListSortByShape( const void* aRefptr, const void* aObjptr )
return
D_PAD
::
Compare
(
padref
,
padcmp
);
}
// Sort vias for uniqueness
static
int
ViaSort
(
const
void
*
aRefptr
,
const
void
*
aObjptr
)
static
int
ViaSort
(
const
void
*
aRefptr
,
const
void
*
aObjptr
)
{
TRACK
*
padref
=
*
(
TRACK
**
)
aRefptr
;
TRACK
*
padcmp
=
*
(
TRACK
**
)
aObjptr
;
TRACK
*
padref
=
*
(
TRACK
**
)
aRefptr
;
TRACK
*
padcmp
=
*
(
TRACK
**
)
aObjptr
;
if
(
padref
->
m_Width
!=
padcmp
->
m_Width
)
return
padref
->
m_Width
-
padcmp
->
m_Width
;
return
padref
->
m_Width
-
padcmp
->
m_Width
;
if
(
padref
->
GetDrillValue
()
!=
padcmp
->
GetDrillValue
()
)
return
padref
->
GetDrillValue
()
-
padcmp
->
GetDrillValue
();
return
padref
->
GetDrillValue
()
-
padcmp
->
GetDrillValue
();
if
(
padref
->
ReturnMaskLayer
()
!=
padcmp
->
ReturnMaskLayer
()
)
return
padref
->
ReturnMaskLayer
()
-
padcmp
->
ReturnMaskLayer
();
return
padref
->
ReturnMaskLayer
()
-
padcmp
->
ReturnMaskLayer
();
return
0
;
}
// The ARTWORKS section is empty but (officially) mandatory
static
void
CreateArtworksSection
(
FILE
*
aFile
)
{
...
...
@@ -240,6 +245,7 @@ static void CreateArtworksSection( FILE* aFile )
fputs
(
"$ENDARTWORKS
\n\n
"
,
aFile
);
}
// Emit PADS and PADSTACKS. They are sorted and emitted uniquely.
// Via name is synthesized from their attributes, pads are numbered
static
void
CreatePadsShapesSection
(
FILE
*
aFile
,
BOARD
*
aPcb
)
...
...
@@ -248,7 +254,7 @@ static void CreatePadsShapesSection( FILE* aFile, BOARD* aPcb )
std
::
vector
<
D_PAD
*>
padstacks
;
std
::
vector
<
TRACK
*>
vias
;
std
::
vector
<
TRACK
*>
viastacks
;
padstacks
.
resize
(
1
);
// We count pads from 1
padstacks
.
resize
(
1
);
// We count pads from 1
// The master layermask (i.e. the enabled layers) for padstack generation
unsigned
master_layermask
=
aPcb
->
GetDesignSettings
().
GetEnabledLayers
();
...
...
@@ -273,6 +279,7 @@ static void CreatePadsShapesSection( FILE* aFile, BOARD* aPcb )
vias
.
push_back
(
track
);
}
}
qsort
(
&
vias
[
0
],
vias
.
size
(),
sizeof
(
TRACK
*
),
ViaSort
);
// Emit vias pads
...
...
@@ -280,16 +287,16 @@ static void CreatePadsShapesSection( FILE* aFile, BOARD* aPcb )
for
(
unsigned
i
=
0
;
i
<
vias
.
size
();
i
++
)
{
TRACK
*
via
=
vias
[
i
];
if
(
old_via
&&
0
==
ViaSort
(
&
old_via
,
&
via
)
)
if
(
old_via
&&
0
==
ViaSort
(
&
old_via
,
&
via
)
)
continue
;
old_via
=
via
;
viastacks
.
push_back
(
via
);
viastacks
.
push_back
(
via
);
fprintf
(
aFile
,
"PAD V%d.%d.%X ROUND %g
\n
CIRCLE 0 0 %g
\n
"
,
via
->
m_Width
,
via
->
GetDrillValue
(),
via
->
m_Width
,
via
->
GetDrillValue
(),
via
->
ReturnMaskLayer
(),
via
->
GetDrillValue
()
/
SCALE_FACTOR
,
via
->
m_Width
/
(
SCALE_FACTOR
*
2
)
);
via
->
GetDrillValue
()
/
SCALE_FACTOR
,
via
->
m_Width
/
(
SCALE_FACTOR
*
2
)
);
}
// Emit component pads
...
...
@@ -311,7 +318,7 @@ static void CreatePadsShapesSection( FILE* aFile, BOARD* aPcb )
fprintf
(
aFile
,
"PAD P%d"
,
pad
->
GetSubRatsnest
()
);
padstacks
.
push_back
(
pad
);
// Will have its own padstack later
padstacks
.
push_back
(
pad
);
// Will have its own padstack later
int
dx
=
pad
->
m_Size
.
x
/
2
;
int
dy
=
pad
->
m_Size
.
y
/
2
;
...
...
@@ -325,17 +332,18 @@ static void CreatePadsShapesSection( FILE* aFile, BOARD* aPcb )
fprintf
(
aFile
,
"CIRCLE %g %g %g
\n
"
,
pad
->
m_Offset
.
x
/
SCALE_FACTOR
,
-
pad
->
m_Offset
.
y
/
SCALE_FACTOR
,
pad
->
m_Size
.
x
/
(
SCALE_FACTOR
*
2
)
);
pad
->
m_Size
.
x
/
(
SCALE_FACTOR
*
2
)
);
break
;
case
PAD_RECT
:
fprintf
(
aFile
,
" RECTANGULAR %g
\n
"
,
pad
->
m_Drill
.
x
/
SCALE_FACTOR
);
// Rectangle is begin, size *not* begin, end!
fprintf
(
aFile
,
"RECTANGLE %g %g %g %g
\n
"
,
(
-
dx
+
pad
->
m_Offset
.
x
)
/
SCALE_FACTOR
,
(
-
dy
-
pad
->
m_Offset
.
y
)
/
SCALE_FACTOR
,
dx
/
(
SCALE_FACTOR
/
2
)
,
dy
/
(
SCALE_FACTOR
/
2
)
);
dx
/
(
SCALE_FACTOR
/
2
),
dy
/
(
SCALE_FACTOR
/
2
)
);
break
;
case
PAD_OVAL
:
// Create outline by 2 lines and 2 arcs
...
...
@@ -353,6 +361,7 @@ static void CreatePadsShapesSection( FILE* aFile, BOARD* aPcb )
(
-
pad
->
m_Offset
.
y
-
radius
)
/
SCALE_FACTOR
,
(
dr
+
pad
->
m_Offset
.
x
)
/
SCALE_FACTOR
,
(
-
pad
->
m_Offset
.
y
-
radius
)
/
SCALE_FACTOR
);
// GenCAD arcs are (start, end, center)
fprintf
(
aFile
,
"ARC %g %g %g %g %g %g
\n
"
,
(
dr
+
pad
->
m_Offset
.
x
)
/
SCALE_FACTOR
,
...
...
@@ -411,10 +420,12 @@ static void CreatePadsShapesSection( FILE* aFile, BOARD* aPcb )
case
PAD_TRAPEZOID
:
fprintf
(
aFile
,
" POLYGON %g
\n
"
,
pad
->
m_Drill
.
x
/
SCALE_FACTOR
);
// XXX TO BE IMPLEMENTED! and I don't know if it could be actually imported by something
break
;
}
}
fputs
(
"
\n
$ENDPADS
\n\n
"
,
aFile
);
// Now emit the padstacks definitions, using the combined layer masks
...
...
@@ -423,38 +434,39 @@ static void CreatePadsShapesSection( FILE* aFile, BOARD* aPcb )
// Via padstacks
for
(
unsigned
i
=
0
;
i
<
viastacks
.
size
();
i
++
)
{
TRACK
*
via
=
viastacks
[
i
];
TRACK
*
via
=
viastacks
[
i
];
unsigned
mask
=
via
->
ReturnMaskLayer
()
&
master_layermask
;
fprintf
(
aFile
,
"PADSTACK VIA%d.%d.%X %g
\n
"
,
via
->
m_Width
,
via
->
GetDrillValue
(),
mask
,
via
->
GetDrillValue
()
/
SCALE_FACTOR
);
for
(
int
layer
=
0
;
layer
<
32
;
layer
++
)
for
(
int
layer
=
0
;
layer
<
32
;
layer
++
)
{
if
(
mask
&
(
1
<<
layer
)
)
if
(
mask
&
(
1
<<
layer
)
)
{
fprintf
(
aFile
,
"PAD V%d.%d.%X %s 0 0
\n
"
,
via
->
m_Width
,
via
->
GetDrillValue
(),
mask
,
TO_UTF8
(
GenCADLayerName
[
layer
])
);
TO_UTF8
(
GenCADLayerName
[
layer
]
)
);
}
}
}
}
/* Component padstacks
CAM350 don't apply correctly the FLIP semantics for padstacks, i.e. doesn't
swap the top and bottom layers... so I need to define the shape as MIRRORX
and define a separate 'flipped' padstack... until it appears yet another
noncompliant importer */
*
CAM350 don't apply correctly the FLIP semantics for padstacks, i.e. doesn't
*
swap the top and bottom layers... so I need to define the shape as MIRRORX
*
and define a separate 'flipped' padstack... until it appears yet another
*
noncompliant importer */
for
(
unsigned
i
=
1
;
i
<
padstacks
.
size
();
i
++
)
{
D_PAD
*
pad
=
padstacks
[
i
];
D_PAD
*
pad
=
padstacks
[
i
];
// Straight padstack
fprintf
(
aFile
,
"PADSTACK PAD%d %g
\n
"
,
i
,
pad
->
m_Drill
.
x
/
SCALE_FACTOR
);
pad
->
m_Drill
.
x
/
SCALE_FACTOR
);
for
(
int
layer
=
0
;
layer
<
32
;
layer
++
)
{
if
(
pad
->
m_layerMask
&
(
1
<<
layer
)
&
master_layermask
)
if
(
pad
->
m_layerMask
&
(
1
<<
layer
)
&
master_layermask
)
{
fprintf
(
aFile
,
"PAD P%d %s 0 0
\n
"
,
i
,
TO_UTF8
(
GenCADLayerName
[
layer
]
)
);
...
...
@@ -463,16 +475,17 @@ static void CreatePadsShapesSection( FILE* aFile, BOARD* aPcb )
// Flipped padstack
fprintf
(
aFile
,
"PADSTACK PAD%dF %g
\n
"
,
i
,
pad
->
m_Drill
.
x
/
SCALE_FACTOR
);
pad
->
m_Drill
.
x
/
SCALE_FACTOR
);
for
(
int
layer
=
0
;
layer
<
32
;
layer
++
)
{
if
(
pad
->
m_layerMask
&
(
1
<<
layer
)
&
master_layermask
)
{
if
(
pad
->
m_layerMask
&
(
1
<<
layer
)
&
master_layermask
)
{
fprintf
(
aFile
,
"PAD P%d %s 0 0
\n
"
,
i
,
TO_UTF8
(
GenCADLayerNameFlipped
[
layer
]
)
);
}
}
}
fputs
(
"$ENDPADSTACKS
\n\n
"
,
aFile
);
}
...
...
@@ -499,10 +512,10 @@ static void CreateShapesSection( FILE* aFile, BOARD* aPcb )
for
(
pad
=
module
->
m_Pads
;
pad
!=
NULL
;
pad
=
pad
->
Next
()
)
{
/* Funny thing: GenCAD requires the pad side even if you use
padstacks (which are theorically optional but gerbtools
*
padstacks (which are theorically optional but gerbtools
*requires* them). Now the trouble thing is that 'BOTTOM'
is interpreted by someone as a padstack flip even
if the spec explicitly says it's not... */
*
is interpreted by someone as a padstack flip even
*
if the spec explicitly says it's not... */
layer
=
"ALL"
;
if
(
(
pad
->
m_layerMask
&
ALL_CU_LAYERS
)
==
LAYER_BACK
)
...
...
@@ -536,6 +549,7 @@ static void CreateShapesSection( FILE* aFile, BOARD* aPcb )
fputs
(
"$ENDSHAPES
\n\n
"
,
aFile
);
}
/* Creates the section $COMPONENTS (Footprints placement)
* Bottom side components are difficult to handle: shapes must be mirrored or
* flipped, silk layers need to be handled correctly and so on. Also it seems
...
...
@@ -543,10 +557,9 @@ static void CreateShapesSection( FILE* aFile, BOARD* aPcb )
*/
static
void
CreateComponentsSection
(
FILE
*
aFile
,
BOARD
*
aPcb
)
{
fputs
(
"$COMPONENTS
\n
"
,
aFile
);
for
(
MODULE
*
module
=
aPcb
->
m_Modules
;
module
!=
NULL
;
module
=
module
->
Next
()
)
for
(
MODULE
*
module
=
aPcb
->
m_Modules
;
module
!=
NULL
;
module
=
module
->
Next
()
)
{
TEXTE_MODULE
*
textmod
;
const
char
*
mirror
;
...
...
@@ -601,7 +614,7 @@ static void CreateComponentsSection( FILE* aFile, BOARD* aPcb )
// Please note, the width is approx
fprintf
(
aFile
,
" 0 0 %g %g
\n
"
,
(
textmod
->
m_Size
.
x
*
textmod
->
m_Text
.
Len
()
)
(
textmod
->
m_Size
.
x
*
textmod
->
m_Text
.
Len
()
)
/
SCALE_FACTOR
,
textmod
->
m_Size
.
y
/
SCALE_FACTOR
);
...
...
@@ -617,6 +630,7 @@ static void CreateComponentsSection( FILE* aFile, BOARD* aPcb )
fputs
(
"$ENDCOMPONENTS
\n\n
"
,
aFile
);
}
/* Emit the netlist (which is actually the thing for which GenCAD is used these
* days!); tracks are handled later */
static
void
CreateSignalsSection
(
FILE
*
aFile
,
BOARD
*
aPcb
)
...
...
@@ -691,7 +705,7 @@ static bool CreateHeaderInfoData( FILE* aFile, PCB_EDIT_FRAME* aFrame )
msg
=
wxT
(
"REVISION
\"
"
)
+
screen
->
m_Revision
+
wxT
(
" "
)
+
screen
->
m_Date
+
wxT
(
"
\"\n
"
);
fputs
(
TO_UTF8
(
msg
),
aFile
);
fputs
(
"UNITS INCH
\n
"
,
aFile
);
fputs
(
"UNITS INCH
\n
"
,
aFile
);
msg
.
Printf
(
wxT
(
"ORIGIN %g %g
\n
"
),
MapXTo
(
aFrame
->
m_Auxiliary_Axis_Position
.
x
),
MapYTo
(
aFrame
->
m_Auxiliary_Axis_Position
.
y
)
);
...
...
@@ -702,6 +716,7 @@ static bool CreateHeaderInfoData( FILE* aFile, PCB_EDIT_FRAME* aFrame )
return
true
;
}
/*
* Sort function used to sort tracks segments:
* items are sorted by netcode, then by width then by layer
...
...
@@ -756,7 +771,7 @@ static void CreateRoutesSection( FILE* aFile, BOARD* aPcb )
nbitems
++
;
}
tracklist
=
(
TRACK
**
)
operator
new
(
(
nbitems
+
1
)
*
sizeof
(
TRACK
*
)
);
tracklist
=
(
TRACK
**
)
operator
new
(
(
nbitems
+
1
)
*
sizeof
(
TRACK
*
)
);
nbitems
=
0
;
...
...
@@ -817,10 +832,10 @@ static void CreateRoutesSection( FILE* aFile, BOARD* aPcb )
if
(
track
->
Type
()
==
PCB_VIA_T
)
{
fprintf
(
aFile
,
"VIA VIA%d.%d.%X %g %g ALL %g via%d
\n
"
,
track
->
m_Width
,
track
->
GetDrillValue
(),
track
->
m_Width
,
track
->
GetDrillValue
(),
track
->
ReturnMaskLayer
()
&
master_layermask
,
MapXTo
(
track
->
m_Start
.
x
),
MapYTo
(
track
->
m_Start
.
y
),
track
->
GetDrillValue
()
/
SCALE_FACTOR
,
vianum
++
);
track
->
GetDrillValue
()
/
SCALE_FACTOR
,
vianum
++
);
}
}
...
...
@@ -845,8 +860,9 @@ static void CreateDevicesSection( FILE* aFile, BOARD* aPcb )
fprintf
(
aFile
,
"DEVICE
\"
%s
\"\n
"
,
TO_UTF8
(
module
->
m_Reference
->
m_Text
)
);
fprintf
(
aFile
,
"PART
\"
%s
\"\n
"
,
TO_UTF8
(
module
->
m_Value
->
m_Text
)
);
fprintf
(
aFile
,
"PACKAGE
\"
%s
\"\n
"
,
TO_UTF8
(
module
->
m_LibRef
)
);
// The TYPE attribute is almost freeform
const
char
*
ty
=
"TH"
;
const
char
*
ty
=
"TH"
;
if
(
module
->
m_Attributs
&
MOD_CMS
)
ty
=
"SMD"
;
if
(
module
->
m_Attributs
&
MOD_VIRTUAL
)
...
...
@@ -864,23 +880,25 @@ static void CreateDevicesSection( FILE* aFile, BOARD* aPcb )
static
void
CreateBoardSection
(
FILE
*
aFile
,
BOARD
*
aPcb
)
{
fputs
(
"$BOARD
\n
"
,
aFile
);
// Extract the board edges
for
(
EDA_ITEM
*
drawing
=
aPcb
->
m_Drawings
;
for
(
EDA_ITEM
*
drawing
=
aPcb
->
m_Drawings
;
drawing
!=
0
;
drawing
=
drawing
->
Next
()
)
{
if
(
drawing
->
Type
()
==
PCB_LINE_T
)
if
(
drawing
->
Type
()
==
PCB_LINE_T
)
{
DRAWSEGMENT
*
drawseg
=
dynamic_cast
<
DRAWSEGMENT
*>
(
drawing
);
if
(
drawseg
->
GetLayer
()
==
EDGE_N
)
DRAWSEGMENT
*
drawseg
=
dynamic_cast
<
DRAWSEGMENT
*>
(
drawing
);
if
(
drawseg
->
GetLayer
()
==
EDGE_N
)
{
// XXX GenCAD supports arc boundaries but I've seen nothing that reads them
fprintf
(
aFile
,
"LINE %g %g %g %g
\n
"
,
MapXTo
(
drawseg
->
m_Start
.
x
),
MapYTo
(
drawseg
->
m_Start
.
y
),
MapXTo
(
drawseg
->
m_End
.
x
),
MapYTo
(
drawseg
->
m_End
.
y
)
);
MapXTo
(
drawseg
->
m_Start
.
x
),
MapYTo
(
drawseg
->
m_Start
.
y
),
MapXTo
(
drawseg
->
m_End
.
x
),
MapYTo
(
drawseg
->
m_End
.
y
)
);
}
}
}
fputs
(
"$ENDBOARD
\n\n
"
,
aFile
);
}
...
...
@@ -963,6 +981,7 @@ static void FootprintWriteShape( FILE* aFile, MODULE* module )
{
EDGE_MODULE
*
PtEdge
;
EDA_ITEM
*
PtStruct
;
// Control Y axis change sign for flipped modules
int
Yaxis_sign
=
-
1
;
...
...
@@ -975,13 +994,13 @@ static void FootprintWriteShape( FILE* aFile, MODULE* module )
if
(
module
->
m_Attributs
&
MOD_VIRTUAL
)
{
fprintf
(
aFile
,
"INSERT SMD
\n
"
);
fprintf
(
aFile
,
"INSERT SMD
\n
"
);
}
else
{
if
(
module
->
m_Attributs
&
MOD_CMS
)
{
fprintf
(
aFile
,
"INSERT SMD
\n
"
);
fprintf
(
aFile
,
"INSERT SMD
\n
"
);
}
else
{
...
...
@@ -1015,6 +1034,7 @@ static void FootprintWriteShape( FILE* aFile, MODULE* module )
switch
(
PtStruct
->
Type
()
)
{
case
PCB_MODULE_TEXT_T
:
// If we wanted to export text, this is not the correct section
break
;
...
...
@@ -1030,7 +1050,7 @@ static void FootprintWriteShape( FILE* aFile, MODULE* module )
(
PtEdge
->
m_Start0
.
x
)
/
SCALE_FACTOR
,
(
Yaxis_sign
*
PtEdge
->
m_Start0
.
y
)
/
SCALE_FACTOR
,
(
PtEdge
->
m_End0
.
x
)
/
SCALE_FACTOR
,
(
Yaxis_sign
*
PtEdge
->
m_End0
.
y
)
/
SCALE_FACTOR
);
(
Yaxis_sign
*
PtEdge
->
m_End0
.
y
)
/
SCALE_FACTOR
);
break
;
case
S_CIRCLE
:
...
...
@@ -1053,7 +1073,8 @@ static void FootprintWriteShape( FILE* aFile, MODULE* module )
RotatePoint
(
&
arcendx
,
&
arcendy
,
-
PtEdge
->
m_Angle
);
arcendx
+=
PtEdge
->
m_Start0
.
x
;
arcendy
+=
PtEdge
->
m_Start0
.
y
;
if
(
Yaxis_sign
==
-
1
)
{
if
(
Yaxis_sign
==
-
1
)
{
// Flipping Y flips the arc direction too
fprintf
(
aFile
,
"ARC %g %g %g %g %g %g
\n
"
,
(
arcendx
)
/
SCALE_FACTOR
,
...
...
@@ -1062,7 +1083,9 @@ static void FootprintWriteShape( FILE* aFile, MODULE* module )
(
Yaxis_sign
*
PtEdge
->
m_End0
.
y
)
/
SCALE_FACTOR
,
(
PtEdge
->
m_Start0
.
x
)
/
SCALE_FACTOR
,
(
Yaxis_sign
*
PtEdge
->
m_Start0
.
y
)
/
SCALE_FACTOR
);
}
else
{
}
else
{
fprintf
(
aFile
,
"ARC %g %g %g %g %g %g
\n
"
,
(
PtEdge
->
m_End0
.
x
)
/
SCALE_FACTOR
,
(
Yaxis_sign
*
PtEdge
->
m_End0
.
y
)
/
SCALE_FACTOR
,
...
...
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