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
64f12ffe
Commit
64f12ffe
authored
Sep 25, 2007
by
dickelbeck
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
gerberview & pcbnew fixes
parent
5e448ec4
Changes
9
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
1003 additions
and
889 deletions
+1003
-889
change_log.txt
change_log.txt
+15
-0
files.cpp
gerbview/files.cpp
+191
-183
readgerb.cpp
gerbview/readgerb.cpp
+259
-249
rs274x.cpp
gerbview/rs274x.cpp
+475
-416
class_collector.h
include/class_collector.h
+3
-3
wxstruct.h
include/wxstruct.h
+5
-1
collectors.cpp
pcbnew/collectors.cpp
+25
-18
collectors.h
pcbnew/collectors.h
+7
-0
controle.cpp
pcbnew/controle.cpp
+23
-19
No files found.
change_log.txt
View file @
64f12ffe
...
...
@@ -4,6 +4,21 @@ Started 2007-June-11
Please add newer entries at the top, list the date and your name with
email address.
2007-Sep-25 UPDATE Dick Hollenbeck <dick@softplc.com>
================================================================================
+ pcbnew
* got rid of reference to global display options DisplayOpt.DisplayZones from
collectors.cpp so collectors.cpp can continue to be used in multiple future
(non-display related) general contexts.
* Moved TYPEZONE to end of AllBoardItems, added GENERAL_COLLECTOR::AllButZones to
provide support of DisplayOpt.DisplayZones.
* Added aHotKeyCode to PcbGeneralLocateAndDisplay()
+ gerbview
* viewer was getting stuck in a loop when loading a bad gerber file. Fixed
the bug, but line 223 through 225 of readgerb.cpp need review.
* beautified a few files with uncrustify, (any I had to look at).
2007-sept-25 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
================================================================================
+ pcbnew:
...
...
gerbview/files.cpp
View file @
64f12ffe
/******************************************************/
/* Files.cp: Lecture / Sauvegarde des fichiers gerber */
/******************************************************/
/******************************************************/
/* Files.cp: Lecture / Sauvegarde des fichiers gerber */
/******************************************************/
#include "fctsys.h"
...
...
@@ -12,27 +12,29 @@
/* Routines locales */
static
void
LoadDCodeFile
(
WinEDA_GerberFrame
*
frame
,
const
wxString
&
FullFileName
,
wxDC
*
DC
);
static
void
LoadDCodeFile
(
WinEDA_GerberFrame
*
frame
,
const
wxString
&
FullFileName
,
wxDC
*
DC
);
/********************************************************/
void
WinEDA_GerberFrame
::
Files_io
(
wxCommandEvent
&
event
)
void
WinEDA_GerberFrame
::
Files_io
(
wxCommandEvent
&
event
)
/********************************************************/
/* Gestion generale des commandes de lecture de fichiers
*/
*/
{
int
id
=
event
.
GetId
();
wxClientDC
dc
(
DrawPanel
);
int
id
=
event
.
GetId
();
wxClientDC
dc
(
DrawPanel
);
DrawPanel
->
CursorOff
(
&
dc
);
DrawPanel
->
CursorOff
(
&
dc
);
switch
(
id
)
switch
(
id
)
{
case
ID_MENU_LOAD_FILE
:
case
ID_LOAD_FILE
:
if
(
Clear_Pcb
(
&
dc
,
TRUE
)
)
if
(
Clear_Pcb
(
&
dc
,
TRUE
)
)
{
LoadOneGerberFile
(
wxEmptyString
,
&
dc
,
0
);
LoadOneGerberFile
(
wxEmptyString
,
&
dc
,
0
);
}
break
;
...
...
@@ -41,7 +43,7 @@ wxClientDC dc(DrawPanel);
{
int
layer
=
GetScreen
()
->
m_Active_Layer
;
GetScreen
()
->
m_Active_Layer
++
;
if
(
!
LoadOneGerberFile
(
wxEmptyString
,
&
dc
,
0
)
)
if
(
!
LoadOneGerberFile
(
wxEmptyString
,
&
dc
,
0
)
)
GetScreen
()
->
m_Active_Layer
=
layer
;
SetToolbars
();
}
...
...
@@ -49,13 +51,13 @@ wxClientDC dc(DrawPanel);
case
ID_MENU_APPEND_FILE
:
case
ID_APPEND_FILE
:
LoadOneGerberFile
(
wxEmptyString
,
&
dc
,
0
);
LoadOneGerberFile
(
wxEmptyString
,
&
dc
,
0
);
break
;
case
ID_MENU_NEW_BOARD
:
case
ID_NEW_BOARD
:
Clear_Pcb
(
&
dc
,
TRUE
);
Zoom_Automatique
(
FALSE
);
Clear_Pcb
(
&
dc
,
TRUE
);
Zoom_Automatique
(
FALSE
);
GetScreen
()
->
SetRefreshReq
();
break
;
...
...
@@ -69,63 +71,64 @@ wxClientDC dc(DrawPanel);
case
ID_LOAD_FILE_8
:
case
ID_LOAD_FILE_9
:
case
ID_LOAD_FILE_10
:
if
(
Clear_Pcb
(
&
dc
,
TRUE
)
)
if
(
Clear_Pcb
(
&
dc
,
TRUE
)
)
{
LoadOneGerberFile
(
GetLastProject
(
id
-
ID_LOAD_FILE_1
).
GetData
(),
&
dc
,
FALSE
);
GetLastProject
(
id
-
ID_LOAD_FILE_1
).
GetData
(),
&
dc
,
FALSE
);
}
break
;
case
ID_GERBVIEW_LOAD_DRILL_FILE
:
DisplayError
(
this
,
_
(
"Not yet available..."
)
);
DisplayError
(
this
,
_
(
"Not yet available..."
)
);
break
;
case
ID_GERBVIEW_LOAD_DCODE_FILE
:
LoadDCodeFile
(
this
,
wxEmptyString
,
&
dc
);
LoadDCodeFile
(
this
,
wxEmptyString
,
&
dc
);
break
;
case
ID_SAVE_BOARD
:
case
ID_MENU_SAVE_BOARD
:
SaveGerberFile
(
GetScreen
()
->
m_FileName
,
&
dc
);
SaveGerberFile
(
GetScreen
()
->
m_FileName
,
&
dc
);
break
;
case
ID_MENU_SAVE_BOARD_AS
:
SaveGerberFile
(
wxEmptyString
,
&
dc
);
SaveGerberFile
(
wxEmptyString
,
&
dc
);
break
;
default
:
DisplayError
(
this
,
wxT
(
"File_io Internal Error"
)
);
DisplayError
(
this
,
wxT
(
"File_io Internal Error"
)
);
break
;
}
DrawPanel
->
MouseToCursorSchema
();
DrawPanel
->
CursorOn
(
&
dc
);
DrawPanel
->
CursorOn
(
&
dc
);
}
/*******************************************************************************************/
int
WinEDA_GerberFrame
::
LoadOneGerberFile
(
const
wxString
&
FullFileName
,
wxDC
*
DC
,
int
mode
)
int
WinEDA_GerberFrame
::
LoadOneGerberFile
(
const
wxString
&
FullFileName
,
wxDC
*
DC
,
int
mode
)
/*******************************************************************************************/
/*
Lecture d'un fichier PCB, le nom etant dans PcbNameBuffer.s
retourne:
0 si fichier non lu ( annulation de commande ... )
1 si OK
*/
*
Lecture d'un fichier PCB, le nom etant dans PcbNameBuffer.s
*
retourne:
*
0 si fichier non lu ( annulation de commande ... )
*
1 si OK
*/
{
wxString
filename
=
FullFileName
;
wxString
path
=
wxPathOnly
(
FullFileName
);
wxString
filename
=
FullFileName
;
wxString
path
=
wxPathOnly
(
FullFileName
);
ActiveScreen
=
GetScreen
();
if
(
filename
==
wxEmptyString
)
if
(
filename
==
wxEmptyString
)
{
wxString
mask
=
wxT
(
"*"
)
+
g_PhotoFilenameExt
;
mask
+=
wxT
(
";*.gbr;*.gbx;*.lgr;*.ger"
);
filename
=
EDA_FileSelector
(
_
(
"Gerber files:"
),
wxString
mask
=
wxT
(
"*"
)
+
g_PhotoFilenameExt
;
mask
+=
wxT
(
";*.gbr;*.gbx;*.lgr;*.ger"
);
filename
=
EDA_FileSelector
(
_
(
"Gerber files:"
),
path
,
/* Chemin par defaut */
wxEmptyString
,
/* nom fichier par defaut */
g_PhotoFilenameExt
,
/* extension par defaut */
...
...
@@ -134,45 +137,50 @@ wxString path = wxPathOnly(FullFileName);
0
,
FALSE
);
if
(
filename
==
wxEmptyString
)
return
FALSE
;
if
(
filename
==
wxEmptyString
)
return
FALSE
;
}
GetScreen
()
->
m_FileName
=
filename
;
wxSetWorkingDirectory
(
path
);
ChangeFileNameExt
(
filename
,
g_PenFilenameExt
);
if
(
Read_GERBER_File
(
DC
,
GetScreen
()
->
m_FileName
,
filename
)
)
SetLastProject
(
GetScreen
()
->
m_FileName
);
wxSetWorkingDirectory
(
path
);
ChangeFileNameExt
(
filename
,
g_PenFilenameExt
);
Zoom_Automatique
(
FALSE
);
if
(
Read_GERBER_File
(
DC
,
GetScreen
()
->
m_FileName
,
filename
)
)
SetLastProject
(
GetScreen
()
->
m_FileName
);
Zoom_Automatique
(
FALSE
);
GetScreen
()
->
SetRefreshReq
();
g_SaveTime
=
time
(
NULL
);
g_SaveTime
=
time
(
NULL
);
return
(
1
)
;
return
1
;
}
/**********************************************************************************************/
static
void
LoadDCodeFile
(
WinEDA_GerberFrame
*
frame
,
const
wxString
&
FullFileName
,
wxDC
*
DC
)
static
void
LoadDCodeFile
(
WinEDA_GerberFrame
*
frame
,
const
wxString
&
FullFileName
,
wxDC
*
DC
)
/**********************************************************************************************/
/*
Lecture d'un fichier PCB, le nom etant dans PcbNameBuffer.s
retourne:
0 si fichier non lu ( annulation de commande ... )
1 si OK
*/
*
Lecture d'un fichier PCB, le nom etant dans PcbNameBuffer.s
*
retourne:
*
0 si fichier non lu ( annulation de commande ... )
*
1 si OK
*/
{
wxString
filename
=
FullFileName
;
wxString
filename
=
FullFileName
;
ActiveScreen
=
frame
->
GetScreen
();
if
(
filename
==
wxEmptyString
)
if
(
filename
==
wxEmptyString
)
{
wxString
penfilesmask
(
wxT
(
"*"
)
);
wxString
penfilesmask
(
wxT
(
"*"
)
);
penfilesmask
+=
g_PenFilenameExt
;
filename
=
frame
->
GetScreen
()
->
m_FileName
;
ChangeFileNameExt
(
filename
,
g_PenFilenameExt
);
filename
=
EDA_FileSelector
(
_
(
"D codes files:"
),
ChangeFileNameExt
(
filename
,
g_PenFilenameExt
);
filename
=
EDA_FileSelector
(
_
(
"D codes files:"
),
wxEmptyString
,
/* Chemin par defaut */
filename
,
/* nom fichier par defaut */
g_PenFilenameExt
,
/* extension par defaut */
...
...
@@ -181,29 +189,31 @@ wxString filename = FullFileName;
0
,
TRUE
);
if
(
filename
==
wxEmptyString
)
return
;
if
(
filename
==
wxEmptyString
)
return
;
}
frame
->
Read_D_Code_File
(
filename
);
frame
->
Read_D_Code_File
(
filename
);
frame
->
CopyDCodesSizeToItems
();
frame
->
GetScreen
()
->
SetRefreshReq
();
}
/*******************************************************************************/
bool
WinEDA_GerberFrame
::
SaveGerberFile
(
const
wxString
&
FullFileName
,
wxDC
*
DC
)
bool
WinEDA_GerberFrame
::
SaveGerberFile
(
const
wxString
&
FullFileName
,
wxDC
*
DC
)
/*******************************************************************************/
/* Sauvegarde du fichier PCB en format ASCII
*/
*/
{
wxString
filename
=
FullFileName
;
wxString
filename
=
FullFileName
;
if
(
filename
==
wxEmptyString
)
{
wxString
mask
(
wxT
(
"*"
));
wxString
mask
(
wxT
(
"*"
)
);
mask
+=
g_PhotoFilenameExt
;
filename
=
EDA_FileSelector
(
_
(
"Gerber files:"
),
filename
=
EDA_FileSelector
(
_
(
"Gerber files:"
),
wxEmptyString
,
/* Chemin par defaut */
GetScreen
()
->
m_FileName
,
/* nom fichier par defaut */
g_PhotoFilenameExt
,
/* extension par defaut */
...
...
@@ -212,7 +222,8 @@ wxString filename = FullFileName;
wxFD_SAVE
,
FALSE
);
if
(
filename
.
IsEmpty
()
)
return
FALSE
;
if
(
filename
.
IsEmpty
()
)
return
FALSE
;
}
GetScreen
()
->
m_FileName
=
filename
;
...
...
@@ -221,6 +232,3 @@ wxString filename = FullFileName;
return
TRUE
;
}
gerbview/readgerb.cpp
View file @
64f12ffe
This diff is collapsed.
Click to expand it.
gerbview/rs274x.cpp
View file @
64f12ffe
This diff is collapsed.
Click to expand it.
include/class_collector.h
View file @
64f12ffe
...
...
@@ -112,11 +112,11 @@ public:
/**
* Function Remove
* removes the item at item_position (first position is 0);
* @param
item_position index
.
* @param
ndx The index into the list
.
*/
void
Remove
(
unsigned
int
item_position
)
void
Remove
(
int
ndx
)
{
m_List
.
erase
(
m_List
.
begin
()
+
item_position
);
m_List
.
erase
(
m_List
.
begin
()
+
(
unsigned
)
ndx
);
}
/**
...
...
include/wxstruct.h
View file @
64f12ffe
...
...
@@ -400,8 +400,12 @@ public:
* a popup menu is shown which allows the user to pick which item he/she is
* interested in. Once an item is chosen, then it is make the "current item"
* and the status window is updated to reflect this.
*
* @param aHotKeyCode The hotkey which relates to the caller and determines the
* type of search to be performed. If zero, then the mouse tools will be
* tested instead.
*/
BOARD_ITEM
*
PcbGeneralLocateAndDisplay
();
BOARD_ITEM
*
PcbGeneralLocateAndDisplay
(
int
aHotKeyCode
=
0
);
BOARD_ITEM
*
Locate
(
int
typeloc
,
int
LayerSearch
);
void
ProcessItemSelection
(
wxCommandEvent
&
event
);
...
...
pcbnew/collectors.cpp
View file @
64f12ffe
...
...
@@ -38,10 +38,10 @@ const KICAD_T GENERAL_COLLECTOR::AllBoardItems[] = {
TYPECOTATION
,
TYPEVIA
,
TYPETRACK
,
TYPEZONE
,
TYPEPAD
,
TYPETEXTEMODULE
,
TYPEMODULE
,
TYPEZONE
,
EOT
};
...
...
@@ -52,8 +52,19 @@ const KICAD_T GENERAL_COLLECTOR::PrimaryItems[] = {
TYPECOTATION
,
TYPEVIA
,
TYPETRACK
,
// TYPEPAD, TYPEPAD and TYPETEXTEMODULE are handled in a subsearch
// TYPETEXTEMODULE,
TYPEMODULE
,
EOT
};
const
KICAD_T
GENERAL_COLLECTOR
::
AllButZones
[]
=
{
TYPETEXTE
,
TYPEDRAWSEGMENT
,
TYPECOTATION
,
TYPEVIA
,
TYPETRACK
,
TYPEPAD
,
TYPETEXTEMODULE
,
TYPEMODULE
,
EOT
};
...
...
@@ -95,7 +106,6 @@ SEARCH_RESULT GENERAL_COLLECTOR::Inspect( EDA_BaseStruct* testItem, const void*
{
BOARD_ITEM
*
item
=
(
BOARD_ITEM
*
)
testItem
;
MODULE
*
module
=
NULL
;
bool
skip_item
=
false
;
#if 0 // debugging
static int breakhere = 0;
...
...
@@ -173,7 +183,6 @@ SEARCH_RESULT GENERAL_COLLECTOR::Inspect( EDA_BaseStruct* testItem, const void*
case
TYPETRACK
:
break
;
case
TYPEZONE
:
if
(
!
DisplayOpt
.
DisplayZones
)
skip_item
=
true
;
break
;
case
TYPETEXTE
:
break
;
...
...
@@ -183,7 +192,6 @@ SEARCH_RESULT GENERAL_COLLECTOR::Inspect( EDA_BaseStruct* testItem, const void*
break
;
case
TYPETEXTEMODULE
:
{
module
=
(
MODULE
*
)
item
->
GetParent
();
if
(
m_Guide
->
IgnoreMTextsMarkedNoShow
()
&&
((
TEXTE_MODULE
*
)
item
)
->
m_NoShow
)
...
...
@@ -197,7 +205,6 @@ SEARCH_RESULT GENERAL_COLLECTOR::Inspect( EDA_BaseStruct* testItem, const void*
if
(
m_Guide
->
IgnoreMTextsOnCmp
()
&&
module
->
GetLayer
()
==
LAYER_CMP_N
)
goto
exit
;
}
}
break
;
case
TYPEMODULE
:
...
...
@@ -234,7 +241,7 @@ SEARCH_RESULT GENERAL_COLLECTOR::Inspect( EDA_BaseStruct* testItem, const void*
{
if
(
item
->
HitTest
(
m_RefPos
)
)
{
if
(
!
skip_item
)
Append
(
item
);
Append
(
item
);
goto
exit
;
}
}
...
...
@@ -261,7 +268,7 @@ SEARCH_RESULT GENERAL_COLLECTOR::Inspect( EDA_BaseStruct* testItem, const void*
{
if
(
item
->
HitTest
(
m_RefPos
)
)
{
if
(
!
skip_item
)
Append2nd
(
item
);
Append2nd
(
item
);
goto
exit
;
}
}
...
...
pcbnew/collectors.h
View file @
64f12ffe
...
...
@@ -147,6 +147,7 @@ public:
*/
virtual
bool
IgnoreModulesOnCmp
()
const
=
0
;
/**
* Function UseHitTesting
* @return bool - true if Inspect() should use BOARD_ITEM::HitTest()
...
...
@@ -201,6 +202,12 @@ public:
static
const
KICAD_T
AllBoardItems
[];
/**
* A scan list for all editable board items, except zones
*/
static
const
KICAD_T
AllButZones
[];
/**
* A scan list for all primary board items, omitting items which are subordinate to
* a MODULE, such as D_PAD and TEXTEMODULE.
...
...
pcbnew/controle.cpp
View file @
64f12ffe
...
...
@@ -153,9 +153,9 @@ static BOARD_ITEM* AllAreModulesAndReturnSmallestIfSo( GENERAL_COLLECTOR* aColle
}
/*************************************************************/
BOARD_ITEM
*
WinEDA_BasePcbFrame
::
PcbGeneralLocateAndDisplay
()
/*************************************************************/
/*************************************************************
***************
/
BOARD_ITEM
*
WinEDA_BasePcbFrame
::
PcbGeneralLocateAndDisplay
(
int
aHotKeyCode
)
/*************************************************************
***************
/
{
BOARD_ITEM
*
item
;
...
...
@@ -166,7 +166,11 @@ BOARD_ITEM* WinEDA_BasePcbFrame::PcbGeneralLocateAndDisplay()
const
KICAD_T
*
scanList
;
if
(
m_ID_current_state
==
0
)
if
(
aHotKeyCode
)
{
// switch here
}
else
if
(
m_ID_current_state
==
0
)
{
switch
(
m_HTOOL_current_state
)
{
...
...
@@ -175,7 +179,9 @@ BOARD_ITEM* WinEDA_BasePcbFrame::PcbGeneralLocateAndDisplay()
break
;
default
:
scanList
=
GENERAL_COLLECTOR
::
AllBoardItems
;
scanList
=
DisplayOpt
.
DisplayZones
?
GENERAL_COLLECTOR
::
AllBoardItems
:
GENERAL_COLLECTOR
::
AllButZones
;
break
;
}
}
...
...
@@ -196,26 +202,32 @@ BOARD_ITEM* WinEDA_BasePcbFrame::PcbGeneralLocateAndDisplay()
break
;
default
:
scanList
=
GENERAL_COLLECTOR
::
AllBoardItems
;
scanList
=
DisplayOpt
.
DisplayZones
?
GENERAL_COLLECTOR
::
AllBoardItems
:
GENERAL_COLLECTOR
::
AllButZones
;
}
}
m_Collector
->
Collect
(
m_Pcb
,
scanList
,
GetScreen
()
->
RefPos
(
true
),
guide
);
/* debugging: print out the collected items, showing their priority order too.
* for( unsigned i=0; i<m_Collector->GetCount(); ++i )
* (*m_Collector)[i]->Show( 0, std::cout );
*/
#if 0
// debugging: print out the collected items, showing their priority order too.
for( unsigned i=0; i<m_Collector->GetCount(); ++i )
(*m_Collector)[i]->Show( 0, std::cout );
#endif
/* Remove redundancies: most of time, zones are found twice,
* because zones are filled twice ( once by by horizontal and once by vertical segments )
*/
unsigned
long
timestampzone
=
0
;
for
(
unsigned
int
ii
=
0
;
ii
<
m_Collector
->
GetCount
();
ii
++
)
int
limit
=
m_Collector
->
GetCount
();
for
(
int
ii
=
0
;
ii
<
limit
;
ii
++
)
{
item
=
(
*
m_Collector
)[
ii
];
if
(
item
->
Type
()
!=
TYPEZONE
)
continue
;
/* Found a TYPE ZONE */
if
(
item
->
m_TimeStamp
==
timestampzone
)
// Remove it, redundant, zone already found
{
...
...
@@ -282,14 +294,6 @@ BOARD_ITEM* WinEDA_BasePcbFrame::PcbGeneralLocateAndDisplay()
}
return
item
;
/* old way:
*
* item = Locate( CURSEUR_OFF_GRILLE, GetScreen()->m_Active_Layer );
* if( item == NULL )
* item = Locate( CURSEUR_OFF_GRILLE, -1 );
* return item;
*/
}
...
...
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