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
7e7a7937
Commit
7e7a7937
authored
Dec 17, 2007
by
CHARRAS
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
some changes about zones: enhanced dialog, and files reorganisation
parent
fdb2905b
Changes
23
Show whitespace changes
Inline
Side-by-side
Showing
23 changed files
with
3714 additions
and
921 deletions
+3714
-921
fill_zone.xpm
bitmaps/fill_zone.xpm
+41
-0
change_log.txt
change_log.txt
+5
-0
listboxes.cpp
cvpcb/listboxes.cpp
+12
-6
readschematicnetlist.cpp
cvpcb/readschematicnetlist.cpp
+360
-318
bitmaps.h
include/bitmaps.h
+1
-0
build_version.h
include/build_version.h
+1
-1
treeprj_datas.cpp
kicad/treeprj_datas.cpp
+1
-1
basepcbframe.cpp
pcbnew/basepcbframe.cpp
+0
-3
class_board.cpp
pcbnew/class_board.cpp
+78
-0
class_board.h
pcbnew/class_board.h
+15
-2
dialog_zones_by_polygon.cpp
pcbnew/dialog_zones_by_polygon.cpp
+453
-0
dialog_zones_by_polygon.h
pcbnew/dialog_zones_by_polygon.h
+130
-0
dialog_zones_by_polygon.pjd
pcbnew/dialog_zones_by_polygon.pjd
+1373
-0
filling_zone_algorithm.cpp
pcbnew/filling_zone_algorithm.cpp
+612
-0
makefile.include
pcbnew/makefile.include
+15
-2
onrightclick.cpp
pcbnew/onrightclick.cpp
+2
-1
pcbnew.cpp
pcbnew/pcbnew.cpp
+0
-4
zones.cpp
pcbnew/zones.cpp
+12
-571
zones.h
pcbnew/zones.h
+5
-6
zones_by_polygon.cpp
pcbnew/zones_by_polygon.cpp
+582
-0
defs-macros.h
polygon/defs-macros.h
+10
-1
makefile.include
polygon/makefile.include
+5
-1
drawframe.cpp
share/drawframe.cpp
+1
-4
No files found.
bitmaps/fill_zone.xpm
0 → 100644
View file @
7e7a7937
/* XPM */
#ifndef XPMMAIN
extern const char *fill_zone_xpm[];
#else
const char *fill_zone_xpm[] = {
/* columns rows colors chars-per-pixel */
"16 16 15 1",
"# c #FCFEFC",
"@ c #ACBEFC",
"O c #444A5C",
"$ c #645AEC",
"X c #040204",
"o c #ECEAEC",
". c #F4F2F4",
" c None",
"+ c #C4C6CC",
"& c #6476C4",
"* c #A4A2AC",
"= c #848A9C",
"; c #646674",
"% c #8496F4",
"- c #7C7E8C",
/* pixels */
" . XX . .. .",
" oX X o o ",
" X OXX o ",
"oo oXO+X X@@ooo ",
" O+.X#.X$%@oo",
" o O+.#X..+X$%@o",
"o O+.##..+*=X$%@",
"&O+.##..+*=-;$%@",
"O+.##..+*=-;X$%@",
" X+#. +*=-;X&$%@",
" X+.+*=-;X &$%@",
" X=*=-;X &$%@",
" X;-;X &$%&",
" X;X &$% ",
" X $% ",
" $% "
};
#endif
change_log.txt
View file @
7e7a7937
...
...
@@ -4,6 +4,11 @@ Started 2007-June-11
Please add newer entries at the top, list the date and your name with
email address.
2007-Dec-17 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
================================================================================
+pcbnew:
some changes about zones: enhanced dialog, and files reorganisation.
2007-Dec-14 UPDATE Dick Hollenbeck <dick@softplc.com>
================================================================================
...
...
cvpcb/listboxes.cpp
View file @
7e7a7937
...
...
@@ -155,6 +155,8 @@ void FootprintListBox::SetSelection( unsigned index, bool State )
if
(
(
int
)
index
>=
GetCount
()
)
index
=
GetCount
()
-
1
;
if
(
(
index
>=
0
)
&&
(
GetCount
()
>
0
)
)
{
#ifndef __WXMAC__
Select
(
index
,
State
);
#endif
...
...
@@ -162,6 +164,7 @@ void FootprintListBox::SetSelection( unsigned index, bool State )
#ifdef __WXMAC__
Refresh
();
#endif
}
}
...
...
@@ -256,6 +259,8 @@ void ListBoxCmp::SetSelection( unsigned index, bool State )
if
(
(
int
)
index
>=
GetCount
()
)
index
=
GetCount
()
-
1
;
if
(
(
index
>=
0
)
&&
(
GetCount
()
>
0
)
)
{
#ifndef __WXMAC__
Select
(
index
,
State
);
#endif
...
...
@@ -263,6 +268,7 @@ void ListBoxCmp::SetSelection( unsigned index, bool State )
#ifdef __WXMAC__
Refresh
();
#endif
}
}
...
...
cvpcb/readschematicnetlist.cpp
View file @
7e7a7937
/***************************/
/* readschematicnetlist.cpp*/
/***************************/
/***************************
*
/
/* readschematicnetlist.cpp
*/
/***************************
*
/
/*
convertit la netliste ORCADPCB en netliste ORCADPCB (fichier temporaire)
assure la raffectation des alimentations selon le format
:
( XXXXXX VALEUR|(pin1,pin2,...=newalim) ID VALEUR
*/
/*
Read a nelist type Eeschema or OrcadPCB2 and buid the component list
* Manages the lines like
:
*
( XXXXXX VALEUR|(pin1,pin2,...=newalim) ID VALEUR
*/
#include "fctsys.h"
...
...
@@ -19,219 +19,251 @@ assure la r
/* routines locales : */
static
int
pin_orcad
(
STORECMP
*
CurrentCmp
);
static
int
ReadPinConnection
(
STORECMP
*
CurrentCmp
);
#define BUFFER_CHAR_SIZE 1024 // Size of buffers used to store netlist datas
/************************************************/
int
WinEDA_CvpcbFrame
::
ReadSchematicNetlist
()
/************************************************/
{
int
i
,
j
,
k
,
l
;
char
*
LibName
;
char
Line
[
1024
];
char
component_reference
[
80
]
;
/* buffer des references composants
*/
char
ref_schema
[
80
]
;
/* buffer de la ref schematique
*/
char
footprint_name
[
80
]
;
/* buffer des ref.lib
*/
char
component_value
[
80
]
;
/* buffer des valeurs
*/
char
*
ptchar
;
/* pointeur de service */
STORECMP
*
Cmp
;
int
i
,
j
,
k
,
l
;
char
*
LibName
;
char
Line
[
BUFFER_CHAR_SIZE
+
1
];
char
component_reference
[
BUFFER_CHAR_SIZE
+
1
];
/* buffer for component reference (U1, R4...)
*/
char
schematic_timestamp
[
BUFFER_CHAR_SIZE
+
1
];
/* buffer for component time stamp
*/
char
footprint_name
[
BUFFER_CHAR_SIZE
+
1
];
/* buffer for component footprint field
*/
char
component_value
[
BUFFER_CHAR_SIZE
+
1
];
/* buffer for component values (470K, 22nF ...)
*/
char
*
ptchar
;
/* pointeur de service */
STORECMP
*
Cmp
;
modified
=
0
;
Rjustify
=
0
;
g_FlagEESchema
=
FALSE
;
/* Raz buffer et variable de gestion */
if
(
g_BaseListeCmp
)
FreeMemoryComponants
();
if
(
g_BaseListeCmp
)
FreeMemoryComponants
();
/* Ouverture du fichier source */
source
=
wxFopen
(
FFileName
,
wxT
(
"rt"
)
);
if
(
source
==
0
)
source
=
wxFopen
(
FFileName
,
wxT
(
"rt"
)
);
if
(
source
==
0
)
{
wxString
msg
;
msg
.
Printf
(
_
(
"File <%s> not found"
),
FFileName
.
GetData
()
);
DisplayError
(
this
,
msg
);
return
(
-
1
)
;
msg
.
Printf
(
_
(
"File <%s> not found"
),
FFileName
.
GetData
()
);
DisplayError
(
this
,
msg
);
return
-
1
;
}
/* Read the file header (must be "( { OrCAD PCB" or "({ OrCAD PCB" ) */
/* or "# EESchema Netliste"*/
fgets
(
Line
,
255
,
source
)
;
/* Read the file header (must be "( { OrCAD PCB" or "({ OrCAD PCB" )
* or "# EESchema Netliste"
*/
fgets
(
Line
,
255
,
source
);
/* test for netlist type PCB2 */
i
=
strnicmp
(
Line
,
"( {"
,
3
)
;
i
=
strnicmp
(
Line
,
"( {"
,
3
)
;
if
(
i
!=
0
)
i
=
strnicmp
(
Line
,
"({"
,
2
)
;
i
=
strnicmp
(
Line
,
"({"
,
2
)
;
if
(
i
!=
0
)
{
i
=
strnicmp
(
Line
,
"# EESchema"
,
7
)
;
/* net type EESchema */
if
(
i
==
0
)
g_FlagEESchema
=
TRUE
;
i
=
strnicmp
(
Line
,
"# EESchema"
,
7
);
/* net type EESchema */
if
(
i
==
0
)
g_FlagEESchema
=
TRUE
;
}
if
(
i
!=
0
)
if
(
i
!=
0
)
{
wxString
msg
,
Lineconv
=
CONV_FROM_UTF8
(
Line
);
msg
.
Printf
(
_
(
"Unknown file format <%s>"
),
Lineconv
.
GetData
()
);
DisplayError
(
this
,
msg
);
fclose
(
source
);
return
(
-
3
)
;
wxString
msg
,
Lineconv
=
CONV_FROM_UTF8
(
Line
);
msg
.
Printf
(
_
(
"Unknown file format <%s>"
),
Lineconv
.
GetData
()
);
DisplayError
(
this
,
msg
);
fclose
(
source
);
return
-
3
;
}
SetStatusText
(
_
(
"Netlist Format: EESchema"
),
0
);
SetStatusText
(
_
(
"Netlist Format: EESchema"
),
0
);
/* Lecture de la liste
*/
for
(;;
)
/* Read the netlit
*/
for
(
;
;
)
{
/* recherche du debut de la description d'un composant
*/
/* Search the beginning of a component description
*/
if
(
fgets
(
Line
,
255
,
source
)
==
0
)
break
;
if
(
fgets
(
Line
,
BUFFER_CHAR_SIZE
,
source
)
==
0
)
break
;
/* Remove blanks */
i
=
0
;
while
(
Line
[
i
]
==
' '
)
i
++
;
i
=
0
;
while
(
Line
[
i
]
==
' '
)
i
++
;
/* elimination des lignes vides : */
if
(
Line
[
i
]
<
' '
)
continue
;
/* remove empty lines : */
if
(
Line
[
i
]
<
' '
)
continue
;
if
(
strnicmp
(
&
Line
[
i
],
"{ Allowed footprints"
,
20
)
==
0
)
if
(
strnicmp
(
&
Line
[
i
],
"{ Allowed footprints"
,
20
)
==
0
)
{
ReadFootprintFilterList
(
source
);
ReadFootprintFilterList
(
source
);
continue
;
}
if
(
strnicmp
(
&
Line
[
i
],
"( "
,
2
)
!=
0
)
continue
;
if
(
strnicmp
(
&
Line
[
i
],
"( "
,
2
)
!=
0
)
continue
;
/*******************************/
/* Component description found */
/*******************************/
while
(
Line
[
i
]
!=
' '
)
i
++
;
while
(
Line
[
i
]
==
' '
)
i
++
;
/* i points the beginning of the schematic time stamp */
/****************************/
/* debut description trouve */
/****************************/
/* memo ident schema */
while
(
Line
[
i
]
!=
' '
)
i
++
;
while
(
Line
[
i
]
==
' '
)
i
++
;
/* i pointe 1er caractere de l'ident schema */
j
=
0
;
while
(
Line
[
i
]
!=
' '
)
schematic_timestamp
[
j
++
]
=
Line
[
i
++
];
j
=
0
;
while
(
Line
[
i
]
!=
' '
)
ref_schema
[
j
++
]
=
Line
[
i
++
]
;
ref_schema
[
j
]
=
0
;
schematic_timestamp
[
j
]
=
0
;
/* recherche val/ref.lib */
while
(
Line
[
i
]
==
' '
)
i
++
;
/* i pointe la valeur du composant */
/* search val/ref.lib */
while
(
Line
[
i
]
==
' '
)
i
++
;
/* i points the component value */
LibName
=
Line
+
i
;
memset
(
component_reference
,
0
,
sizeof
(
component_reference
));
memset
(
footprint_name
,
0
,
sizeof
(
footprint_name
)
)
;
memset
(
component_value
,
0
,
sizeof
(
component_value
)
)
;
memset
(
alim
,
0
,
sizeof
(
alim
)
)
;
memset
(
schematic_timestamp
,
0
,
sizeof
(
schematic_timestamp
)
);
memset
(
component_reference
,
0
,
sizeof
(
component_reference
)
);
memset
(
footprint_name
,
0
,
sizeof
(
footprint_name
)
);
memset
(
component_value
,
0
,
sizeof
(
component_value
)
);
memset
(
alim
,
0
,
sizeof
(
alim
)
);
/* lecture valeur du composant
*/
/* Read value
*/
/* recherche fin de valeur (' ') */
ptchar
=
strstr
(
&
Line
[
i
],
" "
)
;
if
(
ptchar
==
0
)
ptchar
=
strstr
(
&
Line
[
i
],
" "
);
// Search end of value field (space)
if
(
ptchar
==
0
)
{
wxString
msg
;
msg
.
Printf
(
_
(
"Netlist error: %s"
),
Line
)
;
DisplayError
(
NULL
,
msg
);
k
=
0
;
msg
.
Printf
(
_
(
"Netlist error: %s"
),
Line
)
;
DisplayError
(
NULL
,
msg
);
k
=
0
;
}
else
k
=
ptchar
-
Line
;
else
k
=
ptchar
-
Line
;
for
(
j
=
0
;
i
<
k
;
i
++
)
for
(
j
=
0
;
i
<
k
;
i
++
)
{
if
(
Line
[
i
]
==
SEPARATEUR
)
break
;
if
(
j
<
(
int
)(
sizeof
(
footprint_name
)
-
1
)
)
footprint_name
[
j
++
]
=
Line
[
i
]
;
if
(
Line
[
i
]
==
SEPARATEUR
)
break
;
if
(
j
<
(
int
)
(
sizeof
(
footprint_name
)
-
1
)
)
footprint_name
[
j
++
]
=
Line
[
i
];
}
if
(
(
Line
[
++
i
]
==
'('
)
&&
(
Line
[
k
-
1
]
==
')'
)
)
if
(
(
Line
[
++
i
]
==
'('
)
&&
(
Line
[
k
-
1
]
==
')'
)
)
{
i
++
;
l
=
0
;
while
(
k
-
1
>
i
)
alim
[
l
++
]
=
Line
[
i
++
]
;
i
++
;
l
=
0
;
while
(
k
-
1
>
i
)
alim
[
l
++
]
=
Line
[
i
++
];
}
else
i
=
k
;
/* Search component reference */
while
(
Line
[
i
]
!=
' '
)
i
++
;
else
i
=
k
;
/* goto end of value field */
while
(
Line
[
i
]
==
' '
)
i
++
;
/* recherche reference du composant */
while
(
Line
[
i
]
!=
' '
)
i
++
;
/* elimination fin valeur */
while
(
Line
[
i
]
==
' '
)
i
++
;
/* recherche debut reference */
/* goto beginning of reference */
/* debut reference trouv */
for
(
k
=
0
;
k
<
(
int
)(
sizeof
(
component_reference
)
-
1
)
;
i
++
,
k
++
)
for
(
k
=
0
;
k
<
(
int
)
(
sizeof
(
component_reference
)
-
1
);
i
++
,
k
++
)
{
if
(
Line
[
i
]
<=
' '
)
break
;
component_reference
[
k
]
=
Line
[
i
]
;
if
(
Line
[
i
]
<=
' '
)
break
;
component_reference
[
k
]
=
Line
[
i
];
}
/* recherche valeur du composant */
while
(
Line
[
i
]
==
' '
)
i
++
;
/* recherche debut valeur */
/* Search component value */
while
(
Line
[
i
]
==
' '
)
i
++
;
/** goto beginning of value */
/* debut vraie valeur trouvee */
for
(
k
=
0
;
k
<
(
int
)(
sizeof
(
component_value
)
-
1
)
;
i
++
,
k
++
)
for
(
k
=
0
;
k
<
(
int
)
(
sizeof
(
component_value
)
-
1
);
i
++
,
k
++
)
{
if
(
Line
[
i
]
<=
' '
)
break
;
component_value
[
k
]
=
Line
[
i
]
;
if
(
Line
[
i
]
<=
' '
)
break
;
component_value
[
k
]
=
Line
[
i
];
}
/* classement du composant ,suivi de sa valeur */
/* Store info for this component */
Cmp
=
new
STORECMP
();
Cmp
->
Pnext
=
g_BaseListeCmp
;
g_BaseListeCmp
=
Cmp
;
Cmp
->
m_Reference
=
CONV_FROM_UTF8
(
component_reference
);
Cmp
->
m_Valeur
=
CONV_FROM_UTF8
(
component_value
)
;
Cmp
->
m_Reference
=
CONV_FROM_UTF8
(
component_reference
);
Cmp
->
m_Valeur
=
CONV_FROM_UTF8
(
component_value
)
;
if
(
g_FlagEESchema
)
/* Copie du nom modul
e: */
if
(
g_FlagEESchema
)
/* copy footprint nam
e: */
{
if
(
strnicmp
(
LibName
,
"$noname"
,
7
)
!=
0
)
if
(
strnicmp
(
LibName
,
"$noname"
,
7
)
!=
0
)
{
while
(
*
LibName
>
' '
)
{
Cmp
->
m_Module
.
Append
(
*
LibName
);
Cmp
->
m_Module
.
Append
(
*
LibName
);
LibName
++
;
}
}
}
/* classement du TimeStamp */
Cmp
->
m_TimeStamp
=
CONV_FROM_UTF8
(
ref_schema
);
Cmp
->
m_TimeStamp
=
CONV_FROM_UTF8
(
schematic_timestamp
);
pin_orcad
(
Cmp
)
;
ReadPinConnection
(
Cmp
)
;
nbcomp
++
;
nbcomp
++
;
}
fclose
(
source
);
/* reclassement alpabetique : */
g_BaseListeCmp
=
TriListeComposantss
(
g_BaseListeCmp
,
nbcomp
);
fclose
(
source
);
/* Alpabetic sorting : */
g_BaseListeCmp
=
TriListeComposantss
(
g_BaseListeCmp
,
nbcomp
);
return
(
0
)
;
return
0
;
}
/********************************************************/
int
WinEDA_CvpcbFrame
::
ReadFootprintFilterList
(
FILE
*
f
)
int
WinEDA_CvpcbFrame
::
ReadFootprintFilterList
(
FILE
*
f
)
/********************************************************/
{
char
Line
[
1024
];
wxString
CmpRef
;
STORECMP
*
Cmp
=
NULL
;
char
Line
[
BUFFER_CHAR_SIZE
+
1
];
wxString
CmpRef
;
STORECMP
*
Cmp
=
NULL
;
for
(;;
)
for
(
;
;
)
{
if
(
fgets
(
Line
,
255
,
source
)
==
0
)
break
;
if
(
strnicmp
(
Line
,
"$endlist"
,
8
)
==
0
)
if
(
fgets
(
Line
,
BUFFER_CHAR_SIZE
,
source
)
==
0
)
break
;
if
(
strnicmp
(
Line
,
"$endlist"
,
8
)
==
0
)
{
Cmp
=
NULL
;
continue
;
}
if
(
strnicmp
(
Line
,
"$endfootprintlist"
,
4
)
==
0
)
return
0
;
if
(
strnicmp
(
Line
,
"$endfootprintlist"
,
4
)
==
0
)
return
0
;
if
(
strnicmp
(
Line
,
"$component"
,
10
)
==
0
)
// New component ref found
if
(
strnicmp
(
Line
,
"$component"
,
10
)
==
0
)
// New component ref found
{
CmpRef
=
CONV_FROM_UTF8
(
Line
+
11
);
CmpRef
.
Trim
(
TRUE
);
CmpRef
.
Trim
(
FALSE
);
CmpRef
=
CONV_FROM_UTF8
(
Line
+
11
);
CmpRef
.
Trim
(
TRUE
);
CmpRef
.
Trim
(
FALSE
);
/* Search the new component in list */
for
(
Cmp
=
g_BaseListeCmp
;
Cmp
!=
NULL
;
Cmp
=
Cmp
->
Pnext
)
for
(
Cmp
=
g_BaseListeCmp
;
Cmp
!=
NULL
;
Cmp
=
Cmp
->
Pnext
)
{
if
(
Cmp
->
m_Reference
==
CmpRef
)
break
;
if
(
Cmp
->
m_Reference
==
CmpRef
)
break
;
}
}
else
if
(
Cmp
)
else
if
(
Cmp
)
{
wxString
fp
=
CONV_FROM_UTF8
(
Line
+
1
);
fp
.
Trim
(
FALSE
);
fp
.
Trim
(
TRUE
);
Cmp
->
m_FootprintFilter
.
Add
(
fp
);
wxString
fp
=
CONV_FROM_UTF8
(
Line
+
1
);
fp
.
Trim
(
FALSE
);
fp
.
Trim
(
TRUE
);
Cmp
->
m_FootprintFilter
.
Add
(
fp
);
}
}
...
...
@@ -240,126 +272,136 @@ STORECMP * Cmp = NULL;
/***********************************/
int
pin_orcad
(
STORECMP
*
Cmp
)
int
ReadPinConnection
(
STORECMP
*
Cmp
)
/***********************************/
{
int
i
,
jj
;
char
numpin
[
9
]
,
net
[
1024
]
;
char
Line
[
1024
];
STOREPIN
*
Pin
=
NULL
;
STOREPIN
**
LastPin
=
&
Cmp
->
m_Pins
;
int
i
,
jj
;
char
numpin
[
BUFFER_CHAR_SIZE
+
1
],
net
[
BUFFER_CHAR_SIZE
+
1
]
;
char
Line
[
BUFFER_CHAR_SIZE
+
1
];
STOREPIN
*
Pin
=
NULL
;
STOREPIN
**
LastPin
=
&
Cmp
->
m_Pins
;
for
(
;
;
)
for
(
;
;
)
{
/* debut description trouv */
for
(
;
;
)
for
(
;
;
)
{
if
(
fgets
(
Line
,
80
,
source
)
==
0
)
return
(
-
1
)
;
if
(
fgets
(
Line
,
BUFFER_CHAR_SIZE
,
source
)
==
0
)
return
-
1
;
/* remove blanks from the beginning of the line */
i
=
0
;
while
(
Line
[
i
]
==
' '
)
i
++
;
while
(
Line
[
i
]
==
'('
)
i
++
;
/* suppression des blancs en dbut de ligne */
i
=
0
;
while
(
Line
[
i
]
==
' '
)
i
++
;
while
(
Line
[
i
]
==
'('
)
i
++
;
while
(
Line
[
i
]
==
' '
)
i
++
;
while
(
Line
[
i
]
==
' '
)
i
++
;
/* elimination des lignes vides : */
if
(
Line
[
i
]
<
' '
)
continue
;
/* remove empty lines : */
if
(
Line
[
i
]
<
' '
)
continue
;
/* fin de description ? */
if
(
Line
[
i
]
==
')'
)
return
(
0
)
;
if
(
Line
[
i
]
==
')'
)
return
0
;
memset
(
net
,
0
,
sizeof
(
net
)
);
memset
(
numpin
,
0
,
sizeof
(
numpin
)
);
/* lecture name pin , 4 lettre
s */
for
(
jj
=
0
;
jj
<
4
;
jj
++
,
i
++
)
/* Read pi name , 4 letter
s */
for
(
jj
=
0
;
jj
<
4
;
jj
++
,
i
++
)
{
if
(
Line
[
i
]
==
' '
)
break
;
numpin
[
jj
]
=
Line
[
i
]
;
if
(
Line
[
i
]
==
' '
)
break
;
numpin
[
jj
]
=
Line
[
i
];
}
/* recherche affectation force de net
*/
if
(
reaffect
(
numpin
,
net
)
!=
0
)
/* Search for a net attribute
*/
if
(
reaffect
(
numpin
,
net
)
!=
0
)
{
Pin
=
new
STOREPIN
();
*
LastPin
=
Pin
;
LastPin
=
&
Pin
->
Pnext
;
Pin
->
m_PinNum
=
CONV_FROM_UTF8
(
numpin
);
Pin
->
m_PinNet
=
CONV_FROM_UTF8
(
net
);
continue
;
Pin
->
m_PinNum
=
CONV_FROM_UTF8
(
numpin
);
Pin
->
m_PinNet
=
CONV_FROM_UTF8
(
net
);
continue
;
}
/* recherche netname */
while
(
Line
[
i
]
==
' '
)
i
++
;
/* recherche debut reference */
/* Read netname */
while
(
Line
[
i
]
==
' '
)
i
++
;
/* debut netname trouv */
for
(
jj
=
0
;
jj
<
(
int
)
sizeof
(
net
)
-
1
;
i
++
,
jj
++
)
for
(
jj
=
0
;
jj
<
(
int
)
sizeof
(
net
)
-
1
;
i
++
,
jj
++
)
{
if
(
Line
[
i
]
<=
' '
)
break
;
net
[
jj
]
=
Line
[
i
]
;
if
(
Line
[
i
]
<=
' '
)
break
;
net
[
jj
]
=
Line
[
i
];
}
Pin
=
new
STOREPIN
();
*
LastPin
=
Pin
;
LastPin
=
&
Pin
->
Pnext
;
Pin
->
m_PinNum
=
CONV_FROM_UTF8
(
numpin
);
Pin
->
m_PinNet
=
CONV_FROM_UTF8
(
net
);
Pin
->
m_PinNum
=
CONV_FROM_UTF8
(
numpin
);
Pin
->
m_PinNet
=
CONV_FROM_UTF8
(
net
);
}
}
}
/****************************************************************/
STORECMP
*
TriListeComposantss
(
STORECMP
*
BaseListe
,
int
nbitems
)
STORECMP
*
TriListeComposantss
(
STORECMP
*
BaseListe
,
int
nbitems
)
/****************************************************************/
/* Tri la liste des composants par ordre alphabetique et me a jour
le nouveau chainage avant/arriere
retourne un pointeur sur le 1er element de la liste
*/
/* Sort the component list( this is a linked list)
* retourn the beginning of the list
*/
{
STORECMP
**
bufferptr
,
*
Item
;
int
ii
;
STORECMP
**
bufferptr
,
*
Item
;
int
ii
;
if
(
nbitems
<=
0
)
return
(
NULL
);
bufferptr
=
(
STORECMP
**
)
MyZMalloc
(
(
nbitems
+
2
)
*
sizeof
(
STORECMP
*
)
);
if
(
nbitems
<=
0
)
return
NULL
;
bufferptr
=
(
STORECMP
**
)
MyZMalloc
(
(
nbitems
+
2
)
*
sizeof
(
STORECMP
*
)
);
for
(
ii
=
1
,
Item
=
BaseListe
;
Item
!=
NULL
;
Item
=
Item
->
Pnext
,
ii
++
)
for
(
ii
=
1
,
Item
=
BaseListe
;
Item
!=
NULL
;
Item
=
Item
->
Pnext
,
ii
++
)
{
bufferptr
[
ii
]
=
Item
;
}
/* ici bufferptr[0] = NULL et bufferptr[nbitem+1] = NULL et ces 2 valeurs
representent le chainage arriere du 1er element, et le chainage avant
du dernier element
*/
/* Here: bufferptr[0] = NULL and bufferptr[nbitem+1] = NULL.
* These 2 values are the first item back link, and the last item forward link
*/
qsort
(
bufferptr
+
1
,
nbitems
,
sizeof
(
STORECMP
*
),
(
int
(
*
)(
const
void
*
,
const
void
*
))
CmpCompare
)
;
/* Mise a jour du chainage
*/
qsort
(
bufferptr
+
1
,
nbitems
,
sizeof
(
STORECMP
*
),
(
int
(
*
)
(
const
void
*
,
const
void
*
)
)
CmpCompare
)
;
/* Update linked list
*/
for
(
ii
=
1
;
ii
<=
nbitems
;
ii
++
)
{
Item
=
bufferptr
[
ii
];
Item
->
m_Num
=
ii
;
Item
->
Pnext
=
bufferptr
[
ii
+
1
];
Item
->
Pback
=
bufferptr
[
ii
-
1
];
Item
->
Pnext
=
bufferptr
[
ii
+
1
];
Item
->
Pback
=
bufferptr
[
ii
-
1
];
}
return
(
bufferptr
[
1
]);
return
bufferptr
[
1
];
}
/****************************************/
int
CmpCompare
(
void
*
mod1
,
void
*
mod2
)
int
CmpCompare
(
void
*
mod1
,
void
*
mod2
)
/****************************************/
/*
routine compare() pour qsort() en classement alphabetique des composants
*/
* Function compare() for qsort() : alphabetic sorting, with numbering order
*/
{
int
ii
;
STORECMP
*
pt1
,
*
pt2
;
int
ii
;
STORECMP
*
pt1
,
*
pt2
;
pt1
=
*
((
STORECMP
**
)
mod1
);
pt2
=
*
((
STORECMP
**
)
mod2
);
pt1
=
*
(
(
STORECMP
**
)
mod1
);
pt2
=
*
(
(
STORECMP
**
)
mod2
);
//FIXME:
ii
=
StrNumICmp
(
(
const
wxChar
*
)
pt1
->
m_Reference
,
(
const
wxChar
*
)
pt2
->
m_Reference
);
return
(
ii
)
;
return
ii
;
}
include/bitmaps.h
View file @
7e7a7937
...
...
@@ -183,6 +183,7 @@
#include "../bitmaps/transistor.xpm"
#include "../bitmaps/kicad_icon_small.xpm"
#include "../bitmaps/general_ratsnet.xpm"
#include "../bitmaps/fill_zone.xpm"
// Largeur du toolbar vertical
#define VTOOLBAR_WIDTH 26
...
...
include/build_version.h
View file @
7e7a7937
...
...
@@ -5,7 +5,7 @@
COMMON_GLOBL
wxString
g_BuildVersion
#ifdef EDA_BASE
(
wxT
(
"(2007-12-
08
)"
))
(
wxT
(
"(2007-12-
17
)"
))
#endif
;
...
...
kicad/treeprj_datas.cpp
View file @
7e7a7937
...
...
@@ -383,7 +383,7 @@ void TreePrjItemData::Activate(WinEDA_PrjFrame* prjframe)
}
if
(
count
==
0
)
{
prjframe
->
AddFile
(
wxString
(
wxT
(
"no kicad files found in this directory"
)
),
id
);
prjframe
->
AddFile
(
wxString
(
_
(
"no kicad files found in this directory"
)
),
id
);
}
/* Sort filenames by alphabetic order */
m_Parent
->
SortChildren
(
id
);
...
...
pcbnew/basepcbframe.cpp
View file @
7e7a7937
...
...
@@ -121,9 +121,6 @@ void WinEDA_BasePcbFrame::CursorGoto( const wxPoint& aPos )
DrawPanel
->
MouseToCursorSchema
();
DrawPanel
->
CursorOn
(
&
dc
);
}
D
(
printf
(
"CursorGoto end x=%d, y=%d
\n
"
,
m_CurrentScreen
->
m_Curseur
.
x
,
m_CurrentScreen
->
m_Curseur
.
y
);)
}
...
...
pcbnew/class_board.cpp
View file @
7e7a7937
...
...
@@ -650,8 +650,86 @@ EQUIPOT* BOARD::FindNet( int anetcode ) const
}
/* Two sort functions used in BOARD::ReturnSortedNetnamesList */
// Sort nets by name
int
s_SortByNames
(
const
void
*
ptr1
,
const
void
*
ptr2
)
{
EQUIPOT
*
item1
=
*
(
EQUIPOT
**
)
ptr1
;
EQUIPOT
*
item2
=
*
(
EQUIPOT
**
)
ptr2
;
return
item1
->
m_Netname
.
CmpNoCase
(
item2
->
m_Netname
);
}
// Sort nets by decreasing pad count
int
s_SortByNodes
(
const
void
*
ptr1
,
const
void
*
ptr2
)
{
EQUIPOT
*
item1
=
*
(
EQUIPOT
**
)
ptr1
;
EQUIPOT
*
item2
=
*
(
EQUIPOT
**
)
ptr2
;
if
(
(
item1
->
m_NbNodes
-
item2
->
m_NbNodes
)
!=
0
)
return
-
(
item1
->
m_NbNodes
-
item2
->
m_NbNodes
);
return
item1
->
m_Netname
.
CmpNoCase
(
item2
->
m_Netname
);
}
/**
* Function ReturnSortedNetnamesList
* searches for a net with the given netcode.
* @param aNames An array string to fill with net names.
* @param aSort_Type : NO_SORT = no sort, ALPHA_SORT = sort by alphabetic order, PAD_CNT_SORT = sort by active pads count.
* @return int - net names count.
*/
int
BOARD
::
ReturnSortedNetnamesList
(
wxArrayString
&
aNames
,
const
int
aSort_Type
)
{
int
NetCount
=
0
;
int
ii
;
EQUIPOT
*
net
;
/* count items to list and sort */
for
(
net
=
m_Equipots
;
net
;
net
=
net
->
Next
()
)
{
if
(
net
->
m_Netname
.
IsEmpty
()
)
continue
;
NetCount
++
;
}
if
(
NetCount
==
0
)
return
0
;
/* Build the list */
EQUIPOT
*
*
net_ptr_list
=
(
EQUIPOT
*
*
)
MyMalloc
(
NetCount
*
sizeof
(
*
net_ptr_list
)
);
for
(
ii
=
0
,
net
=
m_Equipots
;
net
;
net
=
net
->
Next
()
)
{
if
(
net
->
m_Netname
.
IsEmpty
()
)
continue
;
net_ptr_list
[
ii
]
=
net
;
ii
++
;
}
/* sort the list */
switch
(
aSort_Type
)
{
case
NO_SORT
:
break
;
case
ALPHA_SORT
:
qsort
(
net_ptr_list
,
NetCount
,
sizeof
(
EQUIPOT
*
),
s_SortByNames
);
break
;
case
PAD_CNT_SORT
:
qsort
(
net_ptr_list
,
NetCount
,
sizeof
(
EQUIPOT
*
),
s_SortByNodes
);
break
;
}
/* fill the given list */
for
(
ii
=
0
;
ii
<
NetCount
;
ii
++
)
{
net
=
net_ptr_list
[
ii
];
aNames
.
Add
(
net
->
m_Netname
);
}
MyFree
(
net_ptr_list
);
return
NetCount
;
}
/************************************/
bool
BOARD
::
Save
(
FILE
*
aFile
)
const
/************************************/
{
bool
rc
=
false
;
BOARD_ITEM
*
item
;
...
...
pcbnew/class_board.h
View file @
7e7a7937
...
...
@@ -48,8 +48,7 @@ public:
CHEVELU
*
m_Ratsnest
;
// Rastnest list
CHEVELU
*
m_LocalRatsnest
;
// Rastnest list used while moving a footprint
EDGE_ZONE
*
m_CurrentLimitZone
;
/* pointeur sur la liste des segments
* de delimitation de la zone en cours de trace */
EDGE_ZONE
*
m_CurrentLimitZone
;
/* zone contour currently in progress */
BOARD
(
EDA_BaseStruct
*
StructFather
,
WinEDA_BasePcbFrame
*
frame
);
~
BOARD
();
...
...
@@ -175,6 +174,20 @@ public:
*/
EQUIPOT
*
FindNet
(
int
aNetcode
)
const
;
/**
* Function ReturnSortedNetnamesList
* searches for a net with the given netcode.
* @param aNames An array string to fill with net names.
* @param aSort_Type : NO_SORT = no sort, ALPHA_SORT = sort by alphabetic order, PAD_CNT_SORT = sort by active pads count.
* @return int - net names count.
*/
enum
netname_sort_type
{
NO_SORT
,
ALPHA_SORT
,
PAD_CNT_SORT
};
int
ReturnSortedNetnamesList
(
wxArrayString
&
aNames
,
const
int
aSort_Type
);
/**
* Function Save
...
...
pcbnew/dialog_zones_by_polygon.cpp
0 → 100644
View file @
7e7a7937
/////////////////////////////////////////////////////////////////////////////
// Name: zones.cpp
// Purpose:
// Author: jean-pierre Charras
// Modified by:
// Created: 25/01/2006 11:35:19
// RCS-ID:
// Copyright: GNU License
// Licence: GNU License
/////////////////////////////////////////////////////////////////////////////
// Generated by DialogBlocks (unregistered), 25/01/2006 11:35:19
#if defined (__GNUG__) && !defined (NO_GCC_PRAGMA)
#pragma implementation "zones.h"
#endif
// For compilers that support precompilation, includes "wx/wx.h".
#include "wx/wxprec.h"
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#ifndef WX_PRECOMP
#include "wx/wx.h"
#endif
////@begin includes
////@end includes
#include "dialog_zones_by_polygon.h"
////@begin XPM images
////@end XPM images
/*!
* WinEDA_ZoneFrame type definition
*/
IMPLEMENT_DYNAMIC_CLASS
(
WinEDA_ZoneFrame
,
wxDialog
)
/*!
* WinEDA_ZoneFrame event table definition
*/
BEGIN_EVENT_TABLE
(
WinEDA_ZoneFrame
,
wxDialog
)
////@begin WinEDA_ZoneFrame event table entries
EVT_BUTTON
(
ID_BUTTON
,
WinEDA_ZoneFrame
::
ExecFillZone
)
EVT_BUTTON
(
wxID_CANCEL
,
WinEDA_ZoneFrame
::
OnCancelClick
)
EVT_RADIOBOX
(
ID_NET_SORTING_OPTION
,
WinEDA_ZoneFrame
::
OnNetSortingOptionSelected
)
////@end WinEDA_ZoneFrame event table entries
END_EVENT_TABLE
()
/*!
* WinEDA_ZoneFrame constructors
*/
WinEDA_ZoneFrame
::
WinEDA_ZoneFrame
()
{
}
WinEDA_ZoneFrame
::
WinEDA_ZoneFrame
(
WinEDA_PcbFrame
*
parent
,
wxWindowID
id
,
const
wxString
&
caption
,
const
wxPoint
&
pos
,
const
wxSize
&
size
,
long
style
)
{
m_Parent
=
parent
;
Create
(
parent
,
id
,
caption
,
pos
,
size
,
style
);
}
/*!
* WinEDA_ZoneFrame creator
*/
bool
WinEDA_ZoneFrame
::
Create
(
wxWindow
*
parent
,
wxWindowID
id
,
const
wxString
&
caption
,
const
wxPoint
&
pos
,
const
wxSize
&
size
,
long
style
)
{
////@begin WinEDA_ZoneFrame member initialisation
m_GridCtrl
=
NULL
;
m_ClearanceValueTitle
=
NULL
;
m_ZoneClearanceCtrl
=
NULL
;
m_FillOpt
=
NULL
;
m_OrientEdgesOpt
=
NULL
;
m_NetSortingOption
=
NULL
;
m_ListNetNameSelection
=
NULL
;
m_LayerSelectionCtrl
=
NULL
;
////@end WinEDA_ZoneFrame member initialisation
////@begin WinEDA_ZoneFrame creation
SetExtraStyle
(
wxWS_EX_BLOCK_EVENTS
);
wxDialog
::
Create
(
parent
,
id
,
caption
,
pos
,
size
,
style
);
CreateControls
();
if
(
GetSizer
())
{
GetSizer
()
->
SetSizeHints
(
this
);
}
Centre
();
////@end WinEDA_ZoneFrame creation
return
true
;
}
/*!
* Control creation for WinEDA_ZoneFrame
*/
void
WinEDA_ZoneFrame
::
CreateControls
()
{
SetFont
(
*
g_DialogFont
);
////@begin WinEDA_ZoneFrame content construction
// Generated by DialogBlocks, 17/12/2007 20:46:19 (unregistered)
WinEDA_ZoneFrame
*
itemDialog1
=
this
;
wxBoxSizer
*
itemBoxSizer2
=
new
wxBoxSizer
(
wxVERTICAL
);
itemDialog1
->
SetSizer
(
itemBoxSizer2
);
wxBoxSizer
*
itemBoxSizer3
=
new
wxBoxSizer
(
wxHORIZONTAL
);
itemBoxSizer2
->
Add
(
itemBoxSizer3
,
0
,
wxALIGN_CENTER_HORIZONTAL
|
wxALL
,
5
);
wxBoxSizer
*
itemBoxSizer4
=
new
wxBoxSizer
(
wxVERTICAL
);
itemBoxSizer3
->
Add
(
itemBoxSizer4
,
0
,
wxGROW
|
wxALL
,
5
);
wxArrayString
m_GridCtrlStrings
;
m_GridCtrlStrings
.
Add
(
_
(
"0.00000"
));
m_GridCtrlStrings
.
Add
(
_
(
"0.00000"
));
m_GridCtrlStrings
.
Add
(
_
(
"0.00000"
));
m_GridCtrlStrings
.
Add
(
_
(
"0.00000"
));
m_GridCtrl
=
new
wxRadioBox
(
itemDialog1
,
ID_RADIOBOX3
,
_
(
"Grid Size for Filling:"
),
wxDefaultPosition
,
wxDefaultSize
,
m_GridCtrlStrings
,
1
,
wxRA_SPECIFY_COLS
);
m_GridCtrl
->
SetSelection
(
0
);
itemBoxSizer4
->
Add
(
m_GridCtrl
,
0
,
wxGROW
|
wxALL
,
5
);
m_ClearanceValueTitle
=
new
wxStaticText
(
itemDialog1
,
wxID_STATIC
,
_
(
"Zone clearance value (mm):"
),
wxDefaultPosition
,
wxDefaultSize
,
0
);
itemBoxSizer4
->
Add
(
m_ClearanceValueTitle
,
0
,
wxALIGN_LEFT
|
wxLEFT
|
wxRIGHT
|
wxTOP
|
wxADJUST_MINSIZE
,
5
);
m_ZoneClearanceCtrl
=
new
wxTextCtrl
(
itemDialog1
,
ID_TEXTCTRL1
,
_T
(
""
),
wxDefaultPosition
,
wxDefaultSize
,
0
);
itemBoxSizer4
->
Add
(
m_ZoneClearanceCtrl
,
0
,
wxGROW
|
wxLEFT
|
wxRIGHT
|
wxBOTTOM
,
5
);
itemBoxSizer3
->
Add
(
5
,
5
,
0
,
wxGROW
|
wxALL
,
5
);
wxBoxSizer
*
itemBoxSizer9
=
new
wxBoxSizer
(
wxVERTICAL
);
itemBoxSizer3
->
Add
(
itemBoxSizer9
,
0
,
wxGROW
|
wxALL
,
5
);
wxArrayString
m_FillOptStrings
;
m_FillOptStrings
.
Add
(
_
(
"Include Pads"
));
m_FillOptStrings
.
Add
(
_
(
"Thermal"
));
m_FillOptStrings
.
Add
(
_
(
"Exclude Pads"
));
m_FillOpt
=
new
wxRadioBox
(
itemDialog1
,
ID_RADIOBOX4
,
_
(
"Pad options:"
),
wxDefaultPosition
,
wxDefaultSize
,
m_FillOptStrings
,
1
,
wxRA_SPECIFY_COLS
);
m_FillOpt
->
SetSelection
(
0
);
itemBoxSizer9
->
Add
(
m_FillOpt
,
0
,
wxGROW
|
wxALL
,
5
);
wxArrayString
m_OrientEdgesOptStrings
;
m_OrientEdgesOptStrings
.
Add
(
_
(
"Any"
));
m_OrientEdgesOptStrings
.
Add
(
_
(
"H , V and 45 deg"
));
m_OrientEdgesOpt
=
new
wxRadioBox
(
itemDialog1
,
ID_RADIOBOX5
,
_
(
"Zone edges orient:"
),
wxDefaultPosition
,
wxDefaultSize
,
m_OrientEdgesOptStrings
,
1
,
wxRA_SPECIFY_COLS
);
m_OrientEdgesOpt
->
SetSelection
(
0
);
itemBoxSizer9
->
Add
(
m_OrientEdgesOpt
,
0
,
wxGROW
|
wxALL
,
5
);
itemBoxSizer3
->
Add
(
5
,
5
,
0
,
wxGROW
|
wxALL
,
5
);
wxBoxSizer
*
itemBoxSizer13
=
new
wxBoxSizer
(
wxVERTICAL
);
itemBoxSizer3
->
Add
(
itemBoxSizer13
,
0
,
wxGROW
|
wxALL
,
5
);
wxButton
*
itemButton14
=
new
wxButton
(
itemDialog1
,
ID_BUTTON
,
_
(
"Fill"
),
wxDefaultPosition
,
wxDefaultSize
,
0
);
itemButton14
->
SetDefault
();
itemButton14
->
SetForegroundColour
(
wxColour
(
204
,
0
,
0
));
itemBoxSizer13
->
Add
(
itemButton14
,
0
,
wxGROW
|
wxALL
,
5
);
wxButton
*
itemButton15
=
new
wxButton
(
itemDialog1
,
wxID_CANCEL
,
_
(
"&Cancel"
),
wxDefaultPosition
,
wxDefaultSize
,
0
);
itemButton15
->
SetForegroundColour
(
wxColour
(
0
,
0
,
255
));
itemBoxSizer13
->
Add
(
itemButton15
,
0
,
wxGROW
|
wxALL
,
5
);
itemBoxSizer13
->
Add
(
5
,
5
,
1
,
wxGROW
|
wxALL
,
5
);
wxArrayString
m_NetSortingOptionStrings
;
m_NetSortingOptionStrings
.
Add
(
_
(
"Alphabetic"
));
m_NetSortingOptionStrings
.
Add
(
_
(
"Advanced"
));
m_NetSortingOption
=
new
wxRadioBox
(
itemDialog1
,
ID_NET_SORTING_OPTION
,
_
(
"Net sorting:"
),
wxDefaultPosition
,
wxDefaultSize
,
m_NetSortingOptionStrings
,
1
,
wxRA_SPECIFY_COLS
);
m_NetSortingOption
->
SetSelection
(
0
);
itemBoxSizer13
->
Add
(
m_NetSortingOption
,
0
,
wxGROW
|
wxALL
,
5
);
wxBoxSizer
*
itemBoxSizer18
=
new
wxBoxSizer
(
wxVERTICAL
);
itemBoxSizer2
->
Add
(
itemBoxSizer18
,
0
,
wxGROW
|
wxALL
,
5
);
wxStaticText
*
itemStaticText19
=
new
wxStaticText
(
itemDialog1
,
wxID_STATIC
,
_
(
"Net:"
),
wxDefaultPosition
,
wxDefaultSize
,
0
);
itemBoxSizer18
->
Add
(
itemStaticText19
,
0
,
wxALIGN_LEFT
|
wxLEFT
|
wxRIGHT
|
wxTOP
,
5
);
wxArrayString
m_ListNetNameSelectionStrings
;
m_ListNetNameSelection
=
new
wxListBox
(
itemDialog1
,
ID_NETNAME_SELECTION
,
wxDefaultPosition
,
wxDefaultSize
,
m_ListNetNameSelectionStrings
,
wxLB_SINGLE
|
wxSUNKEN_BORDER
);
itemBoxSizer18
->
Add
(
m_ListNetNameSelection
,
0
,
wxGROW
|
wxLEFT
|
wxRIGHT
|
wxBOTTOM
,
5
);
wxStaticText
*
itemStaticText21
=
new
wxStaticText
(
itemDialog1
,
wxID_LAYER_SELECTION
,
_
(
"Layer:"
),
wxDefaultPosition
,
wxDefaultSize
,
0
);
itemBoxSizer18
->
Add
(
itemStaticText21
,
0
,
wxALIGN_LEFT
|
wxLEFT
|
wxRIGHT
|
wxTOP
,
5
);
wxArrayString
m_LayerSelectionCtrlStrings
;
m_LayerSelectionCtrl
=
new
wxListBox
(
itemDialog1
,
ID_LAYER_CHOICE
,
wxDefaultPosition
,
wxDefaultSize
,
m_LayerSelectionCtrlStrings
,
wxLB_SINGLE
);
itemBoxSizer18
->
Add
(
m_LayerSelectionCtrl
,
0
,
wxGROW
|
wxALL
,
5
);
// Set validators
m_NetSortingOption
->
SetValidator
(
wxGenericValidator
(
&
s_NetSortingOpt
)
);
////@end WinEDA_ZoneFrame content construction
wxString
title
=
_
(
"Zone clearance value:"
)
+
ReturnUnitSymbol
(
g_UnitMetric
);
m_ClearanceValueTitle
->
SetLabel
(
title
);
title
=
_
(
"Grid :"
)
+
ReturnUnitSymbol
(
g_UnitMetric
);;
m_GridCtrl
->
SetLabel
(
title
);
if
(
g_DesignSettings
.
m_ZoneClearence
==
0
)
g_DesignSettings
.
m_ZoneClearence
=
g_DesignSettings
.
m_TrackClearence
;
title
=
ReturnStringFromValue
(
g_UnitMetric
,
g_DesignSettings
.
m_ZoneClearence
,
m_Parent
->
m_InternalUnits
);
m_ZoneClearanceCtrl
->
SetValue
(
title
);
if
(
Zone_45_Only
)
m_OrientEdgesOpt
->
SetSelection
(
1
);
static
const
int
GridList
[
4
]
=
{
50
,
100
,
250
,
500
};
int
selection
=
0
;
for
(
unsigned
ii
=
0
;
ii
<
(
unsigned
)
m_GridCtrl
->
GetCount
();
ii
++
)
{
wxString
msg
=
ReturnStringFromValue
(
g_UnitMetric
,
GridList
[
ii
],
m_Parent
->
m_InternalUnits
);
m_GridCtrl
->
SetString
(
ii
,
msg
);
if
(
g_GridRoutingSize
==
GridList
[
ii
]
)
selection
=
ii
;
}
// Initialise options
m_GridCtrl
->
SetSelection
(
selection
);
if
(
Zone_Exclude_Pads
)
{
if
(
s_Zone_Create_Thermal_Relief
)
m_FillOpt
->
SetSelection
(
1
);
else
m_FillOpt
->
SetSelection
(
2
);
}
m_NetSortingOption
->
SetSelection
(
s_NetSortingOpt
==
0
?
:
1
);
int
layer_cnt
=
g_DesignSettings
.
m_CopperLayerCount
;
for
(
int
ii
=
0
;
ii
<
g_DesignSettings
.
m_CopperLayerCount
;
ii
++
)
{
wxString
msg
;
int
layer_number
;
if
(
layer_cnt
==
0
||
ii
<
layer_cnt
-
1
)
layer_number
=
ii
;
else
if
(
ii
==
layer_cnt
-
1
)
layer_number
=
LAYER_CMP_N
;
m_LayerId
[
ii
]
=
layer_number
;
msg
=
ReturnPcbLayerName
(
layer_number
).
Trim
();
m_LayerSelectionCtrl
->
InsertItems
(
1
,
&
msg
,
ii
);
if
(
m_Parent
->
GetScreen
()
->
m_Active_Layer
==
layer_number
)
m_LayerSelectionCtrl
->
SetSelection
(
ii
);
}
wxArrayString
ListNetName
;
m_Parent
->
m_Pcb
->
ReturnSortedNetnamesList
(
ListNetName
,
s_NetSortingOpt
==
0
?
BOARD
::
ALPHA_SORT
:
BOARD
::
PAD_CNT_SORT
);
m_ListNetNameSelection
->
InsertItems
(
ListNetName
,
0
);
// Select net:
if
(
g_HightLigth_NetCode
>
0
)
{
EQUIPOT
*
equipot
=
m_Parent
->
m_Pcb
->
FindNet
(
g_HightLigth_NetCode
);
if
(
equipot
)
// Search net in list and select it
{
for
(
unsigned
ii
=
0
;
ii
<
ListNetName
.
GetCount
();
ii
++
)
{
if
(
ListNetName
[
ii
]
==
equipot
->
m_Netname
)
{
m_ListNetNameSelection
->
SetSelection
(
ii
);
break
;
}
}
}
}
}
/*!
* Should we show tooltips?
*/
bool
WinEDA_ZoneFrame
::
ShowToolTips
()
{
return
true
;
}
/*!
* Get bitmap resources
*/
wxBitmap
WinEDA_ZoneFrame
::
GetBitmapResource
(
const
wxString
&
name
)
{
// Bitmap retrieval
////@begin WinEDA_ZoneFrame bitmap retrieval
wxUnusedVar
(
name
);
return
wxNullBitmap
;
////@end WinEDA_ZoneFrame bitmap retrieval
}
/*!
* Get icon resources
*/
wxIcon
WinEDA_ZoneFrame
::
GetIconResource
(
const
wxString
&
name
)
{
// Icon retrieval
////@begin WinEDA_ZoneFrame icon retrieval
wxUnusedVar
(
name
);
return
wxNullIcon
;
////@end WinEDA_ZoneFrame icon retrieval
}
/*!
* wxEVT_COMMAND_BUTTON_CLICKED event handler for wxID_CANCEL
*/
void
WinEDA_ZoneFrame
::
OnCancelClick
(
wxCommandEvent
&
event
)
{
////@begin wxEVT_COMMAND_BUTTON_CLICKED event handler for wxID_CANCEL in WinEDA_ZoneFrame.
// Before editing this code, remove the block markers.
event
.
Skip
();
////@end wxEVT_COMMAND_BUTTON_CLICKED event handler for wxID_CANCEL in WinEDA_ZoneFrame.
}
/*!
* wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_BUTTON2
*/
/***********************************************************/
void
WinEDA_ZoneFrame
::
ExecFillZone
(
wxCommandEvent
&
event
)
/***********************************************************/
{
switch
(
m_FillOpt
->
GetSelection
()
)
{
case
0
:
Zone_Exclude_Pads
=
FALSE
;
s_Zone_Create_Thermal_Relief
=
FALSE
;
break
;
case
1
:
Zone_Exclude_Pads
=
TRUE
;
s_Zone_Create_Thermal_Relief
=
TRUE
;
break
;
case
2
:
Zone_Exclude_Pads
=
TRUE
;
s_Zone_Create_Thermal_Relief
=
FALSE
;
break
;
}
switch
(
m_GridCtrl
->
GetSelection
()
)
{
case
0
:
g_GridRoutingSize
=
50
;
break
;
case
1
:
g_GridRoutingSize
=
100
;
break
;
case
2
:
g_GridRoutingSize
=
250
;
break
;
case
3
:
g_GridRoutingSize
=
500
;
break
;
}
wxString
txtvalue
=
m_ZoneClearanceCtrl
->
GetValue
();
g_DesignSettings
.
m_ZoneClearence
=
ReturnValueFromString
(
g_UnitMetric
,
txtvalue
,
m_Parent
->
m_InternalUnits
);
if
(
m_OrientEdgesOpt
->
GetSelection
()
==
0
)
Zone_45_Only
=
FALSE
;
else
Zone_45_Only
=
TRUE
;
/* Get the layer selection for this zone */
int
ii
=
m_LayerSelectionCtrl
->
GetSelection
();
if
(
ii
<
0
)
{
DisplayError
(
this
,
_
(
"Error : you must choose a layer"
)
);
return
;
}
s_Zone_Layer
=
m_LayerId
[
ii
];
/* Get the net name selection for this zone */
ii
=
m_ListNetNameSelection
->
GetSelection
();
if
(
ii
<
0
)
{
DisplayError
(
this
,
_
(
"Error : you must choose a net name"
)
);
return
;
}
wxString
net_name
=
m_ListNetNameSelection
->
GetString
(
ii
);
/* Search net_code for this net */
EQUIPOT
*
net
;
s_NetcodeSelection
=
0
;
for
(
net
=
m_Parent
->
m_Pcb
->
m_Equipots
;
net
;
net
=
net
->
Next
()
)
{
if
(
net
->
m_Netname
==
net_name
)
{
s_NetcodeSelection
=
net
->
GetNet
();
break
;
}
}
EndModal
(
0
);
}
/*!
* wxEVT_COMMAND_RADIOBOX_SELECTED event handler for ID_NET_SORTING_OPTION
*/
void
WinEDA_ZoneFrame
::
OnNetSortingOptionSelected
(
wxCommandEvent
&
event
)
{
wxArrayString
ListNetName
;
s_NetSortingOpt
=
m_NetSortingOption
->
GetSelection
();
m_Parent
->
m_Pcb
->
ReturnSortedNetnamesList
(
ListNetName
,
s_NetSortingOpt
==
0
?
BOARD
::
ALPHA_SORT
:
BOARD
::
PAD_CNT_SORT
);
m_ListNetNameSelection
->
Clear
();
m_ListNetNameSelection
->
InsertItems
(
ListNetName
,
0
);
}
pcbnew/dialog_zones_by_polygon.h
0 → 100644
View file @
7e7a7937
/////////////////////////////////////////////////////////////////////////////
// Name: dialog_zones_by_polygon.h
// Purpose:
// Author: jean-pierre Charras
// Modified by:
// Created: 25/01/2006 11:35:19
// RCS-ID:
// Copyright: GNU License
// Licence:
/////////////////////////////////////////////////////////////////////////////
// Generated by DialogBlocks (unregistered), 25/01/2006 11:35:19
#ifndef DIALOG_ZONES_H_
#define DIALOG_ZONES_H_
#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
#pragma interface "dialog_zones_by_polygon.h"
#endif
/*!
* Includes
*/
////@begin includes
#include "wx/valgen.h"
////@end includes
/*!
* Forward declarations
*/
////@begin forward declarations
////@end forward declarations
/*!
* Control identifiers
*/
////@begin control identifiers
#define ID_DIALOG 10000
#define ID_RADIOBOX3 10003
#define ID_TEXTCTRL1 10007
#define ID_RADIOBOX4 10008
#define ID_RADIOBOX5 10009
#define ID_BUTTON 10010
#define ID_NET_SORTING_OPTION 10005
#define ID_NETNAME_SELECTION 10001
#define wxID_LAYER_SELECTION 10004
#define ID_LAYER_CHOICE 10002
#define SYMBOL_WINEDA_ZONEFRAME_STYLE wxCAPTION|wxSYSTEM_MENU|wxCLOSE_BOX|MAYBE_RESIZE_BORDER
#define SYMBOL_WINEDA_ZONEFRAME_TITLE _("Fill Zones Options")
#define SYMBOL_WINEDA_ZONEFRAME_IDNAME ID_DIALOG
#define SYMBOL_WINEDA_ZONEFRAME_SIZE wxSize(400, 300)
#define SYMBOL_WINEDA_ZONEFRAME_POSITION wxDefaultPosition
////@end control identifiers
/*!
* Compatibility
*/
#ifndef wxCLOSE_BOX
#define wxCLOSE_BOX 0x1000
#endif
/*!
* WinEDA_ZoneFrame class declaration
*/
class
WinEDA_ZoneFrame
:
public
wxDialog
{
DECLARE_DYNAMIC_CLASS
(
WinEDA_ZoneFrame
)
DECLARE_EVENT_TABLE
()
public
:
/// Constructors
WinEDA_ZoneFrame
(
);
WinEDA_ZoneFrame
(
WinEDA_PcbFrame
*
parent
,
wxWindowID
id
=
SYMBOL_WINEDA_ZONEFRAME_IDNAME
,
const
wxString
&
caption
=
SYMBOL_WINEDA_ZONEFRAME_TITLE
,
const
wxPoint
&
pos
=
SYMBOL_WINEDA_ZONEFRAME_POSITION
,
const
wxSize
&
size
=
SYMBOL_WINEDA_ZONEFRAME_SIZE
,
long
style
=
SYMBOL_WINEDA_ZONEFRAME_STYLE
);
/// Creation
bool
Create
(
wxWindow
*
parent
,
wxWindowID
id
=
SYMBOL_WINEDA_ZONEFRAME_IDNAME
,
const
wxString
&
caption
=
SYMBOL_WINEDA_ZONEFRAME_TITLE
,
const
wxPoint
&
pos
=
SYMBOL_WINEDA_ZONEFRAME_POSITION
,
const
wxSize
&
size
=
SYMBOL_WINEDA_ZONEFRAME_SIZE
,
long
style
=
SYMBOL_WINEDA_ZONEFRAME_STYLE
);
/// Creates the controls and sizers
void
CreateControls
();
////@begin WinEDA_ZoneFrame event handler declarations
/// wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_BUTTON
void
ExecFillZone
(
wxCommandEvent
&
event
);
/// wxEVT_COMMAND_BUTTON_CLICKED event handler for wxID_CANCEL
void
OnCancelClick
(
wxCommandEvent
&
event
);
/// wxEVT_COMMAND_RADIOBOX_SELECTED event handler for ID_NET_SORTING_OPTION
void
OnNetSortingOptionSelected
(
wxCommandEvent
&
event
);
////@end WinEDA_ZoneFrame event handler declarations
////@begin WinEDA_ZoneFrame member function declarations
/// Retrieves bitmap resources
wxBitmap
GetBitmapResource
(
const
wxString
&
name
);
/// Retrieves icon resources
wxIcon
GetIconResource
(
const
wxString
&
name
);
////@end WinEDA_ZoneFrame member function declarations
/// Should we show tooltips?
static
bool
ShowToolTips
();
////@begin WinEDA_ZoneFrame member variables
wxRadioBox
*
m_GridCtrl
;
wxStaticText
*
m_ClearanceValueTitle
;
wxTextCtrl
*
m_ZoneClearanceCtrl
;
wxRadioBox
*
m_FillOpt
;
wxRadioBox
*
m_OrientEdgesOpt
;
wxRadioBox
*
m_NetSortingOption
;
wxListBox
*
m_ListNetNameSelection
;
wxListBox
*
m_LayerSelectionCtrl
;
////@end WinEDA_ZoneFrame member variables
WinEDA_PcbFrame
*
m_Parent
;
int
m_LayerId
[
LAYER_COUNT
];
// Handle the real layer number from layer name position in m_LayerSelectionCtrl
};
#endif // DIALOG_ZONES_H_
pcbnew/dialog_zones_by_polygon.pjd
0 → 100644
View file @
7e7a7937
<?xml version="1.0" encoding="UTF-8"?>
<anthemion-project
version=
"1.0.0.0"
xmlns=
"http://www.anthemion.co.uk"
>
<header>
<long
name=
"name_counter"
>
0
</long>
<string
name=
"html_path"
>
""
</string>
<string
name=
"title"
>
""
</string>
<string
name=
"author"
>
""
</string>
<string
name=
"description"
>
""
</string>
<string
name=
"xrc_filename"
>
""
</string>
<bool
name=
"convert_images_to_xpm"
>
0
</bool>
<bool
name=
"inline_images"
>
0
</bool>
<bool
name=
"generate_cpp_for_xrc"
>
0
</bool>
<long
name=
"working_mode"
>
1
</long>
<bool
name=
"use_help_text_for_tooltips"
>
1
</bool>
<bool
name=
"translate_strings"
>
1
</bool>
<bool
name=
"make_unicode_strings"
>
1
</bool>
<bool
name=
"extract_strings"
>
0
</bool>
<string
name=
"user_name"
>
"jean-pierre Charras"
</string>
<string
name=
"copyright_string"
>
"GNU License"
</string>
<string
name=
"resource_prefix"
>
""
</string>
<bool
name=
"use_two_step_construction"
>
0
</bool>
<bool
name=
"use_enums"
>
0
</bool>
<string
name=
"current_platform"
>
"
<
All platforms
>
"
</string>
<string
name=
"target_wx_version"
>
"
<
Any
>
"
</string>
<string
name=
"cpp_header_comment"
>
"/////////////////////////////////////////////////////////////////////////////
// Name: %HEADER-FILENAME%
// Purpose:
// Author: %AUTHOR%
// Modified by:
// Created: %DATE%
// RCS-ID:
// Copyright: %COPYRIGHT%
// Licence:
/////////////////////////////////////////////////////////////////////////////
"
</string>
<string
name=
"cpp_implementation_comment"
>
"/////////////////////////////////////////////////////////////////////////////
// Name: %SOURCE-FILENAME%
// Purpose:
// Author: %AUTHOR%
// Modified by:
// Created: %DATE%
// RCS-ID:
// Copyright: %COPYRIGHT%
// Licence:
/////////////////////////////////////////////////////////////////////////////
"
</string>
<string
name=
"cpp_symbols_file_comment"
>
"/////////////////////////////////////////////////////////////////////////////
// Name: %SYMBOLS-FILENAME%
// Purpose: Symbols file
// Author: %AUTHOR%
// Modified by:
// Created: %DATE%
// RCS-ID:
// Copyright: %COPYRIGHT%
// Licence:
/////////////////////////////////////////////////////////////////////////////
"
</string>
<string
name=
"cpp_header_preamble"
>
"#if defined(__GNUG__)
&&
!defined(NO_GCC_PRAGMA)
#pragma interface
"
%HEADER-FILENAME%
"
#endif
"
</string>
<string
name=
"cpp_implementation_preamble"
>
"#if defined(__GNUG__)
&&
!defined(NO_GCC_PRAGMA)
#pragma implementation
"
%HEADER-FILENAME%
"
#endif
// For compilers that support precompilation, includes
"
wx/wx.h
"
.
#include
"
wx/wxprec.h
"
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#ifndef WX_PRECOMP
#include
"
wx/wx.h
"
#endif
"
</string>
<string
name=
"cpp_function_declaration_comment"
>
" /// %BODY%
"
</string>
<string
name=
"cpp_function_implementation_comment"
>
"
/*!
* %BODY%
*/
"
</string>
<string
name=
"resource_file_header"
>
"app_resources.h"
</string>
<string
name=
"resource_file_implementation"
>
"app_resources.cpp"
</string>
<string
name=
"resource_class_name"
>
"AppResources"
</string>
<string
name=
"app_file_header"
>
"app.h"
</string>
<string
name=
"app_file_implementation"
>
"app.cpp"
</string>
<string
name=
"app_class_name"
>
"Application"
</string>
<bool
name=
"generate_app_class"
>
0
</bool>
<string
name=
"external_symbol_filenames"
>
""
</string>
<string
name=
"configuration"
>
"
<
None
>
"
</string>
<string
name=
"source_encoding"
>
"
<
System
>
"
</string>
<string
name=
"xrc_encoding"
>
"
<
System
>
"
</string>
<string
name=
"project_encoding"
>
"
<
System
>
"
</string>
<string
name=
"resource_archive"
>
""
</string>
<long
name=
"text_file_type"
>
2
</long>
<bool
name=
"use_tabs"
>
0
</bool>
<long
name=
"indent_size"
>
4
</long>
<string
name=
"whitespace_after_return_type"
>
" "
</string>
<string
name=
"resource_xrc_cpp"
>
""
</string>
<bool
name=
"use_resource_archive"
>
0
</bool>
<bool
name=
"use_generated_xrc_cpp"
>
0
</bool>
<bool
name=
"always_generate_xrc"
>
1
</bool>
<bool
name=
"use_id_name_for_name"
>
0
</bool>
<bool
name=
"archive_xrc_files"
>
1
</bool>
<bool
name=
"archive_image_files"
>
1
</bool>
<bool
name=
"archive_all_image_files"
>
0
</bool>
<bool
name=
"xrc_retain_relative_paths"
>
1
</bool>
<bool
name=
"xrc_generate_id_tags"
>
0
</bool>
</header>
<data>
<document>
<string
name=
"title"
>
""
</string>
<string
name=
"type"
>
"data-document"
</string>
<string
name=
"filename"
>
""
</string>
<string
name=
"icon-name"
>
""
</string>
<long
name=
"is-transient"
>
0
</long>
<long
name=
"owns-file"
>
1
</long>
<long
name=
"title-mode"
>
0
</long>
<long
name=
"locked"
>
0
</long>
<document>
<string
name=
"title"
>
"Configurations"
</string>
<string
name=
"type"
>
"config-data-document"
</string>
<string
name=
"filename"
>
""
</string>
<string
name=
"icon-name"
>
""
</string>
<long
name=
"is-transient"
>
0
</long>
<long
name=
"owns-file"
>
1
</long>
<long
name=
"title-mode"
>
0
</long>
<long
name=
"locked"
>
0
</long>
<string
name=
"template-name"
>
""
</string>
<bool
name=
"dirty"
>
1
</bool>
<string
name=
"Compiler name"
>
""
</string>
<string
name=
"Build mode"
>
"Debug"
</string>
<string
name=
"Unicode mode"
>
"ANSI"
</string>
<string
name=
"Shared mode"
>
"Static"
</string>
<string
name=
"Modularity"
>
"Modular"
</string>
<string
name=
"GUI mode"
>
"GUI"
</string>
<string
name=
"Toolkit"
>
"wxMSW"
</string>
<string
name=
"Runtime linking"
>
"Dynamic"
</string>
<string
name=
"Use exceptions"
>
"Yes"
</string>
<string
name=
"Use ODBC"
>
"No"
</string>
<string
name=
"Use OpenGL"
>
"No"
</string>
<string
name=
"wxWidgets version"
>
"%WXVERSION%"
</string>
<string
name=
"Executable name"
>
"%EXECUTABLE%"
</string>
<string
name=
"Program arguments"
>
""
</string>
<string
name=
"Working path"
>
"%AUTO%"
</string>
<string
name=
"Output path"
>
"%AUTO%"
</string>
<string
name=
"Objects path"
>
"%AUTO%"
</string>
<string
name=
"Compiler location"
>
"%AUTO%"
</string>
<string
name=
"wxWidgets location"
>
"%AUTO%"
</string>
<string
name=
"C++ command"
>
"%AUTO%"
</string>
<string
name=
"Resource compiler"
>
"%AUTO%"
</string>
<string
name=
"Make command"
>
"%AUTO%"
</string>
<string
name=
"Project makefile"
>
"%AUTO%"
</string>
<string
name=
"wxWidgets makefile"
>
"%AUTO%"
</string>
<string
name=
"Compiler bin path"
>
"%AUTO%"
</string>
<string
name=
"Compiler include path"
>
"%AUTO%"
</string>
<string
name=
"Compiler lib path"
>
"%AUTO%"
</string>
<string
name=
"Preprocessor flags"
>
"%AUTO%"
</string>
<string
name=
"Optimizations"
>
"%AUTO%"
</string>
<string
name=
"Warnings"
>
"%AUTO%"
</string>
<string
name=
"Debug flags"
>
"%AUTO%"
</string>
<string
name=
"Libraries"
>
"%AUTO%"
</string>
<string
name=
"Library path"
>
"%AUTO%"
</string>
<string
name=
"Linker flags"
>
"%AUTO%"
</string>
<string
name=
"Include path"
>
"%AUTO%"
</string>
<string
name=
"Resource flags"
>
"%AUTO%"
</string>
<string
name=
"Resource path"
>
"%AUTO%"
</string>
<string
name=
"wxWidgets build path"
>
"%AUTO%"
</string>
<string
name=
"wxWidgets build command"
>
"%AUTO%"
</string>
<string
name=
"wxWidgets clean command"
>
"%AUTO%"
</string>
<string
name=
"PATH variable"
>
"%AUTO%"
</string>
</document>
</document>
</data>
<documents>
<document>
<string
name=
"title"
>
"Projects"
</string>
<string
name=
"type"
>
"root-document"
</string>
<string
name=
"filename"
>
""
</string>
<string
name=
"icon-name"
>
"project"
</string>
<long
name=
"is-transient"
>
1
</long>
<long
name=
"owns-file"
>
1
</long>
<long
name=
"title-mode"
>
0
</long>
<long
name=
"locked"
>
1
</long>
<document>
<string
name=
"title"
>
"Windows"
</string>
<string
name=
"type"
>
"html-document"
</string>
<string
name=
"filename"
>
""
</string>
<string
name=
"icon-name"
>
"dialogsfolder"
</string>
<long
name=
"is-transient"
>
1
</long>
<long
name=
"owns-file"
>
1
</long>
<long
name=
"title-mode"
>
0
</long>
<long
name=
"locked"
>
1
</long>
<document>
<string
name=
"title"
>
"Fill Zones Options"
</string>
<string
name=
"type"
>
"dialog-document"
</string>
<string
name=
"filename"
>
""
</string>
<string
name=
"icon-name"
>
"dialog"
</string>
<long
name=
"is-transient"
>
0
</long>
<long
name=
"owns-file"
>
1
</long>
<long
name=
"title-mode"
>
0
</long>
<long
name=
"locked"
>
0
</long>
<string
name=
"created"
>
"25/4/2006"
</string>
<string
name=
"proxy-type"
>
"wbDialogProxy"
</string>
<long
name=
"base-id"
>
10000
</long>
<bool
name=
"use-id-prefix"
>
0
</bool>
<string
name=
"id-prefix"
>
""
</string>
<bool
name=
"use-id-suffix"
>
0
</bool>
<string
name=
"id-suffix"
>
""
</string>
<long
name=
"use-xrc"
>
0
</long>
<long
name=
"working-mode"
>
0
</long>
<string
name=
"proxy-Id name"
>
"ID_DIALOG"
</string>
<long
name=
"proxy-Id value"
>
10000
</long>
<string
name=
"proxy-Class"
>
"WinEDA_ZoneFrame"
</string>
<string
name=
"proxy-Base class"
>
"wxDialog"
</string>
<string
name=
"proxy-Window kind"
>
"wxDialog"
</string>
<string
name=
"proxy-Implementation filename"
>
"dialog_zones_by_polygon.cpp"
</string>
<string
name=
"proxy-Header filename"
>
"dialog_zones_by_polygon.h"
</string>
<string
name=
"proxy-XRC filename"
>
""
</string>
<string
name=
"proxy-Title"
>
"Fill Zones Options"
</string>
<bool
name=
"proxy-Centre"
>
1
</bool>
<string
name=
"proxy-Icon"
>
""
</string>
<bool
name=
"proxy-Dialog units"
>
0
</bool>
<string
name=
"proxy-Help text"
>
""
</string>
<string
name=
"proxy-Tooltip text"
>
""
</string>
<string
name=
"proxy-Background colour"
>
""
</string>
<string
name=
"proxy-Foreground colour"
>
""
</string>
<string
name=
"proxy-Font"
>
""
</string>
<bool
name=
"proxy-Hidden"
>
0
</bool>
<bool
name=
"proxy-Enabled"
>
1
</bool>
<string
name=
"proxy-Platform"
>
"
<
Any platform
>
"
</string>
<string
name=
"proxy-Data source"
>
""
</string>
<string
name=
"proxy-Data class name"
>
""
</string>
<string
name=
"proxy-Data class implementation filename"
>
""
</string>
<string
name=
"proxy-Data class header filename"
>
""
</string>
<string
name=
"proxy-Data class manager window"
>
""
</string>
<string
name=
"proxy-Texture"
>
""
</string>
<string
name=
"proxy-Texture style"
>
"Tiled"
</string>
<bool
name=
"proxy-wxDEFAULT_DIALOG_STYLE"
>
0
</bool>
<bool
name=
"proxy-wxCAPTION"
>
1
</bool>
<bool
name=
"proxy-wxRESIZE_BORDER"
>
0
</bool>
<bool
name=
"proxy-wxSYSTEM_MENU"
>
1
</bool>
<bool
name=
"proxy-wxSTAY_ON_TOP"
>
0
</bool>
<bool
name=
"proxy-wxDIALOG_NO_PARENT"
>
0
</bool>
<bool
name=
"proxy-wxCLOSE_BOX"
>
1
</bool>
<bool
name=
"proxy-wxMAXIMIZE_BOX"
>
0
</bool>
<bool
name=
"proxy-wxMINIMIZE_BOX"
>
0
</bool>
<bool
name=
"proxy-wxDIALOG_MODAL"
>
0
</bool>
<bool
name=
"proxy-wxNO_BORDER"
>
0
</bool>
<bool
name=
"proxy-wxSIMPLE_BORDER"
>
0
</bool>
<bool
name=
"proxy-wxDOUBLE_BORDER"
>
0
</bool>
<bool
name=
"proxy-wxSUNKEN_BORDER"
>
0
</bool>
<bool
name=
"proxy-wxRAISED_BORDER"
>
0
</bool>
<bool
name=
"proxy-wxSTATIC_BORDER"
>
0
</bool>
<bool
name=
"proxy-wxWANTS_CHARS"
>
0
</bool>
<bool
name=
"proxy-wxNO_FULL_REPAINT_ON_RESIZE"
>
0
</bool>
<bool
name=
"proxy-wxFULL_REPAINT_ON_RESIZE"
>
0
</bool>
<bool
name=
"proxy-wxCLIP_CHILDREN"
>
0
</bool>
<bool
name=
"proxy-wxTAB_TRAVERSAL"
>
0
</bool>
<bool
name=
"proxy-wxWS_EX_VALIDATE_RECURSIVELY"
>
0
</bool>
<bool
name=
"proxy-wxWS_EX_BLOCK_EVENTS"
>
1
</bool>
<bool
name=
"proxy-wxWS_EX_TRANSIENT"
>
0
</bool>
<string
name=
"proxy-Custom styles"
>
"MAYBE_RESIZE_BORDER"
</string>
<bool
name=
"proxy-wxDIALOG_EX_CONTEXTHELP"
>
0
</bool>
<bool
name=
"proxy-Fit to content"
>
1
</bool>
<long
name=
"proxy-X"
>
-1
</long>
<long
name=
"proxy-Y"
>
-1
</long>
<long
name=
"proxy-Width"
>
400
</long>
<long
name=
"proxy-Height"
>
300
</long>
<bool
name=
"proxy-AUI manager"
>
0
</bool>
<string
name=
"proxy-Event sources"
>
""
</string>
<document>
<string
name=
"title"
>
"wxBoxSizer V"
</string>
<string
name=
"type"
>
"dialog-control-document"
</string>
<string
name=
"filename"
>
""
</string>
<string
name=
"icon-name"
>
"sizer"
</string>
<long
name=
"is-transient"
>
0
</long>
<long
name=
"owns-file"
>
1
</long>
<long
name=
"title-mode"
>
0
</long>
<long
name=
"locked"
>
0
</long>
<string
name=
"created"
>
"15/12/2007"
</string>
<string
name=
"proxy-type"
>
"wbBoxSizerProxy"
</string>
<string
name=
"proxy-Orientation"
>
"Vertical"
</string>
<string
name=
"proxy-Member variable name"
>
""
</string>
<bool
name=
"proxy-wxSHAPED"
>
0
</bool>
<bool
name=
"proxy-wxADJUST_MINSIZE"
>
0
</bool>
<bool
name=
"proxy-wxFIXED_MINSIZE"
>
0
</bool>
<string
name=
"proxy-Platform"
>
"
<
Any platform
>
"
</string>
<document>
<string
name=
"title"
>
"wxBoxSizer H"
</string>
<string
name=
"type"
>
"dialog-control-document"
</string>
<string
name=
"filename"
>
""
</string>
<string
name=
"icon-name"
>
"sizer"
</string>
<long
name=
"is-transient"
>
0
</long>
<long
name=
"owns-file"
>
1
</long>
<long
name=
"title-mode"
>
0
</long>
<long
name=
"locked"
>
0
</long>
<string
name=
"created"
>
"15/12/2007"
</string>
<string
name=
"proxy-type"
>
"wbBoxSizerProxy"
</string>
<string
name=
"proxy-Orientation"
>
"Horizontal"
</string>
<string
name=
"proxy-Member variable name"
>
""
</string>
<string
name=
"proxy-AlignH"
>
"Centre"
</string>
<string
name=
"proxy-AlignV"
>
"Centre"
</string>
<long
name=
"proxy-Stretch factor"
>
0
</long>
<long
name=
"proxy-Border"
>
5
</long>
<bool
name=
"proxy-wxLEFT"
>
1
</bool>
<bool
name=
"proxy-wxRIGHT"
>
1
</bool>
<bool
name=
"proxy-wxTOP"
>
1
</bool>
<bool
name=
"proxy-wxBOTTOM"
>
1
</bool>
<bool
name=
"proxy-wxSHAPED"
>
0
</bool>
<bool
name=
"proxy-wxADJUST_MINSIZE"
>
0
</bool>
<bool
name=
"proxy-wxFIXED_MINSIZE"
>
0
</bool>
<string
name=
"proxy-Platform"
>
"
<
Any platform
>
"
</string>
<document>
<string
name=
"title"
>
"wxBoxSizer V"
</string>
<string
name=
"type"
>
"dialog-control-document"
</string>
<string
name=
"filename"
>
""
</string>
<string
name=
"icon-name"
>
"sizer"
</string>
<long
name=
"is-transient"
>
0
</long>
<long
name=
"owns-file"
>
1
</long>
<long
name=
"title-mode"
>
0
</long>
<long
name=
"locked"
>
0
</long>
<string
name=
"created"
>
"15/12/2007"
</string>
<string
name=
"proxy-type"
>
"wbBoxSizerProxy"
</string>
<string
name=
"proxy-Orientation"
>
"Vertical"
</string>
<string
name=
"proxy-Member variable name"
>
""
</string>
<string
name=
"proxy-AlignH"
>
"Centre"
</string>
<string
name=
"proxy-AlignV"
>
"Expand"
</string>
<long
name=
"proxy-Stretch factor"
>
0
</long>
<long
name=
"proxy-Border"
>
5
</long>
<bool
name=
"proxy-wxLEFT"
>
1
</bool>
<bool
name=
"proxy-wxRIGHT"
>
1
</bool>
<bool
name=
"proxy-wxTOP"
>
1
</bool>
<bool
name=
"proxy-wxBOTTOM"
>
1
</bool>
<bool
name=
"proxy-wxSHAPED"
>
0
</bool>
<bool
name=
"proxy-wxADJUST_MINSIZE"
>
0
</bool>
<bool
name=
"proxy-wxFIXED_MINSIZE"
>
0
</bool>
<string
name=
"proxy-Platform"
>
"
<
Any platform
>
"
</string>
<document>
<string
name=
"title"
>
"wxRadioBox: ID_RADIOBOX3"
</string>
<string
name=
"type"
>
"dialog-control-document"
</string>
<string
name=
"filename"
>
""
</string>
<string
name=
"icon-name"
>
"radiobox"
</string>
<long
name=
"is-transient"
>
0
</long>
<long
name=
"owns-file"
>
1
</long>
<long
name=
"title-mode"
>
0
</long>
<long
name=
"locked"
>
0
</long>
<string
name=
"created"
>
"15/12/2007"
</string>
<string
name=
"proxy-type"
>
"wbRadioBoxProxy"
</string>
<string
name=
"proxy-Id name"
>
"ID_RADIOBOX3"
</string>
<long
name=
"proxy-Id value"
>
10003
</long>
<string
name=
"proxy-Name"
>
""
</string>
<string
name=
"proxy-Class"
>
"wxRadioBox"
</string>
<string
name=
"proxy-Base class"
>
"wxRadioBox"
</string>
<bool
name=
"proxy-External implementation"
>
1
</bool>
<bool
name=
"proxy-Separate files"
>
0
</bool>
<string
name=
"proxy-Implementation filename"
>
""
</string>
<string
name=
"proxy-Header filename"
>
""
</string>
<string
name=
"proxy-Member variable name"
>
"m_GridCtrl"
</string>
<string
name=
"proxy-Label"
>
"Grid Size for Filling:"
</string>
<long
name=
"proxy-Major dimension count"
>
1
</long>
<string
name=
"proxy-Items"
>
"0.00000|0.00000|0.00000|0.00000"
</string>
<long
name=
"proxy-Initial value"
>
0
</long>
<string
name=
"proxy-Help text"
>
""
</string>
<string
name=
"proxy-Tooltip text"
>
""
</string>
<string
name=
"proxy-Background colour"
>
""
</string>
<string
name=
"proxy-Foreground colour"
>
""
</string>
<string
name=
"proxy-Font"
>
""
</string>
<bool
name=
"proxy-Hidden"
>
0
</bool>
<bool
name=
"proxy-Enabled"
>
1
</bool>
<string
name=
"proxy-Platform"
>
"
<
Any platform
>
"
</string>
<string
name=
"proxy-Data variable"
>
""
</string>
<string
name=
"proxy-Data validator"
>
""
</string>
<string
name=
"proxy-Data source"
>
""
</string>
<string
name=
"proxy-Data class name"
>
""
</string>
<string
name=
"proxy-Data class implementation filename"
>
""
</string>
<string
name=
"proxy-Data class header filename"
>
""
</string>
<string
name=
"proxy-Data class manager window"
>
""
</string>
<bool
name=
"proxy-wxRA_SPECIFY_ROWS"
>
0
</bool>
<bool
name=
"proxy-wxRA_SPECIFY_COLS"
>
1
</bool>
<bool
name=
"proxy-wxWANTS_CHARS"
>
0
</bool>
<bool
name=
"proxy-wxNO_FULL_REPAINT_ON_RESIZE"
>
0
</bool>
<bool
name=
"proxy-wxFULL_REPAINT_ON_RESIZE"
>
0
</bool>
<string
name=
"proxy-Custom styles"
>
""
</string>
<long
name=
"proxy-X"
>
-1
</long>
<long
name=
"proxy-Y"
>
-1
</long>
<long
name=
"proxy-Width"
>
-1
</long>
<long
name=
"proxy-Height"
>
-1
</long>
<string
name=
"proxy-AlignH"
>
"Expand"
</string>
<string
name=
"proxy-AlignV"
>
"Centre"
</string>
<long
name=
"proxy-Stretch factor"
>
0
</long>
<long
name=
"proxy-Border"
>
5
</long>
<bool
name=
"proxy-wxLEFT"
>
1
</bool>
<bool
name=
"proxy-wxRIGHT"
>
1
</bool>
<bool
name=
"proxy-wxTOP"
>
1
</bool>
<bool
name=
"proxy-wxBOTTOM"
>
1
</bool>
<bool
name=
"proxy-wxSHAPED"
>
0
</bool>
<bool
name=
"proxy-wxADJUST_MINSIZE"
>
0
</bool>
<bool
name=
"proxy-wxFIXED_MINSIZE"
>
0
</bool>
<string
name=
"proxy-Custom arguments"
>
""
</string>
<string
name=
"proxy-Custom ctor arguments"
>
""
</string>
</document>
<document>
<string
name=
"title"
>
"wxStaticText: wxID_STATIC"
</string>
<string
name=
"type"
>
"dialog-control-document"
</string>
<string
name=
"filename"
>
""
</string>
<string
name=
"icon-name"
>
"statictext"
</string>
<long
name=
"is-transient"
>
0
</long>
<long
name=
"owns-file"
>
1
</long>
<long
name=
"title-mode"
>
0
</long>
<long
name=
"locked"
>
0
</long>
<string
name=
"created"
>
"15/12/2007"
</string>
<string
name=
"proxy-type"
>
"wbStaticTextProxy"
</string>
<string
name=
"proxy-Id name"
>
"wxID_STATIC"
</string>
<long
name=
"proxy-Id value"
>
5105
</long>
<string
name=
"proxy-Name"
>
""
</string>
<string
name=
"proxy-Class"
>
"wxStaticText"
</string>
<string
name=
"proxy-Base class"
>
"wxStaticText"
</string>
<bool
name=
"proxy-External implementation"
>
1
</bool>
<bool
name=
"proxy-Separate files"
>
0
</bool>
<string
name=
"proxy-Implementation filename"
>
""
</string>
<string
name=
"proxy-Header filename"
>
""
</string>
<string
name=
"proxy-Member variable name"
>
"m_ClearanceValueTitle"
</string>
<string
name=
"proxy-Label"
>
"Zone clearance value (mm):"
</string>
<long
name=
"proxy-Wrapping width"
>
-1
</long>
<string
name=
"proxy-Help text"
>
""
</string>
<string
name=
"proxy-Tooltip text"
>
""
</string>
<string
name=
"proxy-Background colour"
>
""
</string>
<string
name=
"proxy-Foreground colour"
>
""
</string>
<string
name=
"proxy-Font"
>
""
</string>
<bool
name=
"proxy-Hidden"
>
0
</bool>
<bool
name=
"proxy-Enabled"
>
1
</bool>
<string
name=
"proxy-Platform"
>
"
<
Any platform
>
"
</string>
<string
name=
"proxy-Data variable"
>
""
</string>
<string
name=
"proxy-Data validator"
>
""
</string>
<string
name=
"proxy-Data source"
>
""
</string>
<string
name=
"proxy-Data class name"
>
""
</string>
<string
name=
"proxy-Data class implementation filename"
>
""
</string>
<string
name=
"proxy-Data class header filename"
>
""
</string>
<string
name=
"proxy-Data class manager window"
>
""
</string>
<bool
name=
"proxy-wxALIGN_LEFT"
>
0
</bool>
<bool
name=
"proxy-wxALIGN_RIGHT"
>
0
</bool>
<bool
name=
"proxy-wxALIGN_CENTRE"
>
0
</bool>
<bool
name=
"proxy-wxST_NO_AUTORESIZE"
>
0
</bool>
<bool
name=
"proxy-wxNO_BORDER"
>
0
</bool>
<bool
name=
"proxy-wxSIMPLE_BORDER"
>
0
</bool>
<bool
name=
"proxy-wxDOUBLE_BORDER"
>
0
</bool>
<bool
name=
"proxy-wxSUNKEN_BORDER"
>
0
</bool>
<bool
name=
"proxy-wxRAISED_BORDER"
>
0
</bool>
<bool
name=
"proxy-wxSTATIC_BORDER"
>
0
</bool>
<bool
name=
"proxy-wxWANTS_CHARS"
>
0
</bool>
<bool
name=
"proxy-wxNO_FULL_REPAINT_ON_RESIZE"
>
0
</bool>
<bool
name=
"proxy-wxFULL_REPAINT_ON_RESIZE"
>
0
</bool>
<string
name=
"proxy-Custom styles"
>
""
</string>
<long
name=
"proxy-X"
>
-1
</long>
<long
name=
"proxy-Y"
>
-1
</long>
<long
name=
"proxy-Width"
>
-1
</long>
<long
name=
"proxy-Height"
>
-1
</long>
<string
name=
"proxy-AlignH"
>
"Left"
</string>
<string
name=
"proxy-AlignV"
>
"Centre"
</string>
<long
name=
"proxy-Stretch factor"
>
0
</long>
<long
name=
"proxy-Border"
>
5
</long>
<bool
name=
"proxy-wxLEFT"
>
1
</bool>
<bool
name=
"proxy-wxRIGHT"
>
1
</bool>
<bool
name=
"proxy-wxTOP"
>
1
</bool>
<bool
name=
"proxy-wxBOTTOM"
>
0
</bool>
<bool
name=
"proxy-wxSHAPED"
>
0
</bool>
<bool
name=
"proxy-wxADJUST_MINSIZE"
>
1
</bool>
<bool
name=
"proxy-wxFIXED_MINSIZE"
>
0
</bool>
<string
name=
"proxy-Custom arguments"
>
""
</string>
<string
name=
"proxy-Custom ctor arguments"
>
""
</string>
</document>
<document>
<string
name=
"title"
>
"wxTextCtrl: ID_TEXTCTRL1"
</string>
<string
name=
"type"
>
"dialog-control-document"
</string>
<string
name=
"filename"
>
""
</string>
<string
name=
"icon-name"
>
"textctrl"
</string>
<long
name=
"is-transient"
>
0
</long>
<long
name=
"owns-file"
>
1
</long>
<long
name=
"title-mode"
>
0
</long>
<long
name=
"locked"
>
0
</long>
<string
name=
"created"
>
"15/12/2007"
</string>
<string
name=
"proxy-type"
>
"wbTextCtrlProxy"
</string>
<string
name=
"proxy-Id name"
>
"ID_TEXTCTRL1"
</string>
<long
name=
"proxy-Id value"
>
10007
</long>
<string
name=
"proxy-Name"
>
""
</string>
<string
name=
"proxy-Class"
>
"wxTextCtrl"
</string>
<string
name=
"proxy-Base class"
>
"wxTextCtrl"
</string>
<bool
name=
"proxy-External implementation"
>
1
</bool>
<bool
name=
"proxy-Separate files"
>
0
</bool>
<string
name=
"proxy-Implementation filename"
>
""
</string>
<string
name=
"proxy-Header filename"
>
""
</string>
<string
name=
"proxy-Member variable name"
>
"m_ZoneClearanceCtrl"
</string>
<string
name=
"proxy-Initial value"
>
""
</string>
<long
name=
"proxy-Max length"
>
0
</long>
<string
name=
"proxy-Help text"
>
""
</string>
<string
name=
"proxy-Tooltip text"
>
""
</string>
<string
name=
"proxy-Background colour"
>
""
</string>
<string
name=
"proxy-Foreground colour"
>
""
</string>
<string
name=
"proxy-Font"
>
""
</string>
<bool
name=
"proxy-Hidden"
>
0
</bool>
<bool
name=
"proxy-Enabled"
>
1
</bool>
<string
name=
"proxy-Platform"
>
"
<
Any platform
>
"
</string>
<string
name=
"proxy-Data variable"
>
""
</string>
<string
name=
"proxy-Data validator"
>
""
</string>
<string
name=
"proxy-Data source"
>
""
</string>
<string
name=
"proxy-Data class name"
>
""
</string>
<string
name=
"proxy-Data class implementation filename"
>
""
</string>
<string
name=
"proxy-Data class header filename"
>
""
</string>
<string
name=
"proxy-Data class manager window"
>
""
</string>
<bool
name=
"proxy-wxTE_MULTILINE"
>
0
</bool>
<bool
name=
"proxy-wxTE_PROCESS_ENTER"
>
0
</bool>
<bool
name=
"proxy-wxTE_PROCESS_TAB"
>
0
</bool>
<bool
name=
"proxy-wxTE_PASSWORD"
>
0
</bool>
<bool
name=
"proxy-wxTE_READONLY"
>
0
</bool>
<bool
name=
"proxy-wxTE_RICH"
>
0
</bool>
<bool
name=
"proxy-wxTE_RICH2"
>
0
</bool>
<bool
name=
"proxy-wxTE_AUTO_URL"
>
0
</bool>
<bool
name=
"proxy-wxTE_NOHIDESEL"
>
0
</bool>
<bool
name=
"proxy-wxTE_LEFT"
>
0
</bool>
<bool
name=
"proxy-wxTE_CENTRE"
>
0
</bool>
<bool
name=
"proxy-wxTE_RIGHT"
>
0
</bool>
<bool
name=
"proxy-wxHSCROLL"
>
0
</bool>
<bool
name=
"proxy-wxTE_CHARWRAP"
>
0
</bool>
<bool
name=
"proxy-wxTE_WORDWRAP"
>
0
</bool>
<bool
name=
"proxy-wxTE_CAPITALIZE"
>
0
</bool>
<bool
name=
"proxy-wxNO_BORDER"
>
0
</bool>
<bool
name=
"proxy-wxSIMPLE_BORDER"
>
0
</bool>
<bool
name=
"proxy-wxDOUBLE_BORDER"
>
0
</bool>
<bool
name=
"proxy-wxSUNKEN_BORDER"
>
0
</bool>
<bool
name=
"proxy-wxRAISED_BORDER"
>
0
</bool>
<bool
name=
"proxy-wxSTATIC_BORDER"
>
0
</bool>
<bool
name=
"proxy-wxWANTS_CHARS"
>
0
</bool>
<bool
name=
"proxy-wxNO_FULL_REPAINT_ON_RESIZE"
>
0
</bool>
<bool
name=
"proxy-wxFULL_REPAINT_ON_RESIZE"
>
0
</bool>
<string
name=
"proxy-Custom styles"
>
""
</string>
<long
name=
"proxy-X"
>
-1
</long>
<long
name=
"proxy-Y"
>
-1
</long>
<long
name=
"proxy-Width"
>
-1
</long>
<long
name=
"proxy-Height"
>
-1
</long>
<string
name=
"proxy-AlignH"
>
"Expand"
</string>
<string
name=
"proxy-AlignV"
>
"Centre"
</string>
<long
name=
"proxy-Stretch factor"
>
0
</long>
<long
name=
"proxy-Border"
>
5
</long>
<bool
name=
"proxy-wxLEFT"
>
1
</bool>
<bool
name=
"proxy-wxRIGHT"
>
1
</bool>
<bool
name=
"proxy-wxTOP"
>
0
</bool>
<bool
name=
"proxy-wxBOTTOM"
>
1
</bool>
<bool
name=
"proxy-wxSHAPED"
>
0
</bool>
<bool
name=
"proxy-wxADJUST_MINSIZE"
>
0
</bool>
<bool
name=
"proxy-wxFIXED_MINSIZE"
>
0
</bool>
<string
name=
"proxy-Custom arguments"
>
""
</string>
<string
name=
"proxy-Custom ctor arguments"
>
""
</string>
</document>
</document>
<document>
<string
name=
"title"
>
"Spacer"
</string>
<string
name=
"type"
>
"dialog-control-document"
</string>
<string
name=
"filename"
>
""
</string>
<string
name=
"icon-name"
>
"spacer"
</string>
<long
name=
"is-transient"
>
0
</long>
<long
name=
"owns-file"
>
1
</long>
<long
name=
"title-mode"
>
0
</long>
<long
name=
"locked"
>
0
</long>
<string
name=
"created"
>
"15/12/2007"
</string>
<string
name=
"proxy-type"
>
"wbSpacerProxy"
</string>
<long
name=
"proxy-Width"
>
5
</long>
<long
name=
"proxy-Height"
>
5
</long>
<string
name=
"proxy-AlignH"
>
"Centre"
</string>
<string
name=
"proxy-AlignV"
>
"Expand"
</string>
<long
name=
"proxy-Stretch factor"
>
0
</long>
<long
name=
"proxy-Border"
>
5
</long>
<bool
name=
"proxy-wxLEFT"
>
1
</bool>
<bool
name=
"proxy-wxRIGHT"
>
1
</bool>
<bool
name=
"proxy-wxTOP"
>
1
</bool>
<bool
name=
"proxy-wxBOTTOM"
>
1
</bool>
<bool
name=
"proxy-wxSHAPED"
>
0
</bool>
<bool
name=
"proxy-wxADJUST_MINSIZE"
>
0
</bool>
<bool
name=
"proxy-wxFIXED_MINSIZE"
>
0
</bool>
<string
name=
"proxy-Platform"
>
"
<
Any platform
>
"
</string>
</document>
<document>
<string
name=
"title"
>
"wxBoxSizer V"
</string>
<string
name=
"type"
>
"dialog-control-document"
</string>
<string
name=
"filename"
>
""
</string>
<string
name=
"icon-name"
>
"sizer"
</string>
<long
name=
"is-transient"
>
0
</long>
<long
name=
"owns-file"
>
1
</long>
<long
name=
"title-mode"
>
0
</long>
<long
name=
"locked"
>
0
</long>
<string
name=
"created"
>
"15/12/2007"
</string>
<string
name=
"proxy-type"
>
"wbBoxSizerProxy"
</string>
<string
name=
"proxy-Orientation"
>
"Vertical"
</string>
<string
name=
"proxy-Member variable name"
>
""
</string>
<string
name=
"proxy-AlignH"
>
"Centre"
</string>
<string
name=
"proxy-AlignV"
>
"Expand"
</string>
<long
name=
"proxy-Stretch factor"
>
0
</long>
<long
name=
"proxy-Border"
>
5
</long>
<bool
name=
"proxy-wxLEFT"
>
1
</bool>
<bool
name=
"proxy-wxRIGHT"
>
1
</bool>
<bool
name=
"proxy-wxTOP"
>
1
</bool>
<bool
name=
"proxy-wxBOTTOM"
>
1
</bool>
<bool
name=
"proxy-wxSHAPED"
>
0
</bool>
<bool
name=
"proxy-wxADJUST_MINSIZE"
>
0
</bool>
<bool
name=
"proxy-wxFIXED_MINSIZE"
>
0
</bool>
<string
name=
"proxy-Platform"
>
"
<
Any platform
>
"
</string>
<document>
<string
name=
"title"
>
"wxRadioBox: ID_RADIOBOX4"
</string>
<string
name=
"type"
>
"dialog-control-document"
</string>
<string
name=
"filename"
>
""
</string>
<string
name=
"icon-name"
>
"radiobox"
</string>
<long
name=
"is-transient"
>
0
</long>
<long
name=
"owns-file"
>
1
</long>
<long
name=
"title-mode"
>
0
</long>
<long
name=
"locked"
>
0
</long>
<string
name=
"created"
>
"15/12/2007"
</string>
<string
name=
"proxy-type"
>
"wbRadioBoxProxy"
</string>
<string
name=
"proxy-Id name"
>
"ID_RADIOBOX4"
</string>
<long
name=
"proxy-Id value"
>
10008
</long>
<string
name=
"proxy-Name"
>
""
</string>
<string
name=
"proxy-Class"
>
"wxRadioBox"
</string>
<string
name=
"proxy-Base class"
>
"wxRadioBox"
</string>
<bool
name=
"proxy-External implementation"
>
1
</bool>
<bool
name=
"proxy-Separate files"
>
0
</bool>
<string
name=
"proxy-Implementation filename"
>
""
</string>
<string
name=
"proxy-Header filename"
>
""
</string>
<string
name=
"proxy-Member variable name"
>
"m_FillOpt"
</string>
<string
name=
"proxy-Label"
>
"Pad options:"
</string>
<long
name=
"proxy-Major dimension count"
>
1
</long>
<string
name=
"proxy-Items"
>
"Include Pads|Thermal|Exclude Pads"
</string>
<long
name=
"proxy-Initial value"
>
0
</long>
<string
name=
"proxy-Help text"
>
""
</string>
<string
name=
"proxy-Tooltip text"
>
""
</string>
<string
name=
"proxy-Background colour"
>
""
</string>
<string
name=
"proxy-Foreground colour"
>
""
</string>
<string
name=
"proxy-Font"
>
""
</string>
<bool
name=
"proxy-Hidden"
>
0
</bool>
<bool
name=
"proxy-Enabled"
>
1
</bool>
<string
name=
"proxy-Platform"
>
"
<
Any platform
>
"
</string>
<string
name=
"proxy-Data variable"
>
""
</string>
<string
name=
"proxy-Data validator"
>
""
</string>
<string
name=
"proxy-Data source"
>
""
</string>
<string
name=
"proxy-Data class name"
>
""
</string>
<string
name=
"proxy-Data class implementation filename"
>
""
</string>
<string
name=
"proxy-Data class header filename"
>
""
</string>
<string
name=
"proxy-Data class manager window"
>
""
</string>
<bool
name=
"proxy-wxRA_SPECIFY_ROWS"
>
0
</bool>
<bool
name=
"proxy-wxRA_SPECIFY_COLS"
>
1
</bool>
<bool
name=
"proxy-wxWANTS_CHARS"
>
0
</bool>
<bool
name=
"proxy-wxNO_FULL_REPAINT_ON_RESIZE"
>
0
</bool>
<bool
name=
"proxy-wxFULL_REPAINT_ON_RESIZE"
>
0
</bool>
<string
name=
"proxy-Custom styles"
>
""
</string>
<long
name=
"proxy-X"
>
-1
</long>
<long
name=
"proxy-Y"
>
-1
</long>
<long
name=
"proxy-Width"
>
-1
</long>
<long
name=
"proxy-Height"
>
-1
</long>
<string
name=
"proxy-AlignH"
>
"Expand"
</string>
<string
name=
"proxy-AlignV"
>
"Centre"
</string>
<long
name=
"proxy-Stretch factor"
>
0
</long>
<long
name=
"proxy-Border"
>
5
</long>
<bool
name=
"proxy-wxLEFT"
>
1
</bool>
<bool
name=
"proxy-wxRIGHT"
>
1
</bool>
<bool
name=
"proxy-wxTOP"
>
1
</bool>
<bool
name=
"proxy-wxBOTTOM"
>
1
</bool>
<bool
name=
"proxy-wxSHAPED"
>
0
</bool>
<bool
name=
"proxy-wxADJUST_MINSIZE"
>
0
</bool>
<bool
name=
"proxy-wxFIXED_MINSIZE"
>
0
</bool>
<string
name=
"proxy-Custom arguments"
>
""
</string>
<string
name=
"proxy-Custom ctor arguments"
>
""
</string>
</document>
<document>
<string
name=
"title"
>
"wxRadioBox: ID_RADIOBOX5"
</string>
<string
name=
"type"
>
"dialog-control-document"
</string>
<string
name=
"filename"
>
""
</string>
<string
name=
"icon-name"
>
"radiobox"
</string>
<long
name=
"is-transient"
>
0
</long>
<long
name=
"owns-file"
>
1
</long>
<long
name=
"title-mode"
>
0
</long>
<long
name=
"locked"
>
0
</long>
<string
name=
"created"
>
"15/12/2007"
</string>
<string
name=
"proxy-type"
>
"wbRadioBoxProxy"
</string>
<string
name=
"proxy-Id name"
>
"ID_RADIOBOX5"
</string>
<long
name=
"proxy-Id value"
>
10009
</long>
<string
name=
"proxy-Name"
>
""
</string>
<string
name=
"proxy-Class"
>
"wxRadioBox"
</string>
<string
name=
"proxy-Base class"
>
"wxRadioBox"
</string>
<bool
name=
"proxy-External implementation"
>
1
</bool>
<bool
name=
"proxy-Separate files"
>
0
</bool>
<string
name=
"proxy-Implementation filename"
>
""
</string>
<string
name=
"proxy-Header filename"
>
""
</string>
<string
name=
"proxy-Member variable name"
>
"m_OrientEdgesOpt"
</string>
<string
name=
"proxy-Label"
>
"Zone edges orient:"
</string>
<long
name=
"proxy-Major dimension count"
>
1
</long>
<string
name=
"proxy-Items"
>
"Any|H , V and 45 deg"
</string>
<long
name=
"proxy-Initial value"
>
0
</long>
<string
name=
"proxy-Help text"
>
""
</string>
<string
name=
"proxy-Tooltip text"
>
""
</string>
<string
name=
"proxy-Background colour"
>
""
</string>
<string
name=
"proxy-Foreground colour"
>
""
</string>
<string
name=
"proxy-Font"
>
""
</string>
<bool
name=
"proxy-Hidden"
>
0
</bool>
<bool
name=
"proxy-Enabled"
>
1
</bool>
<string
name=
"proxy-Platform"
>
"
<
Any platform
>
"
</string>
<string
name=
"proxy-Data variable"
>
""
</string>
<string
name=
"proxy-Data validator"
>
""
</string>
<string
name=
"proxy-Data source"
>
""
</string>
<string
name=
"proxy-Data class name"
>
""
</string>
<string
name=
"proxy-Data class implementation filename"
>
""
</string>
<string
name=
"proxy-Data class header filename"
>
""
</string>
<string
name=
"proxy-Data class manager window"
>
""
</string>
<bool
name=
"proxy-wxRA_SPECIFY_ROWS"
>
0
</bool>
<bool
name=
"proxy-wxRA_SPECIFY_COLS"
>
1
</bool>
<bool
name=
"proxy-wxWANTS_CHARS"
>
0
</bool>
<bool
name=
"proxy-wxNO_FULL_REPAINT_ON_RESIZE"
>
0
</bool>
<bool
name=
"proxy-wxFULL_REPAINT_ON_RESIZE"
>
0
</bool>
<string
name=
"proxy-Custom styles"
>
""
</string>
<long
name=
"proxy-X"
>
-1
</long>
<long
name=
"proxy-Y"
>
-1
</long>
<long
name=
"proxy-Width"
>
-1
</long>
<long
name=
"proxy-Height"
>
-1
</long>
<string
name=
"proxy-AlignH"
>
"Expand"
</string>
<string
name=
"proxy-AlignV"
>
"Centre"
</string>
<long
name=
"proxy-Stretch factor"
>
0
</long>
<long
name=
"proxy-Border"
>
5
</long>
<bool
name=
"proxy-wxLEFT"
>
1
</bool>
<bool
name=
"proxy-wxRIGHT"
>
1
</bool>
<bool
name=
"proxy-wxTOP"
>
1
</bool>
<bool
name=
"proxy-wxBOTTOM"
>
1
</bool>
<bool
name=
"proxy-wxSHAPED"
>
0
</bool>
<bool
name=
"proxy-wxADJUST_MINSIZE"
>
0
</bool>
<bool
name=
"proxy-wxFIXED_MINSIZE"
>
0
</bool>
<string
name=
"proxy-Custom arguments"
>
""
</string>
<string
name=
"proxy-Custom ctor arguments"
>
""
</string>
</document>
</document>
<document>
<string
name=
"title"
>
"Spacer"
</string>
<string
name=
"type"
>
"dialog-control-document"
</string>
<string
name=
"filename"
>
""
</string>
<string
name=
"icon-name"
>
"spacer"
</string>
<long
name=
"is-transient"
>
0
</long>
<long
name=
"owns-file"
>
1
</long>
<long
name=
"title-mode"
>
0
</long>
<long
name=
"locked"
>
0
</long>
<string
name=
"created"
>
"15/12/2007"
</string>
<string
name=
"proxy-type"
>
"wbSpacerProxy"
</string>
<long
name=
"proxy-Width"
>
5
</long>
<long
name=
"proxy-Height"
>
5
</long>
<string
name=
"proxy-AlignH"
>
"Centre"
</string>
<string
name=
"proxy-AlignV"
>
"Expand"
</string>
<long
name=
"proxy-Stretch factor"
>
0
</long>
<long
name=
"proxy-Border"
>
5
</long>
<bool
name=
"proxy-wxLEFT"
>
1
</bool>
<bool
name=
"proxy-wxRIGHT"
>
1
</bool>
<bool
name=
"proxy-wxTOP"
>
1
</bool>
<bool
name=
"proxy-wxBOTTOM"
>
1
</bool>
<bool
name=
"proxy-wxSHAPED"
>
0
</bool>
<bool
name=
"proxy-wxADJUST_MINSIZE"
>
0
</bool>
<bool
name=
"proxy-wxFIXED_MINSIZE"
>
0
</bool>
<string
name=
"proxy-Platform"
>
"
<
Any platform
>
"
</string>
</document>
<document>
<string
name=
"title"
>
"wxBoxSizer V"
</string>
<string
name=
"type"
>
"dialog-control-document"
</string>
<string
name=
"filename"
>
""
</string>
<string
name=
"icon-name"
>
"sizer"
</string>
<long
name=
"is-transient"
>
0
</long>
<long
name=
"owns-file"
>
1
</long>
<long
name=
"title-mode"
>
0
</long>
<long
name=
"locked"
>
0
</long>
<string
name=
"created"
>
"15/12/2007"
</string>
<string
name=
"proxy-type"
>
"wbBoxSizerProxy"
</string>
<string
name=
"proxy-Orientation"
>
"Vertical"
</string>
<string
name=
"proxy-Member variable name"
>
""
</string>
<string
name=
"proxy-AlignH"
>
"Centre"
</string>
<string
name=
"proxy-AlignV"
>
"Expand"
</string>
<long
name=
"proxy-Stretch factor"
>
0
</long>
<long
name=
"proxy-Border"
>
5
</long>
<bool
name=
"proxy-wxLEFT"
>
1
</bool>
<bool
name=
"proxy-wxRIGHT"
>
1
</bool>
<bool
name=
"proxy-wxTOP"
>
1
</bool>
<bool
name=
"proxy-wxBOTTOM"
>
1
</bool>
<bool
name=
"proxy-wxSHAPED"
>
0
</bool>
<bool
name=
"proxy-wxADJUST_MINSIZE"
>
0
</bool>
<bool
name=
"proxy-wxFIXED_MINSIZE"
>
0
</bool>
<string
name=
"proxy-Platform"
>
"
<
Any platform
>
"
</string>
<document>
<string
name=
"title"
>
"wxButton: ID_BUTTON"
</string>
<string
name=
"type"
>
"dialog-control-document"
</string>
<string
name=
"filename"
>
""
</string>
<string
name=
"icon-name"
>
"dialogcontrol"
</string>
<long
name=
"is-transient"
>
0
</long>
<long
name=
"owns-file"
>
1
</long>
<long
name=
"title-mode"
>
0
</long>
<long
name=
"locked"
>
0
</long>
<string
name=
"created"
>
"15/12/2007"
</string>
<string
name=
"proxy-type"
>
"wbButtonProxy"
</string>
<string
name=
"event-handler-0"
>
"wxEVT_COMMAND_BUTTON_CLICKED|ExecFillZone|||WinEDA_ZoneFrame"
</string>
<string
name=
"proxy-Id name"
>
"ID_BUTTON"
</string>
<long
name=
"proxy-Id value"
>
10010
</long>
<string
name=
"proxy-Name"
>
""
</string>
<string
name=
"proxy-Class"
>
"wxButton"
</string>
<string
name=
"proxy-Base class"
>
"wxButton"
</string>
<bool
name=
"proxy-External implementation"
>
1
</bool>
<bool
name=
"proxy-Separate files"
>
0
</bool>
<string
name=
"proxy-Implementation filename"
>
""
</string>
<string
name=
"proxy-Header filename"
>
""
</string>
<string
name=
"proxy-Member variable name"
>
""
</string>
<string
name=
"proxy-Label"
>
"Fill"
</string>
<bool
name=
"proxy-Default"
>
1
</bool>
<string
name=
"proxy-Help text"
>
""
</string>
<string
name=
"proxy-Tooltip text"
>
""
</string>
<string
name=
"proxy-Data variable"
>
""
</string>
<string
name=
"proxy-Data validator"
>
""
</string>
<string
name=
"proxy-Data source"
>
""
</string>
<string
name=
"proxy-Data class name"
>
""
</string>
<string
name=
"proxy-Data class implementation filename"
>
""
</string>
<string
name=
"proxy-Data class header filename"
>
""
</string>
<string
name=
"proxy-Data class manager window"
>
""
</string>
<string
name=
"proxy-Background colour"
>
""
</string>
<string
name=
"proxy-Foreground colour"
>
"CC0000"
</string>
<string
name=
"proxy-Font"
>
""
</string>
<bool
name=
"proxy-Hidden"
>
0
</bool>
<bool
name=
"proxy-Enabled"
>
1
</bool>
<string
name=
"proxy-Platform"
>
"
<
Any platform
>
"
</string>
<bool
name=
"proxy-wxBU_LEFT"
>
0
</bool>
<bool
name=
"proxy-wxBU_RIGHT"
>
0
</bool>
<bool
name=
"proxy-wxBU_TOP"
>
0
</bool>
<bool
name=
"proxy-wxBU_BOTTOM"
>
0
</bool>
<bool
name=
"proxy-wxBU_EXACTFIT"
>
0
</bool>
<bool
name=
"proxy-wxNO_BORDER"
>
0
</bool>
<bool
name=
"proxy-wxWANTS_CHARS"
>
0
</bool>
<bool
name=
"proxy-wxNO_FULL_REPAINT_ON_RESIZE"
>
0
</bool>
<bool
name=
"proxy-wxFULL_REPAINT_ON_RESIZE"
>
0
</bool>
<string
name=
"proxy-Custom styles"
>
""
</string>
<long
name=
"proxy-X"
>
-1
</long>
<long
name=
"proxy-Y"
>
-1
</long>
<long
name=
"proxy-Width"
>
-1
</long>
<long
name=
"proxy-Height"
>
-1
</long>
<string
name=
"proxy-AlignH"
>
"Expand"
</string>
<string
name=
"proxy-AlignV"
>
"Centre"
</string>
<long
name=
"proxy-Stretch factor"
>
0
</long>
<long
name=
"proxy-Border"
>
5
</long>
<bool
name=
"proxy-wxLEFT"
>
1
</bool>
<bool
name=
"proxy-wxRIGHT"
>
1
</bool>
<bool
name=
"proxy-wxTOP"
>
1
</bool>
<bool
name=
"proxy-wxBOTTOM"
>
1
</bool>
<bool
name=
"proxy-wxSHAPED"
>
0
</bool>
<bool
name=
"proxy-wxADJUST_MINSIZE"
>
0
</bool>
<bool
name=
"proxy-wxFIXED_MINSIZE"
>
0
</bool>
<string
name=
"proxy-Custom arguments"
>
""
</string>
<string
name=
"proxy-Custom ctor arguments"
>
""
</string>
</document>
<document>
<string
name=
"title"
>
"wxButton: wxID_CANCEL"
</string>
<string
name=
"type"
>
"dialog-control-document"
</string>
<string
name=
"filename"
>
""
</string>
<string
name=
"icon-name"
>
"dialogcontrol"
</string>
<long
name=
"is-transient"
>
0
</long>
<long
name=
"owns-file"
>
1
</long>
<long
name=
"title-mode"
>
0
</long>
<long
name=
"locked"
>
0
</long>
<string
name=
"created"
>
"15/12/2007"
</string>
<string
name=
"proxy-type"
>
"wbButtonProxy"
</string>
<string
name=
"event-handler-0"
>
"wxEVT_COMMAND_BUTTON_CLICKED|OnCancelClick"
</string>
<string
name=
"proxy-Id name"
>
"wxID_CANCEL"
</string>
<long
name=
"proxy-Id value"
>
5101
</long>
<string
name=
"proxy-Name"
>
""
</string>
<string
name=
"proxy-Class"
>
"wxButton"
</string>
<string
name=
"proxy-Base class"
>
"wxButton"
</string>
<bool
name=
"proxy-External implementation"
>
1
</bool>
<bool
name=
"proxy-Separate files"
>
0
</bool>
<string
name=
"proxy-Implementation filename"
>
""
</string>
<string
name=
"proxy-Header filename"
>
""
</string>
<string
name=
"proxy-Member variable name"
>
""
</string>
<string
name=
"proxy-Label"
>
"
&
Cancel"
</string>
<bool
name=
"proxy-Default"
>
0
</bool>
<string
name=
"proxy-Help text"
>
""
</string>
<string
name=
"proxy-Tooltip text"
>
""
</string>
<string
name=
"proxy-Data variable"
>
""
</string>
<string
name=
"proxy-Data validator"
>
""
</string>
<string
name=
"proxy-Data source"
>
""
</string>
<string
name=
"proxy-Data class name"
>
""
</string>
<string
name=
"proxy-Data class implementation filename"
>
""
</string>
<string
name=
"proxy-Data class header filename"
>
""
</string>
<string
name=
"proxy-Data class manager window"
>
""
</string>
<string
name=
"proxy-Background colour"
>
""
</string>
<string
name=
"proxy-Foreground colour"
>
"0000FF"
</string>
<string
name=
"proxy-Font"
>
""
</string>
<bool
name=
"proxy-Hidden"
>
0
</bool>
<bool
name=
"proxy-Enabled"
>
1
</bool>
<string
name=
"proxy-Platform"
>
"
<
Any platform
>
"
</string>
<bool
name=
"proxy-wxBU_LEFT"
>
0
</bool>
<bool
name=
"proxy-wxBU_RIGHT"
>
0
</bool>
<bool
name=
"proxy-wxBU_TOP"
>
0
</bool>
<bool
name=
"proxy-wxBU_BOTTOM"
>
0
</bool>
<bool
name=
"proxy-wxBU_EXACTFIT"
>
0
</bool>
<bool
name=
"proxy-wxNO_BORDER"
>
0
</bool>
<bool
name=
"proxy-wxWANTS_CHARS"
>
0
</bool>
<bool
name=
"proxy-wxNO_FULL_REPAINT_ON_RESIZE"
>
0
</bool>
<bool
name=
"proxy-wxFULL_REPAINT_ON_RESIZE"
>
0
</bool>
<string
name=
"proxy-Custom styles"
>
""
</string>
<long
name=
"proxy-X"
>
-1
</long>
<long
name=
"proxy-Y"
>
-1
</long>
<long
name=
"proxy-Width"
>
-1
</long>
<long
name=
"proxy-Height"
>
-1
</long>
<string
name=
"proxy-AlignH"
>
"Expand"
</string>
<string
name=
"proxy-AlignV"
>
"Centre"
</string>
<long
name=
"proxy-Stretch factor"
>
0
</long>
<long
name=
"proxy-Border"
>
5
</long>
<bool
name=
"proxy-wxLEFT"
>
1
</bool>
<bool
name=
"proxy-wxRIGHT"
>
1
</bool>
<bool
name=
"proxy-wxTOP"
>
1
</bool>
<bool
name=
"proxy-wxBOTTOM"
>
1
</bool>
<bool
name=
"proxy-wxSHAPED"
>
0
</bool>
<bool
name=
"proxy-wxADJUST_MINSIZE"
>
0
</bool>
<bool
name=
"proxy-wxFIXED_MINSIZE"
>
0
</bool>
<string
name=
"proxy-Custom arguments"
>
""
</string>
<string
name=
"proxy-Custom ctor arguments"
>
""
</string>
</document>
<document>
<string
name=
"title"
>
"Spacer"
</string>
<string
name=
"type"
>
"dialog-control-document"
</string>
<string
name=
"filename"
>
""
</string>
<string
name=
"icon-name"
>
"spacer"
</string>
<long
name=
"is-transient"
>
0
</long>
<long
name=
"owns-file"
>
1
</long>
<long
name=
"title-mode"
>
0
</long>
<long
name=
"locked"
>
0
</long>
<string
name=
"created"
>
"17/12/2007"
</string>
<string
name=
"proxy-type"
>
"wbSpacerProxy"
</string>
<long
name=
"proxy-Width"
>
5
</long>
<long
name=
"proxy-Height"
>
5
</long>
<string
name=
"proxy-AlignH"
>
"Expand"
</string>
<string
name=
"proxy-AlignV"
>
"Expand"
</string>
<long
name=
"proxy-Stretch factor"
>
1
</long>
<long
name=
"proxy-Border"
>
5
</long>
<bool
name=
"proxy-wxLEFT"
>
1
</bool>
<bool
name=
"proxy-wxRIGHT"
>
1
</bool>
<bool
name=
"proxy-wxTOP"
>
1
</bool>
<bool
name=
"proxy-wxBOTTOM"
>
1
</bool>
<bool
name=
"proxy-wxSHAPED"
>
0
</bool>
<bool
name=
"proxy-wxADJUST_MINSIZE"
>
0
</bool>
<bool
name=
"proxy-wxFIXED_MINSIZE"
>
0
</bool>
<string
name=
"proxy-Platform"
>
"
<
Any platform
>
"
</string>
</document>
<document>
<string
name=
"title"
>
"wxRadioBox: ID_NET_SORTING_OPTION"
</string>
<string
name=
"type"
>
"dialog-control-document"
</string>
<string
name=
"filename"
>
""
</string>
<string
name=
"icon-name"
>
"radiobox"
</string>
<long
name=
"is-transient"
>
0
</long>
<long
name=
"owns-file"
>
1
</long>
<long
name=
"title-mode"
>
0
</long>
<long
name=
"locked"
>
0
</long>
<string
name=
"created"
>
"17/12/2007"
</string>
<string
name=
"proxy-type"
>
"wbRadioBoxProxy"
</string>
<string
name=
"event-handler-0"
>
"wxEVT_COMMAND_RADIOBOX_SELECTED|OnNetSortingOptionSelected|NONE||WinEDA_ZoneFrame"
</string>
<string
name=
"proxy-Id name"
>
"ID_NET_SORTING_OPTION"
</string>
<long
name=
"proxy-Id value"
>
10005
</long>
<string
name=
"proxy-Name"
>
""
</string>
<string
name=
"proxy-Class"
>
"wxRadioBox"
</string>
<string
name=
"proxy-Base class"
>
"wxRadioBox"
</string>
<bool
name=
"proxy-External implementation"
>
1
</bool>
<bool
name=
"proxy-Separate files"
>
0
</bool>
<string
name=
"proxy-Implementation filename"
>
""
</string>
<string
name=
"proxy-Header filename"
>
""
</string>
<string
name=
"proxy-Member variable name"
>
"m_NetSortingOption"
</string>
<string
name=
"proxy-Label"
>
"Net sorting:"
</string>
<long
name=
"proxy-Major dimension count"
>
1
</long>
<string
name=
"proxy-Items"
>
"Alphabetic|Advanced"
</string>
<long
name=
"proxy-Initial value"
>
0
</long>
<string
name=
"proxy-Help text"
>
""
</string>
<string
name=
"proxy-Tooltip text"
>
""
</string>
<string
name=
"proxy-Background colour"
>
""
</string>
<string
name=
"proxy-Foreground colour"
>
""
</string>
<string
name=
"proxy-Font"
>
""
</string>
<bool
name=
"proxy-Hidden"
>
0
</bool>
<bool
name=
"proxy-Enabled"
>
1
</bool>
<string
name=
"proxy-Platform"
>
"
<
Any platform
>
"
</string>
<string
name=
"proxy-Data variable"
>
"s_NetSortingOpt"
</string>
<string
name=
"proxy-Data validator"
>
"wxGenericValidator(
&
%VARIABLE%)"
</string>
<string
name=
"proxy-Data source"
>
""
</string>
<string
name=
"proxy-Data class name"
>
""
</string>
<string
name=
"proxy-Data class implementation filename"
>
""
</string>
<string
name=
"proxy-Data class header filename"
>
""
</string>
<string
name=
"proxy-Data class manager window"
>
""
</string>
<bool
name=
"proxy-wxRA_SPECIFY_ROWS"
>
0
</bool>
<bool
name=
"proxy-wxRA_SPECIFY_COLS"
>
1
</bool>
<bool
name=
"proxy-wxWANTS_CHARS"
>
0
</bool>
<bool
name=
"proxy-wxNO_FULL_REPAINT_ON_RESIZE"
>
0
</bool>
<bool
name=
"proxy-wxFULL_REPAINT_ON_RESIZE"
>
0
</bool>
<string
name=
"proxy-Custom styles"
>
""
</string>
<long
name=
"proxy-X"
>
-1
</long>
<long
name=
"proxy-Y"
>
-1
</long>
<long
name=
"proxy-Width"
>
-1
</long>
<long
name=
"proxy-Height"
>
-1
</long>
<string
name=
"proxy-AlignH"
>
"Expand"
</string>
<string
name=
"proxy-AlignV"
>
"Centre"
</string>
<long
name=
"proxy-Stretch factor"
>
0
</long>
<long
name=
"proxy-Border"
>
5
</long>
<bool
name=
"proxy-wxLEFT"
>
1
</bool>
<bool
name=
"proxy-wxRIGHT"
>
1
</bool>
<bool
name=
"proxy-wxTOP"
>
1
</bool>
<bool
name=
"proxy-wxBOTTOM"
>
1
</bool>
<bool
name=
"proxy-wxSHAPED"
>
0
</bool>
<bool
name=
"proxy-wxADJUST_MINSIZE"
>
0
</bool>
<bool
name=
"proxy-wxFIXED_MINSIZE"
>
0
</bool>
<string
name=
"proxy-Custom arguments"
>
""
</string>
<string
name=
"proxy-Custom ctor arguments"
>
""
</string>
</document>
</document>
</document>
<document>
<string
name=
"title"
>
"wxBoxSizer V"
</string>
<string
name=
"type"
>
"dialog-control-document"
</string>
<string
name=
"filename"
>
""
</string>
<string
name=
"icon-name"
>
"sizer"
</string>
<long
name=
"is-transient"
>
0
</long>
<long
name=
"owns-file"
>
1
</long>
<long
name=
"title-mode"
>
0
</long>
<long
name=
"locked"
>
0
</long>
<string
name=
"created"
>
"15/12/2007"
</string>
<string
name=
"proxy-type"
>
"wbBoxSizerProxy"
</string>
<string
name=
"proxy-Orientation"
>
"Vertical"
</string>
<string
name=
"proxy-Member variable name"
>
""
</string>
<string
name=
"proxy-AlignH"
>
"Expand"
</string>
<string
name=
"proxy-AlignV"
>
"Centre"
</string>
<long
name=
"proxy-Stretch factor"
>
0
</long>
<long
name=
"proxy-Border"
>
5
</long>
<bool
name=
"proxy-wxLEFT"
>
1
</bool>
<bool
name=
"proxy-wxRIGHT"
>
1
</bool>
<bool
name=
"proxy-wxTOP"
>
1
</bool>
<bool
name=
"proxy-wxBOTTOM"
>
1
</bool>
<bool
name=
"proxy-wxSHAPED"
>
0
</bool>
<bool
name=
"proxy-wxADJUST_MINSIZE"
>
0
</bool>
<bool
name=
"proxy-wxFIXED_MINSIZE"
>
0
</bool>
<string
name=
"proxy-Platform"
>
"
<
Any platform
>
"
</string>
<document>
<string
name=
"title"
>
"wxStaticText: wxID_STATIC"
</string>
<string
name=
"type"
>
"dialog-control-document"
</string>
<string
name=
"filename"
>
""
</string>
<string
name=
"icon-name"
>
"statictext"
</string>
<long
name=
"is-transient"
>
0
</long>
<long
name=
"owns-file"
>
1
</long>
<long
name=
"title-mode"
>
0
</long>
<long
name=
"locked"
>
0
</long>
<string
name=
"created"
>
"15/12/2007"
</string>
<string
name=
"proxy-type"
>
"wbStaticTextProxy"
</string>
<string
name=
"proxy-Id name"
>
"wxID_STATIC"
</string>
<long
name=
"proxy-Id value"
>
5105
</long>
<string
name=
"proxy-Name"
>
""
</string>
<string
name=
"proxy-Class"
>
"wxStaticText"
</string>
<string
name=
"proxy-Base class"
>
"wxStaticText"
</string>
<bool
name=
"proxy-External implementation"
>
1
</bool>
<bool
name=
"proxy-Separate files"
>
0
</bool>
<string
name=
"proxy-Implementation filename"
>
""
</string>
<string
name=
"proxy-Header filename"
>
""
</string>
<string
name=
"proxy-Member variable name"
>
""
</string>
<string
name=
"proxy-Label"
>
"Net:"
</string>
<long
name=
"proxy-Wrapping width"
>
-1
</long>
<string
name=
"proxy-Help text"
>
""
</string>
<string
name=
"proxy-Tooltip text"
>
""
</string>
<string
name=
"proxy-Background colour"
>
""
</string>
<string
name=
"proxy-Foreground colour"
>
""
</string>
<string
name=
"proxy-Font"
>
""
</string>
<bool
name=
"proxy-Hidden"
>
0
</bool>
<bool
name=
"proxy-Enabled"
>
1
</bool>
<string
name=
"proxy-Platform"
>
"
<
Any platform
>
"
</string>
<string
name=
"proxy-Data variable"
>
""
</string>
<string
name=
"proxy-Data validator"
>
""
</string>
<string
name=
"proxy-Data source"
>
""
</string>
<string
name=
"proxy-Data class name"
>
""
</string>
<string
name=
"proxy-Data class implementation filename"
>
""
</string>
<string
name=
"proxy-Data class header filename"
>
""
</string>
<string
name=
"proxy-Data class manager window"
>
""
</string>
<bool
name=
"proxy-wxALIGN_LEFT"
>
0
</bool>
<bool
name=
"proxy-wxALIGN_RIGHT"
>
0
</bool>
<bool
name=
"proxy-wxALIGN_CENTRE"
>
0
</bool>
<bool
name=
"proxy-wxST_NO_AUTORESIZE"
>
0
</bool>
<bool
name=
"proxy-wxNO_BORDER"
>
0
</bool>
<bool
name=
"proxy-wxSIMPLE_BORDER"
>
0
</bool>
<bool
name=
"proxy-wxDOUBLE_BORDER"
>
0
</bool>
<bool
name=
"proxy-wxSUNKEN_BORDER"
>
0
</bool>
<bool
name=
"proxy-wxRAISED_BORDER"
>
0
</bool>
<bool
name=
"proxy-wxSTATIC_BORDER"
>
0
</bool>
<bool
name=
"proxy-wxWANTS_CHARS"
>
0
</bool>
<bool
name=
"proxy-wxNO_FULL_REPAINT_ON_RESIZE"
>
0
</bool>
<bool
name=
"proxy-wxFULL_REPAINT_ON_RESIZE"
>
0
</bool>
<string
name=
"proxy-Custom styles"
>
""
</string>
<long
name=
"proxy-X"
>
-1
</long>
<long
name=
"proxy-Y"
>
-1
</long>
<long
name=
"proxy-Width"
>
-1
</long>
<long
name=
"proxy-Height"
>
-1
</long>
<string
name=
"proxy-AlignH"
>
"Left"
</string>
<string
name=
"proxy-AlignV"
>
"Centre"
</string>
<long
name=
"proxy-Stretch factor"
>
0
</long>
<long
name=
"proxy-Border"
>
5
</long>
<bool
name=
"proxy-wxLEFT"
>
1
</bool>
<bool
name=
"proxy-wxRIGHT"
>
1
</bool>
<bool
name=
"proxy-wxTOP"
>
1
</bool>
<bool
name=
"proxy-wxBOTTOM"
>
0
</bool>
<bool
name=
"proxy-wxSHAPED"
>
0
</bool>
<bool
name=
"proxy-wxADJUST_MINSIZE"
>
0
</bool>
<bool
name=
"proxy-wxFIXED_MINSIZE"
>
0
</bool>
<string
name=
"proxy-Custom arguments"
>
""
</string>
<string
name=
"proxy-Custom ctor arguments"
>
""
</string>
</document>
<document>
<string
name=
"title"
>
"wxListBox: ID_NETNAME_SELECTION"
</string>
<string
name=
"type"
>
"dialog-control-document"
</string>
<string
name=
"filename"
>
""
</string>
<string
name=
"icon-name"
>
"listbox"
</string>
<long
name=
"is-transient"
>
0
</long>
<long
name=
"owns-file"
>
1
</long>
<long
name=
"title-mode"
>
0
</long>
<long
name=
"locked"
>
0
</long>
<string
name=
"created"
>
"15/12/2007"
</string>
<string
name=
"proxy-type"
>
"wbListBoxProxy"
</string>
<string
name=
"proxy-Id name"
>
"ID_NETNAME_SELECTION"
</string>
<long
name=
"proxy-Id value"
>
10001
</long>
<string
name=
"proxy-Name"
>
""
</string>
<string
name=
"proxy-Class"
>
"wxListBox"
</string>
<string
name=
"proxy-Base class"
>
"wxListBox"
</string>
<bool
name=
"proxy-External implementation"
>
1
</bool>
<bool
name=
"proxy-Separate files"
>
0
</bool>
<string
name=
"proxy-Implementation filename"
>
""
</string>
<string
name=
"proxy-Header filename"
>
""
</string>
<string
name=
"proxy-Member variable name"
>
"m_ListNetNameSelection"
</string>
<string
name=
"proxy-Strings"
>
""
</string>
<string
name=
"proxy-Initial value"
>
""
</string>
<string
name=
"proxy-Help text"
>
""
</string>
<string
name=
"proxy-Tooltip text"
>
""
</string>
<string
name=
"proxy-Background colour"
>
""
</string>
<string
name=
"proxy-Foreground colour"
>
""
</string>
<string
name=
"proxy-Font"
>
""
</string>
<bool
name=
"proxy-Hidden"
>
0
</bool>
<bool
name=
"proxy-Enabled"
>
1
</bool>
<string
name=
"proxy-Platform"
>
"
<
Any platform
>
"
</string>
<string
name=
"proxy-Data variable"
>
""
</string>
<string
name=
"proxy-Data validator"
>
""
</string>
<string
name=
"proxy-Data source"
>
""
</string>
<string
name=
"proxy-Data class name"
>
""
</string>
<string
name=
"proxy-Data class implementation filename"
>
""
</string>
<string
name=
"proxy-Data class header filename"
>
""
</string>
<string
name=
"proxy-Data class manager window"
>
""
</string>
<bool
name=
"proxy-wxLB_SINGLE"
>
1
</bool>
<bool
name=
"proxy-wxLB_MULTIPLE"
>
0
</bool>
<bool
name=
"proxy-wxLB_EXTENDED"
>
0
</bool>
<bool
name=
"proxy-wxLB_ALWAYS_SB"
>
0
</bool>
<bool
name=
"proxy-wxLB_NEEDED_SB"
>
0
</bool>
<bool
name=
"proxy-wxLB_HSCROLL"
>
0
</bool>
<bool
name=
"proxy-wxLB_SORT"
>
0
</bool>
<bool
name=
"proxy-wxNO_BORDER"
>
0
</bool>
<bool
name=
"proxy-wxSIMPLE_BORDER"
>
0
</bool>
<bool
name=
"proxy-wxDOUBLE_BORDER"
>
0
</bool>
<bool
name=
"proxy-wxSUNKEN_BORDER"
>
1
</bool>
<bool
name=
"proxy-wxRAISED_BORDER"
>
0
</bool>
<bool
name=
"proxy-wxSTATIC_BORDER"
>
0
</bool>
<bool
name=
"proxy-wxWANTS_CHARS"
>
0
</bool>
<bool
name=
"proxy-wxNO_FULL_REPAINT_ON_RESIZE"
>
0
</bool>
<bool
name=
"proxy-wxFULL_REPAINT_ON_RESIZE"
>
0
</bool>
<string
name=
"proxy-Custom styles"
>
""
</string>
<long
name=
"proxy-X"
>
-1
</long>
<long
name=
"proxy-Y"
>
-1
</long>
<long
name=
"proxy-Width"
>
-1
</long>
<long
name=
"proxy-Height"
>
-1
</long>
<string
name=
"proxy-AlignH"
>
"Expand"
</string>
<string
name=
"proxy-AlignV"
>
"Centre"
</string>
<long
name=
"proxy-Stretch factor"
>
0
</long>
<long
name=
"proxy-Border"
>
5
</long>
<bool
name=
"proxy-wxLEFT"
>
1
</bool>
<bool
name=
"proxy-wxRIGHT"
>
1
</bool>
<bool
name=
"proxy-wxTOP"
>
0
</bool>
<bool
name=
"proxy-wxBOTTOM"
>
1
</bool>
<bool
name=
"proxy-wxSHAPED"
>
0
</bool>
<bool
name=
"proxy-wxADJUST_MINSIZE"
>
0
</bool>
<bool
name=
"proxy-wxFIXED_MINSIZE"
>
0
</bool>
<string
name=
"proxy-Custom arguments"
>
""
</string>
<string
name=
"proxy-Custom ctor arguments"
>
""
</string>
</document>
<document>
<string
name=
"title"
>
"wxStaticText: wxID_LAYER_SELECTION"
</string>
<string
name=
"type"
>
"dialog-control-document"
</string>
<string
name=
"filename"
>
""
</string>
<string
name=
"icon-name"
>
"statictext"
</string>
<long
name=
"is-transient"
>
0
</long>
<long
name=
"owns-file"
>
1
</long>
<long
name=
"title-mode"
>
0
</long>
<long
name=
"locked"
>
0
</long>
<string
name=
"created"
>
"15/12/2007"
</string>
<string
name=
"proxy-type"
>
"wbStaticTextProxy"
</string>
<string
name=
"proxy-Id name"
>
"wxID_LAYER_SELECTION"
</string>
<long
name=
"proxy-Id value"
>
10004
</long>
<string
name=
"proxy-Name"
>
""
</string>
<string
name=
"proxy-Class"
>
"wxStaticText"
</string>
<string
name=
"proxy-Base class"
>
"wxStaticText"
</string>
<bool
name=
"proxy-External implementation"
>
1
</bool>
<bool
name=
"proxy-Separate files"
>
0
</bool>
<string
name=
"proxy-Implementation filename"
>
""
</string>
<string
name=
"proxy-Header filename"
>
""
</string>
<string
name=
"proxy-Member variable name"
>
""
</string>
<string
name=
"proxy-Label"
>
"Layer:"
</string>
<long
name=
"proxy-Wrapping width"
>
-1
</long>
<string
name=
"proxy-Help text"
>
""
</string>
<string
name=
"proxy-Tooltip text"
>
""
</string>
<string
name=
"proxy-Background colour"
>
""
</string>
<string
name=
"proxy-Foreground colour"
>
""
</string>
<string
name=
"proxy-Font"
>
""
</string>
<bool
name=
"proxy-Hidden"
>
0
</bool>
<bool
name=
"proxy-Enabled"
>
1
</bool>
<string
name=
"proxy-Platform"
>
"
<
Any platform
>
"
</string>
<string
name=
"proxy-Data variable"
>
""
</string>
<string
name=
"proxy-Data validator"
>
""
</string>
<string
name=
"proxy-Data source"
>
""
</string>
<string
name=
"proxy-Data class name"
>
""
</string>
<string
name=
"proxy-Data class implementation filename"
>
""
</string>
<string
name=
"proxy-Data class header filename"
>
""
</string>
<string
name=
"proxy-Data class manager window"
>
""
</string>
<bool
name=
"proxy-wxALIGN_LEFT"
>
0
</bool>
<bool
name=
"proxy-wxALIGN_RIGHT"
>
0
</bool>
<bool
name=
"proxy-wxALIGN_CENTRE"
>
0
</bool>
<bool
name=
"proxy-wxST_NO_AUTORESIZE"
>
0
</bool>
<bool
name=
"proxy-wxNO_BORDER"
>
0
</bool>
<bool
name=
"proxy-wxSIMPLE_BORDER"
>
0
</bool>
<bool
name=
"proxy-wxDOUBLE_BORDER"
>
0
</bool>
<bool
name=
"proxy-wxSUNKEN_BORDER"
>
0
</bool>
<bool
name=
"proxy-wxRAISED_BORDER"
>
0
</bool>
<bool
name=
"proxy-wxSTATIC_BORDER"
>
0
</bool>
<bool
name=
"proxy-wxWANTS_CHARS"
>
0
</bool>
<bool
name=
"proxy-wxNO_FULL_REPAINT_ON_RESIZE"
>
0
</bool>
<bool
name=
"proxy-wxFULL_REPAINT_ON_RESIZE"
>
0
</bool>
<string
name=
"proxy-Custom styles"
>
""
</string>
<long
name=
"proxy-X"
>
-1
</long>
<long
name=
"proxy-Y"
>
-1
</long>
<long
name=
"proxy-Width"
>
-1
</long>
<long
name=
"proxy-Height"
>
-1
</long>
<string
name=
"proxy-AlignH"
>
"Left"
</string>
<string
name=
"proxy-AlignV"
>
"Centre"
</string>
<long
name=
"proxy-Stretch factor"
>
0
</long>
<long
name=
"proxy-Border"
>
5
</long>
<bool
name=
"proxy-wxLEFT"
>
1
</bool>
<bool
name=
"proxy-wxRIGHT"
>
1
</bool>
<bool
name=
"proxy-wxTOP"
>
1
</bool>
<bool
name=
"proxy-wxBOTTOM"
>
0
</bool>
<bool
name=
"proxy-wxSHAPED"
>
0
</bool>
<bool
name=
"proxy-wxADJUST_MINSIZE"
>
0
</bool>
<bool
name=
"proxy-wxFIXED_MINSIZE"
>
0
</bool>
<string
name=
"proxy-Custom arguments"
>
""
</string>
<string
name=
"proxy-Custom ctor arguments"
>
""
</string>
</document>
<document>
<string
name=
"title"
>
"wxListBox: ID_LAYER_CHOICE"
</string>
<string
name=
"type"
>
"dialog-control-document"
</string>
<string
name=
"filename"
>
""
</string>
<string
name=
"icon-name"
>
"listbox"
</string>
<long
name=
"is-transient"
>
0
</long>
<long
name=
"owns-file"
>
1
</long>
<long
name=
"title-mode"
>
0
</long>
<long
name=
"locked"
>
0
</long>
<string
name=
"created"
>
"16/12/2007"
</string>
<string
name=
"proxy-type"
>
"wbListBoxProxy"
</string>
<string
name=
"proxy-Id name"
>
"ID_LAYER_CHOICE"
</string>
<long
name=
"proxy-Id value"
>
10002
</long>
<string
name=
"proxy-Name"
>
""
</string>
<string
name=
"proxy-Class"
>
"wxListBox"
</string>
<string
name=
"proxy-Base class"
>
"wxListBox"
</string>
<bool
name=
"proxy-External implementation"
>
1
</bool>
<bool
name=
"proxy-Separate files"
>
0
</bool>
<string
name=
"proxy-Implementation filename"
>
""
</string>
<string
name=
"proxy-Header filename"
>
""
</string>
<string
name=
"proxy-Member variable name"
>
"m_LayerSelectionCtrl"
</string>
<string
name=
"proxy-Strings"
>
""
</string>
<string
name=
"proxy-Initial value"
>
""
</string>
<string
name=
"proxy-Help text"
>
""
</string>
<string
name=
"proxy-Tooltip text"
>
""
</string>
<string
name=
"proxy-Background colour"
>
""
</string>
<string
name=
"proxy-Foreground colour"
>
""
</string>
<string
name=
"proxy-Font"
>
""
</string>
<bool
name=
"proxy-Hidden"
>
0
</bool>
<bool
name=
"proxy-Enabled"
>
1
</bool>
<string
name=
"proxy-Platform"
>
"
<
Any platform
>
"
</string>
<string
name=
"proxy-Data variable"
>
""
</string>
<string
name=
"proxy-Data validator"
>
""
</string>
<string
name=
"proxy-Data source"
>
""
</string>
<string
name=
"proxy-Data class name"
>
""
</string>
<string
name=
"proxy-Data class implementation filename"
>
""
</string>
<string
name=
"proxy-Data class header filename"
>
""
</string>
<string
name=
"proxy-Data class manager window"
>
""
</string>
<bool
name=
"proxy-wxLB_SINGLE"
>
1
</bool>
<bool
name=
"proxy-wxLB_MULTIPLE"
>
0
</bool>
<bool
name=
"proxy-wxLB_EXTENDED"
>
0
</bool>
<bool
name=
"proxy-wxLB_ALWAYS_SB"
>
0
</bool>
<bool
name=
"proxy-wxLB_NEEDED_SB"
>
0
</bool>
<bool
name=
"proxy-wxLB_HSCROLL"
>
0
</bool>
<bool
name=
"proxy-wxLB_SORT"
>
0
</bool>
<bool
name=
"proxy-wxNO_BORDER"
>
0
</bool>
<bool
name=
"proxy-wxSIMPLE_BORDER"
>
0
</bool>
<bool
name=
"proxy-wxDOUBLE_BORDER"
>
0
</bool>
<bool
name=
"proxy-wxSUNKEN_BORDER"
>
0
</bool>
<bool
name=
"proxy-wxRAISED_BORDER"
>
0
</bool>
<bool
name=
"proxy-wxSTATIC_BORDER"
>
0
</bool>
<bool
name=
"proxy-wxWANTS_CHARS"
>
0
</bool>
<bool
name=
"proxy-wxNO_FULL_REPAINT_ON_RESIZE"
>
0
</bool>
<bool
name=
"proxy-wxFULL_REPAINT_ON_RESIZE"
>
0
</bool>
<string
name=
"proxy-Custom styles"
>
""
</string>
<long
name=
"proxy-X"
>
-1
</long>
<long
name=
"proxy-Y"
>
-1
</long>
<long
name=
"proxy-Width"
>
-1
</long>
<long
name=
"proxy-Height"
>
-1
</long>
<string
name=
"proxy-AlignH"
>
"Expand"
</string>
<string
name=
"proxy-AlignV"
>
"Centre"
</string>
<long
name=
"proxy-Stretch factor"
>
0
</long>
<long
name=
"proxy-Border"
>
5
</long>
<bool
name=
"proxy-wxLEFT"
>
1
</bool>
<bool
name=
"proxy-wxRIGHT"
>
1
</bool>
<bool
name=
"proxy-wxTOP"
>
1
</bool>
<bool
name=
"proxy-wxBOTTOM"
>
1
</bool>
<bool
name=
"proxy-wxSHAPED"
>
0
</bool>
<bool
name=
"proxy-wxADJUST_MINSIZE"
>
0
</bool>
<bool
name=
"proxy-wxFIXED_MINSIZE"
>
0
</bool>
<string
name=
"proxy-Custom arguments"
>
""
</string>
<string
name=
"proxy-Custom ctor arguments"
>
""
</string>
</document>
</document>
</document>
</document>
</document>
<document>
<string
name=
"title"
>
"Sources"
</string>
<string
name=
"type"
>
"html-document"
</string>
<string
name=
"filename"
>
""
</string>
<string
name=
"icon-name"
>
"sourcesfolder"
</string>
<long
name=
"is-transient"
>
1
</long>
<long
name=
"owns-file"
>
1
</long>
<long
name=
"title-mode"
>
0
</long>
<long
name=
"locked"
>
1
</long>
<document>
<string
name=
"title"
>
"dialog_zones_by_polygon.rc"
</string>
<string
name=
"type"
>
"source-editor-document"
</string>
<string
name=
"filename"
>
"dialog_zones_by_polygon.rc"
</string>
<string
name=
"icon-name"
>
"source-editor"
</string>
<long
name=
"is-transient"
>
0
</long>
<long
name=
"owns-file"
>
0
</long>
<long
name=
"title-mode"
>
1
</long>
<long
name=
"locked"
>
0
</long>
<string
name=
"created"
>
"25/4/2006"
</string>
<string
name=
"language"
>
""
</string>
</document>
</document>
<document>
<string
name=
"title"
>
"Images"
</string>
<string
name=
"type"
>
"html-document"
</string>
<string
name=
"filename"
>
""
</string>
<string
name=
"icon-name"
>
"bitmapsfolder"
</string>
<long
name=
"is-transient"
>
1
</long>
<long
name=
"owns-file"
>
1
</long>
<long
name=
"title-mode"
>
0
</long>
<long
name=
"locked"
>
1
</long>
</document>
</document>
</documents>
</anthemion-project>
pcbnew/filling_zone_algorithm.cpp
0 → 100644
View file @
7e7a7937
/* filling_zone_algorithm:
Algos used to fill a zone defined by a polygon and a filling starting point
*/
#include "fctsys.h"
#include "gr_basic.h"
#include "common.h"
#include "pcbnew.h"
#include "autorout.h"
#include "cell.h"
#include "trigo.h"
#include "protos.h"
/* Local functions */
static
void
Genere_Segments_Zone
(
WinEDA_PcbFrame
*
frame
,
wxDC
*
DC
,
int
net_code
);
/* Local variables */
static
bool
Zone_Debug
=
FALSE
;
static
unsigned
long
s_TimeStamp
;
/* Time stamp common to all segments relative to the new created zone */
/****************************************************************************************/
void
Build_Zone
(
WinEDA_PcbFrame
*
frame
,
wxDC
*
DC
,
int
net_code
,
bool
Zone_Exclude_Pads
,
bool
Zone_Create_Thermal_Relief
)
/****************************************************************************************/
/** Function Build_Zone()
* Init the zone filling
* If a zone edge is found, it is used.
* Otherwise the whole board is filled by the zone
* The zone edge is a frontier, and can be complex. So non filled zones can be achieved
* The zone is put on the active layer
* If a net is hightlighted, the zone will be attached to this net
* The filling start from a starting point.
* If a net is selected, all tracks attached to this net are also starting points
*/
{
int
ii
,
jj
;
EDGE_ZONE
*
PtLim
;
int
lp_tmp
,
lay_tmp_TOP
,
lay_tmp_BOTTOM
;
int
save_isol
=
g_DesignSettings
.
m_TrackClearence
;
wxPoint
ZoneStartFill
;
wxString
msg
;
PCB_SCREEN
*
Screen
=
frame
->
GetScreen
();
BOARD
*
Pcb
=
frame
->
m_Pcb
;
g_DesignSettings
.
m_TrackClearence
=
g_DesignSettings
.
m_ZoneClearence
;
s_TimeStamp
=
time
(
NULL
);
// calculate the fixed step of the routing matrix as 5 mils or more
E_scale
=
g_GridRoutingSize
/
50
;
if
(
g_GridRoutingSize
<
1
)
g_GridRoutingSize
=
1
;
// calculate the Ncols and Nrows, size of the routing matrix
ComputeMatriceSize
(
frame
,
g_GridRoutingSize
);
// Determine the cell pointed to by the mouse
ZoneStartFill
.
x
=
(
Screen
->
m_Curseur
.
x
-
Pcb
->
m_BoundaryBox
.
m_Pos
.
x
+
(
g_GridRoutingSize
/
2
)
)
/
g_GridRoutingSize
;
ZoneStartFill
.
y
=
(
Screen
->
m_Curseur
.
y
-
Pcb
->
m_BoundaryBox
.
m_Pos
.
y
+
(
g_GridRoutingSize
/
2
)
)
/
g_GridRoutingSize
;
if
(
ZoneStartFill
.
x
<
0
)
ZoneStartFill
.
x
=
0
;
if
(
ZoneStartFill
.
x
>=
Ncols
)
ZoneStartFill
.
x
=
Ncols
-
1
;
if
(
ZoneStartFill
.
y
<
0
)
ZoneStartFill
.
y
=
0
;
if
(
ZoneStartFill
.
y
>=
Nrows
)
ZoneStartFill
.
y
=
Nrows
-
1
;
// create the routing matrix in autorout.h's eda_global BOARDHEAD Board
Nb_Sides
=
ONE_SIDE
;
if
(
Board
.
InitBoard
()
<
0
)
{
DisplayError
(
frame
,
wxT
(
"Mo memory for creating zones"
)
);
return
;
}
msg
.
Printf
(
wxT
(
"%d"
),
Ncols
);
Affiche_1_Parametre
(
frame
,
1
,
wxT
(
"Cols"
),
msg
,
GREEN
);
msg
.
Printf
(
wxT
(
"%d"
),
Nrows
);
Affiche_1_Parametre
(
frame
,
7
,
wxT
(
"Lines"
),
msg
,
GREEN
);
msg
.
Printf
(
wxT
(
"%d"
),
Board
.
m_MemSize
/
1024
);
Affiche_1_Parametre
(
frame
,
14
,
wxT
(
"Mem(Ko)"
),
msg
,
CYAN
);
lay_tmp_BOTTOM
=
Route_Layer_BOTTOM
;
lay_tmp_TOP
=
Route_Layer_TOP
;
Route_Layer_BOTTOM
=
Route_Layer_TOP
=
Screen
->
m_Active_Layer
;
lp_tmp
=
g_DesignSettings
.
m_CurrentTrackWidth
;
g_DesignSettings
.
m_CurrentTrackWidth
=
g_GridRoutingSize
;
/* Create the starting point for thz zone:
* The starting point and all the tracks are suitable "starting points" */
TRACK
*
pt_segm
=
Pcb
->
m_Track
;
for
(
;
pt_segm
!=
NULL
;
pt_segm
=
pt_segm
->
Next
()
)
{
if
(
g_HightLigth_NetCode
!=
pt_segm
->
GetNet
()
)
continue
;
if
(
pt_segm
->
GetLayer
()
!=
Screen
->
m_Active_Layer
)
continue
;
if
(
pt_segm
->
Type
()
!=
TYPETRACK
)
continue
;
TraceSegmentPcb
(
Pcb
,
pt_segm
,
CELL_is_FRIEND
,
0
,
WRITE_CELL
);
}
// trace the pcb edges (pcb contour) into the routing matrix
Route_Layer_BOTTOM
=
Route_Layer_TOP
=
EDGE_N
;
PlaceCells
(
Pcb
,
-
1
,
0
);
Route_Layer_BOTTOM
=
Route_Layer_TOP
=
Screen
->
m_Active_Layer
;
// trace the zone edges into the routing matrix
for
(
PtLim
=
Pcb
->
m_CurrentLimitZone
;
PtLim
;
PtLim
=
PtLim
->
Next
()
)
{
int
ux0
,
uy0
,
ux1
,
uy1
;
ux0
=
PtLim
->
m_Start
.
x
-
Pcb
->
m_BoundaryBox
.
m_Pos
.
x
;
uy0
=
PtLim
->
m_Start
.
y
-
Pcb
->
m_BoundaryBox
.
m_Pos
.
y
;
ux1
=
PtLim
->
m_End
.
x
-
Pcb
->
m_BoundaryBox
.
m_Pos
.
x
;
uy1
=
PtLim
->
m_End
.
y
-
Pcb
->
m_BoundaryBox
.
m_Pos
.
y
;
TraceLignePcb
(
ux0
,
uy0
,
ux1
,
uy1
,
-
1
,
HOLE
|
CELL_is_EDGE
,
WRITE_CELL
);
}
OrCell
(
ZoneStartFill
.
y
,
ZoneStartFill
.
x
,
BOTTOM
,
CELL_is_ZONE
);
// mark the cells forming part of the zone
ii
=
1
;
jj
=
1
;
while
(
ii
)
{
msg
.
Printf
(
wxT
(
"%d"
),
jj
++
);
Affiche_1_Parametre
(
frame
,
50
,
wxT
(
"Iter."
),
msg
,
CYAN
);
ii
=
Propagation
(
frame
);
}
// selection of the suitable cells for the points of anchoring of the zone
for
(
ii
=
0
;
ii
<
Nrows
;
ii
++
)
{
for
(
jj
=
0
;
jj
<
Ncols
;
jj
++
)
{
long
cell
=
GetCell
(
ii
,
jj
,
BOTTOM
);
if
(
(
cell
&
CELL_is_ZONE
)
)
{
if
(
(
cell
&
CELL_is_FRIEND
)
==
0
)
AndCell
(
ii
,
jj
,
BOTTOM
,
(
BoardCell
)
~
(
CELL_is_FRIEND
|
CELL_is_ZONE
)
);
}
}
}
// now, all the cell candidates are marked
// place all the obstacles into the matrix, such as (pads, tracks, vias,
// pcb edges or segments)
ii
=
0
;
if
(
Zone_Exclude_Pads
)
ii
=
FORCE_PADS
;
Affiche_1_Parametre
(
frame
,
42
,
wxT
(
"GenZone"
),
wxEmptyString
,
RED
);
PlaceCells
(
Pcb
,
g_HightLigth_NetCode
,
ii
);
Affiche_1_Parametre
(
frame
,
-
1
,
wxEmptyString
,
_
(
"Ok"
),
RED
);
/* Create zone limits on the routing matrix
* (colud be deleted by PlaceCells()) : */
for
(
PtLim
=
Pcb
->
m_CurrentLimitZone
;
PtLim
;
PtLim
=
PtLim
->
Next
()
)
{
int
ux0
,
uy0
,
ux1
,
uy1
;
ux0
=
PtLim
->
m_Start
.
x
-
Pcb
->
m_BoundaryBox
.
m_Pos
.
x
;
uy0
=
PtLim
->
m_Start
.
y
-
Pcb
->
m_BoundaryBox
.
m_Pos
.
y
;
ux1
=
PtLim
->
m_End
.
x
-
Pcb
->
m_BoundaryBox
.
m_Pos
.
x
;
uy1
=
PtLim
->
m_End
.
y
-
Pcb
->
m_BoundaryBox
.
m_Pos
.
y
;
TraceLignePcb
(
ux0
,
uy0
,
ux1
,
uy1
,
-
1
,
HOLE
|
CELL_is_EDGE
,
WRITE_CELL
);
}
/* Init the starting point for zone filling : this is the mouse position
* (could be deleted by PlaceCells()) : */
OrCell
(
ZoneStartFill
.
y
,
ZoneStartFill
.
x
,
BOTTOM
,
CELL_is_ZONE
);
if
(
Zone_Debug
)
DisplayBoard
(
frame
->
DrawPanel
,
DC
);
/* Filling the cells of the matrix (tjis is the zone building)*/
ii
=
1
;
jj
=
1
;
while
(
ii
)
{
msg
.
Printf
(
wxT
(
"%d"
),
jj
++
);
Affiche_1_Parametre
(
frame
,
50
,
wxT
(
"Iter."
),
msg
,
CYAN
);
ii
=
Propagation
(
frame
);
}
if
(
Zone_Debug
)
DisplayBoard
(
frame
->
DrawPanel
,
DC
);
/* Convert the matrix information (cells) to segments which are actually the zone */
if
(
g_HightLigth_NetCode
<
0
)
Genere_Segments_Zone
(
frame
,
DC
,
0
);
else
Genere_Segments_Zone
(
frame
,
DC
,
g_HightLigth_NetCode
);
/* Create the thermal reliefs */
g_DesignSettings
.
m_CurrentTrackWidth
=
lp_tmp
;
if
(
Zone_Exclude_Pads
&&
Zone_Create_Thermal_Relief
)
frame
->
Genere_Pad_Connexion
(
DC
,
Screen
->
m_Active_Layer
);
g_DesignSettings
.
m_TrackClearence
=
save_isol
;
// free the memory
Board
.
UnInitBoard
();
// restore original values unchanged
Route_Layer_TOP
=
lay_tmp_TOP
;
Route_Layer_BOTTOM
=
lay_tmp_BOTTOM
;
}
/*******************************************************************************/
static
void
Genere_Segments_Zone
(
WinEDA_PcbFrame
*
frame
,
wxDC
*
DC
,
int
net_code
)
/*******************************************************************************/
/** Function Genere_Segments_Zone()
* Create the zone segments from the routing matrix structure
* Algorithm:
* Search for consecutive cells (flagged "zone") , and create segments
* from the first cell to the last cell in the matrix
* 2 searchs are made
* 1 - From left to right and create horizontal zone segments
* 2 - From top to bottom, and create vertical zone segments
* @param net_code = net_code common to all segment zone created
* @param DC = current device context
* @param frame = current WinEDA_PcbFrame
* global: parameter TimeStamp: time stamp common to all segment zone created
*/
{
int
row
,
col
;
long
current_cell
,
old_cell
;
int
ux0
=
0
,
uy0
=
0
,
ux1
=
0
,
uy1
=
0
;
int
Xmin
=
frame
->
m_Pcb
->
m_BoundaryBox
.
m_Pos
.
x
;
int
Ymin
=
frame
->
m_Pcb
->
m_BoundaryBox
.
m_Pos
.
y
;
SEGZONE
*
pt_track
;
int
layer
=
frame
->
GetScreen
()
->
m_Active_Layer
;
int
nbsegm
=
0
;
wxString
msg
;
/* balayage Gauche-> droite */
Affiche_1_Parametre
(
frame
,
64
,
wxT
(
"Segm H"
),
wxT
(
"0"
),
BROWN
);
for
(
row
=
0
;
row
<
Nrows
;
row
++
)
{
old_cell
=
0
;
uy0
=
uy1
=
(
row
*
g_GridRoutingSize
)
+
Ymin
;
for
(
col
=
0
;
col
<
Ncols
;
col
++
)
{
current_cell
=
GetCell
(
row
,
col
,
BOTTOM
)
&
CELL_is_ZONE
;
if
(
current_cell
)
/* ce point doit faire partie d'un segment */
{
ux1
=
(
col
*
g_GridRoutingSize
)
+
Xmin
;
if
(
old_cell
==
0
)
ux0
=
ux1
;
}
if
(
!
current_cell
||
(
col
==
Ncols
-
1
)
)
/* peut etre fin d'un segment */
{
if
(
(
old_cell
)
&&
(
ux0
!=
ux1
)
)
{
/* un segment avait debute de longueur > 0 */
pt_track
=
new
SEGZONE
(
frame
->
m_Pcb
);
pt_track
->
SetLayer
(
layer
);
pt_track
->
SetNet
(
net_code
);
pt_track
->
m_Width
=
g_GridRoutingSize
;
pt_track
->
m_Start
.
x
=
ux0
;
pt_track
->
m_Start
.
y
=
uy0
;
pt_track
->
m_End
.
x
=
ux1
;
pt_track
->
m_End
.
y
=
uy1
;
pt_track
->
m_TimeStamp
=
s_TimeStamp
;
pt_track
->
Insert
(
frame
->
m_Pcb
,
NULL
);
pt_track
->
Draw
(
frame
->
DrawPanel
,
DC
,
GR_OR
);
nbsegm
++
;
}
}
old_cell
=
current_cell
;
}
msg
.
Printf
(
wxT
(
"%d"
),
nbsegm
);
Affiche_1_Parametre
(
frame
,
-
1
,
wxEmptyString
,
msg
,
BROWN
);
}
Affiche_1_Parametre
(
frame
,
72
,
wxT
(
"Segm V"
),
wxT
(
"0"
),
BROWN
);
for
(
col
=
0
;
col
<
Ncols
;
col
++
)
{
old_cell
=
0
;
ux0
=
ux1
=
(
col
*
g_GridRoutingSize
)
+
Xmin
;
for
(
row
=
0
;
row
<
Nrows
;
row
++
)
{
current_cell
=
GetCell
(
row
,
col
,
BOTTOM
)
&
CELL_is_ZONE
;
if
(
current_cell
)
/* ce point doit faire partie d'un segment */
{
uy1
=
(
row
*
g_GridRoutingSize
)
+
Ymin
;
if
(
old_cell
==
0
)
uy0
=
uy1
;
}
if
(
!
current_cell
||
(
row
==
Nrows
-
1
)
)
/* peut etre fin d'un segment */
{
if
(
(
old_cell
)
&&
(
uy0
!=
uy1
)
)
{
/* un segment avait debute de longueur > 0 */
pt_track
=
new
SEGZONE
(
frame
->
m_Pcb
);
pt_track
->
SetLayer
(
layer
);
pt_track
->
m_Width
=
g_GridRoutingSize
;
pt_track
->
SetNet
(
net_code
);
pt_track
->
m_Start
.
x
=
ux0
;
pt_track
->
m_Start
.
y
=
uy0
;
pt_track
->
m_End
.
x
=
ux1
;
pt_track
->
m_End
.
y
=
uy1
;
pt_track
->
m_TimeStamp
=
s_TimeStamp
;
pt_track
->
Insert
(
frame
->
m_Pcb
,
NULL
);
pt_track
->
Draw
(
frame
->
DrawPanel
,
DC
,
GR_OR
);
nbsegm
++
;
}
}
old_cell
=
current_cell
;
}
msg
.
Printf
(
wxT
(
"%d"
),
nbsegm
);
Affiche_1_Parametre
(
frame
,
-
1
,
wxEmptyString
,
msg
,
BROWN
);
}
}
/********************************************/
int
Propagation
(
WinEDA_PcbFrame
*
frame
)
/********************************************/
/** Function Propagation()
* An important function to calculate zones
* Uses the routing matrix to fill the cells within the zone
* Search and mark cells within the zone, and agree with DRC options.
* Requirements:
* Start from an initial point, to fill zone
* The zone must have no "copper island"
* Algorithm:
* If the current cell has a neightbour flagged as "cell in the zone", it
* become a cell in the zone
* The first point in the zone is the starting point
* 4 searches within the matrix are made:
* 1 - Left to right and top to bottom
* 2 - Right to left and top to bottom
* 3 - bottom to top and Right to left
* 4 - bottom to top and Left to right
* Given the current cell, for each search, we consider the 2 neightbour cells
* the previous cell on the same line and the previous cell on the same column.
*
* This funtion can request some iterations
* Iterations are made until no cell is added to the zone.
* @return: added cells count (i.e. which the attribute CELL_is_ZONE is set)
*/
{
int
row
,
col
,
nn
;
long
current_cell
,
old_cell_H
;
int
long
*
pt_cell_V
;
int
nbpoints
=
0
;
#define NO_CELL_ZONE (HOLE | CELL_is_EDGE | CELL_is_ZONE)
wxString
msg
;
Affiche_1_Parametre
(
frame
,
57
,
wxT
(
"Detect"
),
msg
,
CYAN
);
Affiche_1_Parametre
(
frame
,
-
1
,
wxEmptyString
,
wxT
(
"1"
),
CYAN
);
// Alloc memory to handle 1 line or 1 colunmn on the routing matrix
nn
=
MAX
(
Nrows
,
Ncols
)
*
sizeof
(
*
pt_cell_V
);
pt_cell_V
=
(
long
*
)
MyMalloc
(
nn
);
/* search 1 : from left to right and top to bottom */
memset
(
pt_cell_V
,
0
,
nn
);
for
(
row
=
0
;
row
<
Nrows
;
row
++
)
{
old_cell_H
=
0
;
for
(
col
=
0
;
col
<
Ncols
;
col
++
)
{
current_cell
=
GetCell
(
row
,
col
,
BOTTOM
)
&
NO_CELL_ZONE
;
if
(
current_cell
==
0
)
/* a free cell is found */
{
if
(
(
old_cell_H
&
CELL_is_ZONE
)
||
(
pt_cell_V
[
col
]
&
CELL_is_ZONE
)
)
{
OrCell
(
row
,
col
,
BOTTOM
,
CELL_is_ZONE
);
current_cell
=
CELL_is_ZONE
;
nbpoints
++
;
}
}
pt_cell_V
[
col
]
=
old_cell_H
=
current_cell
;
}
}
/* search 2 : from right to left and top to bottom */
Affiche_1_Parametre
(
frame
,
-
1
,
wxEmptyString
,
wxT
(
"2"
),
CYAN
);
memset
(
pt_cell_V
,
0
,
nn
);
for
(
row
=
0
;
row
<
Nrows
;
row
++
)
{
old_cell_H
=
0
;
for
(
col
=
Ncols
-
1
;
col
>=
0
;
col
--
)
{
current_cell
=
GetCell
(
row
,
col
,
BOTTOM
)
&
NO_CELL_ZONE
;
if
(
current_cell
==
0
)
/* a free cell is found */
{
if
(
(
old_cell_H
&
CELL_is_ZONE
)
||
(
pt_cell_V
[
col
]
&
CELL_is_ZONE
)
)
{
OrCell
(
row
,
col
,
BOTTOM
,
CELL_is_ZONE
);
current_cell
=
CELL_is_ZONE
;
nbpoints
++
;
}
}
pt_cell_V
[
col
]
=
old_cell_H
=
current_cell
;
}
}
/* search 3 : from bottom to top and right to left balayage */
Affiche_1_Parametre
(
frame
,
-
1
,
wxEmptyString
,
wxT
(
"3"
),
CYAN
);
memset
(
pt_cell_V
,
0
,
nn
);
for
(
col
=
Ncols
-
1
;
col
>=
0
;
col
--
)
{
old_cell_H
=
0
;
for
(
row
=
Nrows
-
1
;
row
>=
0
;
row
--
)
{
current_cell
=
GetCell
(
row
,
col
,
BOTTOM
)
&
NO_CELL_ZONE
;
if
(
current_cell
==
0
)
/* a free cell is found */
{
if
(
(
old_cell_H
&
CELL_is_ZONE
)
||
(
pt_cell_V
[
row
]
&
CELL_is_ZONE
)
)
{
OrCell
(
row
,
col
,
BOTTOM
,
CELL_is_ZONE
);
current_cell
=
CELL_is_ZONE
;
nbpoints
++
;
}
}
pt_cell_V
[
row
]
=
old_cell_H
=
current_cell
;
}
}
/* search 4 : from bottom to top and left to right */
Affiche_1_Parametre
(
frame
,
-
1
,
wxEmptyString
,
wxT
(
"4"
),
CYAN
);
memset
(
pt_cell_V
,
0
,
nn
);
for
(
col
=
0
;
col
<
Ncols
;
col
++
)
{
old_cell_H
=
0
;
for
(
row
=
Nrows
-
1
;
row
>=
0
;
row
--
)
{
current_cell
=
GetCell
(
row
,
col
,
BOTTOM
)
&
NO_CELL_ZONE
;
if
(
current_cell
==
0
)
/* a free cell is found */
{
if
(
(
old_cell_H
&
CELL_is_ZONE
)
||
(
pt_cell_V
[
row
]
&
CELL_is_ZONE
)
)
{
OrCell
(
row
,
col
,
BOTTOM
,
CELL_is_ZONE
);
current_cell
=
CELL_is_ZONE
;
nbpoints
++
;
}
}
pt_cell_V
[
row
]
=
old_cell_H
=
current_cell
;
}
}
MyFree
(
pt_cell_V
);
return
nbpoints
;
}
/*****************************************************************************/
bool
WinEDA_PcbFrame
::
Genere_Pad_Connexion
(
wxDC
*
DC
,
int
layer
)
/*****************************************************************************/
/* Create the thermal relief for each pad in the zone:
* this is 4 small segments from the pad to the zone
*/
{
int
ii
,
jj
,
Npads
;
D_PAD
*
pt_pad
;
LISTE_PAD
*
pt_liste_pad
;
TRACK
*
pt_track
,
*
loctrack
;
int
angle
;
int
cX
,
cY
,
dx
,
dy
;
int
sommet
[
4
][
2
];
wxString
msg
;
if
(
m_Pcb
->
m_Zone
==
NULL
)
return
FALSE
;
/* error: no zone */
if
(
m_Pcb
->
m_Zone
->
m_TimeStamp
!=
s_TimeStamp
)
/* error: this is not the new zone */
return
FALSE
;
/* Count the pads, i.e. the thermal relief to create count, and displays it */
Affiche_1_Parametre
(
this
,
50
,
wxT
(
"NPads"
),
wxT
(
" "
),
CYAN
);
pt_liste_pad
=
(
LISTE_PAD
*
)
m_Pcb
->
m_Pads
;
for
(
ii
=
0
,
Npads
=
0
;
ii
<
m_Pcb
->
m_NbPads
;
ii
++
,
pt_liste_pad
++
)
{
pt_pad
=
*
pt_liste_pad
;
/* Search pads relative to the selected net code */
if
(
pt_pad
->
GetNet
()
!=
g_HightLigth_NetCode
)
continue
;
/* Is the pad on the active layer ? */
if
(
(
pt_pad
->
m_Masque_Layer
&
g_TabOneLayerMask
[
layer
])
==
0
)
continue
;
Npads
++
;
}
msg
.
Printf
(
wxT
(
"%d"
),
Npads
);
Affiche_1_Parametre
(
this
,
-
1
,
wxEmptyString
,
msg
,
CYAN
);
/* Create the thermal reliefs */
Affiche_1_Parametre
(
this
,
57
,
wxT
(
"Pads"
),
wxT
(
" "
),
CYAN
);
pt_liste_pad
=
(
LISTE_PAD
*
)
m_Pcb
->
m_Pads
;
for
(
ii
=
0
,
Npads
=
0
;
ii
<
m_Pcb
->
m_NbPads
;
ii
++
,
pt_liste_pad
++
)
{
pt_pad
=
*
pt_liste_pad
;
/* Search pads relative to the selected net code */
if
(
pt_pad
->
GetNet
()
!=
g_HightLigth_NetCode
)
continue
;
/* Is the pad on the active layer ? */
if
(
(
pt_pad
->
m_Masque_Layer
&
g_TabOneLayerMask
[
layer
])
==
0
)
continue
;
/* Create the theram relief for the current pad */
Npads
++
;
msg
.
Printf
(
wxT
(
"%d"
),
Npads
);
Affiche_1_Parametre
(
this
,
-
1
,
wxEmptyString
,
msg
,
CYAN
);
cX
=
pt_pad
->
GetPosition
().
x
;
cY
=
pt_pad
->
GetPosition
().
y
;
dx
=
pt_pad
->
m_Size
.
x
/
2
;
dy
=
pt_pad
->
m_Size
.
y
/
2
;
dx
+=
g_DesignSettings
.
m_TrackClearence
+
g_GridRoutingSize
;
dy
+=
g_DesignSettings
.
m_TrackClearence
+
g_GridRoutingSize
;
if
(
pt_pad
->
m_PadShape
==
TRAPEZE
)
{
dx
+=
abs
(
pt_pad
->
m_DeltaSize
.
y
)
/
2
;
dy
+=
abs
(
pt_pad
->
m_DeltaSize
.
x
)
/
2
;
}
/* calculate the 4 segment coordintes (starting from the pad centre cX,cY) */
sommet
[
0
][
0
]
=
0
;
sommet
[
0
][
1
]
=
-
dy
;
sommet
[
1
][
0
]
=
-
dx
;
sommet
[
1
][
1
]
=
0
;
sommet
[
2
][
0
]
=
0
;
sommet
[
2
][
1
]
=
dy
;
sommet
[
3
][
0
]
=
dx
;
sommet
[
3
][
1
]
=
0
;
angle
=
pt_pad
->
m_Orient
;
for
(
jj
=
0
;
jj
<
4
;
jj
++
)
{
RotatePoint
(
&
sommet
[
jj
][
0
],
&
sommet
[
jj
][
1
],
angle
);
pt_track
=
new
SEGZONE
(
m_Pcb
);
pt_track
->
SetLayer
(
layer
);
pt_track
->
m_Width
=
g_DesignSettings
.
m_CurrentTrackWidth
;
pt_track
->
SetNet
(
g_HightLigth_NetCode
);
pt_track
->
start
=
pt_pad
;
pt_track
->
m_Start
.
x
=
cX
;
pt_track
->
m_Start
.
y
=
cY
;
pt_track
->
m_End
.
x
=
cX
+
sommet
[
jj
][
0
];
pt_track
->
m_End
.
y
=
cY
+
sommet
[
jj
][
1
];
pt_track
->
m_TimeStamp
=
s_TimeStamp
;
/* Test if the segment is allowed */
if
(
BAD_DRC
==
m_drc
->
DrcBlind
(
pt_track
,
m_Pcb
->
m_Track
)
)
{
delete
pt_track
;
continue
;
}
/* Search for a zone segment */
loctrack
=
Locate_Zone
(
m_Pcb
->
m_Zone
,
pt_track
->
m_End
,
layer
);
if
(
(
loctrack
==
NULL
)
||
(
loctrack
->
m_TimeStamp
!=
s_TimeStamp
)
)
{
delete
pt_track
;
continue
;
}
pt_track
->
Insert
(
m_Pcb
,
NULL
);
pt_track
->
Draw
(
DrawPanel
,
DC
,
GR_OR
);
}
}
return
TRUE
;
}
pcbnew/makefile.include
View file @
7e7a7937
EXTRALIBS
=
../common/common.a
EXTRACPPFLAGS
+=
-DPCBNEW
-fno-strict-aliasing
-I
./
-Ibitmaps
-I
../include
-I
../share
-I
../pcbnew
-I
../3d-viewer
EXTRACPPFLAGS
+=
-DPCBNEW
-fno-strict-aliasing
-I
./
-Ibitmaps
-I
../include
-I
../share
\
-I
../pcbnew
-I
../3d-viewer
-I
../polygon
#COMMON = pcbnew.h struct.h class_pad.h class_module.h class_text_mod.h \
# class_edge_mod.h class_equipot.h
LIBVIEWER3D
=
../3d-viewer/3d-viewer.a
ZONE_FILES
=
zones_by_polygon.o
#ZONE_FILES = zones.o
OBJECTS
=
$(TARGET)
.o classpcb.o
\
$(ZONE_FILES)
\
filling_zone_algorithm.o
\
lay2plot.o
\
modedit_undo_redo.o
\
block_module_editor.o
\
...
...
@@ -86,7 +92,7 @@ OBJECTS= $(TARGET).o classpcb.o\
autorout.o solve.o
\
work.o queue.o
\
board.o dist.o graphpcb.o
\
zones.o
undelete.o
\
undelete.o
\
copy_track.o
\
move_or_drag_track.o
\
ioascii.o
\
...
...
@@ -109,6 +115,10 @@ OBJECTS= $(TARGET).o classpcb.o\
hotkeys.o
\
collectors.o
PolyLine.o
:
../polygon/PolyLine.cpp ../polygon/PolyLine.h $(COMMON)
$(CXX)
-c
$(EDACPPFLAGS)
-o
$@
../polygon/
$*
.cpp
setpage.o
:
../share/setpage.cpp
$(CXX)
-c
$(EDACPPFLAGS)
-o
$@
../share/
$*
.cpp
...
...
@@ -277,6 +287,9 @@ graphpcb.o: graphpcb.cpp cell.h autorout.h $(COMMON)
zones.o
:
zones.cpp cell.h $(COMMON)
zones_by_polygon.o
:
zones_by_polygon.cpp dialog_zones_by_polygon.cpp dialog_zones_by_polygon.h $(COMMON)
undelete.o
:
undelete.cpp $(COMMON)
move_or_drag_track.o
:
move_or_drag_track.cpp $(COMMON)
...
...
pcbnew/onrightclick.cpp
View file @
7e7a7937
...
...
@@ -355,7 +355,8 @@ bool WinEDA_PcbFrame::OnRightClick( const wxPoint& aMousePos, wxMenu* aPopMenu )
case
ID_PCB_ZONES_BUTT
:
{
bool
add_separator
=
FALSE
;
aPopMenu
->
Append
(
ID_POPUP_PCB_FILL_ZONE
,
_
(
"Fill zone"
)
);
ADD_MENUITEM
(
aPopMenu
,
ID_POPUP_PCB_FILL_ZONE
,
_
(
"Fill zone"
),
fill_zone_xpm
);
if
(
item
&&
(
(
item
->
Type
()
==
TYPEPAD
)
...
...
pcbnew/pcbnew.cpp
View file @
7e7a7937
...
...
@@ -43,10 +43,6 @@ bool WinEDA_App::OnInit()
return
false
;
}
/* Add image handlers for screen hardcopy */
wxImage
::
AddHandler
(
new
wxPNGHandler
);
wxImage
::
AddHandler
(
new
wxJPEGHandler
);
ScreenPcb
=
new
PCB_SCREEN
(
PCB_FRAME
);
GetSettings
();
...
...
pcbnew/zones.cpp
View file @
7e7a7937
...
...
@@ -35,19 +35,22 @@
////@begin XPM images
////@end XPM images
/* Imported functions */
void
Build_Zone
(
WinEDA_PcbFrame
*
frame
,
wxDC
*
DC
,
int
net_code
,
bool
Zone_Exclude_Pads
,
bool
Zone_Create_Thermal_Relief
);
/* Local functions */
static
void
Display_Zone_Netname
(
WinEDA_PcbFrame
*
frame
);
static
void
Exit_Zones
(
WinEDA_DrawPanel
*
Panel
,
wxDC
*
DC
);
static
void
Show_Zone_Edge_While_MoveMouse
(
WinEDA_DrawPanel
*
panel
,
wxDC
*
DC
,
bool
erase
);
static
void
Genere_Segments_Zone
(
WinEDA_PcbFrame
*
frame
,
wxDC
*
DC
,
int
net_code
);
/* Local variables */
static
bool
Zone_Debug
=
FALSE
;
static
bool
Zone_45_Only
=
FALSE
;
static
bool
Zone_Exclude_Pads
=
TRUE
;
static
bool
s_Zone_Create_Thermal_Relief
=
TRUE
;
/* Time stamp comon to all segments relative to the new created zone */
/* Time stamp com
m
on to all segments relative to the new created zone */
static
unsigned
long
s_TimeStamp
;
/*!
...
...
@@ -616,7 +619,7 @@ static void Exit_Zones( WinEDA_DrawPanel* Panel, wxDC* DC )
{
Panel
->
ManageCurseur
(
Panel
,
DC
,
0
);
}
pcbframe
->
DelLimitesZone
(
DC
,
FALS
E
);
pcbframe
->
DelLimitesZone
(
DC
,
TRU
E
);
}
Panel
->
ManageCurseur
=
NULL
;
...
...
@@ -819,11 +822,7 @@ void WinEDA_PcbFrame::Fill_Zone( wxDC* DC )
* If a net is selected, all tracks attached to this net are also starting points
*/
{
int
ii
,
jj
;
EDGE_ZONE
*
PtLim
;
int
lp_tmp
,
lay_tmp_TOP
,
lay_tmp_BOTTOM
;
EQUIPOT
*
pt_equipot
;
int
save_isol
=
g_DesignSettings
.
m_TrackClearence
;
wxPoint
ZoneStartFill
;
wxString
msg
;
...
...
@@ -837,19 +836,18 @@ void WinEDA_PcbFrame::Fill_Zone( wxDC* DC )
DrawPanel
->
m_IgnoreMouseEvents
=
TRUE
;
WinEDA_ZoneFrame
*
frame
=
new
WinEDA_ZoneFrame
(
this
);
i
i
=
frame
->
ShowModal
();
i
nt
abrd
=
frame
->
ShowModal
();
frame
->
Destroy
();
DrawPanel
->
MouseToCursorSchema
();
DrawPanel
->
m_IgnoreMouseEvents
=
FALSE
;
if
(
ii
)
if
(
abrd
)
return
;
g_DesignSettings
.
m_TrackClearence
=
g_DesignSettings
.
m_ZoneClearence
;
// set all the EDGE_ZONEs to the currently active layer and redraw them
// on that layer.
PtLim
=
m_Pcb
->
m_CurrentLimitZone
;
EDGE_ZONE
*
PtLim
=
m_Pcb
->
m_CurrentLimitZone
;
for
(
;
PtLim
!=
NULL
;
PtLim
=
PtLim
->
Next
()
)
{
Trace_DrawSegmentPcb
(
DrawPanel
,
DC
,
PtLim
,
GR_XOR
);
...
...
@@ -857,61 +855,7 @@ void WinEDA_PcbFrame::Fill_Zone( wxDC* DC )
Trace_DrawSegmentPcb
(
DrawPanel
,
DC
,
PtLim
,
GR_XOR
);
}
s_TimeStamp
=
time
(
NULL
);
// calculate the fixed step of the routing matrix as 5 mils or more
E_scale
=
g_GridRoutingSize
/
50
;
if
(
g_GridRoutingSize
<
1
)
g_GridRoutingSize
=
1
;
// calculate the Ncols and Nrows, size of the routing matrix
ComputeMatriceSize
(
this
,
g_GridRoutingSize
);
// Determine the cell pointed to by the mouse
ZoneStartFill
.
x
=
(
GetScreen
()
->
m_Curseur
.
x
-
m_Pcb
->
m_BoundaryBox
.
m_Pos
.
x
+
(
g_GridRoutingSize
/
2
)
)
/
g_GridRoutingSize
;
ZoneStartFill
.
y
=
(
GetScreen
()
->
m_Curseur
.
y
-
m_Pcb
->
m_BoundaryBox
.
m_Pos
.
y
+
(
g_GridRoutingSize
/
2
)
)
/
g_GridRoutingSize
;
if
(
ZoneStartFill
.
x
<
0
)
ZoneStartFill
.
x
=
0
;
if
(
ZoneStartFill
.
x
>=
Ncols
)
ZoneStartFill
.
x
=
Ncols
-
1
;
if
(
ZoneStartFill
.
y
<
0
)
ZoneStartFill
.
y
=
0
;
if
(
ZoneStartFill
.
y
>=
Nrows
)
ZoneStartFill
.
y
=
Nrows
-
1
;
// create the routing matrix in autorout.h's eda_global BOARDHEAD Board
Nb_Sides
=
ONE_SIDE
;
if
(
Board
.
InitBoard
()
<
0
)
{
DisplayError
(
this
,
wxT
(
"Mo memory for creating zones"
)
);
return
;
}
msg
.
Printf
(
wxT
(
"%d"
),
Ncols
);
Affiche_1_Parametre
(
this
,
1
,
wxT
(
"Cols"
),
msg
,
GREEN
);
msg
.
Printf
(
wxT
(
"%d"
),
Nrows
);
Affiche_1_Parametre
(
this
,
7
,
wxT
(
"Lines"
),
msg
,
GREEN
);
msg
.
Printf
(
wxT
(
"%d"
),
Board
.
m_MemSize
/
1024
);
Affiche_1_Parametre
(
this
,
14
,
wxT
(
"Mem(Ko)"
),
msg
,
CYAN
);
lay_tmp_BOTTOM
=
Route_Layer_BOTTOM
;
lay_tmp_TOP
=
Route_Layer_TOP
;
Route_Layer_BOTTOM
=
Route_Layer_TOP
=
GetScreen
()
->
m_Active_Layer
;
lp_tmp
=
g_DesignSettings
.
m_CurrentTrackWidth
;
g_DesignSettings
.
m_CurrentTrackWidth
=
g_GridRoutingSize
;
/* Shos the NetName */
/* Show the NetName */
if
(
g_HightLigth_NetCode
>
0
)
{
pt_equipot
=
m_Pcb
->
FindNet
(
g_HightLigth_NetCode
);
...
...
@@ -928,510 +872,7 @@ void WinEDA_PcbFrame::Fill_Zone( wxDC* DC )
Affiche_1_Parametre
(
this
,
22
,
_
(
"NetName"
),
msg
,
RED
);
/* Create the starting point for thz zone:
* The starting point and all the tracks are suitable "starting points" */
TRACK
*
pt_segm
=
m_Pcb
->
m_Track
;
for
(
;
pt_segm
!=
NULL
;
pt_segm
=
pt_segm
->
Next
()
)
{
if
(
g_HightLigth_NetCode
!=
pt_segm
->
GetNet
()
)
continue
;
if
(
pt_segm
->
GetLayer
()
!=
GetScreen
()
->
m_Active_Layer
)
continue
;
if
(
pt_segm
->
Type
()
!=
TYPETRACK
)
continue
;
TraceSegmentPcb
(
m_Pcb
,
pt_segm
,
CELL_is_FRIEND
,
0
,
WRITE_CELL
);
}
// trace the pcb edges (pcb contour) into the routing matrix
Route_Layer_BOTTOM
=
Route_Layer_TOP
=
EDGE_N
;
PlaceCells
(
m_Pcb
,
-
1
,
0
);
Route_Layer_BOTTOM
=
Route_Layer_TOP
=
GetScreen
()
->
m_Active_Layer
;
// trace the zone edges into the routing matrix
for
(
PtLim
=
m_Pcb
->
m_CurrentLimitZone
;
PtLim
;
PtLim
=
PtLim
->
Next
()
)
{
int
ux0
,
uy0
,
ux1
,
uy1
;
ux0
=
PtLim
->
m_Start
.
x
-
m_Pcb
->
m_BoundaryBox
.
m_Pos
.
x
;
uy0
=
PtLim
->
m_Start
.
y
-
m_Pcb
->
m_BoundaryBox
.
m_Pos
.
y
;
ux1
=
PtLim
->
m_End
.
x
-
m_Pcb
->
m_BoundaryBox
.
m_Pos
.
x
;
uy1
=
PtLim
->
m_End
.
y
-
m_Pcb
->
m_BoundaryBox
.
m_Pos
.
y
;
TraceLignePcb
(
ux0
,
uy0
,
ux1
,
uy1
,
-
1
,
HOLE
|
CELL_is_EDGE
,
WRITE_CELL
);
}
OrCell
(
ZoneStartFill
.
y
,
ZoneStartFill
.
x
,
BOTTOM
,
CELL_is_ZONE
);
// mark the cells forming part of the zone
ii
=
1
;
jj
=
1
;
while
(
ii
)
{
msg
.
Printf
(
wxT
(
"%d"
),
jj
++
);
Affiche_1_Parametre
(
this
,
50
,
wxT
(
"Iter."
),
msg
,
CYAN
);
ii
=
Propagation
(
this
);
}
// selection of the suitable cells for the points of anchoring of the zone
for
(
ii
=
0
;
ii
<
Nrows
;
ii
++
)
{
for
(
jj
=
0
;
jj
<
Ncols
;
jj
++
)
{
long
cell
=
GetCell
(
ii
,
jj
,
BOTTOM
);
if
(
(
cell
&
CELL_is_ZONE
)
)
{
if
(
(
cell
&
CELL_is_FRIEND
)
==
0
)
AndCell
(
ii
,
jj
,
BOTTOM
,
(
BoardCell
)
~
(
CELL_is_FRIEND
|
CELL_is_ZONE
)
);
}
}
}
// now, all the cell candidates are marked
// place all the obstacles into the matrix, such as (pads, tracks, vias,
// pcb edges or segments)
ii
=
0
;
if
(
Zone_Exclude_Pads
)
ii
=
FORCE_PADS
;
Affiche_1_Parametre
(
this
,
42
,
wxT
(
"GenZone"
),
wxEmptyString
,
RED
);
PlaceCells
(
m_Pcb
,
g_HightLigth_NetCode
,
ii
);
Affiche_1_Parametre
(
this
,
-
1
,
wxEmptyString
,
_
(
"Ok"
),
RED
);
/* Create zone limits on the routing matrix
* (colud be deleted by PlaceCells()) : */
for
(
PtLim
=
m_Pcb
->
m_CurrentLimitZone
;
PtLim
;
PtLim
=
PtLim
->
Next
()
)
{
int
ux0
,
uy0
,
ux1
,
uy1
;
ux0
=
PtLim
->
m_Start
.
x
-
m_Pcb
->
m_BoundaryBox
.
m_Pos
.
x
;
uy0
=
PtLim
->
m_Start
.
y
-
m_Pcb
->
m_BoundaryBox
.
m_Pos
.
y
;
ux1
=
PtLim
->
m_End
.
x
-
m_Pcb
->
m_BoundaryBox
.
m_Pos
.
x
;
uy1
=
PtLim
->
m_End
.
y
-
m_Pcb
->
m_BoundaryBox
.
m_Pos
.
y
;
TraceLignePcb
(
ux0
,
uy0
,
ux1
,
uy1
,
-
1
,
HOLE
|
CELL_is_EDGE
,
WRITE_CELL
);
}
/* Init the starting point for zone filling : this is the mouse position
* (could be deleted by PlaceCells()) : */
OrCell
(
ZoneStartFill
.
y
,
ZoneStartFill
.
x
,
BOTTOM
,
CELL_is_ZONE
);
if
(
Zone_Debug
)
DisplayBoard
(
DrawPanel
,
DC
);
/* Filling the cells of the matrix (tjis is the zone building)*/
ii
=
1
;
jj
=
1
;
while
(
ii
)
{
msg
.
Printf
(
wxT
(
"%d"
),
jj
++
);
Affiche_1_Parametre
(
this
,
50
,
wxT
(
"Iter."
),
msg
,
CYAN
);
ii
=
Propagation
(
this
);
}
if
(
Zone_Debug
)
DisplayBoard
(
DrawPanel
,
DC
);
/* Convert the matrix information (cells) to segments which are actually the zone */
if
(
g_HightLigth_NetCode
<
0
)
Genere_Segments_Zone
(
this
,
DC
,
0
);
else
Genere_Segments_Zone
(
this
,
DC
,
g_HightLigth_NetCode
);
/* Create the thermal reliefs */
g_DesignSettings
.
m_CurrentTrackWidth
=
lp_tmp
;
if
(
Zone_Exclude_Pads
&&
s_Zone_Create_Thermal_Relief
)
Genere_Pad_Connexion
(
DC
,
GetScreen
()
->
m_Active_Layer
);
g_DesignSettings
.
m_TrackClearence
=
save_isol
;
Build_Zone
(
this
,
DC
,
g_HightLigth_NetCode
,
Zone_Exclude_Pads
,
s_Zone_Create_Thermal_Relief
);
GetScreen
()
->
SetModify
();
// free the memory
Board
.
UnInitBoard
();
// restore original values unchanged
Route_Layer_TOP
=
lay_tmp_TOP
;
Route_Layer_BOTTOM
=
lay_tmp_BOTTOM
;
}
/*******************************************************************************/
static
void
Genere_Segments_Zone
(
WinEDA_PcbFrame
*
frame
,
wxDC
*
DC
,
int
net_code
)
/*******************************************************************************/
/** Function Genere_Segments_Zone()
* Create the zone segments from the routing matrix structure
* Algorithm:
* Search for consecutive cells (flagged "zone") , and create segments
* from the first cell to the last cell in the matrix
* 2 searchs are made
* 1 - From left to right and create horizontal zone segments
* 2 - From top to bottom, and create vertical zone segments
* @param net_code = net_code common to all segment zone created
* @param DC = current device context
* @param frame = current WinEDA_PcbFrame
* global: parameter TimeStamp: time stamp common to all segment zone created
*/
{
int
row
,
col
;
long
current_cell
,
old_cell
;
int
ux0
=
0
,
uy0
=
0
,
ux1
=
0
,
uy1
=
0
;
int
Xmin
=
frame
->
m_Pcb
->
m_BoundaryBox
.
m_Pos
.
x
;
int
Ymin
=
frame
->
m_Pcb
->
m_BoundaryBox
.
m_Pos
.
y
;
SEGZONE
*
pt_track
;
int
layer
=
frame
->
GetScreen
()
->
m_Active_Layer
;
int
nbsegm
=
0
;
wxString
msg
;
/* balayage Gauche-> droite */
Affiche_1_Parametre
(
frame
,
64
,
wxT
(
"Segm H"
),
wxT
(
"0"
),
BROWN
);
for
(
row
=
0
;
row
<
Nrows
;
row
++
)
{
old_cell
=
0
;
uy0
=
uy1
=
(
row
*
g_GridRoutingSize
)
+
Ymin
;
for
(
col
=
0
;
col
<
Ncols
;
col
++
)
{
current_cell
=
GetCell
(
row
,
col
,
BOTTOM
)
&
CELL_is_ZONE
;
if
(
current_cell
)
/* ce point doit faire partie d'un segment */
{
ux1
=
(
col
*
g_GridRoutingSize
)
+
Xmin
;
if
(
old_cell
==
0
)
ux0
=
ux1
;
}
if
(
!
current_cell
||
(
col
==
Ncols
-
1
)
)
/* peut etre fin d'un segment */
{
if
(
(
old_cell
)
&&
(
ux0
!=
ux1
)
)
{
/* un segment avait debute de longueur > 0 */
pt_track
=
new
SEGZONE
(
frame
->
m_Pcb
);
pt_track
->
SetLayer
(
layer
);
pt_track
->
SetNet
(
net_code
);
pt_track
->
m_Width
=
g_GridRoutingSize
;
pt_track
->
m_Start
.
x
=
ux0
;
pt_track
->
m_Start
.
y
=
uy0
;
pt_track
->
m_End
.
x
=
ux1
;
pt_track
->
m_End
.
y
=
uy1
;
pt_track
->
m_TimeStamp
=
s_TimeStamp
;
pt_track
->
Insert
(
frame
->
m_Pcb
,
NULL
);
pt_track
->
Draw
(
frame
->
DrawPanel
,
DC
,
GR_OR
);
nbsegm
++
;
}
}
old_cell
=
current_cell
;
}
msg
.
Printf
(
wxT
(
"%d"
),
nbsegm
);
Affiche_1_Parametre
(
frame
,
-
1
,
wxEmptyString
,
msg
,
BROWN
);
}
Affiche_1_Parametre
(
frame
,
72
,
wxT
(
"Segm V"
),
wxT
(
"0"
),
BROWN
);
for
(
col
=
0
;
col
<
Ncols
;
col
++
)
{
old_cell
=
0
;
ux0
=
ux1
=
(
col
*
g_GridRoutingSize
)
+
Xmin
;
for
(
row
=
0
;
row
<
Nrows
;
row
++
)
{
current_cell
=
GetCell
(
row
,
col
,
BOTTOM
)
&
CELL_is_ZONE
;
if
(
current_cell
)
/* ce point doit faire partie d'un segment */
{
uy1
=
(
row
*
g_GridRoutingSize
)
+
Ymin
;
if
(
old_cell
==
0
)
uy0
=
uy1
;
}
if
(
!
current_cell
||
(
row
==
Nrows
-
1
)
)
/* peut etre fin d'un segment */
{
if
(
(
old_cell
)
&&
(
uy0
!=
uy1
)
)
{
/* un segment avait debute de longueur > 0 */
pt_track
=
new
SEGZONE
(
frame
->
m_Pcb
);
pt_track
->
SetLayer
(
layer
);
pt_track
->
m_Width
=
g_GridRoutingSize
;
pt_track
->
SetNet
(
net_code
);
pt_track
->
m_Start
.
x
=
ux0
;
pt_track
->
m_Start
.
y
=
uy0
;
pt_track
->
m_End
.
x
=
ux1
;
pt_track
->
m_End
.
y
=
uy1
;
pt_track
->
m_TimeStamp
=
s_TimeStamp
;
pt_track
->
Insert
(
frame
->
m_Pcb
,
NULL
);
pt_track
->
Draw
(
frame
->
DrawPanel
,
DC
,
GR_OR
);
nbsegm
++
;
}
}
old_cell
=
current_cell
;
}
msg
.
Printf
(
wxT
(
"%d"
),
nbsegm
);
Affiche_1_Parametre
(
frame
,
-
1
,
wxEmptyString
,
msg
,
BROWN
);
}
}
/********************************************/
int
Propagation
(
WinEDA_PcbFrame
*
frame
)
/********************************************/
/** Function Propagation()
* An important function to calculate zones
* Uses the routing matrix to fill the cells within the zone
* Search and mark cells within the zone, and agree with DRC options.
* Requirements:
* Start from an initial point, to fill zone
* The zone must have no "copper island"
* Algorithm:
* If the current cell has a neightbour flagged as "cell in the zone", it
* become a cell in the zone
* The first point in the zone is the starting point
* 4 searches within the matrix are made:
* 1 - Left to right and top to bottom
* 2 - Right to left and top to bottom
* 3 - bottom to top and Right to left
* 4 - bottom to top and Left to right
* Given the current cell, for each search, we consider the 2 neightbour cells
* the previous cell on the same line and the previous cell on the same column.
*
* This funtion can request some iterations
* Iterations are made until no cell is added to the zone.
* @return: added cells count (i.e. which the attribute CELL_is_ZONE is set)
*/
{
int
row
,
col
,
nn
;
long
current_cell
,
old_cell_H
;
int
long
*
pt_cell_V
;
int
nbpoints
=
0
;
#define NO_CELL_ZONE (HOLE | CELL_is_EDGE | CELL_is_ZONE)
wxString
msg
;
Affiche_1_Parametre
(
frame
,
57
,
wxT
(
"Detect"
),
msg
,
CYAN
);
Affiche_1_Parametre
(
frame
,
-
1
,
wxEmptyString
,
wxT
(
"1"
),
CYAN
);
// Alloc memory to handle 1 line or 1 colunmn on the routing matrix
nn
=
MAX
(
Nrows
,
Ncols
)
*
sizeof
(
*
pt_cell_V
);
pt_cell_V
=
(
long
*
)
MyMalloc
(
nn
);
/* search 1 : from left to right and top to bottom */
memset
(
pt_cell_V
,
0
,
nn
);
for
(
row
=
0
;
row
<
Nrows
;
row
++
)
{
old_cell_H
=
0
;
for
(
col
=
0
;
col
<
Ncols
;
col
++
)
{
current_cell
=
GetCell
(
row
,
col
,
BOTTOM
)
&
NO_CELL_ZONE
;
if
(
current_cell
==
0
)
/* a free cell is found */
{
if
(
(
old_cell_H
&
CELL_is_ZONE
)
||
(
pt_cell_V
[
col
]
&
CELL_is_ZONE
)
)
{
OrCell
(
row
,
col
,
BOTTOM
,
CELL_is_ZONE
);
current_cell
=
CELL_is_ZONE
;
nbpoints
++
;
}
}
pt_cell_V
[
col
]
=
old_cell_H
=
current_cell
;
}
}
/* search 2 : from right to left and top to bottom */
Affiche_1_Parametre
(
frame
,
-
1
,
wxEmptyString
,
wxT
(
"2"
),
CYAN
);
memset
(
pt_cell_V
,
0
,
nn
);
for
(
row
=
0
;
row
<
Nrows
;
row
++
)
{
old_cell_H
=
0
;
for
(
col
=
Ncols
-
1
;
col
>=
0
;
col
--
)
{
current_cell
=
GetCell
(
row
,
col
,
BOTTOM
)
&
NO_CELL_ZONE
;
if
(
current_cell
==
0
)
/* a free cell is found */
{
if
(
(
old_cell_H
&
CELL_is_ZONE
)
||
(
pt_cell_V
[
col
]
&
CELL_is_ZONE
)
)
{
OrCell
(
row
,
col
,
BOTTOM
,
CELL_is_ZONE
);
current_cell
=
CELL_is_ZONE
;
nbpoints
++
;
}
}
pt_cell_V
[
col
]
=
old_cell_H
=
current_cell
;
}
}
/* search 3 : from bottom to top and right to left balayage */
Affiche_1_Parametre
(
frame
,
-
1
,
wxEmptyString
,
wxT
(
"3"
),
CYAN
);
memset
(
pt_cell_V
,
0
,
nn
);
for
(
col
=
Ncols
-
1
;
col
>=
0
;
col
--
)
{
old_cell_H
=
0
;
for
(
row
=
Nrows
-
1
;
row
>=
0
;
row
--
)
{
current_cell
=
GetCell
(
row
,
col
,
BOTTOM
)
&
NO_CELL_ZONE
;
if
(
current_cell
==
0
)
/* a free cell is found */
{
if
(
(
old_cell_H
&
CELL_is_ZONE
)
||
(
pt_cell_V
[
row
]
&
CELL_is_ZONE
)
)
{
OrCell
(
row
,
col
,
BOTTOM
,
CELL_is_ZONE
);
current_cell
=
CELL_is_ZONE
;
nbpoints
++
;
}
}
pt_cell_V
[
row
]
=
old_cell_H
=
current_cell
;
}
}
/* search 4 : from bottom to top and left to right */
Affiche_1_Parametre
(
frame
,
-
1
,
wxEmptyString
,
wxT
(
"4"
),
CYAN
);
memset
(
pt_cell_V
,
0
,
nn
);
for
(
col
=
0
;
col
<
Ncols
;
col
++
)
{
old_cell_H
=
0
;
for
(
row
=
Nrows
-
1
;
row
>=
0
;
row
--
)
{
current_cell
=
GetCell
(
row
,
col
,
BOTTOM
)
&
NO_CELL_ZONE
;
if
(
current_cell
==
0
)
/* a free cell is found */
{
if
(
(
old_cell_H
&
CELL_is_ZONE
)
||
(
pt_cell_V
[
row
]
&
CELL_is_ZONE
)
)
{
OrCell
(
row
,
col
,
BOTTOM
,
CELL_is_ZONE
);
current_cell
=
CELL_is_ZONE
;
nbpoints
++
;
}
}
pt_cell_V
[
row
]
=
old_cell_H
=
current_cell
;
}
}
MyFree
(
pt_cell_V
);
return
nbpoints
;
}
/*****************************************************************************/
bool
WinEDA_PcbFrame
::
Genere_Pad_Connexion
(
wxDC
*
DC
,
int
layer
)
/*****************************************************************************/
/* Create the thermal relief for each pad in the zone:
* this is 4 small segments from the pad to the zone
*/
{
int
ii
,
jj
,
Npads
;
D_PAD
*
pt_pad
;
LISTE_PAD
*
pt_liste_pad
;
TRACK
*
pt_track
,
*
loctrack
;
int
angle
;
int
cX
,
cY
,
dx
,
dy
;
int
sommet
[
4
][
2
];
wxString
msg
;
if
(
m_Pcb
->
m_Zone
==
NULL
)
return
FALSE
;
/* error: no zone */
if
(
m_Pcb
->
m_Zone
->
m_TimeStamp
!=
s_TimeStamp
)
/* error: this is not the new zone */
return
FALSE
;
/* Count the pads, i.e. the thermal relief to create count, and displays it */
Affiche_1_Parametre
(
this
,
50
,
wxT
(
"NPads"
),
wxT
(
" "
),
CYAN
);
pt_liste_pad
=
(
LISTE_PAD
*
)
m_Pcb
->
m_Pads
;
for
(
ii
=
0
,
Npads
=
0
;
ii
<
m_Pcb
->
m_NbPads
;
ii
++
,
pt_liste_pad
++
)
{
pt_pad
=
*
pt_liste_pad
;
/* Search pads relative to the selected net code */
if
(
pt_pad
->
GetNet
()
!=
g_HightLigth_NetCode
)
continue
;
/* Is the pad on the active layer ? */
if
(
(
pt_pad
->
m_Masque_Layer
&
g_TabOneLayerMask
[
layer
])
==
0
)
continue
;
Npads
++
;
}
msg
.
Printf
(
wxT
(
"%d"
),
Npads
);
Affiche_1_Parametre
(
this
,
-
1
,
wxEmptyString
,
msg
,
CYAN
);
/* Create the thermal reliefs */
Affiche_1_Parametre
(
this
,
57
,
wxT
(
"Pads"
),
wxT
(
" "
),
CYAN
);
pt_liste_pad
=
(
LISTE_PAD
*
)
m_Pcb
->
m_Pads
;
for
(
ii
=
0
,
Npads
=
0
;
ii
<
m_Pcb
->
m_NbPads
;
ii
++
,
pt_liste_pad
++
)
{
pt_pad
=
*
pt_liste_pad
;
/* Search pads relative to the selected net code */
if
(
pt_pad
->
GetNet
()
!=
g_HightLigth_NetCode
)
continue
;
/* Is the pad on the active layer ? */
if
(
(
pt_pad
->
m_Masque_Layer
&
g_TabOneLayerMask
[
layer
])
==
0
)
continue
;
/* Create the theram relief for the current pad */
Npads
++
;
msg
.
Printf
(
wxT
(
"%d"
),
Npads
);
Affiche_1_Parametre
(
this
,
-
1
,
wxEmptyString
,
msg
,
CYAN
);
cX
=
pt_pad
->
GetPosition
().
x
;
cY
=
pt_pad
->
GetPosition
().
y
;
dx
=
pt_pad
->
m_Size
.
x
/
2
;
dy
=
pt_pad
->
m_Size
.
y
/
2
;
dx
+=
g_DesignSettings
.
m_TrackClearence
+
g_GridRoutingSize
;
dy
+=
g_DesignSettings
.
m_TrackClearence
+
g_GridRoutingSize
;
if
(
pt_pad
->
m_PadShape
==
TRAPEZE
)
{
dx
+=
abs
(
pt_pad
->
m_DeltaSize
.
y
)
/
2
;
dy
+=
abs
(
pt_pad
->
m_DeltaSize
.
x
)
/
2
;
}
/* calculate the 4 segment coordintes (starting from the pad centre cX,cY) */
sommet
[
0
][
0
]
=
0
;
sommet
[
0
][
1
]
=
-
dy
;
sommet
[
1
][
0
]
=
-
dx
;
sommet
[
1
][
1
]
=
0
;
sommet
[
2
][
0
]
=
0
;
sommet
[
2
][
1
]
=
dy
;
sommet
[
3
][
0
]
=
dx
;
sommet
[
3
][
1
]
=
0
;
angle
=
pt_pad
->
m_Orient
;
for
(
jj
=
0
;
jj
<
4
;
jj
++
)
{
RotatePoint
(
&
sommet
[
jj
][
0
],
&
sommet
[
jj
][
1
],
angle
);
pt_track
=
new
SEGZONE
(
m_Pcb
);
pt_track
->
SetLayer
(
layer
);
pt_track
->
m_Width
=
g_DesignSettings
.
m_CurrentTrackWidth
;
pt_track
->
SetNet
(
g_HightLigth_NetCode
);
pt_track
->
start
=
pt_pad
;
pt_track
->
m_Start
.
x
=
cX
;
pt_track
->
m_Start
.
y
=
cY
;
pt_track
->
m_End
.
x
=
cX
+
sommet
[
jj
][
0
];
pt_track
->
m_End
.
y
=
cY
+
sommet
[
jj
][
1
];
pt_track
->
m_TimeStamp
=
s_TimeStamp
;
/* Test if the segment is allowed */
if
(
BAD_DRC
==
m_drc
->
DrcBlind
(
pt_track
,
m_Pcb
->
m_Track
)
)
{
delete
pt_track
;
continue
;
}
/* Search for a zone segment */
loctrack
=
Locate_Zone
(
m_Pcb
->
m_Zone
,
pt_track
->
m_End
,
layer
);
if
(
(
loctrack
==
NULL
)
||
(
loctrack
->
m_TimeStamp
!=
s_TimeStamp
)
)
{
delete
pt_track
;
continue
;
}
pt_track
->
Insert
(
m_Pcb
,
NULL
);
pt_track
->
Draw
(
DrawPanel
,
DC
,
GR_OR
);
}
}
return
TRUE
;
}
pcbnew/zones.h
View file @
7e7a7937
...
...
@@ -49,18 +49,17 @@
////@begin control identifiers
#define ID_DIALOG 10000
// #define SYMBOL_WINEDA_ZONEFRAME_STYLE wxCAPTION|wxRESIZE_BORDER|wxSYSTEM_MENU|wxSTAY_ON_TOP|wxCLOSE_BOX
#define SYMBOL_WINEDA_ZONEFRAME_STYLE wxCAPTION|wxSYSTEM_MENU|wxCLOSE_BOX|MAYBE_RESIZE_BORDER
#define SYMBOL_WINEDA_ZONEFRAME_TITLE _("Fill Zones Options")
#define SYMBOL_WINEDA_ZONEFRAME_IDNAME ID_DIALOG
#define SYMBOL_WINEDA_ZONEFRAME_SIZE wxSize(400, 300)
#define SYMBOL_WINEDA_ZONEFRAME_POSITION wxDefaultPosition
#define ID_RADIOBOX 10001
#define ID_TEXTCTRL 10006
#define ID_RADIOBOX1 10004
#define ID_RADIOBOX2 10005
#define ID_FILL_ZONE 10002
#define ID_SET_OPTIONS_ZONE 10003
#define SYMBOL_WINEDA_ZONEFRAME_STYLE wxCAPTION|wxSYSTEM_MENU|wxCLOSE_BOX|MAYBE_RESIZE_BORDER
#define SYMBOL_WINEDA_ZONEFRAME_TITLE _("Fill Zones Options")
#define SYMBOL_WINEDA_ZONEFRAME_IDNAME ID_DIALOG
#define SYMBOL_WINEDA_ZONEFRAME_SIZE wxSize(400, 300)
#define SYMBOL_WINEDA_ZONEFRAME_POSITION wxDefaultPosition
////@end control identifiers
/*!
...
...
pcbnew/zones_by_polygon.cpp
0 → 100644
View file @
7e7a7937
/////////////////////////////////////////////////////////////////////////////
// Name: zones_by_polygon.cpp
// Purpose:
// Author: jean-pierre Charras
// Modified by:
// Created: 25/01/2006 11:35:19
// RCS-ID:
// Copyright: GNU License
// Licence: GNU License
/////////////////////////////////////////////////////////////////////////////
// Generated by DialogBlocks (unregistered), 25/01/2006 11:35:19
#if defined (__GNUG__) && !defined (NO_GCC_PRAGMA)
#pragma implementation "dialog_zones_by_polygon.h"
#endif
#include "fctsys.h"
#include "gr_basic.h"
#include "common.h"
#include "pcbnew.h"
#include "autorout.h"
#include "cell.h"
#include "trigo.h"
#include "protos.h"
// For compilers that support precompilation, includes "wx/wx.h".
#include "wx/wxprec.h"
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#ifndef WX_PRECOMP
#include "wx/wx.h"
#endif
////@begin includes
////@end includes
////@begin XPM images
////@end XPM images
/* Imported functions */
void
Build_Zone
(
WinEDA_PcbFrame
*
frame
,
wxDC
*
DC
,
int
net_code
,
bool
Zone_Exclude_Pads
,
bool
Zone_Create_Thermal_Relief
);
/* Local functions */
static
void
Display_Zone_Netname
(
WinEDA_PcbFrame
*
frame
);
static
void
Exit_Zones
(
WinEDA_DrawPanel
*
Panel
,
wxDC
*
DC
);
static
void
Show_Zone_Edge_While_MoveMouse
(
WinEDA_DrawPanel
*
panel
,
wxDC
*
DC
,
bool
erase
);
/* Local variables */
static
bool
Zone_45_Only
=
FALSE
;
static
bool
Zone_Exclude_Pads
=
TRUE
;
static
bool
s_Zone_Create_Thermal_Relief
=
TRUE
;
static
int
s_Zone_Layer
;
// Layer used to put the current zone
static
int
s_NetcodeSelection
;
// Net code selection for the current zone
static
int
s_NetSortingOpt
;
// For the net list: sort option (by alphabetic order or bay pad count order
#define ZONE_NET_SORT_OPTION_KEY wxT("Zone_NetSort_Opt")
#include "dialog_zones_by_polygon.cpp"
/**************************************************************/
void
WinEDA_PcbFrame
::
Edit_Zone_Width
(
wxDC
*
DC
,
SEGZONE
*
aZone
)
/**************************************************************/
/* Edite (change la largeur des segments) la zone Zone.
* La zone est constituee des segments zones de meme TimeStamp
*/
{
bool
modify
=
FALSE
;
double
f_new_width
;
int
w_tmp
;
wxString
Line
;
wxString
Msg
(
_
(
"New zone segment width: "
)
);
if
(
aZone
==
NULL
)
return
;
f_new_width
=
To_User_Unit
(
g_UnitMetric
,
aZone
->
m_Width
,
GetScreen
()
->
GetInternalUnits
()
);
Line
.
Printf
(
wxT
(
"%.4f"
),
f_new_width
);
Msg
+=
g_UnitMetric
?
wxT
(
"(mm)"
)
:
wxT
(
"(
\"
)"
);
if
(
Get_Message
(
Msg
,
Line
,
this
)
!=
0
)
return
;
w_tmp
=
g_DesignSettings
.
m_CurrentTrackWidth
;
Line
.
ToDouble
(
&
f_new_width
);
g_DesignSettings
.
m_CurrentTrackWidth
=
From_User_Unit
(
g_UnitMetric
,
f_new_width
,
GetScreen
(
)
->
GetInternalUnits
()
);
for
(
SEGZONE
*
zone
=
m_Pcb
->
m_Zone
;
zone
;
zone
=
zone
->
Next
()
)
{
if
(
zone
->
m_TimeStamp
==
aZone
->
m_TimeStamp
)
{
modify
=
TRUE
;
Edit_TrackSegm_Width
(
DC
,
zone
);
}
}
g_DesignSettings
.
m_CurrentTrackWidth
=
w_tmp
;
if
(
modify
)
{
GetScreen
()
->
SetModify
();
DrawPanel
->
Refresh
();
}
}
/**********************************************************/
void
WinEDA_PcbFrame
::
Delete_Zone
(
wxDC
*
DC
,
SEGZONE
*
aZone
)
/**********************************************************/
/* Remove the zone which include the segment aZone.
* A zone is a group of segments which have the same TimeStamp
*/
{
if
(
aZone
==
NULL
)
return
;
int
nb_segm
=
0
;
bool
modify
=
FALSE
;
unsigned
long
TimeStamp
=
aZone
->
m_TimeStamp
;
// Save reference time stamp (aZone will be deleted)
SEGZONE
*
next
;
for
(
SEGZONE
*
zone
=
m_Pcb
->
m_Zone
;
zone
!=
NULL
;
zone
=
next
)
{
next
=
zone
->
Next
();
if
(
zone
->
m_TimeStamp
==
TimeStamp
)
{
modify
=
TRUE
;
/* Erase segment from screen */
Trace_Une_Piste
(
DrawPanel
,
DC
,
zone
,
nb_segm
,
GR_XOR
);
/* remove item from linked list and free memory */
zone
->
DeleteStructure
();
}
}
if
(
modify
)
{
GetScreen
()
->
SetModify
();
GetScreen
()
->
SetRefreshReq
();
}
}
/*****************************************************************************/
EDGE_ZONE
*
WinEDA_PcbFrame
::
Del_SegmEdgeZone
(
wxDC
*
DC
,
EDGE_ZONE
*
edge_zone
)
/*****************************************************************************/
/* Routine d'effacement du segment de limite zone en cours de trace */
{
EDGE_ZONE
*
segm
;
if
(
m_Pcb
->
m_CurrentLimitZone
)
segm
=
m_Pcb
->
m_CurrentLimitZone
;
else
segm
=
edge_zone
;
if
(
segm
==
NULL
)
return
NULL
;
Trace_DrawSegmentPcb
(
DrawPanel
,
DC
,
segm
,
GR_XOR
);
m_Pcb
->
m_CurrentLimitZone
=
segm
->
Next
();
delete
segm
;
segm
=
m_Pcb
->
m_CurrentLimitZone
;
SetCurItem
(
segm
);
if
(
segm
)
{
segm
->
Pback
=
NULL
;
if
(
DrawPanel
->
ManageCurseur
)
DrawPanel
->
ManageCurseur
(
DrawPanel
,
DC
,
TRUE
);
}
else
{
DrawPanel
->
ManageCurseur
=
NULL
;
DrawPanel
->
ForceCloseManageCurseur
=
NULL
;
SetCurItem
(
NULL
);
}
return
segm
;
}
/*********************************************/
void
WinEDA_PcbFrame
::
CaptureNetName
(
wxDC
*
DC
)
/*********************************************/
/* routine permettant de capturer le nom net net (netcode) d'un pad
* ou d'une piste pour l'utiliser comme netcode de zone
*/
{
D_PAD
*
pt_pad
=
0
;
TRACK
*
adrpiste
;
MODULE
*
Module
;
int
masquelayer
=
g_TabOneLayerMask
[
GetScreen
()
->
m_Active_Layer
];
int
netcode
;
netcode
=
-
1
;
MsgPanel
->
EraseMsgBox
();
adrpiste
=
Locate_Pistes
(
m_Pcb
->
m_Track
,
masquelayer
,
CURSEUR_OFF_GRILLE
);
if
(
adrpiste
==
NULL
)
{
pt_pad
=
Locate_Any_Pad
(
m_Pcb
,
CURSEUR_OFF_GRILLE
);
if
(
pt_pad
)
/* Verif qu'il est bien sur la couche active */
{
Module
=
(
MODULE
*
)
pt_pad
->
m_Parent
;
pt_pad
=
Locate_Pads
(
Module
,
g_TabOneLayerMask
[
GetScreen
()
->
m_Active_Layer
],
CURSEUR_OFF_GRILLE
);
}
if
(
pt_pad
)
{
pt_pad
->
Display_Infos
(
this
);
netcode
=
pt_pad
->
GetNet
();
}
}
else
{
adrpiste
->
Display_Infos
(
this
);
netcode
=
adrpiste
->
GetNet
();
}
// Mise en surbrillance du net
if
(
g_HightLigt_Status
)
Hight_Light
(
DC
);
g_HightLigth_NetCode
=
netcode
;
if
(
g_HightLigth_NetCode
>=
0
)
{
Hight_Light
(
DC
);
}
/* Affichage du net selectionne pour la zone a tracer */
Display_Zone_Netname
(
this
);
}
/*******************************************************/
static
void
Display_Zone_Netname
(
WinEDA_PcbFrame
*
frame
)
/*******************************************************/
/*
* Affiche le net_code et le nom de net couramment selectionne
*/
{
EQUIPOT
*
pt_equipot
;
wxString
line
;
pt_equipot
=
frame
->
m_Pcb
->
m_Equipots
;
if
(
g_HightLigth_NetCode
>
0
)
{
for
(
;
pt_equipot
!=
NULL
;
pt_equipot
=
(
EQUIPOT
*
)
pt_equipot
->
Pnext
)
{
if
(
pt_equipot
->
GetNet
()
==
g_HightLigth_NetCode
)
break
;
}
if
(
pt_equipot
)
{
line
.
Printf
(
wxT
(
"Zone: Net[%d] <%s>"
),
g_HightLigth_NetCode
,
pt_equipot
->
m_Netname
.
GetData
()
);
}
else
line
.
Printf
(
wxT
(
"Zone: NetCode[%d], Equipot not found"
),
g_HightLigth_NetCode
);
}
line
=
_
(
"Zone: No net selected"
);
frame
->
Affiche_Message
(
line
);
}
/********************************************************/
static
void
Exit_Zones
(
WinEDA_DrawPanel
*
Panel
,
wxDC
*
DC
)
/********************************************************/
/**
* Function Exit_Zones
* cancels the Begin_Zone state if at least one EDGE_ZONE has been created.
*/
{
WinEDA_PcbFrame
*
pcbframe
=
(
WinEDA_PcbFrame
*
)
Panel
->
m_Parent
;
if
(
pcbframe
->
m_Pcb
->
m_CurrentLimitZone
)
{
if
(
Panel
->
ManageCurseur
)
// trace in progress
{
Panel
->
ManageCurseur
(
Panel
,
DC
,
0
);
}
pcbframe
->
DelLimitesZone
(
DC
,
TRUE
);
}
Panel
->
ManageCurseur
=
NULL
;
Panel
->
ForceCloseManageCurseur
=
NULL
;
pcbframe
->
SetCurItem
(
NULL
);
}
/**************************************************************/
void
WinEDA_BasePcbFrame
::
DelLimitesZone
(
wxDC
*
DC
,
bool
Redraw
)
/**************************************************************/
{
EDGE_ZONE
*
segment
;
EDGE_ZONE
*
next
;
if
(
m_Pcb
->
m_CurrentLimitZone
==
NULL
)
return
;
if
(
!
IsOK
(
this
,
_
(
"Delete Current Zone Edges"
)
)
)
return
;
// erase the old zone border, one segment at a time
for
(
segment
=
m_Pcb
->
m_CurrentLimitZone
;
segment
;
segment
=
next
)
{
next
=
segment
->
Next
();
if
(
Redraw
&&
DC
)
Trace_DrawSegmentPcb
(
DrawPanel
,
DC
,
segment
,
GR_XOR
);
delete
segment
;
}
m_Pcb
->
m_CurrentLimitZone
=
NULL
;
SetCurItem
(
NULL
);
}
/**
* Function Begin_Zone
* either initializes the first segment of a new zone, or adds an
* intermediate segment.
*/
EDGE_ZONE
*
WinEDA_PcbFrame
::
Begin_Zone
()
{
EDGE_ZONE
*
oldedge
;
EDGE_ZONE
*
newedge
=
NULL
;
oldedge
=
m_Pcb
->
m_CurrentLimitZone
;
// if first segment
if
(
(
m_Pcb
->
m_CurrentLimitZone
==
NULL
)
/* debut reel du trace */
||
(
DrawPanel
->
ManageCurseur
==
NULL
)
)
/* reprise d'un trace complementaire */
{
newedge
=
new
EDGE_ZONE
(
m_Pcb
);
newedge
->
m_Flags
=
IS_NEW
|
STARTPOINT
|
IS_MOVED
;
newedge
->
m_Start
=
newedge
->
m_End
=
GetScreen
()
->
m_Curseur
;
newedge
->
SetLayer
(
GetScreen
()
->
m_Active_Layer
);
// link into list:
newedge
->
Pnext
=
oldedge
;
if
(
oldedge
)
oldedge
->
Pback
=
newedge
;
m_Pcb
->
m_CurrentLimitZone
=
newedge
;
DrawPanel
->
ManageCurseur
=
Show_Zone_Edge_While_MoveMouse
;
DrawPanel
->
ForceCloseManageCurseur
=
Exit_Zones
;
}
// edge in progress:
else
/* piste en cours : les coord du point d'arrivee ont ete mises
* a jour par la routine Show_Zone_Edge_While_MoveMouse*/
{
if
(
oldedge
->
m_Start
!=
oldedge
->
m_End
)
{
oldedge
->
m_Flags
&=
~
(
IS_NEW
|
IS_MOVED
);
newedge
=
new
EDGE_ZONE
(
oldedge
);
newedge
->
m_Flags
=
IS_NEW
|
IS_MOVED
;
newedge
->
m_Start
=
newedge
->
m_End
=
oldedge
->
m_End
;
newedge
->
SetLayer
(
GetScreen
()
->
m_Active_Layer
);
// link into list:
newedge
->
Pnext
=
oldedge
;
oldedge
->
Pback
=
newedge
;
m_Pcb
->
m_CurrentLimitZone
=
newedge
;
}
}
return
newedge
;
}
/*********************************************/
void
WinEDA_PcbFrame
::
End_Zone
(
wxDC
*
DC
)
/*********************************************/
/*
* Routine de fin de trace d'une zone (succession de segments)
*/
{
EDGE_ZONE
*
edge
;
if
(
m_Pcb
->
m_CurrentLimitZone
)
{
Begin_Zone
();
/* le dernier point genere est de longueur tj nulle donc inutile. */
/* il sera raccorde au point de depart */
edge
=
m_Pcb
->
m_CurrentLimitZone
;
edge
->
m_Flags
&=
~
(
IS_NEW
|
IS_MOVED
);
while
(
edge
&&
edge
->
Next
()
)
{
edge
=
edge
->
Next
();
if
(
edge
->
m_Flags
&
STARTPOINT
)
break
;
edge
->
m_Flags
&=
~
(
IS_NEW
|
IS_MOVED
);
}
if
(
edge
)
{
edge
->
m_Flags
&=
~
(
IS_NEW
|
IS_MOVED
);
m_Pcb
->
m_CurrentLimitZone
->
m_End
=
edge
->
m_Start
;
}
Trace_DrawSegmentPcb
(
DrawPanel
,
DC
,
m_Pcb
->
m_CurrentLimitZone
,
GR_XOR
);
}
DrawPanel
->
ManageCurseur
=
NULL
;
DrawPanel
->
ForceCloseManageCurseur
=
NULL
;
}
/******************************************************************************************/
static
void
Show_Zone_Edge_While_MoveMouse
(
WinEDA_DrawPanel
*
panel
,
wxDC
*
DC
,
bool
erase
)
/******************************************************************************************/
/* redessin du contour de la piste lors des deplacements de la souris
*/
{
EDGE_ZONE
*
edge
;
EDGE_ZONE
*
currentEdge
;
WinEDA_PcbFrame
*
pcbframe
=
(
WinEDA_PcbFrame
*
)
panel
->
m_Parent
;
if
(
pcbframe
->
m_Pcb
->
m_CurrentLimitZone
==
NULL
)
return
;
/* efface ancienne position si elle a ete deja dessinee */
if
(
erase
)
{
edge
=
pcbframe
->
m_Pcb
->
m_CurrentLimitZone
;
// for( ; edge; edge = edge->Next() )
{
Trace_DrawSegmentPcb
(
panel
,
DC
,
edge
,
GR_XOR
);
}
}
/* mise a jour de la couche */
for
(
edge
=
pcbframe
->
m_Pcb
->
m_CurrentLimitZone
;
edge
;
edge
=
edge
->
Next
()
)
{
edge
->
SetLayer
(
pcbframe
->
GetScreen
()
->
m_Active_Layer
);
}
/* dessin de la nouvelle piste : mise a jour du point d'arrivee */
currentEdge
=
pcbframe
->
m_Pcb
->
m_CurrentLimitZone
;
if
(
Zone_45_Only
)
{
// Calcul de l'extremite de la piste pour orientations permises:
// horiz,vertical ou 45 degre
currentEdge
->
m_End
=
pcbframe
->
GetScreen
()
->
m_Curseur
;
Calcule_Coord_Extremite_45
(
currentEdge
->
m_Start
.
x
,
currentEdge
->
m_Start
.
y
,
&
currentEdge
->
m_End
.
x
,
&
currentEdge
->
m_End
.
y
);
}
else
/* ici l'angle d'inclinaison est quelconque */
{
currentEdge
->
m_End
=
pcbframe
->
GetScreen
()
->
m_Curseur
;
}
// for( ; currentEdge; currentEdge = currentEdge->Next() )
{
Trace_DrawSegmentPcb
(
panel
,
DC
,
currentEdge
,
GR_XOR
);
}
}
/**********************************************/
void
WinEDA_PcbFrame
::
Fill_Zone
(
wxDC
*
DC
)
/**********************************************/
/** Function Fill_Zone()
* Init the zone filling
* If a zone edge is found, it is used.
* Otherwise the whole board is filled by the zone
* The zone edge is a frontier, and can be complex. So non filled zones can be achieved
* The zone is put on the active layer
* If a net is hightlighted, the zone will be attached to this net
* The filling start from a starting point.
* If a net is selected, all tracks attached to this net are also starting points
*/
{
EQUIPOT
*
pt_equipot
;
wxPoint
ZoneStartFill
;
wxString
msg
;
MsgPanel
->
EraseMsgBox
();
if
(
m_Pcb
->
ComputeBoundaryBox
()
==
FALSE
)
{
DisplayError
(
this
,
wxT
(
"Board is empty!"
),
10
);
return
;
}
if
(
m_Parent
&&
m_Parent
->
m_EDA_Config
)
{
s_NetSortingOpt
=
m_Parent
->
m_EDA_Config
->
Read
(
ZONE_NET_SORT_OPTION_KEY
,
(
long
)
BOARD
::
PAD_CNT_SORT
);
}
int
NetSortingOptImg
=
s_NetSortingOpt
;
DrawPanel
->
m_IgnoreMouseEvents
=
TRUE
;
WinEDA_ZoneFrame
*
frame
=
new
WinEDA_ZoneFrame
(
this
);
int
abrd
=
frame
->
ShowModal
();
frame
->
Destroy
();
DrawPanel
->
MouseToCursorSchema
();
DrawPanel
->
m_IgnoreMouseEvents
=
FALSE
;
if
(
(
NetSortingOptImg
!=
s_NetSortingOpt
)
&&
m_Parent
&&
m_Parent
->
m_EDA_Config
)
{
m_Parent
->
m_EDA_Config
->
Write
(
ZONE_NET_SORT_OPTION_KEY
,
(
long
)
s_NetSortingOpt
);
}
if
(
abrd
)
return
;
// set all the EDGE_ZONEs to the currently active layer and redraw them
// on that layer.
GetScreen
()
->
m_Active_Layer
=
s_Zone_Layer
;
EDGE_ZONE
*
PtLim
=
m_Pcb
->
m_CurrentLimitZone
;
for
(
;
PtLim
!=
NULL
;
PtLim
=
PtLim
->
Next
()
)
{
Trace_DrawSegmentPcb
(
DrawPanel
,
DC
,
PtLim
,
GR_XOR
);
PtLim
->
SetLayer
(
s_Zone_Layer
);
Trace_DrawSegmentPcb
(
DrawPanel
,
DC
,
PtLim
,
GR_XOR
);
}
/* Show the NetName */
if
(
(
g_HightLigth_NetCode
>
0
)
&&
(
g_HightLigth_NetCode
!=
s_NetcodeSelection
)
)
{
Hight_Light
(
DC
);
g_HightLigth_NetCode
=
s_NetcodeSelection
;
Hight_Light
(
DC
);
}
g_HightLigth_NetCode
=
s_NetcodeSelection
;
if
(
g_HightLigth_NetCode
>
0
)
{
pt_equipot
=
m_Pcb
->
FindNet
(
g_HightLigth_NetCode
);
if
(
pt_equipot
==
NULL
)
{
if
(
g_HightLigth_NetCode
>
0
)
DisplayError
(
this
,
wxT
(
"Unable to find Net name"
)
);
}
else
msg
=
pt_equipot
->
m_Netname
;
}
else
msg
=
_
(
"No Net"
);
Affiche_1_Parametre
(
this
,
22
,
_
(
"NetName"
),
msg
,
RED
);
Build_Zone
(
this
,
DC
,
g_HightLigth_NetCode
,
Zone_Exclude_Pads
,
s_Zone_Create_Thermal_Relief
);
GetScreen
()
->
SetModify
();
}
polygon/defs-macros.h
View file @
7e7a7937
...
...
@@ -25,8 +25,17 @@
#define abs(x) (((x) >=0) ? (x) : (-(x)))
#endif
#ifndef min
#define min(x,y) (((x) <= (y)) ? (x) : (y))
#endif
#ifndef max
#define max(x,y) (((x) >= (y)) ? (x) : (y))
#endif
#define TRACE printf
#define ASSERT(x) // todo : change to
DEBUG
, under wxWidgets
#define ASSERT(x) // todo : change to
wxASSERT
, under wxWidgets
#endif // ifndef DEFS_MACROS_H
polygon/makefile.include
View file @
7e7a7937
...
...
@@ -7,10 +7,14 @@ COMMON =
OBJECTS
=
\
GenericPolygonClipperLibrary.o
\
php_polygon.o
\
php_polygon_vertex.o
php_polygon_vertex.o
\
PolyLine.o
\
math_for_graphics.o
GenericPolygonClipperLibrary.o
:
GenericPolygonClipperLibrary.cpp GenericPolygonClipperLibrary.h
php_polygon.o
:
php_polygon.cpp php_polygon.h php_polygon_vertex.h defs-macros.h
#polygon1.o: polygon1.cpp polyarea.h vectmatr.h
math_for_graphics.o
:
math_for_graphics.cpp math_for_graphics.h
share/drawframe.cpp
View file @
7e7a7937
...
...
@@ -584,9 +584,6 @@ void WinEDA_DrawFrame::OnZoom( int zoom_type )
* replac au centre de l'ecran
*/
{
D
(
printf
(
"OnZoom x=%d, y=%d
\n
"
,
m_CurrentScreen
->
m_Curseur
.
x
,
m_CurrentScreen
->
m_Curseur
.
y
);)
if
(
DrawPanel
==
NULL
)
return
;
...
...
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