From 9eba4f9554a37074b166ab0ebe9318feba7249cf Mon Sep 17 00:00:00 2001 From: charras Date: Fri, 17 Oct 2008 06:17:48 +0000 Subject: [PATCH] Solved a bug when creating a new zone outline that could crash pcbnew --- change_log.txt | 8 + internat/fr/kicad.mo | Bin 161446 -> 162465 bytes internat/fr/kicad.po | 843 +++--------------- pcbnew/class_zone.cpp | 73 +- pcbnew/class_zone.h | 78 +- pcbnew/dialog_copper_zones.cpp | 88 +- pcbnew/dialog_copper_zones.h | 1 + pcbnew/dialog_copper_zones_frame.cpp | 74 +- pcbnew/dialog_copper_zones_frame.fbp | 574 ++++++++---- pcbnew/dialog_copper_zones_frame.h | 24 +- pcbnew/zones.h | 12 + pcbnew/zones_by_polygon.cpp | 42 +- .../zones_convert_brd_items_to_polygons.cpp | 3 +- 13 files changed, 798 insertions(+), 1022 deletions(-) diff --git a/change_log.txt b/change_log.txt index b646aea799..e3df56e56a 100644 --- a/change_log.txt +++ b/change_log.txt @@ -5,6 +5,14 @@ Started 2007-June-11 Please add newer entries at the top, list the date and your name with email address. +2008-oct-11 UPDATE Jean-Pierre Charras +================================================================================ ++pcbnew: + Solved a bug when creating a new zone outline that could crash pcbnew + More about copper zones filled without grid (by polygons) + Currently for tests only (work in progress). + now working: Thermal reliefs parameters can be set. + 2008-oct-11 UPDATE Jean-Pierre Charras ================================================================================ +pcbnew: diff --git a/internat/fr/kicad.mo b/internat/fr/kicad.mo index d632c30f7303fa5fcfcef103b3ca7fa743473aff..5a4c6a472a5c63c13ed3b006986192bfdf93f7c2 100644 GIT binary patch delta 55391 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 delta 54473 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 B0EGYm diff --git a/internat/fr/kicad.po b/internat/fr/kicad.po index b3e50a1908..4284e05259 100644 --- a/internat/fr/kicad.po +++ b/internat/fr/kicad.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: kicad\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-10-09 22:04+0100\n" -"PO-Revision-Date: 2008-10-15 13:53+0100\n" +"POT-Creation-Date: 2008-10-16 20:00+0100\n" +"PO-Revision-Date: 2008-10-16 20:06+0100\n" "Last-Translator: \n" "Language-Team: kicad team \n" "MIME-Version: 1.0\n" @@ -36,14 +36,11 @@ msgstr "Net Code" #: pcbnew/affiche.cpp:53 #: pcbnew/class_board.cpp:551 -#: pcbnew/class_module.cpp:1092 -#: pcbnew/menubarpcb.cpp:240 msgid "Pads" msgstr "Pads" #: pcbnew/affiche.cpp:67 #: pcbnew/class_board.cpp:561 -#: pcbnew/plotps.cpp:363 msgid "Vias" msgstr "Vias" @@ -52,7 +49,6 @@ msgid "Net Length" msgstr "Long. Net:" #: pcbnew/automove.cpp:207 -#: pcbnew/xchgmod.cpp:612 msgid "No Modules!" msgstr "Pas de Modules" @@ -150,62 +146,10 @@ msgid "Include egde layer" msgstr "Inclure couche Edge" #: pcbnew/block.cpp:154 -#: pcbnew/cotation.cpp:109 -#: pcbnew/dialog_edit_module.cpp:122 -#: pcbnew/dialog_copper_zones_frame.cpp:107 -#: pcbnew/dialog_orient_footprints.cpp:177 -#: pcbnew/globaleditpad.cpp:108 -#: pcbnew/muonde.cpp:352 -#: pcbnew/mirepcb.cpp:103 -#: pcbnew/modedit_onclick.cpp:192 -#: pcbnew/modedit_onclick.cpp:224 -#: pcbnew/pcbtexte.cpp:119 -#: pcbnew/sel_layer.cpp:163 -#: pcbnew/sel_layer.cpp:322 -#: pcbnew/set_color.cpp:357 -#: pcbnew/dialog_gendrill.cpp:297 -#: pcbnew/onrightclick.cpp:122 -#: pcbnew/onrightclick.cpp:136 -#: pcbnew/dialog_non_copper_zones_properties.cpp:47 -#: eeschema/onrightclick.cpp:98 -#: eeschema/onrightclick.cpp:110 -#: eeschema/sheetlab.cpp:98 -#: eeschema/eelayer.cpp:255 -#: eeschema/libedit_onrightclick.cpp:42 -#: eeschema/libedit_onrightclick.cpp:57 -#: gerbview/onrightclick.cpp:39 -#: gerbview/onrightclick.cpp:58 -#: gerbview/options.cpp:169 -#: gerbview/options.cpp:293 -#: gerbview/reglage.cpp:112 -#: gerbview/set_color.cpp:329 -#: common/displlst.cpp:111 -#: common/selcolor.cpp:171 -#: common/get_component_dialog.cpp:121 -#: share/svg_print.cpp:239 msgid "Cancel" msgstr "Annuler" #: pcbnew/block.cpp:157 -#: pcbnew/cotation.cpp:105 -#: pcbnew/dialog_edit_module.cpp:118 -#: pcbnew/dialog_orient_footprints.cpp:174 -#: pcbnew/muonde.cpp:348 -#: pcbnew/mirepcb.cpp:99 -#: pcbnew/pcbtexte.cpp:114 -#: pcbnew/sel_layer.cpp:159 -#: pcbnew/sel_layer.cpp:318 -#: pcbnew/set_color.cpp:353 -#: pcbnew/dialog_gendrill.cpp:292 -#: pcbnew/dialog_non_copper_zones_properties.cpp:43 -#: eeschema/sheetlab.cpp:94 -#: eeschema/eelayer.cpp:251 -#: gerbview/options.cpp:165 -#: gerbview/options.cpp:289 -#: gerbview/reglage.cpp:108 -#: gerbview/set_color.cpp:325 -#: common/displlst.cpp:106 -#: common/get_component_dialog.cpp:112 msgid "OK" msgstr "OK" @@ -254,48 +198,30 @@ msgid "Connect" msgstr "Connect" #: pcbnew/class_board.cpp:576 -#: eeschema/eelayer.h:115 msgid "NoConn" msgstr "Non Conn" #: pcbnew/class_board_item.cpp:23 -#: pcbnew/dialog_display_options.cpp:221 -#: pcbnew/dialog_display_options.cpp:229 -#: pcbnew/dialog_display_options.cpp:266 -#: pcbnew/dialog_copper_zones_frame.cpp:77 -#: pcbnew/pcbplot.cpp:415 -#: pcbnew/dialog_non_copper_zones_properties.cpp:28 -#: gerbview/options.cpp:321 msgid "Line" msgstr "Ligne" #: pcbnew/class_board_item.cpp:24 -#: pcbnew/dialog_pad_edit.cpp:198 msgid "Rect" msgstr "Rect" #: pcbnew/class_board_item.cpp:25 -#: pcbnew/class_drawsegment.cpp:311 msgid "Arc" msgstr "Arc" #: pcbnew/class_board_item.cpp:26 -#: pcbnew/class_drawsegment.cpp:307 -#: pcbnew/class_track.cpp:879 -#: pcbnew/dialog_pad_edit.cpp:176 -#: pcbnew/dialog_pad_edit.cpp:196 msgid "Circle" msgstr "Cercle" #: pcbnew/class_board_item.cpp:57 -#: pcbnew/class_pad.cpp:909 msgid "Net" msgstr "Net" #: pcbnew/class_board_item.cpp:62 -#: eeschema/dialog_build_BOM.cpp:298 -#: eeschema/component_class.cpp:110 -#: eeschema/edit_component_in_schematic.cpp:837 msgid "Footprint" msgstr "Module" @@ -339,20 +265,10 @@ msgid "Pcb Text" msgstr "Texte Pcb" #: pcbnew/class_board_item.cpp:100 -#: pcbnew/dialog_netlist.cpp:162 -#: eeschema/dialog_create_component.cpp:167 -#: eeschema/onrightclick.cpp:307 -#: eeschema/edit_component_in_schematic.cpp:759 -#: eeschema/eelayer.h:152 msgid "Reference" msgstr "Référence" #: pcbnew/class_board_item.cpp:104 -#: pcbnew/class_edge_mod.cpp:287 -#: pcbnew/class_text_mod.cpp:488 -#: eeschema/component_class.cpp:109 -#: eeschema/edit_component_in_schematic.cpp:797 -#: eeschema/eelayer.h:158 msgid "Value" msgstr "Valeur" @@ -363,8 +279,6 @@ msgid " of " msgstr " de " #: pcbnew/class_board_item.cpp:109 -#: pcbnew/class_text_mod.cpp:488 -#: pcbnew/class_text_mod.cpp:497 msgid "Text" msgstr "Texte" @@ -373,24 +287,19 @@ msgid "Graphic" msgstr "Graphique" #: pcbnew/class_board_item.cpp:127 -#: pcbnew/class_track.cpp:841 -#: pcbnew/pcbframe.cpp:467 msgid "Track" msgstr "Piste" #: pcbnew/class_board_item.cpp:134 #: pcbnew/class_board_item.cpp:205 -#: pcbnew/dialog_copper_zones_frame.cpp:143 msgid "Net:" msgstr "Net:" #: pcbnew/class_board_item.cpp:139 -#: pcbnew/class_zone.cpp:759 msgid "Zone Outline" msgstr "Contour de Zone" #: pcbnew/class_board_item.cpp:144 -#: pcbnew/class_zone.cpp:763 msgid "(Cutout)" msgstr "(Cutout)" @@ -399,17 +308,14 @@ msgid "Not on copper layer" msgstr "Pas sur Couches Cuivre" #: pcbnew/class_board_item.cpp:167 -#: pcbnew/class_zone.cpp:785 msgid "Not Found" msgstr " Non Trouvé" #: pcbnew/class_board_item.cpp:173 -#: pcbnew/class_track.cpp:845 msgid "Zone" msgstr "Zone" #: pcbnew/class_board_item.cpp:191 -#: pcbnew/pcbframe.cpp:499 msgid "Via" msgstr "Via" @@ -418,12 +324,10 @@ msgid "Blind/Buried" msgstr "Borgne/Aveugle" #: pcbnew/class_board_item.cpp:197 -#: pcbnew/pcbnew.h:292 msgid "Micro Via" msgstr "Micro Via" #: pcbnew/class_board_item.cpp:220 -#: pcbnew/class_marker.cpp:133 msgid "Marker" msgstr "Marqueur" @@ -443,8 +347,7 @@ msgstr "dimension" #: pcbnew/class_marker.cpp:133 #: pcbnew/class_text_mod.cpp:503 #: pcbnew/class_track.cpp:852 -#: pcbnew/class_zone.cpp:766 -#: gerbview/affiche.cpp:94 +#: pcbnew/class_zone.cpp:774 msgid "Type" msgstr "Type" @@ -467,10 +370,7 @@ msgstr "Segment" #: pcbnew/class_pcb_text.cpp:190 #: pcbnew/class_text_mod.cpp:516 #: pcbnew/class_track.cpp:909 -#: pcbnew/class_zone.cpp:800 -#: pcbnew/dialog_edit_module.cpp:262 -#: pcbnew/sel_layer.cpp:146 -#: gerbview/affiche.cpp:110 +#: pcbnew/class_zone.cpp:808 msgid "Layer" msgstr "Couche" @@ -479,19 +379,10 @@ msgstr "Couche" #: pcbnew/class_pcb_text.cpp:204 #: pcbnew/class_text_mod.cpp:528 #: pcbnew/class_track.cpp:932 -#: pcbnew/cotation.cpp:129 -#: pcbnew/dialog_edit_mod_text.cpp:254 -#: pcbnew/mirepcb.cpp:113 -#: pcbnew/pcbtexte.cpp:133 -#: eeschema/affiche.cpp:188 -#: eeschema/dialog_cmp_graphic_properties.cpp:189 -#: gerbview/affiche.cpp:52 -#: gerbview/affiche.cpp:114 msgid "Width" msgstr "Epaisseur" #: pcbnew/class_drc_item.cpp:39 -#: pcbnew/dialog_drc.cpp:484 msgid "Unconnected pads" msgstr "Pads non connectés" @@ -559,7 +450,6 @@ msgstr "Seg" #: pcbnew/class_module.cpp:1107 #: pcbnew/class_pad.cpp:903 #: pcbnew/class_text_mod.cpp:494 -#: cvpcb/setvisu.cpp:31 msgid "Module" msgstr "Module" @@ -596,9 +486,6 @@ msgstr "Stat" #: pcbnew/class_pad.cpp:1035 #: pcbnew/class_pcb_text.cpp:201 #: pcbnew/class_text_mod.cpp:525 -#: pcbnew/dialog_edit_module.cpp:273 -#: eeschema/affiche.cpp:117 -#: gerbview/affiche.cpp:49 msgid "Orient" msgstr "Orient" @@ -625,14 +512,12 @@ msgstr "RefP" #: pcbnew/class_pad.cpp:1006 #: pcbnew/class_pcb_text.cpp:207 #: pcbnew/class_text_mod.cpp:531 -#: gerbview/affiche.cpp:55 msgid "H Size" msgstr "Taille H" #: pcbnew/class_pad.cpp:1010 #: pcbnew/class_pcb_text.cpp:210 #: pcbnew/class_text_mod.cpp:534 -#: gerbview/affiche.cpp:58 msgid "V Size" msgstr "Taille V" @@ -655,38 +540,25 @@ msgid "Y pos" msgstr "Y pos" #: pcbnew/class_pcb_text.cpp:186 -#: gerbview/affiche.cpp:29 msgid "COTATION" msgstr "COTATION" #: pcbnew/class_pcb_text.cpp:188 -#: gerbview/affiche.cpp:32 msgid "PCB Text" msgstr "Texte Pcb" #: pcbnew/class_pcb_text.cpp:194 #: pcbnew/class_text_mod.cpp:522 -#: pcbnew/cotation.cpp:113 -#: pcbnew/modedit_onclick.cpp:243 -#: pcbnew/pcbtexte.cpp:180 -#: gerbview/affiche.cpp:40 -#: share/dialog_print.cpp:198 msgid "Mirror" msgstr "Miroir" #: pcbnew/class_pcb_text.cpp:196 #: pcbnew/class_text_mod.cpp:506 -#: pcbnew/dialog_display_options.cpp:275 -#: eeschema/dialog_options.cpp:280 -#: gerbview/affiche.cpp:43 msgid "No" msgstr "Non" #: pcbnew/class_pcb_text.cpp:198 #: pcbnew/class_text_mod.cpp:508 -#: pcbnew/dialog_display_options.cpp:274 -#: eeschema/dialog_options.cpp:279 -#: gerbview/affiche.cpp:45 msgid "Yes" msgstr "Oui" @@ -695,29 +567,20 @@ msgid "Ref." msgstr "Ref." #: pcbnew/class_text_mod.cpp:509 -#: pcbnew/cotation.cpp:114 -#: pcbnew/dialog_edit_mod_text.cpp:291 -#: pcbnew/pcbtexte.cpp:181 -#: pcbnew/dialog_general_options.cpp:289 -#: eeschema/affiche.cpp:92 -#: gerbview/options.cpp:176 -#: gerbview/tool_gerber.cpp:113 msgid "Display" msgstr "Affichage" #: pcbnew/class_track.cpp:868 -#: pcbnew/class_zone.cpp:788 -#: pcbnew/zones_by_polygon.cpp:897 +#: pcbnew/class_zone.cpp:796 msgid "NetName" msgstr "NetName" #: pcbnew/class_track.cpp:873 -#: pcbnew/class_zone.cpp:796 +#: pcbnew/class_zone.cpp:804 msgid "NetCode" msgstr "NetCode" #: pcbnew/class_track.cpp:881 -#: pcbnew/dialog_pad_edit.cpp:205 msgid "Standard" msgstr "Standard" @@ -725,27 +588,27 @@ msgstr "Standard" msgid "Diam" msgstr "Diam" -#: pcbnew/class_zone.cpp:791 +#: pcbnew/class_zone.cpp:799 msgid "Non Copper Zone" msgstr "Zone non Cuivre" -#: pcbnew/class_zone.cpp:804 +#: pcbnew/class_zone.cpp:812 msgid "Corners" msgstr "Sommets" -#: pcbnew/class_zone.cpp:810 +#: pcbnew/class_zone.cpp:818 msgid "No Grid" msgstr "Pas de Grille" -#: pcbnew/class_zone.cpp:811 +#: pcbnew/class_zone.cpp:819 msgid "Fill Grid" msgstr "Grille de Remplissage" -#: pcbnew/class_zone.cpp:816 +#: pcbnew/class_zone.cpp:824 msgid "Hatch lines" msgstr "Lignes de Hachure" -#: pcbnew/class_zone.cpp:822 +#: pcbnew/class_zone.cpp:830 msgid "Corners in DrawList" msgstr "Sommets en Liste de dessin" @@ -770,10 +633,6 @@ msgid "Merge" msgstr "Merge" #: pcbnew/clean.cpp:464 -#: pcbnew/dialog_pad_edit.cpp:186 -#: eeschema/dialog_edit_component_in_schematic.cpp:172 -#: eeschema/dialog_erc.cpp:193 -#: eeschema/dialog_erc.cpp:197 msgid "0" msgstr "0" @@ -877,7 +736,6 @@ msgstr "" " %s's \"texte module\" de %s." #: pcbnew/controle.cpp:172 -#: pcbnew/modedit.cpp:76 msgid "Selection Clarification" msgstr "Clarification de la Sélection" @@ -888,30 +746,15 @@ msgstr "Propriétés des Cotes" #: pcbnew/cotation.cpp:113 #: pcbnew/dialog_edit_module.cpp:270 #: pcbnew/dialog_edit_module.cpp:316 -#: pcbnew/muonde.cpp:360 -#: pcbnew/pcbtexte.cpp:180 -#: eeschema/onrightclick.cpp:293 -#: eeschema/dialog_edit_component_in_schematic.cpp:181 -#: eeschema/dialog_options.cpp:247 -#: eeschema/component_wizard/component_setup_frame.cpp:50 msgid "Normal" msgstr "Normal" #: pcbnew/cotation.cpp:125 -#: pcbnew/muonde.cpp:367 -#: pcbnew/mirepcb.cpp:108 -#: pcbnew/pcbtexte.cpp:129 -#: eeschema/sheet.cpp:177 -#: eeschema/sheet.cpp:183 -#: eeschema/pinedit-dialog.cpp:208 -#: eeschema/pinedit-dialog.cpp:214 -#: common/wxwineda.cpp:91 msgid "Size" msgstr "Taille " #: pcbnew/cotation.cpp:133 -#: pcbnew/dialog_copper_zones_frame.cpp:150 -#: gerbview/affiche.cpp:37 +#: pcbnew/dialog_copper_zones_frame.cpp:198 msgid "Layer:" msgstr "Couche:" @@ -949,9 +792,6 @@ msgstr "Pistes et vias" #: pcbnew/dialog_display_options.cpp:231 #: pcbnew/dialog_display_options.cpp:244 #: pcbnew/dialog_display_options.cpp:268 -#: pcbnew/pcbplot.cpp:415 -#: gerbview/options.cpp:298 -#: gerbview/options.cpp:321 msgid "Sketch" msgstr "Contour" @@ -960,10 +800,6 @@ msgstr "Contour" #: pcbnew/dialog_display_options.cpp:230 #: pcbnew/dialog_display_options.cpp:245 #: pcbnew/dialog_display_options.cpp:267 -#: pcbnew/pcbplot.cpp:415 -#: eeschema/dialog_cmp_graphic_properties.cpp:169 -#: gerbview/options.cpp:298 -#: gerbview/options.cpp:321 msgid "Filled" msgstr "Plein" @@ -973,8 +809,6 @@ msgstr "Pistes:" #: pcbnew/dialog_display_options.cpp:198 #: pcbnew/dialog_display_options.cpp:208 -#: pcbnew/dialog_general_options.cpp:451 -#: pcbnew/dialog_general_options.cpp:466 msgid "Always" msgstr "Toujours" @@ -984,8 +818,6 @@ msgstr "Nouvelle piste" #: pcbnew/dialog_display_options.cpp:200 #: pcbnew/dialog_display_options.cpp:206 -#: pcbnew/dialog_general_options.cpp:449 -#: pcbnew/dialog_general_options.cpp:464 msgid "Never" msgstr "Jamais" @@ -1034,12 +866,10 @@ msgid "Show Pad NoConnect" msgstr "Montrer non conn" #: pcbnew/dialog_display_options.cpp:269 -#: gerbview/options.cpp:322 msgid "Display other items:" msgstr "Afficher autres éléments" #: pcbnew/dialog_display_options.cpp:276 -#: eeschema/dialog_options.cpp:281 msgid "Show page limits" msgstr " Afficher limites de page" @@ -1049,24 +879,6 @@ msgstr " Afficher limites de page" #: pcbnew/dialog_track_options.cpp:322 #: pcbnew/dialog_graphic_items_options.cpp:263 #: pcbnew/dialog_initpcb.cpp:161 -#: pcbnew/set_grid.cpp:171 -#: pcbnew/swap_layers.cpp:223 -#: pcbnew/dialog_general_options.cpp:479 -#: pcbnew/dialog_pad_edit.cpp:215 -#: eeschema/dialog_create_component.cpp:198 -#: eeschema/dialog_cmp_graphic_properties.cpp:178 -#: eeschema/dialog_edit_component_in_schematic.cpp:241 -#: eeschema/dialog_edit_label.cpp:181 -#: eeschema/dialog_options.cpp:288 -#: eeschema/symbtext.cpp:177 -#: eeschema/dialog_build_BOM.cpp:344 -#: eeschema/sheet.cpp:198 -#: eeschema/pinedit-dialog.cpp:242 -#: eeschema/dialog_edit_component_in_lib.cpp:221 -#: cvpcb/dialog_display_options.cpp:187 -#: cvpcb/dialog_cvpcb_config.cpp:138 -#: gerbview/select_layers_to_pcb.cpp:285 -#: share/setpage.cpp:444 msgid "&OK" msgstr "&OK" @@ -1076,33 +888,11 @@ msgstr "&OK" #: pcbnew/dialog_track_options.cpp:328 #: pcbnew/dialog_graphic_items_options.cpp:267 #: pcbnew/dialog_initpcb.cpp:164 -#: pcbnew/set_grid.cpp:176 -#: pcbnew/swap_layers.cpp:227 -#: pcbnew/dialog_general_options.cpp:485 -#: pcbnew/dialog_pad_edit.cpp:219 -#: eeschema/dialog_create_component.cpp:203 -#: eeschema/dialog_cmp_graphic_properties.cpp:183 -#: eeschema/dialog_edit_component_in_schematic.cpp:233 -#: eeschema/dialog_edit_label.cpp:186 -#: eeschema/dialog_options.cpp:293 -#: eeschema/symbtext.cpp:182 -#: eeschema/netlist_control.cpp:144 -#: eeschema/netlist_control.cpp:267 -#: eeschema/sheet.cpp:194 -#: eeschema/pinedit-dialog.cpp:238 -#: eeschema/dialog_edit_component_in_lib.cpp:217 -#: cvpcb/dialog_display_options.cpp:192 -#: gerbview/select_layers_to_pcb.cpp:289 -#: share/setpage.cpp:448 msgid "&Cancel" msgstr "&Annuler" #: pcbnew/dialog_drc.cpp:430 #: pcbnew/dialog_netlist.cpp:193 -#: eeschema/dialog_create_component.cpp:179 -#: eeschema/dialog_edit_component_in_schematic.cpp:202 -#: eeschema/dialog_erc.cpp:239 -#: eeschema/dialog_edit_component_in_lib.cpp:169 msgid "Options" msgstr "Options" @@ -1148,7 +938,6 @@ msgid "Include tests for clearances between pad to pads" msgstr "Inclure test de l'isolation entre pads" #: pcbnew/dialog_drc.cpp:478 -#: pcbnew/onrightclick.cpp:649 msgid "Zones" msgstr "Zones" @@ -1242,12 +1031,10 @@ msgid "3D settings" msgstr "3D Caract" #: pcbnew/dialog_edit_module.cpp:184 -#: common/wxwineda.cpp:171 msgid "X" msgstr "X" #: pcbnew/dialog_edit_module.cpp:185 -#: common/wxwineda.cpp:180 msgid "Y" msgstr "Y" @@ -1256,18 +1043,14 @@ msgid "Change module(s)" msgstr "Change module(s)" #: pcbnew/dialog_edit_module.cpp:191 -#: pcbnew/modedit_onclick.cpp:250 msgid "Edit Module" msgstr "Edit Module" #: pcbnew/dialog_edit_module.cpp:195 -#: pcbnew/pcbtexte.cpp:137 msgid "Position" msgstr "Position" #: pcbnew/dialog_edit_module.cpp:220 -#: eeschema/onrightclick.cpp:343 -#: eeschema/dialog_edit_component_in_lib.cpp:206 msgid "Doc" msgstr "Doc" @@ -1284,7 +1067,6 @@ msgid "Add Field" msgstr "Ajouter Champ" #: pcbnew/dialog_edit_module.cpp:249 -#: eeschema/onrightclick.cpp:248 msgid "Edit Field" msgstr "Editer Champ" @@ -1293,7 +1075,6 @@ msgid "Delete Field" msgstr "Supprimer Champ" #: pcbnew/dialog_edit_module.cpp:261 -#: common/common.cpp:376 msgid "Component" msgstr "Composant" @@ -1302,7 +1083,6 @@ msgid "Copper" msgstr "Cuivre" #: pcbnew/dialog_edit_module.cpp:270 -#: pcbnew/dialog_pad_edit.cpp:190 msgid "User" msgstr "User" @@ -1371,7 +1151,6 @@ msgid "3D Shape Name" msgstr "3D forme" #: pcbnew/dialog_edit_module.cpp:422 -#: eeschema/dialog_eeschema_config.cpp:231 msgid "Browse" msgstr "Examiner" @@ -1442,7 +1221,6 @@ msgid "vertical" msgstr "Vertical" #: pcbnew/dialog_edit_mod_text.cpp:282 -#: pcbnew/pcbtexte.cpp:156 msgid "Orientation" msgstr "Orientation" @@ -1459,139 +1237,182 @@ msgid "Value:" msgstr "Valeur:" #: pcbnew/dialog_edit_mod_text.cpp:384 -#: pcbnew/pcbtexte.cpp:123 -#: eeschema/sheetlab.cpp:102 msgid "Text:" msgstr "Texte:" -#: pcbnew/dialog_copper_zones_frame.cpp:34 -msgid "Zone fill options" -msgstr "Options de remplissage de zone:" +#: pcbnew/dialog_copper_zones_frame.cpp:33 +msgid "Zone Setup:" +msgstr "Options Zone:" -#: pcbnew/dialog_copper_zones_frame.cpp:36 +#: pcbnew/dialog_copper_zones_frame.cpp:39 +msgid "Zone Fill Options:" +msgstr "Options Remplissage Zone:" + +#: pcbnew/dialog_copper_zones_frame.cpp:41 msgid "0.00000" msgstr "0.00000" -#: pcbnew/dialog_copper_zones_frame.cpp:36 -msgid "No Grid (For tests only!)" +#: pcbnew/dialog_copper_zones_frame.cpp:41 +msgid "No grid (For tests only!)" msgstr "Pas de grille (pour tests)" -#: pcbnew/dialog_copper_zones_frame.cpp:38 +#: pcbnew/dialog_copper_zones_frame.cpp:43 msgid "Grid Size for Filling:" msgstr "Taille de Grille pour Remplissage:" -#: pcbnew/dialog_copper_zones_frame.cpp:42 -msgid "Zone clearance value (mm):" -msgstr "Valeur isolation zone (mm):" - -#: pcbnew/dialog_copper_zones_frame.cpp:49 +#: pcbnew/dialog_copper_zones_frame.cpp:47 msgid "Include pads" -msgstr "Inclure oads" +msgstr "Inclure pads" -#: pcbnew/dialog_copper_zones_frame.cpp:49 +#: pcbnew/dialog_copper_zones_frame.cpp:47 msgid "Thermal relief" msgstr "Frein thermique" -#: pcbnew/dialog_copper_zones_frame.cpp:49 +#: pcbnew/dialog_copper_zones_frame.cpp:47 msgid "Exclude pads" msgstr "Exclure pads" -#: pcbnew/dialog_copper_zones_frame.cpp:51 -msgid "Pad in zone:" -msgstr "Pads en zone:" +#: pcbnew/dialog_copper_zones_frame.cpp:49 +msgid "Pad in Zone:" +msgstr "Pad en Zone:" -#: pcbnew/dialog_copper_zones_frame.cpp:66 +#: pcbnew/dialog_copper_zones_frame.cpp:54 +msgid "Thermal Reliefs Parameters" +msgstr "Pramètres FreinsThermiques" + +#: pcbnew/dialog_copper_zones_frame.cpp:56 +msgid "Antipad Size" +msgstr "Taille AntiPad" + +#: pcbnew/dialog_copper_zones_frame.cpp:61 +msgid "Define the gap around the pad" +msgstr "Definit l'espace autour du pad" + +#: pcbnew/dialog_copper_zones_frame.cpp:65 +msgid "Copper Width" +msgstr "Epaisseur Cuivre" + +#: pcbnew/dialog_copper_zones_frame.cpp:70 +msgid "Define the tickness of copper in therma reliefs" +msgstr "Définit l'épaisseur du cuivre dans les freins thermiques" + +#: pcbnew/dialog_copper_zones_frame.cpp:90 msgid "Outlines Options:" msgstr "Options des Contours:" -#: pcbnew/dialog_copper_zones_frame.cpp:68 -#: pcbnew/dialog_non_copper_zones_properties.cpp:34 -#: eeschema/dialog_options.cpp:273 +#: pcbnew/dialog_copper_zones_frame.cpp:92 msgid "Any" msgstr "Tout" -#: pcbnew/dialog_copper_zones_frame.cpp:68 +#: pcbnew/dialog_copper_zones_frame.cpp:92 msgid "H , V and 45 deg" msgstr "H, V et 45 deg" -#: pcbnew/dialog_copper_zones_frame.cpp:70 +#: pcbnew/dialog_copper_zones_frame.cpp:94 msgid "Zone edges orient:" msgstr "Direction contours zone:" -#: pcbnew/dialog_copper_zones_frame.cpp:77 -#: pcbnew/dialog_non_copper_zones_properties.cpp:28 -msgid "Hatched Outline" -msgstr "Contour Hachuré" +#: pcbnew/dialog_copper_zones_frame.cpp:98 +msgid "Hatched outline" +msgstr "Contour hachuré" -#: pcbnew/dialog_copper_zones_frame.cpp:77 -#: pcbnew/dialog_non_copper_zones_properties.cpp:28 -msgid "Full Hatched" -msgstr "Pleinement Hachuré" +#: pcbnew/dialog_copper_zones_frame.cpp:98 +msgid "Full hatched" +msgstr "Pleinement hachuré" -#: pcbnew/dialog_copper_zones_frame.cpp:79 +#: pcbnew/dialog_copper_zones_frame.cpp:100 msgid "Outlines Appearance" msgstr "Aspect des Contours" -#: pcbnew/dialog_copper_zones_frame.cpp:81 +#: pcbnew/dialog_copper_zones_frame.cpp:102 msgid "" -"How a zone outline is shoved:\n" -"Single line\n" -"Short hatching\n" -"Full area hatched" +"Choose how a zone outline is displayed\n" +"- Single line\n" +"- Short hatching\n" +"- Full zone area hatched" msgstr "" +"Choisir comment un coutour de zone est affiché\n" +"- Ligne simple\n" +"- Hachures courtes\n" +"- Hachures sur toute la surface" -#: pcbnew/dialog_copper_zones_frame.cpp:85 +#: pcbnew/dialog_copper_zones_frame.cpp:106 msgid "16 segments / 360 deg" msgstr "16 segments / 360 deg" -#: pcbnew/dialog_copper_zones_frame.cpp:85 +#: pcbnew/dialog_copper_zones_frame.cpp:106 msgid "32 segments / 360 deg" msgstr "32 segments / 360 deg" -#: pcbnew/dialog_copper_zones_frame.cpp:87 +#: pcbnew/dialog_copper_zones_frame.cpp:108 msgid "Arcs Approximation:" msgstr "Approximations des arcs:" -#: pcbnew/dialog_copper_zones_frame.cpp:89 +#: pcbnew/dialog_copper_zones_frame.cpp:110 msgid "" "Number of segments to approximate a circle in filling calculations.\n" "16 segment is faster to calculate and when redraw screen.\n" "32 segment give a better quality" msgstr "" -#: pcbnew/dialog_copper_zones_frame.cpp:103 -#: pcbnew/zone_filling_algorithm.cpp:247 +#: pcbnew/dialog_copper_zones_frame.cpp:115 +msgid "Others Options:" +msgstr "Autres Options:" + +#: pcbnew/dialog_copper_zones_frame.cpp:117 +msgid "Show filled areas in sketch mode" +msgstr "Affichersurfaces remplies en mode contour" + +#: pcbnew/dialog_copper_zones_frame.cpp:119 +msgid "" +"If enabled, filled areas in is this zone will be displayed as non filled polygons.\n" +"If disabled, filled areas in is this zone will be displayed as \"solid\" areas (normal mode)." +msgstr "" + +#: pcbnew/dialog_copper_zones_frame.cpp:123 +msgid "Zone clearance value (mm):" +msgstr "Valeur isolation zone (mm):" + +#: pcbnew/dialog_copper_zones_frame.cpp:134 +msgid "Export to others zones" +msgstr "Exporter vers autres zones" + +#: pcbnew/dialog_copper_zones_frame.cpp:135 +msgid "Export this zone setup to all others copper zones" +msgstr "" + +#: pcbnew/dialog_copper_zones_frame.cpp:151 msgid "Ok" msgstr "Ok" -#: pcbnew/dialog_copper_zones_frame.cpp:110 -msgid "Unfill zone" -msgstr "Vider zone" +#: pcbnew/dialog_copper_zones_frame.cpp:158 +msgid "Remove Filling" +msgstr "Supprimer Remplissage de Zone" -#: pcbnew/dialog_copper_zones_frame.cpp:117 +#: pcbnew/dialog_copper_zones_frame.cpp:165 msgid "Nets Display Options:" msgstr "Options d'Affichage des Nets" -#: pcbnew/dialog_copper_zones_frame.cpp:119 +#: pcbnew/dialog_copper_zones_frame.cpp:167 msgid "Alphabetic" msgstr "Alphabetique" -#: pcbnew/dialog_copper_zones_frame.cpp:119 +#: pcbnew/dialog_copper_zones_frame.cpp:167 msgid "Advanced" msgstr "Avancé" -#: pcbnew/dialog_copper_zones_frame.cpp:121 +#: pcbnew/dialog_copper_zones_frame.cpp:169 msgid "Net sorting:" msgstr "Tri des Equipotentielles:" -#: pcbnew/dialog_copper_zones_frame.cpp:123 +#: pcbnew/dialog_copper_zones_frame.cpp:171 msgid "" "Nets can be sorted:\n" "By alphabetic order\n" "By number of pads in the net (advanced)" msgstr "" -#: pcbnew/dialog_copper_zones_frame.cpp:127 +#: pcbnew/dialog_copper_zones_frame.cpp:175 msgid "Filter" msgstr "Filtre" @@ -1612,7 +1433,6 @@ msgid "Alternate Via Drill" msgstr "Perçage vias alternatif" #: pcbnew/dialog_track_options.cpp:208 -#: pcbnew/pcbnew.h:294 msgid "Through Via" msgstr "Via Traversante" @@ -1625,7 +1445,6 @@ msgid "Default Via Type" msgstr "Via par Défaut" #: pcbnew/dialog_track_options.cpp:223 -#: pcbnew/dialog_gendrill.cpp:284 msgid "Micro Vias:" msgstr "Micro Vias:" @@ -1786,13 +1605,6 @@ msgid "Keep or change an existing footprint when the netlist gives a different f msgstr "Garder ou changer une empreinte existante quand la netliste donne une empreinte différente" #: pcbnew/dialog_netlist.cpp:186 -#: pcbnew/onrightclick.cpp:584 -#: pcbnew/onrightclick.cpp:765 -#: pcbnew/onrightclick.cpp:820 -#: pcbnew/onrightclick.cpp:869 -#: eeschema/edit_component_in_lib.cpp:239 -#: eeschema/edit_component_in_lib.cpp:320 -#: eeschema/menubar.cpp:146 msgid "Delete" msgstr "Supprimer" @@ -1845,10 +1657,6 @@ msgid "Rebuild the full ratsnest (usefull after a manual pad netname edition)" msgstr "Recalculer le chevelu complet ( utile après une edition manuelle de nom de net sur pad)" #: pcbnew/dialog_netlist.cpp:232 -#: pcbnew/pcbplot.cpp:284 -#: pcbnew/xchgmod.cpp:137 -#: eeschema/annotate_dialog.cpp:230 -#: share/zoom.cpp:449 msgid "Close" msgstr "Fermer" @@ -1857,12 +1665,6 @@ msgid "Netlist File:" msgstr "Fichier Netliste:" #: pcbnew/dialog_netlist.cpp:253 -#: pcbnew/dialog_freeroute_exchange.cpp:222 -#: eeschema/plotps.cpp:227 -#: eeschema/dialog_erc.cpp:219 -#: eeschema/dialog_build_BOM.cpp:348 -#: eeschema/plothpgl.cpp:292 -#: share/dialog_print.cpp:242 msgid "&Close" msgstr "&Fermer" @@ -1908,7 +1710,6 @@ msgid "Bad value for footprints orientation" msgstr "Mauvaise valeur pour l'orientation des empreintes" #: pcbnew/tool_modedit.cpp:44 -#: eeschema/tool_lib.cpp:120 msgid "Select working library" msgstr "Sélection de la librairie de travail" @@ -1925,7 +1726,6 @@ msgid "Delete part in current library" msgstr "Supprimer composant en librairie de travail" #: pcbnew/tool_modedit.cpp:61 -#: pcbnew/xchgmod.cpp:156 msgid "New Module" msgstr "Nouveau Module" @@ -1954,16 +1754,10 @@ msgid "export module" msgstr "Exporter Module" #: pcbnew/tool_modedit.cpp:92 -#: eeschema/menubar.cpp:130 -#: eeschema/tool_lib.cpp:147 -#: eeschema/tool_sch.cpp:74 msgid "Undo last edition" msgstr "Defait dernière édition" #: pcbnew/tool_modedit.cpp:94 -#: eeschema/menubar.cpp:138 -#: eeschema/tool_lib.cpp:149 -#: eeschema/tool_sch.cpp:77 msgid "Redo the last undo command" msgstr "Refait la dernière commande defaite" @@ -1976,58 +1770,22 @@ msgid "Print Module" msgstr "Imprimer Module" #: pcbnew/tool_modedit.cpp:106 -#: pcbnew/tool_pcb.cpp:255 -#: eeschema/menubar.cpp:169 -#: eeschema/menubar.cpp:172 -#: eeschema/tool_lib.cpp:167 -#: eeschema/tool_sch.cpp:92 -#: eeschema/tool_viewlib.cpp:67 -#: gerbview/tool_gerber.cpp:273 -#: 3d-viewer/3d_toolbar.cpp:43 -#: share/zoom.cpp:361 msgid "Zoom in" msgstr "Zoom +" #: pcbnew/tool_modedit.cpp:110 -#: pcbnew/tool_pcb.cpp:259 -#: eeschema/menubar.cpp:177 -#: eeschema/menubar.cpp:180 -#: eeschema/tool_lib.cpp:171 -#: eeschema/tool_sch.cpp:96 -#: eeschema/tool_viewlib.cpp:71 -#: gerbview/tool_gerber.cpp:280 -#: 3d-viewer/3d_toolbar.cpp:46 -#: share/zoom.cpp:362 msgid "Zoom out" msgstr "Zoom -" #: pcbnew/tool_modedit.cpp:114 -#: pcbnew/tool_pcb.cpp:263 -#: eeschema/menubar.cpp:193 -#: eeschema/tool_lib.cpp:175 -#: eeschema/tool_sch.cpp:100 -#: eeschema/tool_viewlib.cpp:75 -#: gerbview/tool_gerber.cpp:287 -#: 3d-viewer/3d_toolbar.cpp:49 -#: share/zoom.cpp:369 msgid "Redraw view" msgstr "Redessin de l'écran" #: pcbnew/tool_modedit.cpp:119 -#: pcbnew/tool_pcb.cpp:268 -#: eeschema/menubar.cpp:186 -#: eeschema/menubar.cpp:196 -#: eeschema/tool_lib.cpp:181 -#: eeschema/tool_sch.cpp:105 -#: gerbview/tool_gerber.cpp:298 -#: 3d-viewer/3d_toolbar.cpp:52 -#: share/zoom.cpp:363 msgid "Zoom auto" msgstr "Zoom Automatique" #: pcbnew/tool_modedit.cpp:124 -#: pcbnew/modedit.cpp:399 -#: pcbnew/menubarmodedit.cpp:45 msgid "Pad Settings" msgstr "Caract pads" @@ -2040,78 +1798,51 @@ msgid "Add Pads" msgstr "Addition de \"pins\"" #: pcbnew/tool_modedit.cpp:159 -#: pcbnew/tool_pcb.cpp:429 msgid "Add graphic line or polygon" msgstr "Addition de lignes ou polygones graphiques" #: pcbnew/tool_modedit.cpp:163 -#: pcbnew/tool_pcb.cpp:433 msgid "Add graphic circle" msgstr "Addition de graphiques (Cercle)" #: pcbnew/tool_modedit.cpp:167 -#: pcbnew/tool_pcb.cpp:437 msgid "Add graphic arc" msgstr "Addition de graphiques (Arc de Cercle)" #: pcbnew/tool_modedit.cpp:171 #: pcbnew/edit.cpp:291 -#: eeschema/libframe.cpp:501 -#: eeschema/schedit.cpp:217 -#: gerbview/tool_gerber.cpp:387 msgid "Add Text" msgstr "Ajout de Texte" #: pcbnew/tool_modedit.cpp:176 -#: pcbnew/modedit.cpp:413 msgid "Place anchor" msgstr "Place Ancre" #: pcbnew/tool_modedit.cpp:181 -#: pcbnew/tool_pcb.cpp:455 -#: eeschema/menubar.cpp:146 -#: eeschema/tool_lib.cpp:90 -#: eeschema/tool_sch.cpp:228 -#: gerbview/tool_gerber.cpp:395 msgid "Delete items" msgstr "Suppression d'éléments" #: pcbnew/tool_modedit.cpp:203 -#: pcbnew/tool_pcb.cpp:328 -#: eeschema/tool_sch.cpp:250 -#: gerbview/tool_gerber.cpp:419 msgid "Display Grid OFF" msgstr "Suppression de l'affichage de la grille" #: pcbnew/tool_modedit.cpp:207 -#: pcbnew/tool_pcb.cpp:331 -#: gerbview/tool_gerber.cpp:425 msgid "Display Polar Coord ON" msgstr "Activer affichage coord Polaires" #: pcbnew/tool_modedit.cpp:211 -#: pcbnew/tool_pcb.cpp:333 -#: eeschema/tool_sch.cpp:254 -#: gerbview/tool_gerber.cpp:429 msgid "Units = Inch" msgstr "Unités = pouce" #: pcbnew/tool_modedit.cpp:215 -#: pcbnew/tool_pcb.cpp:335 -#: eeschema/tool_sch.cpp:258 -#: gerbview/tool_gerber.cpp:433 msgid "Units = mm" msgstr "Unités = mm" #: pcbnew/tool_modedit.cpp:221 -#: pcbnew/tool_pcb.cpp:338 -#: eeschema/tool_sch.cpp:262 -#: gerbview/tool_gerber.cpp:439 msgid "Change Cursor Shape" msgstr "Sélection de la forme du curseur" #: pcbnew/tool_modedit.cpp:229 -#: pcbnew/tool_pcb.cpp:360 msgid "Show Pads Sketch" msgstr "Afficher pastilles en contour" @@ -2124,8 +1855,6 @@ msgid "Show Edges Sketch" msgstr "Afficher Modules en contour" #: pcbnew/tool_modedit.cpp:276 -#: pcbnew/tool_pcb.cpp:577 -#: eeschema/plotps.cpp:189 msgid "Auto" msgstr "Auto" @@ -2145,7 +1874,6 @@ msgid "Grid %.3f" msgstr "Grille %.3f" #: pcbnew/tool_modedit.cpp:305 -#: pcbnew/tool_pcb.cpp:611 msgid "User Grid" msgstr "Grille perso" @@ -2206,19 +1934,14 @@ msgid "Save current board as.." msgstr "Sauver le Circuit Imprimé courant sous.." #: pcbnew/menubarpcb.cpp:91 -#: eeschema/menubar.cpp:75 -#: gerbview/tool_gerber.cpp:88 msgid "P&rint" msgstr "Imp&rimer" #: pcbnew/menubarpcb.cpp:91 -#: eeschema/menubar.cpp:75 -#: gerbview/tool_gerber.cpp:88 msgid "Print on current printer" msgstr "Imprimer sur l'imprimante par défaut" #: pcbnew/menubarpcb.cpp:96 -#: eeschema/menubar.cpp:105 msgid "&Plot" msgstr "&Tracer" @@ -2267,7 +1990,6 @@ msgid "Import a routed \"Specctra Session\" (*.ses) file" msgstr "Importer un fichier de routage \"Specctra Session\" (*.ses) " #: pcbnew/menubarpcb.cpp:140 -#: eeschema/libframe.cpp:525 msgid "Import" msgstr "Importer" @@ -2300,10 +2022,6 @@ msgid "Archive or Add footprints in a library file" msgstr "Archiver ou ajouter les modules dans un fichier librairie" #: pcbnew/menubarpcb.cpp:163 -#: eeschema/menubar.cpp:109 -#: cvpcb/tool_cvpcb.cpp:122 -#: kicad/buildmnu.cpp:122 -#: gerbview/tool_gerber.cpp:93 msgid "E&xit" msgstr "&Quitter" @@ -2312,18 +2030,14 @@ msgid "Quit pcbnew" msgstr "Quitter Pcbnew" #: pcbnew/menubarpcb.cpp:181 -#: eeschema/menubar.cpp:358 msgid "&Library" msgstr "&Librairie" #: pcbnew/menubarpcb.cpp:182 -#: cvpcb/tool_cvpcb.cpp:137 msgid "Setting Libraries, Directories and others..." msgstr "Sélectionner les librairies et répertoires" #: pcbnew/menubarpcb.cpp:186 -#: eeschema/menubar.cpp:364 -#: gerbview/tool_gerber.cpp:108 msgid "&Colors" msgstr "&Couleurs" @@ -2348,23 +2062,18 @@ msgid "Select what items are displayed" msgstr "Sélectionner les éléments a afficher" #: pcbnew/menubarpcb.cpp:207 -#: eeschema/menubar.cpp:382 msgid "&Save preferences" msgstr "&Sauver Préférences" #: pcbnew/menubarpcb.cpp:208 -#: eeschema/menubar.cpp:383 -#: gerbview/tool_gerber.cpp:123 msgid "Save application preferences" msgstr "Sauver préférences" #: pcbnew/menubarpcb.cpp:212 -#: eeschema/menubar.cpp:386 msgid "&Read preferences" msgstr "&Lire Préférences" #: pcbnew/menubarpcb.cpp:213 -#: eeschema/menubar.cpp:387 msgid "Read application preferences" msgstr "Lire préférences de l'application" @@ -2377,16 +2086,10 @@ msgid "Adjust size and width for tracks, vias" msgstr "Ajuster dims et taille des pistes et vias" #: pcbnew/menubarpcb.cpp:230 -#: pcbnew/tool_pcb.cpp:595 -#: eeschema/eelayer.cpp:223 -#: pcbnew/set_color.h:414 -#: eeschema/eelayer.h:214 -#: gerbview/set_color.h:324 msgid "Grid" msgstr "Grille" #: pcbnew/menubarpcb.cpp:231 -#: pcbnew/menubarmodedit.cpp:51 msgid "Adjust User Grid" msgstr "Ajuster Grille utilisateur" @@ -2395,17 +2098,14 @@ msgid "Texts and drawings" msgstr "&Textes et Tracés" #: pcbnew/menubarpcb.cpp:236 -#: pcbnew/menubarmodedit.cpp:41 msgid "Adjust width for texts and drawings" msgstr "Ajuster dims pour textes et graphiques" #: pcbnew/menubarpcb.cpp:241 -#: pcbnew/menubarmodedit.cpp:46 msgid "Adjust size,shape,layers... for Pads" msgstr "Ajuster taille, forme, couches... pour pads" #: pcbnew/menubarpcb.cpp:246 -#: gerbview/tool_gerber.cpp:122 msgid "&Save Setup" msgstr "&Sauver Options" @@ -2470,63 +2170,42 @@ msgid "Swap tracks on copper layers or drawings on others layers" msgstr "Permutation de couches" #: pcbnew/menubarpcb.cpp:299 -#: pcbnew/menubarmodedit.cpp:64 -#: eeschema/menubar.cpp:397 -#: cvpcb/tool_cvpcb.cpp:155 -#: kicad/buildmnu.cpp:190 -#: gerbview/tool_gerber.cpp:149 msgid "&Contents" msgstr "&Contenu" #: pcbnew/menubarpcb.cpp:299 -#: pcbnew/menubarmodedit.cpp:65 msgid "Open the pcbnew manual" msgstr "Ouvrir la documentation de pcbnew" #: pcbnew/menubarpcb.cpp:303 -#: pcbnew/menubarmodedit.cpp:73 msgid "&About pcbnew" msgstr "&Au sujet de r Pcbnew" #: pcbnew/menubarpcb.cpp:303 -#: pcbnew/menubarmodedit.cpp:74 msgid "About pcbnew PCB designer" msgstr "Au sujet de Pcbnew, concption de PCB" #: pcbnew/menubarpcb.cpp:311 -#: pcbnew/menubarmodedit.cpp:82 msgid "3D Display" msgstr "3D Visu" #: pcbnew/menubarpcb.cpp:311 -#: pcbnew/menubarmodedit.cpp:82 msgid "Show board in 3D viewer" msgstr "Visualisation du circuit en 3D" #: pcbnew/menubarpcb.cpp:315 -#: eeschema/menubar.cpp:407 -#: cvpcb/tool_cvpcb.cpp:164 -#: gerbview/tool_gerber.cpp:156 -#: 3d-viewer/3d_toolbar.cpp:116 msgid "&File" msgstr "&Fichiers" #: pcbnew/menubarpcb.cpp:316 -#: eeschema/menubar.cpp:411 -#: cvpcb/tool_cvpcb.cpp:165 -#: kicad/buildmnu.cpp:202 -#: gerbview/tool_gerber.cpp:157 -#: 3d-viewer/3d_toolbar.cpp:124 msgid "&Preferences" msgstr "&Préférences" #: pcbnew/menubarpcb.cpp:317 -#: pcbnew/menubarmodedit.cpp:86 msgid "&Dimensions" msgstr "&Dimensions" #: pcbnew/menubarpcb.cpp:318 -#: gerbview/tool_gerber.cpp:158 msgid "&Miscellaneous" msgstr "&Divers" @@ -2535,22 +2214,15 @@ msgid "P&ostprocess" msgstr "P&ostprocesseurs" #: pcbnew/menubarpcb.cpp:320 -#: pcbnew/menubarmodedit.cpp:87 msgid "&3D Display" msgstr "&3D Visu" #: pcbnew/menubarpcb.cpp:321 -#: pcbnew/menubarmodedit.cpp:88 -#: eeschema/menubar.cpp:412 -#: cvpcb/tool_cvpcb.cpp:166 -#: kicad/buildmnu.cpp:203 -#: gerbview/tool_gerber.cpp:161 msgid "&Help" msgstr "&Aide" #: pcbnew/pcbplot.cpp:147 #: pcbnew/pcbplot.cpp:272 -#: gerbview/tool_gerber.cpp:90 msgid "Plot" msgstr "Tracer" @@ -2607,7 +2279,6 @@ msgid "X scale adjust" msgstr "Ajustage Echelle X" #: pcbnew/pcbplot.cpp:259 -#: share/wxprint.cpp:189 msgid "Set X scale adjust for exact scale plotting" msgstr "Ajuster échelle X pour traçage à l'échelle exacte" @@ -2616,7 +2287,6 @@ msgid "Y scale adjust" msgstr "Ajustage Echelle Y" #: pcbnew/pcbplot.cpp:264 -#: share/wxprint.cpp:190 msgid "Set Y scale adjust for exact scale plotting" msgstr "Ajuster échelle Y pour traçage à l'échelle exacte" @@ -2637,7 +2307,6 @@ msgid "Exclude Edges_Pcb layer" msgstr "Exclure Couche Contours PCB" #: pcbnew/pcbplot.cpp:332 -#: share/dialog_print.cpp:149 msgid "Exclude contents of Edges_Pcb layer from all other layers" msgstr "Exclure les tracés contour PCB des autres couches" @@ -2722,12 +2391,10 @@ msgid "Scale 1.5" msgstr "Echelle 1,5" #: pcbnew/pcbplot.cpp:406 -#: share/dialog_print.cpp:163 msgid "Scale 2" msgstr "Echelle 2" #: pcbnew/pcbplot.cpp:406 -#: share/dialog_print.cpp:164 msgid "Scale 3" msgstr "Echelle 3" @@ -2832,9 +2499,6 @@ msgid "Local Ratsnest" msgstr "Monter le chevelu général" #: pcbnew/edit.cpp:569 -#: pcbnew/modedit.cpp:427 -#: eeschema/libframe.cpp:577 -#: eeschema/schedit.cpp:366 msgid "Delete item" msgstr "Suppression d'éléments" @@ -2889,19 +2553,6 @@ msgstr "Fichier GenCAD:" #: pcbnew/export_gencad.cpp:83 #: pcbnew/files.cpp:352 -#: pcbnew/plothpgl.cpp:67 -#: pcbnew/librairi.cpp:308 -#: pcbnew/librairi.cpp:454 -#: pcbnew/librairi.cpp:604 -#: pcbnew/librairi.cpp:808 -#: pcbnew/gen_modules_placefile.cpp:145 -#: pcbnew/gen_modules_placefile.cpp:161 -#: pcbnew/gen_modules_placefile.cpp:330 -#: eeschema/plotps.cpp:433 -#: eeschema/plothpgl.cpp:601 -#: cvpcb/genequiv.cpp:42 -#: gerbview/export_to_pcbnew.cpp:75 -#: common/hotkeys_basic.cpp:385 msgid "Unable to create " msgstr "Impossible de créer " @@ -2910,13 +2561,6 @@ msgid "Recovery file " msgstr "Fichier de secours " #: pcbnew/files.cpp:56 -#: pcbnew/librairi.cpp:256 -#: eeschema/find.cpp:241 -#: eeschema/find.cpp:249 -#: eeschema/find.cpp:695 -#: gerbview/dcode.cpp:266 -#: gerbview/readgerb.cpp:145 -#: common/eda_doc.cpp:150 msgid " not found" msgstr " non trouvé" @@ -2933,8 +2577,6 @@ msgid "Load board files:" msgstr "Charger Fichiers C.I.:" #: pcbnew/files.cpp:188 -#: pcbnew/librairi.cpp:77 -#: cvpcb/readschematicnetlist.cpp:110 #, c-format msgid "File <%s> not found" msgstr " fichier %s non trouvé" @@ -2986,7 +2628,6 @@ msgid "<%s> Not Found" msgstr "<%s> Non trouvé" #: pcbnew/find.cpp:238 -#: eeschema/dialog_find.cpp:117 msgid "Item to find:" msgstr "Elément a chercher:" @@ -3012,18 +2653,14 @@ msgstr "Fichier de percage" #: pcbnew/gendrill.cpp:322 #: pcbnew/gendrill.cpp:810 -#: pcbnew/plotps.cpp:51 -#: pcbnew/xchgmod.cpp:637 msgid "Unable to create file " msgstr "Impossible de créer le fichier " #: pcbnew/gendrill.cpp:378 -#: pcbnew/dialog_gendrill.cpp:184 msgid "2:3" msgstr "2:3" #: pcbnew/gendrill.cpp:379 -#: pcbnew/dialog_gendrill.cpp:185 msgid "2:4" msgstr "2:4" @@ -3145,7 +2782,6 @@ msgid "Delete draw items?" msgstr "Suppression éléments graphiques?" #: pcbnew/initpcb.cpp:249 -#: gerbview/initpcb.cpp:150 msgid "Delete Tracks?" msgstr "Effacer Pistes ?" @@ -3154,7 +2790,6 @@ msgid "Delete Modules?" msgstr "Effacement des Modules?" #: pcbnew/initpcb.cpp:295 -#: gerbview/initpcb.cpp:173 msgid "Delete Pcb Texts" msgstr "Effacer Textes Pcb" @@ -3175,7 +2810,6 @@ msgid "Arc Stub" msgstr "Arc Stub" #: pcbnew/muonde.cpp:175 -#: common/common.cpp:102 msgid " (mm):" msgstr " (mm):" @@ -3191,7 +2825,6 @@ msgstr " (pouce):" #: pcbnew/muonde.cpp:189 #: pcbnew/muonde.cpp:202 -#: pcbnew/gen_self.h:231 msgid "Incorrect number, abort" msgstr "Nombre incorrect, arret" @@ -3257,8 +2890,6 @@ msgid "Gap (inch):" msgstr "Gap (inch):" #: pcbnew/modules.cpp:81 -#: pcbnew/librairi.cpp:527 -#: common/get_component_dialog.cpp:98 msgid "Name:" msgstr "Nom:" @@ -3267,13 +2898,10 @@ msgid "Search footprint" msgstr "Cherche Module" #: pcbnew/modules.cpp:305 -#: pcbnew/onrightclick.cpp:733 msgid "Delete Module" msgstr "Supprimer Module" #: pcbnew/modules.cpp:306 -#: eeschema/find.cpp:220 -#: eeschema/onrightclick.cpp:304 msgid "Value " msgstr "Valeur " @@ -3306,25 +2934,18 @@ msgid "Open module editor" msgstr "Ouvrir Editeur de modules" #: pcbnew/tool_pcb.cpp:238 -#: eeschema/tool_sch.cpp:65 -#: gerbview/tool_gerber.cpp:245 msgid "Cut selected item" msgstr "Suppression des éléments sélectionnés" #: pcbnew/tool_pcb.cpp:242 -#: eeschema/tool_sch.cpp:68 -#: gerbview/tool_gerber.cpp:250 msgid "Copy selected item" msgstr "Copie des éléments sélectionnés" #: pcbnew/tool_pcb.cpp:244 -#: eeschema/tool_sch.cpp:71 -#: gerbview/tool_gerber.cpp:256 msgid "Paste" msgstr "Copie des éléments sauvegardés" #: pcbnew/tool_pcb.cpp:247 -#: gerbview/tool_gerber.cpp:263 msgid "Undelete" msgstr "Annulation du dernier effacement" @@ -3337,8 +2958,6 @@ msgid "Plot (HPGL, PostScript, or GERBER format)" msgstr "Tracer en format HPGL, POSTSCRIPT ou GERBER" #: pcbnew/tool_pcb.cpp:272 -#: eeschema/menubar.cpp:154 -#: eeschema/tool_sch.cpp:109 msgid "Find components and texts" msgstr "Recherche de composants et textes" @@ -3379,8 +2998,6 @@ msgid "Enable Auto Del Track" msgstr "Autoriser l'effacement automatique des pistes" #: pcbnew/tool_pcb.cpp:355 -#: pcbnew/pcbframe.cpp:434 -#: pcbnew/set_color.h:423 msgid "Show Zones" msgstr "Monter Zones" @@ -3389,7 +3006,6 @@ msgid "Show Tracks Sketch" msgstr "Afficher Pistes en Contour" #: pcbnew/tool_pcb.cpp:368 -#: pcbnew/pcbframe.cpp:455 msgid "Hight Contrast Mode Display" msgstr "Mode d'affichage Haut Contraste" @@ -3430,7 +3046,6 @@ msgid "Add dimension" msgstr "Ajout des cotes" #: pcbnew/tool_pcb.cpp:450 -#: gerbview/tool_gerber.cpp:380 msgid "Add layer alignment target" msgstr "Ajouter Mire de superposition" @@ -3491,27 +3106,18 @@ msgid "Target Shape:" msgstr "Forme Mire:" #: pcbnew/modedit_onclick.cpp:196 -#: eeschema/onrightclick.cpp:102 -#: eeschema/libedit_onrightclick.cpp:47 -#: gerbview/onrightclick.cpp:41 msgid "End Tool" msgstr "Fin Outil" #: pcbnew/modedit_onclick.cpp:206 -#: eeschema/libedit_onrightclick.cpp:231 -#: gerbview/onrightclick.cpp:50 msgid "Cancel Block" msgstr "Annuler Bloc" #: pcbnew/modedit_onclick.cpp:208 -#: eeschema/libedit_onrightclick.cpp:234 -#: gerbview/onrightclick.cpp:51 msgid "Zoom Block (drag middle mouse)" msgstr "Zoom Bloc (drag bouton du milieu souris)" #: pcbnew/modedit_onclick.cpp:211 -#: eeschema/libedit_onrightclick.cpp:238 -#: gerbview/onrightclick.cpp:53 msgid "Place Block" msgstr "Place Bloc" @@ -3532,8 +3138,6 @@ msgid "Delete Block (shift+ctrl + drag mouse)" msgstr "Effacement Bloc (shift+ctrl + drag mouse)" #: pcbnew/modedit_onclick.cpp:241 -#: pcbnew/onrightclick.cpp:759 -#: pcbnew/onrightclick.cpp:863 msgid "Rotate" msgstr "Rotation" @@ -3558,17 +3162,14 @@ msgid "Move Pad" msgstr "Déplace Pad" #: pcbnew/modedit_onclick.cpp:263 -#: pcbnew/onrightclick.cpp:798 msgid "Edit Pad" msgstr "Edit Pad" #: pcbnew/modedit_onclick.cpp:265 -#: pcbnew/onrightclick.cpp:802 msgid "New Pad Settings" msgstr "Nouvelles Caract. Pads" #: pcbnew/modedit_onclick.cpp:267 -#: pcbnew/onrightclick.cpp:806 msgid "Export Pad Settings" msgstr "Exporte Caract. Pads" @@ -3577,7 +3178,6 @@ msgid "delete Pad" msgstr "Supprimer Pad" #: pcbnew/modedit_onclick.cpp:274 -#: pcbnew/onrightclick.cpp:813 msgid "Global Pad Settings" msgstr "Edition Globale des pads" @@ -3610,10 +3210,6 @@ msgid "Place edge" msgstr "Place contour" #: pcbnew/modedit_onclick.cpp:306 -#: pcbnew/onrightclick.cpp:727 -#: pcbnew/onrightclick.cpp:761 -#: pcbnew/onrightclick.cpp:865 -#: eeschema/onrightclick.cpp:300 msgid "Edit" msgstr "Editer" @@ -3659,7 +3255,6 @@ msgid "Unable to drag this segment: two collinear segments" msgstr "Impossible de drag ce segment: 2 segments alignés" #: pcbnew/muwave_command.cpp:52 -#: eeschema/libframe.cpp:517 msgid "Add Line" msgstr "Addition de lignes" @@ -3762,20 +3357,15 @@ msgid "Cotation not authorized on Copper layers" msgstr "Cotation non autorisée sur Couches Cuivre" #: pcbnew/pcbcfg.cpp:71 -#: eeschema/eeconfig.cpp:60 -#: cvpcb/menucfg.cpp:140 msgid "Read config file" msgstr "Lire config" #: pcbnew/pcbcfg.cpp:85 -#: cvpcb/menucfg.cpp:152 #, c-format msgid "File %s not found" msgstr " fichier %s non trouvé" #: pcbnew/pcbcfg.cpp:205 -#: eeschema/eeconfig.cpp:200 -#: cvpcb/cfg.cpp:75 msgid "Save preferences" msgstr "Sauver préférences" @@ -3852,13 +3442,10 @@ msgstr "Attention: Les couches dessus et dessous sont les mêmes" #: pcbnew/set_color.cpp:269 #: pcbnew/set_color.cpp:296 -#: gerbview/set_color.cpp:258 -#: gerbview/set_color.cpp:285 msgid "Show None" msgstr "Rien Afficher" #: pcbnew/set_color.cpp:278 -#: gerbview/set_color.cpp:267 msgid "Show All" msgstr "Tout Afficher" @@ -3871,20 +3458,14 @@ msgid "Switch off all of the copper layers" msgstr "N'affiche pas les couches cuivre" #: pcbnew/set_color.cpp:361 -#: eeschema/eelayer.cpp:260 -#: gerbview/set_color.cpp:333 msgid "Apply" msgstr "Appliquer" #: pcbnew/set_grid.cpp:147 -#: pcbnew/dialog_gendrill.cpp:167 -#: pcbnew/dialog_general_options.cpp:299 -#: gerbview/options.cpp:185 msgid "Inches" msgstr "Pouces" #: pcbnew/set_grid.cpp:148 -#: share/drawframe.cpp:388 msgid "mm" msgstr "mm" @@ -3933,7 +3514,6 @@ msgid "Add Pad" msgstr "Ajouter Pastilles" #: pcbnew/modedit.cpp:409 -#: eeschema/schedit.cpp:197 msgid "Add Drawing" msgstr "Ajout d'éléments graphiques" @@ -4036,21 +3616,21 @@ msgstr "Change module %s (%s) " msgid "Cmp files:" msgstr "Fichiers Cmp: " -#: pcbnew/zones_by_polygon.cpp:324 -#: pcbnew/zones_by_polygon.cpp:380 -#: pcbnew/zones_by_polygon.cpp:709 +#: pcbnew/zones_by_polygon.cpp:328 +#: pcbnew/zones_by_polygon.cpp:384 +#: pcbnew/zones_by_polygon.cpp:717 msgid "Area: DRC outline error" msgstr "Zone; Erreur DRC sur contour" -#: pcbnew/zones_by_polygon.cpp:592 +#: pcbnew/zones_by_polygon.cpp:599 msgid "DRC error: this start point is inside or too close an other area" msgstr "Erreur DRC: ce point de départ est a l'intérieur d'une autre zone ou trop proche" -#: pcbnew/zones_by_polygon.cpp:654 +#: pcbnew/zones_by_polygon.cpp:662 msgid "DRC error: closing this area creates a drc error with an other area" msgstr "Erreur DRC: la fermeture de cette zone crée une erreur DRC avec une autre zone" -#: pcbnew/zones_by_polygon.cpp:895 +#: pcbnew/zones_by_polygon.cpp:903 msgid "No Net" msgstr "No Net" @@ -4063,7 +3643,6 @@ msgid "Place module" msgstr "Place module" #: pcbnew/loadcmp.cpp:215 -#: eeschema/eelibs_read_libraryfiles.cpp:64 #, c-format msgid "Library <%s> not found" msgstr "Librairie %s non trouvée" @@ -4084,12 +3663,10 @@ msgstr "Module <%s> non trouvé" #: pcbnew/loadcmp.cpp:369 #: pcbnew/librairi.cpp:256 -#: eeschema/eelibs_read_libraryfiles.cpp:144 msgid "Library " msgstr "Librairie " #: pcbnew/loadcmp.cpp:369 -#: eeschema/eelibs_read_libraryfiles.cpp:148 msgid " loaded" msgstr " chargé" @@ -4158,7 +3735,6 @@ msgid "File %s exists, OK to replace ?" msgstr "Fichier %s existant, OK pour remplacer ?" #: pcbnew/librairi.cpp:203 -#: eeschema/symbedit.cpp:165 #, c-format msgid "Unable to create <%s>" msgstr "Incapable de créer <%s>" @@ -4399,7 +3975,6 @@ msgstr "Choisir l'origine des coordonnées: absolue ou relative à l'axe auxilia #: pcbnew/dialog_gendrill.cpp:205 #: pcbnew/dialog_gendrill.cpp:215 -#: eeschema/libedit.cpp:41 msgid "None" msgstr "Aucun" @@ -4440,15 +4015,10 @@ msgid "Speed (cm/s)" msgstr "Vitesse plume ( cm/s )" #: pcbnew/dialog_gendrill.cpp:233 -#: eeschema/plothpgl.cpp:256 msgid "Pen Number" msgstr "Numéro de plume" #: pcbnew/dialog_gendrill.cpp:239 -#: pcbnew/dialog_general_options.cpp:376 -#: eeschema/dialog_build_BOM.cpp:283 -#: eeschema/netlist_control.cpp:121 -#: share/dialog_print.cpp:187 msgid "Options:" msgstr "Options :" @@ -4540,7 +4110,6 @@ msgid "Sizes and Widths" msgstr "Dims. et Epaiss." #: pcbnew/menubarmodedit.cpp:50 -#: pcbnew/set_grid.h:39 msgid "User Grid Size" msgstr "Dim Grille utilisteur" @@ -4597,7 +4166,6 @@ msgid "Move Drawing" msgstr "Déplace Tracé" #: pcbnew/onrightclick.cpp:238 -#: eeschema/onrightclick.cpp:208 msgid "End Drawing" msgstr "Fin tracé" @@ -4606,7 +4174,6 @@ msgid "Edit Drawing" msgstr "Edit Tracé" #: pcbnew/onrightclick.cpp:243 -#: eeschema/onrightclick.cpp:210 msgid "Delete Drawing" msgstr "Supprimer Tracé" @@ -4623,7 +4190,6 @@ msgid "Delete Last Corner" msgstr "Supprimer Dernier Sommet" #: pcbnew/onrightclick.cpp:275 -#: eeschema/onrightclick.cpp:155 msgid "Delete Marker" msgstr "Effacer Marqueur" @@ -4740,23 +4306,18 @@ msgid "Read Global AutoRouter Data" msgstr "Lire Données de L'autorouteur global" #: pcbnew/onrightclick.cpp:450 -#: eeschema/onrightclick.cpp:609 msgid "Cancel block" msgstr "Annuler bloc" #: pcbnew/onrightclick.cpp:452 -#: eeschema/onrightclick.cpp:615 msgid "Zoom block" msgstr "Zoom bloc" #: pcbnew/onrightclick.cpp:455 -#: eeschema/onrightclick.cpp:617 msgid "Place block" msgstr "Place bloc" #: pcbnew/onrightclick.cpp:457 -#: eeschema/onrightclick.cpp:626 -#: eeschema/libedit_onrightclick.cpp:244 msgid "Copy block" msgstr "Copie bloc" @@ -4769,8 +4330,6 @@ msgid "Rotate block" msgstr "Rotation bloc" #: pcbnew/onrightclick.cpp:463 -#: eeschema/onrightclick.cpp:630 -#: eeschema/libedit_onrightclick.cpp:247 msgid "Delete block" msgstr "Effacer bloc" @@ -4999,7 +4558,6 @@ msgid "Rotate +" msgstr "Rotation +" #: pcbnew/onrightclick.cpp:722 -#: eeschema/onrightclick.cpp:288 msgid "Rotate -" msgstr "Rotation -" @@ -5067,6 +4625,14 @@ msgstr "URL FreeRouting.net" msgid "The URL of the FreeRouting.net website" msgstr "L' URL du site FreeRouting.net" +#: pcbnew/dialog_non_copper_zones_properties.cpp:28 +msgid "Hatched Outline" +msgstr "Contour Hachuré" + +#: pcbnew/dialog_non_copper_zones_properties.cpp:28 +msgid "Full Hatched" +msgstr "Pleinement Hachuré" + #: pcbnew/dialog_non_copper_zones_properties.cpp:30 msgid "Outlines Appearence" msgstr "Aspect des Contours" @@ -5080,12 +4646,11 @@ msgid "Zone Edges Orient" msgstr "Direction contours zone" #: pcbnew/dialog_non_copper_zones_properties.cpp:54 -#: gerbview/select_layers_to_pcb.cpp:91 msgid "Layer selection:" msgstr "Sélection couche:" #: pcbnew/zones_non_copper_type_functions.cpp:152 -#: pcbnew/dialog_copper_zones.cpp:335 +#: pcbnew/dialog_copper_zones.cpp:369 msgid "Error : you must choose a layer" msgstr "Erreur. Vous devez choisir une couche" @@ -5097,55 +4662,35 @@ msgstr "Valeur isolation zone:" msgid "Grid :" msgstr "Grille:" -#: pcbnew/dialog_copper_zones.cpp:344 +#: pcbnew/dialog_copper_zones.cpp:381 msgid "Error : you must choose a net name" msgstr "Erreur. Vous devez choisir une équipotentielle" #: pcbnew/dialog_setup_libs.cpp:97 -#: eeschema/dialog_eeschema_config.cpp:105 -#: cvpcb/dialog_cvpcb_config.cpp:75 -#: gerbview/reglage.cpp:90 msgid "from " msgstr "De " #: pcbnew/dialog_setup_libs.cpp:153 -#: eeschema/dialog_eeschema_config.cpp:161 -#: cvpcb/dialog_display_options.cpp:178 -#: cvpcb/dialog_cvpcb_config.cpp:128 msgid "Save Cfg" msgstr "Sauver config" #: pcbnew/dialog_setup_libs.cpp:159 -#: eeschema/dialog_eeschema_config.cpp:178 -#: cvpcb/dialog_cvpcb_config.cpp:143 msgid "Files ext:" msgstr "Ext. Fichiers" #: pcbnew/dialog_setup_libs.cpp:175 -#: cvpcb/dialog_cvpcb_config.cpp:162 -#: cvpcb/dialog_cvpcb_config.cpp:194 msgid "Del" msgstr "Supprimer" #: pcbnew/dialog_setup_libs.cpp:179 -#: eeschema/edit_component_in_lib.cpp:233 -#: eeschema/edit_component_in_lib.cpp:312 -#: eeschema/dialog_eeschema_config.cpp:197 -#: cvpcb/dialog_cvpcb_config.cpp:166 -#: cvpcb/dialog_cvpcb_config.cpp:198 msgid "Add" msgstr "Ajouter" #: pcbnew/dialog_setup_libs.cpp:183 -#: eeschema/dialog_eeschema_config.cpp:203 -#: cvpcb/dialog_cvpcb_config.cpp:170 -#: cvpcb/dialog_cvpcb_config.cpp:202 msgid "Ins" msgstr "Insérer" #: pcbnew/dialog_setup_libs.cpp:191 -#: eeschema/dialog_eeschema_config.cpp:213 -#: cvpcb/dialog_cvpcb_config.cpp:177 msgid "Libraries" msgstr "Librairies" @@ -5154,7 +4699,6 @@ msgid "Lib Modules Dir:" msgstr "Repertoire Lib Modules:" #: pcbnew/dialog_setup_libs.cpp:206 -#: cvpcb/menucfg.cpp:62 msgid "Module Doc File:" msgstr "Fichiers Doc des Modules" @@ -5175,15 +4719,10 @@ msgid "Net ext: " msgstr "Net ext: " #: pcbnew/dialog_setup_libs.cpp:367 -#: eeschema/dialog_eeschema_config.cpp:368 -#: cvpcb/menucfg.cpp:202 msgid "Library files:" msgstr "Fichiers Librairies:" #: pcbnew/dialog_setup_libs.cpp:392 -#: eeschema/dialog_eeschema_config.cpp:394 -#: cvpcb/menucfg.cpp:227 -#: cvpcb/menucfg.cpp:295 msgid "Library already in use" msgstr "Librairie déjà en usage" @@ -5204,38 +4743,30 @@ msgid "Module count" msgstr "Nb Modules" #: pcbnew/dialog_general_options.cpp:288 -#: gerbview/options.cpp:175 msgid "No Display" msgstr "Pas d'affichage" #: pcbnew/dialog_general_options.cpp:291 -#: gerbview/options.cpp:177 msgid "Display Polar Coord" msgstr "Affichage coord Polaires" #: pcbnew/dialog_general_options.cpp:300 -#: gerbview/options.cpp:186 msgid "millimeters" msgstr "millimetres" #: pcbnew/dialog_general_options.cpp:302 -#: eeschema/dialog_options.cpp:264 -#: gerbview/options.cpp:187 msgid "Units" msgstr "Unités" #: pcbnew/dialog_general_options.cpp:309 -#: gerbview/options.cpp:193 msgid "Small" msgstr "Petit" #: pcbnew/dialog_general_options.cpp:310 -#: gerbview/options.cpp:193 msgid "Big" msgstr "Grand" #: pcbnew/dialog_general_options.cpp:312 -#: gerbview/options.cpp:194 msgid "Cursor" msgstr "Curseur" @@ -5276,7 +4807,6 @@ msgid "Segments 45 Only" msgstr "Segments 45 seulement" #: pcbnew/dialog_general_options.cpp:429 -#: eeschema/dialog_options.cpp:256 msgid "Auto PAN" msgstr "Auto PAN" @@ -5327,12 +4857,10 @@ msgid "90" msgstr "90" #: pcbnew/dialog_pad_edit.cpp:188 -#: eeschema/dialog_edit_component_in_schematic.cpp:175 msgid "-90" msgstr "-90" #: pcbnew/dialog_pad_edit.cpp:189 -#: eeschema/dialog_edit_component_in_schematic.cpp:174 msgid "180" msgstr "180" @@ -5353,7 +4881,6 @@ msgid "SMD" msgstr "CMS" #: pcbnew/dialog_pad_edit.cpp:207 -#: eeschema/netlist.cpp:245 msgid "Conn" msgstr "Conn" @@ -5422,9 +4949,6 @@ msgid "Board modified, Save before exit ?" msgstr "Circuit Imprimé modifiée, Sauver avant de quitter ?" #: pcbnew/pcbframe.cpp:281 -#: eeschema/schframe.cpp:309 -#: cvpcb/cvframe.cpp:178 -#: common/confirm.cpp:119 msgid "Confirmation" msgstr "Confirmation" @@ -5445,12 +4969,10 @@ msgid "Display Polar Coords" msgstr "Affichage coord Polaires" #: pcbnew/pcbframe.cpp:402 -#: eeschema/schframe.cpp:407 msgid "Grid not show" msgstr "Grille non montrée" #: pcbnew/pcbframe.cpp:402 -#: eeschema/schframe.cpp:407 msgid "Show Grid" msgstr "Afficher grille" @@ -5671,7 +5193,6 @@ msgid "FileName" msgstr "Nom Fichier" #: eeschema/affiche.cpp:37 -#: eeschema/component_class.cpp:108 msgid "Ref" msgstr "Ref" @@ -5696,7 +5217,6 @@ msgid "PinName" msgstr "Nom Pin" #: eeschema/affiche.cpp:80 -#: eeschema/eelayer.h:140 msgid "PinNum" msgstr "Num Pin" @@ -5719,44 +5239,31 @@ msgid "Length" msgstr "Longueur" #: eeschema/affiche.cpp:102 -#: eeschema/dialog_edit_label.cpp:150 -#: eeschema/pinedit-dialog.cpp:225 msgid "Up" msgstr "Haut" #: eeschema/affiche.cpp:105 -#: eeschema/dialog_edit_label.cpp:152 -#: eeschema/pinedit-dialog.cpp:226 msgid "Down" msgstr "Bas" #: eeschema/affiche.cpp:108 -#: eeschema/dialog_edit_label.cpp:151 -#: eeschema/pinedit-dialog.cpp:224 msgid "Left" msgstr "Gauche" #: eeschema/affiche.cpp:111 -#: eeschema/dialog_edit_label.cpp:149 -#: eeschema/pinedit-dialog.cpp:223 msgid "Right" msgstr "Droite" #: eeschema/affiche.cpp:169 #: eeschema/affiche.cpp:175 -#: share/dialog_print.cpp:218 -#: share/svg_print.cpp:229 msgid "All" msgstr "Tout" #: eeschema/affiche.cpp:172 -#: eeschema/onrightclick.cpp:328 msgid "Unit" msgstr "Unité" #: eeschema/affiche.cpp:182 -#: eeschema/onrightclick.cpp:315 -#: eeschema/dialog_edit_component_in_schematic.cpp:191 msgid "Convert" msgstr "Convert" @@ -5799,7 +5306,6 @@ msgid " Not Found" msgstr " Non trouvé" #: eeschema/find.cpp:653 -#: eeschema/selpart.cpp:39 msgid "No libraries are loaded" msgstr "Pas de librairies chargées" @@ -5832,23 +5338,18 @@ msgid "Nothing found" msgstr " Rien trouvé" #: eeschema/dialog_create_component.cpp:171 -#: eeschema/component_class.cpp:59 msgid "U" msgstr "U" #: eeschema/dialog_create_component.cpp:183 -#: eeschema/edit_component_in_lib.cpp:401 msgid "As Convert" msgstr "A une forme \"convertie\"" #: eeschema/dialog_create_component.cpp:187 -#: eeschema/dialog_edit_component_in_lib.cpp:161 msgid "Power symbol" msgstr "Symbole alimentation" #: eeschema/dialog_create_component.cpp:191 -#: eeschema/dialog_edit_component_in_schematic.cpp:188 -#: eeschema/dialog_edit_component_in_lib.cpp:165 msgid "Parts are locked" msgstr "Les parts sont verrouillées" @@ -5969,17 +5470,14 @@ msgid "Show Pin Number" msgstr "Montrer Numéro de Pin" #: eeschema/dialog_create_component.cpp:254 -#: eeschema/edit_component_in_lib.cpp:418 msgid "Show Pin Name" msgstr "Montre Nom de Pin" #: eeschema/dialog_create_component.cpp:258 -#: eeschema/edit_component_in_lib.cpp:429 msgid "Pin Name Inside" msgstr "Nom de pin a l'intérieur" #: eeschema/dialog_create_component.cpp:262 -#: eeschema/dialog_edit_component_in_lib.cpp:155 msgid "Skew:" msgstr "Décalage:" @@ -6002,7 +5500,6 @@ msgstr "Feuille %s (fichier %s) modifiée. La sauver?" #: eeschema/netform.cpp:60 #: eeschema/netform.cpp:278 -#: eeschema/save_schemas.cpp:86 msgid "Failed to create file " msgstr "Impossible de créer le fichier " @@ -6301,13 +5798,10 @@ msgid "Options :" msgstr "Options :" #: eeschema/dialog_cmp_graphic_properties.cpp:156 -#: eeschema/symbtext.cpp:162 msgid "Common to Units" msgstr "Commun aux Unités" #: eeschema/dialog_cmp_graphic_properties.cpp:160 -#: eeschema/symbtext.cpp:166 -#: eeschema/pinedit-dialog.cpp:197 msgid "Common to convert" msgstr "Commun a converti" @@ -6324,7 +5818,6 @@ msgid "Fill:" msgstr "Remplissage:" #: eeschema/edit_component_in_lib.cpp:168 -#: eeschema/dialog_edit_component_in_lib.h:56 msgid "Lib Component Properties" msgstr "Propriétés du composant librairie" @@ -6337,7 +5830,6 @@ msgid "(alias of " msgstr "(alias de " #: eeschema/edit_component_in_lib.cpp:216 -#: eeschema/dialog_edit_component_in_lib.cpp:210 msgid "Alias" msgstr "Alias" @@ -6382,7 +5874,6 @@ msgstr "Alignement au sommet" #: eeschema/edit_component_in_lib.cpp:484 #: eeschema/dialog_edit_component_in_schematic.cpp:226 -#: eeschema/eelayer.h:164 msgid "Fields" msgstr "Champs" @@ -6393,22 +5884,18 @@ msgstr "Texte visible" #: eeschema/edit_component_in_lib.cpp:502 #: eeschema/dialog_edit_component_in_schematic.cpp:216 -#: eeschema/symbtext.cpp:170 msgid "Vertical" msgstr "Vertical" #: eeschema/edit_component_in_lib.cpp:508 -#: eeschema/edit_component_in_schematic.cpp:206 msgid "Field Name:" msgstr "Nom Champ" #: eeschema/edit_component_in_lib.cpp:518 -#: eeschema/edit_component_in_schematic.cpp:216 msgid "Field Text:" msgstr "Texte du Champ:" #: eeschema/edit_component_in_lib.cpp:524 -#: eeschema/edit_component_in_schematic.cpp:224 msgid "Pos" msgstr "Pos" @@ -6425,7 +5912,6 @@ msgid "Chip Name" msgstr "Nom en librairie" #: eeschema/edit_component_in_lib.cpp:554 -#: eeschema/edit_component_in_schematic.cpp:200 msgid "Field to edit" msgstr "Champ à éditer" @@ -6471,7 +5957,6 @@ msgid "Delete Convert items" msgstr "Suppression des éléments convertis" #: eeschema/edit_component_in_lib.cpp:1144 -#: common/eda_doc.cpp:134 msgid "Doc Files" msgstr "Fichiers de Doc" @@ -6484,17 +5969,14 @@ msgid "New FootprintFilter:" msgstr "Nouveau Filtre de Modules:" #: eeschema/plotps.cpp:190 -#: eeschema/plothpgl.cpp:223 msgid "Page Size A4" msgstr "Feuille A4" #: eeschema/plotps.cpp:191 -#: eeschema/plothpgl.cpp:228 msgid "Page Size A" msgstr "Feuille A" #: eeschema/plotps.cpp:192 -#: eeschema/plothpgl.cpp:233 msgid "Plot page size:" msgstr "Format de la feuille:" @@ -6507,8 +5989,6 @@ msgid "B/W" msgstr "N/B" #: eeschema/plotps.cpp:204 -#: share/dialog_print.cpp:203 -#: share/svg_print.cpp:212 msgid "Color" msgstr "Couleur" @@ -6517,18 +5997,14 @@ msgid "Plot Color:" msgstr "Tracé et Couleurs:" #: eeschema/plotps.cpp:209 -#: share/dialog_print.cpp:194 -#: share/svg_print.cpp:218 msgid "Print Sheet Ref" msgstr "Imprimer cartouche" #: eeschema/plotps.cpp:218 -#: eeschema/plothpgl.cpp:283 msgid "&Plot page" msgstr "&Tracer Page" #: eeschema/plotps.cpp:223 -#: eeschema/plothpgl.cpp:288 msgid "Plot a&ll" msgstr "&Tout tracer" @@ -6547,7 +6023,6 @@ msgid "Plot: %s\n" msgstr "Trace: %s\n" #: eeschema/menubar.cpp:41 -#: gerbview/tool_gerber.cpp:63 msgid "&New" msgstr "&Nouveau" @@ -6556,7 +6031,6 @@ msgid "New schematic" msgstr "Nouvelle schématique" #: eeschema/menubar.cpp:47 -#: cvpcb/tool_cvpcb.cpp:109 msgid "&Open" msgstr "&Ouvrir " @@ -6569,7 +6043,6 @@ msgid "&Save" msgstr "&Sauver" #: eeschema/menubar.cpp:55 -#: eeschema/tool_sch.cpp:45 msgid "Save schematic project" msgstr "Sauver le Projet schématique" @@ -6638,7 +6111,6 @@ msgid "&Redo\t" msgstr "&Redo\t" #: eeschema/menubar.cpp:154 -#: pcbnew/find.h:38 msgid "Find" msgstr "Chercher" @@ -6655,7 +6127,6 @@ msgid "&Component" msgstr "&Composant" #: eeschema/menubar.cpp:206 -#: eeschema/tool_sch.cpp:156 msgid "Place the component" msgstr "Placer le Composant" @@ -6664,7 +6135,6 @@ msgid "&Power port" msgstr "Power Symbole" #: eeschema/menubar.cpp:212 -#: eeschema/tool_sch.cpp:160 msgid "Place the power port" msgstr "Placer le Symbole Power" @@ -6673,7 +6143,6 @@ msgid "&Wire" msgstr "&Fil" #: eeschema/menubar.cpp:218 -#: eeschema/tool_sch.cpp:165 msgid "Place the wire" msgstr "Place fil" @@ -6682,7 +6151,6 @@ msgid "&Bus" msgstr "&Bus" #: eeschema/menubar.cpp:227 -#: eeschema/tool_sch.cpp:169 msgid "Place bus" msgstr "Place bus" @@ -6715,7 +6183,6 @@ msgid "Net name" msgstr "Net Name" #: eeschema/menubar.cpp:267 -#: eeschema/tool_sch.cpp:186 msgid "Place net name" msgstr "Place nom de net" @@ -6728,12 +6195,10 @@ msgid "Place a global label. Warning: all global labels with the same name are c msgstr "Placer un label global. Attention: tous les labels globaux avec le même nom sont connectés dans toute la hierarchie" #: eeschema/menubar.cpp:284 -#: eeschema/eelayer.h:85 msgid "Junction" msgstr "Jonction" #: eeschema/menubar.cpp:285 -#: eeschema/tool_sch.cpp:195 msgid "Place junction" msgstr "Place jonction" @@ -6782,7 +6247,6 @@ msgid "Graphic text (comment)" msgstr "Ttextes graphiques (commentaires)" #: eeschema/menubar.cpp:349 -#: eeschema/tool_sch.cpp:223 msgid "Place graphic text (comment)" msgstr "Placer textes graphiques (commentaires)" @@ -6795,7 +6259,6 @@ msgid "Color preferences" msgstr "Préférences de couleurs" #: eeschema/menubar.cpp:371 -#: gerbview/tool_gerber.cpp:110 msgid "&Options" msgstr "&Options" @@ -6989,19 +6452,14 @@ msgid "Text Orient:" msgstr "Orient:" #: eeschema/dialog_edit_label.cpp:160 -#: eeschema/pinedit-dialog.cpp:264 -#: eeschema/component_wizard/dialog_component_setup.cpp:201 msgid "Input" msgstr "Entrée" #: eeschema/dialog_edit_label.cpp:161 -#: eeschema/pinedit-dialog.cpp:265 -#: eeschema/component_wizard/dialog_component_setup.cpp:202 msgid "Output" msgstr "Sortie" #: eeschema/dialog_edit_label.cpp:162 -#: eeschema/pinedit-dialog.cpp:266 msgid "Bidi" msgstr "Bidi" @@ -7010,8 +6468,6 @@ msgid "TriState" msgstr "3 états" #: eeschema/dialog_edit_label.cpp:164 -#: eeschema/pinedit-dialog.cpp:268 -#: eeschema/component_wizard/dialog_component_setup.cpp:205 msgid "Passive" msgstr "Passive" @@ -7267,8 +6723,6 @@ msgid "Select component (%d items)" msgstr "Selection composant (%d items)" #: eeschema/viewlibs.cpp:118 -#: eeschema/viewlib_frame.cpp:53 -#: eeschema/tool_sch.cpp:56 msgid "Library browser" msgstr "Visualisateur des librairies" @@ -7296,9 +6750,6 @@ msgid "Empty Text!" msgstr "Texte vide" #: eeschema/eeconfig.cpp:73 -#: kicad/files-io.cpp:131 -#: gerbview/dcode.cpp:266 -#: gerbview/readgerb.cpp:145 msgid "File " msgstr "Fichier " @@ -7311,7 +6762,6 @@ msgid "White" msgstr "Blanc" #: eeschema/eelayer.cpp:234 -#: share/dialog_print.cpp:204 msgid "Black" msgstr "Noir" @@ -7325,7 +6775,6 @@ msgid "Arc %.1f deg" msgstr "Arc %.1f deg" #: eeschema/eeredraw.cpp:130 -#: eeschema/eelayer.h:171 msgid "Sheet" msgstr "Feuille" @@ -7366,12 +6815,10 @@ msgid "Warning More than 1 Pin connected to UnConnect symbol" msgstr "Warning: plus que 1 Pin connectée a un symbole de non connexion" #: eeschema/erc.cpp:595 -#: common/confirm.cpp:84 msgid "Warning" msgstr "Avertissement" #: eeschema/erc.cpp:598 -#: common/confirm.cpp:88 msgid "Error" msgstr "Erreur" @@ -7440,12 +6887,10 @@ msgid "Root" msgstr "Racine" #: eeschema/hotkeys.cpp:249 -#: eeschema/schedit.cpp:241 msgid "Add Component" msgstr "Ajout Composant" #: eeschema/hotkeys.cpp:271 -#: eeschema/schedit.cpp:189 msgid "Add Wire" msgstr "Ajouter Fils" @@ -7482,7 +6927,6 @@ msgid "Hierachy Pins by Sheets" msgstr "Pins de hiérarchie par feuilles" #: eeschema/dialog_build_BOM.cpp:269 -#: eeschema/netlist.cpp:197 msgid "List" msgstr "Liste" @@ -7555,7 +6999,6 @@ msgid "Create &List" msgstr "Créer &Liste" #: eeschema/dialog_build_BOM.cpp:352 -#: cvpcb/dialog_display_options.cpp:196 msgid "&Apply" msgstr "&Appliquer" @@ -7732,7 +7175,6 @@ msgstr "#End labels\n" #: eeschema/netlist_control.cpp:124 #: eeschema/netlist_control.cpp:240 -#: gerbview/options.cpp:201 msgid "Default format" msgstr "Format par défaut" @@ -7786,7 +7228,6 @@ msgid "Netlist command:" msgstr "Commande netliste:" #: eeschema/netlist_control.cpp:320 -#: share/setpage.cpp:354 msgid "Title:" msgstr "Titre:" @@ -7819,37 +7260,30 @@ msgid "Datasheet" msgstr "Documentation" #: eeschema/pinedit.cpp:22 -#: eeschema/pinedit-dialog.cpp:251 msgid "line" msgstr "Ligne" #: eeschema/pinedit.cpp:22 -#: eeschema/pinedit-dialog.cpp:252 msgid "invert" msgstr "invert" #: eeschema/pinedit.cpp:22 -#: eeschema/pinedit-dialog.cpp:253 msgid "clock" msgstr "clock" #: eeschema/pinedit.cpp:22 -#: eeschema/pinedit-dialog.cpp:254 msgid "clock inv" msgstr "clock inv" #: eeschema/pinedit.cpp:23 -#: eeschema/pinedit-dialog.cpp:255 msgid "low in" msgstr "low in" #: eeschema/pinedit.cpp:23 -#: eeschema/pinedit-dialog.cpp:256 msgid "low clock" msgstr "low clock" #: eeschema/pinedit.cpp:23 -#: eeschema/pinedit-dialog.cpp:257 msgid "low out" msgstr "low out" @@ -7876,7 +7310,6 @@ msgid " Normal" msgstr " Normal" #: eeschema/save_schemas.cpp:61 -#: eeschema/files-io.cpp:82 msgid "Schematic files:" msgstr "Fichiers schématiques:" @@ -7937,7 +7370,6 @@ msgid "Add Power" msgstr "Add Alims" #: eeschema/sheet.cpp:162 -#: share/svg_print.cpp:251 msgid "Filename:" msgstr "Nom Fichier:" @@ -8185,7 +7617,6 @@ msgid "Edit pins part per part (Carefully use!)" msgstr "Editer pins unité par unité (Utiliser en connaissance de cause)" #: eeschema/tool_lib.cpp:238 -#: eeschema/tool_viewlib.cpp:128 #, c-format msgid "Part %c" msgstr "Composant %c" @@ -8227,7 +7658,6 @@ msgid "3 States" msgstr "3 Etats" #: eeschema/pinedit-dialog.cpp:269 -#: eeschema/component_wizard/dialog_component_setup.cpp:206 msgid "Unspecified" msgstr "Non specifié" @@ -8420,7 +7850,6 @@ msgid "Place graphic line or polygon" msgstr "Placer ligne ou polygone graphique" #: eeschema/tool_sch.cpp:267 -#: eeschema/schframe.cpp:418 msgid "Show Hidden Pins" msgstr "Force affichage des pins invisibles" @@ -8655,7 +8084,6 @@ msgid "Move Text " msgstr "Déplacer Texte" #: eeschema/libedit_onrightclick.cpp:126 -#: eeschema/dialog_edit_label.h:44 msgid "Text Editor" msgstr "Editeur de Texte" @@ -8958,8 +8386,6 @@ msgid "Cvpcb is already running, Continue?" msgstr "Cvpcb est est cours d'exécution. Continuer ?" #: cvpcb/displayframe.cpp:118 -#: pcbnew/dialog_display_options.h:54 -#: cvpcb/dialog_display_options.h:51 msgid "Display Options" msgstr "Options d'Affichage" @@ -9199,27 +8625,22 @@ msgid "Delete selections" msgstr "Effacement des associations existantes" #: cvpcb/cvframe.cpp:426 -#: share/drawframe.cpp:136 msgid "Dialog boxes" msgstr "Fenêtres de dialogue" #: cvpcb/cvframe.cpp:431 -#: share/drawframe.cpp:141 msgid "Lists" msgstr "Listes" #: cvpcb/cvframe.cpp:436 -#: share/drawframe.cpp:146 msgid "Status box" msgstr "Fenetre d'état" #: cvpcb/cvframe.cpp:442 -#: share/drawframe.cpp:152 msgid "&Font" msgstr "&Fonte" #: cvpcb/cvframe.cpp:444 -#: share/drawframe.cpp:154 msgid "Choose font type and size for dialogs, infos and status box" msgstr "Choisir les fontes et leur taille pour les dialogues, infos et ligne d'état" @@ -9339,7 +8760,6 @@ msgid "You must choose a PDF viewer before use this option" msgstr "Vous devez choisir un Visualisateur PDF avant d'utiliser cette option" #: kicad/preferences.cpp:97 -#: common/gestfich.cpp:685 msgid "Prefered Editor:" msgstr "Editeur préféré:" @@ -9726,12 +9146,10 @@ msgid "Gerber files:" msgstr "Fichiers Gerber:" #: gerbview/files.cpp:187 -#: gerbview/readgerb.cpp:273 msgid "D codes files:" msgstr "Fichiers D-Codes:" #: gerbview/gerbview_config.cpp:147 -#: gerbview/process_config.cpp:117 msgid "Save config file" msgstr "Sauver config" @@ -10852,7 +10270,6 @@ msgid "dialog_freeroute_exchange" msgstr "dialog_freeroute_exchange" #: pcbnew/dialog_general_options.h:60 -#: eeschema/dialog_options.h:55 msgid "General Options" msgstr "Options Générales" @@ -10873,7 +10290,6 @@ msgid "Footprints Orientation" msgstr "Orientation des Modules" #: pcbnew/dialog_setup_libs.h:43 -#: eeschema/dialog_eeschema_config.h:50 msgid "Dialog" msgstr "Dialog" @@ -10981,7 +10397,7 @@ msgstr "Afficher Modules Cu" msgid "Pad properties" msgstr "Propriétés des Pads" -#: pcbnew/dialog_copper_zones_frame.h:88 +#: pcbnew/dialog_copper_zones_frame.h:103 msgid "Fill Zones Options" msgstr "Options de Remplissage de Zone" @@ -11297,3 +10713,6 @@ msgstr "Imprimer" msgid "Create SVG file" msgstr "Créer Fichier SVG" +#~ msgid "Unfill zone" +#~ msgstr "Vider zone" + diff --git a/pcbnew/class_zone.cpp b/pcbnew/class_zone.cpp index c7eca9a0b9..7c5fe32e35 100644 --- a/pcbnew/class_zone.cpp +++ b/pcbnew/class_zone.cpp @@ -21,16 +21,18 @@ ZONE_CONTAINER::ZONE_CONTAINER( BOARD* parent ) : BOARD_ITEM( parent, TYPEZONE_CONTAINER ) { - m_NetCode = -1; // Net number for fast comparisons + m_NetCode = -1; // Net number for fast comparisons m_CornerSelection = -1; - m_ZoneClearance = 200; // a reasonnable clerance value - m_GridFillValue = 50; // a reasonnable grid used for filling + 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(); // Outlines - m_ArcToSegmentsCount = 16; // Use 16 segment to convert a circle to a polygon + utility = 0; // flags used in polygon calculations + utility2 = 0; // flags used in polygon calculations + m_Poly = new CPolyLine(); // Outlines + m_ArcToSegmentsCount = 16; // Use 16 segment to convert a circle to a polygon m_DrawOptions = 0; + m_ThermalReliefGapValue = 200; // tickness of the gap in thermal reliefs + m_ThermalReliefCopperBridgeValue = 200; // tickness of the copper bridge in thermal reliefs } @@ -86,8 +88,8 @@ bool ZONE_CONTAINER::Save( FILE* aFile ) const // Save the outline main info ret = fprintf( aFile, "ZInfo %8.8lX %d \"%s\"\n", - m_TimeStamp, m_NetCode, - CONV_TO_UTF8( m_Netname ) ); + m_TimeStamp, m_NetCode, + CONV_TO_UTF8( m_Netname ) ); if( ret < 3 ) return false; @@ -138,8 +140,8 @@ bool ZONE_CONTAINER::Save( FILE* aFile ) const if( ret < 2 ) return false; - ret = fprintf( aFile, "ZOptions %d %d %c\n", m_GridFillValue, m_ArcToSegmentsCount, - m_DrawOptions ? 'S' : 'F' ); + ret = fprintf( aFile, "ZOptions %d %d %c %d %d\n", m_GridFillValue, m_ArcToSegmentsCount, + m_DrawOptions ? 'S' : 'F' , m_ThermalReliefGapValue, m_ThermalReliefCopperBridgeValue); if( ret < 3 ) return false; @@ -148,8 +150,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", - m_Poly->corner[item_pos].x, m_Poly->corner[item_pos].y, - m_Poly->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; } @@ -274,20 +276,20 @@ int ZONE_CONTAINER::ReadDescr( FILE* aFile, int* aLineNum ) { int gridsize = 50; int arcsegmentcount = 16; - int drawopt = 'F'; + char drawopt = 'F'; text = Line + 8; - ret = sscanf( text, "%d %d %c", &gridsize, &arcsegmentcount, &drawopt ); - if( ret < 1 ) // Must find 1 or more args. + ret = sscanf( text, "%d %d %c %d %d", &gridsize, &arcsegmentcount, &drawopt, + &m_ThermalReliefGapValue, &m_ThermalReliefCopperBridgeValue ); + if( ret < 1 ) // Must find 1 or more args. return false; else m_GridFillValue = gridsize; - if ( arcsegmentcount >= 32 ) + if( arcsegmentcount >= 32 ) m_ArcToSegmentsCount = 32; - - if ( drawopt == 'S' ) // Sketch mode for filled areas in this zone selected - m_DrawOptions = 1; + if( drawopt == 'S' ) // Sketch mode for filled areas in this zone selected + m_DrawOptions = 1; } if( strnicmp( Line, "ZClearance", 10 ) == 0 ) // Clearence and pad options info found { @@ -351,7 +353,7 @@ int ZONE_CONTAINER::ReadDescr( FILE* aFile, int* aLineNum ) } /* Set hatch here, when outlines corners are read */ - m_Poly->SetHatch(outline_hatch); + m_Poly->SetHatch( outline_hatch ); return error ? 0 : 1; } @@ -509,10 +511,10 @@ void ZONE_CONTAINER::DrawFilledArea( WinEDA_DrawPanel* panel, { // Draw the current filled area if( sketch_mode ) GRClosedPoly( &panel->m_ClipBox, DC, corners_count, CornersBuffer, - false, 0, color, color ); + false, 0, color, color ); else GRPoly( &panel->m_ClipBox, DC, corners_count, CornersBuffer, - true, 0, color, color ); + true, 0, color, color ); corners_count = 0; ii = 0; } @@ -571,7 +573,7 @@ void ZONE_CONTAINER::DrawWhileCreateOutline( WinEDA_DrawPanel* panel, wxDC* DC, if( DC == NULL ) return; int curr_layer = ( (PCB_SCREEN*) panel->GetScreen() )->m_Active_Layer; - int color = g_DesignSettings.m_LayerColor[m_Layer] & MASKCOLOR; + int color = g_DesignSettings.m_LayerColor[m_Layer & 31] & MASKCOLOR; if( DisplayOpt.ContrastModeDisplay ) { @@ -585,28 +587,31 @@ void ZONE_CONTAINER::DrawWhileCreateOutline( WinEDA_DrawPanel* panel, wxDC* DC, // draw the lines wxPoint start_contour_pos = GetCornerPosition( 0 ); - for( int ic = 0; ic < GetNumCorners(); ic++ ) + int icmax = GetNumCorners() - 1; + for( int ic = 0; ic <= icmax; ic++ ) { int xi = GetCornerPosition( ic ).x; int yi = GetCornerPosition( ic ).y; int xf, yf; - if( m_Poly->corner[ic].end_contour == FALSE && ic < GetNumCorners() - 1 ) + if( m_Poly->corner[ic].end_contour == FALSE && ic < icmax ) { is_close_segment = false; xf = GetCornerPosition( ic + 1 ).x; yf = GetCornerPosition( ic + 1 ).y; - if( (m_Poly->corner[ic + 1].end_contour) || (ic == GetNumCorners() - 2) ) + if( (m_Poly->corner[ic + 1].end_contour) || (ic == icmax - 1) ) current_gr_mode = GR_XOR; else current_gr_mode = draw_mode; } - else + else // Draw the line from last corner to the first corner of the current coutour { is_close_segment = true; current_gr_mode = GR_XOR; xf = start_contour_pos.x; yf = start_contour_pos.y; - start_contour_pos = GetCornerPosition( ic + 1 ); + // Prepare the next contour for drawing, if exists + if ( ic < icmax ) + start_contour_pos = GetCornerPosition( ic + 1 ); } GRSetDrawMode( DC, current_gr_mode ); if( is_close_segment ) @@ -707,11 +712,11 @@ int ZONE_CONTAINER::HitTestForEdge( const wxPoint& refPos ) /* test the dist between segment and ref point */ dist = (int) GetPointToLineSegmentDistance( refPos.x, - refPos.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 ); + refPos.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 ) { m_CornerSelection = item_pos; diff --git a/pcbnew/class_zone.h b/pcbnew/class_zone.h index 40c0fc231a..808d1eb653 100644 --- a/pcbnew/class_zone.h +++ b/pcbnew/class_zone.h @@ -27,33 +27,35 @@ 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, 0 = use polygonal areas to fill - int m_ArcToSegmentsCount; // number of segments to convert a cirlce to a polygon (uses 16 or 32) - m_PadInZone m_PadOption; // see m_PadInZone - int utility, utility2; // flags used in polygon calculations + 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, 0 = use polygonal areas to fill + int m_ArcToSegmentsCount; // number of segments to convert a cirlce to a polygon (uses 16 or 32) + m_PadInZone m_PadOption; // see m_PadInZone + int m_ThermalReliefGapValue; // tickness of the gap in thermal reliefs + int m_ThermalReliefCopperBridgeValue; // tickness of the copper bridge in thermal reliefs + int utility, utility2; // flags used in polygon calculations std::vector m_FilledPolysList; /* set of filled polygons used to draw a zone as a filled area. * from outlines (m_Poly) but unlike m_Poly these filled polygons have no hole (they are all in one piece) * In very simple cases m_FilledPolysList is same as m_Poly * In less simple cases (when m_Poly has holes) m_FilledPolysList is a polygon equivalent to m_Poly, without holes * In complex cases an ouline decribed by m_Poly can have many filled areas */ - int m_DrawOptions; /* used to pass some draw options (draw filled areas in sketch mode for instance ...) - * currently useful when testing filling zones algos + int m_DrawOptions; /* used to pass some draw options (draw filled areas in sketch mode for instance ...) + * currently useful when testing filling zones algos */ private: - int m_NetCode; // Net number for fast comparisons + int m_NetCode; // Net number for fast comparisons public: ZONE_CONTAINER( BOARD* parent ); ~ZONE_CONTAINER(); - bool Save( FILE* aFile ) const; - int ReadDescr( FILE* aFile, int* aLineNum = NULL ); + bool Save( FILE* aFile ) const; + int ReadDescr( FILE* aFile, int* aLineNum = NULL ); wxPoint& GetPosition() { @@ -72,9 +74,9 @@ public: * copy usefull data from the source. * flags and linked list pointers are NOT copied */ - void Copy( ZONE_CONTAINER* src ); + void Copy( ZONE_CONTAINER* src ); - void Display_Infos( WinEDA_DrawFrame* frame ); + void Display_Infos( WinEDA_DrawFrame* frame ); /** * Function Draw @@ -84,10 +86,10 @@ public: * @param offset = Draw offset (usually wxPoint(0,0)) * @param aDrawMode = GR_OR, GR_XOR, GR_COPY .. */ - void Draw( WinEDA_DrawPanel* panel, - wxDC* DC, - int aDrawMode, - const wxPoint& offset = ZeroOffset ); + void Draw( WinEDA_DrawPanel* panel, + wxDC* DC, + int aDrawMode, + const wxPoint& offset = ZeroOffset ); /** * Function DrawDrawFilledArea @@ -97,19 +99,19 @@ public: * @param offset = Draw offset (usually wxPoint(0,0)) * @param aDrawMode = GR_OR, GR_XOR, GR_COPY .. */ - void DrawFilledArea( WinEDA_DrawPanel* panel, - wxDC* DC, - int aDrawMode, - const wxPoint& offset = ZeroOffset ); + void DrawFilledArea( WinEDA_DrawPanel* panel, + wxDC* DC, + int aDrawMode, + const wxPoint& offset = ZeroOffset ); - EDA_Rect GetBoundingBox(); + EDA_Rect GetBoundingBox(); /** * Function Test_For_Copper_Island_And_Remove__Insulated_Islands * Remove insulated copper islands found in m_FilledPolysList. * @param aPcb = the board to analyse */ - void Test_For_Copper_Island_And_Remove_Insulated_Islands( BOARD* aPcb ); + void Test_For_Copper_Island_And_Remove_Insulated_Islands( BOARD* aPcb ); /** * Function DrawWhileCreateOutline @@ -120,7 +122,7 @@ public: * @param DC = current Device Context * @param draw_mode = draw mode: OR, XOR .. */ - void DrawWhileCreateOutline( WinEDA_DrawPanel* panel, wxDC* DC, int draw_mode = GR_OR ); + void DrawWhileCreateOutline( WinEDA_DrawPanel* panel, wxDC* DC, int draw_mode = GR_OR ); /** @@ -139,7 +141,7 @@ public: } - void SetNet( int anet_code ); + void SetNet( int anet_code ); /** * Function HitTest @@ -147,7 +149,7 @@ public: * @param refPos A wxPoint to test * @return bool - true if a hit, else false */ - bool HitTest( const wxPoint& refPos ); + bool HitTest( const wxPoint& refPos ); /** function BuildFilledPolysListData * Build m_FilledPolysList data from real outlines (m_Poly) @@ -158,7 +160,7 @@ public: * This function does not add holes for pads and tracks but calls * AddClearanceAreasPolygonsToPolysList() to do that for copper layers */ - int BuildFilledPolysListData( BOARD* aPcb ); + int BuildFilledPolysListData( BOARD* aPcb ); /** function AddClearanceAreasPolygonsToPolysList * Add non copper areas polygons (pads and tracks with clearence) @@ -170,7 +172,7 @@ public: * filled copper area polygon (without clearence areas * @param aPcb: the current board */ - void AddClearanceAreasPolygonsToPolysList( BOARD* aPcb ); + void AddClearanceAreasPolygonsToPolysList( BOARD* aPcb ); /** * Function HitTestForCorner @@ -178,7 +180,7 @@ public: * @return -1 if none, corner index in .corner * @param refPos : A wxPoint to test */ - int HitTestForCorner( const wxPoint& refPos ); + int HitTestForCorner( const wxPoint& refPos ); /** * Function HitTestForEdge @@ -186,7 +188,7 @@ public: * @return -1 if none, or index of the starting corner in .corner * @param refPos : A wxPoint to test */ - int HitTestForEdge( const wxPoint& refPos ); + int HitTestForEdge( const wxPoint& refPos ); /** * Function HitTest (overlayed) @@ -194,7 +196,7 @@ public: * @param refArea : the given EDA_Rect * @return bool - true if a hit, else false */ - bool HitTest( EDA_Rect& refArea ); + bool HitTest( EDA_Rect& refArea ); /** * Function Fill_Zone() @@ -207,7 +209,7 @@ public: * @param verbose = true to show error messages * @return error level (0 = no error) */ - int Fill_Zone( WinEDA_PcbFrame* frame, wxDC* DC, bool verbose = TRUE ); + int Fill_Zone( WinEDA_PcbFrame* frame, wxDC* DC, bool verbose = TRUE ); /* Geometric transformations: */ @@ -216,14 +218,14 @@ public: * Move the outlines * @param offset = moving vector */ - void Move( const wxPoint& offset ); + void Move( const wxPoint& offset ); /** * Function MoveEdge * Move the outline Edge. m_CornerSelection is the start point of the outline edge * @param offset = moving vector */ - void MoveEdge( const wxPoint& offset ); + void MoveEdge( const wxPoint& offset ); /** * Function Rotate @@ -231,7 +233,7 @@ public: * @param centre = rot centre * @param angle = in 0.1 degree */ - void Rotate( const wxPoint& centre, int angle ); + void Rotate( const wxPoint& centre, int angle ); /** * Function Mirror @@ -239,7 +241,7 @@ public: * the layer is not changed * @param mirror_ref = vertical axis position */ - void Mirror( const wxPoint& mirror_ref ); + void Mirror( const wxPoint& mirror_ref ); /** * Function GetClass diff --git a/pcbnew/dialog_copper_zones.cpp b/pcbnew/dialog_copper_zones.cpp index ed5c65bf10..20c146bf84 100644 --- a/pcbnew/dialog_copper_zones.cpp +++ b/pcbnew/dialog_copper_zones.cpp @@ -53,7 +53,7 @@ dialog_copper_zone::dialog_copper_zone( WinEDA_PcbFrame* parent, ZONE_CONTAINER /*****************************************************************/ void dialog_copper_zone::OnInitDialog( wxInitDialogEvent& event ) /*****************************************************************/ -// Initialise dialog options +// Initialise all dialog options and values in wxTextCtrl { BOARD* board = m_Parent->m_Pcb; @@ -81,7 +81,7 @@ void dialog_copper_zone::OnInitDialog( wxInitDialogEvent& event ) int selection = 0; int grid_routing = g_GridRoutingSize; - + if( m_Zone_Container ) grid_routing = m_Zone_Container->m_GridFillValue; @@ -109,18 +109,18 @@ void dialog_copper_zone::OnInitDialog( wxInitDialogEvent& event ) switch( m_Zone_Container->m_PadOption ) { case ZONE_CONTAINER::PAD_NOT_IN_ZONE: // Pads are not covered - m_FillOpt->SetSelection( 2 ); + m_PadInZoneOpt->SetSelection( 2 ); break; case ZONE_CONTAINER::THERMAL_PAD: // Use thermal relief for pads - m_FillOpt->SetSelection( 1 ); + m_PadInZoneOpt->SetSelection( 1 ); break; case ZONE_CONTAINER::PAD_IN_ZONE: // pads are covered by copper - m_FillOpt->SetSelection( 0 ); + m_PadInZoneOpt->SetSelection( 0 ); break; } g_Zone_Hatching = m_Zone_Container->m_Poly->GetHatchStyle(); g_Zone_Arc_Approximation = m_Zone_Container->m_ArcToSegmentsCount; - + g_FilledAreasShowMode = m_Zone_Container->m_DrawOptions; if ( g_FilledAreasShowMode == 1) m_ShowFilledAreasInSketchOpt->SetValue(true); @@ -133,19 +133,45 @@ void dialog_copper_zone::OnInitDialog( wxInitDialogEvent& event ) switch( g_Zone_Pad_Options ) { case ZONE_CONTAINER::PAD_NOT_IN_ZONE: // Pads are not covered - m_FillOpt->SetSelection( 2 ); + m_PadInZoneOpt->SetSelection( 2 ); break; case ZONE_CONTAINER::THERMAL_PAD: // Use thermal relief for pads - m_FillOpt->SetSelection( 1 ); + m_PadInZoneOpt->SetSelection( 1 ); break; case ZONE_CONTAINER::PAD_IN_ZONE: // pads are covered by copper - m_FillOpt->SetSelection( 0 ); + m_PadInZoneOpt->SetSelection( 0 ); break; } g_Zone_Hatching = m_Parent->m_Parent->m_EDA_Config->Read( ZONE_NET_OUTLINES_HATCH_OPTION_KEY, (long) CPolyLine::DIAGONAL_EDGE ); } + if ( g_Zone_Pad_Options != ZONE_CONTAINER::THERMAL_PAD ) + { + m_AntipadSizeValue->Enable(false); + m_CopperWidthValue->Enable(false); + } + else + { + m_AntipadSizeValue->Enable(true); + m_CopperWidthValue->Enable(true); + } + + if( m_Zone_Container ) + { + g_ThermalReliefGapValue = m_Zone_Container->m_ThermalReliefGapValue; + g_ThermalReliefCopperBridgeValue = m_Zone_Container->m_ThermalReliefCopperBridgeValue; + } + else + { + m_Parent->m_Parent->m_EDA_Config->Read( ZONE_THERMAL_RELIEF_GAP_STRING_KEY, &g_ThermalReliefGapValue ); + m_Parent->m_Parent->m_EDA_Config->Read( ZONE_THERMAL_RELIEF_COPPER_WIDTH_STRING_KEY, &g_ThermalReliefCopperBridgeValue ); + } + AddUnitSymbol( *m_AntipadSizeText, g_UnitMetric ); + AddUnitSymbol( *m_CopperBridgeWidthText, g_UnitMetric ); + PutValueInLocalUnits( *m_AntipadSizeValue, g_ThermalReliefGapValue, PCB_INTERNAL_UNIT ); + PutValueInLocalUnits( *m_CopperWidthValue, g_ThermalReliefCopperBridgeValue, PCB_INTERNAL_UNIT ); + switch( g_Zone_Hatching ) { case CPolyLine::NO_HATCH: @@ -160,7 +186,7 @@ void dialog_copper_zone::OnInitDialog( wxInitDialogEvent& event ) m_OutlineAppearanceCtrl->SetSelection(2); break; } - + m_ArcApproximationOpt->SetSelection( g_Zone_Arc_Approximation == 32 ? 1 : 0 ); /* build copper layers list */ @@ -245,6 +271,7 @@ void dialog_copper_zone::OnInitDialog( wxInitDialogEvent& event ) { GetSizer()->SetSizeHints(this); } + Center(); } @@ -265,7 +292,7 @@ bool dialog_copper_zone::AcceptOptions(bool aPromptForErrors, bool aUseExportabl * @param aUseExportableSetupOnly = true to use exportable parametres only (used to export this setup to other zones) */ { - switch( m_FillOpt->GetSelection() ) + switch( m_PadInZoneOpt->GetSelection() ) { case 2: g_Zone_Pad_Options = ZONE_CONTAINER::PAD_NOT_IN_ZONE; // Pads are not covered @@ -280,7 +307,7 @@ bool dialog_copper_zone::AcceptOptions(bool aPromptForErrors, bool aUseExportabl break; } - switch( m_OutlineAppearanceCtrl->GetSelection() ) + switch( m_OutlineAppearanceCtrl->GetSelection() ) { case 0: g_Zone_Hatching = CPolyLine::NO_HATCH; @@ -294,7 +321,7 @@ bool dialog_copper_zone::AcceptOptions(bool aPromptForErrors, bool aUseExportabl g_Zone_Hatching = CPolyLine::DIAGONAL_FULL; break; } - + g_Zone_Arc_Approximation = m_ArcApproximationOpt->GetSelection() == 1 ? 32 : 16; if( m_Parent->m_Parent->m_EDA_Config ) @@ -338,6 +365,12 @@ bool dialog_copper_zone::AcceptOptions(bool aPromptForErrors, bool aUseExportabl g_FilledAreasShowMode = m_ShowFilledAreasInSketchOpt->IsChecked() ? 1 : 0; + g_ThermalReliefGapValue = ReturnValueFromTextCtrl( *m_AntipadSizeValue, PCB_INTERNAL_UNIT ); + g_ThermalReliefCopperBridgeValue = ReturnValueFromTextCtrl( *m_CopperWidthValue, PCB_INTERNAL_UNIT ); + + m_Parent->m_Parent->m_EDA_Config->Write( ZONE_THERMAL_RELIEF_GAP_STRING_KEY, (long) g_ThermalReliefGapValue ); + m_Parent->m_Parent->m_EDA_Config->Write( ZONE_THERMAL_RELIEF_COPPER_WIDTH_STRING_KEY, (long)g_ThermalReliefCopperBridgeValue ); + // If we use only exportable to others zones parameters, exit here: if ( aUseExportableSetupOnly ) return true; @@ -349,10 +382,10 @@ bool dialog_copper_zone::AcceptOptions(bool aPromptForErrors, bool aUseExportabl DisplayError( this, _( "Error : you must choose a layer" ) ); return false; } - + g_CurrentZone_Layer = m_LayerId[ii]; - + /* Get the net name selection for this zone */ ii = m_ListNetNameSelection->GetSelection(); @@ -406,7 +439,7 @@ void dialog_copper_zone::OnNetSortingOptionSelected( wxCommandEvent& event ) m_Parent->m_Parent->m_EDA_Config->Write( ZONE_NET_SORT_OPTION_KEY, (long) m_NetSorting ); m_Parent->m_Parent->m_EDA_Config->Write( ZONE_NET_FILTER_STRING_KEY, m_NetNameFilter->GetValue() ); } - + // Select and isplay current zone net name in listbox: int net_select = g_HightLigth_NetCode; if( m_Zone_Container ) @@ -455,7 +488,7 @@ void dialog_copper_zone::ExportSetupToOtherCopperZones( wxCommandEvent& event ) { if ( !AcceptOptions(true, true) ) return; - + // Export to others zones: BOARD * pcb = m_Parent->m_Pcb; for( int ii = 0; ii < pcb->GetAreaCount(); ii++ ) @@ -467,7 +500,28 @@ void dialog_copper_zone::ExportSetupToOtherCopperZones( wxCommandEvent& event ) zone->m_GridFillValue = g_GridRoutingSize; zone->m_ArcToSegmentsCount = g_Zone_Arc_Approximation; zone->m_DrawOptions = g_FilledAreasShowMode; + zone->m_ThermalReliefGapValue = g_ThermalReliefGapValue; + zone->m_ThermalReliefCopperBridgeValue = g_ThermalReliefCopperBridgeValue; m_Parent->GetScreen()->SetModify();; } } + +/******************************************************************/ +void dialog_copper_zone::OnPadsInZoneClick( wxCommandEvent& event ) +/******************************************************************/ +{ + switch ( m_PadInZoneOpt->GetSelection() ) + { + default: + m_AntipadSizeValue->Enable(false); + m_CopperWidthValue->Enable(false); + break; + + case 1: + m_AntipadSizeValue->Enable(true); + m_CopperWidthValue->Enable(true); + break; + + } +} diff --git a/pcbnew/dialog_copper_zones.h b/pcbnew/dialog_copper_zones.h index d85e7d8686..8c6198ce8c 100644 --- a/pcbnew/dialog_copper_zones.h +++ b/pcbnew/dialog_copper_zones.h @@ -24,6 +24,7 @@ public: void OnRemoveFillZoneButtonClick( wxCommandEvent& event ); void OnNetSortingOptionSelected( wxCommandEvent& event ); void ExportSetupToOtherCopperZones( wxCommandEvent& event ); + void OnPadsInZoneClick( wxCommandEvent& event ); }; #endif // #ifndef DIALOG_COPPER_ZONES diff --git a/pcbnew/dialog_copper_zones_frame.cpp b/pcbnew/dialog_copper_zones_frame.cpp index 4593f84d83..814f0c8069 100644 --- a/pcbnew/dialog_copper_zones_frame.cpp +++ b/pcbnew/dialog_copper_zones_frame.cpp @@ -11,6 +11,7 @@ BEGIN_EVENT_TABLE( dialog_copper_zone_frame, wxDialog ) EVT_INIT_DIALOG( dialog_copper_zone_frame::_wxFB_OnInitDialog ) + EVT_RADIOBOX( wxID_PADS_IN_ZONE_OPTIONS, dialog_copper_zone_frame::_wxFB_OnPadsInZoneClick ) EVT_BUTTON( wxID_BUTTON_EXPORT, dialog_copper_zone_frame::_wxFB_ExportSetupToOtherCopperZones ) EVT_BUTTON( wxID_OK, dialog_copper_zone_frame::_wxFB_OnButtonOkClick ) EVT_BUTTON( wxID_CANCEL, dialog_copper_zone_frame::_wxFB_OnButtonCancelClick ) @@ -37,30 +38,40 @@ dialog_copper_zone_frame::dialog_copper_zone_frame( wxWindow* parent, wxWindowID wxStaticBoxSizer* m_FillOptionsBox; m_FillOptionsBox = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Zone Fill Options:") ), wxVERTICAL ); - wxString m_GridCtrlChoices[] = { _("0.00000"), _("0.00000"), _("0.00000"), _("0.00000"), _("No Grid (For tests only!)") }; + wxString m_GridCtrlChoices[] = { _("0.00000"), _("0.00000"), _("0.00000"), _("0.00000"), _("No grid (For tests only!)") }; int m_GridCtrlNChoices = sizeof( m_GridCtrlChoices ) / sizeof( wxString ); m_GridCtrl = new wxRadioBox( this, ID_RADIOBOX_GRID_SELECTION, _("Grid Size for Filling:"), wxDefaultPosition, wxDefaultSize, m_GridCtrlNChoices, m_GridCtrlChoices, 1, wxRA_SPECIFY_COLS ); - m_GridCtrl->SetSelection( 0 ); + m_GridCtrl->SetSelection( 4 ); m_FillOptionsBox->Add( m_GridCtrl, 0, wxALL|wxEXPAND, 5 ); - m_ClearanceValueTitle = new wxStaticText( this, wxID_ANY, _("Zone clearance value (mm):"), wxDefaultPosition, wxDefaultSize, 0 ); - m_ClearanceValueTitle->Wrap( -1 ); - m_FillOptionsBox->Add( m_ClearanceValueTitle, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); + wxString m_PadInZoneOptChoices[] = { _("Include pads"), _("Thermal relief"), _("Exclude pads") }; + int m_PadInZoneOptNChoices = sizeof( m_PadInZoneOptChoices ) / sizeof( wxString ); + m_PadInZoneOpt = new wxRadioBox( this, wxID_PADS_IN_ZONE_OPTIONS, _("Pad in Zone:"), wxDefaultPosition, wxDefaultSize, m_PadInZoneOptNChoices, m_PadInZoneOptChoices, 1, wxRA_SPECIFY_COLS ); + m_PadInZoneOpt->SetSelection( 1 ); + m_FillOptionsBox->Add( m_PadInZoneOpt, 0, wxALL|wxEXPAND, 5 ); - m_ZoneClearanceCtrl = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); - m_FillOptionsBox->Add( m_ZoneClearanceCtrl, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + wxStaticBoxSizer* m_ThermalShapesParamsSizer; + m_ThermalShapesParamsSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Thermal Reliefs Parameters") ), wxVERTICAL ); - wxString m_FillOptChoices[] = { _("Include Pads"), _("Thermal Relief"), _("Exclude Pads") }; - int m_FillOptNChoices = sizeof( m_FillOptChoices ) / sizeof( wxString ); - m_FillOpt = new wxRadioBox( this, wxID_ANY, _("Pad in Zone:"), wxDefaultPosition, wxDefaultSize, m_FillOptNChoices, m_FillOptChoices, 1, wxRA_SPECIFY_COLS ); - m_FillOpt->SetSelection( 2 ); - m_FillOptionsBox->Add( m_FillOpt, 0, wxALL|wxEXPAND, 5 ); + m_AntipadSizeText = new wxStaticText( this, wxID_ANY, _("Antipad Size"), wxDefaultPosition, wxDefaultSize, 0 ); + m_AntipadSizeText->Wrap( -1 ); + m_ThermalShapesParamsSizer->Add( m_AntipadSizeText, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); - m_ShowFilledAreasInSketchOpt = new wxCheckBox( this, wxID_ANY, _("Show filled areas in sketch mode"), wxDefaultPosition, wxDefaultSize, 0 ); + m_AntipadSizeValue = new wxTextCtrl( this, wxID_ANTIPAD_SIZE, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + m_AntipadSizeValue->SetToolTip( _("Define the gap around the pad") ); - m_ShowFilledAreasInSketchOpt->SetToolTip( _("If enabled, filled areas in is this zone will be displayed as non filled polygons.\nIf disabled, filled areas in is this zone will be displayed as \"solid\" areas (normal mode).") ); + m_ThermalShapesParamsSizer->Add( m_AntipadSizeValue, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 ); - m_FillOptionsBox->Add( m_ShowFilledAreasInSketchOpt, 0, wxALL, 5 ); + m_CopperBridgeWidthText = new wxStaticText( this, wxID_ANY, _("Copper Width"), wxDefaultPosition, wxDefaultSize, 0 ); + m_CopperBridgeWidthText->Wrap( -1 ); + m_ThermalShapesParamsSizer->Add( m_CopperBridgeWidthText, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); + + m_CopperWidthValue = new wxTextCtrl( this, wxID_COPPER_BRIDGE_VALUE, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + m_CopperWidthValue->SetToolTip( _("Define the tickness of copper in therma reliefs") ); + + m_ThermalShapesParamsSizer->Add( m_CopperWidthValue, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 ); + + m_FillOptionsBox->Add( m_ThermalShapesParamsSizer, 0, wxEXPAND, 5 ); m_LeftBoxSizer->Add( m_FillOptionsBox, 1, wxEXPAND, 5 ); @@ -84,13 +95,10 @@ dialog_copper_zone_frame::dialog_copper_zone_frame( wxWindow* parent, wxWindowID m_OrientEdgesOpt->SetSelection( 0 ); m_OutilinesBoxOpt->Add( m_OrientEdgesOpt, 0, wxALL|wxEXPAND, 5 ); - - m_OutilinesBoxOpt->Add( 5, 5, 0, 0, 5 ); - - wxString m_OutlineAppearanceCtrlChoices[] = { _("Line"), _("Hatched Outline"), _("Full Hatched") }; + wxString m_OutlineAppearanceCtrlChoices[] = { _("Line"), _("Hatched outline"), _("Full hatched") }; int m_OutlineAppearanceCtrlNChoices = sizeof( m_OutlineAppearanceCtrlChoices ) / sizeof( wxString ); m_OutlineAppearanceCtrl = new wxRadioBox( this, ID_RADIOBOX_OUTLINES_OPTION, _("Outlines Appearance"), wxDefaultPosition, wxDefaultSize, m_OutlineAppearanceCtrlNChoices, m_OutlineAppearanceCtrlChoices, 1, wxRA_SPECIFY_COLS ); - m_OutlineAppearanceCtrl->SetSelection( 0 ); + m_OutlineAppearanceCtrl->SetSelection( 1 ); m_OutlineAppearanceCtrl->SetToolTip( _("Choose how a zone outline is displayed\n- Single line\n- Short hatching\n- Full zone area hatched") ); m_OutilinesBoxOpt->Add( m_OutlineAppearanceCtrl, 0, wxALL|wxEXPAND, 5 ); @@ -103,12 +111,30 @@ dialog_copper_zone_frame::dialog_copper_zone_frame( wxWindow* parent, wxWindowID m_OutilinesBoxOpt->Add( m_ArcApproximationOpt, 0, wxALL|wxEXPAND, 5 ); + wxStaticBoxSizer* m_OthersOptionsSizer; + m_OthersOptionsSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Others Options:") ), wxVERTICAL ); + + m_ShowFilledAreasInSketchOpt = new wxCheckBox( this, wxID_ANY, _("Show filled areas in sketch mode"), wxDefaultPosition, wxDefaultSize, 0 ); + + m_ShowFilledAreasInSketchOpt->SetToolTip( _("If enabled, filled areas in is this zone will be displayed as non filled polygons.\nIf disabled, filled areas in is this zone will be displayed as \"solid\" areas (normal mode).") ); + + m_OthersOptionsSizer->Add( m_ShowFilledAreasInSketchOpt, 0, wxALL, 5 ); + + m_ClearanceValueTitle = new wxStaticText( this, wxID_ANY, _("Zone clearance value (mm):"), wxDefaultPosition, wxDefaultSize, 0 ); + m_ClearanceValueTitle->Wrap( -1 ); + m_OthersOptionsSizer->Add( m_ClearanceValueTitle, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); + + m_ZoneClearanceCtrl = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + m_OthersOptionsSizer->Add( m_ZoneClearanceCtrl, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + + m_OutilinesBoxOpt->Add( m_OthersOptionsSizer, 1, wxEXPAND, 5 ); + m_MiddleBoxSizer->Add( m_OutilinesBoxOpt, 1, wxEXPAND, 5 ); - m_ExportSetupBuuton = new wxButton( this, wxID_BUTTON_EXPORT, _("Export to others zones"), wxDefaultPosition, wxDefaultSize, 0 ); - m_ExportSetupBuuton->SetToolTip( _("Export this zone setup to all others copper zones") ); + m_ExportSetupButton = new wxButton( this, wxID_BUTTON_EXPORT, _("Export to others zones"), wxDefaultPosition, wxDefaultSize, 0 ); + m_ExportSetupButton->SetToolTip( _("Export this zone setup to all others copper zones") ); - m_MiddleBoxSizer->Add( m_ExportSetupBuuton, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 ); + m_MiddleBoxSizer->Add( m_ExportSetupButton, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 ); m_MiddleBox->Add( m_MiddleBoxSizer, 0, 0, 5 ); @@ -129,7 +155,7 @@ dialog_copper_zone_frame::dialog_copper_zone_frame( wxWindow* parent, wxWindowID m_ButtonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxDefaultSize, 0 ); m_RightBoxSizer->Add( m_ButtonCancel, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 ); - m_UnFillZoneButton = new wxButton( this, wxID_BUTTON_UNFILL, _("UnFill Zone"), wxDefaultPosition, wxDefaultSize, 0 ); + m_UnFillZoneButton = new wxButton( this, wxID_BUTTON_UNFILL, _("Remove Filling"), wxDefaultPosition, wxDefaultSize, 0 ); m_RightBoxSizer->Add( m_UnFillZoneButton, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 ); diff --git a/pcbnew/dialog_copper_zones_frame.fbp b/pcbnew/dialog_copper_zones_frame.fbp index 751fdae8b9..49507e5fd5 100644 --- a/pcbnew/dialog_copper_zones_frame.fbp +++ b/pcbnew/dialog_copper_zones_frame.fbp @@ -32,7 +32,7 @@ dialog_copper_zone_frame - 452,493 + 545,493 wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER Fill Zones Options @@ -123,7 +123,7 @@ 0 - "0.00000" "0.00000" "0.00000" "0.00000" "No Grid (For tests only!)" + "0.00000" "0.00000" "0.00000" "0.00000" "No grid (For tests only!)" 1 @@ -137,7 +137,7 @@ m_GridCtrl protected - 0 + 4 wxRA_SPECIFY_COLS @@ -171,133 +171,27 @@ - - 5 - wxTOP|wxRIGHT|wxLEFT - 0 - - - - 1 - - - 0 - wxID_ANY - Zone clearance value (mm): - - - m_ClearanceValueTitle - protected - - - - - - - - - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - - 5 - wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT - 0 - - - - 1 - - - 0 - wxID_ANY - - 0 - - m_ZoneClearanceCtrl - protected - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 5 wxALL|wxEXPAND 0 - "Include Pads" "Thermal Relief" "Exclude Pads" + "Include pads" "Thermal relief" "Exclude pads" 1 0 - wxID_ANY + wxID_PADS_IN_ZONE_OPTIONS Pad in Zone: 1 - m_FillOpt + m_PadInZoneOpt protected - 2 + 1 wxRA_SPECIFY_COLS @@ -322,7 +216,7 @@ - + OnPadsInZoneClick @@ -333,54 +227,228 @@ 5 - wxALL + wxEXPAND 0 - - - 0 - - 1 - - - 0 + wxID_ANY - Show filled areas in sketch mode - + Thermal Reliefs Parameters - m_ShowFilledAreasInSketchOpt - protected - - - - - If enabled, filled areas in is this zone will be displayed as non filled polygons. If disabled, filled areas in is this zone will be displayed as "solid" areas (normal mode). - - - - - - - - - - - - - - - - - - - - - - - - - - + m_ThermalShapesParamsSizer + wxVERTICAL + none + + 5 + wxTOP|wxRIGHT|wxLEFT + 0 + + + + 1 + + + 0 + wxID_ANY + Antipad Size + + + m_AntipadSizeText + protected + + + + + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND + 0 + + + + 1 + + + 0 + wxID_ANTIPAD_SIZE + + 0 + + m_AntipadSizeValue + protected + + + + + Define the gap around the pad + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxTOP|wxRIGHT|wxLEFT + 0 + + + + 1 + + + 0 + wxID_ANY + Copper Width + + + m_CopperBridgeWidthText + protected + + + + + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND + 0 + + + + 1 + + + 0 + wxID_COPPER_BRIDGE_VALUE + + 0 + + m_CopperWidthValue + protected + + + + + Define the tickness of copper in therma reliefs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -481,23 +549,13 @@ - - 5 - - 0 - - 5 - protected - 5 - - 5 wxALL|wxEXPAND 0 - "Line" "Hatched Outline" "Full Hatched" + "Line" "Hatched outline" "Full hatched" 1 @@ -511,7 +569,7 @@ m_OutlineAppearanceCtrl protected - 0 + 1 wxRA_SPECIFY_COLS @@ -599,6 +657,178 @@ + + 5 + wxEXPAND + 1 + + wxID_ANY + Others Options: + + m_OthersOptionsSizer + wxVERTICAL + none + + + 5 + wxALL + 0 + + + 0 + + 1 + + + 0 + wxID_ANY + Show filled areas in sketch mode + + + m_ShowFilledAreasInSketchOpt + protected + + + + + If enabled, filled areas in is this zone will be displayed as non filled polygons. If disabled, filled areas in is this zone will be displayed as "solid" areas (normal mode). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxTOP|wxRIGHT|wxLEFT + 0 + + + + 1 + + + 0 + wxID_ANY + Zone clearance value (mm): + + + m_ClearanceValueTitle + protected + + + + + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT + 0 + + + + 1 + + + 0 + wxID_ANY + + 0 + + m_ZoneClearanceCtrl + protected + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -617,7 +847,7 @@ Export to others zones - m_ExportSetupBuuton + m_ExportSetupButton protected @@ -795,7 +1025,7 @@ 0 wxID_BUTTON_UNFILL - UnFill Zone + Remove Filling m_UnFillZoneButton diff --git a/pcbnew/dialog_copper_zones_frame.h b/pcbnew/dialog_copper_zones_frame.h index 9ce3df5469..d90eea83d5 100644 --- a/pcbnew/dialog_copper_zones_frame.h +++ b/pcbnew/dialog_copper_zones_frame.h @@ -18,9 +18,9 @@ #include #include #include -#include #include #include +#include #include #include #include @@ -37,6 +37,7 @@ class dialog_copper_zone_frame : public wxDialog // Private event handlers void _wxFB_OnInitDialog( wxInitDialogEvent& event ){ OnInitDialog( event ); } + void _wxFB_OnPadsInZoneClick( wxCommandEvent& event ){ OnPadsInZoneClick( event ); } void _wxFB_ExportSetupToOtherCopperZones( wxCommandEvent& event ){ ExportSetupToOtherCopperZones( event ); } void _wxFB_OnButtonOkClick( wxCommandEvent& event ){ OnButtonOkClick( event ); } void _wxFB_OnButtonCancelClick( wxCommandEvent& event ){ OnButtonCancelClick( event ); } @@ -48,6 +49,9 @@ class dialog_copper_zone_frame : public wxDialog enum { ID_RADIOBOX_GRID_SELECTION = 1000, + wxID_PADS_IN_ZONE_OPTIONS, + wxID_ANTIPAD_SIZE, + wxID_COPPER_BRIDGE_VALUE, ID_RADIOBOX_OUTLINES_OPTION, wxID_ARC_APPROX, wxID_BUTTON_EXPORT, @@ -59,16 +63,19 @@ class dialog_copper_zone_frame : public wxDialog }; wxRadioBox* m_GridCtrl; - wxStaticText* m_ClearanceValueTitle; - wxTextCtrl* m_ZoneClearanceCtrl; - wxRadioBox* m_FillOpt; - wxCheckBox* m_ShowFilledAreasInSketchOpt; + wxRadioBox* m_PadInZoneOpt; + wxStaticText* m_AntipadSizeText; + wxTextCtrl* m_AntipadSizeValue; + wxStaticText* m_CopperBridgeWidthText; + wxTextCtrl* m_CopperWidthValue; wxRadioBox* m_OrientEdgesOpt; - wxRadioBox* m_OutlineAppearanceCtrl; wxRadioBox* m_ArcApproximationOpt; - wxButton* m_ExportSetupBuuton; + wxCheckBox* m_ShowFilledAreasInSketchOpt; + wxStaticText* m_ClearanceValueTitle; + wxTextCtrl* m_ZoneClearanceCtrl; + wxButton* m_ExportSetupButton; wxButton* m_OkButton; wxButton* m_ButtonCancel; @@ -84,6 +91,7 @@ class dialog_copper_zone_frame : public wxDialog // Virtual event handlers, overide them in your derived class virtual void OnInitDialog( wxInitDialogEvent& event ){ event.Skip(); } + virtual void OnPadsInZoneClick( wxCommandEvent& event ){ event.Skip(); } virtual void ExportSetupToOtherCopperZones( wxCommandEvent& event ){ event.Skip(); } virtual void OnButtonOkClick( wxCommandEvent& event ){ event.Skip(); } virtual void OnButtonCancelClick( wxCommandEvent& event ){ event.Skip(); } @@ -92,7 +100,7 @@ class dialog_copper_zone_frame : public wxDialog public: - dialog_copper_zone_frame( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Fill Zones Options"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 452,493 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER ); + dialog_copper_zone_frame( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Fill Zones Options"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 545,493 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER ); ~dialog_copper_zone_frame(); }; diff --git a/pcbnew/zones.h b/pcbnew/zones.h index 13f65f40c1..e17054713b 100644 --- a/pcbnew/zones.h +++ b/pcbnew/zones.h @@ -15,6 +15,8 @@ #define ZONE_NET_OUTLINES_HATCH_OPTION_KEY wxT( "Zone_Ouline_Hatch_Opt" ) #define ZONE_NET_SORT_OPTION_KEY wxT( "Zone_NetSort_Opt" ) #define ZONE_NET_FILTER_STRING_KEY wxT( "Zone_Filter_Opt" ) +#define ZONE_THERMAL_RELIEF_GAP_STRING_KEY wxT( "Zone_TH_Gap" ) +#define ZONE_THERMAL_RELIEF_COPPER_WIDTH_STRING_KEY wxT( "Zone_TH_Copper_Width" ) enum zone_cmd { ZONE_ABORT, @@ -37,6 +39,16 @@ eda_global int g_Zone_Hatching; // Option to show the zone a eda_global int g_Zone_Arc_Approximation; // Option to select number of segments to approximate a circle // 16 or 32 segments eda_global int g_FilledAreasShowMode; // Used to select draw options for filled areas in a zone (currently normal =0, sketch = 1) +eda_global long g_ThermalReliefGapValue // tickness of the gap in thermal reliefs +#ifdef MAIN += 200 +#endif +; +eda_global long g_ThermalReliefCopperBridgeValue // tickness of the copper bridge in thermal reliefs +#ifdef MAIN += 200 +#endif +; eda_global ZONE_CONTAINER::m_PadInZone g_Zone_Pad_Options #ifdef MAIN diff --git a/pcbnew/zones_by_polygon.cpp b/pcbnew/zones_by_polygon.cpp index 65d8d8a6e7..96934e5027 100644 --- a/pcbnew/zones_by_polygon.cpp +++ b/pcbnew/zones_by_polygon.cpp @@ -64,6 +64,8 @@ void WinEDA_PcbFrame::Add_Similar_Zone( wxDC* DC, ZONE_CONTAINER* zone_container * @param zone_container = parent zone outline */ { + if ( zone_container == NULL ) + return; s_AddCutoutToCurrentZone = false; s_CurrentZone = zone_container; wxCommandEvent evt; @@ -83,6 +85,8 @@ void WinEDA_PcbFrame::Add_Zone_Cutout( wxDC* DC, ZONE_CONTAINER* zone_container * @param zone_container = parent zone outline */ { + if ( zone_container == NULL ) + return; s_AddCutoutToCurrentZone = true; s_CurrentZone = zone_container; wxCommandEvent evt; @@ -479,39 +483,40 @@ int WinEDA_PcbFrame::Begin_Zone( wxDC* DC ) * Function Begin_Zone * either initializes the first segment of a new zone, or adds an * intermediate segment. + * A new zone can be: + * created from scratch: the user will be prompted to define parameters (layer, clearence ...) + * created from a similar zone (s_CurrentZone is used): parameters are copied from s_CurrentZone + * created as a cutout (an hole) inside s_CurrentZone */ { - // verify if s_CurrentZone exists: + // verify if s_CurrentZone exists (could be deleted since last selection) : int ii; - for( ii = 0; ii < m_Pcb->GetAreaCount(); ii++ ) { if( s_CurrentZone == m_Pcb->GetArea( ii ) ) break; } - if( ii == m_Pcb->GetAreaCount() ) // Not found: could be deleted since last selection + if( ii >= m_Pcb->GetAreaCount() ) // Not found: could be deleted since last selection { s_AddCutoutToCurrentZone = false; s_CurrentZone = NULL; } - - ZONE_CONTAINER* zone; - + // If no zone contour in progress, a new zone is beeing created: if( m_Pcb->m_CurrentZoneContour == NULL ) m_Pcb->m_CurrentZoneContour = new ZONE_CONTAINER( m_Pcb ); - zone = m_Pcb->m_CurrentZoneContour; - if( zone->GetNumCorners() == 0 ) /* Start a new contour: init zone params (net and layer) */ + ZONE_CONTAINER* zone = m_Pcb->m_CurrentZoneContour; + if( zone->GetNumCorners() == 0 ) /* Start a new contour: init zone params (net, layer ...) */ { - if( s_CurrentZone == NULL ) // A new outline is created + if( s_CurrentZone == NULL ) // A new outline is created, from scratch { int diag; // Init zone params to reasonnable values zone->SetLayer( ( (PCB_SCREEN*) GetScreen() )->m_Active_Layer ); - // Prompt user fro exact parameters: + // Prompt user for parameters: DrawPanel->m_IgnoreMouseEvents = TRUE; if( zone->IsOnCopperLayer() ) { // Put a zone on a copper layer @@ -541,7 +546,7 @@ int WinEDA_PcbFrame::Begin_Zone( wxDC* DC ) ( (PCB_SCREEN*) GetScreen() )->m_Active_Layer = g_CurrentZone_Layer; // Set by the dialog frame } - else /* Start a new contour: init zone params (net and layer) from an existing zone */ + else // Start a new contour: init zone params (net and layer) from an existing zone (add cutout or similar zone) { ( (PCB_SCREEN*) GetScreen() )->m_Active_Layer = g_CurrentZone_Layer = s_CurrentZone->GetLayer(); @@ -551,18 +556,18 @@ int WinEDA_PcbFrame::Begin_Zone( wxDC* DC ) /* Show the Net for zones on copper layers */ if( g_CurrentZone_Layer < FIRST_NO_COPPER_LAYER ) { - if( g_HightLigt_Status && (g_HightLigth_NetCode != g_NetcodeSelection) ) + if( s_CurrentZone ) + g_NetcodeSelection = s_CurrentZone->GetNet(); + if( g_HightLigt_Status ) { Hight_Light( DC ); // Remove old hightlight selection } - if( s_CurrentZone ) - g_NetcodeSelection = s_CurrentZone->GetNet(); g_HightLigth_NetCode = g_NetcodeSelection; Hight_Light( DC ); } if( !s_AddCutoutToCurrentZone ) - s_CurrentZone = NULL; // the zone is used only once + s_CurrentZone = NULL; // the zone is used only once ("add similar zone" command) } // if first segment @@ -574,6 +579,8 @@ int WinEDA_PcbFrame::Begin_Zone( wxDC* DC ) zone->m_TimeStamp = GetTimeStamp(); zone->m_PadOption = g_Zone_Pad_Options; zone->m_ZoneClearance = g_DesignSettings.m_ZoneClearence; + zone->m_ThermalReliefGapValue = g_ThermalReliefGapValue; + zone->m_ThermalReliefCopperBridgeValue = g_ThermalReliefCopperBridgeValue; zone->m_GridFillValue = g_GridRoutingSize; zone->m_Poly->Start( g_CurrentZone_Layer, GetScreen()->m_Curseur.x, GetScreen()->m_Curseur.y, @@ -729,6 +736,8 @@ static void Show_New_Edge_While_Move_Mouse( WinEDA_DrawPanel* panel, wxDC* DC, b return; int icorner = zone->GetNumCorners() - 1; + if ( icorner < 1 ) + return; // We must have 2 (or more) corners if( erase ) /* Undraw edge in old position*/ { @@ -760,7 +769,6 @@ void WinEDA_PcbFrame::Edit_Zone_Params( wxDC* DC, ZONE_CONTAINER* zone_container */ { int diag; - DrawPanel->m_IgnoreMouseEvents = TRUE; if( zone_container->GetLayer() < FIRST_NO_COPPER_LAYER ) { // edit a zone on a copper layer @@ -795,6 +803,8 @@ void WinEDA_PcbFrame::Edit_Zone_Params( wxDC* DC, ZONE_CONTAINER* zone_container zone_container->m_GridFillValue = g_GridRoutingSize; zone_container->m_ArcToSegmentsCount = g_Zone_Arc_Approximation; zone_container->m_DrawOptions = g_FilledAreasShowMode; + zone_container->m_ThermalReliefGapValue = g_ThermalReliefGapValue; + zone_container->m_ThermalReliefCopperBridgeValue = g_ThermalReliefCopperBridgeValue; // Combine zones if possible : diff --git a/pcbnew/zones_convert_brd_items_to_polygons.cpp b/pcbnew/zones_convert_brd_items_to_polygons.cpp index 1fcee50c95..b4fb9ab090 100644 --- a/pcbnew/zones_convert_brd_items_to_polygons.cpp +++ b/pcbnew/zones_convert_brd_items_to_polygons.cpp @@ -113,7 +113,8 @@ void ZONE_CONTAINER::AddClearanceAreasPolygonsToPolysList( BOARD* aPcb ) break; case THERMAL_PAD: - AddThermalReliefPadPolygon( booleng, *pad, 100, 100 ); + AddThermalReliefPadPolygon( booleng, *pad, + m_ThermalReliefGapValue, m_ThermalReliefCopperBridgeValue ); break; case PAD_IN_ZONE: