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
ffd3a713
Commit
ffd3a713
authored
Jan 04, 2008
by
CHARRAS
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
more about zones. current No DRC for outlines
parent
945c14d4
Changes
17
Show whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
1837 additions
and
451 deletions
+1837
-451
Add_Zone_Cutout.xpm
bitmaps/Add_Zone_Cutout.xpm
+6
-6
change_log.txt
change_log.txt
+8
-0
wxPcbStruct.h
include/wxPcbStruct.h
+25
-0
kicad.mo
internat/fr/kicad.mo
+0
-0
kicad.po
internat/fr/kicad.po
+324
-275
class_board.h
pcbnew/class_board.h
+117
-0
class_zone.cpp
pcbnew/class_zone.cpp
+81
-58
class_zone.h
pcbnew/class_zone.h
+4
-3
dialog_zones_by_polygon.cpp
pcbnew/dialog_zones_by_polygon.cpp
+1
-1
edit.cpp
pcbnew/edit.cpp
+6
-18
makefile.include
pcbnew/makefile.include
+2
-0
onrightclick.cpp
pcbnew/onrightclick.cpp
+2
-2
zone_filling_algorithm.cpp
pcbnew/zone_filling_algorithm.cpp
+18
-20
zones_by_polygon.cpp
pcbnew/zones_by_polygon.cpp
+250
-65
zones_test_and_combine_areas.cpp
pcbnew/zones_test_and_combine_areas.cpp
+975
-0
PolyLine.cpp
polygon/PolyLine.cpp
+13
-0
PolyLine.h
polygon/PolyLine.h
+5
-3
No files found.
bitmaps/Add_Zone_Cutout.xpm
View file @
ffd3a713
...
...
@@ -11,12 +11,12 @@ const char * add_zone_cutout[] = {
" ..............",
".... ........",
"... ++++ .......",
".. +
+ .....",
". +
+ ...",
". +
+ ..",
". +
+ ..",
". +
+ .",
".. +
+ ..",
".. +
+++++
+ .....",
". +
+ +
+ ...",
". +
+ +
+ ..",
". +
+ +
+ ..",
". +
+ +
+ .",
".. +
++++++++
+ ..",
"... +++++++ ... ",
".... .... ",
"............ ",
...
...
change_log.txt
View file @
ffd3a713
...
...
@@ -4,6 +4,14 @@ Started 2007-June-11
Please add newer entries at the top, list the date and your name with
email address.
2008-jan-04 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
================================================================================
+pcbnew:
More about zones:
Outlines can be edited. Outlines are merged if needeed.
Current No DRC for outlines
2008-jan-01 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
================================================================================
+all
...
...
include/wxPcbStruct.h
View file @
ffd3a713
...
...
@@ -529,6 +529,24 @@ public:
*/
int
Fill_All_Zones
(
wxDC
*
DC
,
bool
verbose
=
TRUE
);
/**
* Function Add_Zone_Cutout
* Add a cutout zone to a given zone outline
* @param DC = current Device Context
* @param zone_container = parent zone outline
*/
void
Add_Zone_Cutout
(
wxDC
*
DC
,
ZONE_CONTAINER
*
zone_container
);
/**
* Function Add_Similar_Zone
* Add a zone to a given zone outline.
* if the zones are overlappeing they will be merged
* @param DC = current Device Context
* @param zone_container = parent zone outline
*/
void
Add_Similar_Zone
(
wxDC
*
DC
,
ZONE_CONTAINER
*
zone_container
);
/**
* Function Edit_Zone_Params
* Edit params (layer, clearance, ...) for a zone outline
...
...
@@ -548,6 +566,13 @@ public:
*/
void
End_Move_Zone_Corner
(
wxDC
*
DC
,
ZONE_CONTAINER
*
zone_container
);
/**
* Function End_Move_Zone_Corner
* Remove the currently selected corner in a zone outline
* the .m_CornerSelection is used as corner selection
*/
void
Remove_Zone_Corner
(
wxDC
*
DC
,
ZONE_CONTAINER
*
zone_container
);
// Target handling
MIREPCB
*
Create_Mire
(
wxDC
*
DC
);
void
Delete_Mire
(
MIREPCB
*
MirePcb
,
wxDC
*
DC
);
...
...
internat/fr/kicad.mo
View file @
ffd3a713
No preview for this file type
internat/fr/kicad.po
View file @
ffd3a713
...
...
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: kicad\n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 200
7-12-30 19:07
+0100\n"
"PO-Revision-Date: 200
8-01-01 17:55
+0100\n"
"Last-Translator: \n"
"Language-Team: kicad team <jean-pierre.charras@ujf-grenoble.fr>\n"
"MIME-Version: 1.0\n"
...
...
@@ -560,8 +560,8 @@ msgstr "OK"
#: pcbnew/muonde.cpp:352
#: pcbnew/modedit_onclick.cpp:203
#: pcbnew/modedit_onclick.cpp:235
#: pcbnew/onrightclick.cpp:14
6
#: pcbnew/onrightclick.cpp:1
60
#: pcbnew/onrightclick.cpp:14
5
#: pcbnew/onrightclick.cpp:1
59
#: pcbnew/block.cpp:157
#: pcbnew/globaleditpad.cpp:108
#: pcbnew/cotation.cpp:109
...
...
@@ -834,7 +834,7 @@ msgstr "Sauver pr
#: pcbnew/dialog_setup_libs.cpp:97
#: eeschema/dialog_eeschema_config.cpp:105
#: cvpcb/dialog_cvpcb_config.cpp:7
6
#: cvpcb/dialog_cvpcb_config.cpp:7
7
#: gerbview/reglage.cpp:90
msgid "from "
msgstr "De "
...
...
@@ -1257,7 +1257,7 @@ msgstr "Echelle"
#: pcbnew/dialog_display_options.cpp:221
#: pcbnew/dialog_display_options.cpp:229
#: pcbnew/dialog_display_options.cpp:266
#: pcbnew/class_board_item.cpp:9
9
#: pcbnew/class_board_item.cpp:9
8
#: pcbnew/dialog_zones_by_polygon.cpp:167
#: gerbview/options.cpp:321
msgid "Line"
...
...
@@ -1331,7 +1331,7 @@ msgid "Ref."
msgstr "Ref."
#: pcbnew/class_text_mod.cpp:345
#: pcbnew/class_board_item.cpp:
80
#: pcbnew/class_board_item.cpp:
79
#: pcbnew/class_edge_mod.cpp:286
#: eeschema/component_class.cpp:55
#: eeschema/edit_component_in_schematic.cpp:784
...
...
@@ -1341,7 +1341,7 @@ msgstr "Valeur"
#: pcbnew/class_text_mod.cpp:345
#: pcbnew/class_text_mod.cpp:353
#: pcbnew/class_board_item.cpp:8
5
#: pcbnew/class_board_item.cpp:8
4
msgid "Text"
msgstr "Texte"
...
...
@@ -1629,11 +1629,11 @@ msgstr "Hauteur Texte Module"
msgid "Text Module Size H"
msgstr "Largeur Texte Module"
#: pcbnew/zone_filling_algorithm.cpp:15
8
#: pcbnew/zone_filling_algorithm.cpp:15
6
msgid "No pads or starting point found to fill this zone outline"
msgstr "Pas de pads ou de points de dpart pour remplir ce contour de zone"
#: pcbnew/zone_filling_algorithm.cpp:19
6
#: pcbnew/zone_filling_algorithm.cpp:19
4
msgid "Ok"
msgstr "Ok"
...
...
@@ -1706,7 +1706,7 @@ msgid "Print Module"
msgstr "Imprimer Module"
#: pcbnew/tool_modedit.cpp:115
#: pcbnew/tool_pcb.cpp:2
70
#: pcbnew/tool_pcb.cpp:2
69
#: eeschema/tool_sch.cpp:108
#: eeschema/tool_lib.cpp:170
#: gerbview/tool_gerber.cpp:271
...
...
@@ -1714,7 +1714,7 @@ msgid "zoom +"
msgstr "zoom +"
#: pcbnew/tool_modedit.cpp:119
#: pcbnew/tool_pcb.cpp:27
4
#: pcbnew/tool_pcb.cpp:27
3
#: eeschema/tool_sch.cpp:112
#: eeschema/tool_lib.cpp:174
#: gerbview/tool_gerber.cpp:278
...
...
@@ -1722,7 +1722,7 @@ msgid "zoom -"
msgstr "zoom -"
#: pcbnew/tool_modedit.cpp:123
#: pcbnew/tool_pcb.cpp:27
8
#: pcbnew/tool_pcb.cpp:27
7
#: eeschema/tool_sch.cpp:116
#: eeschema/tool_lib.cpp:178
#: gerbview/tool_gerber.cpp:285
...
...
@@ -1730,7 +1730,7 @@ msgid "redraw"
msgstr "Redessin"
#: pcbnew/tool_modedit.cpp:128
#: pcbnew/tool_pcb.cpp:28
3
#: pcbnew/tool_pcb.cpp:28
2
#: eeschema/tool_sch.cpp:121
#: eeschema/tool_lib.cpp:184
#: gerbview/tool_gerber.cpp:296
...
...
@@ -1754,18 +1754,18 @@ msgid "Add Pads"
msgstr "Addition de \"pins\""
#: pcbnew/tool_modedit.cpp:168
#: pcbnew/tool_pcb.cpp:43
4
#: pcbnew/tool_pcb.cpp:43
3
#: eeschema/tool_sch.cpp:226
msgid "Add graphic line or polygon"
msgstr "Addition de lignes ou polygones graphiques"
#: pcbnew/tool_modedit.cpp:172
#: pcbnew/tool_pcb.cpp:43
8
#: pcbnew/tool_pcb.cpp:43
7
msgid "Add graphic circle"
msgstr "Addition de graphiques (Cercle)"
#: pcbnew/tool_modedit.cpp:176
#: pcbnew/tool_pcb.cpp:44
2
#: pcbnew/tool_pcb.cpp:44
1
msgid "Add graphic arc"
msgstr "Addition de graphiques (Arc de Cercle)"
...
...
@@ -1783,7 +1783,7 @@ msgid "Place anchor"
msgstr "Place Ancre"
#: pcbnew/tool_modedit.cpp:190
#: pcbnew/tool_pcb.cpp:4
60
#: pcbnew/tool_pcb.cpp:4
59
#: eeschema/tool_sch.cpp:235
#: eeschema/tool_lib.cpp:93
#: gerbview/tool_gerber.cpp:393
...
...
@@ -1791,41 +1791,41 @@ msgid "Delete items"
msgstr "Suppression d'lments"
#: pcbnew/tool_modedit.cpp:212
#: pcbnew/tool_pcb.cpp:33
4
#: pcbnew/tool_pcb.cpp:33
3
#: eeschema/tool_sch.cpp:257
#: gerbview/tool_gerber.cpp:417
msgid "Display Grid OFF"
msgstr "Suppression de l'affichage de la grille"
#: pcbnew/tool_modedit.cpp:216
#: pcbnew/tool_pcb.cpp:33
7
#: pcbnew/tool_pcb.cpp:33
6
#: gerbview/tool_gerber.cpp:423
msgid "Display Polar Coord ON"
msgstr "Activer affichage coord Polaires"
#: pcbnew/tool_modedit.cpp:220
#: pcbnew/tool_pcb.cpp:33
9
#: pcbnew/tool_pcb.cpp:33
8
#: eeschema/tool_sch.cpp:261
#: gerbview/tool_gerber.cpp:427
msgid "Units = Inch"
msgstr "Units = pouce"
#: pcbnew/tool_modedit.cpp:224
#: pcbnew/tool_pcb.cpp:34
1
#: pcbnew/tool_pcb.cpp:34
0
#: eeschema/tool_sch.cpp:265
#: gerbview/tool_gerber.cpp:431
msgid "Units = mm"
msgstr "Units = mm"
#: pcbnew/tool_modedit.cpp:230
#: pcbnew/tool_pcb.cpp:34
4
#: pcbnew/tool_pcb.cpp:34
3
#: eeschema/tool_sch.cpp:269
#: gerbview/tool_gerber.cpp:437
msgid "Change Cursor Shape"
msgstr "Slection de la forme du curseur"
#: pcbnew/tool_modedit.cpp:238
#: pcbnew/tool_pcb.cpp:36
6
#: pcbnew/tool_pcb.cpp:36
5
msgid "Show Pads Sketch"
msgstr "Afficher pastilles en contour"
...
...
@@ -1838,7 +1838,7 @@ msgid "Show Edges Sketch"
msgstr "Afficher Modules en contour"
#: pcbnew/tool_modedit.cpp:285
#: pcbnew/tool_pcb.cpp:56
7
#: pcbnew/tool_pcb.cpp:56
6
#: eeschema/plotps.cpp:169
#: share/zoom.cpp:367
msgid "Auto"
...
...
@@ -1860,7 +1860,7 @@ msgid "Grid %.3f"
msgstr "Grille %.3f"
#: pcbnew/tool_modedit.cpp:314
#: pcbnew/tool_pcb.cpp:60
1
#: pcbnew/tool_pcb.cpp:60
0
msgid "User Grid"
msgstr "Grille perso"
...
...
@@ -1888,7 +1888,7 @@ msgid "Error: Unexpected end of file !"
msgstr "Erreur: Fin de fichier inattendue !"
#: pcbnew/dialog_netlist.cpp:135
#: pcbnew/class_board_item.cpp:7
6
#: pcbnew/class_board_item.cpp:7
5
#: eeschema/onrightclick.cpp:320
#: eeschema/dialog_create_component.cpp:164
#: eeschema/edit_component_in_schematic.cpp:745
...
...
@@ -1910,9 +1910,9 @@ msgid "Keep"
msgstr "Garder"
#: pcbnew/dialog_netlist.cpp:143
#: pcbnew/onrightclick.cpp:
623
#: pcbnew/onrightclick.cpp:7
33
#: pcbnew/onrightclick.cpp:8
30
#: pcbnew/onrightclick.cpp:
589
#: pcbnew/onrightclick.cpp:7
49
#: pcbnew/onrightclick.cpp:8
46
#: eeschema/edit_component_in_lib.cpp:239
#: eeschema/edit_component_in_lib.cpp:320
msgid "Delete"
...
...
@@ -2086,14 +2086,14 @@ msgid "Add Drawing"
msgstr "Ajout d'lments graphiques"
#: pcbnew/modedit.cpp:424
#: pcbnew/edit.cpp:5
2
6
#: pcbnew/edit.cpp:5
3
6
#: eeschema/schedit.cpp:455
#: eeschema/libframe.cpp:579
msgid "Delete item"
msgstr "Suppression d'lments"
#: pcbnew/modedit_onclick.cpp:207
#: pcbnew/onrightclick.cpp:15
1
#: pcbnew/onrightclick.cpp:15
0
#: eeschema/onrightclick.cpp:126
#: eeschema/libedit_onrightclick.cpp:53
#: gerbview/onrightclick.cpp:42
...
...
@@ -2101,7 +2101,7 @@ msgid "End Tool"
msgstr "Fin Outil"
#: pcbnew/modedit_onclick.cpp:217
#: pcbnew/onrightclick.cpp:
504
#: pcbnew/onrightclick.cpp:
469
#: eeschema/onrightclick.cpp:587
#: eeschema/libedit_onrightclick.cpp:237
#: gerbview/onrightclick.cpp:51
...
...
@@ -2109,13 +2109,13 @@ msgid "Cancel Block"
msgstr "Annuler Bloc"
#: pcbnew/modedit_onclick.cpp:219
#: pcbnew/onrightclick.cpp:
506
#: pcbnew/onrightclick.cpp:
471
#: gerbview/onrightclick.cpp:52
msgid "Zoom Block (Midd butt drag)"
msgstr "Zoom Bloc (drag+bouton milieu)"
#: pcbnew/modedit_onclick.cpp:222
#: pcbnew/onrightclick.cpp:
509
#: pcbnew/onrightclick.cpp:
474
#: eeschema/onrightclick.cpp:595
#: eeschema/libedit_onrightclick.cpp:245
#: gerbview/onrightclick.cpp:54
...
...
@@ -2123,7 +2123,7 @@ msgid "Place Block"
msgstr "Place Bloc"
#: pcbnew/modedit_onclick.cpp:224
#: pcbnew/onrightclick.cpp:
511
#: pcbnew/onrightclick.cpp:
476
#: eeschema/onrightclick.cpp:604
#: eeschema/libedit_onrightclick.cpp:251
msgid "Copy Block (shift + drag mouse)"
...
...
@@ -2134,18 +2134,18 @@ msgid "Mirror Block (alt + drag mouse)"
msgstr "Bloc Miroir (alt + drag mouse)"
#: pcbnew/modedit_onclick.cpp:228
#: pcbnew/onrightclick.cpp:
515
#: pcbnew/onrightclick.cpp:
480
msgid "Rotate Block (ctrl + drag mouse)"
msgstr "Rotation Bloc (ctrl + drag mouse)"
#: pcbnew/modedit_onclick.cpp:230
#: pcbnew/onrightclick.cpp:
517
#: pcbnew/onrightclick.cpp:
482
msgid "Delete Block (shift+ctrl + drag mouse)"
msgstr "Effacement Bloc (shift+ctrl + drag mouse)"
#: pcbnew/modedit_onclick.cpp:252
#: pcbnew/onrightclick.cpp:7
27
#: pcbnew/onrightclick.cpp:8
24
#: pcbnew/onrightclick.cpp:7
43
#: pcbnew/onrightclick.cpp:8
40
msgid "Rotate"
msgstr "Rotation"
...
...
@@ -2170,17 +2170,17 @@ msgid "Move Pad"
msgstr "Dplace Pad"
#: pcbnew/modedit_onclick.cpp:274
#: pcbnew/onrightclick.cpp:7
66
#: pcbnew/onrightclick.cpp:7
82
msgid "Edit Pad"
msgstr "Edit Pad"
#: pcbnew/modedit_onclick.cpp:276
#: pcbnew/onrightclick.cpp:7
70
#: pcbnew/onrightclick.cpp:7
86
msgid "New Pad Settings"
msgstr "Nouvelles Caract. Pads"
#: pcbnew/modedit_onclick.cpp:278
#: pcbnew/onrightclick.cpp:7
72
#: pcbnew/onrightclick.cpp:7
88
msgid "Export Pad Settings"
msgstr "Exporte Caract. Pads"
...
...
@@ -2189,7 +2189,7 @@ msgid "delete Pad"
msgstr "Supprimer Pad"
#: pcbnew/modedit_onclick.cpp:285
#: pcbnew/onrightclick.cpp:7
77
#: pcbnew/onrightclick.cpp:7
93
msgid "Global Pad Settings"
msgstr "Edition Globale des pads"
...
...
@@ -2222,9 +2222,9 @@ msgid "Place edge"
msgstr "Place contour"
#: pcbnew/modedit_onclick.cpp:317
#: pcbnew/onrightclick.cpp:
695
#: pcbnew/onrightclick.cpp:7
29
#: pcbnew/onrightclick.cpp:8
26
#: pcbnew/onrightclick.cpp:
711
#: pcbnew/onrightclick.cpp:7
45
#: pcbnew/onrightclick.cpp:8
42
#: eeschema/onrightclick.cpp:313
msgid "Edit"
msgstr "Editer"
...
...
@@ -2263,7 +2263,7 @@ msgid "RefP"
msgstr "RefP"
#: pcbnew/class_pad.cpp:979
#: pcbnew/class_board_item.cpp:3
6
#: pcbnew/class_board_item.cpp:3
5
msgid "Net"
msgstr "Net"
...
...
@@ -2284,7 +2284,7 @@ msgid "Shape"
msgstr "Forme"
#: pcbnew/classpcb.cpp:199
#: pcbnew/class_board_item.cpp:10
8
#: pcbnew/class_board_item.cpp:10
7
#: pcbnew/class_track.cpp:776
#: pcbnew/dialog_pad_edit.cpp:176
#: pcbnew/dialog_pad_edit.cpp:196
...
...
@@ -2565,7 +2565,7 @@ msgid "Footprint name:"
msgstr "Nom Module: "
#: pcbnew/modules.cpp:281
#: pcbnew/onrightclick.cpp:7
01
#: pcbnew/onrightclick.cpp:7
17
msgid "Delete Module"
msgstr "Supprimer Module"
...
...
@@ -2874,385 +2874,394 @@ msgstr "&Divers"
msgid "P&ostprocess"
msgstr "P&ostprocesseurs"
#: pcbnew/onrightclick.cpp:8
3
#: pcbnew/onrightclick.cpp:8
2
#, c-format
msgid "Track %.1f"
msgstr "Piste %.1f"
#: pcbnew/onrightclick.cpp:8
5
#: pcbnew/onrightclick.cpp:8
4
#, c-format
msgid "Track %.3f"
msgstr "Piste %.3f"
#: pcbnew/onrightclick.cpp:10
1
#: pcbnew/onrightclick.cpp:10
0
#, c-format
msgid "Via %.1f"
msgstr "Via %.1f"
#: pcbnew/onrightclick.cpp:10
3
#: pcbnew/onrightclick.cpp:10
2
#, c-format
msgid "Via %.3f"
msgstr "Via %.3f"
#: pcbnew/onrightclick.cpp:21
9
#: pcbnew/onrightclick.cpp:21
8
msgid "Lock Module"
msgstr "Verrouiller Modules"
#: pcbnew/onrightclick.cpp:22
7
#: pcbnew/onrightclick.cpp:22
6
msgid "Unlock Module"
msgstr "Dverrouiller Modules"
#: pcbnew/onrightclick.cpp:23
5
#: pcbnew/onrightclick.cpp:23
4
msgid "Auto place Module"
msgstr "Auto place Module"
#: pcbnew/onrightclick.cpp:24
1
#: pcbnew/onrightclick.cpp:24
0
msgid "Autoroute"
msgstr "Autoroute"
#: pcbnew/onrightclick.cpp:25
7
#: pcbnew/onrightclick.cpp:25
6
msgid "Move Drawing"
msgstr "Dplace Trac"
#: pcbnew/onrightclick.cpp:26
2
#: pcbnew/onrightclick.cpp:26
1
msgid "End Drawing"
msgstr "Fin trac"
#: pcbnew/onrightclick.cpp:26
4
#: pcbnew/onrightclick.cpp:26
3
msgid "Edit Drawing"
msgstr "Edit Trac"
#: pcbnew/onrightclick.cpp:26
5
#: pcbnew/onrightclick.cpp:26
4
msgid "Delete Drawing"
msgstr "Supprimer Trac"
#: pcbnew/onrightclick.cpp:272
#: pcbnew/onrightclick.cpp:269
msgid "Delete Zone"
msgstr "Supprimer Zone"
#: pcbnew/onrightclick.cpp:276
msgid "End edge zone"
msgstr "Fin contour Zone"
#: pcbnew/onrightclick.cpp:27
5
#: pcbnew/onrightclick.cpp:27
9
msgid "Delete edge zone"
msgstr "Supprimer Contour Zone"
#: pcbnew/onrightclick.cpp:284
msgid "Place Corner"
msgstr "Place Sommet"
#: pcbnew/onrightclick.cpp:294
msgid "Move Corner"
msgstr "Dplace Sommet"
#: pcbnew/onrightclick.cpp:296
msgid "Delete Corner"
msgstr "Supprimer Sommet"
#: pcbnew/onrightclick.cpp:302
msgid "Create Corner"
msgstr "Crer Sommet"
#: pcbnew/onrightclick.cpp:306
msgid "Fill zone"
msgstr "Remplir zone"
#: pcbnew/onrightclick.cpp:309
msgid "Edit Zone Params"
msgstr "Editer Paramtres de la Zone"
#: pcbnew/onrightclick.cpp:311
msgid "Delete Zone Outline"
msgstr "Supprimer Contour de Zone"
#: pcbnew/onrightclick.cpp:328
msgid "Delete Zone"
msgstr "Supprimer Zone"
#: pcbnew/onrightclick.cpp:333
#: pcbnew/onrightclick.cpp:298
msgid "Delete Marker"
msgstr "Effacer Marqueur"
#: pcbnew/onrightclick.cpp:3
40
#: pcbnew/onrightclick.cpp:3
05
msgid "Edit Dimension"
msgstr "Edit Cote"
#: pcbnew/onrightclick.cpp:3
43
#: pcbnew/onrightclick.cpp:3
08
msgid "Delete Dimension"
msgstr "Suppression Cote"
#: pcbnew/onrightclick.cpp:3
50
#: pcbnew/onrightclick.cpp:3
15
msgid "Move Target"
msgstr "Dplacer Mire"
#: pcbnew/onrightclick.cpp:3
53
#: pcbnew/onrightclick.cpp:3
18
msgid "Edit Target"
msgstr "Editer Mire"
#: pcbnew/onrightclick.cpp:3
55
#: pcbnew/onrightclick.cpp:3
20
msgid "Delete Target"
msgstr "Supprimer Mire"
#: pcbnew/onrightclick.cpp:3
82
#: pcbnew/onrightclick.cpp:3
47
msgid "Get and Move Footprint"
msgstr "Sel et Dpl.t module"
#: pcbnew/onrightclick.cpp:3
96
#: pcbnew/onrightclick.cpp:3
61
msgid "Fill or Refill All Zones"
msgstr "Remplir ou Re-remplir Toutes les Zones"
#: pcbnew/onrightclick.cpp:
401
#: pcbnew/onrightclick.cpp:
412
#: pcbnew/onrightclick.cpp:
425
#: pcbnew/onrightclick.cpp:4
86
#: pcbnew/onrightclick.cpp:
366
#: pcbnew/onrightclick.cpp:
377
#: pcbnew/onrightclick.cpp:
390
#: pcbnew/onrightclick.cpp:4
51
msgid "Select Working Layer"
msgstr "Slection de la couche de travail"
#: pcbnew/onrightclick.cpp:
410
#: pcbnew/onrightclick.cpp:4
83
#: pcbnew/onrightclick.cpp:
375
#: pcbnew/onrightclick.cpp:4
48
msgid "Select Track Width"
msgstr "Slection Epais. Piste"
#: pcbnew/onrightclick.cpp:
414
#: pcbnew/onrightclick.cpp:
379
msgid "Select layer pair for vias"
msgstr "Selection couple de couches pour Vias"
#: pcbnew/onrightclick.cpp:
431
#: pcbnew/onrightclick.cpp:
396
msgid "Footprint documentation"
msgstr "Documentation des modules"
#: pcbnew/onrightclick.cpp:4
41
#: pcbnew/onrightclick.cpp:4
06
msgid "Glob Move and Place"
msgstr "Move et Place Globaux"
#: pcbnew/onrightclick.cpp:4
43
#: pcbnew/onrightclick.cpp:4
08
msgid "Unlock All Modules"
msgstr "Dverrouiller tous les Modules"
#: pcbnew/onrightclick.cpp:4
45
#: pcbnew/onrightclick.cpp:4
10
msgid "Lock All Modules"
msgstr "Verrouiller tous les Modules"
#: pcbnew/onrightclick.cpp:4
48
#: pcbnew/onrightclick.cpp:4
13
msgid "Move All Modules"
msgstr "Dplace tous les Modules"
#: pcbnew/onrightclick.cpp:4
49
#: pcbnew/onrightclick.cpp:4
14
msgid "Move New Modules"
msgstr "Dplace nouveaux Modules"
#: pcbnew/onrightclick.cpp:4
51
#: pcbnew/onrightclick.cpp:4
16
msgid "Autoplace All Modules"
msgstr "Autoplace Tous Modules"
#: pcbnew/onrightclick.cpp:4
52
#: pcbnew/onrightclick.cpp:4
17
msgid "Autoplace New Modules"
msgstr "AutoPlace nouveaux Modules"
#: pcbnew/onrightclick.cpp:4
53
#: pcbnew/onrightclick.cpp:4
18
msgid "Autoplace Next Module"
msgstr "Autoplace Module suivant"
#: pcbnew/onrightclick.cpp:4
56
#: pcbnew/onrightclick.cpp:4
21
msgid "Orient All Modules"
msgstr "Oriente Tous Modules"
#: pcbnew/onrightclick.cpp:4
63
#: pcbnew/onrightclick.cpp:4
28
msgid "Global Autoroute"
msgstr "Autoroutage global"
#: pcbnew/onrightclick.cpp:4
65
#: pcbnew/onrightclick.cpp:4
30
msgid "Select layer pair"
msgstr "Selection couple de couches"
#: pcbnew/onrightclick.cpp:4
67
#: pcbnew/onrightclick.cpp:4
32
msgid "Autoroute All Modules"
msgstr "Autoroute Tous Modules"
#: pcbnew/onrightclick.cpp:4
69
#: pcbnew/onrightclick.cpp:4
34
msgid "Reset Unrouted"
msgstr "Rinit Non routs"
#: pcbnew/onrightclick.cpp:4
74
#: pcbnew/onrightclick.cpp:4
39
msgid "Global AutoRouter"
msgstr "Autorouteur Global"
#: pcbnew/onrightclick.cpp:4
76
#: pcbnew/onrightclick.cpp:4
41
msgid "Read Global AutoRouter Data"
msgstr "Lire Donnes de L'autorouteur global"
#: pcbnew/onrightclick.cpp:
513
#: pcbnew/onrightclick.cpp:
478
msgid "Flip Block (alt + drag mouse)"
msgstr "Inversion Bloc (alt + drag mouse)"
#: pcbnew/onrightclick.cpp:5
36
#: pcbnew/onrightclick.cpp:5
01
msgid "Drag Via"
msgstr "Drag Via"
#: pcbnew/onrightclick.cpp:5
40
#: pcbnew/onrightclick.cpp:
604
#: pcbnew/onrightclick.cpp:5
05
#: pcbnew/onrightclick.cpp:
569
msgid "Edit Via"
msgstr "Edit Via"
#: pcbnew/onrightclick.cpp:5
42
#: pcbnew/onrightclick.cpp:5
07
msgid "Set via hole to Default"
msgstr "Ajuste perage via dfaut"
#: pcbnew/onrightclick.cpp:5
44
#: pcbnew/onrightclick.cpp:5
09
msgid "Set via hole to alt value"
msgstr "Ajuste perage via valeur alternative"
#: pcbnew/onrightclick.cpp:5
46
#: pcbnew/onrightclick.cpp:5
11
msgid "Set the via hole alt value"
msgstr "Ajuste la valeur alt. perage via"
#: pcbnew/onrightclick.cpp:5
48
#: pcbnew/onrightclick.cpp:5
13
msgid "Export Via hole to alt value"
msgstr "Exporte perage via valeur alt."
#: pcbnew/onrightclick.cpp:5
50
#: pcbnew/onrightclick.cpp:5
15
msgid "Export via hole to others id vias"
msgstr "Exporte perage via aux autres semblables."
#: pcbnew/onrightclick.cpp:5
52
#: pcbnew/onrightclick.cpp:5
17
msgid "Set ALL via holes to default"
msgstr "Ajuste perage TOUTES vias au dfaut"
#: pcbnew/onrightclick.cpp:5
65
#: pcbnew/onrightclick.cpp:5
30
msgid "Move Node"
msgstr "Dplace Noeud"
#: pcbnew/onrightclick.cpp:5
70
#: pcbnew/onrightclick.cpp:5
35
msgid "Drag Segments, keep slope"
msgstr "Drag Segments, garder direction"
#: pcbnew/onrightclick.cpp:5
72
#: pcbnew/onrightclick.cpp:5
37
msgid "Drag Segment"
msgstr "Drag Segment"
#: pcbnew/onrightclick.cpp:5
75
#: pcbnew/onrightclick.cpp:5
40
msgid "Move Segment"
msgstr "Dplace Segment"
#: pcbnew/onrightclick.cpp:5
78
#: pcbnew/onrightclick.cpp:5
43
msgid "Break Track"
msgstr "Briser piste"
#: pcbnew/onrightclick.cpp:5
85
#: pcbnew/onrightclick.cpp:5
50
msgid "Place Node"
msgstr "Place noeud"
#: pcbnew/onrightclick.cpp:5
92
#: pcbnew/onrightclick.cpp:5
57
msgid "End Track"
msgstr "Terminer Piste"
#: pcbnew/onrightclick.cpp:5
95
#: pcbnew/onrightclick.cpp:5
60
msgid "Place Via"
msgstr "Place Via"
#: pcbnew/onrightclick.cpp:
602
#: pcbnew/onrightclick.cpp:
567
msgid "Change Width"
msgstr "Change Largeur"
#: pcbnew/onrightclick.cpp:
604
#: pcbnew/onrightclick.cpp:
570
msgid "Edit Segment"
msgstr "Edit Segment"
#: pcbnew/onrightclick.cpp:
609
#: pcbnew/onrightclick.cpp:
575
msgid "Edit Track"
msgstr "Editer Piste"
#: pcbnew/onrightclick.cpp:
611
#: pcbnew/onrightclick.cpp:
577
msgid "Edit Net"
msgstr "Edit Net"
#: pcbnew/onrightclick.cpp:
613
#: pcbnew/onrightclick.cpp:
579
msgid "Edit ALL Tracks and Vias"
msgstr "Editer TOUTES Pistes et Vias"
#: pcbnew/onrightclick.cpp:
615
#: pcbnew/onrightclick.cpp:
581
msgid "Edit ALL Vias (no track)"
msgstr "Editer TOUTES Vias (pas les pistes)"
#: pcbnew/onrightclick.cpp:
617
#: pcbnew/onrightclick.cpp:
583
msgid "Edit ALL Tracks (no via)"
msgstr "Editer TOUTES Pistes (pas les vias)"
#: pcbnew/onrightclick.cpp:
625
#: pcbnew/onrightclick.cpp:
591
msgid "Delete Via"
msgstr "Suppression Via"
#: pcbnew/onrightclick.cpp:
625
#: pcbnew/onrightclick.cpp:
591
msgid "Delete Segment"
msgstr "SupprimerSegment"
#: pcbnew/onrightclick.cpp:
632
#: pcbnew/onrightclick.cpp:
598
msgid "Delete Track"
msgstr "Effacer Piste"
#: pcbnew/onrightclick.cpp:6
36
#: pcbnew/onrightclick.cpp:6
02
msgid "Delete Net"
msgstr "Supprimer Net"
#: pcbnew/onrightclick.cpp:6
41
#: pcbnew/onrightclick.cpp:6
07
msgid "Set Flags"
msgstr "Ajust. Flags"
#: pcbnew/onrightclick.cpp:6
42
#: pcbnew/onrightclick.cpp:6
08
msgid "Locked: Yes"
msgstr "Verrou: Oui"
#: pcbnew/onrightclick.cpp:6
43
#: pcbnew/onrightclick.cpp:6
09
msgid "Locked: No"
msgstr "Verrou: Non"
#: pcbnew/onrightclick.cpp:6
53
#: pcbnew/onrightclick.cpp:6
19
msgid "Track Locked: Yes"
msgstr "Piste verrouille: Oui"
#: pcbnew/onrightclick.cpp:6
54
#: pcbnew/onrightclick.cpp:6
20
msgid "Track Locked: No"
msgstr "Piste verrouille: Non"
#: pcbnew/onrightclick.cpp:6
56
#: pcbnew/onrightclick.cpp:6
22
msgid "Net Locked: Yes"
msgstr "Net verrouill: Oui"
#: pcbnew/onrightclick.cpp:6
57
#: pcbnew/onrightclick.cpp:6
23
msgid "Net Locked: No"
msgstr "Net verrouill: Non"
#: pcbnew/onrightclick.cpp:679
#: pcbnew/onrightclick.cpp:724
#: pcbnew/onrightclick.cpp:762
#: pcbnew/onrightclick.cpp:821
#: pcbnew/onrightclick.cpp:638
msgid "Place Corner"
msgstr "Place Sommet"
#: pcbnew/onrightclick.cpp:648
msgid "Move Corner"
msgstr "Dplace Sommet"
#: pcbnew/onrightclick.cpp:650
msgid "Delete Corner"
msgstr "Supprimer Sommet"
#: pcbnew/onrightclick.cpp:656
msgid "Create Corner"
msgstr "Crer Sommet"
#: pcbnew/onrightclick.cpp:661
msgid "Add Similar Zone"
msgstr "Addition d'une Zone Semblable"
#: pcbnew/onrightclick.cpp:664
#, fuzzy
msgid "Add Cutout Area"
msgstr "Addition d'une Zone Interdite"
#: pcbnew/onrightclick.cpp:668
msgid "Fill Zone"
msgstr "Remplir Zone"
#: pcbnew/onrightclick.cpp:671
msgid "Edit Zone Params"
msgstr "Editer Paramtres de la Zone"
#: pcbnew/onrightclick.cpp:673
msgid "Delete Zone Outline"
msgstr "Supprimer Contour de Zone"
#: pcbnew/onrightclick.cpp:695
#: pcbnew/onrightclick.cpp:740
#: pcbnew/onrightclick.cpp:778
#: pcbnew/onrightclick.cpp:837
msgid "Move"
msgstr "Move"
#: pcbnew/onrightclick.cpp:6
82
#: pcbnew/onrightclick.cpp:7
64
#: pcbnew/onrightclick.cpp:6
98
#: pcbnew/onrightclick.cpp:7
80
msgid "Drag"
msgstr "Drag"
#: pcbnew/onrightclick.cpp:
686
#: pcbnew/onrightclick.cpp:
702
msgid "Rotate +"
msgstr "Rotation +"
#: pcbnew/onrightclick.cpp:
690
#: pcbnew/onrightclick.cpp:
706
#: eeschema/onrightclick.cpp:301
msgid "Rotate -"
msgstr "Rotation -"
#: pcbnew/onrightclick.cpp:
691
#: pcbnew/onrightclick.cpp:
707
msgid "Flip"
msgstr "Change ct"
#: pcbnew/onrightclick.cpp:7
81
#: pcbnew/onrightclick.cpp:7
97
msgid "delete"
msgstr "Effacer"
#: pcbnew/onrightclick.cpp:
788
#: pcbnew/onrightclick.cpp:
804
msgid "Autoroute Pad"
msgstr "Autoroute Pad"
#: pcbnew/onrightclick.cpp:
789
#: pcbnew/onrightclick.cpp:
805
msgid "Autoroute Net"
msgstr "Autoroute Net"
...
...
@@ -3565,131 +3574,131 @@ msgstr "Le texte est la REFERENCE!"
msgid "Text is VALUE!"
msgstr "Le texte est la VALEUR!"
#: pcbnew/class_board_item.cpp:4
1
#: pcbnew/class_board_item.cpp:4
0
#: eeschema/dialog_build_BOM.cpp:300
#: eeschema/component_class.cpp:56
#: eeschema/edit_component_in_schematic.cpp:826
msgid "Footprint"
msgstr "Module"
#: pcbnew/class_board_item.cpp:4
7
#: pcbnew/class_board_item.cpp:4
6
msgid "Pad"
msgstr "Pad"
#: pcbnew/class_board_item.cpp:
50
#: pcbnew/class_board_item.cpp:
49
msgid "all copper layers"
msgstr "Toutes Couches Cuivre"
#: pcbnew/class_board_item.cpp:5
2
#: pcbnew/class_board_item.cpp:5
1
msgid "copper layer"
msgstr "Couche Cuivre"
#: pcbnew/class_board_item.cpp:5
4
#: pcbnew/class_board_item.cpp:5
3
msgid "cmp layer"
msgstr "Couche Cmp"
#: pcbnew/class_board_item.cpp:5
5
#: pcbnew/class_board_item.cpp:5
4
msgid "???"
msgstr "???"
#: pcbnew/class_board_item.cpp:5
6
#: pcbnew/class_board_item.cpp:5
5
msgid ") of "
msgstr ") de "
#: pcbnew/class_board_item.cpp:
60
#: pcbnew/class_board_item.cpp:
59
msgid "Pcb Graphic"
msgstr "Pcb Graphic"
#: pcbnew/class_board_item.cpp:
60
#: pcbnew/class_board_item.cpp:6
9
#: pcbnew/class_board_item.cpp:14
6
#: pcbnew/class_board_item.cpp:16
5
#: pcbnew/class_board_item.cpp:18
1
#: pcbnew/class_board_item.cpp:20
8
#: pcbnew/class_board_item.cpp:22
5
#: pcbnew/class_board_item.cpp:23
1
#: pcbnew/class_board_item.cpp:
59
#: pcbnew/class_board_item.cpp:6
8
#: pcbnew/class_board_item.cpp:14
5
#: pcbnew/class_board_item.cpp:16
4
#: pcbnew/class_board_item.cpp:18
0
#: pcbnew/class_board_item.cpp:20
7
#: pcbnew/class_board_item.cpp:22
4
#: pcbnew/class_board_item.cpp:23
0
msgid " on "
msgstr " sur "
#: pcbnew/class_board_item.cpp:6
4
#: pcbnew/class_board_item.cpp:6
3
msgid "Pcb Text"
msgstr "Texte Pcb"
#: pcbnew/class_board_item.cpp:
80
#: pcbnew/class_board_item.cpp:8
6
#: pcbnew/class_board_item.cpp:1
30
#: pcbnew/class_board_item.cpp:
79
#: pcbnew/class_board_item.cpp:8
5
#: pcbnew/class_board_item.cpp:1
29
msgid " of "
msgstr " de "
#: pcbnew/class_board_item.cpp:9
3
#: pcbnew/class_board_item.cpp:9
2
msgid "Graphic"
msgstr "Graphique"
#: pcbnew/class_board_item.cpp:10
2
#: pcbnew/class_board_item.cpp:10
1
#: pcbnew/dialog_pad_edit.cpp:198
msgid "Rect"
msgstr "Rect"
#: pcbnew/class_board_item.cpp:10
5
#: pcbnew/class_board_item.cpp:10
4
msgid "Arc"
msgstr "Arc"
#: pcbnew/class_board_item.cpp:1
40
#: pcbnew/class_board_item.cpp:1
39
#: pcbnew/pcbframe.cpp:447
#: pcbnew/class_track.cpp:739
msgid "Track"
msgstr "Piste"
#: pcbnew/class_board_item.cpp:14
7
#: pcbnew/class_board_item.cpp:14
6
#: pcbnew/dialog_zones_by_polygon.cpp:220
msgid "Net:"
msgstr "Net:"
#: pcbnew/class_board_item.cpp:14
8
#: pcbnew/class_board_item.cpp:14
7
msgid "Length:"
msgstr "Long.:"
#: pcbnew/class_board_item.cpp:15
3
#: pcbnew/class_board_item.cpp:15
2
#: pcbnew/class_zone.cpp:385
msgid "Zone Outline"
msgstr "Contour de Zone"
#: pcbnew/class_board_item.cpp:16
9
#: pcbnew/class_board_item.cpp:16
8
#: pcbnew/class_track.cpp:743
msgid "Zone"
msgstr "Zone"
#: pcbnew/class_board_item.cpp:18
7
#: pcbnew/class_board_item.cpp:18
6
#: pcbnew/pcbframe.cpp:479
msgid "Via"
msgstr "Via"
#: pcbnew/class_board_item.cpp:19
1
#: pcbnew/class_board_item.cpp:19
0
msgid "Blind"
msgstr "Enterre"
#: pcbnew/class_board_item.cpp:19
3
#: pcbnew/class_board_item.cpp:19
2
msgid "Buried"
msgstr "Borgne"
#: pcbnew/class_board_item.cpp:21
5
#: pcbnew/class_board_item.cpp:21
4
#: pcbnew/class_marker.cpp:112
msgid "Marker"
msgstr "Marqueur"
#: pcbnew/class_board_item.cpp:2
20
#: pcbnew/class_board_item.cpp:2
19
msgid "Dimension"
msgstr "Dimension"
#: pcbnew/class_board_item.cpp:22
5
#: pcbnew/class_board_item.cpp:22
4
msgid "Target"
msgstr "Mire"
#: pcbnew/class_board_item.cpp:22
6
#: pcbnew/class_board_item.cpp:22
5
msgid "size"
msgstr "dimension"
#: pcbnew/class_board_item.cpp:23
1
#: pcbnew/class_board_item.cpp:23
0
msgid "Edge Zone"
msgstr "Contour Zone"
...
...
@@ -3780,7 +3789,7 @@ msgid "Do not Show Zones"
msgstr "Ne pas monter Zones"
#: pcbnew/pcbframe.cpp:416
#: pcbnew/tool_pcb.cpp:36
1
#: pcbnew/tool_pcb.cpp:36
0
#: pcbnew/set_color.h:423
msgid "Show Zones"
msgstr "Monter Zones"
...
...
@@ -3806,7 +3815,7 @@ msgid "Normal Contrast Mode Display"
msgstr "Mode d'affichage Contraste normal"
#: pcbnew/pcbframe.cpp:437
#: pcbnew/tool_pcb.cpp:37
4
#: pcbnew/tool_pcb.cpp:37
3
msgid "Hight Contrast Mode Display"
msgstr "Mode d'affichage Haut Contraste"
...
...
@@ -3865,7 +3874,7 @@ msgstr "Pads"
#: pcbnew/class_track.cpp:765
#: pcbnew/zones.cpp:873
#: pcbnew/zones_by_polygon.cpp:
612
#: pcbnew/zones_by_polygon.cpp:
705
#: pcbnew/class_zone.cpp:398
msgid "NetName"
msgstr "NetName"
...
...
@@ -4424,22 +4433,74 @@ msgid "Delete Current Zone Edges"
msgstr "Effacer contour zone courant"
#: pcbnew/zones.cpp:871
#: pcbnew/zones_by_polygon.cpp:
610
#: pcbnew/zones_by_polygon.cpp:
703
msgid "No Net"
msgstr "No Net"
#: pcbnew/dsn.cpp:45
5
#: pcbnew/dsn.cpp:45
6
msgid "Line length exceeded"
msgstr "Longueur de ligne dpasse"
#: pcbnew/dsn.cpp:530
msgid "String delimiter char must be a single char"
msgstr "Le caractre de dlimitation de ligne doit tre un seul caractre"
#: pcbnew/dsn.cpp:518
msgid "'quoted text delimiter'"
msgstr "'delimiteur de texte balis'"
#: pcbnew/dsn.cpp:524
msgid "'symbol'"
msgstr "'symbole'"
#: pcbnew/dsn.cpp:527
msgid "'number'"
msgstr "'nombre'"
#: pcbnew/dsn.cpp:590
#: pcbnew/dsn.cpp:536
msgid "\"quoted string\""
msgstr "\"chane entre quotes\""
#: pcbnew/dsn.cpp:539
msgid "'end of file'"
msgstr "fin de fichier'"
#: pcbnew/dsn.cpp:556
msgid "in file"
msgstr "dans le fichier"
#: pcbnew/dsn.cpp:557
msgid "on line"
msgstr "en ligne"
#: pcbnew/dsn.cpp:558
msgid "at offset"
msgstr "a l'offset"
#: pcbnew/dsn.cpp:597
msgid "String delimiter must be a single character of ', \", or $"
msgstr "Le caractre de dlimitation de ligne doit tre un seul caractre ', \", or $"
#: pcbnew/dsn.cpp:676
msgid "Un-terminated delimited string"
msgstr "Ligne dlimite non termine"
#: pcbnew/specctra.cpp:271
#: pcbnew/specctra.cpp:280
msgid "Expecting"
msgstr "Attendu"
#: pcbnew/specctra.cpp:300
#, c-format
msgid "Unable to open file \"%s\""
msgstr "Ne peut pas ouvrirle fichier \"%s\""
#: pcbnew/specctra.cpp:401
#: pcbnew/specctra.cpp:467
#: pcbnew/specctra.cpp:474
msgid "on or off"
msgstr "on ou off"
#: pcbnew/specctra.cpp:452
msgid "testpoint, guides, or image_conductor"
msgstr "testpoint, guides, ou image_conductor"
#: pcbnew/move_or_drag_track.cpp:714
msgid "Unable to drag this segment: too many segments connected"
msgstr "Impossible de drag ce segment: trop de segments connects"
...
...
@@ -4856,7 +4917,7 @@ msgstr "Module %s trouv
msgid "Delete module?"
msgstr "Effacer Module?"
#: pcbnew/tool_pcb.cpp:5
1
#: pcbnew/tool_pcb.cpp:5
0
msgid ""
"Show active layer selections\n"
"and select layer pair for route and place via"
...
...
@@ -4864,101 +4925,101 @@ msgstr ""
"Affiche selections couche active\n"
"et selection paire de couches pour routage and placement via"
#: pcbnew/tool_pcb.cpp:23
9
#: pcbnew/tool_pcb.cpp:23
8
msgid "New Board"
msgstr "Nouveau Circuit Imprim"
#: pcbnew/tool_pcb.cpp:24
1
#: pcbnew/tool_pcb.cpp:24
0
msgid "Open existing Board"
msgstr "Ouvrir C.I. existant"
#: pcbnew/tool_pcb.cpp:24
2
#: pcbnew/tool_pcb.cpp:24
1
msgid "Save Board"
msgstr "Sauver Circuit Imprim"
#: pcbnew/tool_pcb.cpp:24
6
#: pcbnew/tool_pcb.cpp:24
5
#: eeschema/tool_sch.cpp:65
#: gerbview/tool_gerber.cpp:232
msgid "page settings (size, texts)"
msgstr "Ajustage de la feuille de dessin (dimensions, textes)"
#: pcbnew/tool_pcb.cpp:2
50
#: pcbnew/tool_pcb.cpp:2
49
msgid "Open Module Editor"
msgstr "Ouvrir Editeur de modules"
#: pcbnew/tool_pcb.cpp:25
3
#: pcbnew/tool_pcb.cpp:25
2
#: eeschema/tool_sch.cpp:81
#: gerbview/tool_gerber.cpp:243
msgid "Cut selected item"
msgstr "Suppression des lments slectionns"
#: pcbnew/tool_pcb.cpp:25
7
#: pcbnew/tool_pcb.cpp:25
6
#: eeschema/tool_sch.cpp:84
#: gerbview/tool_gerber.cpp:248
msgid "Copy selected item"
msgstr "Copie des lments slectionns"
#: pcbnew/tool_pcb.cpp:25
9
#: pcbnew/tool_pcb.cpp:25
8
#: eeschema/tool_sch.cpp:87
#: gerbview/tool_gerber.cpp:254
msgid "Paste"
msgstr "Copie des lments sauvegards"
#: pcbnew/tool_pcb.cpp:26
2
#: pcbnew/tool_pcb.cpp:26
1
#: gerbview/tool_gerber.cpp:261
msgid "Undelete"
msgstr "Annulation du dernier effacement"
#: pcbnew/tool_pcb.cpp:26
5
#: pcbnew/tool_pcb.cpp:26
4
msgid "Print Board"
msgstr "Imprimer C.I."
#: pcbnew/tool_pcb.cpp:26
7
#: pcbnew/tool_pcb.cpp:26
6
msgid "Plot (HPGL, PostScript, or GERBER format)"
msgstr "Tracer en format HPGL, POSTSCRIPT ou GERBER"
#: pcbnew/tool_pcb.cpp:28
6
#: pcbnew/tool_pcb.cpp:28
5
#: eeschema/tool_sch.cpp:125
msgid "Find components and texts"
msgstr "Recherche de composants et textes"
#: pcbnew/tool_pcb.cpp:29
2
#: pcbnew/tool_pcb.cpp:29
1
msgid "Read Netlist"
msgstr "Lire Netliste"
#: pcbnew/tool_pcb.cpp:29
4
#: pcbnew/tool_pcb.cpp:29
3
msgid "Pcb Design Rules Check"
msgstr "Controle des rgles de conception"
#: pcbnew/tool_pcb.cpp:30
5
#: pcbnew/tool_pcb.cpp:30
4
msgid "Mode Module: Manual and Automatic Move or Place for modules"
msgstr "Mode Module: Dplacements ou Placement Manuel ou Automatique des modules"
#: pcbnew/tool_pcb.cpp:30
8
#: pcbnew/tool_pcb.cpp:30
7
msgid "Mode Track and Autorouting"
msgstr "Mode Pistes and Autoroutage"
#: pcbnew/tool_pcb.cpp:33
2
#: pcbnew/tool_pcb.cpp:33
1
msgid "Drc OFF"
msgstr "Drc DESACTIVEE"
#: pcbnew/tool_pcb.cpp:34
9
#: pcbnew/tool_pcb.cpp:34
8
msgid "Show General Ratsnest"
msgstr "Monter le chevelu gnral"
#: pcbnew/tool_pcb.cpp:35
2
#: pcbnew/tool_pcb.cpp:35
1
msgid "Show Module Ratsnest when moving"
msgstr "Monter le chevelu du module pendant dplacement"
#: pcbnew/tool_pcb.cpp:35
7
#: pcbnew/tool_pcb.cpp:35
6
msgid "Enable Auto Del Track"
msgstr "Autoriser l'effacement automatique des pistes"
#: pcbnew/tool_pcb.cpp:3
70
#: pcbnew/tool_pcb.cpp:3
69
msgid "Show Tracks Sketch"
msgstr "Afficher pistes en contour"
#: pcbnew/tool_pcb.cpp:38
3
#: pcbnew/tool_pcb.cpp:38
2
msgid ""
"Display auxiliary vertical toolbar (tools for micro wave applications)\n"
" This is a very experimental feature (under development)"
...
...
@@ -4966,68 +5027,68 @@ msgstr ""
"Affiche toolbar vertical auxiliaire (outils pour applications micro-ondes)\n"
"C'est un outil exprimental (en cours de dveloppement)"
#: pcbnew/tool_pcb.cpp:41
2
#: pcbnew/tool_pcb.cpp:41
1
msgid "Net highlight"
msgstr "Surbrillance des quipotentielles"
#: pcbnew/tool_pcb.cpp:41
6
#: pcbnew/tool_pcb.cpp:41
5
msgid "Display local ratsnest (pad or module)"
msgstr "Afficher le chevelu local (pastilles ou modules)"
#: pcbnew/tool_pcb.cpp:42
1
#: pcbnew/tool_pcb.cpp:42
0
msgid "Add modules"
msgstr "Addition de Modules"
#: pcbnew/tool_pcb.cpp:42
5
#: pcbnew/tool_pcb.cpp:42
4
msgid "Add tracks and vias"
msgstr "Ajouter pistes et vias"
#: pcbnew/tool_pcb.cpp:42
9
#: pcbnew/tool_pcb.cpp:42
8
msgid "Add zones"
msgstr "Addition de Zones"
#: pcbnew/tool_pcb.cpp:44
6
#: pcbnew/tool_pcb.cpp:44
5
msgid "Add text"
msgstr "Ajout de Texte"
#: pcbnew/tool_pcb.cpp:45
1
#: pcbnew/tool_pcb.cpp:45
0
msgid "Add dimension"
msgstr "Ajout des cotes"
#: pcbnew/tool_pcb.cpp:45
5
#: pcbnew/tool_pcb.cpp:45
4
#: gerbview/tool_gerber.cpp:378
msgid "Add layer alignment target"
msgstr "Ajouter Mire de superposition"
#: pcbnew/tool_pcb.cpp:46
5
#: pcbnew/tool_pcb.cpp:46
4
msgid "Offset adjust for drill and place files"
msgstr "Ajuste offset pour fichier de perage et placement"
#: pcbnew/tool_pcb.cpp:4
90
#: pcbnew/tool_pcb.cpp:4
89
msgid "Create line of specified length for microwave applications"
msgstr "Creation de lignes de longueur spcifie (pour applications micro-ondes)"
#: pcbnew/tool_pcb.cpp:49
6
#: pcbnew/tool_pcb.cpp:49
5
msgid "Create gap of specified length for microwave applications"
msgstr "Creation de gaps de longueur spcifie (pour applications micro-ondes)"
#: pcbnew/tool_pcb.cpp:50
4
#: pcbnew/tool_pcb.cpp:50
3
msgid "Create stub of specified length for microwave applications"
msgstr "Creation de stub de longueur spcifie (pour applications micro-ondes)"
#: pcbnew/tool_pcb.cpp:5
10
#: pcbnew/tool_pcb.cpp:5
09
msgid "Create stub (arc) of specified length for microwave applications"
msgstr "Creation de stub (arc) de longueur spcifie (pour applications micro-ondes)"
#: pcbnew/tool_pcb.cpp:51
7
#: pcbnew/tool_pcb.cpp:51
6
msgid "Create a polynomial shape for microwave applications"
msgstr "Creation de formes polynomiales (pour applications micro-ondes)"
#: pcbnew/tool_pcb.cpp:57
1
#: pcbnew/tool_pcb.cpp:57
0
msgid "Zoom "
msgstr "Zoom "
#: pcbnew/tool_pcb.cpp:58
5
#: pcbnew/tool_pcb.cpp:58
4
#: eeschema/eelayer.cpp:223
#: pcbnew/set_color.h:414
#: eeschema/eelayer.h:210
...
...
@@ -5035,7 +5096,7 @@ msgstr "Zoom "
msgid "Grid"
msgstr "Grille"
#: pcbnew/tool_pcb.cpp:67
6
#: pcbnew/tool_pcb.cpp:67
5
msgid "+/- to switch"
msgstr "+/- pour commuter"
...
...
@@ -9330,10 +9391,6 @@ msgstr "Contour Pcb"
msgid "--- "
msgstr "--- "
#: common/gestfich.cpp:621
msgid "No default editor found, you must choose it"
msgstr "Pas d'diteur par dfaut trouv, vous devez en choisir un"
#: common/basicframe.cpp:216
#, c-format
msgid "Help file %s not found"
...
...
@@ -9453,6 +9510,10 @@ msgstr "Inversion Bloc"
msgid "Block Mirror"
msgstr "Bloc Miroir"
#: common/gestfich.cpp:621
msgid "No default editor found, you must choose it"
msgstr "Pas d'diteur par dfaut trouv, vous devez en choisir un"
#: common/confirm.cpp:106
msgid "Infos:"
msgstr "Infos:"
...
...
@@ -10010,18 +10071,6 @@ msgstr "Options de nettoyage"
msgid "General Options"
msgstr "Options gnrales"
#: pcbnew/dsn.h:595
msgid "in file"
msgstr "dans le fichier"
#: pcbnew/dsn.h:596
msgid "on line"
msgstr "en ligne"
#: pcbnew/dsn.h:597
msgid "at offset"
msgstr "a l'offset"
#: pcbnew/set_color.h:38
msgid "Pcbnew Layer Colors:"
msgstr "Pcbnew: Couleur desCouches"
...
...
pcbnew/class_board.h
View file @
ffd3a713
...
...
@@ -224,6 +224,123 @@ public:
void
Show
(
int
nestLevel
,
std
::
ostream
&
os
);
#endif
/* Functions used in test, merge and cut outlines */
/**
* Function AddArea
* add empty copper area to net
* @return pointer to the new area
*/
ZONE_CONTAINER
*
AddArea
(
int
netcode
,
int
layer
,
int
x
,
int
y
,
int
hatch
);
/**
* remove copper area from net
* @param area = area to remove
* @return 0
*/
int
RemoveArea
(
ZONE_CONTAINER
*
area_to_remove
);
/**
* Function InsertArea
* add empty copper area to net, inserting after m_ZoneDescriptorList[iarea]
* @return pointer to the new area
*/
ZONE_CONTAINER
*
InsertArea
(
int
netcode
,
int
iarea
,
int
layer
,
int
x
,
int
y
,
int
hatch
);
/**
Function CompleteArea
* complete copper area contour by adding a line from last to first corner
* if there is only 1 or 2 corners, remove (delete) the area
* @param area_to_complete = area to complete or remove
* @param style = style of last corner
* @return 1 if Ok, 0 if area removed
*/
int
CompleteArea
(
ZONE_CONTAINER
*
area_to_complete
,
int
style
);
/**
* Function TestAreaPolygon
* Test an area for self-intersection.
*
* @param CurrArea = copper area to test
* @return :
* -1 if arcs intersect other sides
* 0 if no intersecting sides
* 1 if intersecting sides, but no intersecting arcs
* Also sets utility2 flag of area with return value
*/
int
TestAreaPolygon
(
ZONE_CONTAINER
*
CurrArea
);
/**
* Function ClipAreaPolygon
* Process an area that has been modified, by clipping its polygon against itself.
* This may change the number and order of copper areas in the net.
* @param bMessageBoxInt == TRUE, shows message when clipping occurs.
* @param bMessageBoxArc == TRUE, shows message when clipping can't be done due to arcs.
* @return:
* -1 if arcs intersect other sides, so polygon can't be clipped
* 0 if no intersecting sides
* 1 if intersecting sides
* Also sets areas->utility1 flags if areas are modified
*/
int
ClipAreaPolygon
(
ZONE_CONTAINER
*
CurrArea
,
bool
bMessageBoxArc
,
bool
bMessageBoxInt
,
bool
bRetainArcs
=
TRUE
);
/**
* Process an area that has been modified, by clipping its polygon against
* itself and the polygons for any other areas on the same net.
* This may change the number and order of copper areas in the net.
* @param modified_area = area to test
* @param bMessageBox : if TRUE, shows message boxes when clipping occurs.
* @return :
* -1 if arcs intersect other sides, so polygon can't be clipped
* 0 if no intersecting sides
* 1 if intersecting sides, polygon clipped
*/
int
AreaPolygonModified
(
ZONE_CONTAINER
*
modified_area
,
bool
bMessageBoxArc
,
bool
bMessageBoxInt
);
/**
* Function CombineAllAreasInNet
* Checks all copper areas in net for intersections, combining them if found
* @param aNetCode = net to consider
* @param bMessageBox : if true display warning message box
* @param bUseUtility : if true, don't check areas if both utility flags are 0
* Sets utility flag = 1 for any areas modified
* If an area has self-intersecting arcs, doesn't try to combine it
*/
int
CombineAllAreasInNet
(
int
aNetCode
,
bool
bMessageBox
,
bool
bUseUtility
);
/**
* Function TestAreaIntersections
* Check for intersection of a given copper area with other areas in same net
* @param area_to_test = area to compare to all other areas in the same net
*/
bool
TestAreaIntersections
(
ZONE_CONTAINER
*
area_to_test
);
/**
* Function TestAreaIntersection
* Test for intersection of 2 copper areas
* area_to_test must be after area_ref in m_ZoneDescriptorList
* @param area_ref = area reference
* @param area_to_test = area to compare for intersection calculations
* @return : 0 if no intersection
* 1 if intersection
* 2 if arcs intersect
*/
int
TestAreaIntersection
(
ZONE_CONTAINER
*
area_ref
,
ZONE_CONTAINER
*
area_to_test
);
/**
* Function CombineAreas
* If possible, combine 2 copper areas
* area_ref must be BEFORE area_to_combine
* area_to_combine will be deleted, if areas are combined
* @return : 0 if no intersection
* 1 if intersection
* 2 if arcs intersect
*/
int
CombineAreas
(
ZONE_CONTAINER
*
area_ref
,
ZONE_CONTAINER
*
area_to_combine
);
};
#endif // #ifndef CLASS_BOARD_H
pcbnew/class_zone.cpp
View file @
ffd3a713
...
...
@@ -8,15 +8,40 @@
#include "gr_basic.h"
#include "common.h"
#include "PolyLine.h"
#include "pcbnew.h"
/**********************/
/* Class EDGE_ZONE */
/**********************/
/* Constructor */
EDGE_ZONE
::
EDGE_ZONE
(
BOARD_ITEM
*
parent
)
:
DRAWSEGMENT
(
parent
,
TYPEEDGEZONE
)
{
m_Width
=
2
;
// a minimum for visibility, while dragging
}
/* Destructor */
EDGE_ZONE
::
~
EDGE_ZONE
()
{
}
/****************************************/
bool
EDGE_ZONE
::
Save
(
FILE
*
aFile
)
const
/****************************************/
{
return
true
;
}
/************************/
/* class ZONE_CONTAINER */
/************************/
ZONE_CONTAINER
::
ZONE_CONTAINER
(
BOARD
*
parent
)
:
BOARD_ITEM
(
parent
,
TYPEZONE_CONTAINER
)
,
CPolyLine
(
NULL
)
{
m_NetCode
=
-
1
;
// Net number for fast comparisons
...
...
@@ -24,38 +49,36 @@ ZONE_CONTAINER::ZONE_CONTAINER( BOARD* parent ) :
m_ZoneClearance
=
200
;
// a reasonnable clerance value
m_GridFillValue
=
50
;
// a reasonnable grid used for filling
m_PadOption
=
THERMAL_PAD
;
}
utility
=
0
;
// flags used in polygon calculations
utility2
=
0
;
// flags used in polygon calculations
m_Poly
=
new
CPolyLine
(
NULL
);
// Outlines
ZONE_CONTAINER
::~
ZONE_CONTAINER
()
{
}
/**********************/
/* Class EDGE_ZONE */
/**********************/
/* Constructor */
EDGE_ZONE
::
EDGE_ZONE
(
BOARD_ITEM
*
parent
)
:
DRAWSEGMENT
(
parent
,
TYPEEDGEZONE
)
ZONE_CONTAINER
::~
ZONE_CONTAINER
()
{
m_Width
=
2
;
// a minimum for visibility, while dragging
delete
m_Poly
;
m_Poly
=
NULL
;
}
/* Destructor */
EDGE_ZONE
::
~
EDGE_ZONE
()
/*******************************************/
void
ZONE_CONTAINER
::
SetNet
(
int
anet_code
)
/*******************************************/
{
m_NetCode
=
anet_code
;
if
(
m_Parent
)
{
EQUIPOT
*
net
=
((
BOARD
*
)
m_Parent
)
->
FindNet
(
g_HightLigth_NetCode
);
if
(
net
)
m_Netname
=
net
->
m_Netname
;
else
m_Netname
.
Empty
();
}
else
m_Netname
.
Empty
();
}
/****************************************/
bool
EDGE_ZONE
::
Save
(
FILE
*
aFile
)
const
/****************************************/
{
return
true
;
}
/********************************************/
bool
ZONE_CONTAINER
::
Save
(
FILE
*
aFile
)
const
...
...
@@ -66,7 +89,7 @@ bool ZONE_CONTAINER::Save( FILE* aFile ) const
unsigned
item_pos
;
int
ret
;
unsigned
corners_count
=
corner
.
size
();
unsigned
corners_count
=
m_Poly
->
corner
.
size
();
int
outline_hatch
;
fprintf
(
aFile
,
"$CZONE_OUTLINE
\n
"
);
...
...
@@ -79,16 +102,16 @@ bool ZONE_CONTAINER::Save( FILE* aFile ) const
ret
=
fprintf
(
aFile
,
"ZLayer %d
\n
"
,
m_Layer
);
if
(
ret
<
1
)
return
false
;
// Save the ouline aux info
switch
(
m_
HatchStyle
)
switch
(
m_
Poly
->
GetHatchStyle
()
)
{
default
:
case
NO_HATCH
:
case
CPolyLine
:
:
NO_HATCH
:
outline_hatch
=
'N'
;
break
;
case
DIAGONAL_EDGE
:
case
CPolyLine
:
:
DIAGONAL_EDGE
:
outline_hatch
=
'E'
;
break
;
case
DIAGONAL_FULL
:
case
CPolyLine
:
:
DIAGONAL_FULL
:
outline_hatch
=
'F'
;
break
;
}
...
...
@@ -99,8 +122,8 @@ bool ZONE_CONTAINER::Save( FILE* aFile ) const
for
(
item_pos
=
0
;
item_pos
<
corners_count
;
item_pos
++
)
{
ret
=
fprintf
(
aFile
,
"ZCorner %d %d %d
\n
"
,
corner
[
item_pos
].
x
,
corner
[
item_pos
].
y
,
corner
[
item_pos
].
end_contour
);
m_Poly
->
corner
[
item_pos
].
x
,
m_Poly
->
corner
[
item_pos
].
y
,
m_Poly
->
corner
[
item_pos
].
end_contour
);
if
(
ret
<
3
)
return
false
;
}
fprintf
(
aFile
,
"$endCZONE_OUTLINE
\n
"
);
...
...
@@ -122,7 +145,7 @@ int ZONE_CONTAINER::ReadDescr( FILE* aFile, int* aLineNum )
char
netname_buffer
[
1024
];
int
ret
;
int
n_corner_item
=
0
;
int
outline_hatch
=
NO_HATCH
;
int
outline_hatch
=
CPolyLine
::
NO_HATCH
;
bool
error
=
false
,
has_corner
=
false
;
netname_buffer
[
0
]
=
0
;
...
...
@@ -137,13 +160,13 @@ int ZONE_CONTAINER::ReadDescr( FILE* aFile, int* aLineNum )
else
{
if
(
!
has_corner
)
Start
(
m_Layer
,
0
,
0
,
m_Poly
->
Start
(
m_Layer
,
0
,
0
,
x
,
y
,
outline_hatch
);
else
AppendCorner
(
x
,
y
);
m_Poly
->
AppendCorner
(
x
,
y
);
has_corner
=
true
;
if
(
flag
)
Close
();
if
(
flag
)
m_Poly
->
Close
();
}
}
if
(
strnicmp
(
Line
,
"ZInfo"
,
5
)
==
0
)
// general info found
...
...
@@ -182,15 +205,15 @@ int ZONE_CONTAINER::ReadDescr( FILE* aFile, int* aLineNum )
{
case
'n'
:
case
'N'
:
outline_hatch
=
NO_HATCH
;
outline_hatch
=
CPolyLine
::
NO_HATCH
;
break
;
case
'e'
:
case
'E'
:
outline_hatch
=
DIAGONAL_EDGE
;
outline_hatch
=
CPolyLine
::
DIAGONAL_EDGE
;
break
;
case
'f'
:
case
'F'
:
outline_hatch
=
DIAGONAL_FULL
;
outline_hatch
=
CPolyLine
::
DIAGONAL_FULL
;
break
;
}
}
...
...
@@ -245,32 +268,32 @@ void ZONE_CONTAINER::Draw( WinEDA_DrawPanel* panel, wxDC* DC, const wxPoint& off
// draw the lines
int
i_start_contour
=
0
;
for
(
unsigned
ic
=
0
;
ic
<
corner
.
size
();
ic
++
)
for
(
unsigned
ic
=
0
;
ic
<
m_Poly
->
corner
.
size
();
ic
++
)
{
int
xi
=
corner
[
ic
].
x
+
offset
.
x
;
int
yi
=
corner
[
ic
].
y
+
offset
.
y
;
int
xi
=
m_Poly
->
corner
[
ic
].
x
+
offset
.
x
;
int
yi
=
m_Poly
->
corner
[
ic
].
y
+
offset
.
y
;
int
xf
,
yf
;
if
(
corner
[
ic
].
end_contour
==
FALSE
&&
ic
<
corner
.
size
()
-
1
)
if
(
m_Poly
->
corner
[
ic
].
end_contour
==
FALSE
&&
ic
<
m_Poly
->
corner
.
size
()
-
1
)
{
xf
=
corner
[
ic
+
1
].
x
+
offset
.
x
;
yf
=
corner
[
ic
+
1
].
y
+
offset
.
y
;
xf
=
m_Poly
->
corner
[
ic
+
1
].
x
+
offset
.
x
;
yf
=
m_Poly
->
corner
[
ic
+
1
].
y
+
offset
.
y
;
}
else
{
xf
=
corner
[
i_start_contour
].
x
+
offset
.
x
;
yf
=
corner
[
i_start_contour
].
y
+
offset
.
y
;
xf
=
m_Poly
->
corner
[
i_start_contour
].
x
+
offset
.
x
;
yf
=
m_Poly
->
corner
[
i_start_contour
].
y
+
offset
.
y
;
i_start_contour
=
ic
+
1
;
}
GRLine
(
&
panel
->
m_ClipBox
,
DC
,
xi
,
yi
,
xf
,
yf
,
0
,
color
);
}
// draw hatches
for
(
unsigned
ic
=
0
;
ic
<
m_HatchLines
.
size
();
ic
++
)
for
(
unsigned
ic
=
0
;
ic
<
m_
Poly
->
m_
HatchLines
.
size
();
ic
++
)
{
int
xi
=
m_HatchLines
[
ic
].
xi
+
offset
.
x
;
int
yi
=
m_HatchLines
[
ic
].
yi
+
offset
.
y
;
int
xf
=
m_HatchLines
[
ic
].
xf
+
offset
.
x
;
int
yf
=
m_HatchLines
[
ic
].
yf
+
offset
.
y
;
int
xi
=
m_
Poly
->
m_
HatchLines
[
ic
].
xi
+
offset
.
x
;
int
yi
=
m_
Poly
->
m_
HatchLines
[
ic
].
yi
+
offset
.
y
;
int
xf
=
m_
Poly
->
m_
HatchLines
[
ic
].
xf
+
offset
.
x
;
int
yf
=
m_
Poly
->
m_
HatchLines
[
ic
].
yf
+
offset
.
y
;
GRLine
(
&
panel
->
m_ClipBox
,
DC
,
xi
,
yi
,
xf
,
yf
,
0
,
color
);
}
...
...
@@ -307,7 +330,7 @@ int ZONE_CONTAINER::HitTestForCorner( const wxPoint& refPos )
#define MIN_DIST_IN_PIXELS 5
int
dist
;
unsigned
item_pos
,
lim
;
lim
=
corner
.
size
();
lim
=
m_Poly
->
corner
.
size
();
// Min distance to hit = MIN_DIST_IN_PIXELS pixels :
WinEDA_BasePcbFrame
*
frame
=
((
BOARD
*
)
GetParent
())
->
m_PcbFrame
;
...
...
@@ -315,7 +338,7 @@ int ZONE_CONTAINER::HitTestForCorner( const wxPoint& refPos )
for
(
item_pos
=
0
;
item_pos
<
lim
;
item_pos
++
)
{
dist
=
abs
(
corner
[
item_pos
].
x
-
refPos
.
x
)
+
abs
(
corner
[
item_pos
].
y
-
refPos
.
y
);
dist
=
abs
(
m_Poly
->
corner
[
item_pos
].
x
-
refPos
.
x
)
+
abs
(
m_Poly
->
corner
[
item_pos
].
y
-
refPos
.
y
);
if
(
dist
<=
min_dist
)
return
item_pos
;
}
...
...
@@ -335,7 +358,7 @@ int ZONE_CONTAINER::HitTestForEdge( const wxPoint& refPos )
#define MIN_DIST_IN_PIXELS 5
int
dist
;
unsigned
item_pos
,
lim
;
lim
=
corner
.
size
();
lim
=
m_Poly
->
corner
.
size
();
// Min distance to hit = MIN_DIST_IN_PIXELS pixels :
WinEDA_BasePcbFrame
*
frame
=
((
BOARD
*
)
GetParent
())
->
m_PcbFrame
;
...
...
@@ -351,7 +374,7 @@ int ZONE_CONTAINER::HitTestForEdge( const wxPoint& refPos )
* the last segment of the current outline starts at current corner, and ends
* at the first corner of the outline
*/
if
(
corner
[
item_pos
].
end_contour
||
end_segm
>=
lim
)
if
(
m_Poly
->
corner
[
item_pos
].
end_contour
||
end_segm
>=
lim
)
{
unsigned
tmp
=
first_corner_pos
;
first_corner_pos
=
end_segm
;
// first_corner_pos is now the beginning of the next outline
...
...
@@ -361,10 +384,10 @@ int ZONE_CONTAINER::HitTestForEdge( const wxPoint& refPos )
/* test the dist between segment and ref point */
dist
=
(
int
)
GetPointToLineSegmentDistance
(
refPos
.
x
,
refPos
.
y
,
corner
[
item_pos
].
x
,
corner
[
item_pos
].
y
,
corner
[
end_segm
].
x
,
corner
[
end_segm
].
y
);
m_Poly
->
corner
[
item_pos
].
x
,
m_Poly
->
corner
[
item_pos
].
y
,
m_Poly
->
corner
[
end_segm
].
x
,
m_Poly
->
corner
[
end_segm
].
y
);
if
(
dist
<=
min_dist
)
return
item_pos
;
}
...
...
@@ -407,10 +430,10 @@ void ZONE_CONTAINER::Display_Infos( WinEDA_DrawFrame* frame )
Affiche_1_Parametre
(
frame
,
text_pos
,
_
(
"Layer"
),
msg
,
BROWN
);
text_pos
+=
8
;
msg
.
Printf
(
wxT
(
"%d"
),
corner
.
size
()
);
msg
.
Printf
(
wxT
(
"%d"
),
m_Poly
->
corner
.
size
()
);
Affiche_1_Parametre
(
frame
,
text_pos
,
_
(
"Corners"
),
msg
,
BLUE
);
text_pos
+=
8
;
msg
.
Printf
(
wxT
(
"%d"
),
m_HatchLines
.
size
()
);
msg
.
Printf
(
wxT
(
"%d"
),
m_
Poly
->
m_
HatchLines
.
size
()
);
Affiche_1_Parametre
(
frame
,
text_pos
,
_
(
"Hatch lines"
),
msg
,
BLUE
);
}
pcbnew/class_zone.h
View file @
ffd3a713
...
...
@@ -15,7 +15,7 @@
* others polygons inside this main polygon are holes.
*/
class
ZONE_CONTAINER
:
public
BOARD_ITEM
,
public
CPolyLine
class
ZONE_CONTAINER
:
public
BOARD_ITEM
{
public
:
enum
m_PadInZone
{
// How pads are covered by copper in zone
...
...
@@ -24,10 +24,12 @@ public:
PAD_IN_ZONE
// pads are covered by copper
};
wxString
m_Netname
;
// Net Name
CPolyLine
*
m_Poly
;
// outlines
int
m_CornerSelection
;
// For corner moving, corner index to drag, or -1 if no selection
int
m_ZoneClearance
;
// clearance value
int
m_GridFillValue
;
// Grid used for filling
m_PadInZone
m_PadOption
;
// see m_PadInZone
int
utility
,
utility2
;
// flags used in polygon calculations
private
:
int
m_NetCode
;
// Net number for fast comparisons
...
...
@@ -55,7 +57,7 @@ public:
const
wxPoint
&
offset
,
int
draw_mode
);
int
GetNet
(
void
)
{
return
m_NetCode
;
}
void
SetNet
(
int
anet_code
)
{
m_NetCode
=
anet_code
;
}
void
SetNet
(
int
anet_code
)
;
/**
* Function HitTest
* tests if the given wxPoint is within the bounds of this object.
...
...
@@ -90,7 +92,6 @@ public:
* @return error level (0 = no error)
*/
int
Fill_Zone
(
WinEDA_PcbFrame
*
frame
,
wxDC
*
DC
,
bool
verbose
=
TRUE
);
};
/*******************/
...
...
pcbnew/dialog_zones_by_polygon.cpp
View file @
ffd3a713
...
...
@@ -281,7 +281,7 @@ void WinEDA_ZoneFrame::CreateControls()
}
if
(
m_Zone_Container
)
s_Zone_Hatching
=
m_Zone_Container
->
GetHatch
();
s_Zone_Hatching
=
m_Zone_Container
->
m_Poly
->
GetHatchStyle
();
switch
(
s_Zone_Hatching
)
{
case
CPolyLine
:
:
NO_HATCH
:
...
...
pcbnew/edit.cpp
View file @
ffd3a713
...
...
@@ -450,11 +450,13 @@ void WinEDA_PcbFrame::Process_Special_Functions( wxCommandEvent& event )
break
;
case
ID_POPUP_PCB_ZONE_ADD_SIMILAR_ZONE
:
wxMessageBox
(
wxT
(
"ToDo"
));
DrawPanel
->
MouseToCursorSchema
();
Add_Similar_Zone
(
&
dc
,
(
ZONE_CONTAINER
*
)
GetCurItem
()
);
break
;
case
ID_POPUP_PCB_ZONE_ADD_CUTOUT_ZONE
:
wxMessageBox
(
wxT
(
"ToDo"
));
DrawPanel
->
MouseToCursorSchema
();
Add_Zone_Cutout
(
&
dc
,
(
ZONE_CONTAINER
*
)
GetCurItem
()
);
break
;
case
ID_POPUP_PCB_DELETE_ZONE_CONTAINER
:
...
...
@@ -469,23 +471,9 @@ void WinEDA_PcbFrame::Process_Special_Functions( wxCommandEvent& event )
}
case
ID_POPUP_PCB_DELETE_ZONE_CORNER
:
{
DrawPanel
->
MouseToCursorSchema
();
ZONE_CONTAINER
*
zone_cont
=
(
ZONE_CONTAINER
*
)
GetCurItem
();
zone_cont
->
Draw
(
DrawPanel
,
&
dc
,
wxPoint
(
0
,
0
),
GR_XOR
);
if
(
zone_cont
->
GetNumCorners
()
<=
3
)
{
Delete_Zone
(
&
dc
,
NULL
,
zone_cont
->
m_TimeStamp
);
m_Pcb
->
Delete
(
zone_cont
);
}
else
{
zone_cont
->
DeleteCorner
(
zone_cont
->
m_CornerSelection
);
zone_cont
->
Draw
(
DrawPanel
,
&
dc
,
wxPoint
(
0
,
0
),
GR_XOR
);
}
Remove_Zone_Corner
(
&
dc
,
(
ZONE_CONTAINER
*
)
GetCurItem
()
);
SetCurItem
(
NULL
);
break
;
}
case
ID_POPUP_PCB_MOVE_ZONE_CORNER
:
{
...
...
@@ -505,7 +493,7 @@ void WinEDA_PcbFrame::Process_Special_Functions( wxCommandEvent& event )
* and start move the new corner
*/
zone_cont
->
Draw
(
DrawPanel
,
&
dc
,
wxPoint
(
0
,
0
),
GR_XOR
);
zone_cont
->
InsertCorner
(
zone_cont
->
m_CornerSelection
,
pos
.
x
,
pos
.
y
);
zone_cont
->
m_Poly
->
InsertCorner
(
zone_cont
->
m_CornerSelection
,
pos
.
x
,
pos
.
y
);
zone_cont
->
m_CornerSelection
++
;
zone_cont
->
Draw
(
DrawPanel
,
&
dc
,
wxPoint
(
0
,
0
),
GR_XOR
);
Start_Move_Zone_Corner
(
&
dc
,
zone_cont
,
zone_cont
->
m_CornerSelection
,
true
);
...
...
pcbnew/makefile.include
View file @
ffd3a713
...
...
@@ -10,8 +10,10 @@ LIBVIEWER3D = ../3d-viewer/3d-viewer.a
ZONE_FILES
=
zones_by_polygon.o
#ZONE_FILES = zones.o
OBJECTS
=
$(TARGET)
.o classpcb.o
\
$(ZONE_FILES)
\
zones_test_and_combine_areas.o
\
zone_filling_algorithm.o
\
lay2plot.o
\
modedit_undo_redo.o
\
...
...
pcbnew/onrightclick.cpp
View file @
ffd3a713
...
...
@@ -658,10 +658,10 @@ void WinEDA_PcbFrame::createPopUpMenuForZones( ZONE_CONTAINER* edge_zone, wxMenu
aPopMenu
->
AppendSeparator
();
ADD_MENUITEM
(
aPopMenu
,
ID_POPUP_PCB_ZONE_ADD_SIMILAR_ZONE
,
_
(
"Add Similar Zone"
),
fill
_zone_xpm
);
_
(
"Add Similar Zone"
),
add
_zone_xpm
);
ADD_MENUITEM
(
aPopMenu
,
ID_POPUP_PCB_ZONE_ADD_CUTOUT_ZONE
,
_
(
"Add Cutout
Zone
"
),
add_zone_cutout
);
_
(
"Add Cutout
Area
"
),
add_zone_cutout
);
aPopMenu
->
AppendSeparator
();
ADD_MENUITEM
(
aPopMenu
,
ID_POPUP_PCB_FILL_ZONE
,
...
...
pcbnew/zone_filling_algorithm.cpp
View file @
ffd3a713
...
...
@@ -112,20 +112,20 @@ int ZONE_CONTAINER::Fill_Zone( WinEDA_PcbFrame* frame, wxDC* DC, bool verbose )
// trace the zone edges into the routing matrix
int
i_start_contour
=
0
;
for
(
unsigned
ic
=
0
;
ic
<
corner
.
size
();
ic
++
)
for
(
unsigned
ic
=
0
;
ic
<
m_Poly
->
corner
.
size
();
ic
++
)
{
int
xi
=
corner
[
ic
].
x
-
Pcb
->
m_BoundaryBox
.
m_Pos
.
x
;
int
yi
=
corner
[
ic
].
y
-
Pcb
->
m_BoundaryBox
.
m_Pos
.
y
;
int
xi
=
m_Poly
->
corner
[
ic
].
x
-
Pcb
->
m_BoundaryBox
.
m_Pos
.
x
;
int
yi
=
m_Poly
->
corner
[
ic
].
y
-
Pcb
->
m_BoundaryBox
.
m_Pos
.
y
;
int
xf
,
yf
;
if
(
corner
[
ic
].
end_contour
==
FALSE
&&
ic
<
corner
.
size
()
-
1
)
if
(
m_Poly
->
corner
[
ic
].
end_contour
==
FALSE
&&
ic
<
m_Poly
->
corner
.
size
()
-
1
)
{
xf
=
corner
[
ic
+
1
].
x
-
Pcb
->
m_BoundaryBox
.
m_Pos
.
x
;
yf
=
corner
[
ic
+
1
].
y
-
Pcb
->
m_BoundaryBox
.
m_Pos
.
y
;
xf
=
m_Poly
->
corner
[
ic
+
1
].
x
-
Pcb
->
m_BoundaryBox
.
m_Pos
.
x
;
yf
=
m_Poly
->
corner
[
ic
+
1
].
y
-
Pcb
->
m_BoundaryBox
.
m_Pos
.
y
;
}
else
{
xf
=
corner
[
i_start_contour
].
x
-
Pcb
->
m_BoundaryBox
.
m_Pos
.
x
;
yf
=
corner
[
i_start_contour
].
y
-
Pcb
->
m_BoundaryBox
.
m_Pos
.
y
;
xf
=
m_Poly
->
corner
[
i_start_contour
].
x
-
Pcb
->
m_BoundaryBox
.
m_Pos
.
x
;
yf
=
m_Poly
->
corner
[
i_start_contour
].
y
-
Pcb
->
m_BoundaryBox
.
m_Pos
.
y
;
i_start_contour
=
ic
+
1
;
}
TraceLignePcb
(
xi
,
yi
,
xf
,
yf
,
-
1
,
HOLE
|
CELL_is_EDGE
,
WRITE_CELL
);
...
...
@@ -136,9 +136,8 @@ int ZONE_CONTAINER::Fill_Zone( WinEDA_PcbFrame* frame, wxDC* DC, bool verbose )
int
cells_count
=
0
;
for
(
ii
=
0
,
pad
=
frame
->
m_Pcb
->
m_Pads
;
ii
<
frame
->
m_Pcb
->
m_NbPads
;
ii
++
,
pad
++
)
{
int
icont
=
0
;
wxPoint
pos
;
if
(
TestPointInsideContour
(
icont
,
(
*
pad
)
->
m_Pos
.
x
,
(
*
pad
)
->
m_Pos
.
y
)
)
if
(
m_Poly
->
TestPointInside
(
(
*
pad
)
->
m_Pos
.
x
,
(
*
pad
)
->
m_Pos
.
y
)
)
{
ZoneStartFill
.
x
=
(
(
*
pad
)
->
m_Pos
.
x
-
Pcb
->
m_BoundaryBox
.
m_Pos
.
x
+
(
g_GridRoutingSize
/
2
)
)
/
g_GridRoutingSize
;
...
...
@@ -196,20 +195,20 @@ int ZONE_CONTAINER::Fill_Zone( WinEDA_PcbFrame* frame, wxDC* DC, bool verbose )
/* Recreate zone limits on the routing matrix
* (could be deleted by PlaceCells()) : */
i_start_contour
=
0
;
for
(
unsigned
ic
=
0
;
ic
<
corner
.
size
();
ic
++
)
for
(
unsigned
ic
=
0
;
ic
<
m_Poly
->
corner
.
size
();
ic
++
)
{
int
xi
=
corner
[
ic
].
x
-
Pcb
->
m_BoundaryBox
.
m_Pos
.
x
;
int
yi
=
corner
[
ic
].
y
-
Pcb
->
m_BoundaryBox
.
m_Pos
.
y
;
int
xi
=
m_Poly
->
corner
[
ic
].
x
-
Pcb
->
m_BoundaryBox
.
m_Pos
.
x
;
int
yi
=
m_Poly
->
corner
[
ic
].
y
-
Pcb
->
m_BoundaryBox
.
m_Pos
.
y
;
int
xf
,
yf
;
if
(
corner
[
ic
].
end_contour
==
FALSE
&&
ic
<
corner
.
size
()
-
1
)
if
(
m_Poly
->
corner
[
ic
].
end_contour
==
FALSE
&&
ic
<
m_Poly
->
corner
.
size
()
-
1
)
{
xf
=
corner
[
ic
+
1
].
x
-
Pcb
->
m_BoundaryBox
.
m_Pos
.
x
;
yf
=
corner
[
ic
+
1
].
y
-
Pcb
->
m_BoundaryBox
.
m_Pos
.
y
;
xf
=
m_Poly
->
corner
[
ic
+
1
].
x
-
Pcb
->
m_BoundaryBox
.
m_Pos
.
x
;
yf
=
m_Poly
->
corner
[
ic
+
1
].
y
-
Pcb
->
m_BoundaryBox
.
m_Pos
.
y
;
}
else
{
xf
=
corner
[
i_start_contour
].
x
-
Pcb
->
m_BoundaryBox
.
m_Pos
.
x
;
yf
=
corner
[
i_start_contour
].
y
-
Pcb
->
m_BoundaryBox
.
m_Pos
.
y
;
xf
=
m_Poly
->
corner
[
i_start_contour
].
x
-
Pcb
->
m_BoundaryBox
.
m_Pos
.
x
;
yf
=
m_Poly
->
corner
[
i_start_contour
].
y
-
Pcb
->
m_BoundaryBox
.
m_Pos
.
y
;
i_start_contour
=
ic
+
1
;
}
TraceLignePcb
(
xi
,
yi
,
xf
,
yf
,
-
1
,
HOLE
|
CELL_is_EDGE
,
WRITE_CELL
);
...
...
@@ -219,9 +218,8 @@ int ZONE_CONTAINER::Fill_Zone( WinEDA_PcbFrame* frame, wxDC* DC, bool verbose )
* (could be deleted by PlaceCells()) : */
for
(
ii
=
0
,
pad
=
frame
->
m_Pcb
->
m_Pads
;
ii
<
frame
->
m_Pcb
->
m_NbPads
;
ii
++
,
pad
++
)
{
int
icont
=
0
;
wxPoint
pos
;
if
(
TestPointInsideContour
(
icont
,
(
*
pad
)
->
m_Pos
.
x
,
(
*
pad
)
->
m_Pos
.
y
)
)
if
(
m_Poly
->
TestPointInside
(
(
*
pad
)
->
m_Pos
.
x
,
(
*
pad
)
->
m_Pos
.
y
)
)
{
ZoneStartFill
.
x
=
(
(
*
pad
)
->
m_Pos
.
x
-
Pcb
->
m_BoundaryBox
.
m_Pos
.
x
+
(
g_GridRoutingSize
/
2
)
)
/
g_GridRoutingSize
;
...
...
pcbnew/zones_by_polygon.cpp
View file @
ffd3a713
...
...
@@ -27,10 +27,9 @@ using namespace std;
#include "common.h"
#include "pcbnew.h"
#include "autorout.h"
#include "cell.h"
#include "
trigo
.h"
#include "
id
.h"
#include "protos.h"
...
...
@@ -52,6 +51,8 @@ static int s_Zone_Hatching; // Option to show the zone area (out
static
int
s_NetcodeSelection
;
// Net code selection for the current zone
static
wxPoint
s_CornerInitialPosition
;
// Used to abort a move corner command
static
bool
s_CornerIsNew
;
// Used to abort a move corner command (if it is a new corner, it must be deleted)
static
bool
s_AddCutoutToCurrentZone
;
// if true, the next outline will be addes to s_CurrentZone
static
ZONE_CONTAINER
*
s_CurrentZone
;
// if != NULL, these ZONE_CONTAINER params will be used for the next zone
// key used to store net sort option in config file :
#define ZONE_NET_SORT_OPTION_KEY wxT( "Zone_NetSort_Opt" )
...
...
@@ -63,6 +64,44 @@ enum zone_cmd {
#include "dialog_zones_by_polygon.cpp"
/**********************************************************************************/
void
WinEDA_PcbFrame
::
Add_Similar_Zone
(
wxDC
*
DC
,
ZONE_CONTAINER
*
zone_container
)
/**********************************************************************************/
/**
* Function Add_Similar_Zone
* Add a zone to a given zone outline.
* if the zones are overlappeing they will be merged
* @param DC = current Device Context
* @param zone_container = parent zone outline
*/
{
s_AddCutoutToCurrentZone
=
false
;
s_CurrentZone
=
zone_container
;
wxCommandEvent
evt
;
evt
.
SetId
(
ID_PCB_ZONES_BUTT
);
Process_Special_Functions
(
evt
);
}
/**********************************************************************************/
void
WinEDA_PcbFrame
::
Add_Zone_Cutout
(
wxDC
*
DC
,
ZONE_CONTAINER
*
zone_container
)
/**********************************************************************************/
/**
* Function Add_Zone_Cutout
* Add a cutout zone to a given zone outline
* @param DC = current Device Context
* @param zone_container = parent zone outline
*/
{
s_AddCutoutToCurrentZone
=
true
;
s_CurrentZone
=
zone_container
;
wxCommandEvent
evt
;
evt
.
SetId
(
ID_PCB_ZONES_BUTT
);
Process_Special_Functions
(
evt
);
}
/*****************************************************************************/
void
WinEDA_PcbFrame
::
Delete_Zone
(
wxDC
*
DC
,
SEGZONE
*
aZone
,
long
aTimestamp
)
...
...
@@ -174,6 +213,8 @@ static void Abort_Zone_Create_Outline( WinEDA_DrawPanel* Panel, wxDC* DC )
Panel
->
ManageCurseur
=
NULL
;
Panel
->
ForceCloseManageCurseur
=
NULL
;
pcbframe
->
SetCurItem
(
NULL
);
s_AddCutoutToCurrentZone
=
false
;
s_CurrentZone
=
NULL
;
}
...
...
@@ -228,9 +269,11 @@ void WinEDA_PcbFrame::Start_Move_Zone_Corner( wxDC* DC, ZONE_CONTAINER* zone_con
zone_container
->
m_Flags
=
IN_EDIT
;
DrawPanel
->
ManageCurseur
=
Show_Zone_Corner_While_Move_Mouse
;
DrawPanel
->
ForceCloseManageCurseur
=
Abort_Zone_Move_Corner
;
s_CornerInitialPosition
.
x
=
zone_container
->
GetX
(
corner_id
);
s_CornerInitialPosition
.
y
=
zone_container
->
GetY
(
corner_id
);
s_CornerInitialPosition
.
x
=
zone_container
->
m_Poly
->
GetX
(
corner_id
);
s_CornerInitialPosition
.
y
=
zone_container
->
m_Poly
->
GetY
(
corner_id
);
s_CornerIsNew
=
IsNewCorner
;
s_AddCutoutToCurrentZone
=
false
;
s_CurrentZone
=
NULL
;
}
...
...
@@ -248,6 +291,72 @@ void WinEDA_PcbFrame::End_Move_Zone_Corner( wxDC* DC, ZONE_CONTAINER* zone_conta
DrawPanel
->
ForceCloseManageCurseur
=
NULL
;
zone_container
->
Draw
(
DrawPanel
,
DC
,
wxPoint
(
0
,
0
),
GR_OR
);
GetScreen
()
->
SetModify
();
s_AddCutoutToCurrentZone
=
false
;
s_CurrentZone
=
NULL
;
SetCurItem
(
NULL
);
// This outine can be deleted when merging outlines
/* Combine zones if possible */
int
layer
=
zone_container
->
GetLayer
();
for
(
unsigned
ii
=
0
;
ii
<
m_Pcb
->
m_ZoneDescriptorList
.
size
();
ii
++
)
{
ZONE_CONTAINER
*
edge_zone
=
m_Pcb
->
m_ZoneDescriptorList
[
ii
];
if
(
layer
==
edge_zone
->
GetLayer
()
)
edge_zone
->
Draw
(
DrawPanel
,
DC
,
wxPoint
(
0
,
0
),
GR_XOR
);
}
m_Pcb
->
AreaPolygonModified
(
zone_container
,
true
,
false
);
for
(
unsigned
ii
=
0
;
ii
<
m_Pcb
->
m_ZoneDescriptorList
.
size
();
ii
++
)
{
ZONE_CONTAINER
*
edge_zone
=
m_Pcb
->
m_ZoneDescriptorList
[
ii
];
if
(
layer
==
edge_zone
->
GetLayer
()
)
edge_zone
->
Draw
(
DrawPanel
,
DC
,
wxPoint
(
0
,
0
),
GR_OR
);
}
}
/*************************************************************************************/
void
WinEDA_PcbFrame
::
Remove_Zone_Corner
(
wxDC
*
DC
,
ZONE_CONTAINER
*
zone_container
)
/*************************************************************************************/
/**
* Function End_Move_Zone_Corner
* Remove the currently selected corner in a zone outline
* the .m_CornerSelection is used as corner selection
*/
{
if
(
zone_container
->
m_Poly
->
GetNumCorners
()
<=
3
)
{
Delete_Zone
(
DC
,
NULL
,
zone_container
->
m_TimeStamp
);
m_Pcb
->
Delete
(
zone_container
);
return
;
}
int
layer
=
zone_container
->
GetLayer
();
if
(
DC
)
{
for
(
unsigned
ii
=
0
;
ii
<
m_Pcb
->
m_ZoneDescriptorList
.
size
();
ii
++
)
{
ZONE_CONTAINER
*
edge_zone
=
m_Pcb
->
m_ZoneDescriptorList
[
ii
];
if
(
layer
==
edge_zone
->
GetLayer
()
)
edge_zone
->
Draw
(
DrawPanel
,
DC
,
wxPoint
(
0
,
0
),
GR_XOR
);
}
}
zone_container
->
m_Poly
->
DeleteCorner
(
zone_container
->
m_CornerSelection
);
// modify zones outlines accordiing to the new zone_container shape
m_Pcb
->
AreaPolygonModified
(
zone_container
,
true
,
false
);
if
(
DC
)
{
for
(
unsigned
ii
=
0
;
ii
<
m_Pcb
->
m_ZoneDescriptorList
.
size
();
ii
++
)
{
ZONE_CONTAINER
*
edge_zone
=
m_Pcb
->
m_ZoneDescriptorList
[
ii
];
if
(
layer
==
edge_zone
->
GetLayer
()
)
edge_zone
->
Draw
(
DrawPanel
,
DC
,
wxPoint
(
0
,
0
),
GR_OR
);
}
}
}
...
...
@@ -267,12 +376,12 @@ void Abort_Zone_Move_Corner( WinEDA_DrawPanel* Panel, wxDC* DC )
if
(
s_CornerIsNew
)
{
zone_container
->
DeleteCorner
(
zone_container
->
m_CornerSelection
);
zone_container
->
m_Poly
->
DeleteCorner
(
zone_container
->
m_CornerSelection
);
}
else
{
wxPoint
pos
=
s_CornerInitialPosition
;
zone_container
->
MoveCorner
(
zone_container
->
m_CornerSelection
,
pos
.
x
,
pos
.
y
);
zone_container
->
m_Poly
->
MoveCorner
(
zone_container
->
m_CornerSelection
,
pos
.
x
,
pos
.
y
);
}
zone_container
->
Draw
(
Panel
,
DC
,
wxPoint
(
0
,
0
),
GR_XOR
);
...
...
@@ -280,6 +389,8 @@ void Abort_Zone_Move_Corner( WinEDA_DrawPanel* Panel, wxDC* DC )
Panel
->
ForceCloseManageCurseur
=
NULL
;
pcbframe
->
SetCurItem
(
NULL
);
zone_container
->
m_Flags
=
0
;
s_AddCutoutToCurrentZone
=
false
;
s_CurrentZone
=
NULL
;
}
...
...
@@ -299,7 +410,7 @@ void Show_Zone_Corner_While_Move_Mouse( WinEDA_DrawPanel* Panel, wxDC* DC, bool
}
wxPoint
pos
=
pcbframe
->
GetScreen
()
->
m_Curseur
;
zone_container
->
MoveCorner
(
zone_container
->
m_CornerSelection
,
pos
.
x
,
pos
.
y
);
zone_container
->
m_Poly
->
MoveCorner
(
zone_container
->
m_CornerSelection
,
pos
.
x
,
pos
.
y
);
zone_container
->
Draw
(
Panel
,
DC
,
wxPoint
(
0
,
0
),
GR_XOR
);
}
...
...
@@ -317,9 +428,26 @@ EDGE_ZONE* WinEDA_PcbFrame::Begin_Zone( wxDC* DC )
EDGE_ZONE
*
oldedge
;
EDGE_ZONE
*
newedge
=
NULL
;
// verify if s_CurrentZone exists:
unsigned
ii
;
for
(
ii
=
0
;
ii
<
m_Pcb
->
m_ZoneDescriptorList
.
size
();
ii
++
)
{
if
(
s_CurrentZone
==
m_Pcb
->
m_ZoneDescriptorList
[
ii
]
)
break
;
}
if
(
ii
==
m_Pcb
->
m_ZoneDescriptorList
.
size
()
)
// Not found: coul be deleted since last selection
{
s_AddCutoutToCurrentZone
=
false
;
s_CurrentZone
=
NULL
;
}
oldedge
=
m_Pcb
->
m_CurrentLimitZone
;
if
(
m_Pcb
->
m_CurrentLimitZone
==
NULL
)
/* Start a new contour: init zone params (net and layer) */
{
if
(
s_CurrentZone
==
NULL
)
{
DrawPanel
->
m_IgnoreMouseEvents
=
TRUE
;
WinEDA_ZoneFrame
*
frame
=
new
WinEDA_ZoneFrame
(
this
);
...
...
@@ -331,22 +459,30 @@ EDGE_ZONE* WinEDA_PcbFrame::Begin_Zone( wxDC* DC )
if
(
diag
==
ZONE_ABORT
)
return
NULL
;
GetScreen
()
->
m_Active_Layer
=
s_Zone_Layer
;
}
else
/* Start a new contour: init zone params (net and layer) from an existing zone */
{
GetScreen
()
->
m_Active_Layer
=
s_Zone_Layer
=
s_CurrentZone
->
GetLayer
();
s_Zone_Hatching
=
s_CurrentZone
->
m_Poly
->
GetHatchStyle
();
}
/* Show the Net */
if
(
(
g_HightLigth_NetCode
>
0
)
&&
(
g_HightLigth_NetCode
!=
s_NetcodeSelection
)
)
{
Hight_Light
(
DC
);
// Remove old hightlight selection
}
if
(
s_CurrentZone
)
s_NetcodeSelection
=
s_CurrentZone
->
GetNet
();
g_HightLigth_NetCode
=
s_NetcodeSelection
;
if
(
!
g_HightLigt_Status
)
Hight_Light
(
DC
);
if
(
!
s_AddCutoutToCurrentZone
)
s_CurrentZone
=
NULL
;
// the zone is used only once
}
// if first segment
if
(
(
m_Pcb
->
m_CurrentLimitZone
==
NULL
)
/* Initial start
t
of a new outline */
if
(
(
m_Pcb
->
m_CurrentLimitZone
==
NULL
)
/* Initial start of a new outline */
||
(
DrawPanel
->
ManageCurseur
==
NULL
)
)
/* reprise d'un trace complementaire */
{
newedge
=
new
EDGE_ZONE
(
m_Pcb
);
...
...
@@ -400,6 +536,7 @@ void WinEDA_PcbFrame::End_Zone( wxDC* DC )
*/
{
EDGE_ZONE
*
edge
;
int
layer
=
GetScreen
()
->
m_Active_Layer
;
if
(
m_Pcb
->
m_CurrentLimitZone
)
{
...
...
@@ -431,39 +568,74 @@ void WinEDA_PcbFrame::End_Zone( wxDC* DC )
DrawPanel
->
ManageCurseur
=
NULL
;
DrawPanel
->
ForceCloseManageCurseur
=
NULL
;
// Undraw old drawings, because they can have important changes
for
(
unsigned
ii
=
0
;
ii
<
m_Pcb
->
m_ZoneDescriptorList
.
size
();
ii
++
)
{
ZONE_CONTAINER
*
edge_zone
=
m_Pcb
->
m_ZoneDescriptorList
[
ii
];
if
(
layer
==
edge_zone
->
GetLayer
()
)
edge_zone
->
Draw
(
DrawPanel
,
DC
,
wxPoint
(
0
,
0
),
GR_XOR
);
}
/* Put edges in list */
ZONE_CONTAINER
*
polygon
=
new
ZONE_CONTAINER
(
m_Pcb
);
polygon
->
SetLayer
(
GetScreen
()
->
m_Active_Layer
);
polygon
->
SetNet
(
g_HightLigth_NetCode
);
polygon
->
m_TimeStamp
=
GetTimeStamp
();
ZONE_CONTAINER
*
new_zone_container
;
if
(
s_CurrentZone
==
NULL
)
{
new_zone_container
=
new
ZONE_CONTAINER
(
m_Pcb
);
new_zone_container
->
SetLayer
(
layer
);
new_zone_container
->
SetNet
(
g_HightLigth_NetCode
);
new_zone_container
->
m_TimeStamp
=
GetTimeStamp
();
EQUIPOT
*
net
=
m_Pcb
->
FindNet
(
g_HightLigth_NetCode
);
if
(
net
)
polygon
->
m_Netname
=
net
->
m_Netname
;
edge
=
m_Pcb
->
m_CurrentLimitZone
;
polygon
->
Start
(
GetScreen
()
->
m_Active_L
ayer
,
0
,
0
,
new_zone_container
->
m_Poly
->
Start
(
l
ayer
,
0
,
0
,
edge
->
m_Start
.
x
,
edge
->
m_Start
.
y
,
s_Zone_Hatching
);
edge
=
edge
->
Next
();
while
(
edge
)
{
polygon
->
AppendCorner
(
edge
->
m_Start
.
x
,
edge
->
m_Start
.
y
);
new_zone_container
->
m_Poly
->
AppendCorner
(
edge
->
m_Start
.
x
,
edge
->
m_Start
.
y
);
edge
=
edge
->
Next
();
}
new_zone_container
->
m_Poly
->
Close
();
// Close the current corner list
new_zone_container
->
m_Poly
->
SetHatch
(
s_Zone_Hatching
);
new_zone_container
->
m_PadOption
=
s_Zone_Pad_Options
;
new_zone_container
->
m_ZoneClearance
=
g_DesignSettings
.
m_ZoneClearence
;
new_zone_container
->
m_GridFillValue
=
g_GridRoutingSize
;
m_Pcb
->
m_ZoneDescriptorList
.
push_back
(
new_zone_container
);
}
else
// Append this outline as a cutout to an existing zone
{
new_zone_container
=
s_CurrentZone
;
edge
=
m_Pcb
->
m_CurrentLimitZone
;
while
(
edge
)
{
new_zone_container
->
m_Poly
->
AppendCorner
(
edge
->
m_Start
.
x
,
edge
->
m_Start
.
y
);
edge
=
edge
->
Next
();
}
polygon
->
Close
();
// Close the current corner list
polygon
->
SetHatch
(
s_Zone_Hatching
);
polygon
->
m_PadOption
=
s_Zone_Pad_Options
;
polygon
->
m_ZoneClearance
=
g_DesignSettings
.
m_ZoneClearence
;
polygon
->
m_GridFillValue
=
g_GridRoutingSize
;
new_zone_container
->
m_Poly
->
Close
();
// Close the current corner list
}
m_Pcb
->
m_ZoneDescriptorList
.
push_back
(
polygon
);
s_AddCutoutToCurrentZone
=
false
;
s_CurrentZone
=
NULL
;
/* Remove the current temporary list */
DelLimitesZone
(
DC
,
TRUE
);
/* Redraw the real edge zone */
polygon
->
Draw
(
DrawPanel
,
DC
,
wxPoint
(
0
,
0
),
GR_OR
);
new_zone_container
->
m_Flags
=
0
;
SetCurItem
(
NULL
);
// This outine can be deleted when merging outlines
// Combine zones if possible :
m_Pcb
->
AreaPolygonModified
(
new_zone_container
,
true
,
false
);
// Redraw the real edge zone :
for
(
unsigned
ii
=
0
;
ii
<
m_Pcb
->
m_ZoneDescriptorList
.
size
();
ii
++
)
{
ZONE_CONTAINER
*
edge_zone
=
m_Pcb
->
m_ZoneDescriptorList
[
ii
];
if
(
layer
==
edge_zone
->
GetLayer
()
)
edge_zone
->
Draw
(
DrawPanel
,
DC
,
wxPoint
(
0
,
0
),
GR_OR
);
}
GetScreen
()
->
SetModify
();
}
...
...
@@ -540,19 +712,32 @@ void WinEDA_PcbFrame::Edit_Zone_Params( wxDC* DC, ZONE_CONTAINER* zone_container
if
(
diag
==
ZONE_ABORT
)
return
;
zone_container
->
Draw
(
DrawPanel
,
DC
,
wxPoint
(
0
,
0
),
GR_XOR
);
// Undraw old zone outlines
for
(
unsigned
ii
=
0
;
ii
<
m_Pcb
->
m_ZoneDescriptorList
.
size
();
ii
++
)
{
ZONE_CONTAINER
*
edge_zone
=
m_Pcb
->
m_ZoneDescriptorList
[
ii
];
edge_zone
->
Draw
(
DrawPanel
,
DC
,
wxPoint
(
0
,
0
),
GR_XOR
);
}
zone_container
->
SetLayer
(
s_Zone_Layer
);
zone_container
->
SetNet
(
s_NetcodeSelection
);
EQUIPOT
*
net
=
m_Pcb
->
FindNet
(
s_NetcodeSelection
);
if
(
net
)
zone_container
->
m_Netname
=
net
->
m_Netname
;
zone_container
->
SetHatch
(
s_Zone_Hatching
);
zone_container
->
m_Poly
->
SetHatch
(
s_Zone_Hatching
);
zone_container
->
m_PadOption
=
s_Zone_Pad_Options
;
zone_container
->
m_ZoneClearance
=
g_DesignSettings
.
m_ZoneClearence
;
zone_container
->
m_GridFillValue
=
g_GridRoutingSize
;
zone_container
->
Draw
(
DrawPanel
,
DC
,
wxPoint
(
0
,
0
),
GR_OR
);
// Combine zones if possible :
m_Pcb
->
AreaPolygonModified
(
zone_container
,
true
,
false
);
// Redraw the real new zone outlines:
for
(
unsigned
ii
=
0
;
ii
<
m_Pcb
->
m_ZoneDescriptorList
.
size
();
ii
++
)
{
ZONE_CONTAINER
*
edge_zone
=
m_Pcb
->
m_ZoneDescriptorList
[
ii
];
edge_zone
->
Draw
(
DrawPanel
,
DC
,
wxPoint
(
0
,
0
),
GR_OR
);
}
GetScreen
()
->
SetModify
();
}
...
...
@@ -591,7 +776,7 @@ int WinEDA_PcbFrame::Fill_Zone( wxDC* DC, ZONE_CONTAINER* zone_container, bool v
}
g_HightLigth_NetCode
=
s_NetcodeSelection
;
if
(
!
g_HightLigt_Status
&&
DC
)
if
(
!
g_HightLigt_Status
&&
DC
)
Hight_Light
(
DC
);
if
(
g_HightLigth_NetCode
>
0
)
...
...
@@ -642,7 +827,7 @@ int WinEDA_PcbFrame::Fill_All_Zones( wxDC* DC, bool verbose )
int
error_level
=
0
;
// Remove all zones :
if
(
m_Pcb
->
m_Zone
)
if
(
m_Pcb
->
m_Zone
)
{
m_Pcb
->
m_Zone
->
DeleteStructList
();
m_Pcb
->
m_Zone
=
NULL
;
...
...
@@ -653,10 +838,10 @@ int WinEDA_PcbFrame::Fill_All_Zones( wxDC* DC, bool verbose )
{
zone_container
=
m_Pcb
->
m_ZoneDescriptorList
[
ii
];
error_level
=
Fill_Zone
(
NULL
,
zone_container
,
verbose
);
if
(
error_level
&&
!
verbose
)
if
(
error_level
&&
!
verbose
)
break
;
}
DrawPanel
->
Refresh
(
true
);
DrawPanel
->
Refresh
(
true
);
return
error_level
;
}
pcbnew/zones_test_and_combine_areas.cpp
0 → 100644
View file @
ffd3a713
/****************************************************************************/
/* functions to test, merges and cut polygons used as copper areas outlines */
/****************************************************************************/
#include <vector>
#include "fctsys.h"
#include "common.h"
#include "pcbnew.h"
using
namespace
std
;
#undef ASSERT
#define ASSERT wxASSERT
bool
bDontShowSelfIntersectionArcsWarning
;
bool
bDontShowSelfIntersectionWarning
;
bool
bDontShowIntersectionArcsWarning
;
bool
bDontShowIntersectionWarning
;
#define poly m_Poly
// carea: describes a copper area
#define carea ZONE_CONTAINER
/**
* Function AddArea
* add empty copper area to net
* @return pointer to the new area
*/
ZONE_CONTAINER
*
BOARD
::
AddArea
(
int
netcode
,
int
layer
,
int
x
,
int
y
,
int
hatch
)
{
ZONE_CONTAINER
*
new_area
=
InsertArea
(
netcode
,
m_ZoneDescriptorList
.
size
(
)
-
1
,
layer
,
x
,
y
,
hatch
);
return
new_area
;
}
/**
* remove copper area from net
* @param area = area to remove
* @return 0
*/
int
BOARD
::
RemoveArea
(
ZONE_CONTAINER
*
area_to_remove
)
{
Delete
(
area_to_remove
);
return
0
;
}
/**
* Function InsertArea
* add empty copper area to net, inserting after m_ZoneDescriptorList[iarea]
* @return pointer to the new area
*/
ZONE_CONTAINER
*
BOARD
::
InsertArea
(
int
netcode
,
int
iarea
,
int
layer
,
int
x
,
int
y
,
int
hatch
)
{
ZONE_CONTAINER
*
new_area
=
new
ZONE_CONTAINER
(
this
);
new_area
->
SetNet
(
netcode
);
new_area
->
SetLayer
(
layer
);
new_area
->
m_TimeStamp
=
GetTimeStamp
();
if
(
iarea
<
(
int
)
(
m_ZoneDescriptorList
.
size
()
-
1
)
)
m_ZoneDescriptorList
.
insert
(
m_ZoneDescriptorList
.
begin
()
+
iarea
+
1
,
new_area
);
else
m_ZoneDescriptorList
.
push_back
(
new_area
);
new_area
->
poly
->
Start
(
layer
,
1
,
10
*
NM_PER_MIL
,
x
,
y
,
hatch
);
return
new_area
;
}
/**
* Function CompleteArea
* complete copper area contour by adding a line from last to first corner
* if there is only 1 or 2 corners, remove (delete) the area
* @param area_to_complete = area to complete or remove
* @param style = style of last corner
* @return 1 if Ok, 0 if area removed
*/
int
BOARD
::
CompleteArea
(
ZONE_CONTAINER
*
area_to_complete
,
int
style
)
{
if
(
area_to_complete
->
poly
->
GetNumCorners
()
>
2
)
{
area_to_complete
->
poly
->
Close
(
style
);
return
1
;
}
else
{
RemoveArea
(
area_to_complete
);
}
return
0
;
}
/**
* Function TestAreaPolygon
* Test an area for self-intersection.
*
* @param CurrArea = copper area to test
* @return :
* -1 if arcs intersect other sides
* 0 if no intersecting sides
* 1 if intersecting sides, but no intersecting arcs
* Also sets utility2 flag of area with return value
*/
int
BOARD
::
TestAreaPolygon
(
ZONE_CONTAINER
*
CurrArea
)
{
CPolyLine
*
p
=
CurrArea
->
poly
;
// first, check for sides intersecting other sides, especially arcs
bool
bInt
=
false
;
bool
bArcInt
=
false
;
int
n_cont
=
p
->
GetNumContours
();
// make bounding rect for each contour
std
::
vector
<
CRect
>
cr
;
cr
.
reserve
(
n_cont
);
for
(
int
icont
=
0
;
icont
<
n_cont
;
icont
++
)
cr
.
push_back
(
p
->
GetCornerBounds
(
icont
)
);
for
(
int
icont
=
0
;
icont
<
n_cont
;
icont
++
)
{
int
is_start
=
p
->
GetContourStart
(
icont
);
int
is_end
=
p
->
GetContourEnd
(
icont
);
for
(
int
is
=
is_start
;
is
<=
is_end
;
is
++
)
{
int
is_prev
=
is
-
1
;
if
(
is_prev
<
is_start
)
is_prev
=
is_end
;
int
is_next
=
is
+
1
;
if
(
is_next
>
is_end
)
is_next
=
is_start
;
int
style
=
p
->
GetSideStyle
(
is
);
int
x1i
=
p
->
GetX
(
is
);
int
y1i
=
p
->
GetY
(
is
);
int
x1f
=
p
->
GetX
(
is_next
);
int
y1f
=
p
->
GetY
(
is_next
);
// check for intersection with any other sides
for
(
int
icont2
=
icont
;
icont2
<
n_cont
;
icont2
++
)
{
if
(
cr
[
icont
].
left
>
cr
[
icont2
].
right
||
cr
[
icont
].
bottom
>
cr
[
icont2
].
top
||
cr
[
icont2
].
left
>
cr
[
icont
].
right
||
cr
[
icont2
].
bottom
>
cr
[
icont
].
top
)
{
// rectangles don't overlap, do nothing
}
else
{
int
is2_start
=
p
->
GetContourStart
(
icont2
);
int
is2_end
=
p
->
GetContourEnd
(
icont2
);
for
(
int
is2
=
is2_start
;
is2
<=
is2_end
;
is2
++
)
{
int
is2_prev
=
is2
-
1
;
if
(
is2_prev
<
is2_start
)
is2_prev
=
is2_end
;
int
is2_next
=
is2
+
1
;
if
(
is2_next
>
is2_end
)
is2_next
=
is2_start
;
if
(
icont
!=
icont2
||
(
is2
!=
is
&&
is2
!=
is_prev
&&
is2
!=
is_next
&&
is
!=
is2_prev
&&
is
!=
is2_next
)
)
{
int
style2
=
p
->
GetSideStyle
(
is2
);
int
x2i
=
p
->
GetX
(
is2
);
int
y2i
=
p
->
GetY
(
is2
);
int
x2f
=
p
->
GetX
(
is2_next
);
int
y2f
=
p
->
GetY
(
is2_next
);
int
ret
=
FindSegmentIntersections
(
x1i
,
y1i
,
x1f
,
y1f
,
style
,
x2i
,
y2i
,
x2f
,
y2f
,
style2
);
if
(
ret
)
{
// intersection between non-adjacent sides
bInt
=
TRUE
;
if
(
style
!=
CPolyLine
::
STRAIGHT
||
style2
!=
CPolyLine
::
STRAIGHT
)
{
bArcInt
=
TRUE
;
break
;
}
}
}
}
}
if
(
bArcInt
)
break
;
}
if
(
bArcInt
)
break
;
}
if
(
bArcInt
)
break
;
}
if
(
bArcInt
)
CurrArea
->
utility2
=
-
1
;
else
if
(
bInt
)
CurrArea
->
utility2
=
1
;
else
CurrArea
->
utility2
=
0
;
return
CurrArea
->
utility2
;
}
/**
* Function ClipAreaPolygon
* Process an area that has been modified, by clipping its polygon against itself.
* This may change the number and order of copper areas in the net.
* @param bMessageBoxInt == TRUE, shows message when clipping occurs.
* @param bMessageBoxArc == TRUE, shows message when clipping can't be done due to arcs.
* @return:
* -1 if arcs intersect other sides, so polygon can't be clipped
* 0 if no intersecting sides
* 1 if intersecting sides
* Also sets areas->utility1 flags if areas are modified
*/
int
BOARD
::
ClipAreaPolygon
(
ZONE_CONTAINER
*
CurrArea
,
bool
bMessageBoxArc
,
bool
bMessageBoxInt
,
bool
bRetainArcs
)
{
CPolyLine
*
p
=
CurrArea
->
poly
;
int
test
=
TestAreaPolygon
(
CurrArea
);
// this sets utility2 flag
if
(
test
==
-
1
&&
!
bRetainArcs
)
test
=
1
;
if
(
test
==
-
1
)
{
// arc intersections, don't clip unless bRetainArcs == false
if
(
bMessageBoxArc
&&
bDontShowSelfIntersectionArcsWarning
==
false
)
{
wxString
str
;
str
.
Printf
(
wxT
(
"Area %X of net
\"
%s
\"
has arcs intersecting other sides.
\n
"
),
CurrArea
->
m_TimeStamp
,
CurrArea
->
m_Netname
.
GetData
()
);
str
+=
wxT
(
"This may cause problems with other editing operations,
\n
"
);
str
+=
wxT
(
"such as adding cutouts. It can't be fixed automatically.
\n
"
);
str
+=
wxT
(
"Manual correction is recommended."
);
wxMessageBox
(
str
);
// bDontShowSelfIntersectionArcsWarning = dlg.bDontShowBoxState;
}
return
-
1
;
// arcs intersect with other sides, error
}
// mark all areas as unmodified except this one
for
(
unsigned
ia
=
0
;
ia
<
m_ZoneDescriptorList
.
size
();
ia
++
)
m_ZoneDescriptorList
[
ia
]
->
utility
=
0
;
CurrArea
->
utility
=
1
;
if
(
test
==
1
)
{
// non-arc intersections, clip the polygon
if
(
bMessageBoxInt
&&
bDontShowSelfIntersectionWarning
==
false
)
{
wxString
str
;
str
.
Printf
(
wxT
(
"Area %d of net
\"
%s
\"
is self-intersecting and will be clipped.
\n
"
),
CurrArea
->
m_TimeStamp
,
CurrArea
->
m_Netname
.
GetData
()
);
str
+=
wxT
(
"This may result in splitting the area.
\n
"
);
str
+=
wxT
(
"If the area is complex, this may take a few seconds."
);
wxMessageBox
(
str
);
// bDontShowSelfIntersectionWarning = dlg.bDontShowBoxState;
}
}
//** TODO test for cutouts outside of area
//** if( test == 1 )
{
std
::
vector
<
CPolyLine
*>
*
pa
=
new
std
::
vector
<
CPolyLine
*>
;
p
->
Undraw
();
int
n_poly
=
CurrArea
->
poly
->
NormalizeWithGpc
(
pa
,
bRetainArcs
);
if
(
n_poly
>
1
)
// i.e if clippinf has created some polygons, we must add these new copper areas
{
for
(
int
ip
=
1
;
ip
<
n_poly
;
ip
++
)
{
// create new copper area and copy poly into it
CPolyLine
*
new_p
=
(
*
pa
)[
ip
-
1
];
CurrArea
=
AddArea
(
CurrArea
->
GetNet
(),
CurrArea
->
GetLayer
(),
0
,
0
,
0
);
// remove the poly that was automatically created for the new area
// and replace it with a poly from NormalizeWithGpc
delete
CurrArea
->
poly
;
CurrArea
->
poly
=
new_p
;
CurrArea
->
poly
->
Draw
();
CurrArea
->
utility
=
1
;
}
}
p
->
Draw
();
delete
pa
;
}
return
test
;
}
/**
* Process an area that has been modified, by clipping its polygon against
* itself and the polygons for any other areas on the same net.
* This may change the number and order of copper areas in the net.
* @param modified_area = area to test
* @param bMessageBox : if TRUE, shows message boxes when clipping occurs.
* @return :
* -1 if arcs intersect other sides, so polygon can't be clipped
* 0 if no intersecting sides
* 1 if intersecting sides, polygon clipped
*/
int
BOARD
::
AreaPolygonModified
(
ZONE_CONTAINER
*
modified_area
,
bool
bMessageBoxArc
,
bool
bMessageBoxInt
)
{
// clip polygon against itself
int
test
=
ClipAreaPolygon
(
modified_area
,
bMessageBoxArc
,
bMessageBoxInt
);
if
(
test
==
-
1
)
return
test
;
// now see if we need to clip against other areas
bool
bCheckAllAreas
=
false
;
if
(
test
==
1
)
bCheckAllAreas
=
TRUE
;
else
bCheckAllAreas
=
TestAreaIntersections
(
modified_area
);
if
(
bCheckAllAreas
)
CombineAllAreasInNet
(
modified_area
->
GetNet
(),
bMessageBoxInt
,
TRUE
);
return
test
;
}
/**
* Function CombineAllAreasInNet
* Checks all copper areas in net for intersections, combining them if found
* @param aNetCode = net to consider
* @param bMessageBox : if true display warning message box
* @param bUseUtility : if true, don't check areas if both utility flags are 0
* Sets utility flag = 1 for any areas modified
* If an area has self-intersecting arcs, doesn't try to combine it
*/
int
BOARD
::
CombineAllAreasInNet
(
int
aNetCode
,
bool
bMessageBox
,
bool
bUseUtility
)
{
if
(
m_ZoneDescriptorList
.
size
()
>
1
)
{
// start by testing all area polygons to set utility2 flags
for
(
unsigned
ia
=
0
;
ia
<
m_ZoneDescriptorList
.
size
();
ia
++
)
if
(
m_ZoneDescriptorList
[
ia
]
->
GetNet
()
==
aNetCode
)
TestAreaPolygon
(
m_ZoneDescriptorList
[
ia
]
);
// now loop through all combinations
for
(
unsigned
ia1
=
0
;
ia1
<
m_ZoneDescriptorList
.
size
()
-
1
;
ia1
++
)
{
ZONE_CONTAINER
*
curr_area
=
m_ZoneDescriptorList
[
ia1
];
if
(
curr_area
->
GetNet
()
!=
aNetCode
)
continue
;
// legal polygon
CRect
b1
=
curr_area
->
poly
->
GetCornerBounds
();
bool
mod_ia1
=
false
;
for
(
unsigned
ia2
=
m_ZoneDescriptorList
.
size
()
-
1
;
ia2
>
ia1
;
ia2
--
)
{
ZONE_CONTAINER
*
area2
=
m_ZoneDescriptorList
[
ia2
];
if
(
curr_area
->
poly
->
GetLayer
()
==
area2
->
poly
->
GetLayer
()
&&
curr_area
->
utility2
!=
-
1
&&
area2
->
utility2
!=
-
1
)
{
CRect
b2
=
area2
->
poly
->
GetCornerBounds
();
if
(
!
(
b1
.
left
>
b2
.
right
||
b1
.
right
<
b2
.
left
||
b1
.
bottom
>
b2
.
top
||
b1
.
top
<
b2
.
bottom
)
)
{
// check ia2 against 1a1
if
(
curr_area
->
utility
||
area2
->
utility
||
bUseUtility
==
false
)
{
int
ret
=
TestAreaIntersection
(
curr_area
,
area2
);
if
(
ret
==
1
)
ret
=
CombineAreas
(
curr_area
,
area2
);
if
(
ret
==
1
)
{
if
(
bMessageBox
&&
bDontShowIntersectionWarning
==
false
)
{
wxString
str
;
str
.
Printf
(
wxT
(
"Areas %d and %d of net
\"
%s
\"
intersect and will be combined.
\n
"
),
ia1
+
1
,
ia2
+
1
,
curr_area
->
m_Netname
.
GetData
()
);
str
+=
wxT
(
"If they are complex, this may take a few seconds."
);
wxMessageBox
(
str
);
// bDontShowIntersectionWarning = dlg.bDontShowBoxState;
}
mod_ia1
=
TRUE
;
}
else
if
(
ret
==
2
)
{
if
(
bMessageBox
&&
bDontShowIntersectionArcsWarning
==
false
)
{
wxString
str
;
str
.
Printf
(
wxT
(
"Areas %d and %d of net
\"
%s
\"
intersect, but some of the intersecting sides are arcs.
\n
"
),
ia1
+
1
,
ia2
+
1
,
curr_area
->
m_Netname
.
GetData
()
);
str
+=
wxT
(
"Therefore, these areas can't be combined."
);
wxMessageBox
(
str
);
// bDontShowIntersectionArcsWarning = dlg.bDontShowBoxState;
}
}
}
}
}
}
if
(
mod_ia1
)
ia1
--
;
// if modified, we need to check it again
}
}
return
0
;
}
/**
* Function TestAreaIntersections
* Check for intersection of a given copper area with other areas in same net
* @param area_to_test = area to compare to all other areas in the same net
*/
bool
BOARD
::
TestAreaIntersections
(
ZONE_CONTAINER
*
area_to_test
)
{
CPolyLine
*
poly1
=
area_to_test
->
poly
;
for
(
unsigned
ia2
=
0
;
ia2
<
m_ZoneDescriptorList
.
size
();
ia2
++
)
{
ZONE_CONTAINER
*
area2
=
m_ZoneDescriptorList
[
ia2
];
if
(
area_to_test
->
GetNet
()
!=
area_to_test
->
GetNet
()
)
continue
;
if
(
area_to_test
!=
area2
)
{
// see if areas are on same layer
if
(
area_to_test
->
GetLayer
()
!=
area2
->
GetLayer
()
)
continue
;
CPolyLine
*
poly2
=
area2
->
poly
;
// test bounding rects
CRect
b1
=
poly1
->
GetCornerBounds
();
CRect
b2
=
poly2
->
GetCornerBounds
();
if
(
b1
.
bottom
>
b2
.
top
||
b1
.
top
<
b2
.
bottom
||
b1
.
left
>
b2
.
right
||
b1
.
right
<
b2
.
left
)
continue
;
// test for intersecting segments
for
(
int
icont1
=
0
;
icont1
<
poly1
->
GetNumContours
();
icont1
++
)
{
int
is1
=
poly1
->
GetContourStart
(
icont1
);
int
ie1
=
poly1
->
GetContourEnd
(
icont1
);
for
(
int
ic1
=
is1
;
ic1
<=
ie1
;
ic1
++
)
{
int
xi1
=
poly1
->
GetX
(
ic1
);
int
yi1
=
poly1
->
GetY
(
ic1
);
int
xf1
,
yf1
,
style1
;
if
(
ic1
<
ie1
)
{
xf1
=
poly1
->
GetX
(
ic1
+
1
);
yf1
=
poly1
->
GetY
(
ic1
+
1
);
}
else
{
xf1
=
poly1
->
GetX
(
is1
);
yf1
=
poly1
->
GetY
(
is1
);
}
style1
=
poly1
->
GetSideStyle
(
ic1
);
for
(
int
icont2
=
0
;
icont2
<
poly2
->
GetNumContours
();
icont2
++
)
{
int
is2
=
poly2
->
GetContourStart
(
icont2
);
int
ie2
=
poly2
->
GetContourEnd
(
icont2
);
for
(
int
ic2
=
is2
;
ic2
<=
ie2
;
ic2
++
)
{
int
xi2
=
poly2
->
GetX
(
ic2
);
int
yi2
=
poly2
->
GetY
(
ic2
);
int
xf2
,
yf2
,
style2
;
if
(
ic2
<
ie2
)
{
xf2
=
poly2
->
GetX
(
ic2
+
1
);
yf2
=
poly2
->
GetY
(
ic2
+
1
);
}
else
{
xf2
=
poly2
->
GetX
(
is2
);
yf2
=
poly2
->
GetY
(
is2
);
}
style2
=
poly2
->
GetSideStyle
(
ic2
);
int
n_int
=
FindSegmentIntersections
(
xi1
,
yi1
,
xf1
,
yf1
,
style1
,
xi2
,
yi2
,
xf2
,
yf2
,
style2
);
if
(
n_int
)
return
TRUE
;
}
}
}
}
}
}
return
false
;
}
/**
* Function TestAreaIntersection
* Test for intersection of 2 copper areas
* area_to_test must be after area_ref in m_ZoneDescriptorList
* @param area_ref = area reference
* @param area_to_test = area to compare for intersection calculations
* @return : 0 if no intersection
* 1 if intersection
* 2 if arcs intersect
*/
int
BOARD
::
TestAreaIntersection
(
ZONE_CONTAINER
*
area_ref
,
ZONE_CONTAINER
*
area_to_test
)
{
// see if areas are on same layer
if
(
area_ref
->
GetLayer
()
!=
area_to_test
->
GetLayer
()
)
return
0
;
CPolyLine
*
poly1
=
area_ref
->
poly
;
CPolyLine
*
poly2
=
area_to_test
->
poly
;
// test bounding rects
CRect
b1
=
poly1
->
GetCornerBounds
();
CRect
b2
=
poly2
->
GetCornerBounds
();
if
(
b1
.
bottom
>
b2
.
top
||
b1
.
top
<
b2
.
bottom
||
b1
.
left
>
b2
.
right
||
b1
.
right
<
b2
.
left
)
return
0
;
// now test for intersecting segments
bool
bInt
=
false
;
bool
bArcInt
=
false
;
for
(
int
icont1
=
0
;
icont1
<
poly1
->
GetNumContours
();
icont1
++
)
{
int
is1
=
poly1
->
GetContourStart
(
icont1
);
int
ie1
=
poly1
->
GetContourEnd
(
icont1
);
for
(
int
ic1
=
is1
;
ic1
<=
ie1
;
ic1
++
)
{
int
xi1
=
poly1
->
GetX
(
ic1
);
int
yi1
=
poly1
->
GetY
(
ic1
);
int
xf1
,
yf1
,
style1
;
if
(
ic1
<
ie1
)
{
xf1
=
poly1
->
GetX
(
ic1
+
1
);
yf1
=
poly1
->
GetY
(
ic1
+
1
);
}
else
{
xf1
=
poly1
->
GetX
(
is1
);
yf1
=
poly1
->
GetY
(
is1
);
}
style1
=
poly1
->
GetSideStyle
(
ic1
);
for
(
int
icont2
=
0
;
icont2
<
poly2
->
GetNumContours
();
icont2
++
)
{
int
is2
=
poly2
->
GetContourStart
(
icont2
);
int
ie2
=
poly2
->
GetContourEnd
(
icont2
);
for
(
int
ic2
=
is2
;
ic2
<=
ie2
;
ic2
++
)
{
int
xi2
=
poly2
->
GetX
(
ic2
);
int
yi2
=
poly2
->
GetY
(
ic2
);
int
xf2
,
yf2
,
style2
;
if
(
ic2
<
ie2
)
{
xf2
=
poly2
->
GetX
(
ic2
+
1
);
yf2
=
poly2
->
GetY
(
ic2
+
1
);
}
else
{
xf2
=
poly2
->
GetX
(
is2
);
yf2
=
poly2
->
GetY
(
is2
);
}
style2
=
poly2
->
GetSideStyle
(
ic2
);
int
n_int
=
FindSegmentIntersections
(
xi1
,
yi1
,
xf1
,
yf1
,
style1
,
xi2
,
yi2
,
xf2
,
yf2
,
style2
);
if
(
n_int
)
{
bInt
=
TRUE
;
if
(
style1
!=
CPolyLine
::
STRAIGHT
||
style2
!=
CPolyLine
::
STRAIGHT
)
bArcInt
=
TRUE
;
break
;
}
}
if
(
bArcInt
)
break
;
}
if
(
bArcInt
)
break
;
}
if
(
bArcInt
)
break
;
}
if
(
!
bInt
)
return
0
;
if
(
bArcInt
)
return
2
;
return
1
;
}
/**
* Function CombineAreas
* If possible, combine 2 copper areas
* area_ref must be BEFORE area_to_combine in m_ZoneDescriptorList
* area_to_combine will be deleted, if areas are combined
* @return : 0 if no intersection
* 1 if intersection
* 2 if arcs intersect
*/
int
BOARD
::
CombineAreas
(
ZONE_CONTAINER
*
area_ref
,
ZONE_CONTAINER
*
area_to_combine
)
{
if
(
area_ref
==
area_to_combine
)
ASSERT
(
0
);
#if 0
// test for intersection
int test = TestAreaIntersection( area_ref, area_to_combine );
if( test != 1 )
return test; // no intersection
#endif
// polygons intersect, combine them
CPolyLine
*
poly1
=
area_ref
->
poly
;
CPolyLine
*
poly2
=
area_to_combine
->
poly
;
std
::
vector
<
CArc
>
arc_array1
;
std
::
vector
<
CArc
>
arc_array2
;
poly1
->
MakeGpcPoly
(
-
1
,
&
arc_array1
);
poly2
->
MakeGpcPoly
(
-
1
,
&
arc_array2
);
int
n_ext_cont1
=
0
;
for
(
int
ic
=
0
;
ic
<
poly1
->
GetGpcPoly
()
->
num_contours
;
ic
++
)
if
(
!
(
(
poly1
->
GetGpcPoly
()
->
hole
)[
ic
]
)
)
n_ext_cont1
++
;
int
n_ext_cont2
=
0
;
for
(
int
ic
=
0
;
ic
<
poly2
->
GetGpcPoly
()
->
num_contours
;
ic
++
)
if
(
!
(
(
poly2
->
GetGpcPoly
()
->
hole
)[
ic
]
)
)
n_ext_cont2
++
;
gpc_polygon
*
union_gpc
=
new
gpc_polygon
;
gpc_polygon_clip
(
GPC_UNION
,
poly1
->
GetGpcPoly
(),
poly2
->
GetGpcPoly
(),
union_gpc
);
// get number of outside contours
int
n_union_ext_cont
=
0
;
for
(
int
ic
=
0
;
ic
<
union_gpc
->
num_contours
;
ic
++
)
if
(
!
(
(
union_gpc
->
hole
)[
ic
]
)
)
n_union_ext_cont
++
;
// if no intersection, free new gpc and return
if
(
n_union_ext_cont
==
n_ext_cont1
+
n_ext_cont2
)
{
gpc_free_polygon
(
union_gpc
);
delete
union_gpc
;
return
0
;
}
// intersection, replace area_ref->m_Poly with combined areas and remove area_to_combine
RemoveArea
(
area_to_combine
);
area_ref
->
m_Poly
->
RemoveAllContours
();
// create area with external contour
for
(
int
ic
=
0
;
ic
<
union_gpc
->
num_contours
;
ic
++
)
{
if
(
!
(
union_gpc
->
hole
)[
ic
]
)
{
// external contour, replace this poly
for
(
int
i
=
0
;
i
<
union_gpc
->
contour
[
ic
].
num_vertices
;
i
++
)
{
int
x
=
(
(
union_gpc
->
contour
)[
ic
].
vertex
)[
i
].
x
;
int
y
=
(
(
union_gpc
->
contour
)[
ic
].
vertex
)[
i
].
y
;
if
(
i
==
0
)
{
area_ref
->
m_Poly
->
Start
(
area_ref
->
GetLayer
(),
0
,
0
,
x
,
y
,
area_ref
->
m_Poly
->
GetHatchStyle
()
);
}
else
area_ref
->
m_Poly
->
AppendCorner
(
x
,
y
);
}
area_ref
->
m_Poly
->
Close
();
}
}
// add holes
for
(
int
ic
=
0
;
ic
<
union_gpc
->
num_contours
;
ic
++
)
{
if
(
(
union_gpc
->
hole
)[
ic
]
)
{
// hole
for
(
int
i
=
0
;
i
<
union_gpc
->
contour
[
ic
].
num_vertices
;
i
++
)
{
int
x
=
(
(
union_gpc
->
contour
)[
ic
].
vertex
)[
i
].
x
;
int
y
=
(
(
union_gpc
->
contour
)[
ic
].
vertex
)[
i
].
y
;
area_ref
->
m_Poly
->
AppendCorner
(
x
,
y
);
}
area_ref
->
m_Poly
->
Close
();
}
}
area_ref
->
utility
=
1
;
area_ref
->
m_Poly
->
RestoreArcs
(
&
arc_array1
);
area_ref
->
m_Poly
->
RestoreArcs
(
&
arc_array2
);
area_ref
->
m_Poly
->
Draw
();
gpc_free_polygon
(
union_gpc
);
delete
union_gpc
;
return
1
;
}
#if 0
void dra_areas( CDlgLog* log, int copper_layers,
int units, BOOL check_unrouted,
CArray<CPolyLine> * board_outline,
DesignRules* dr, DRErrorList* drelist )
{
CString d_str, x_str, y_str;
CString str;
CString str2;
long nerrors = 0;
// now iterate through all areas
for( int ia = 0; ia<net->nareas; ia++ )
{
carea* a = &net->area[ia];
// iterate through all nets again
POSITION pos2 = pos;
void* ptr2;
CString name2;
while( pos2 != NULL )
{
m_nlist->m_map.GetNextAssoc( pos2, name2, ptr2 );
cnet* net2 = (cnet*) ptr2;
for( int ia2 = 0; ia2<net2->nareas; ia2++ )
{
carea* a2 = &net2->area[ia2];
// test for same layer
if( a->poly->GetLayer() == a2->poly->GetLayer() )
{
// test for points inside one another
for( int ic = 0; ic<a->poly->GetNumCorners(); ic++ )
{
int x = a->poly->GetX( ic );
int y = a->poly->GetY( ic );
if( a2->poly->TestPointInside( x, y ) )
{
// COPPERAREA_COPPERAREA error
id id_a = net->id;
id_a.st = ID_AREA;
id_a.i = ia;
id_a.sst = ID_SEL_CORNER;
id_a.ii = ic;
str.Format(
"%ld: \"%s\" copper area inside \"%s\" inside copper area\r\n",
nerrors + 1,
net->name,
net2->name );
DRError* dre = drelist->Add( nerrors,
DRError::COPPERAREA_INSIDE_COPPERAREA,
&str,
&net->name,
&net2->name,
id_a,
id_a,
x,
y,
x,
y,
0,
0 );
if( dre )
{
nerrors++;
if( log )
log->AddLine( str );
}
}
}
for( int ic2 = 0; ic2<a2->poly->GetNumCorners(); ic2++ )
{
int x = a2->poly->GetX( ic2 );
int y = a2->poly->GetY( ic2 );
if( a->poly->TestPointInside( x, y ) )
{
// COPPERAREA_COPPERAREA error
id id_a = net2->id;
id_a.st = ID_AREA;
id_a.i = ia2;
id_a.sst = ID_SEL_CORNER;
id_a.ii = ic2;
str.Format( "%ld: \"%s\" copper area inside \"%s\" copper area\r\n",
nerrors + 1, net2->name, net->name );
DRError* dre = drelist->Add( nerrors,
DRError::COPPERAREA_INSIDE_COPPERAREA,
&str,
&net2->name,
&net->name,
id_a,
id_a,
x,
y,
x,
y,
0,
0 );
if( dre )
{
nerrors++;
if( log )
log->AddLine( str );
}
}
}
// now test spacing between areas
for( int icont = 0; icont<a->poly->GetNumContours(); icont++ )
{
int ic_start = a->poly->GetContourStart( icont );
int ic_end = a->poly->GetContourEnd( icont );
for( int ic = ic_start; ic<=ic_end; ic++ )
{
id id_a = net->id;
id_a.st = ID_AREA;
id_a.i = ia;
id_a.sst = ID_SIDE;
id_a.ii = ic;
int ax1 = a->poly->GetX( ic );
int ay1 = a->poly->GetY( ic );
int ax2, ay2;
if( ic == ic_end )
{
ax2 = a->poly->GetX( ic_start );
ay2 = a->poly->GetY( ic_start );
}
else
{
ax2 = a->poly->GetX( ic + 1 );
ay2 = a->poly->GetY( ic + 1 );
}
int astyle = a->poly->GetSideStyle( ic );
for( int icont2 = 0; icont2<a2->poly->GetNumContours(); icont2++ )
{
int ic_start2 = a2->poly->GetContourStart( icont2 );
int ic_end2 = a2->poly->GetContourEnd( icont2 );
for( int ic2 = ic_start2; ic2<=ic_end2; ic2++ )
{
id id_b = net2->id;
id_b.st = ID_AREA;
id_b.i = ia2;
id_b.sst = ID_SIDE;
id_b.ii = ic2;
int bx1 = a2->poly->GetX( ic2 );
int by1 = a2->poly->GetY( ic2 );
int bx2, by2;
if( ic2 == ic_end2 )
{
bx2 = a2->poly->GetX( ic_start2 );
by2 = a2->poly->GetY( ic_start2 );
}
else
{
bx2 = a2->poly->GetX( ic2 + 1 );
by2 = a2->poly->GetY( ic2 + 1 );
}
int bstyle = a2->poly->GetSideStyle( ic2 );
int x, y;
int d = ::GetClearanceBetweenSegments( bx1,
by1,
bx2,
by2,
bstyle,
0,
ax1,
ay1,
ax2,
ay2,
astyle,
0,
dr->copper_copper,
&x,
&y );
if( d < dr->copper_copper )
{
// COPPERAREA_COPPERAREA error
::MakeCStringFromDimension( &d_str,
d,
units,
TRUE,
TRUE,
TRUE,
1 );
::MakeCStringFromDimension( &x_str,
x,
units,
FALSE,
TRUE,
TRUE,
1 );
::MakeCStringFromDimension( &y_str,
y,
units,
FALSE,
TRUE,
TRUE,
1 );
str.Format(
"%ld: \"%s\" copper area to \"%s\" copper area = %s, x=%s, y=%s\r\n",
nerrors + 1,
net->name,
net2->name,
d_str,
x_str,
y_str );
DRError* dre = drelist->Add(
nerrors,
DRError::
COPPERAREA_COPPERAREA,
&str,
&net->name,
&net2->name,
id_a,
id_b,
x,
y,
x,
y,
0,
0 );
if( dre )
{
nerrors++;
if( log )
log->AddLine( str );
}
}
}
}
}
}
}
}
}
}
}
#endif
polygon/PolyLine.cpp
View file @
ffd3a713
...
...
@@ -748,6 +748,19 @@ void CPolyLine::RemoveContour( int icont )
Draw
();
}
void
CPolyLine
::
RemoveAllContours
(
void
)
/**
* function RemoveAllContours
* removes all corners from the lists.
* Others params are not chnaged
*/
{
corner
.
clear
(
);
side_style
.
clear
(
);
}
/** Function InsertCorner
* insert a new corner between two existing corners
* @param ic = index for the insertion point: the corner is inserted AFTER ic
...
...
polygon/PolyLine.h
View file @
ffd3a713
...
...
@@ -81,6 +81,7 @@ public:
void
MoveCorner
(
int
ic
,
int
x
,
int
y
);
void
Close
(
int
style
=
STRAIGHT
,
BOOL
bDraw
=
TRUE
);
void
RemoveContour
(
int
icont
);
void
RemoveAllContours
(
void
);
// drawing functions
void
HighlightSide
(
int
is
);
...
...
@@ -107,6 +108,7 @@ public:
// access functions
int
GetLayer
()
{
return
m_layer
;}
int
GetNumCorners
();
int
GetNumSides
();
int
GetClosed
();
...
...
@@ -125,7 +127,7 @@ public:
id
GetId
();
int
GetSelBoxSize
();
CDisplayList
*
GetDisplayList
(){
return
m_dlist
;
};
int
GetHatch
(){
return
m_HatchStyle
;
}
int
GetHatch
Style
(){
return
m_HatchStyle
;
}
void
SetHatch
(
int
hatch
){
Undraw
();
m_HatchStyle
=
hatch
;
Draw
();
};
void
SetX
(
int
ic
,
int
x
);
void
SetY
(
int
ic
,
int
y
);
...
...
@@ -159,14 +161,14 @@ private:
int
m_Width
;
// line width
int
m_sel_box
;
// corner selection box width/2
int
utility
;
p
rotected
:
p
ublic
:
std
::
vector
<
CPolyPt
>
corner
;
// array of points for corners
std
::
vector
<
int
>
side_style
;
// array of styles for sides
private
:
std
::
vector
<
dl_element
*>
dl_side
;
// graphic elements
std
::
vector
<
dl_element
*>
dl_side_sel
;
std
::
vector
<
dl_element
*>
dl_corner_sel
;
p
rotected
:
p
ublic
:
int
m_HatchStyle
;
// hatch style, see enum above
std
::
vector
<
CSegment
>
m_HatchLines
;
// hatch lines
private
:
...
...
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