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
bd99012a
Commit
bd99012a
authored
Mar 02, 2011
by
Wayne Stambaugh
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix load gerber file path bug, fixes lp:712104.
parent
85b8fc66
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
151 additions
and
106 deletions
+151
-106
files.cpp
gerbview/files.cpp
+29
-15
gerberframe.cpp
gerbview/gerberframe.cpp
+21
-0
wxGerberFrame.h
gerbview/wxGerberFrame.h
+101
-91
No files found.
gerbview/files.cpp
View file @
bd99012a
...
@@ -39,19 +39,19 @@ void WinEDA_GerberFrame::Files_io( wxCommandEvent& event )
...
@@ -39,19 +39,19 @@ void WinEDA_GerberFrame::Files_io( wxCommandEvent& event )
switch
(
id
)
switch
(
id
)
{
{
case
wxID_FILE
:
case
wxID_FILE
:
{
Erase_Current_Layer
(
false
);
Erase_Current_Layer
(
false
);
LoadGerberFiles
(
wxEmptyString
);
LoadGerberFiles
(
wxEmptyString
);
break
;
break
;
}
case
ID_MENU_INC_LAYER_AND_APPEND_FILE
:
case
ID_MENU_INC_LAYER_AND_APPEND_FILE
:
case
ID_INC_LAYER_AND_APPEND_FILE
:
case
ID_INC_LAYER_AND_APPEND_FILE
:
{
{
int
origLayer
=
getActiveLayer
();
int
origLayer
=
getNextAvailableLayer
();
if
(
origLayer
<
NB_LAYERS
)
if
(
origLayer
!=
NO_AVAILABLE_LAYERS
)
{
{
setActiveLayer
(
origLayer
+
1
);
setActiveLayer
(
origLayer
);
Erase_Current_Layer
(
false
);
Erase_Current_Layer
(
false
);
if
(
!
LoadGerberFiles
(
wxEmptyString
)
)
if
(
!
LoadGerberFiles
(
wxEmptyString
)
)
...
@@ -61,7 +61,7 @@ void WinEDA_GerberFrame::Files_io( wxCommandEvent& event )
...
@@ -61,7 +61,7 @@ void WinEDA_GerberFrame::Files_io( wxCommandEvent& event )
{
{
wxString
msg
;
wxString
msg
;
msg
.
Printf
(
_
(
"GerbView only supports a maximum of %d layers. You must first \
msg
.
Printf
(
_
(
"GerbView only supports a maximum of %d layers. You must first \
delete
an existing layer to load any new layers."
),
NB_LAYERS
);
clear
an existing layer to load any new layers."
),
NB_LAYERS
);
wxMessageBox
(
msg
);
wxMessageBox
(
msg
);
}
}
}
}
...
@@ -96,7 +96,7 @@ bool WinEDA_GerberFrame::LoadGerberFiles( const wxString& aFullFileName )
...
@@ -96,7 +96,7 @@ bool WinEDA_GerberFrame::LoadGerberFiles( const wxString& aFullFileName )
wxFileName
filename
=
aFullFileName
;
wxFileName
filename
=
aFullFileName
;
wxString
currentPath
;
wxString
currentPath
;
if
(
!
filename
.
IsOk
()
)
if
(
!
filename
.
IsOk
()
)
{
{
/* Standard gerber filetypes
/* Standard gerber filetypes
* (See http://en.wikipedia.org/wiki/Gerber_File)
* (See http://en.wikipedia.org/wiki/Gerber_File)
...
@@ -144,7 +144,7 @@ bool WinEDA_GerberFrame::LoadGerberFiles( const wxString& aFullFileName )
...
@@ -144,7 +144,7 @@ bool WinEDA_GerberFrame::LoadGerberFiles( const wxString& aFullFileName )
if
(
dlg
.
ShowModal
()
==
wxID_CANCEL
)
if
(
dlg
.
ShowModal
()
==
wxID_CANCEL
)
return
false
;
return
false
;
dlg
.
Get
Filename
s
(
filenamesList
);
dlg
.
Get
Path
s
(
filenamesList
);
currentPath
=
wxGetCwd
();
currentPath
=
wxGetCwd
();
}
}
else
else
...
@@ -160,18 +160,32 @@ bool WinEDA_GerberFrame::LoadGerberFiles( const wxString& aFullFileName )
...
@@ -160,18 +160,32 @@ bool WinEDA_GerberFrame::LoadGerberFiles( const wxString& aFullFileName )
for
(
unsigned
ii
=
0
;
ii
<
filenamesList
.
GetCount
();
ii
++
)
for
(
unsigned
ii
=
0
;
ii
<
filenamesList
.
GetCount
();
ii
++
)
{
{
wxFileName
filename
=
filenamesList
[
ii
];
wxFileName
filename
=
filenamesList
[
ii
];
if
(
!
filename
.
IsAbsolute
()
)
filename
.
SetPath
(
currentPath
);
filename
.
SetPath
(
currentPath
);
GetScreen
()
->
SetFileName
(
filename
.
GetFullPath
()
);
if
(
!
filename
.
HasExt
()
)
filename
.
SetExt
(
g_PenFilenameExt
);
filename
.
SetExt
(
g_PenFilenameExt
);
GetScreen
()
->
SetFileName
(
filename
.
GetFullPath
()
);
setActiveLayer
(
layer
,
false
);
setActiveLayer
(
layer
,
false
);
if
(
Read_GERBER_File
(
GetScreen
()
->
GetFileName
(),
filename
.
GetFullPath
()
)
)
if
(
Read_GERBER_File
(
filename
.
GetFullPath
(),
filename
.
GetFullPath
()
)
)
{
{
SetLastProject
(
GetScreen
()
->
GetFileName
()
);
SetLastProject
(
GetScreen
()
->
GetFileName
()
);
layer
++
;
if
(
layer
>=
NB_LAYERS
)
layer
=
getNextAvailableLayer
(
layer
);
layer
=
0
;
if
(
layer
==
NO_AVAILABLE_LAYERS
)
{
wxString
msg
=
wxT
(
"No more empty layers are available. The remaining gerber "
);
msg
+=
wxT
(
"files will not be loaded."
);
wxMessageBox
(
msg
);
break
;
}
setActiveLayer
(
layer
,
false
);
}
}
}
}
...
@@ -179,7 +193,7 @@ bool WinEDA_GerberFrame::LoadGerberFiles( const wxString& aFullFileName )
...
@@ -179,7 +193,7 @@ bool WinEDA_GerberFrame::LoadGerberFiles( const wxString& aFullFileName )
g_SaveTime
=
time
(
NULL
);
g_SaveTime
=
time
(
NULL
);
// Synchronize layers tools with actual active layer:
// Synchronize layers tools with actual active layer:
setActiveLayer
(
getActiveLayer
()
);
setActiveLayer
(
getActiveLayer
()
);
syncLayerBox
();
syncLayerBox
();
return
true
;
return
true
;
...
...
gerbview/gerberframe.cpp
View file @
bd99012a
...
@@ -404,6 +404,27 @@ void WinEDA_GerberFrame::SetElementVisibility( int aGERBER_VISIBLE, bool aNewSta
...
@@ -404,6 +404,27 @@ void WinEDA_GerberFrame::SetElementVisibility( int aGERBER_VISIBLE, bool aNewSta
}
}
int
WinEDA_GerberFrame
::
getNextAvailableLayer
(
int
aLayer
)
const
{
int
layer
=
aLayer
;
for
(
int
i
=
0
;
i
<
NB_LAYERS
;
i
++
)
{
GERBER_IMAGE
*
gerber
=
g_GERBER_List
[
layer
];
if
(
gerber
==
NULL
||
gerber
->
m_FileName
.
IsEmpty
()
)
return
layer
;
layer
++
;
if
(
layer
>=
NB_LAYERS
)
layer
=
0
;
}
return
NO_AVAILABLE_LAYERS
;
}
void
WinEDA_GerberFrame
::
syncLayerWidget
()
void
WinEDA_GerberFrame
::
syncLayerWidget
()
{
{
m_LayersManager
->
SelectLayer
(
getActiveLayer
()
);
m_LayersManager
->
SelectLayer
(
getActiveLayer
()
);
...
...
gerbview/wxGerberFrame.h
View file @
bd99012a
...
@@ -10,6 +10,10 @@
...
@@ -10,6 +10,10 @@
#include "class_gerbview_layer_widget.h"
#include "class_gerbview_layer_widget.h"
#include "class_layerchoicebox.h"
#include "class_layerchoicebox.h"
#define NO_AVAILABLE_LAYERS -1
/**
/**
* Command IDs for the gerber file viewer.
* Command IDs for the gerber file viewer.
*
*
...
@@ -33,9 +37,10 @@ enum id_gerbview_frm {
...
@@ -33,9 +37,10 @@ enum id_gerbview_frm {
class
DCODE_SELECTION_BOX
;
class
DCODE_SELECTION_BOX
;
/******************************************************************
/******************************************************************
*
class WinEDA_GerberFrame: this is the main window used in gerbview
*
class WinEDA_GerberFrame: this is the main window used in gerbview
******************************************************************/
******************************************************************/
class
WinEDA_GerberFrame
:
public
PCB_BASE_FRAME
class
WinEDA_GerberFrame
:
public
PCB_BASE_FRAME
{
{
...
@@ -53,16 +58,17 @@ public:
...
@@ -53,16 +58,17 @@ public:
private
:
private
:
int
m_displayMode
;
// Gerber images ("layers" in Gerbview) can be drawn:
int
m_displayMode
;
// Gerber images ("layers" in Gerbview) can be drawn:
// - in fast mode (write mode) but if there are negative
items
// - in fast mode (write mode) but if there are negative
//
only the last image is correctly drawn
//
items only the last image is correctly drawn (no
//
(no
problem to see only one image or when no negative items)
// problem to see only one image or when no negative items)
// - in "exact" mode (but slower) in write mode:
// - in "exact" mode (but slower) in write mode:
// last image covers previous images
// last image covers previous images
// - in "exact" mode (also slower) in OR mode
// - in "exact" mode (also slower) in OR mode
// (transparency mode)
// (transparency mode)
// m_displayMode = 0, 1 or 2
// m_displayMode = 0, 1 or 2
bool
m_show_layer_manager_tools
;
bool
m_show_layer_manager_tools
;
wxArrayString
m_Messages
;
// An array sting to store warning messages when reaging a gerber file
wxArrayString
m_Messages
;
// An array sting to store warning messages when reaging
// a gerber file
public
:
WinEDA_GerberFrame
(
wxWindow
*
father
,
const
wxString
&
title
,
public
:
WinEDA_GerberFrame
(
wxWindow
*
father
,
const
wxString
&
title
,
const
wxPoint
&
pos
,
const
wxSize
&
size
,
const
wxPoint
&
pos
,
const
wxSize
&
size
,
...
@@ -198,6 +204,17 @@ public: WinEDA_GerberFrame( wxWindow* father, const wxString& title,
...
@@ -198,6 +204,17 @@ public: WinEDA_GerberFrame( wxWindow* father, const wxString& title,
}
}
/**
* Function getNextAvailableLayer
* finds the next empty layer starting at \a aLayer and returns it to the caller. If no
* empty layers are found, NO_AVAILABLE_LAYERS is return.
* @param aLayer The first layer to search.
* @return The first empty layer found or NO_AVAILABLE_LAYERS.
*/
int
getNextAvailableLayer
(
int
aLayer
=
0
)
const
;
bool
hasAvailableLayers
()
const
{
return
getNextAvailableLayer
()
!=
NO_AVAILABLE_LAYERS
;
}
/**
/**
* Function syncLayerWidget
* Function syncLayerWidget
* updates the currently "selected" layer within the PCB_LAYER_WIDGET.
* updates the currently "selected" layer within the PCB_LAYER_WIDGET.
...
@@ -350,15 +367,12 @@ public: WinEDA_GerberFrame( wxWindow* father, const wxString& title,
...
@@ -350,15 +367,12 @@ public: WinEDA_GerberFrame( wxWindow* father, const wxString& title,
void
Genere_HPGL
(
const
wxString
&
FullFileName
,
int
Layers
);
void
Genere_HPGL
(
const
wxString
&
FullFileName
,
int
Layers
);
void
Genere_GERBER
(
const
wxString
&
FullFileName
,
int
Layers
);
void
Genere_GERBER
(
const
wxString
&
FullFileName
,
int
Layers
);
void
Genere_PS
(
const
wxString
&
FullFileName
,
int
Layers
);
void
Genere_PS
(
const
wxString
&
FullFileName
,
int
Layers
);
void
Plot_Layer_HPGL
(
FILE
*
File
,
int
masque_layer
,
void
Plot_Layer_HPGL
(
FILE
*
File
,
int
masque_layer
,
int
garde
,
bool
trace_via
,
int
garde
,
bool
trace_via
,
GRTraceMode
trace_mode
);
GRTraceMode
trace_mode
);
void
Plot_Layer_GERBER
(
FILE
*
File
,
int
masque_layer
,
void
Plot_Layer_GERBER
(
FILE
*
File
,
int
masque_layer
,
int
garde
,
bool
trace_via
,
int
garde
,
bool
trace_via
,
GRTraceMode
trace_mode
);
GRTraceMode
trace_mode
);
int
Gen_D_CODE_File
(
const
wxString
&
Name_File
);
int
Gen_D_CODE_File
(
const
wxString
&
Name_File
);
void
Plot_Layer_PS
(
FILE
*
File
,
int
masque_layer
,
void
Plot_Layer_PS
(
FILE
*
File
,
int
masque_layer
,
int
garde
,
bool
trace_via
,
int
garde
,
bool
trace_via
,
GRTraceMode
trace_mode
);
GRTraceMode
trace_mode
);
void
Files_io
(
wxCommandEvent
&
event
);
void
Files_io
(
wxCommandEvent
&
event
);
...
@@ -367,8 +381,8 @@ public: WinEDA_GerberFrame( wxWindow* father, const wxString& title,
...
@@ -367,8 +381,8 @@ public: WinEDA_GerberFrame( wxWindow* father, const wxString& title,
/**
/**
* function LoadGerberFiles
* function LoadGerberFiles
* Load a photoplot (Gerber) file or many files.
* Load a photoplot (Gerber) file or many files.
* @param aFileName - void string or file name with full path to open or empty string to
open a new
* @param aFileName - void string or file name with full path to open or empty string to
* file. In this case one one file is loaded
*
open a new
file. In this case one one file is loaded
* if void string: user will be prompted for filename(s)
* if void string: user will be prompted for filename(s)
* @return true if file was opened successfully.
* @return true if file was opened successfully.
*/
*/
...
@@ -418,8 +432,7 @@ public: WinEDA_GerberFrame( wxWindow* father, const wxString& title,
...
@@ -418,8 +432,7 @@ public: WinEDA_GerberFrame( wxWindow* father, const wxString& title,
* currently: do nothing in gerbview.
* currently: do nothing in gerbview.
* but must be defined because it is a pure virtual in PCB_BASE_FRAME
* but must be defined because it is a pure virtual in PCB_BASE_FRAME
*/
*/
virtual
void
SaveCopyInUndoList
(
virtual
void
SaveCopyInUndoList
(
BOARD_ITEM
*
aItemToCopy
,
BOARD_ITEM
*
aItemToCopy
,
UndoRedoOpType
aTypeCommand
=
UR_UNSPECIFIED
,
UndoRedoOpType
aTypeCommand
=
UR_UNSPECIFIED
,
const
wxPoint
&
aTransformPoint
=
wxPoint
(
0
,
0
)
)
{
}
const
wxPoint
&
aTransformPoint
=
wxPoint
(
0
,
0
)
)
{
}
...
@@ -432,15 +445,13 @@ public: WinEDA_GerberFrame( wxWindow* father, const wxString& title,
...
@@ -432,15 +445,13 @@ public: WinEDA_GerberFrame( wxWindow* father, const wxString& title,
* @param aTransformPoint = the reference point of the transformation,
* @param aTransformPoint = the reference point of the transformation,
* for commands like move
* for commands like move
*/
*/
virtual
void
SaveCopyInUndoList
(
virtual
void
SaveCopyInUndoList
(
PICKED_ITEMS_LIST
&
aItemsList
,
PICKED_ITEMS_LIST
&
aItemsList
,
UndoRedoOpType
aTypeCommand
,
UndoRedoOpType
aTypeCommand
,
const
wxPoint
&
aTransformPoint
=
wxPoint
(
0
,
0
)
)
const
wxPoint
&
aTransformPoint
=
wxPoint
(
0
,
0
)
)
{
{
// currently: do nothing in gerbview.
// currently: do nothing in gerbview.
}
}
/** Virtual function PrintPage
/** Virtual function PrintPage
* used to print a page
* used to print a page
* @param aDC = wxDC given by the calling print function
* @param aDC = wxDC given by the calling print function
...
@@ -448,8 +459,7 @@ public: WinEDA_GerberFrame( wxWindow* father, const wxString& title,
...
@@ -448,8 +459,7 @@ public: WinEDA_GerberFrame( wxWindow* father, const wxString& title,
* @param aPrintMirrorMode = not used here (Set when printing in mirror mode)
* @param aPrintMirrorMode = not used here (Set when printing in mirror mode)
* @param aData = a pointer on an auxiliary data (not always used, NULL if not used)
* @param aData = a pointer on an auxiliary data (not always used, NULL if not used)
*/
*/
virtual
void
PrintPage
(
wxDC
*
aDC
,
virtual
void
PrintPage
(
wxDC
*
aDC
,
int
aPrintMasklayer
,
bool
aPrintMirrorMode
,
int
aPrintMasklayer
,
bool
aPrintMirrorMode
,
void
*
aData
=
NULL
);
void
*
aData
=
NULL
);
/**
/**
...
...
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