From 738d00ba721f0e05ac9bc614aa792a2d1022c745 Mon Sep 17 00:00:00 2001 From: CHARRAS Date: Sun, 30 Dec 2007 18:20:51 +0000 Subject: [PATCH] more about new zone handling: fill zones now exists --- include/id.h | 2 +- include/wxstruct.h | 37 +- internat/fr/kicad.mo | Bin 138257 -> 140177 bytes internat/fr/kicad.po | 3217 +++++++++-------- libs.win | 20 +- pcbnew/CMakeLists.txt | 2 +- pcbnew/class_zone.cpp | 5 +- pcbnew/class_zone.h | 25 +- pcbnew/dialog_zones_by_polygon.cpp | 32 +- pcbnew/edit.cpp | 26 +- pcbnew/makefile.include | 2 +- pcbnew/onrightclick.cpp | 19 +- ...gorithm.cpp => zone_filling_algorithm.cpp} | 302 +- pcbnew/zones_by_polygon.cpp | 373 +- polygon/PolyLine.cpp | 8 +- 15 files changed, 2202 insertions(+), 1868 deletions(-) rename pcbnew/{filling_zone_algorithm.cpp => zone_filling_algorithm.cpp} (71%) diff --git a/include/id.h b/include/id.h index 3a8d2422ea..bb5f08719e 100644 --- a/include/id.h +++ b/include/id.h @@ -554,7 +554,7 @@ enum main_id { ID_POPUP_PCB_DELETE_ZONE_CORNER, ID_POPUP_PCB_STOP_CURRENT_EDGE_ZONE, ID_POPUP_PCB_DELETE_EDGE_ZONE, - ID_POPUP_PCB_DELETE_ZONE_LIMIT, + ID_POPUP_PCB_FILL_ALL_ZONES, ID_POPUP_PCB_FILL_ZONE, ID_POPUP_PCB_DELETE_ZONE_CONTAINER, ID_POPUP_PCB_PLACE_ZONE_CORNER, diff --git a/include/wxstruct.h b/include/wxstruct.h index 72de15b449..20b0d3d263 100644 --- a/include/wxstruct.h +++ b/include/wxstruct.h @@ -748,7 +748,15 @@ public: bool Genere_Pad_Connexion( wxDC* DC, int layer ); // zone handling - void Delete_Zone( wxDC* DC, SEGZONE* Track ); +/** Function Delete_Zone + * Remove the zone which include the segment aZone, or the zone which have the given time stamp. + * A zone is a group of segments which have the same TimeStamp + * @param DC = current Device Context (can be NULL) + * @param aZone = zone segment within the zone to delete. Can be NULL + * @param aTimestamp = Timestamp for the zone to delete, used if aZone == NULL + */ + void Delete_Zone( wxDC* DC, SEGZONE* Track, long aTimestamp = 0 ); + EDGE_ZONE* Del_SegmEdgeZone( wxDC* DC, EDGE_ZONE* edge_zone ); /** * Function Begin_Zone @@ -760,14 +768,31 @@ public: /** * Function End_Zone * terminates the zone edge creation process + * @param DC = current Device Context */ void End_Zone( wxDC* DC ); - /** - * Function Fill_Zone - * Fills an outline. - */ - void Fill_Zone( wxDC* DC, ZONE_CONTAINER * zone_container ); + /** Function Fill_Zone() + * Calculate the zone filling for the outline zone_container + * The zone outline is a frontier, and can be complex (with holes) + * The filling starts from starting points like pads, tracks. + * If exists the old filling is removed + * @param DC = current Device Context + * @param zone_container = zone to fill + * @param verbose = true to show error messages + * @return error level (0 = no error) + */ + int Fill_Zone( wxDC* DC, ZONE_CONTAINER * zone_container, bool verbose = TRUE ); + + /** Function Fill_All_Zones() + * Fill all zones on the board + * The old fillings are removed + * @param frame = reference to the main frame + * @param DC = current Device Context + * @param verbose = true to show error messages + * @return error level (0 = no error) + */ + int Fill_All_Zones( wxDC* DC, bool verbose = TRUE ); /** * Function Edit_Zone_Params diff --git a/internat/fr/kicad.mo b/internat/fr/kicad.mo index e5230d6e017fa2257acd2445b4385dc8f1b87a55..9fb260b2d33fc501eb4805f9b212be3ffa880916 100644 GIT binary patch delta 51678 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 z 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

~P<}qf@xGSa|2E?l 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 D1b0GM diff --git a/internat/fr/kicad.po b/internat/fr/kicad.po index 368cfdf16e..46fffa6354 100644 --- a/internat/fr/kicad.po +++ b/internat/fr/kicad.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: kicad\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2007-12-20 23:05+0100\n" +"PO-Revision-Date: 2007-12-30 19:07+0100\n" "Last-Translator: \n" "Language-Team: kicad team \n" "MIME-Version: 1.0\n" @@ -21,20 +21,195 @@ msgstr "" "X-Poedit-SearchPath-6: 3d-viewer\n" "X-Poedit-SearchPath-7: share\n" -#: pcbnew/editrout.cpp:116 -#: pcbnew/edit_track_width.cpp:128 -msgid "Edit All Tracks and Vias Sizes" -msgstr "Editer TOUTES Pistes et Vias" +#: pcbnew/gendrill.cpp:150 +msgid "Drill tools" +msgstr "Outils de perçage" -#: pcbnew/editrout.cpp:121 -#: pcbnew/edit_track_width.cpp:133 -msgid "Edit All Via Sizes" -msgstr "Editer TOUTES Vias" +#: pcbnew/gendrill.cpp:171 +#: pcbnew/dialog_general_options.cpp:272 +#: gerbview/options.cpp:186 +msgid "millimeters" +msgstr "millimetres" -#: pcbnew/editrout.cpp:126 -#: pcbnew/edit_track_width.cpp:138 -msgid "Edit All Track Sizes" -msgstr "Editer TOUTES Pistes" +#: pcbnew/gendrill.cpp:171 +#: eeschema/dialog_options.cpp:246 +msgid "inches" +msgstr "Pouces" + +#: pcbnew/gendrill.cpp:173 +msgid "Drill Units:" +msgstr "Unités perçage:" + +#: pcbnew/gendrill.cpp:181 +msgid "decimal format" +msgstr "Format décimal" + +#: pcbnew/gendrill.cpp:182 +msgid "suppress leading zeros" +msgstr "Suppression zeros de tête" + +#: pcbnew/gendrill.cpp:182 +msgid "suppress trailing zeros" +msgstr "Suppression zeros de fin" + +#: pcbnew/gendrill.cpp:182 +msgid "keep zeros" +msgstr "Garder les zéros" + +#: pcbnew/gendrill.cpp:185 +msgid "Zeros Format" +msgstr "Format des zéros" + +#: pcbnew/gendrill.cpp:192 +#: pcbnew/gendrill.cpp:452 +msgid "2:3" +msgstr "2:3" + +#: pcbnew/gendrill.cpp:192 +#: pcbnew/gendrill.cpp:453 +msgid "2:4" +msgstr "2:4" + +#: pcbnew/gendrill.cpp:193 +#: pcbnew/gendrill.cpp:458 +msgid "3:2" +msgstr "3:2" + +#: pcbnew/gendrill.cpp:193 +#: pcbnew/gendrill.cpp:459 +msgid "3:3" +msgstr "3:3" + +#: pcbnew/gendrill.cpp:199 +msgid "Precision" +msgstr "Précision" + +#: pcbnew/gendrill.cpp:211 +msgid "absolute" +msgstr "Absolu" + +#: pcbnew/gendrill.cpp:211 +msgid "auxiliary axis" +msgstr "Axe Auxiliaire" + +#: pcbnew/gendrill.cpp:213 +msgid "Drill Origin:" +msgstr "Origine des coord de percage:" + +#: pcbnew/gendrill.cpp:222 +#: pcbnew/gendrill.cpp:230 +#: eeschema/libedit.cpp:41 +#: eeschema/viewlibs.cpp:120 +msgid "None" +msgstr "Aucun" + +#: pcbnew/gendrill.cpp:222 +msgid "drill sheet (HPGL)" +msgstr "Plan de perçage (HPGL)" + +#: pcbnew/gendrill.cpp:222 +msgid "drill sheet (PostScript)" +msgstr "Plan de perçage (Postscript)" + +#: pcbnew/gendrill.cpp:224 +msgid "Drill Sheet:" +msgstr "Plan de perçage:" + +#: pcbnew/gendrill.cpp:230 +msgid "Drill report" +msgstr "Rapport de perçage" + +#: pcbnew/gendrill.cpp:232 +msgid "Drill Report:" +msgstr "Rapport de perçage:" + +#: pcbnew/gendrill.cpp:238 +msgid "Via Drill" +msgstr "Perçage des vias" + +#: pcbnew/gendrill.cpp:243 +#: eeschema/plothpgl.cpp:239 +msgid "Pen Number" +msgstr "Numéro de plume" + +#: pcbnew/gendrill.cpp:246 +msgid "Speed (cm/s)" +msgstr "Vitesse plume ( cm/s )" + +#: pcbnew/gendrill.cpp:249 +msgid "mirror y axis" +msgstr "Miroir sur axe Y" + +#: pcbnew/gendrill.cpp:253 +msgid "minimal header" +msgstr "Entête minimal" + +#: pcbnew/gendrill.cpp:259 +msgid "&Execute" +msgstr "&Exécuter" + +#: pcbnew/gendrill.cpp:263 +#: eeschema/plotps.cpp:208 +#: share/svg_print.cpp:222 +#: share/dialog_print.cpp:225 +msgid "&Close" +msgstr "&Fermer" + +#: pcbnew/gendrill.cpp:389 +msgid "Drill file" +msgstr "Fichier de percage" + +#: pcbnew/gendrill.cpp:403 +#: pcbnew/gendrill.cpp:1623 +#: pcbnew/plotps.cpp:51 +#: pcbnew/xchgmod.cpp:642 +msgid "Unable to create file " +msgstr "Impossible de créer le fichier " + +#: pcbnew/gendrill.cpp:410 +#: pcbnew/gendrill.cpp:1036 +#: pcbnew/gendrill.cpp:1629 +#: pcbnew/plothpgl.cpp:74 +#: pcbnew/plotps.cpp:58 +#: pcbnew/plotgerb.cpp:84 +msgid "File" +msgstr "Fichier" + +#: pcbnew/gendrill.cpp:416 +#: pcbnew/gendrill.cpp:1041 +#: pcbnew/gendrill.cpp:1634 +msgid "Tools" +msgstr "Outils" + +#: pcbnew/gendrill.cpp:420 +#: pcbnew/gendrill.cpp:1110 +#: pcbnew/gendrill.cpp:1686 +#: pcbnew/class_pad.cpp:1085 +#: pcbnew/class_track.cpp:822 +#: pcbnew/class_track.cpp:827 +msgid "Drill" +msgstr "Perçage" + +#: pcbnew/gendrill.cpp:971 +msgid "Drill Map file" +msgstr "Fichier Plan de perçage" + +#: pcbnew/gendrill.cpp:1030 +#, c-format +msgid "Unable to create file <%s>" +msgstr "Impossible de créer fichier <%s>" + +#: pcbnew/gendrill.cpp:1332 +msgid "" +" Drill map: Too many diameter values to draw to draw one symbol per drill value (max 13)\n" +"Plot uses circle shape for some drill values" +msgstr "" +"Plan de perçage: trop de diametres différents pour tracer 1 symbole par diametre\n" +"Le tracé utilise des cercles pour quelques valeurs " + +#: pcbnew/gendrill.cpp:1608 +msgid "Drill Report file" +msgstr "Fichier rapport de perçage:" #: pcbnew/files.cpp:57 msgid "Recovery file " @@ -65,7 +240,7 @@ msgstr "Charger Fichiers C.I.:" #: pcbnew/files.cpp:182 #: pcbnew/librairi.cpp:64 -#: cvpcb/readschematicnetlist.cpp:51 +#: cvpcb/readschematicnetlist.cpp:53 #: cvpcb/rdpcad.cpp:45 #, c-format msgid "File <%s> not found" @@ -136,12 +311,6 @@ msgstr "Affichage coord Polaires" msgid "Inches" msgstr "Pouces" -#: pcbnew/dialog_general_options.cpp:272 -#: pcbnew/gendrill.cpp:171 -#: gerbview/options.cpp:186 -msgid "millimeters" -msgstr "millimetres" - #: pcbnew/dialog_general_options.cpp:275 #: eeschema/dialog_options.cpp:248 #: gerbview/options.cpp:187 @@ -275,9 +444,10 @@ msgstr "&OK" #: pcbnew/dialog_track_options.cpp:190 #: pcbnew/dialog_display_options.cpp:286 #: pcbnew/swap_layers.cpp:224 -#: pcbnew/zones.cpp:216 #: pcbnew/set_grid.cpp:176 #: pcbnew/dialog_pad_edit.cpp:221 +#: pcbnew/zones.cpp:219 +#: pcbnew/dialog_zones_by_polygon.cpp:204 #: pcbnew/dialog_drc.cpp:545 #: eeschema/plothpgl.cpp:274 #: eeschema/symbtext.cpp:178 @@ -304,6 +474,18 @@ msgstr "&Annuler" msgid "Change track width (entire NET) ?" msgstr "Change largeur piste ( NET complet) ?" +#: pcbnew/edit_track_width.cpp:128 +msgid "Edit All Tracks and Vias Sizes" +msgstr "Editer TOUTES Pistes et Vias" + +#: pcbnew/edit_track_width.cpp:133 +msgid "Edit All Via Sizes" +msgstr "Editer TOUTES Vias" + +#: pcbnew/edit_track_width.cpp:138 +msgid "Edit All Track Sizes" +msgstr "Editer TOUTES Pistes" + #: pcbnew/autoplac.cpp:106 msgid "Footprints NOT LOCKED will be moved" msgstr "Les modules NON FIXES vont être déplacés" @@ -359,6 +541,7 @@ msgstr "3D Caract" #: pcbnew/cotation.cpp:105 #: pcbnew/mirepcb.cpp:99 #: pcbnew/set_color.cpp:353 +#: pcbnew/dialog_zones_by_polygon.cpp:201 #: eeschema/sheetlab.cpp:93 #: eeschema/eelayer.cpp:251 #: gerbview/reglage.cpp:108 @@ -366,7 +549,7 @@ msgstr "3D Caract" #: gerbview/options.cpp:289 #: gerbview/set_color.cpp:325 #: common/get_component_dialog.cpp:112 -#: common/displlst.cpp:99 +#: common/displlst.cpp:106 msgid "OK" msgstr "OK" @@ -384,12 +567,12 @@ msgstr "OK" #: pcbnew/cotation.cpp:109 #: pcbnew/mirepcb.cpp:103 #: pcbnew/set_color.cpp:357 -#: eeschema/libedit_onrightclick.cpp:68 -#: eeschema/libedit_onrightclick.cpp:83 -#: eeschema/onrightclick.cpp:121 -#: eeschema/onrightclick.cpp:133 +#: eeschema/onrightclick.cpp:122 +#: eeschema/onrightclick.cpp:134 #: eeschema/sheetlab.cpp:97 #: eeschema/eelayer.cpp:255 +#: eeschema/libedit_onrightclick.cpp:48 +#: eeschema/libedit_onrightclick.cpp:63 #: gerbview/reglage.cpp:112 #: gerbview/onrightclick.cpp:40 #: gerbview/onrightclick.cpp:59 @@ -397,8 +580,8 @@ msgstr "OK" #: gerbview/options.cpp:293 #: gerbview/set_color.cpp:329 #: common/get_component_dialog.cpp:121 -#: common/displlst.cpp:103 #: common/selcolor.cpp:171 +#: common/displlst.cpp:111 msgid "Cancel" msgstr "Annuler" @@ -412,7 +595,7 @@ msgid "Edit Module" msgstr "Edit Module" #: pcbnew/dialog_edit_module.cpp:193 -#: eeschema/onrightclick.cpp:348 +#: eeschema/onrightclick.cpp:354 #: eeschema/dialog_edit_component_in_lib.cpp:203 msgid "Doc" msgstr "Doc" @@ -430,7 +613,7 @@ msgid "Add Field" msgstr "Ajouter Champ" #: pcbnew/dialog_edit_module.cpp:222 -#: eeschema/onrightclick.cpp:268 +#: eeschema/onrightclick.cpp:269 msgid "Edit Field" msgstr "Editer Champ" @@ -453,9 +636,10 @@ msgstr "Cuivre" #: pcbnew/sel_layer.cpp:145 #: pcbnew/class_pcb_text.cpp:198 #: pcbnew/class_pad.cpp:1062 -#: pcbnew/classpcb.cpp:245 +#: pcbnew/classpcb.cpp:210 #: pcbnew/class_track.cpp:806 #: pcbnew/class_module.cpp:1217 +#: pcbnew/class_zone.cpp:407 #: gerbview/affiche.cpp:109 msgid "Layer" msgstr "Couche" @@ -466,7 +650,7 @@ msgstr "Couche" #: pcbnew/muonde.cpp:360 #: pcbnew/cotation.cpp:113 #: eeschema/dialog_options.cpp:229 -#: eeschema/onrightclick.cpp:305 +#: eeschema/onrightclick.cpp:306 #: eeschema/dialog_edit_component_in_schematic.cpp:180 msgid "Normal" msgstr "Normal" @@ -588,6 +772,14 @@ msgstr "R msgid "Delete [%s]" msgstr "Supprimer [%s]" +#: pcbnew/surbrill.cpp:37 +msgid "Filter for net names:" +msgstr "Filtre pour nets:" + +#: pcbnew/surbrill.cpp:41 +msgid "List Nets" +msgstr "Liste équipots" + #: pcbnew/loadcmp.cpp:103 msgid "Module name:" msgstr "Nom module:" @@ -640,66 +832,6 @@ msgstr " fichier %s non trouv msgid "Save preferences" msgstr "Sauver préférences" -#: pcbnew/edit.cpp:171 -#: pcbnew/editmod.cpp:45 -msgid "Module Editor" -msgstr "Ouvrir Editeur de modules" - -#: pcbnew/edit.cpp:251 -msgid "Add Tracks" -msgstr "Addition de pistes" - -#: pcbnew/edit.cpp:260 -msgid "Add Zones" -msgstr "Addition de Zones" - -#: pcbnew/edit.cpp:262 -msgid "Warning: Display Zone is OFF!!!" -msgstr "Attention: Affichage zones désactivé !!!" - -#: pcbnew/edit.cpp:269 -msgid "Add Layer Alignment Target" -msgstr "Ajouter Mire de superposition" - -#: pcbnew/edit.cpp:273 -msgid "Adjust Zero" -msgstr "Ajuster Zéro" - -#: pcbnew/edit.cpp:279 -msgid "Add Graphic" -msgstr "Addition éléments graphiques" - -#: pcbnew/edit.cpp:283 -#: pcbnew/tool_modedit.cpp:180 -#: eeschema/schedit.cpp:314 -#: eeschema/libframe.cpp:503 -#: gerbview/tool_gerber.cpp:385 -msgid "Add Text" -msgstr "Ajout de Texte" - -#: pcbnew/edit.cpp:287 -msgid "Add Modules" -msgstr "Addition de Modules" - -#: pcbnew/edit.cpp:291 -msgid "Add Dimension" -msgstr "Ajout de cotes" - -#: pcbnew/edit.cpp:299 -msgid "Net Highlight" -msgstr "Surbrillance des équipotentielles" - -#: pcbnew/edit.cpp:303 -msgid "Local Ratsnest" -msgstr "Monter le chevelu général" - -#: pcbnew/edit.cpp:461 -#: pcbnew/modedit.cpp:426 -#: eeschema/schedit.cpp:454 -#: eeschema/libframe.cpp:579 -msgid "Delete item" -msgstr "Suppression d'éléments" - #: pcbnew/dialog_setup_libs.cpp:97 #: eeschema/dialog_eeschema_config.cpp:105 #: cvpcb/dialog_cvpcb_config.cpp:76 @@ -782,15 +914,6 @@ msgstr "Fichiers Librairies" msgid "Library exists! No Change" msgstr "Librairie existante! Pas de changement" -#: pcbnew/plothpgl.cpp:74 -#: pcbnew/gendrill.cpp:401 -#: pcbnew/gendrill.cpp:1027 -#: pcbnew/gendrill.cpp:1620 -#: pcbnew/plotps.cpp:58 -#: pcbnew/plotgerb.cpp:84 -msgid "File" -msgstr "Fichier" - #: pcbnew/librairi.cpp:48 msgid "Import Module:" msgstr "Importer Module:" @@ -1135,6 +1258,7 @@ msgstr "Echelle" #: pcbnew/dialog_display_options.cpp:229 #: pcbnew/dialog_display_options.cpp:266 #: pcbnew/class_board_item.cpp:99 +#: pcbnew/dialog_zones_by_polygon.cpp:167 #: gerbview/options.cpp:321 msgid "Line" msgstr "Ligne" @@ -1209,9 +1333,8 @@ msgstr "Ref." #: pcbnew/class_text_mod.cpp:345 #: pcbnew/class_board_item.cpp:80 #: pcbnew/class_edge_mod.cpp:286 -#: eeschema/edit_component_in_schematic.cpp:784 -#: eeschema/onrightclick.cpp:316 #: eeschema/component_class.cpp:55 +#: eeschema/edit_component_in_schematic.cpp:784 #: eeschema/eelayer.h:159 msgid "Value" msgstr "Valeur" @@ -1231,9 +1354,10 @@ msgid "Module" msgstr "Module" #: pcbnew/class_text_mod.cpp:359 -#: pcbnew/classpcb.cpp:229 +#: pcbnew/classpcb.cpp:194 #: pcbnew/class_marker.cpp:112 #: pcbnew/class_track.cpp:750 +#: pcbnew/class_zone.cpp:388 #: gerbview/affiche.cpp:93 msgid "Type" msgstr "Type" @@ -1268,7 +1392,7 @@ msgstr "Miroir" #: pcbnew/pcbtexte.cpp:130 #: pcbnew/class_pcb_text.cpp:212 #: pcbnew/dialog_edit_mod_text.cpp:204 -#: pcbnew/classpcb.cpp:250 +#: pcbnew/classpcb.cpp:215 #: pcbnew/cotation.cpp:129 #: pcbnew/class_track.cpp:830 #: pcbnew/mirepcb.cpp:113 @@ -1378,14 +1502,6 @@ msgstr "Pas de memoire pour autoroutage" msgid "Place Cells" msgstr "Place Cells" -#: pcbnew/move_or_drag_track.cpp:709 -msgid "Unable to drag this segment: too many segments connected" -msgstr "Impossible de drag ce segment: trop de segments connectés" - -#: pcbnew/move_or_drag_track.cpp:762 -msgid "Unable to drag this segment: two collinear segments" -msgstr "Impossible de drag ce segment: 2 segments alignés" - #: pcbnew/muonde.cpp:149 msgid "Gap" msgstr "Gap" @@ -1513,65 +1629,13 @@ msgstr "Hauteur Texte Module" msgid "Text Module Size H" msgstr "Largeur Texte Module" -#: pcbnew/clean.cpp:177 -msgid "Delete unconnected tracks:" -msgstr "Suppression Pistes non connectées" +#: pcbnew/zone_filling_algorithm.cpp:158 +msgid "No pads or starting point found to fill this zone outline" +msgstr "Pas de pads ou de points de départ pour remplir ce contour de zone" -#: pcbnew/clean.cpp:196 -msgid "ViaDef" -msgstr "ViaDef" - -#: pcbnew/clean.cpp:368 -msgid "Clean Null Segments" -msgstr "Nettoyage segments nulls" - -#: pcbnew/clean.cpp:460 -msgid "Merging Segments:" -msgstr "Associe Segment" - -#: pcbnew/clean.cpp:462 -msgid "Merge" -msgstr "Merge" - -#: pcbnew/clean.cpp:462 -#: pcbnew/dialog_pad_edit.cpp:186 -#: eeschema/dialog_erc.cpp:192 -#: eeschema/dialog_erc.cpp:196 -#: eeschema/dialog_edit_component_in_schematic.cpp:171 -msgid "0" -msgstr "0" - -#: pcbnew/clean.cpp:478 -msgid "Merge: " -msgstr "Merge: " - -#: pcbnew/clean.cpp:708 -msgid "DRC Control:" -msgstr "Controle DRC:" - -#: pcbnew/clean.cpp:713 -msgid "NetCtr" -msgstr "NetCtr" - -#: pcbnew/clean.cpp:1055 -msgid "Centre" -msgstr "Centre" - -#: pcbnew/clean.cpp:1055 -msgid "0 " -msgstr "0" - -#: pcbnew/clean.cpp:1066 -msgid "Pads: " -msgstr "Pastilles: " - -#: pcbnew/clean.cpp:1070 -msgid "Max" -msgstr "Max" - -#: pcbnew/clean.cpp:1073 -msgid "Segm" -msgstr "Segm" +#: pcbnew/zone_filling_algorithm.cpp:196 +msgid "Ok" +msgstr "Ok" #: pcbnew/tool_modedit.cpp:53 #: eeschema/tool_lib.cpp:123 @@ -1675,7 +1739,7 @@ msgid "auto zoom" msgstr "Zoom automatique" #: pcbnew/tool_modedit.cpp:133 -#: pcbnew/modedit.cpp:398 +#: pcbnew/modedit.cpp:396 #: pcbnew/menubarmodedit.cpp:45 #: pcbnew/menubarpcb.cpp:209 msgid "Pad Settings" @@ -1705,8 +1769,16 @@ msgstr "Addition de graphiques (Cercle)" msgid "Add graphic arc" msgstr "Addition de graphiques (Arc de Cercle)" +#: pcbnew/tool_modedit.cpp:180 +#: pcbnew/edit.cpp:283 +#: eeschema/schedit.cpp:315 +#: eeschema/libframe.cpp:503 +#: gerbview/tool_gerber.cpp:385 +msgid "Add Text" +msgstr "Ajout de Texte" + #: pcbnew/tool_modedit.cpp:185 -#: pcbnew/modedit.cpp:412 +#: pcbnew/modedit.cpp:410 msgid "Place anchor" msgstr "Place Ancre" @@ -1811,186 +1883,15 @@ msgstr "COTATION" msgid "PCB Text" msgstr "Texte Pcb" -#: pcbnew/gendrill.cpp:150 -msgid "Drill tools" -msgstr "Outils de perçage" - -#: pcbnew/gendrill.cpp:171 -#: eeschema/dialog_options.cpp:246 -msgid "inches" -msgstr "Pouces" - -#: pcbnew/gendrill.cpp:173 -msgid "Drill Units:" -msgstr "Unités perçage:" - -#: pcbnew/gendrill.cpp:181 -msgid "decimal format" -msgstr "Format décimal" - -#: pcbnew/gendrill.cpp:182 -msgid "suppress leading zeros" -msgstr "Suppression zeros de tête" - -#: pcbnew/gendrill.cpp:182 -msgid "suppress trailing zeros" -msgstr "Suppression zeros de fin" - -#: pcbnew/gendrill.cpp:182 -msgid "keep zeros" -msgstr "Garder les zéros" - -#: pcbnew/gendrill.cpp:185 -msgid "Zeros Format" -msgstr "Format des zéros" - -#: pcbnew/gendrill.cpp:192 -#: pcbnew/gendrill.cpp:443 -msgid "2:3" -msgstr "2:3" - -#: pcbnew/gendrill.cpp:192 -#: pcbnew/gendrill.cpp:444 -msgid "2:4" -msgstr "2:4" - -#: pcbnew/gendrill.cpp:193 -#: pcbnew/gendrill.cpp:449 -msgid "3:2" -msgstr "3:2" - -#: pcbnew/gendrill.cpp:193 -#: pcbnew/gendrill.cpp:450 -msgid "3:3" -msgstr "3:3" - -#: pcbnew/gendrill.cpp:199 -msgid "Precision" -msgstr "Précision" - -#: pcbnew/gendrill.cpp:211 -msgid "absolute" -msgstr "Absolu" - -#: pcbnew/gendrill.cpp:211 -msgid "auxiliary axis" -msgstr "Axe Auxiliaire" - -#: pcbnew/gendrill.cpp:213 -msgid "Drill Origin:" -msgstr "Origine des coord de percage:" - -#: pcbnew/gendrill.cpp:222 -#: pcbnew/gendrill.cpp:230 -#: eeschema/libedit.cpp:41 -#: eeschema/viewlibs.cpp:120 -msgid "None" -msgstr "Aucun" - -#: pcbnew/gendrill.cpp:222 -msgid "drill sheet (HPGL)" -msgstr "Plan de perçage (HPGL)" - -#: pcbnew/gendrill.cpp:222 -msgid "drill sheet (PostScript)" -msgstr "Plan de perçage (Postscript)" - -#: pcbnew/gendrill.cpp:224 -msgid "Drill Sheet:" -msgstr "Plan de perçage:" - -#: pcbnew/gendrill.cpp:230 -msgid "Drill report" -msgstr "Rapport de perçage" - -#: pcbnew/gendrill.cpp:232 -msgid "Drill Report:" -msgstr "Rapport de perçage:" - -#: pcbnew/gendrill.cpp:238 -msgid "Via Drill" -msgstr "Perçage des vias" - -#: pcbnew/gendrill.cpp:243 -#: eeschema/plothpgl.cpp:239 -msgid "Pen Number" -msgstr "Numéro de plume" - -#: pcbnew/gendrill.cpp:246 -msgid "Speed (cm/s)" -msgstr "Vitesse plume ( cm/s )" - -#: pcbnew/gendrill.cpp:249 -msgid "mirror y axis" -msgstr "Miroir sur axe Y" - -#: pcbnew/gendrill.cpp:253 -msgid "minimal header" -msgstr "Entête minimal" - -#: pcbnew/gendrill.cpp:259 -msgid "&Execute" -msgstr "&Exécuter" - -#: pcbnew/gendrill.cpp:263 -#: eeschema/plotps.cpp:208 -#: share/svg_print.cpp:222 -#: share/dialog_print.cpp:225 -msgid "&Close" -msgstr "&Fermer" - -#: pcbnew/gendrill.cpp:380 -msgid "Drill file" -msgstr "Fichier de percage" - -#: pcbnew/gendrill.cpp:394 -#: pcbnew/gendrill.cpp:1614 -#: pcbnew/plotps.cpp:51 -#: pcbnew/xchgmod.cpp:642 -msgid "Unable to create file " -msgstr "Impossible de créer le fichier " - -#: pcbnew/gendrill.cpp:407 -#: pcbnew/gendrill.cpp:1032 -#: pcbnew/gendrill.cpp:1625 -msgid "Tools" -msgstr "Outils" - -#: pcbnew/gendrill.cpp:411 -#: pcbnew/gendrill.cpp:1101 -#: pcbnew/gendrill.cpp:1677 -#: pcbnew/class_pad.cpp:1085 -#: pcbnew/class_track.cpp:822 -#: pcbnew/class_track.cpp:827 -msgid "Drill" -msgstr "Perçage" - -#: pcbnew/gendrill.cpp:962 -msgid "Drill Map file" -msgstr "Fichier Plan de perçage" - -#: pcbnew/gendrill.cpp:1021 -#, c-format -msgid "Unable to create file <%s>" -msgstr "Impossible de créer fichier <%s>" - -#: pcbnew/gendrill.cpp:1323 -msgid "" -" Drill map: Too many diameter values to draw to draw one symbol per drill value (max 13)\n" -"Plot uses circle shape for some drill values" -msgstr "" -"Plan de perçage: trop de diametres différents pour tracer 1 symbole par diametre\n" -"Le tracé utilise des cercles pour quelques valeurs " - -#: pcbnew/gendrill.cpp:1599 -msgid "Drill Report file" -msgstr "Fichier rapport de perçage:" +#: pcbnew/ioascii.cpp:165 +msgid "Error: Unexpected end of file !" +msgstr "Erreur: Fin de fichier inattendue !" #: pcbnew/dialog_netlist.cpp:135 #: pcbnew/class_board_item.cpp:76 -#: eeschema/edit_component_in_schematic.cpp:745 -#: eeschema/onrightclick.cpp:317 +#: eeschema/onrightclick.cpp:320 #: eeschema/dialog_create_component.cpp:164 +#: eeschema/edit_component_in_schematic.cpp:745 #: eeschema/eelayer.h:153 msgid "Reference" msgstr "Référence" @@ -2009,9 +1910,9 @@ msgid "Keep" msgstr "Garder" #: pcbnew/dialog_netlist.cpp:143 -#: pcbnew/onrightclick.cpp:598 -#: pcbnew/onrightclick.cpp:708 -#: pcbnew/onrightclick.cpp:805 +#: pcbnew/onrightclick.cpp:623 +#: pcbnew/onrightclick.cpp:733 +#: pcbnew/onrightclick.cpp:830 #: eeschema/edit_component_in_lib.cpp:239 #: eeschema/edit_component_in_lib.cpp:320 msgid "Delete" @@ -2142,19 +2043,6 @@ msgstr "Invisible" msgid "Value:" msgstr "Valeur:" -#: pcbnew/editrack-part2.cpp:32 -#, c-format -msgid "Track Width: %s Vias Size : %s" -msgstr "Larg. piste: %s Diam Vias : %s" - -#: pcbnew/editrack-part2.cpp:136 -msgid "Drc error, cancelled" -msgstr "Erreur DRC, annulation" - -#: pcbnew/ioascii.cpp:164 -msgid "Error: Unexpected end of file !" -msgstr "Erreur: Fin de fichier inattendue !" - #: pcbnew/export_gencad.cpp:69 msgid "GenCAD file:" msgstr "Fichier GenCAD:" @@ -2188,49 +2076,56 @@ msgstr "" "\n" "Ne peut insérer cd module" -#: pcbnew/modedit.cpp:395 +#: pcbnew/modedit.cpp:393 msgid "Add Pad" msgstr "Ajouter Pastilles" -#: pcbnew/modedit.cpp:408 -#: eeschema/schedit.cpp:298 +#: pcbnew/modedit.cpp:406 +#: eeschema/schedit.cpp:299 msgid "Add Drawing" msgstr "Ajout d'éléments graphiques" +#: pcbnew/modedit.cpp:424 +#: pcbnew/edit.cpp:526 +#: eeschema/schedit.cpp:455 +#: eeschema/libframe.cpp:579 +msgid "Delete item" +msgstr "Suppression d'éléments" + #: pcbnew/modedit_onclick.cpp:207 #: pcbnew/onrightclick.cpp:151 -#: eeschema/libedit_onrightclick.cpp:73 -#: eeschema/onrightclick.cpp:125 +#: eeschema/onrightclick.cpp:126 +#: eeschema/libedit_onrightclick.cpp:53 #: gerbview/onrightclick.cpp:42 msgid "End Tool" msgstr "Fin Outil" #: pcbnew/modedit_onclick.cpp:217 -#: pcbnew/onrightclick.cpp:479 -#: eeschema/libedit_onrightclick.cpp:252 -#: eeschema/onrightclick.cpp:581 +#: pcbnew/onrightclick.cpp:504 +#: eeschema/onrightclick.cpp:587 +#: eeschema/libedit_onrightclick.cpp:237 #: gerbview/onrightclick.cpp:51 msgid "Cancel Block" msgstr "Annuler Bloc" #: pcbnew/modedit_onclick.cpp:219 -#: pcbnew/onrightclick.cpp:481 +#: pcbnew/onrightclick.cpp:506 #: gerbview/onrightclick.cpp:52 msgid "Zoom Block (Midd butt drag)" msgstr "Zoom Bloc (drag+bouton milieu)" #: pcbnew/modedit_onclick.cpp:222 -#: pcbnew/onrightclick.cpp:484 -#: eeschema/libedit_onrightclick.cpp:260 -#: eeschema/onrightclick.cpp:589 +#: pcbnew/onrightclick.cpp:509 +#: eeschema/onrightclick.cpp:595 +#: eeschema/libedit_onrightclick.cpp:245 #: gerbview/onrightclick.cpp:54 msgid "Place Block" msgstr "Place Bloc" #: pcbnew/modedit_onclick.cpp:224 -#: pcbnew/onrightclick.cpp:486 -#: eeschema/libedit_onrightclick.cpp:266 -#: eeschema/onrightclick.cpp:598 +#: pcbnew/onrightclick.cpp:511 +#: eeschema/onrightclick.cpp:604 +#: eeschema/libedit_onrightclick.cpp:251 msgid "Copy Block (shift + drag mouse)" msgstr "Copie Bloc (shift + drag mouse)" @@ -2239,18 +2134,18 @@ msgid "Mirror Block (alt + drag mouse)" msgstr "Bloc Miroir (alt + drag mouse)" #: pcbnew/modedit_onclick.cpp:228 -#: pcbnew/onrightclick.cpp:490 +#: pcbnew/onrightclick.cpp:515 msgid "Rotate Block (ctrl + drag mouse)" msgstr "Rotation Bloc (ctrl + drag mouse)" #: pcbnew/modedit_onclick.cpp:230 -#: pcbnew/onrightclick.cpp:492 +#: pcbnew/onrightclick.cpp:517 msgid "Delete Block (shift+ctrl + drag mouse)" msgstr "Effacement Bloc (shift+ctrl + drag mouse)" #: pcbnew/modedit_onclick.cpp:252 -#: pcbnew/onrightclick.cpp:702 -#: pcbnew/onrightclick.cpp:799 +#: pcbnew/onrightclick.cpp:727 +#: pcbnew/onrightclick.cpp:824 msgid "Rotate" msgstr "Rotation" @@ -2275,17 +2170,17 @@ msgid "Move Pad" msgstr "Déplace Pad" #: pcbnew/modedit_onclick.cpp:274 -#: pcbnew/onrightclick.cpp:741 +#: pcbnew/onrightclick.cpp:766 msgid "Edit Pad" msgstr "Edit Pad" #: pcbnew/modedit_onclick.cpp:276 -#: pcbnew/onrightclick.cpp:745 +#: pcbnew/onrightclick.cpp:770 msgid "New Pad Settings" msgstr "Nouvelles Caract. Pads" #: pcbnew/modedit_onclick.cpp:278 -#: pcbnew/onrightclick.cpp:747 +#: pcbnew/onrightclick.cpp:772 msgid "Export Pad Settings" msgstr "Exporte Caract. Pads" @@ -2294,7 +2189,7 @@ msgid "delete Pad" msgstr "Supprimer Pad" #: pcbnew/modedit_onclick.cpp:285 -#: pcbnew/onrightclick.cpp:752 +#: pcbnew/onrightclick.cpp:777 msgid "Global Pad Settings" msgstr "Edition Globale des pads" @@ -2327,10 +2222,10 @@ msgid "Place edge" msgstr "Place contour" #: pcbnew/modedit_onclick.cpp:317 -#: pcbnew/onrightclick.cpp:670 -#: pcbnew/onrightclick.cpp:704 -#: pcbnew/onrightclick.cpp:801 -#: eeschema/onrightclick.cpp:312 +#: pcbnew/onrightclick.cpp:695 +#: pcbnew/onrightclick.cpp:729 +#: pcbnew/onrightclick.cpp:826 +#: eeschema/onrightclick.cpp:313 msgid "Edit" msgstr "Editer" @@ -2384,11 +2279,11 @@ msgstr "X Pos" msgid "Y pos" msgstr "Y pos" -#: pcbnew/classpcb.cpp:231 +#: pcbnew/classpcb.cpp:196 msgid "Shape" msgstr "Forme" -#: pcbnew/classpcb.cpp:234 +#: pcbnew/classpcb.cpp:199 #: pcbnew/class_board_item.cpp:108 #: pcbnew/class_track.cpp:776 #: pcbnew/dialog_pad_edit.cpp:176 @@ -2396,11 +2291,11 @@ msgstr "Forme" msgid "Circle" msgstr "Cercle" -#: pcbnew/classpcb.cpp:238 +#: pcbnew/classpcb.cpp:203 msgid " Arc " msgstr " Arc " -#: pcbnew/classpcb.cpp:243 +#: pcbnew/classpcb.cpp:208 #: pcbnew/class_track.cpp:774 msgid "Segment" msgstr "Segment" @@ -2437,15 +2332,15 @@ msgstr "Valeur incorrecte pour diametre de per msgid "Incorrect value for pad offset" msgstr "Valeur incorrecte pour offset du pad" -#: pcbnew/onleftclick.cpp:168 +#: pcbnew/onleftclick.cpp:173 msgid "Graphic not authorized on Copper layers" msgstr "Graphique non autorisé sur Couches Cuivre" -#: pcbnew/onleftclick.cpp:191 +#: pcbnew/onleftclick.cpp:196 msgid "Tracks on Copper layers only " msgstr "Pistes sur couches cuivre seulement" -#: pcbnew/onleftclick.cpp:267 +#: pcbnew/onleftclick.cpp:272 msgid "Cotation not authorized on Copper layers" msgstr "Cotation non autorisée sur Couches Cuivre" @@ -2501,14 +2396,6 @@ msgstr "" "Vous avez sélectionné VIA borgne ou VIA enterrée\n" "ATTENTION: Cette possibilité est EXPERIMENTALE!!! Accepter ?" -#: pcbnew/surbrill.cpp:35 -msgid "Filter for net names:" -msgstr "Filtre pour nets:" - -#: pcbnew/surbrill.cpp:39 -msgid "List Nets" -msgstr "Liste équipots" - #: pcbnew/dialog_display_options.cpp:186 msgid "Tracks and vias" msgstr "Pistes et vias" @@ -2678,11 +2565,12 @@ msgid "Footprint name:" msgstr "Nom Module: " #: pcbnew/modules.cpp:281 -#: pcbnew/onrightclick.cpp:676 +#: pcbnew/onrightclick.cpp:701 msgid "Delete Module" msgstr "Supprimer Module" #: pcbnew/modules.cpp:282 +#: eeschema/onrightclick.cpp:317 #: eeschema/find.cpp:229 msgid "Value " msgstr "Valeur " @@ -3046,309 +2934,325 @@ msgstr "Fin contour Zone" msgid "Delete edge zone" msgstr "Supprimer Contour Zone" -#: pcbnew/onrightclick.cpp:290 -msgid "Edit Zone" -msgstr "Editer Zone" +#: pcbnew/onrightclick.cpp:284 +msgid "Place Corner" +msgstr "Place Sommet" -#: pcbnew/onrightclick.cpp:292 -msgid "Delete Zone" -msgstr "Supprimer Zone" +#: pcbnew/onrightclick.cpp:294 +msgid "Move Corner" +msgstr "Déplace Sommet" -#: pcbnew/onrightclick.cpp:297 -msgid "Delete Marker" -msgstr "Effacer Marqueur" +#: pcbnew/onrightclick.cpp:296 +msgid "Delete Corner" +msgstr "Supprimer Sommet" -#: pcbnew/onrightclick.cpp:304 -msgid "Edit Dimension" -msgstr "Edit Cote" +#: pcbnew/onrightclick.cpp:302 +msgid "Create Corner" +msgstr "Créer Sommet" -#: pcbnew/onrightclick.cpp:307 -msgid "Delete Dimension" -msgstr "Suppression Cote" - -#: pcbnew/onrightclick.cpp:314 -msgid "Move Target" -msgstr "Déplacer Mire" - -#: pcbnew/onrightclick.cpp:317 -msgid "Edit Target" -msgstr "Editer Mire" - -#: pcbnew/onrightclick.cpp:319 -msgid "Delete Target" -msgstr "Supprimer Mire" - -#: pcbnew/onrightclick.cpp:346 -msgid "Get and Move Footprint" -msgstr "Sel et Dépl.t module" - -#: pcbnew/onrightclick.cpp:358 +#: pcbnew/onrightclick.cpp:306 msgid "Fill zone" msgstr "Remplir zone" -#: pcbnew/onrightclick.cpp:366 -msgid "Select Net" -msgstr "Sélection Net" +#: pcbnew/onrightclick.cpp:309 +msgid "Edit Zone Params" +msgstr "Editer Paramètres de la Zone" -#: pcbnew/onrightclick.cpp:371 -msgid "Delete Zone Limit" -msgstr "Supprimer Limite de Zone" +#: pcbnew/onrightclick.cpp:311 +msgid "Delete Zone Outline" +msgstr "Supprimer Contour de Zone" -#: pcbnew/onrightclick.cpp:376 -#: pcbnew/onrightclick.cpp:387 -#: pcbnew/onrightclick.cpp:400 -#: pcbnew/onrightclick.cpp:461 +#: pcbnew/onrightclick.cpp:328 +msgid "Delete Zone" +msgstr "Supprimer Zone" + +#: pcbnew/onrightclick.cpp:333 +msgid "Delete Marker" +msgstr "Effacer Marqueur" + +#: pcbnew/onrightclick.cpp:340 +msgid "Edit Dimension" +msgstr "Edit Cote" + +#: pcbnew/onrightclick.cpp:343 +msgid "Delete Dimension" +msgstr "Suppression Cote" + +#: pcbnew/onrightclick.cpp:350 +msgid "Move Target" +msgstr "Déplacer Mire" + +#: pcbnew/onrightclick.cpp:353 +msgid "Edit Target" +msgstr "Editer Mire" + +#: pcbnew/onrightclick.cpp:355 +msgid "Delete Target" +msgstr "Supprimer Mire" + +#: pcbnew/onrightclick.cpp:382 +msgid "Get and Move Footprint" +msgstr "Sel et Dépl.t module" + +#: pcbnew/onrightclick.cpp:396 +msgid "Fill or Refill All Zones" +msgstr "Remplir ou Re-remplir Toutes les Zones" + +#: pcbnew/onrightclick.cpp:401 +#: pcbnew/onrightclick.cpp:412 +#: pcbnew/onrightclick.cpp:425 +#: pcbnew/onrightclick.cpp:486 msgid "Select Working Layer" msgstr "Sélection de la couche de travail" -#: pcbnew/onrightclick.cpp:385 -#: pcbnew/onrightclick.cpp:458 +#: pcbnew/onrightclick.cpp:410 +#: pcbnew/onrightclick.cpp:483 msgid "Select Track Width" msgstr "Sélection Epais. Piste" -#: pcbnew/onrightclick.cpp:389 +#: pcbnew/onrightclick.cpp:414 msgid "Select layer pair for vias" msgstr "Selection couple de couches pour Vias" -#: pcbnew/onrightclick.cpp:406 +#: pcbnew/onrightclick.cpp:431 msgid "Footprint documentation" msgstr "Documentation des modules" -#: pcbnew/onrightclick.cpp:416 +#: pcbnew/onrightclick.cpp:441 msgid "Glob Move and Place" msgstr "Move et Place Globaux" -#: pcbnew/onrightclick.cpp:418 +#: pcbnew/onrightclick.cpp:443 msgid "Unlock All Modules" msgstr "Déverrouiller tous les Modules" -#: pcbnew/onrightclick.cpp:420 +#: pcbnew/onrightclick.cpp:445 msgid "Lock All Modules" msgstr "Verrouiller tous les Modules" -#: pcbnew/onrightclick.cpp:423 +#: pcbnew/onrightclick.cpp:448 msgid "Move All Modules" msgstr "Déplace tous les Modules" -#: pcbnew/onrightclick.cpp:424 +#: pcbnew/onrightclick.cpp:449 msgid "Move New Modules" msgstr "Déplace nouveaux Modules" -#: pcbnew/onrightclick.cpp:426 +#: pcbnew/onrightclick.cpp:451 msgid "Autoplace All Modules" msgstr "Autoplace Tous Modules" -#: pcbnew/onrightclick.cpp:427 +#: pcbnew/onrightclick.cpp:452 msgid "Autoplace New Modules" msgstr "AutoPlace nouveaux Modules" -#: pcbnew/onrightclick.cpp:428 +#: pcbnew/onrightclick.cpp:453 msgid "Autoplace Next Module" msgstr "Autoplace Module suivant" -#: pcbnew/onrightclick.cpp:431 +#: pcbnew/onrightclick.cpp:456 msgid "Orient All Modules" msgstr "Oriente Tous Modules" -#: pcbnew/onrightclick.cpp:438 +#: pcbnew/onrightclick.cpp:463 msgid "Global Autoroute" msgstr "Autoroutage global" -#: pcbnew/onrightclick.cpp:440 +#: pcbnew/onrightclick.cpp:465 msgid "Select layer pair" msgstr "Selection couple de couches" -#: pcbnew/onrightclick.cpp:442 +#: pcbnew/onrightclick.cpp:467 msgid "Autoroute All Modules" msgstr "Autoroute Tous Modules" -#: pcbnew/onrightclick.cpp:444 +#: pcbnew/onrightclick.cpp:469 msgid "Reset Unrouted" msgstr "Réinit Non routés" -#: pcbnew/onrightclick.cpp:449 +#: pcbnew/onrightclick.cpp:474 msgid "Global AutoRouter" msgstr "Autorouteur Global" -#: pcbnew/onrightclick.cpp:451 +#: pcbnew/onrightclick.cpp:476 msgid "Read Global AutoRouter Data" msgstr "Lire Données de L'autorouteur global" -#: pcbnew/onrightclick.cpp:488 +#: pcbnew/onrightclick.cpp:513 msgid "Flip Block (alt + drag mouse)" msgstr "Inversion Bloc (alt + drag mouse)" -#: pcbnew/onrightclick.cpp:511 +#: pcbnew/onrightclick.cpp:536 msgid "Drag Via" msgstr "Drag Via" -#: pcbnew/onrightclick.cpp:515 -#: pcbnew/onrightclick.cpp:579 +#: pcbnew/onrightclick.cpp:540 +#: pcbnew/onrightclick.cpp:604 msgid "Edit Via" msgstr "Edit Via" -#: pcbnew/onrightclick.cpp:517 +#: pcbnew/onrightclick.cpp:542 msgid "Set via hole to Default" msgstr "Ajuste perçage via à défaut" -#: pcbnew/onrightclick.cpp:519 +#: pcbnew/onrightclick.cpp:544 msgid "Set via hole to alt value" msgstr "Ajuste perçage via à valeur alternative" -#: pcbnew/onrightclick.cpp:521 +#: pcbnew/onrightclick.cpp:546 msgid "Set the via hole alt value" msgstr "Ajuste la valeur alt. perçage via" -#: pcbnew/onrightclick.cpp:523 +#: pcbnew/onrightclick.cpp:548 msgid "Export Via hole to alt value" msgstr "Exporte perçage via à valeur alt." -#: pcbnew/onrightclick.cpp:525 +#: pcbnew/onrightclick.cpp:550 msgid "Export via hole to others id vias" msgstr "Exporte perçage via aux autres semblables." -#: pcbnew/onrightclick.cpp:527 +#: pcbnew/onrightclick.cpp:552 msgid "Set ALL via holes to default" msgstr "Ajuste perçage TOUTES vias au défaut" -#: pcbnew/onrightclick.cpp:540 +#: pcbnew/onrightclick.cpp:565 msgid "Move Node" msgstr "Déplace Noeud" -#: pcbnew/onrightclick.cpp:545 +#: pcbnew/onrightclick.cpp:570 msgid "Drag Segments, keep slope" msgstr "Drag Segments, garder direction" -#: pcbnew/onrightclick.cpp:547 +#: pcbnew/onrightclick.cpp:572 msgid "Drag Segment" msgstr "Drag Segment" -#: pcbnew/onrightclick.cpp:550 +#: pcbnew/onrightclick.cpp:575 msgid "Move Segment" msgstr "Déplace Segment" -#: pcbnew/onrightclick.cpp:553 +#: pcbnew/onrightclick.cpp:578 msgid "Break Track" msgstr "Briser piste" -#: pcbnew/onrightclick.cpp:560 +#: pcbnew/onrightclick.cpp:585 msgid "Place Node" msgstr "Place noeud" -#: pcbnew/onrightclick.cpp:567 +#: pcbnew/onrightclick.cpp:592 msgid "End Track" msgstr "Terminer Piste" -#: pcbnew/onrightclick.cpp:570 +#: pcbnew/onrightclick.cpp:595 msgid "Place Via" msgstr "Place Via" -#: pcbnew/onrightclick.cpp:577 +#: pcbnew/onrightclick.cpp:602 msgid "Change Width" msgstr "Change Largeur" -#: pcbnew/onrightclick.cpp:579 +#: pcbnew/onrightclick.cpp:604 msgid "Edit Segment" msgstr "Edit Segment" -#: pcbnew/onrightclick.cpp:584 +#: pcbnew/onrightclick.cpp:609 msgid "Edit Track" msgstr "Editer Piste" -#: pcbnew/onrightclick.cpp:586 +#: pcbnew/onrightclick.cpp:611 msgid "Edit Net" msgstr "Edit Net" -#: pcbnew/onrightclick.cpp:588 +#: pcbnew/onrightclick.cpp:613 msgid "Edit ALL Tracks and Vias" msgstr "Editer TOUTES Pistes et Vias" -#: pcbnew/onrightclick.cpp:590 +#: pcbnew/onrightclick.cpp:615 msgid "Edit ALL Vias (no track)" msgstr "Editer TOUTES Vias (pas les pistes)" -#: pcbnew/onrightclick.cpp:592 +#: pcbnew/onrightclick.cpp:617 msgid "Edit ALL Tracks (no via)" msgstr "Editer TOUTES Pistes (pas les vias)" -#: pcbnew/onrightclick.cpp:600 +#: pcbnew/onrightclick.cpp:625 msgid "Delete Via" msgstr "Suppression Via" -#: pcbnew/onrightclick.cpp:600 +#: pcbnew/onrightclick.cpp:625 msgid "Delete Segment" msgstr "SupprimerSegment" -#: pcbnew/onrightclick.cpp:607 +#: pcbnew/onrightclick.cpp:632 msgid "Delete Track" msgstr "Effacer Piste" -#: pcbnew/onrightclick.cpp:611 +#: pcbnew/onrightclick.cpp:636 msgid "Delete Net" msgstr "Supprimer Net" -#: pcbnew/onrightclick.cpp:616 +#: pcbnew/onrightclick.cpp:641 msgid "Set Flags" msgstr "Ajust. Flags" -#: pcbnew/onrightclick.cpp:617 +#: pcbnew/onrightclick.cpp:642 msgid "Locked: Yes" msgstr "Verrou: Oui" -#: pcbnew/onrightclick.cpp:618 +#: pcbnew/onrightclick.cpp:643 msgid "Locked: No" msgstr "Verrou: Non" -#: pcbnew/onrightclick.cpp:628 +#: pcbnew/onrightclick.cpp:653 msgid "Track Locked: Yes" msgstr "Piste verrouillée: Oui" -#: pcbnew/onrightclick.cpp:629 +#: pcbnew/onrightclick.cpp:654 msgid "Track Locked: No" msgstr "Piste verrouillée: Non" -#: pcbnew/onrightclick.cpp:631 +#: pcbnew/onrightclick.cpp:656 msgid "Net Locked: Yes" msgstr "Net verrouillé: Oui" -#: pcbnew/onrightclick.cpp:632 +#: pcbnew/onrightclick.cpp:657 msgid "Net Locked: No" msgstr "Net verrouillé: Non" -#: pcbnew/onrightclick.cpp:654 -#: pcbnew/onrightclick.cpp:699 -#: pcbnew/onrightclick.cpp:737 -#: pcbnew/onrightclick.cpp:796 +#: pcbnew/onrightclick.cpp:679 +#: pcbnew/onrightclick.cpp:724 +#: pcbnew/onrightclick.cpp:762 +#: pcbnew/onrightclick.cpp:821 msgid "Move" msgstr "Move" -#: pcbnew/onrightclick.cpp:657 -#: pcbnew/onrightclick.cpp:739 +#: pcbnew/onrightclick.cpp:682 +#: pcbnew/onrightclick.cpp:764 msgid "Drag" msgstr "Drag" -#: pcbnew/onrightclick.cpp:661 +#: pcbnew/onrightclick.cpp:686 msgid "Rotate +" msgstr "Rotation +" -#: pcbnew/onrightclick.cpp:665 -#: eeschema/onrightclick.cpp:300 +#: pcbnew/onrightclick.cpp:690 +#: eeschema/onrightclick.cpp:301 msgid "Rotate -" msgstr "Rotation -" -#: pcbnew/onrightclick.cpp:666 +#: pcbnew/onrightclick.cpp:691 msgid "Flip" msgstr "Change côté" -#: pcbnew/onrightclick.cpp:756 +#: pcbnew/onrightclick.cpp:781 msgid "delete" msgstr "Effacer" -#: pcbnew/onrightclick.cpp:763 +#: pcbnew/onrightclick.cpp:788 msgid "Autoroute Pad" msgstr "Autoroute Pad" -#: pcbnew/onrightclick.cpp:764 +#: pcbnew/onrightclick.cpp:789 msgid "Autoroute Net" msgstr "Autoroute Net" @@ -3528,9 +3432,54 @@ msgstr "Change Per msgid "Change Orient" msgstr "Change Orientation" +#: pcbnew/edit.cpp:171 +#: pcbnew/editmod.cpp:45 +msgid "Module Editor" +msgstr "Ouvrir Editeur de modules" + +#: pcbnew/edit.cpp:251 +msgid "Add Tracks" +msgstr "Addition de pistes" + +#: pcbnew/edit.cpp:260 +msgid "Add Zones" +msgstr "Addition de Zones" + +#: pcbnew/edit.cpp:262 +msgid "Warning: Display Zone is OFF!!!" +msgstr "Attention: Affichage zones désactivé !!!" + +#: pcbnew/edit.cpp:269 +msgid "Add Layer Alignment Target" +msgstr "Ajouter Mire de superposition" + +#: pcbnew/edit.cpp:273 +msgid "Adjust Zero" +msgstr "Ajuster Zéro" + +#: pcbnew/edit.cpp:279 +msgid "Add Graphic" +msgstr "Addition éléments graphiques" + +#: pcbnew/edit.cpp:287 +msgid "Add Modules" +msgstr "Addition de Modules" + +#: pcbnew/edit.cpp:291 +msgid "Add Dimension" +msgstr "Ajout de cotes" + +#: pcbnew/edit.cpp:299 +msgid "Net Highlight" +msgstr "Surbrillance des équipotentielles" + +#: pcbnew/edit.cpp:303 +msgid "Local Ratsnest" +msgstr "Monter le chevelu général" + #: pcbnew/plotps.cpp:361 #: pcbnew/affiche.cpp:63 -#: pcbnew/class_board.cpp:438 +#: pcbnew/class_board.cpp:400 msgid "Vias" msgstr "Vias" @@ -3619,6 +3568,7 @@ msgstr "Le texte est la VALEUR!" #: pcbnew/class_board_item.cpp:41 #: eeschema/dialog_build_BOM.cpp:300 #: eeschema/component_class.cpp:56 +#: eeschema/edit_component_in_schematic.cpp:826 msgid "Footprint" msgstr "Module" @@ -3653,10 +3603,11 @@ msgstr "Pcb Graphic" #: pcbnew/class_board_item.cpp:60 #: pcbnew/class_board_item.cpp:69 #: pcbnew/class_board_item.cpp:146 -#: pcbnew/class_board_item.cpp:164 -#: pcbnew/class_board_item.cpp:191 +#: pcbnew/class_board_item.cpp:165 +#: pcbnew/class_board_item.cpp:181 #: pcbnew/class_board_item.cpp:208 -#: pcbnew/class_board_item.cpp:214 +#: pcbnew/class_board_item.cpp:225 +#: pcbnew/class_board_item.cpp:231 msgid " on " msgstr " sur " @@ -3690,6 +3641,7 @@ msgid "Track" msgstr "Piste" #: pcbnew/class_board_item.cpp:147 +#: pcbnew/dialog_zones_by_polygon.cpp:220 msgid "Net:" msgstr "Net:" @@ -3698,41 +3650,46 @@ msgid "Length:" msgstr "Long.:" #: pcbnew/class_board_item.cpp:153 +#: pcbnew/class_zone.cpp:385 +msgid "Zone Outline" +msgstr "Contour de Zone" + +#: pcbnew/class_board_item.cpp:169 #: pcbnew/class_track.cpp:743 msgid "Zone" msgstr "Zone" -#: pcbnew/class_board_item.cpp:170 +#: pcbnew/class_board_item.cpp:187 #: pcbnew/pcbframe.cpp:479 msgid "Via" msgstr "Via" -#: pcbnew/class_board_item.cpp:174 +#: pcbnew/class_board_item.cpp:191 msgid "Blind" msgstr "Enterrée" -#: pcbnew/class_board_item.cpp:176 +#: pcbnew/class_board_item.cpp:193 msgid "Buried" msgstr "Borgne" -#: pcbnew/class_board_item.cpp:198 +#: pcbnew/class_board_item.cpp:215 #: pcbnew/class_marker.cpp:112 msgid "Marker" msgstr "Marqueur" -#: pcbnew/class_board_item.cpp:203 +#: pcbnew/class_board_item.cpp:220 msgid "Dimension" msgstr "Dimension" -#: pcbnew/class_board_item.cpp:208 +#: pcbnew/class_board_item.cpp:225 msgid "Target" msgstr "Mire" -#: pcbnew/class_board_item.cpp:209 +#: pcbnew/class_board_item.cpp:226 msgid "size" msgstr "dimension" -#: pcbnew/class_board_item.cpp:214 +#: pcbnew/class_board_item.cpp:231 msgid "Edge Zone" msgstr "Contour Zone" @@ -3858,6 +3815,7 @@ msgid "Dimension properties" msgstr "Propriétés des Cotes" #: pcbnew/cotation.cpp:133 +#: pcbnew/dialog_zones_by_polygon.cpp:227 #: gerbview/affiche.cpp:37 msgid "Layer:" msgstr "Couche:" @@ -3878,6 +3836,15 @@ msgstr "Impossible de trouver le fichier de donn msgid "Reading autorouter data file " msgstr "Lecture fichier données de l'autorouteur" +#: pcbnew/editrack-part2.cpp:32 +#, c-format +msgid "Track Width: %s Vias Size : %s" +msgstr "Larg. piste: %s Diam Vias : %s" + +#: pcbnew/editrack-part2.cpp:136 +msgid "Drc error, cancelled" +msgstr "Erreur DRC, annulation" + #: pcbnew/affiche.cpp:34 msgid "Net Name" msgstr "Equipot" @@ -3892,25 +3859,19 @@ msgstr "Net Code" #: pcbnew/affiche.cpp:52 #: pcbnew/class_module.cpp:1228 -#: pcbnew/class_board.cpp:428 +#: pcbnew/class_board.cpp:390 msgid "Pads" msgstr "Pads" -#: pcbnew/hotkeys.cpp:440 -#, c-format -msgid "Footprint %s found, but locked" -msgstr "Module %s trouvé, mais verrouillé" - -#: pcbnew/hotkeys.cpp:605 -msgid "Delete module?" -msgstr "Effacer Module?" - #: pcbnew/class_track.cpp:765 -#: pcbnew/zones.cpp:927 +#: pcbnew/zones.cpp:873 +#: pcbnew/zones_by_polygon.cpp:612 +#: pcbnew/class_zone.cpp:398 msgid "NetName" msgstr "NetName" #: pcbnew/class_track.cpp:770 +#: pcbnew/class_zone.cpp:403 msgid "NetCode" msgstr "NetCode" @@ -3946,86 +3907,6 @@ msgstr "Garder" msgid "Deselect this layer to select the No Change state" msgstr "Deselectionner cette couche pour restorer l'option Pas de Changement" -#: pcbnew/zones.cpp:152 -#: pcbnew/zones.cpp:153 -#: pcbnew/zones.cpp:154 -#: pcbnew/zones.cpp:155 -msgid "0.00000" -msgstr "0.00000" - -#: pcbnew/zones.cpp:159 -msgid "Grid size:" -msgstr "Dim Grille" - -#: pcbnew/zones.cpp:164 -msgid "Zone clearance value (mm):" -msgstr "Valeur isolation zone (mm):" - -#: pcbnew/zones.cpp:181 -msgid "Include Pads" -msgstr "Inclure Pads" - -#: pcbnew/zones.cpp:182 -msgid "Thermal" -msgstr "Thermique" - -#: pcbnew/zones.cpp:183 -msgid "Exclude Pads" -msgstr "Exclure Pads" - -#: pcbnew/zones.cpp:187 -msgid "Pad options:" -msgstr "Options pads" - -#: pcbnew/zones.cpp:192 -#: eeschema/dialog_options.cpp:257 -msgid "Any" -msgstr "Tout" - -#: pcbnew/zones.cpp:193 -msgid "H , V and 45 deg" -msgstr "H, V et 45 deg" - -#: pcbnew/zones.cpp:197 -msgid "Zone edges orient:" -msgstr "Direction contours zone:" - -#: pcbnew/zones.cpp:209 -msgid "Fill" -msgstr "Remplissage" - -#: pcbnew/zones.cpp:223 -msgid "Update Options" -msgstr "Maj Options" - -#: pcbnew/zones.cpp:232 -msgid "Zone clearance value:" -msgstr "Valeur isolation zone:" - -#: pcbnew/zones.cpp:235 -msgid "Grid :" -msgstr "Grille:" - -#: pcbnew/zones.cpp:398 -msgid "New zone segment width: " -msgstr "Nouvelle largeur des segments zone:" - -#: pcbnew/zones.cpp:596 -msgid "Zone: No net selected" -msgstr "Zone: Net non sélectionné" - -#: pcbnew/zones.cpp:638 -msgid "Delete Current Zone Edges" -msgstr "Effacer contour zone courant" - -#: pcbnew/zones.cpp:925 -msgid "No Net" -msgstr "No Net" - -#: pcbnew/zones.cpp:997 -msgid "Ok" -msgstr "Ok" - #: pcbnew/automove.cpp:208 #: pcbnew/xchgmod.cpp:614 msgid "No Modules!" @@ -4061,189 +3942,6 @@ msgstr "Grille perso dim X" msgid "User Grid Size Y" msgstr "Grille perso dim Y" -#: pcbnew/tool_pcb.cpp:51 -msgid "" -"Show active layer selections\n" -"and select layer pair for route and place via" -msgstr "" -"Affiche selections couche active\n" -"et selection paire de couches pour routage and placement via" - -#: pcbnew/tool_pcb.cpp:239 -msgid "New Board" -msgstr "Nouveau Circuit Imprimé" - -#: pcbnew/tool_pcb.cpp:241 -msgid "Open existing Board" -msgstr "Ouvrir C.I. existant" - -#: pcbnew/tool_pcb.cpp:242 -msgid "Save Board" -msgstr "Sauver Circuit Imprimé" - -#: pcbnew/tool_pcb.cpp:246 -#: eeschema/tool_sch.cpp:65 -#: gerbview/tool_gerber.cpp:232 -msgid "page settings (size, texts)" -msgstr "Ajustage de la feuille de dessin (dimensions, textes)" - -#: pcbnew/tool_pcb.cpp:250 -msgid "Open Module Editor" -msgstr "Ouvrir Editeur de modules" - -#: pcbnew/tool_pcb.cpp:253 -#: eeschema/tool_sch.cpp:81 -#: gerbview/tool_gerber.cpp:243 -msgid "Cut selected item" -msgstr "Suppression des éléments sélectionnés" - -#: pcbnew/tool_pcb.cpp:257 -#: eeschema/tool_sch.cpp:84 -#: gerbview/tool_gerber.cpp:248 -msgid "Copy selected item" -msgstr "Copie des éléments sélectionnés" - -#: pcbnew/tool_pcb.cpp:259 -#: eeschema/tool_sch.cpp:87 -#: gerbview/tool_gerber.cpp:254 -msgid "Paste" -msgstr "Copie des éléments sauvegardés" - -#: pcbnew/tool_pcb.cpp:262 -#: gerbview/tool_gerber.cpp:261 -msgid "Undelete" -msgstr "Annulation du dernier effacement" - -#: pcbnew/tool_pcb.cpp:265 -msgid "Print Board" -msgstr "Imprimer C.I." - -#: pcbnew/tool_pcb.cpp:267 -msgid "Plot (HPGL, PostScript, or GERBER format)" -msgstr "Tracer en format HPGL, POSTSCRIPT ou GERBER" - -#: pcbnew/tool_pcb.cpp:286 -#: eeschema/tool_sch.cpp:125 -msgid "Find components and texts" -msgstr "Recherche de composants et textes" - -#: pcbnew/tool_pcb.cpp:292 -msgid "Read Netlist" -msgstr "Lire Netliste" - -#: pcbnew/tool_pcb.cpp:294 -msgid "Pcb Design Rules Check" -msgstr "Controle des règles de conception" - -#: pcbnew/tool_pcb.cpp:305 -msgid "Mode Module: Manual and Automatic Move or Place for modules" -msgstr "Mode Module: Déplacements ou Placement Manuel ou Automatique des modules" - -#: pcbnew/tool_pcb.cpp:308 -msgid "Mode Track and Autorouting" -msgstr "Mode Pistes and Autoroutage" - -#: pcbnew/tool_pcb.cpp:332 -msgid "Drc OFF" -msgstr "Drc DESACTIVEE" - -#: pcbnew/tool_pcb.cpp:349 -msgid "Show General Ratsnest" -msgstr "Monter le chevelu général" - -#: pcbnew/tool_pcb.cpp:352 -msgid "Show Module Ratsnest when moving" -msgstr "Monter le chevelu du module pendant déplacement" - -#: pcbnew/tool_pcb.cpp:357 -msgid "Enable Auto Del Track" -msgstr "Autoriser l'effacement automatique des pistes" - -#: pcbnew/tool_pcb.cpp:370 -msgid "Show Tracks Sketch" -msgstr "Afficher pistes en contour" - -#: pcbnew/tool_pcb.cpp:383 -msgid "" -"Display auxiliary vertical toolbar (tools for micro wave applications)\n" -" This is a very experimental feature (under development)" -msgstr "" -"Affiche toolbar vertical auxiliaire (outils pour applications micro-ondes)\n" -"C'est un outil expérimental (en cours de développement)" - -#: pcbnew/tool_pcb.cpp:412 -msgid "Net highlight" -msgstr "Surbrillance des équipotentielles" - -#: pcbnew/tool_pcb.cpp:416 -msgid "Display local ratsnest (pad or module)" -msgstr "Afficher le chevelu local (pastilles ou modules)" - -#: pcbnew/tool_pcb.cpp:421 -msgid "Add modules" -msgstr "Addition de Modules" - -#: pcbnew/tool_pcb.cpp:425 -msgid "Add tracks and vias" -msgstr "Ajouter pistes et vias" - -#: pcbnew/tool_pcb.cpp:429 -msgid "Add zones" -msgstr "Addition de Zones" - -#: pcbnew/tool_pcb.cpp:446 -msgid "Add text" -msgstr "Ajout de Texte" - -#: pcbnew/tool_pcb.cpp:451 -msgid "Add dimension" -msgstr "Ajout des cotes" - -#: pcbnew/tool_pcb.cpp:455 -#: gerbview/tool_gerber.cpp:378 -msgid "Add layer alignment target" -msgstr "Ajouter Mire de superposition" - -#: pcbnew/tool_pcb.cpp:465 -msgid "Offset adjust for drill and place files" -msgstr "Ajuste offset pour fichier de perçage et placement" - -#: pcbnew/tool_pcb.cpp:490 -msgid "Create line of specified length for microwave applications" -msgstr "Creation de lignes de longueur spécifiée (pour applications micro-ondes)" - -#: pcbnew/tool_pcb.cpp:496 -msgid "Create gap of specified length for microwave applications" -msgstr "Creation de gaps de longueur spécifiée (pour applications micro-ondes)" - -#: pcbnew/tool_pcb.cpp:504 -msgid "Create stub of specified length for microwave applications" -msgstr "Creation de stub de longueur spécifiée (pour applications micro-ondes)" - -#: pcbnew/tool_pcb.cpp:510 -msgid "Create stub (arc) of specified length for microwave applications" -msgstr "Creation de stub (arc) de longueur spécifiée (pour applications micro-ondes)" - -#: pcbnew/tool_pcb.cpp:517 -msgid "Create a polynomial shape for microwave applications" -msgstr "Creation de formes polynomiales (pour applications micro-ondes)" - -#: pcbnew/tool_pcb.cpp:571 -msgid "Zoom " -msgstr "Zoom " - -#: pcbnew/tool_pcb.cpp:585 -#: eeschema/eelayer.cpp:223 -#: pcbnew/set_color.h:414 -#: eeschema/eelayer.h:210 -#: gerbview/set_color.h:324 -msgid "Grid" -msgstr "Grille" - -#: pcbnew/tool_pcb.cpp:676 -msgid "+/- to switch" -msgstr "+/- pour commuter" - #: pcbnew/editedge.cpp:167 msgid "Copper layer global delete not allowed!" msgstr " Effacement global sur couche cuivre non autorisé" @@ -4370,6 +4068,14 @@ msgstr "Ovale" msgid "Drill Shape:" msgstr "Forme du perçage:" +#: pcbnew/dialog_pad_edit.cpp:186 +#: pcbnew/clean.cpp:462 +#: eeschema/dialog_erc.cpp:192 +#: eeschema/dialog_erc.cpp:196 +#: eeschema/dialog_edit_component_in_schematic.cpp:171 +msgid "0" +msgstr "0" + #: pcbnew/dialog_pad_edit.cpp:187 msgid "90" msgstr "90" @@ -4580,32 +4286,230 @@ msgstr "Change module %s (%s) " msgid "Cmp files:" msgstr "Fichiers Cmp: " -#: pcbnew/initpcb.cpp:126 +#: pcbnew/clean.cpp:177 +msgid "Delete unconnected tracks:" +msgstr "Suppression Pistes non connectées" + +#: pcbnew/clean.cpp:196 +msgid "ViaDef" +msgstr "ViaDef" + +#: pcbnew/clean.cpp:368 +msgid "Clean Null Segments" +msgstr "Nettoyage segments nulls" + +#: pcbnew/clean.cpp:460 +msgid "Merging Segments:" +msgstr "Associe Segment" + +#: pcbnew/clean.cpp:462 +msgid "Merge" +msgstr "Merge" + +#: pcbnew/clean.cpp:478 +msgid "Merge: " +msgstr "Merge: " + +#: pcbnew/clean.cpp:708 +msgid "DRC Control:" +msgstr "Controle DRC:" + +#: pcbnew/clean.cpp:713 +msgid "NetCtr" +msgstr "NetCtr" + +#: pcbnew/clean.cpp:1059 +msgid "Centre" +msgstr "Centre" + +#: pcbnew/clean.cpp:1059 +msgid "0 " +msgstr "0" + +#: pcbnew/clean.cpp:1070 +msgid "Pads: " +msgstr "Pastilles: " + +#: pcbnew/clean.cpp:1074 +msgid "Max" +msgstr "Max" + +#: pcbnew/clean.cpp:1077 +msgid "Segm" +msgstr "Segm" + +#: pcbnew/zones.cpp:155 +#: pcbnew/zones.cpp:156 +#: pcbnew/zones.cpp:157 +#: pcbnew/zones.cpp:158 +#: pcbnew/dialog_zones_by_polygon.cpp:153 +#: pcbnew/dialog_zones_by_polygon.cpp:154 +#: pcbnew/dialog_zones_by_polygon.cpp:155 +msgid "0.00000" +msgstr "0.00000" + +#: pcbnew/zones.cpp:162 +msgid "Grid size:" +msgstr "Dim Grille" + +#: pcbnew/zones.cpp:167 +#: pcbnew/dialog_zones_by_polygon.cpp:160 +msgid "Zone clearance value (mm):" +msgstr "Valeur isolation zone (mm):" + +#: pcbnew/zones.cpp:184 +#: pcbnew/dialog_zones_by_polygon.cpp:180 +msgid "Include Pads" +msgstr "Inclure Pads" + +#: pcbnew/zones.cpp:185 +#: pcbnew/dialog_zones_by_polygon.cpp:181 +msgid "Thermal" +msgstr "Thermique" + +#: pcbnew/zones.cpp:186 +#: pcbnew/dialog_zones_by_polygon.cpp:182 +msgid "Exclude Pads" +msgstr "Exclure Pads" + +#: pcbnew/zones.cpp:190 +#: pcbnew/dialog_zones_by_polygon.cpp:183 +msgid "Pad options:" +msgstr "Options pads" + +#: pcbnew/zones.cpp:195 +#: pcbnew/dialog_zones_by_polygon.cpp:190 +#: eeschema/dialog_options.cpp:257 +msgid "Any" +msgstr "Tout" + +#: pcbnew/zones.cpp:196 +#: pcbnew/dialog_zones_by_polygon.cpp:191 +msgid "H , V and 45 deg" +msgstr "H, V et 45 deg" + +#: pcbnew/zones.cpp:200 +#: pcbnew/dialog_zones_by_polygon.cpp:192 +msgid "Zone edges orient:" +msgstr "Direction contours zone:" + +#: pcbnew/zones.cpp:212 +msgid "Fill" +msgstr "Remplissage" + +#: pcbnew/zones.cpp:226 +msgid "Update Options" +msgstr "Maj Options" + +#: pcbnew/zones.cpp:235 +#: pcbnew/dialog_zones_by_polygon.cpp:239 +msgid "Zone clearance value:" +msgstr "Valeur isolation zone:" + +#: pcbnew/zones.cpp:238 +#: pcbnew/dialog_zones_by_polygon.cpp:242 +msgid "Grid :" +msgstr "Grille:" + +#: pcbnew/zones.cpp:401 +msgid "New zone segment width: " +msgstr "Nouvelle largeur des segments zone:" + +#: pcbnew/zones.cpp:599 +msgid "Zone: No net selected" +msgstr "Zone: Net non sélectionné" + +#: pcbnew/zones.cpp:641 +msgid "Delete Current Zone Edges" +msgstr "Effacer contour zone courant" + +#: pcbnew/zones.cpp:871 +#: pcbnew/zones_by_polygon.cpp:610 +msgid "No Net" +msgstr "No Net" + +#: pcbnew/dsn.cpp:455 +msgid "Line length exceeded" +msgstr "Longueur de ligne dépassée" + +#: pcbnew/dsn.cpp:530 +msgid "String delimiter char must be a single char" +msgstr "Le caractère de délimitation de ligne doit être un seul caractère" + +#: pcbnew/dsn.cpp:590 +msgid "Un-terminated delimited string" +msgstr "Ligne délimitée non terminée" + +#: pcbnew/move_or_drag_track.cpp:714 +msgid "Unable to drag this segment: too many segments connected" +msgstr "Impossible de drag ce segment: trop de segments connectés" + +#: pcbnew/move_or_drag_track.cpp:768 +msgid "Unable to drag this segment: two collinear segments" +msgstr "Impossible de drag ce segment: 2 segments alignés" + +#: pcbnew/dialog_zones_by_polygon.cpp:156 +msgid "Grid Size for Filling:" +msgstr "Taille de Grille pour Remplissage:" + +#: pcbnew/dialog_zones_by_polygon.cpp:168 +msgid "Hatched Outline" +msgstr "Contour Hachuré" + +#: pcbnew/dialog_zones_by_polygon.cpp:169 +msgid "Full Hatched" +msgstr "Pleinement Hachuré" + +#: pcbnew/dialog_zones_by_polygon.cpp:170 +msgid "Outlines Appearance" +msgstr "Aspect des Contours" + +#: pcbnew/dialog_zones_by_polygon.cpp:211 +msgid "Alphabetic" +msgstr "Alphabetique" + +#: pcbnew/dialog_zones_by_polygon.cpp:212 +msgid "Advanced" +msgstr "Avancé" + +#: pcbnew/dialog_zones_by_polygon.cpp:213 +msgid "Net sorting:" +msgstr "Tri des Equipotentielles:" + +#: pcbnew/dialog_zones_by_polygon.cpp:462 +msgid "Error : you must choose a layer" +msgstr "Erreur. Vous devez choisir une couche" + +#: pcbnew/dialog_zones_by_polygon.cpp:471 +msgid "Error : you must choose a net name" +msgstr "Erreur. Vous devez choisir une équipotentielle" + +#: pcbnew/initpcb.cpp:125 msgid "Current Board will be lost ?" msgstr "Le C.I. courant sera perdu ?" -#: pcbnew/initpcb.cpp:213 +#: pcbnew/initpcb.cpp:215 msgid "Delete Zones ?" msgstr "Effacer Zones ?" -#: pcbnew/initpcb.cpp:240 +#: pcbnew/initpcb.cpp:243 msgid "Delete Board edges ?" msgstr "Effacement contour PCB" -#: pcbnew/initpcb.cpp:245 +#: pcbnew/initpcb.cpp:248 msgid "Delete draw items?" msgstr "Suppression éléments graphiques?" -#: pcbnew/initpcb.cpp:287 +#: pcbnew/initpcb.cpp:290 #: gerbview/initpcb.cpp:150 msgid "Delete Tracks?" msgstr "Effacer Pistes ?" -#: pcbnew/initpcb.cpp:310 +#: pcbnew/initpcb.cpp:313 msgid "Delete Modules?" msgstr "Effacement des Modules?" -#: pcbnew/initpcb.cpp:333 +#: pcbnew/initpcb.cpp:336 #: gerbview/initpcb.cpp:173 msgid "Delete Pcb Texts" msgstr "Effacer Textes Pcb" @@ -4649,68 +4553,23 @@ msgstr "Chercher Marqueur" msgid "Find Next Marker" msgstr "Marqueur Suivant" -#: pcbnew/class_board.cpp:20 -#: pcbnew/dialog_drc.cpp:483 -msgid "Unconnected pads" -msgstr "Pads non connectés" - -#: pcbnew/class_board.cpp:22 -msgid "Track near thru-hole" -msgstr "Piste près d'un trou" - -#: pcbnew/class_board.cpp:24 -msgid "Track near pad" -msgstr "Piste près d'un pad" - -#: pcbnew/class_board.cpp:26 -msgid "Track near via" -msgstr "Piste près d'une via" - -#: pcbnew/class_board.cpp:28 -msgid "Via near via" -msgstr "Via proche d'une via" - -#: pcbnew/class_board.cpp:30 -msgid "Via near track" -msgstr "Via près d'une piste" - -#: pcbnew/class_board.cpp:40 -msgid "Two track ends" -msgstr "Deux extrémités de pistes" - -#: pcbnew/class_board.cpp:42 -msgid "This looks bad" -msgstr "Cela semble incorrect" - -#: pcbnew/class_board.cpp:44 -msgid "Tracks crossing" -msgstr "Pistes se croisant" - -#: pcbnew/class_board.cpp:46 -msgid "Pad near pad" -msgstr "Pad près d'un pad" - -#: pcbnew/class_board.cpp:48 -msgid "Via hole > diameter" -msgstr "Perçage via > diamètre" - -#: pcbnew/class_board.cpp:441 +#: pcbnew/class_board.cpp:403 msgid "Nodes" msgstr "Nodes" -#: pcbnew/class_board.cpp:444 +#: pcbnew/class_board.cpp:406 msgid "Links" msgstr "Liens" -#: pcbnew/class_board.cpp:447 +#: pcbnew/class_board.cpp:409 msgid "Nets" msgstr "Nets" -#: pcbnew/class_board.cpp:450 +#: pcbnew/class_board.cpp:412 msgid "Connect" msgstr "Connect" -#: pcbnew/class_board.cpp:453 +#: pcbnew/class_board.cpp:415 #: eeschema/eelayer.h:116 msgid "NoConn" msgstr "Non Conn" @@ -4803,12 +4662,12 @@ msgstr "%d Err type %d: %s (net %s) et piste (net %s) @ %d,%d\n" msgid "%d Drc Err: PAD %s (%s) net %s @ %d,%d and PAD %s (%s) net %s @ %d,%d\n" msgstr "%d Err Drc: PAD %s (%s) net %s @ %d,%d et PAD %s (%s) net %s @ %d,%d\n" -#: pcbnew/basepcbframe.cpp:162 +#: pcbnew/basepcbframe.cpp:159 msgid "3D Frame already opened" msgstr "Fenetre 3D déjà ouverte" +#: pcbnew/basepcbframe.cpp:164 #: pcbnew/basepcbframe.cpp:167 -#: pcbnew/basepcbframe.cpp:170 msgid "3D Viewer" msgstr "Visu 3D" @@ -4864,6 +4723,11 @@ msgstr "Zones" msgid "Include zones in clearance or unconnected tests" msgstr "Inclure zones dans les test d'isolation en test tests de nonconnexion" +#: pcbnew/dialog_drc.cpp:483 +#: pcbnew/class_drc_item.cpp:39 +msgid "Unconnected pads" +msgstr "Pads non connectés" + #: pcbnew/dialog_drc.cpp:486 msgid "Find unconnected pads" msgstr "Trouver pads non connectés" @@ -4935,6 +4799,246 @@ msgstr "Fichier rapport termin msgid "DRC Report file" msgstr "Fichier rapport de contrôle DRC:" +#: pcbnew/class_zone.cpp:411 +msgid "Corners" +msgstr "Sommets" + +#: pcbnew/class_zone.cpp:415 +msgid "Hatch lines" +msgstr "Lignes de Hachure" + +#: pcbnew/class_drc_item.cpp:41 +msgid "Track near thru-hole" +msgstr "Piste près d'un trou" + +#: pcbnew/class_drc_item.cpp:43 +msgid "Track near pad" +msgstr "Piste près d'un pad" + +#: pcbnew/class_drc_item.cpp:45 +msgid "Track near via" +msgstr "Piste près d'une via" + +#: pcbnew/class_drc_item.cpp:47 +msgid "Via near via" +msgstr "Via proche d'une via" + +#: pcbnew/class_drc_item.cpp:49 +msgid "Via near track" +msgstr "Via près d'une piste" + +#: pcbnew/class_drc_item.cpp:59 +msgid "Two track ends" +msgstr "Deux extrémités de pistes" + +#: pcbnew/class_drc_item.cpp:61 +msgid "This looks bad" +msgstr "Cela semble incorrect" + +#: pcbnew/class_drc_item.cpp:63 +msgid "Tracks crossing" +msgstr "Pistes se croisant" + +#: pcbnew/class_drc_item.cpp:65 +msgid "Pad near pad" +msgstr "Pad près d'un pad" + +#: pcbnew/class_drc_item.cpp:67 +msgid "Via hole > diameter" +msgstr "Perçage via > diamètre" + +#: pcbnew/hotkeys.cpp:443 +#, c-format +msgid "Footprint %s found, but locked" +msgstr "Module %s trouvé, mais verrouillé" + +#: pcbnew/hotkeys.cpp:608 +msgid "Delete module?" +msgstr "Effacer Module?" + +#: pcbnew/tool_pcb.cpp:51 +msgid "" +"Show active layer selections\n" +"and select layer pair for route and place via" +msgstr "" +"Affiche selections couche active\n" +"et selection paire de couches pour routage and placement via" + +#: pcbnew/tool_pcb.cpp:239 +msgid "New Board" +msgstr "Nouveau Circuit Imprimé" + +#: pcbnew/tool_pcb.cpp:241 +msgid "Open existing Board" +msgstr "Ouvrir C.I. existant" + +#: pcbnew/tool_pcb.cpp:242 +msgid "Save Board" +msgstr "Sauver Circuit Imprimé" + +#: pcbnew/tool_pcb.cpp:246 +#: eeschema/tool_sch.cpp:65 +#: gerbview/tool_gerber.cpp:232 +msgid "page settings (size, texts)" +msgstr "Ajustage de la feuille de dessin (dimensions, textes)" + +#: pcbnew/tool_pcb.cpp:250 +msgid "Open Module Editor" +msgstr "Ouvrir Editeur de modules" + +#: pcbnew/tool_pcb.cpp:253 +#: eeschema/tool_sch.cpp:81 +#: gerbview/tool_gerber.cpp:243 +msgid "Cut selected item" +msgstr "Suppression des éléments sélectionnés" + +#: pcbnew/tool_pcb.cpp:257 +#: eeschema/tool_sch.cpp:84 +#: gerbview/tool_gerber.cpp:248 +msgid "Copy selected item" +msgstr "Copie des éléments sélectionnés" + +#: pcbnew/tool_pcb.cpp:259 +#: eeschema/tool_sch.cpp:87 +#: gerbview/tool_gerber.cpp:254 +msgid "Paste" +msgstr "Copie des éléments sauvegardés" + +#: pcbnew/tool_pcb.cpp:262 +#: gerbview/tool_gerber.cpp:261 +msgid "Undelete" +msgstr "Annulation du dernier effacement" + +#: pcbnew/tool_pcb.cpp:265 +msgid "Print Board" +msgstr "Imprimer C.I." + +#: pcbnew/tool_pcb.cpp:267 +msgid "Plot (HPGL, PostScript, or GERBER format)" +msgstr "Tracer en format HPGL, POSTSCRIPT ou GERBER" + +#: pcbnew/tool_pcb.cpp:286 +#: eeschema/tool_sch.cpp:125 +msgid "Find components and texts" +msgstr "Recherche de composants et textes" + +#: pcbnew/tool_pcb.cpp:292 +msgid "Read Netlist" +msgstr "Lire Netliste" + +#: pcbnew/tool_pcb.cpp:294 +msgid "Pcb Design Rules Check" +msgstr "Controle des règles de conception" + +#: pcbnew/tool_pcb.cpp:305 +msgid "Mode Module: Manual and Automatic Move or Place for modules" +msgstr "Mode Module: Déplacements ou Placement Manuel ou Automatique des modules" + +#: pcbnew/tool_pcb.cpp:308 +msgid "Mode Track and Autorouting" +msgstr "Mode Pistes and Autoroutage" + +#: pcbnew/tool_pcb.cpp:332 +msgid "Drc OFF" +msgstr "Drc DESACTIVEE" + +#: pcbnew/tool_pcb.cpp:349 +msgid "Show General Ratsnest" +msgstr "Monter le chevelu général" + +#: pcbnew/tool_pcb.cpp:352 +msgid "Show Module Ratsnest when moving" +msgstr "Monter le chevelu du module pendant déplacement" + +#: pcbnew/tool_pcb.cpp:357 +msgid "Enable Auto Del Track" +msgstr "Autoriser l'effacement automatique des pistes" + +#: pcbnew/tool_pcb.cpp:370 +msgid "Show Tracks Sketch" +msgstr "Afficher pistes en contour" + +#: pcbnew/tool_pcb.cpp:383 +msgid "" +"Display auxiliary vertical toolbar (tools for micro wave applications)\n" +" This is a very experimental feature (under development)" +msgstr "" +"Affiche toolbar vertical auxiliaire (outils pour applications micro-ondes)\n" +"C'est un outil expérimental (en cours de développement)" + +#: pcbnew/tool_pcb.cpp:412 +msgid "Net highlight" +msgstr "Surbrillance des équipotentielles" + +#: pcbnew/tool_pcb.cpp:416 +msgid "Display local ratsnest (pad or module)" +msgstr "Afficher le chevelu local (pastilles ou modules)" + +#: pcbnew/tool_pcb.cpp:421 +msgid "Add modules" +msgstr "Addition de Modules" + +#: pcbnew/tool_pcb.cpp:425 +msgid "Add tracks and vias" +msgstr "Ajouter pistes et vias" + +#: pcbnew/tool_pcb.cpp:429 +msgid "Add zones" +msgstr "Addition de Zones" + +#: pcbnew/tool_pcb.cpp:446 +msgid "Add text" +msgstr "Ajout de Texte" + +#: pcbnew/tool_pcb.cpp:451 +msgid "Add dimension" +msgstr "Ajout des cotes" + +#: pcbnew/tool_pcb.cpp:455 +#: gerbview/tool_gerber.cpp:378 +msgid "Add layer alignment target" +msgstr "Ajouter Mire de superposition" + +#: pcbnew/tool_pcb.cpp:465 +msgid "Offset adjust for drill and place files" +msgstr "Ajuste offset pour fichier de perçage et placement" + +#: pcbnew/tool_pcb.cpp:490 +msgid "Create line of specified length for microwave applications" +msgstr "Creation de lignes de longueur spécifiée (pour applications micro-ondes)" + +#: pcbnew/tool_pcb.cpp:496 +msgid "Create gap of specified length for microwave applications" +msgstr "Creation de gaps de longueur spécifiée (pour applications micro-ondes)" + +#: pcbnew/tool_pcb.cpp:504 +msgid "Create stub of specified length for microwave applications" +msgstr "Creation de stub de longueur spécifiée (pour applications micro-ondes)" + +#: pcbnew/tool_pcb.cpp:510 +msgid "Create stub (arc) of specified length for microwave applications" +msgstr "Creation de stub (arc) de longueur spécifiée (pour applications micro-ondes)" + +#: pcbnew/tool_pcb.cpp:517 +msgid "Create a polynomial shape for microwave applications" +msgstr "Creation de formes polynomiales (pour applications micro-ondes)" + +#: pcbnew/tool_pcb.cpp:571 +msgid "Zoom " +msgstr "Zoom " + +#: pcbnew/tool_pcb.cpp:585 +#: eeschema/eelayer.cpp:223 +#: pcbnew/set_color.h:414 +#: eeschema/eelayer.h:210 +#: gerbview/set_color.h:324 +msgid "Grid" +msgstr "Grille" + +#: pcbnew/tool_pcb.cpp:676 +msgid "+/- to switch" +msgstr "+/- pour commuter" + #: eeschema/save_schemas.cpp:71 #: eeschema/files-io.cpp:65 #: eeschema/eeload.cpp:59 @@ -4960,149 +5064,168 @@ msgstr "Erreur sur msgid "Clear SubHierarchy ?" msgstr "Supprimer la sous hiérarchie?" -#: eeschema/libedit_onrightclick.cpp:103 -msgid "Move Arc" -msgstr "Déplacer arc" +#: eeschema/libedit.cpp:38 +msgid " Part: " +msgstr "Composant " -#: eeschema/libedit_onrightclick.cpp:106 -msgid "Arc Options" -msgstr "Options" +#: eeschema/libedit.cpp:52 +msgid " Convert" +msgstr " Convert" -#: eeschema/libedit_onrightclick.cpp:110 -msgid "Arc Delete" -msgstr "Suppression d'arc" +#: eeschema/libedit.cpp:53 +msgid " Normal" +msgstr " Normal" -#: eeschema/libedit_onrightclick.cpp:118 -msgid "Move Circle" -msgstr "Déplace cercle" +#: eeschema/libedit.cpp:56 +msgid " (Power Symbol)" +msgstr " (Symbole Alimentation)" -#: eeschema/libedit_onrightclick.cpp:121 -msgid "Circle Options" -msgstr "Options" +#: eeschema/libedit.cpp:90 +msgid "" +"Current Part not saved.\n" +"Continue?" +msgstr "" +"Composant courant non sauvé.\n" +" continuer ?" -#: eeschema/libedit_onrightclick.cpp:125 -msgid "Circle Delete" -msgstr "Supprimer cercle" +#: eeschema/libedit.cpp:113 +#: eeschema/libedit.cpp:390 +msgid "Component \"" +msgstr "Composant \"" -#: eeschema/libedit_onrightclick.cpp:133 -msgid "Move Rect" -msgstr "Déplace Rect" +#: eeschema/libedit.cpp:113 +msgid "\" not found." +msgstr "\" non trouvé" -#: eeschema/libedit_onrightclick.cpp:136 -msgid "Rect Options" -msgstr "Options" +#: eeschema/libedit.cpp:235 +msgid "Modify Library File \"" +msgstr "Ok pour modifier le fichier Librairie \"" -#: eeschema/libedit_onrightclick.cpp:140 -msgid "Rect Delete" -msgstr "Supprimer Rect" +#: eeschema/libedit.cpp:235 +msgid "\"?" +msgstr "\"?" -#: eeschema/libedit_onrightclick.cpp:148 -#: eeschema/onrightclick.cpp:412 -msgid "Move Text" -msgstr "Déplacer Texte" +#: eeschema/libedit.cpp:244 +msgid "Error while saving Library File \"" +msgstr "Erreur en sauvant le fichier Librairie \"" -#: eeschema/libedit_onrightclick.cpp:151 -msgid "Text Editor" -msgstr "Editeur de Texte" +#: eeschema/libedit.cpp:244 +#: eeschema/libedit.cpp:391 +msgid "\"." +msgstr "\"." -#: eeschema/libedit_onrightclick.cpp:153 -msgid "Rotate Text" -msgstr "Rot. Texte" +#: eeschema/libedit.cpp:250 +msgid "Library File \"" +msgstr "Fichier Librairie \"" -#: eeschema/libedit_onrightclick.cpp:157 -msgid "Text Delete" -msgstr "Supprimer Texte" +#: eeschema/libedit.cpp:252 +msgid "Document File \"" +msgstr "Fichier de Doc \"" -#: eeschema/libedit_onrightclick.cpp:165 -msgid "Move Line" -msgstr "Déplace Ligne" +#: eeschema/libedit.cpp:305 +msgid "No Active Library" +msgstr "Pas de Librairie Active" -#: eeschema/libedit_onrightclick.cpp:170 -msgid "Line End" -msgstr "Fin ligne" +#: eeschema/libedit.cpp:321 +#, c-format +msgid "Select Component (%d items)" +msgstr "Selection composant (%d items)" -#: eeschema/libedit_onrightclick.cpp:173 -msgid "Line Options" -msgstr "Options" +#: eeschema/libedit.cpp:344 +msgid "Component not found" +msgstr "Composant non trouvé" -#: eeschema/libedit_onrightclick.cpp:177 -msgid "Line Delete" -msgstr "Supprimer ligne" +#: eeschema/libedit.cpp:348 +msgid "Delete component \"" +msgstr "Suppression Composant \"" -#: eeschema/libedit_onrightclick.cpp:184 -msgid "Segment Delete" -msgstr "Supprimer segment" +#: eeschema/libedit.cpp:349 +msgid "\" from library \"" +msgstr "\" de la librairie \"" -#: eeschema/libedit_onrightclick.cpp:192 -#: eeschema/onrightclick.cpp:266 -msgid "Move Field" -msgstr "Déplace Champ" +#: eeschema/libedit.cpp:373 +msgid "Clear old component from screen (changes will be lost)?" +msgstr "" -#: eeschema/libedit_onrightclick.cpp:195 -msgid "Field Rotate" -msgstr "Rotation Champ" +#: eeschema/libedit.cpp:391 +msgid "\" exists in library \"" +msgstr "\" existe en librairie \"" -#: eeschema/libedit_onrightclick.cpp:197 -msgid "Field Edit" -msgstr "Edition du champ" +#: eeschema/libedit.cpp:558 +msgid "No component to Save." +msgstr "Pas de composant à sauver" -#: eeschema/libedit_onrightclick.cpp:222 -msgid "Move Pin" -msgstr "Déplace pin" +#: eeschema/libedit.cpp:565 +msgid "No Library specified." +msgstr "Pas de Librairie spécifiée." -#: eeschema/libedit_onrightclick.cpp:224 -msgid "Pin Edit" -msgstr "Edit pin" +#: eeschema/libedit.cpp:576 +#, c-format +msgid "Component \"%s\" exists. Change it?" +msgstr "Le composant \" %s\" existe, Le changer ?" -#: eeschema/libedit_onrightclick.cpp:229 -msgid "Pin Delete" -msgstr "Suppression de pin" +#: eeschema/libedit.cpp:615 +#, c-format +msgid "Component %s saved in %s" +msgstr "Composant %s sauvé en %s" -#: eeschema/libedit_onrightclick.cpp:233 -msgid "Global" -msgstr "Global" +#: eeschema/schedit.cpp:283 +msgid "Push/Pop Hierarchy" +msgstr "Naviger dans Hiérarchie" -#: eeschema/libedit_onrightclick.cpp:235 -msgid "Pin Size to selected pins" -msgstr "Change taille pins sélectionnées" +#: eeschema/schedit.cpp:287 +msgid "Add NoConnect Flag" +msgstr "Ajoutde symboles de non connexion" -#: eeschema/libedit_onrightclick.cpp:235 -msgid "Pin Size to others" -msgstr "Change taille autres pins" +#: eeschema/schedit.cpp:291 +#: eeschema/hotkeys.cpp:271 +msgid "Add Wire" +msgstr "Ajouter Fils" -#: eeschema/libedit_onrightclick.cpp:238 -msgid "Pin Name Size to selected pin" -msgstr "Change taille Nom pin sélectionnées" +#: eeschema/schedit.cpp:295 +msgid "Add Bus" +msgstr "Addition de Bus" -#: eeschema/libedit_onrightclick.cpp:238 -msgid "Pin Name Size to others" -msgstr "Change taille Nom pin autres pins" +#: eeschema/schedit.cpp:303 +msgid "Add Junction" +msgstr "Ajout jonctions" -#: eeschema/libedit_onrightclick.cpp:241 -msgid "Pin Num Size to selected pin" -msgstr "Change taille Num pins sélectionnées" +#: eeschema/schedit.cpp:307 +msgid "Add Label" +msgstr "Ajout Label" -#: eeschema/libedit_onrightclick.cpp:241 -msgid "Pin Num Size to others" -msgstr "Change taille Num pin autres pins" +#: eeschema/schedit.cpp:311 +msgid "Add Global label" +msgstr "Ajout de labels globaux" -#: eeschema/libedit_onrightclick.cpp:256 -#: eeschema/onrightclick.cpp:587 -msgid "Win. Zoom (Midd butt drag mouse)" -msgstr "Win. Zoom (Midd butt drag mouse)" +#: eeschema/schedit.cpp:319 +msgid "Add Wire to Bus Entry" +msgstr "Addition d'entrées de bus (type fil vers bus)" -#: eeschema/libedit_onrightclick.cpp:264 -msgid "Select items" -msgstr "Sélection des éléments" +#: eeschema/schedit.cpp:323 +msgid "Add Bus to Bus entry" +msgstr "Addition d'entrées de bus (type bus vers bus)" -#: eeschema/libedit_onrightclick.cpp:267 -msgid "Mirror Block (ctrl + drag mouse)" -msgstr "Bloc Miroir (ctrl + drag mouse)" +#: eeschema/schedit.cpp:327 +msgid "Add Sheet" +msgstr "Ajout de Feuille" -#: eeschema/libedit_onrightclick.cpp:269 -#: eeschema/onrightclick.cpp:602 -msgid "Del. Block (shift+ctrl + drag mouse)" -msgstr "Effacement Bloc (shift+ctrl + drag mouse)" +#: eeschema/schedit.cpp:331 +msgid "Add PinSheet" +msgstr "Ajout Conn. hiérar." + +#: eeschema/schedit.cpp:335 +msgid "Import PinSheet" +msgstr "Importer Connecteur de hiérarchie" + +#: eeschema/schedit.cpp:339 +#: eeschema/hotkeys.cpp:249 +msgid "Add Component" +msgstr "Ajout Composant" + +#: eeschema/schedit.cpp:343 +msgid "Add Power" +msgstr "Add Alims" #: eeschema/eeconfig.cpp:70 #: kicad/files-io.cpp:131 @@ -5381,14 +5504,14 @@ msgid "Add wire or bus label" msgstr "Addition de labels sur fils ou bus" #: eeschema/tool_sch.cpp:204 -#: eeschema/onrightclick.cpp:491 -#: eeschema/onrightclick.cpp:523 +#: eeschema/onrightclick.cpp:497 +#: eeschema/onrightclick.cpp:529 msgid "Add global label" msgstr "Addition de labels globaux" #: eeschema/tool_sch.cpp:208 -#: eeschema/onrightclick.cpp:485 -#: eeschema/onrightclick.cpp:517 +#: eeschema/onrightclick.cpp:491 +#: eeschema/onrightclick.cpp:523 msgid "Add junction" msgstr "Addition de jonctions" @@ -5881,168 +6004,9 @@ msgstr "Un fichier %s existe, Le charger ?" msgid "Ok to cleanup this sheet" msgstr "Ok pour nettoyer cette feuille" -#: eeschema/libedit.cpp:38 -msgid " Part: " -msgstr "Composant " - -#: eeschema/libedit.cpp:52 -msgid " Convert" -msgstr " Convert" - -#: eeschema/libedit.cpp:53 -msgid " Normal" -msgstr " Normal" - -#: eeschema/libedit.cpp:56 -msgid " (Power Symbol)" -msgstr " (Symbole Alimentation)" - -#: eeschema/libedit.cpp:90 -msgid "" -"Current Part not saved.\n" -"Continue?" -msgstr "" -"Composant courant non sauvé.\n" -" continuer ?" - -#: eeschema/libedit.cpp:113 -#: eeschema/libedit.cpp:390 -msgid "Component \"" -msgstr "Composant \"" - -#: eeschema/libedit.cpp:113 -msgid "\" not found." -msgstr "\" non trouvé" - -#: eeschema/libedit.cpp:235 -msgid "Modify Library File \"" -msgstr "Ok pour modifier le fichier Librairie \"" - -#: eeschema/libedit.cpp:235 -msgid "\"?" -msgstr "\"?" - -#: eeschema/libedit.cpp:244 -msgid "Error while saving Library File \"" -msgstr "Erreur en sauvant le fichier Librairie \"" - -#: eeschema/libedit.cpp:244 -#: eeschema/libedit.cpp:391 -msgid "\"." -msgstr "\"." - -#: eeschema/libedit.cpp:250 -msgid "Library File \"" -msgstr "Fichier Librairie \"" - -#: eeschema/libedit.cpp:252 -msgid "Document File \"" -msgstr "Fichier de Doc \"" - -#: eeschema/libedit.cpp:305 -msgid "No Active Library" -msgstr "Pas de Librairie Active" - -#: eeschema/libedit.cpp:321 -#, c-format -msgid "Select Component (%d items)" -msgstr "Selection composant (%d items)" - -#: eeschema/libedit.cpp:344 -msgid "Component not found" -msgstr "Composant non trouvé" - -#: eeschema/libedit.cpp:348 -msgid "Delete component \"" -msgstr "Suppression Composant \"" - -#: eeschema/libedit.cpp:349 -msgid "\" from library \"" -msgstr "\" de la librairie \"" - -#: eeschema/libedit.cpp:373 -msgid "Delete old component?" -msgstr "Supprimer ancien composant ?" - -#: eeschema/libedit.cpp:391 -msgid "\" exists in library \"" -msgstr "\" existe en librairie \"" - -#: eeschema/libedit.cpp:558 -msgid "No component to Save." -msgstr "Pas de composant à sauver" - -#: eeschema/libedit.cpp:565 -msgid "No Library specified." -msgstr "Pas de Librairie spécifiée." - -#: eeschema/libedit.cpp:576 -#, c-format -msgid "Component \"%s\" exists. Change it?" -msgstr "Le composant \" %s\" existe, Le changer ?" - -#: eeschema/libedit.cpp:615 -#, c-format -msgid "Component %s saved in %s" -msgstr "Composant %s sauvé en %s" - -#: eeschema/schedit.cpp:282 -msgid "Push/Pop Hierarchy" -msgstr "Naviger dans Hiérarchie" - -#: eeschema/schedit.cpp:286 -msgid "Add NoConnect Flag" -msgstr "Ajoutde symboles de non connexion" - -#: eeschema/schedit.cpp:290 -#: eeschema/hotkeys.cpp:262 -msgid "Add Wire" -msgstr "Ajouter Fils" - -#: eeschema/schedit.cpp:294 -msgid "Add Bus" -msgstr "Addition de Bus" - -#: eeschema/schedit.cpp:302 -msgid "Add Junction" -msgstr "Ajout jonctions" - -#: eeschema/schedit.cpp:306 -msgid "Add Label" -msgstr "Ajout Label" - -#: eeschema/schedit.cpp:310 -msgid "Add Global label" -msgstr "Ajout de labels globaux" - -#: eeschema/schedit.cpp:318 -msgid "Add Wire to Bus Entry" -msgstr "Addition d'entrées de bus (type fil vers bus)" - -#: eeschema/schedit.cpp:322 -msgid "Add Bus to Bus entry" -msgstr "Addition d'entrées de bus (type bus vers bus)" - -#: eeschema/schedit.cpp:326 -msgid "Add Sheet" -msgstr "Ajout de Feuille" - -#: eeschema/schedit.cpp:330 -msgid "Add PinSheet" -msgstr "Ajout Conn. hiérar." - -#: eeschema/schedit.cpp:334 -msgid "Import PinSheet" -msgstr "Importer Connecteur de hiérarchie" - -#: eeschema/schedit.cpp:338 -#: eeschema/hotkeys.cpp:240 -msgid "Add Component" -msgstr "Ajout Composant" - -#: eeschema/schedit.cpp:342 -msgid "Add Power" -msgstr "Add Alims" +#: eeschema/libfield.cpp:221 +msgid "No new text: no change" +msgstr "Pas de nouveau texte: pas de changements" #: eeschema/pinedit.cpp:22 #: eeschema/pinedit-dialog.cpp:317 @@ -6105,321 +6069,315 @@ msgstr " Normal" msgid "Eeschema is already running, Continue?" msgstr "Eeschema est est cours d'exécution. Continuer ?" -#: eeschema/edit_component_in_schematic.cpp:195 -#: eeschema/edit_component_in_lib.cpp:554 -msgid "Field to edit" -msgstr "Champ à éditer" - -#: eeschema/edit_component_in_schematic.cpp:201 -#: eeschema/edit_component_in_lib.cpp:508 -msgid "Field Name:" -msgstr "Nom Champ" - -#: eeschema/edit_component_in_schematic.cpp:211 -#: eeschema/edit_component_in_lib.cpp:518 -msgid "Field Text:" -msgstr "Texte du Champ:" - -#: eeschema/edit_component_in_schematic.cpp:219 -#: eeschema/edit_component_in_lib.cpp:524 -msgid "Pos" -msgstr "Pos" - -#: eeschema/edit_component_in_schematic.cpp:326 -msgid "No Component Name!" -msgstr "Pas de nom de composant!" - -#: eeschema/edit_component_in_schematic.cpp:332 -#, c-format -msgid "Component [%s] not found!" -msgstr "Composant [%s] non trouvé!" - -#: eeschema/edit_component_in_schematic.cpp:449 -msgid "No Field to move" -msgstr "Pas de champ a déplacer" - -#: eeschema/edit_component_in_schematic.cpp:512 -msgid "No Field To Edit" -msgstr "Pas de champ a éditer" - -#: eeschema/edit_component_in_schematic.cpp:526 -msgid "" -"Part is a POWER, value cannot be modified!\n" -"You must create a new power" -msgstr "" -"Composant type ALIMENTATION!\n" -"valeur non modifiable, Vous devez créer un nouveau composant alimentation " - -#: eeschema/edit_component_in_schematic.cpp:569 -msgid "Reference needed !, No change" -msgstr "Référence NECESSAIRE: changement refusé" - -#: eeschema/edit_component_in_schematic.cpp:573 -msgid "Value needed !, No change" -msgstr "Valeur NECESSAIRE: changement refusé" - -#: eeschema/onrightclick.cpp:142 +#: eeschema/onrightclick.cpp:143 msgid "Leave Sheet" msgstr "Quitter sous-feuille" -#: eeschema/onrightclick.cpp:158 +#: eeschema/onrightclick.cpp:159 msgid "delete noconn" msgstr "Supprimer non connexion" -#: eeschema/onrightclick.cpp:168 +#: eeschema/onrightclick.cpp:169 msgid "Move bus entry" msgstr "Déplacer entrée de bus" -#: eeschema/onrightclick.cpp:170 +#: eeschema/onrightclick.cpp:171 msgid "set bus entry /" msgstr "Entrée de bus /" -#: eeschema/onrightclick.cpp:172 +#: eeschema/onrightclick.cpp:173 msgid "set bus entry \\" msgstr "Entrée de bus \\" -#: eeschema/onrightclick.cpp:174 +#: eeschema/onrightclick.cpp:175 msgid "delete bus entry" msgstr "Supprimer entrée de bus" -#: eeschema/onrightclick.cpp:178 +#: eeschema/onrightclick.cpp:179 msgid "delete Marker" msgstr "Supprimer Marqueur" -#: eeschema/onrightclick.cpp:228 +#: eeschema/onrightclick.cpp:229 msgid "End drawing" msgstr "Fin tracé" -#: eeschema/onrightclick.cpp:230 +#: eeschema/onrightclick.cpp:231 msgid "Delete drawing" msgstr "Supprimer Tracé" #: eeschema/onrightclick.cpp:267 +msgid "Move Field" +msgstr "Déplace Champ" + +#: eeschema/onrightclick.cpp:268 msgid "Rotate Field" msgstr "Rotation Champ" -#: eeschema/onrightclick.cpp:287 +#: eeschema/onrightclick.cpp:288 msgid "Move Component" msgstr "Déplace Composant" -#: eeschema/onrightclick.cpp:290 +#: eeschema/onrightclick.cpp:291 msgid "Drag Component" msgstr "Drag Composant" -#: eeschema/onrightclick.cpp:297 +#: eeschema/onrightclick.cpp:298 msgid "Rotate +" msgstr "Rotation +" -#: eeschema/onrightclick.cpp:301 +#: eeschema/onrightclick.cpp:302 #: eeschema/dialog_edit_component_in_schematic.cpp:181 msgid "Mirror --" msgstr "Miroir--" -#: eeschema/onrightclick.cpp:303 +#: eeschema/onrightclick.cpp:304 msgid "Mirror ||" msgstr "Miroir ||" -#: eeschema/onrightclick.cpp:309 +#: eeschema/onrightclick.cpp:310 msgid "Orient Component" msgstr "Oriente Composant" -#: eeschema/onrightclick.cpp:320 +#: eeschema/onrightclick.cpp:322 +msgid "Footprint " +msgstr "Empreinte: " + +#: eeschema/onrightclick.cpp:326 #: eeschema/dialog_edit_component_in_schematic.cpp:190 #: eeschema/affiche.cpp:182 msgid "Convert" msgstr "Convert" -#: eeschema/onrightclick.cpp:327 +#: eeschema/onrightclick.cpp:333 #, c-format msgid "Unit %d %c" msgstr "Unité %d %c" -#: eeschema/onrightclick.cpp:333 +#: eeschema/onrightclick.cpp:339 #: eeschema/affiche.cpp:172 msgid "Unit" msgstr "Unité" -#: eeschema/onrightclick.cpp:338 +#: eeschema/onrightclick.cpp:344 msgid "Edit Component" msgstr "Edite Composant" -#: eeschema/onrightclick.cpp:342 +#: eeschema/onrightclick.cpp:348 msgid "Copy Component" msgstr "Copie composant" -#: eeschema/onrightclick.cpp:343 +#: eeschema/onrightclick.cpp:349 msgid "Delete Component" msgstr "Supprime Composant" -#: eeschema/onrightclick.cpp:362 +#: eeschema/onrightclick.cpp:368 msgid "Move Glabel" msgstr "Déplace Label Global" -#: eeschema/onrightclick.cpp:363 +#: eeschema/onrightclick.cpp:369 msgid "Rotate GLabel (R)" msgstr "Rot. Label Global (R)" -#: eeschema/onrightclick.cpp:364 +#: eeschema/onrightclick.cpp:370 msgid "Edit GLabel" msgstr "Editer Label Global" -#: eeschema/onrightclick.cpp:365 +#: eeschema/onrightclick.cpp:371 msgid "Delete Glabel" msgstr "Supprimer Label Global" -#: eeschema/onrightclick.cpp:369 -#: eeschema/onrightclick.cpp:419 +#: eeschema/onrightclick.cpp:375 +#: eeschema/onrightclick.cpp:425 msgid "Change to Label" msgstr "Change en Label" -#: eeschema/onrightclick.cpp:371 -#: eeschema/onrightclick.cpp:396 +#: eeschema/onrightclick.cpp:377 +#: eeschema/onrightclick.cpp:402 msgid "Change to Text" msgstr "Change en Texte" -#: eeschema/onrightclick.cpp:373 -#: eeschema/onrightclick.cpp:398 -#: eeschema/onrightclick.cpp:423 +#: eeschema/onrightclick.cpp:379 +#: eeschema/onrightclick.cpp:404 +#: eeschema/onrightclick.cpp:429 msgid "Change Type" msgstr "Change Type" -#: eeschema/onrightclick.cpp:387 +#: eeschema/onrightclick.cpp:393 msgid "Move Label" msgstr "Déplace Label" -#: eeschema/onrightclick.cpp:388 +#: eeschema/onrightclick.cpp:394 msgid "Rotate Label (R)" msgstr "Rot. Label (R)" -#: eeschema/onrightclick.cpp:389 +#: eeschema/onrightclick.cpp:395 msgid "Edit Label" msgstr "Editer Label" -#: eeschema/onrightclick.cpp:390 +#: eeschema/onrightclick.cpp:396 msgid "Delete Label" msgstr "Supprimer Label:" -#: eeschema/onrightclick.cpp:394 -#: eeschema/onrightclick.cpp:421 +#: eeschema/onrightclick.cpp:400 +#: eeschema/onrightclick.cpp:427 msgid "Change to Glabel" msgstr "Change en Label Global" -#: eeschema/onrightclick.cpp:413 +#: eeschema/onrightclick.cpp:418 +msgid "Move Text" +msgstr "Déplacer Texte" + +#: eeschema/onrightclick.cpp:419 msgid "Rotate Text (R)" msgstr "Rot. Texte (R)" -#: eeschema/onrightclick.cpp:414 +#: eeschema/onrightclick.cpp:420 msgid "Edit Text" msgstr "Editer Texte" -#: eeschema/onrightclick.cpp:415 +#: eeschema/onrightclick.cpp:421 msgid "Delete Text" msgstr "Supprimer Texte" -#: eeschema/onrightclick.cpp:441 -#: eeschema/onrightclick.cpp:481 +#: eeschema/onrightclick.cpp:447 +#: eeschema/onrightclick.cpp:487 msgid "Break Wire" msgstr "Briser fil" -#: eeschema/onrightclick.cpp:444 +#: eeschema/onrightclick.cpp:450 msgid "delete junction" msgstr "Supprimer jonction" -#: eeschema/onrightclick.cpp:449 -#: eeschema/onrightclick.cpp:475 +#: eeschema/onrightclick.cpp:455 +#: eeschema/onrightclick.cpp:481 msgid "Delete node" msgstr "Supprimer Noeud" -#: eeschema/onrightclick.cpp:451 -#: eeschema/onrightclick.cpp:477 +#: eeschema/onrightclick.cpp:457 +#: eeschema/onrightclick.cpp:483 msgid "Delete connection" msgstr "Supprimer connexion" -#: eeschema/onrightclick.cpp:468 +#: eeschema/onrightclick.cpp:474 msgid "End Wire" msgstr "Fin Fil" -#: eeschema/onrightclick.cpp:470 +#: eeschema/onrightclick.cpp:476 msgid "Delete Wire" msgstr "Supprimer Fil" -#: eeschema/onrightclick.cpp:486 -#: eeschema/onrightclick.cpp:518 +#: eeschema/onrightclick.cpp:492 +#: eeschema/onrightclick.cpp:524 msgid "Add label" msgstr "Ajout Label" -#: eeschema/onrightclick.cpp:507 +#: eeschema/onrightclick.cpp:513 msgid "End Bus" msgstr "Fin Bus" -#: eeschema/onrightclick.cpp:510 +#: eeschema/onrightclick.cpp:516 msgid "Delete Bus" msgstr "Supprimer Bus" -#: eeschema/onrightclick.cpp:514 +#: eeschema/onrightclick.cpp:520 msgid "Break Bus" msgstr "Briser Bus" -#: eeschema/onrightclick.cpp:536 +#: eeschema/onrightclick.cpp:542 msgid "Enter Sheet" msgstr "Enter dans Feuille" -#: eeschema/onrightclick.cpp:538 +#: eeschema/onrightclick.cpp:544 msgid "Move Sheet" msgstr "Déplace Feuille" -#: eeschema/onrightclick.cpp:543 +#: eeschema/onrightclick.cpp:549 msgid "Place Sheet" msgstr "Place Feuille" -#: eeschema/onrightclick.cpp:547 +#: eeschema/onrightclick.cpp:553 msgid "Edit Sheet" msgstr "Edite Feuille" -#: eeschema/onrightclick.cpp:548 +#: eeschema/onrightclick.cpp:554 msgid "Resize Sheet" msgstr "Redimensionne feuille" -#: eeschema/onrightclick.cpp:551 +#: eeschema/onrightclick.cpp:557 msgid "Cleanup PinSheets" msgstr "Nettoyage de la feuille" -#: eeschema/onrightclick.cpp:552 +#: eeschema/onrightclick.cpp:558 msgid "Delete Sheet" msgstr "Supprimer Feuille" -#: eeschema/onrightclick.cpp:565 +#: eeschema/onrightclick.cpp:571 msgid "Move PinSheet" msgstr "Déplace Connecteur de hiérarchie" -#: eeschema/onrightclick.cpp:567 +#: eeschema/onrightclick.cpp:573 msgid "Edit PinSheet" msgstr "Edit Connecteur de hiérarchie" -#: eeschema/onrightclick.cpp:570 +#: eeschema/onrightclick.cpp:576 msgid "Delete PinSheet" msgstr "Supprimer Connecteur de hiérarchie" -#: eeschema/onrightclick.cpp:595 +#: eeschema/onrightclick.cpp:593 +#: eeschema/libedit_onrightclick.cpp:241 +msgid "Win. Zoom (Midd butt drag mouse)" +msgstr "Win. Zoom (Midd butt drag mouse)" + +#: eeschema/onrightclick.cpp:601 msgid "Other block commands" msgstr "Autres commandes de bloc" -#: eeschema/onrightclick.cpp:596 +#: eeschema/onrightclick.cpp:602 msgid "Save Block" msgstr "Sauver Bloc" -#: eeschema/onrightclick.cpp:600 +#: eeschema/onrightclick.cpp:606 msgid "Drag Block (ctrl + drag mouse)" msgstr "Drag Bloc (ctrl + drag mouse)" -#: eeschema/onrightclick.cpp:604 +#: eeschema/onrightclick.cpp:608 +#: eeschema/libedit_onrightclick.cpp:254 +msgid "Del. Block (shift+ctrl + drag mouse)" +msgstr "Effacement Bloc (shift+ctrl + drag mouse)" + +#: eeschema/onrightclick.cpp:610 msgid "Mirror Block ||" msgstr "Miroir Bloc ||" -#: eeschema/onrightclick.cpp:608 +#: eeschema/onrightclick.cpp:614 msgid "Copy to Clipboard" msgstr "Copie dans Presse papier" +#: eeschema/eeload.cpp:46 +msgid "Clear Schematic Hierarchy (modified!)?" +msgstr "Effacer la hiérarchie schématique (modifiée!)?" + +#: eeschema/eeload.cpp:107 +msgid "" +"Ready\n" +"Working dir: \n" +msgstr "" +"Pret\n" +"Répertoire de travail: \n" + +#: eeschema/eeload.cpp:153 +#, c-format +msgid "File %s not found (new project ?)" +msgstr " fichier %s non trouvé (nouveau projet ?)" + +#: eeschema/eeload.cpp:206 +msgid "The sheet hierarchy has an infinite loop, halting recursive loads. file: " +msgstr "La feuille de hiérarchie a une boucle infinie. Stoppe le chargement récursif. Fichier: " + +#: eeschema/eeload.cpp:218 +msgid "No FileName in SubSheet" +msgstr "Pas de Nom de Fichier dans la sous-feuille" + #: eeschema/component_class.cpp:54 #: eeschema/affiche.cpp:37 msgid "Ref" @@ -7200,6 +7158,21 @@ msgstr "Champs" msgid "Show Text" msgstr "Texte visible" +#: eeschema/edit_component_in_lib.cpp:508 +#: eeschema/edit_component_in_schematic.cpp:201 +msgid "Field Name:" +msgstr "Nom Champ" + +#: eeschema/edit_component_in_lib.cpp:518 +#: eeschema/edit_component_in_schematic.cpp:211 +msgid "Field Text:" +msgstr "Texte du Champ:" + +#: eeschema/edit_component_in_lib.cpp:524 +#: eeschema/edit_component_in_schematic.cpp:219 +msgid "Pos" +msgstr "Pos" + #: eeschema/edit_component_in_lib.cpp:529 msgid "Hor Justify" msgstr "Justifié horiz" @@ -7212,6 +7185,11 @@ msgstr "Justifi msgid "Chip Name" msgstr "Nom en librairie" +#: eeschema/edit_component_in_lib.cpp:554 +#: eeschema/edit_component_in_schematic.cpp:195 +msgid "Field to edit" +msgstr "Champ à éditer" + #: eeschema/edit_component_in_lib.cpp:890 msgid "Ok to Delete Alias LIST" msgstr "Ok pour effacer la LISTE des Alias" @@ -7557,10 +7535,6 @@ msgstr "Fond Plein" msgid "Fill:" msgstr "Remplissage:" -#: eeschema/libfield.cpp:221 -msgid "No new text: no change" -msgstr "Pas de nouveau texte: pas de changements" - #: eeschema/selpart.cpp:39 #: eeschema/find.cpp:657 msgid "No libraries are loaded" @@ -7782,27 +7756,6 @@ msgstr "Tout" msgid "default" msgstr "Défaut" -#: eeschema/eeload.cpp:46 -msgid "Clear Schematic Hierarchy (modified!)?" -msgstr "Effacer la hiérarchie schématique (modifiée!)?" - -#: eeschema/eeload.cpp:107 -msgid "" -"Ready\n" -"Working dir: \n" -msgstr "" -"Pret\n" -"Répertoire de travail: \n" - -#: eeschema/eeload.cpp:153 -#, c-format -msgid "File %s not found (new project ?)" -msgstr " fichier %s non trouvé (nouveau projet ?)" - -#: eeschema/eeload.cpp:203 -msgid "No FileName in SubSheet" -msgstr "Pas de Nom de Fichier dans la sous-feuille" - #: eeschema/delsheet.cpp:42 #, c-format msgid "Sheet %s (file %s) modified. Save it?" @@ -7925,6 +7878,138 @@ msgstr "Emetteur ouv." msgid "Electrical Type:" msgstr "Type électrique:" +#: eeschema/libedit_onrightclick.cpp:83 +msgid "Move Arc " +msgstr "Déplacer arc" + +#: eeschema/libedit_onrightclick.cpp:87 +msgid "Arc Options" +msgstr "Options" + +#: eeschema/libedit_onrightclick.cpp:90 +msgid "Delete Arc " +msgstr "Effacer Arc" + +#: eeschema/libedit_onrightclick.cpp:98 +msgid "Move Circle " +msgstr "Déplacer Cercle" + +#: eeschema/libedit_onrightclick.cpp:102 +msgid "Circle Options" +msgstr "Options" + +#: eeschema/libedit_onrightclick.cpp:105 +msgid "Delete Circle " +msgstr "Supprimer Cercle" + +#: eeschema/libedit_onrightclick.cpp:113 +msgid "Move Rect " +msgstr "Déplacer Rect" + +#: eeschema/libedit_onrightclick.cpp:117 +msgid "Rect Options" +msgstr "Options" + +#: eeschema/libedit_onrightclick.cpp:120 +msgid "Delete Rect " +msgstr "Supprimer Rect" + +#: eeschema/libedit_onrightclick.cpp:128 +msgid "Move Text " +msgstr "Déplacer Texte" + +#: eeschema/libedit_onrightclick.cpp:132 +msgid "Text Editor" +msgstr "Editeur de Texte" + +#: eeschema/libedit_onrightclick.cpp:134 +msgid "Rotate Text" +msgstr "Rot. Texte" + +#: eeschema/libedit_onrightclick.cpp:137 +msgid "Delete Text " +msgstr "Supprimer Texte" + +#: eeschema/libedit_onrightclick.cpp:145 +msgid "Move Line " +msgstr "Déplacer Ligne" + +#: eeschema/libedit_onrightclick.cpp:151 +msgid "Line End" +msgstr "Fin ligne" + +#: eeschema/libedit_onrightclick.cpp:154 +msgid "Line Options" +msgstr "Options" + +#: eeschema/libedit_onrightclick.cpp:157 +msgid "Delete Line " +msgstr "Efface rLigne" + +#: eeschema/libedit_onrightclick.cpp:164 +msgid "Delete Segment " +msgstr "Supprimer Segment" + +#: eeschema/libedit_onrightclick.cpp:174 +msgid "Move Feild " +msgstr "Déplace Champ" + +#: eeschema/libedit_onrightclick.cpp:178 +msgid "Field Rotate" +msgstr "Rotation Champ" + +#: eeschema/libedit_onrightclick.cpp:180 +msgid "Field Edit" +msgstr "Edition du champ" + +#: eeschema/libedit_onrightclick.cpp:205 +msgid "Move Pin" +msgstr "Déplace pin" + +#: eeschema/libedit_onrightclick.cpp:208 +msgid "Edit Pin " +msgstr "Editer Pin" + +#: eeschema/libedit_onrightclick.cpp:213 +msgid "Delete Pin " +msgstr "Supprimer Pin" + +#: eeschema/libedit_onrightclick.cpp:218 +msgid "Global" +msgstr "Global" + +#: eeschema/libedit_onrightclick.cpp:220 +msgid "Pin Size to selected pins" +msgstr "Change taille pins sélectionnées" + +#: eeschema/libedit_onrightclick.cpp:220 +msgid "Pin Size to others" +msgstr "Change taille autres pins" + +#: eeschema/libedit_onrightclick.cpp:223 +msgid "Pin Name Size to selected pin" +msgstr "Change taille Nom pin sélectionnées" + +#: eeschema/libedit_onrightclick.cpp:223 +msgid "Pin Name Size to others" +msgstr "Change taille Nom pin autres pins" + +#: eeschema/libedit_onrightclick.cpp:226 +msgid "Pin Num Size to selected pin" +msgstr "Change taille Num pins sélectionnées" + +#: eeschema/libedit_onrightclick.cpp:226 +msgid "Pin Num Size to others" +msgstr "Change taille Num pin autres pins" + +#: eeschema/libedit_onrightclick.cpp:249 +msgid "Select items" +msgstr "Sélection des éléments" + +#: eeschema/libedit_onrightclick.cpp:252 +msgid "Mirror Block (ctrl + drag mouse)" +msgstr "Bloc Miroir (ctrl + drag mouse)" + #: eeschema/eelibs_read_libraryfiles.cpp:115 msgid "Start loading schematic libs" msgstr "Demarre chargement des librairies schématiques" @@ -7950,6 +8035,39 @@ msgstr "Librairie <" msgid "> header read error" msgstr "> erreur lecture entête" +#: eeschema/edit_component_in_schematic.cpp:326 +msgid "No Component Name!" +msgstr "Pas de nom de composant!" + +#: eeschema/edit_component_in_schematic.cpp:332 +#, c-format +msgid "Component [%s] not found!" +msgstr "Composant [%s] non trouvé!" + +#: eeschema/edit_component_in_schematic.cpp:449 +msgid "No Field to move" +msgstr "Pas de champ a déplacer" + +#: eeschema/edit_component_in_schematic.cpp:512 +msgid "No Field To Edit" +msgstr "Pas de champ a éditer" + +#: eeschema/edit_component_in_schematic.cpp:526 +msgid "" +"Part is a POWER, value cannot be modified!\n" +"You must create a new power" +msgstr "" +"Composant type ALIMENTATION!\n" +"valeur non modifiable, Vous devez créer un nouveau composant alimentation " + +#: eeschema/edit_component_in_schematic.cpp:569 +msgid "Reference needed !, No change" +msgstr "Référence NECESSAIRE: changement refusé" + +#: eeschema/edit_component_in_schematic.cpp:573 +msgid "Value needed !, No change" +msgstr "Valeur NECESSAIRE: changement refusé" + #: cvpcb/dialog_display_options.cpp:147 #: cvpcb/dialog_display_options.cpp:155 msgid "&Line" @@ -7985,18 +8103,18 @@ msgstr "Afficher Numero de Pad" msgid "Display pad number" msgstr "Afficher numéro des pastilles" -#: cvpcb/readschematicnetlist.cpp:71 +#: cvpcb/readschematicnetlist.cpp:75 #: cvpcb/viewlogi.cpp:72 #: cvpcb/rdpcad.cpp:56 #, c-format msgid "Unknown file format <%s>" msgstr " Format fichier inconnu <%s>" -#: cvpcb/readschematicnetlist.cpp:76 +#: cvpcb/readschematicnetlist.cpp:80 msgid "Netlist Format: EESchema" msgstr " Formats NetListe: EESchema" -#: cvpcb/readschematicnetlist.cpp:126 +#: cvpcb/readschematicnetlist.cpp:143 #, c-format msgid "Netlist error: %s" msgstr "Erreur Netliste: %s" @@ -8164,17 +8282,17 @@ msgstr "Impossible de cr msgid "Load Net List" msgstr "Lire Netliste" -#: cvpcb/listboxes.cpp:328 +#: cvpcb/listboxes.cpp:335 #, c-format msgid "Footprints: %d" msgstr "Modules: %d" -#: cvpcb/listboxes.cpp:453 +#: cvpcb/listboxes.cpp:460 #, c-format msgid "Footprints (All): %d" msgstr "Modules (Tous): %d" -#: cvpcb/listboxes.cpp:455 +#: cvpcb/listboxes.cpp:462 #, c-format msgid "Footprints (filtered): %d" msgstr "Modules filtés): %d" @@ -8322,7 +8440,7 @@ 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:626 +#: common/gestfich.cpp:627 msgid "Prefered Editor:" msgstr "Editeur préféré:" @@ -8545,140 +8663,6 @@ msgstr "" msgid "Save project file" msgstr "Sauver fichiers &Projet" -#: kicad/treeprj_frame.cpp:76 -msgid "&Run" -msgstr "Exécute&r" - -#: kicad/treeprj_frame.cpp:77 -msgid "Run the Python Script" -msgstr "Exécuter le Script Python" - -#: kicad/treeprj_frame.cpp:84 -#: kicad/treeprj_frame.cpp:138 -msgid "&Edit in a text editor" -msgstr "Editer avec un éditeur de Texte" - -#: kicad/treeprj_frame.cpp:85 -msgid "&Open the file in a Text Editor" -msgstr "&Ouvrir le fichier avec un Editeur de texte" - -#: kicad/treeprj_frame.cpp:99 -msgid "New D&irectory" -msgstr "&Nouveau Répertoire" - -#: kicad/treeprj_frame.cpp:100 -msgid "Create a New Directory" -msgstr "Créer un nouveau Répertoire" - -#: kicad/treeprj_frame.cpp:106 -msgid "New P&ython Script" -msgstr "Nouveau Script P&ython" - -#: kicad/treeprj_frame.cpp:107 -msgid "Create a New Python Script" -msgstr "Créer un nouveau script Python" - -#: kicad/treeprj_frame.cpp:113 -msgid "New &Text File" -msgstr "Nouveau Fichier &Texte" - -#: kicad/treeprj_frame.cpp:114 -msgid "Create a New Txt File" -msgstr "Créer un nouveau Fichier texte" - -#: kicad/treeprj_frame.cpp:119 -msgid "New &File" -msgstr "Nouveau &Fichier" - -#: kicad/treeprj_frame.cpp:119 -msgid "Create a New File" -msgstr "Créer un nouveau Fichier" - -#: kicad/treeprj_frame.cpp:130 -msgid "&Rename File" -msgstr "&Renommer Fichier" - -#: kicad/treeprj_frame.cpp:130 -msgid "&Rename Directory" -msgstr "&Renommer Répertoire" - -#: kicad/treeprj_frame.cpp:131 -msgid "Rename the File" -msgstr "Renommer le Fichier" - -#: kicad/treeprj_frame.cpp:131 -msgid "&Rename the Directory" -msgstr "&Renommer le Répertoire" - -#: kicad/treeprj_frame.cpp:139 -msgid "Open the file in a Text Editor" -msgstr "Ouvrir le fichier avec un Editeur de texte" - -#: kicad/treeprj_frame.cpp:145 -msgid "&Delete File" -msgstr "&Supprimer Fichier" - -#: kicad/treeprj_frame.cpp:145 -msgid "&Delete Directory" -msgstr "&Supprimer le Répertoire" - -#: kicad/treeprj_frame.cpp:146 -msgid "Delete the File" -msgstr "Supprimer le fichier" - -#: kicad/treeprj_frame.cpp:147 -msgid "&Delete the Directory and its content" -msgstr "Effacer le Répertoire et son contenu" - -#: kicad/treeprj_frame.cpp:412 -msgid "Create New File:" -msgstr "Créer un nouveau Fichier" - -#: kicad/treeprj_frame.cpp:412 -msgid "Create New Directory" -msgstr "Créer un nouveau Répertoire" - -#: kicad/treeprj_frame.cpp:414 -msgid "noname" -msgstr "noname" - -#: kicad/treeprj_frame.cpp:842 -msgid "Change File Name: " -msgstr "ChangerNom Fichier: " - -#: kicad/treeprj_datas.cpp:211 -msgid "Unable to move file ... " -msgstr "Impossible de déplacer le fichier " - -#: kicad/treeprj_datas.cpp:212 -#: kicad/treeprj_datas.cpp:290 -msgid "Permission error ?" -msgstr "Permission error ?" - -#: kicad/treeprj_datas.cpp:275 -msgid "" -"Changing file extension will change file type.\n" -" Do you want to continue ?" -msgstr "" -"Changer l'extension changera le type de fichier.\n" -"Voulez vous continuer ?" - -#: kicad/treeprj_datas.cpp:276 -msgid "Rename File" -msgstr "Renommer Fichier" - -#: kicad/treeprj_datas.cpp:289 -msgid "Unable to rename file ... " -msgstr "Impossible de renommer le fichier... " - -#: kicad/treeprj_datas.cpp:309 -msgid "Do you really want to delete " -msgstr "Voulez vous réellemant effacer" - -#: kicad/treeprj_datas.cpp:310 -msgid "Delete File" -msgstr "Supprimer Fichier" - #: kicad/commandframe.cpp:58 msgid "eeschema (Schematic editor)" msgstr "EeSchema (Editeur de Schématique)" @@ -8699,6 +8683,144 @@ msgstr "GerbView (Visualisateur Gerber)" msgid "Run Python Script" msgstr "Exécuter le Script Python" +#: kicad/treeprj_frame.cpp:78 +msgid "&Run" +msgstr "Exécute&r" + +#: kicad/treeprj_frame.cpp:79 +msgid "Run the Python Script" +msgstr "Exécuter le Script Python" + +#: kicad/treeprj_frame.cpp:86 +#: kicad/treeprj_frame.cpp:140 +msgid "&Edit in a text editor" +msgstr "Editer avec un éditeur de Texte" + +#: kicad/treeprj_frame.cpp:87 +msgid "&Open the file in a Text Editor" +msgstr "&Ouvrir le fichier avec un Editeur de texte" + +#: kicad/treeprj_frame.cpp:101 +msgid "New D&irectory" +msgstr "&Nouveau Répertoire" + +#: kicad/treeprj_frame.cpp:102 +msgid "Create a New Directory" +msgstr "Créer un nouveau Répertoire" + +#: kicad/treeprj_frame.cpp:108 +msgid "New P&ython Script" +msgstr "Nouveau Script P&ython" + +#: kicad/treeprj_frame.cpp:109 +msgid "Create a New Python Script" +msgstr "Créer un nouveau script Python" + +#: kicad/treeprj_frame.cpp:115 +msgid "New &Text File" +msgstr "Nouveau Fichier &Texte" + +#: kicad/treeprj_frame.cpp:116 +msgid "Create a New Txt File" +msgstr "Créer un nouveau Fichier texte" + +#: kicad/treeprj_frame.cpp:121 +msgid "New &File" +msgstr "Nouveau &Fichier" + +#: kicad/treeprj_frame.cpp:121 +msgid "Create a New File" +msgstr "Créer un nouveau Fichier" + +#: kicad/treeprj_frame.cpp:132 +msgid "&Rename File" +msgstr "&Renommer Fichier" + +#: kicad/treeprj_frame.cpp:132 +msgid "&Rename Directory" +msgstr "&Renommer Répertoire" + +#: kicad/treeprj_frame.cpp:133 +msgid "Rename the File" +msgstr "Renommer le Fichier" + +#: kicad/treeprj_frame.cpp:133 +msgid "&Rename the Directory" +msgstr "&Renommer le Répertoire" + +#: kicad/treeprj_frame.cpp:141 +msgid "Open the file in a Text Editor" +msgstr "Ouvrir le fichier avec un Editeur de texte" + +#: kicad/treeprj_frame.cpp:147 +msgid "&Delete File" +msgstr "&Supprimer Fichier" + +#: kicad/treeprj_frame.cpp:147 +msgid "&Delete Directory" +msgstr "&Supprimer le Répertoire" + +#: kicad/treeprj_frame.cpp:148 +msgid "Delete the File" +msgstr "Supprimer le fichier" + +#: kicad/treeprj_frame.cpp:149 +msgid "&Delete the Directory and its content" +msgstr "Effacer le Répertoire et son contenu" + +#: kicad/treeprj_frame.cpp:414 +msgid "Create New File:" +msgstr "Créer un nouveau Fichier" + +#: kicad/treeprj_frame.cpp:414 +msgid "Create New Directory" +msgstr "Créer un nouveau Répertoire" + +#: kicad/treeprj_frame.cpp:416 +msgid "noname" +msgstr "noname" + +#: kicad/treeprj_frame.cpp:840 +msgid "Change File Name: " +msgstr "ChangerNom Fichier: " + +#: kicad/treeprj_datas.cpp:219 +msgid "Unable to move file ... " +msgstr "Impossible de déplacer le fichier " + +#: kicad/treeprj_datas.cpp:220 +#: kicad/treeprj_datas.cpp:301 +msgid "Permission error ?" +msgstr "Permission error ?" + +#: kicad/treeprj_datas.cpp:286 +msgid "" +"Changing file extension will change file type.\n" +" Do you want to continue ?" +msgstr "" +"Changer l'extension changera le type de fichier.\n" +"Voulez vous continuer ?" + +#: kicad/treeprj_datas.cpp:287 +msgid "Rename File" +msgstr "Renommer Fichier" + +#: kicad/treeprj_datas.cpp:300 +msgid "Unable to rename file ... " +msgstr "Impossible de renommer le fichier... " + +#: kicad/treeprj_datas.cpp:320 +msgid "Do you really want to delete " +msgstr "Voulez vous réellemant effacer" + +#: kicad/treeprj_datas.cpp:321 +msgid "Delete File" +msgstr "Supprimer Fichier" + +#: kicad/treeprj_datas.cpp:394 +msgid "no kicad files found in this directory" +msgstr "Pas de fichier Kicad tropuvés dans ce répertoire" + #: gerbview/gerbview_config.cpp:127 #: gerbview/process_config.cpp:117 msgid "Save config file" @@ -9088,87 +9210,6 @@ msgstr "X" msgid "Y" msgstr "Y" -#: common/hotkeys_basic.cpp:301 -msgid "" -"Current hotkey list:\n" -"\n" -msgstr "" -"Liste des Hotkeys courantes:\n" -"\n" - -#: common/hotkeys_basic.cpp:309 -msgid "key " -msgstr "touche: " - -#: common/hotkeys_basic.cpp:366 -#: common/hotkeys_basic.cpp:484 -msgid "Hotkey configuration file:" -msgstr "Fichier configuration des Hotkeys:" - -#: common/hotkeys_basic.cpp:398 -msgid "Allowed keys:\n" -msgstr "Touches autorisées:\n" - -#: common/hotkeys_basic.cpp:503 -msgid "Unable to read " -msgstr "Impossible de lire " - -#: common/hotkeys_basic.cpp:611 -msgid "Show Current Hotkey List" -msgstr "Afficher Liste Actuelle des Hotkeys" - -#: common/hotkeys_basic.cpp:612 -msgid "Show the current hotkey config" -msgstr "Affiche la configuration actuelle des Hotkeys" - -#: common/hotkeys_basic.cpp:618 -msgid "Create Hotkey config file" -msgstr "Créer le fichiers configuration des Hotkeys" - -#: common/hotkeys_basic.cpp:619 -msgid "Create or Recreate the hotkey config file from current hotkey list" -msgstr "Créer ou recréer les fichiers configuration des Hotkeys a partir de la liste courante" - -#: common/hotkeys_basic.cpp:625 -msgid "Reread Hotkey config file" -msgstr "Relire les fichiers configuration des Hotkeys" - -#: common/hotkeys_basic.cpp:626 -msgid "Reread the hotkey config file" -msgstr "Relire les fichiers configuration des Hotkeys" - -#: common/hotkeys_basic.cpp:630 -msgid "Edit Hotkey config file" -msgstr "Editer le fichiers configuration des Hotkeys" - -#: common/hotkeys_basic.cpp:631 -msgid "Run the text editor and edit the hotkey config file" -msgstr "Lancer l'éditeur de texte et éditer le fichier de config des hotkeys" - -#: common/hotkeys_basic.cpp:637 -msgid "home directory" -msgstr "Répertoire d'accueil (home)" - -#: common/hotkeys_basic.cpp:638 -msgid "Use home directory to load or store Hotkey config files" -msgstr "Utiliser le répertoire d'accueil pour charger ou sauver les fichiers de config des Hotkeys" - -#: common/hotkeys_basic.cpp:643 -msgid "kicad/template directory" -msgstr "kicad/template directory" - -#: common/hotkeys_basic.cpp:644 -msgid "Use kicad/template directory to load or store Hotkey config files" -msgstr "Utiliser répertoire kicad/template pour charger ou sauver les fichiers de config des Hotkeys" - -#: common/hotkeys_basic.cpp:650 -msgid "Hotkey config location" -msgstr "Emplacement des Fichiers des Hotkeys" - -#: common/hotkeys_basic.cpp:652 -msgid "Hotkey config file location selection (home directory or kicad tree)" -msgstr "Selection emplacement des fichiers de config. des hotkeys(\"home\" ou répertoire kicad)" - #: common/common.cpp:48 msgid " (\"):" msgstr " (\"):" @@ -9289,7 +9330,7 @@ msgstr "Contour Pcb" msgid "--- " msgstr "--- " -#: common/gestfich.cpp:620 +#: common/gestfich.cpp:621 msgid "No default editor found, you must choose it" msgstr "Pas d'éditeur par défaut trouvé, vous devez en choisir un" @@ -9416,6 +9457,87 @@ msgstr "Bloc Miroir" msgid "Infos:" msgstr "Infos:" +#: common/hotkeys_basic.cpp:301 +msgid "" +"Current hotkey list:\n" +"\n" +msgstr "" +"Liste des Hotkeys courantes:\n" +"\n" + +#: common/hotkeys_basic.cpp:309 +msgid "key " +msgstr "touche: " + +#: common/hotkeys_basic.cpp:366 +#: common/hotkeys_basic.cpp:484 +msgid "Hotkey configuration file:" +msgstr "Fichier configuration des Hotkeys:" + +#: common/hotkeys_basic.cpp:398 +msgid "Allowed keys:\n" +msgstr "Touches autorisées:\n" + +#: common/hotkeys_basic.cpp:503 +msgid "Unable to read " +msgstr "Impossible de lire " + +#: common/hotkeys_basic.cpp:616 +msgid "Show Current Hotkey List" +msgstr "Afficher Liste Actuelle des Hotkeys" + +#: common/hotkeys_basic.cpp:617 +msgid "Show the current hotkey config" +msgstr "Affiche la configuration actuelle des Hotkeys" + +#: common/hotkeys_basic.cpp:623 +msgid "Create Hotkey config file" +msgstr "Créer le fichiers configuration des Hotkeys" + +#: common/hotkeys_basic.cpp:624 +msgid "Create or Recreate the hotkey config file from current hotkey list" +msgstr "Créer ou recréer les fichiers configuration des Hotkeys a partir de la liste courante" + +#: common/hotkeys_basic.cpp:630 +msgid "Reread Hotkey config file" +msgstr "Relire les fichiers configuration des Hotkeys" + +#: common/hotkeys_basic.cpp:631 +msgid "Reread the hotkey config file" +msgstr "Relire les fichiers configuration des Hotkeys" + +#: common/hotkeys_basic.cpp:635 +msgid "Edit Hotkey config file" +msgstr "Editer le fichiers configuration des Hotkeys" + +#: common/hotkeys_basic.cpp:636 +msgid "Run the text editor and edit the hotkey config file" +msgstr "Lancer l'éditeur de texte et éditer le fichier de config des hotkeys" + +#: common/hotkeys_basic.cpp:642 +msgid "home directory" +msgstr "Répertoire d'accueil (home)" + +#: common/hotkeys_basic.cpp:643 +msgid "Use home directory to load or store Hotkey config files" +msgstr "Utiliser le répertoire d'accueil pour charger ou sauver les fichiers de config des Hotkeys" + +#: common/hotkeys_basic.cpp:648 +msgid "kicad/template directory" +msgstr "kicad/template directory" + +#: common/hotkeys_basic.cpp:649 +msgid "Use kicad/template directory to load or store Hotkey config files" +msgstr "Utiliser répertoire kicad/template pour charger ou sauver les fichiers de config des Hotkeys" + +#: common/hotkeys_basic.cpp:655 +msgid "Hotkey config location" +msgstr "Emplacement des Fichiers des Hotkeys" + +#: common/hotkeys_basic.cpp:657 +msgid "Hotkey config file location selection (home directory or kicad tree)" +msgstr "Selection emplacement des fichiers de config. des hotkeys(\"home\" ou répertoire kicad)" + #: 3d-viewer/3d_canvas.cpp:318 #: share/zoom.cpp:360 msgid "Zoom +" @@ -9823,7 +9945,8 @@ msgstr "S msgid "grid user" msgstr "grille user" -#: pcbnew/zones.h:54 +#: pcbnew/zones.h:59 +#: pcbnew/dialog_zones_by_polygon.h:52 msgid "Fill Zones Options" msgstr "Options de remplissage de Zone" @@ -9856,6 +9979,49 @@ msgstr "Incapable de cr msgid "Segm count = %d, Lenght = " msgstr "Nbr segm = %d, Longueur = " +#: pcbnew/find.h:38 +msgid "Find" +msgstr "Chercher" + +#: pcbnew/dialog_pad_edit.h:62 +msgid "Pad properties" +msgstr "Propriétés des Pads" + +#: pcbnew/dialog_track_options.h:49 +msgid "Tracks and Vias Sizes" +msgstr "Dims pistes et vias" + +#: pcbnew/dialog_setup_libs.h:43 +#: eeschema/dialog_edit_label.h:44 +#: eeschema/dialog_eeschema_config.h:50 +msgid "Dialog" +msgstr "Dialog" + +#: pcbnew/dialog_netlist.h:52 +msgid "Netlist: " +msgstr "Netliste: " + +#: pcbnew/cleaningoptions_dialog.h:48 +msgid "Cleaning options" +msgstr "Options de nettoyage" + +#: pcbnew/dialog_general_options.h:44 +#: eeschema/dialog_options.h:55 +msgid "General Options" +msgstr "Options générales" + +#: pcbnew/dsn.h:595 +msgid "in file" +msgstr "dans le fichier" + +#: pcbnew/dsn.h:596 +msgid "on line" +msgstr "en ligne" + +#: pcbnew/dsn.h:597 +msgid "at offset" +msgstr "a l'offset" + #: pcbnew/set_color.h:38 msgid "Pcbnew Layer Colors:" msgstr "Pcbnew: Couleur desCouches" @@ -9908,37 +10074,6 @@ msgstr "Afficher Modules Cmp" msgid "Show Modules Cu" msgstr "Afficher Modules Cu" -#: pcbnew/find.h:38 -msgid "Find" -msgstr "Chercher" - -#: pcbnew/dialog_pad_edit.h:62 -msgid "Pad properties" -msgstr "Propriétés des Pads" - -#: pcbnew/dialog_track_options.h:49 -msgid "Tracks and Vias Sizes" -msgstr "Dims pistes et vias" - -#: pcbnew/dialog_setup_libs.h:43 -#: eeschema/dialog_edit_label.h:44 -#: eeschema/dialog_eeschema_config.h:50 -msgid "Dialog" -msgstr "Dialog" - -#: pcbnew/dialog_netlist.h:52 -msgid "Netlist: " -msgstr "Netliste: " - -#: pcbnew/cleaningoptions_dialog.h:48 -msgid "Cleaning options" -msgstr "Options de nettoyage" - -#: pcbnew/dialog_general_options.h:44 -#: eeschema/dialog_options.h:55 -msgid "General Options" -msgstr "Options générales" - #: pcbnew/drc_stuff.h:120 #, c-format msgid "ErrType(%d): %s

  • %s: %s
  • %s: %s
" diff --git a/libs.win b/libs.win index 47cd8dc048..db2da1d715 100644 --- a/libs.win +++ b/libs.win @@ -12,22 +12,38 @@ KICAD_BIN = /f/kicad/winexe # DLL use wxWin STATIC 0 0 1 # +# turn on/OFF debugging for all executables, only tested without KICAD_PYTHON +DEBUG = 0 + + #comment this for static wxWidgets link #WXUSINGDLL = 1 #Define the wxWidget path (if not found in environment variables): ifndef WXWIN +ifeq ($(DEBUG), 1) +WXWIN=f:/wxMSW-2.8.7-debug +else WXWIN=f:/wxMSW-2.8.7 endif +endif LIBVERSION = 2.8 # You must comment or uncomment this line to disable/enable python support #KICAD_PYTHON = 1 -FINAL = 1 -ALL_CPPFLAGS = `$(WXWIN)/wx-config --cppflags` +ifeq ($(DEBUG), 1) +CPPFLAGS = -Wall -g3 -ggdb3 -DDEBUG ${WXXFLAGS} -fno-strict-aliasing +ALL_LDFLAGS = -g3 -ggdb3 #-v +else +CPPFLAGS = -Wall -O2 ${WXXFLAGS} -fno-strict-aliasing +ALL_LDFLAGS = -s #-v +FINAL = 1 +endif + +ALL_CPPFLAGS = `$(WXWIN)/wx-config --cppflags` $(CPPFLAGS) EDACPPFLAGS = $(ALL_CPPFLAGS) $(ALL_CXXFLAGS) $(EXTRACPPFLAGS) EDALIBS = $(EXTRALIBS) diff --git a/pcbnew/CMakeLists.txt b/pcbnew/CMakeLists.txt index 67fc743b27..d712cddabd 100644 --- a/pcbnew/CMakeLists.txt +++ b/pcbnew/CMakeLists.txt @@ -73,7 +73,6 @@ SET(PCBNEW_SRCS edtxtmod.cpp export_gencad.cpp files.cpp - filling_zone_algorithm.cpp find.cpp gendrill.cpp gen_modules_placefile.cpp @@ -135,6 +134,7 @@ SET(PCBNEW_SRCS work.cpp xchgmod.cpp zones_by_polygon.cpp + zone_filling_algorithm.cpp # zones.cpp ) diff --git a/pcbnew/class_zone.cpp b/pcbnew/class_zone.cpp index bbbdce6ea7..e82ee1bf8f 100644 --- a/pcbnew/class_zone.cpp +++ b/pcbnew/class_zone.cpp @@ -19,8 +19,11 @@ ZONE_CONTAINER::ZONE_CONTAINER( BOARD* parent ) : , CPolyLine( NULL ) { - 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_PadOption = THERMAL_PAD; } diff --git a/pcbnew/class_zone.h b/pcbnew/class_zone.h index 9b9f71e032..d1682ea2a9 100644 --- a/pcbnew/class_zone.h +++ b/pcbnew/class_zone.h @@ -18,11 +18,19 @@ class ZONE_CONTAINER : public BOARD_ITEM, public CPolyLine { public: - wxString m_Netname; /* Net Name */ + enum m_PadInZone { // How pads are covered by copper in zone + PAD_NOT_IN_ZONE, // Pads are not covered + THERMAL_PAD, // Use thermal relief for pads + PAD_IN_ZONE // pads are covered by copper + }; + wxString m_Netname; // Net Name int m_CornerSelection; // For corner moving, corner index to drag, or -1 if no selection + int m_ZoneClearance; // clearance value + int m_GridFillValue; // Grid used for filling + m_PadInZone m_PadOption; // see m_PadInZone private: - int m_NetCode; // Net number for fast comparisons + int m_NetCode; // Net number for fast comparisons public: ZONE_CONTAINER(BOARD * parent); @@ -70,6 +78,19 @@ public: * @param refPos : A wxPoint to test */ int HitTestForEdge( const wxPoint& refPos ); + + /** Function Fill_Zone() + * Calculate the zone filling + * The zone outline is a frontier, and can be complex (with holes) + * The filling starts from starting points like pads, tracks. + * If exists the old filling is removed + * @param frame = reference to the main frame + * @param DC = current Device Context + * @param verbose = true to show error messages + * @return error level (0 = no error) + */ + int Fill_Zone( WinEDA_PcbFrame* frame, wxDC* DC, bool verbose = TRUE); + }; /*******************/ diff --git a/pcbnew/dialog_zones_by_polygon.cpp b/pcbnew/dialog_zones_by_polygon.cpp index 9130943403..41d2db44e5 100644 --- a/pcbnew/dialog_zones_by_polygon.cpp +++ b/pcbnew/dialog_zones_by_polygon.cpp @@ -267,14 +267,21 @@ void WinEDA_ZoneFrame::CreateControls() m_GridCtrl->SetSelection( selection ); - if( Zone_Exclude_Pads ) + switch( s_Zone_Pad_Options ) { - if( s_Zone_Create_Thermal_Relief ) - m_FillOpt->SetSelection( 1 ); - else + case ZONE_CONTAINER::PAD_NOT_IN_ZONE: // Pads are not covered m_FillOpt->SetSelection( 2 ); - } + break; + case ZONE_CONTAINER::THERMAL_PAD: // Use thermal relief for pads + m_FillOpt->SetSelection( 1 ); + break; + case ZONE_CONTAINER::PAD_IN_ZONE: // pads are covered by copper + m_FillOpt->SetSelection( 0 ); + break; + } + if ( m_Zone_Container ) + s_Zone_Hatching = m_Zone_Container->GetHatch(); switch( s_Zone_Hatching ) { case CPolyLine::NO_HATCH: @@ -296,7 +303,7 @@ void WinEDA_ZoneFrame::CreateControls() for( int ii = 0; ii < g_DesignSettings.m_CopperLayerCount; ii++ ) { wxString msg; - int layer_number; + int layer_number = COPPER_LAYER_N; if( layer_cnt == 0 || ii < layer_cnt - 1 ) layer_number = ii; else if( ii == layer_cnt - 1 ) @@ -396,19 +403,16 @@ bool WinEDA_ZoneFrame::AcceptOptions(bool aPromptForErrors) { switch( m_FillOpt->GetSelection() ) { - case 0: - Zone_Exclude_Pads = FALSE; - s_Zone_Create_Thermal_Relief = FALSE; + case 2: + s_Zone_Pad_Options = ZONE_CONTAINER::PAD_NOT_IN_ZONE; // Pads are not covered break; case 1: - Zone_Exclude_Pads = TRUE; - s_Zone_Create_Thermal_Relief = TRUE; + s_Zone_Pad_Options = ZONE_CONTAINER::THERMAL_PAD; // Use thermal relief for pads break; - case 2: - Zone_Exclude_Pads = TRUE; - s_Zone_Create_Thermal_Relief = FALSE; + case 0: + s_Zone_Pad_Options = ZONE_CONTAINER::PAD_IN_ZONE; // pads are covered by copper break; } diff --git a/pcbnew/edit.cpp b/pcbnew/edit.cpp index 76fd0086d0..7e0bdb291a 100644 --- a/pcbnew/edit.cpp +++ b/pcbnew/edit.cpp @@ -66,7 +66,7 @@ void WinEDA_PcbFrame::Process_Special_Functions( wxCommandEvent& event ) case ID_POPUP_PCB_GLOBAL_IMPORT_PAD_SETTINGS: case ID_POPUP_PCB_STOP_CURRENT_EDGE_ZONE: case ID_POPUP_PCB_DELETE_EDGE_ZONE: - case ID_POPUP_PCB_DELETE_ZONE_LIMIT: + case ID_POPUP_PCB_FILL_ALL_ZONES: case ID_POPUP_PCB_PLACE_ZONE_CORNER: case ID_POPUP_PCB_EDIT_ZONE_PARAMS: case ID_POPUP_PCB_DELETE_ZONE: @@ -450,19 +450,31 @@ void WinEDA_PcbFrame::Process_Special_Functions( wxCommandEvent& event ) break; case ID_POPUP_PCB_DELETE_ZONE_CONTAINER: + { DrawPanel->MouseToCursorSchema(); - ((ZONE_CONTAINER*)GetCurItem())->Draw(DrawPanel,&dc, wxPoint(0,0), GR_XOR); - m_Pcb->Delete( GetCurItem() ); + ZONE_CONTAINER * zone_cont = (ZONE_CONTAINER*)GetCurItem(); + zone_cont->Draw(DrawPanel,&dc, wxPoint(0,0), GR_XOR); + Delete_Zone( &dc, NULL, zone_cont->m_TimeStamp ); + m_Pcb->Delete( zone_cont ); SetCurItem( NULL ); break; + } case ID_POPUP_PCB_DELETE_ZONE_CORNER: { DrawPanel->MouseToCursorSchema(); ZONE_CONTAINER * zone_cont = (ZONE_CONTAINER*)GetCurItem(); zone_cont->Draw(DrawPanel,&dc, wxPoint(0,0), GR_XOR); - zone_cont->DeleteCorner(zone_cont->m_CornerSelection); - zone_cont->Draw(DrawPanel,&dc, wxPoint(0,0), GR_XOR); + if ( zone_cont->GetNumCorners() <= 3 ) + { + Delete_Zone( &dc, NULL, zone_cont->m_TimeStamp ); + m_Pcb->Delete( zone_cont ); + } + else + { + zone_cont->DeleteCorner(zone_cont->m_CornerSelection); + zone_cont->Draw(DrawPanel,&dc, wxPoint(0,0), GR_XOR); + } SetCurItem( NULL ); break; } @@ -500,9 +512,9 @@ void WinEDA_PcbFrame::Process_Special_Functions( wxCommandEvent& event ) break; } - case ID_POPUP_PCB_DELETE_ZONE_LIMIT: + case ID_POPUP_PCB_FILL_ALL_ZONES: DrawPanel->MouseToCursorSchema(); - DelLimitesZone( &dc, TRUE ); + Fill_All_Zones( &dc ); break; case ID_POPUP_PCB_FILL_ZONE: diff --git a/pcbnew/makefile.include b/pcbnew/makefile.include index b036c45396..65994031bf 100644 --- a/pcbnew/makefile.include +++ b/pcbnew/makefile.include @@ -12,7 +12,7 @@ ZONE_FILES = zones_by_polygon.o OBJECTS= $(TARGET).o classpcb.o\ $(ZONE_FILES)\ - filling_zone_algorithm.o\ + zone_filling_algorithm.o\ lay2plot.o\ modedit_undo_redo.o\ block_module_editor.o\ diff --git a/pcbnew/onrightclick.cpp b/pcbnew/onrightclick.cpp index d87ff81001..2c75b02cad 100644 --- a/pcbnew/onrightclick.cpp +++ b/pcbnew/onrightclick.cpp @@ -302,6 +302,9 @@ bool WinEDA_PcbFrame::OnRightClick( const wxPoint& aMousePos, wxMenu* aPopMenu ) _( "Create Corner" ), move_xpm ); } aPopMenu->AppendSeparator(); + ADD_MENUITEM( aPopMenu, ID_POPUP_PCB_FILL_ZONE, + _( "Fill zone" ), fill_zone_xpm ); + ADD_MENUITEM( aPopMenu, ID_POPUP_PCB_EDIT_ZONE_PARAMS, _( "Edit Zone Params" ), edit_xpm ); ADD_MENUITEM( aPopMenu, ID_POPUP_PCB_DELETE_ZONE_CONTAINER, @@ -387,17 +390,13 @@ bool WinEDA_PcbFrame::OnRightClick( const wxPoint& aMousePos, wxMenu* aPopMenu ) { case ID_PCB_ZONES_BUTT: { - bool add_separator = FALSE; - ADD_MENUITEM( aPopMenu, ID_POPUP_PCB_FILL_ZONE, - _( "Fill zone" ), fill_zone_xpm ); - - if( m_Pcb->m_CurrentLimitZone ) - { - add_separator = TRUE; - aPopMenu->Append( ID_POPUP_PCB_DELETE_ZONE_LIMIT, _( "Delete Zone Limit" ) ); - } - if( add_separator ) + if ( m_Pcb->m_ZoneDescriptorList.size() > 0 ) + { + ADD_MENUITEM( aPopMenu, ID_POPUP_PCB_FILL_ALL_ZONES, + _( "Fill or Refill All Zones" ), fill_zone_xpm ); aPopMenu->AppendSeparator(); + } + ADD_MENUITEM( aPopMenu, ID_POPUP_PCB_SELECT_LAYER, _( "Select Working Layer" ), Select_W_Layer_xpm ); aPopMenu->AppendSeparator(); diff --git a/pcbnew/filling_zone_algorithm.cpp b/pcbnew/zone_filling_algorithm.cpp similarity index 71% rename from pcbnew/filling_zone_algorithm.cpp rename to pcbnew/zone_filling_algorithm.cpp index c77538c225..85e28a56e5 100644 --- a/pcbnew/filling_zone_algorithm.cpp +++ b/pcbnew/zone_filling_algorithm.cpp @@ -1,6 +1,6 @@ /* filling_zone_algorithm: -Algos used to fill a zone defined by a polygon and a filling starting point -*/ + * Algos used to fill a zone defined by a polygon and a filling starting point + */ #include "fctsys.h" #include "gr_basic.h" @@ -14,46 +14,47 @@ Algos used to fill a zone defined by a polygon and a filling starting point #include "protos.h" /* Local functions */ -static void Genere_Segments_Zone( WinEDA_PcbFrame* frame, wxDC* DC, int net_code ); +static void Genere_Segments_Zone( WinEDA_PcbFrame* frame, wxDC* DC, int net_code, int layer ); /* Local variables */ -static bool Zone_Debug = FALSE; +static bool Zone_Debug = FALSE; static unsigned long s_TimeStamp; /* Time stamp common to all segments relative to the new created zone */ -/****************************************************************************************/ -void Build_Zone( WinEDA_PcbFrame* frame, wxDC* DC, int net_code, - bool Zone_Exclude_Pads, bool Zone_Create_Thermal_Relief ) -/****************************************************************************************/ +/*****************************************************************************/ +int ZONE_CONTAINER::Fill_Zone( WinEDA_PcbFrame* frame, wxDC* DC, bool verbose ) +/*****************************************************************************/ -/** Function Build_Zone() - * Init the zone filling - * If a zone edge is found, it is used. - * Otherwise the whole board is filled by the zone - * The zone edge is a frontier, and can be complex. So non filled zones can be achieved - * The zone is put on the active layer - * If a net is hightlighted, the zone will be attached to this net - * The filling start from a starting point. - * If a net is selected, all tracks attached to this net are also starting points +/** Function Fill_Zone() + * Calculate the zone filling + * The zone outline is a frontier, and can be complex (with holes) + * The filling starts from starting points like pads, tracks. + * @param frame = reference to the main frame + * @param DC = current Device Context + * @param verbose = true to show error messages + * @return error level (0 = no error) */ { - int ii, jj; - EDGE_ZONE* PtLim; - int lp_tmp, lay_tmp_TOP, lay_tmp_BOTTOM; - int save_isol = g_DesignSettings.m_TrackClearence; - wxPoint ZoneStartFill; - wxString msg; - PCB_SCREEN * Screen = frame->GetScreen(); - BOARD * Pcb = frame->m_Pcb; - + int ii, jj; + int error_level = 0; + int lp_tmp, lay_tmp_TOP, lay_tmp_BOTTOM; + int save_isol = g_DesignSettings.m_TrackClearence; + wxPoint ZoneStartFill; + wxString msg; + PCB_SCREEN* Screen = frame->GetScreen(); + BOARD* Pcb = frame->m_Pcb; g_DesignSettings.m_TrackClearence = g_DesignSettings.m_ZoneClearence; + g_HightLigth_NetCode = m_NetCode; +// Screen->m_Active_Layer = m_Layer; + s_TimeStamp = m_TimeStamp; - s_TimeStamp = time( NULL ); + // Delete the old filling, if any : + frame->Delete_Zone( DC, NULL, m_TimeStamp ); // calculate the fixed step of the routing matrix as 5 mils or more - E_scale = g_GridRoutingSize / 50; - + E_scale = g_GridRoutingSize / 50; + if( g_GridRoutingSize < 1 ) g_GridRoutingSize = 1; @@ -61,83 +62,103 @@ void Build_Zone( WinEDA_PcbFrame* frame, wxDC* DC, int net_code, ComputeMatriceSize( frame, g_GridRoutingSize ); // Determine the cell pointed to by the mouse - ZoneStartFill.x = ( Screen->m_Curseur.x - Pcb->m_BoundaryBox.m_Pos.x + - (g_GridRoutingSize / 2) ) / g_GridRoutingSize; - - ZoneStartFill.y = ( Screen->m_Curseur.y - Pcb->m_BoundaryBox.m_Pos.y + - (g_GridRoutingSize / 2) ) / g_GridRoutingSize; - - if( ZoneStartFill.x < 0 ) - ZoneStartFill.x = 0; - - if( ZoneStartFill.x >= Ncols ) - ZoneStartFill.x = Ncols - 1; - - if( ZoneStartFill.y < 0 ) - ZoneStartFill.y = 0; - - if( ZoneStartFill.y >= Nrows ) - ZoneStartFill.y = Nrows - 1; // create the routing matrix in autorout.h's eda_global BOARDHEAD Board Nb_Sides = ONE_SIDE; if( Board.InitBoard() < 0 ) { - DisplayError( frame, wxT( "Mo memory for creating zones" ) ); - return; + if( verbose ) + DisplayError( frame, wxT( "Mo memory for creating zones" ) ); + error_level = 1; + return error_level; } msg.Printf( wxT( "%d" ), Ncols ); Affiche_1_Parametre( frame, 1, wxT( "Cols" ), msg, GREEN ); - + msg.Printf( wxT( "%d" ), Nrows ); Affiche_1_Parametre( frame, 7, wxT( "Lines" ), msg, GREEN ); - + msg.Printf( wxT( "%d" ), Board.m_MemSize / 1024 ); Affiche_1_Parametre( frame, 14, wxT( "Mem(Ko)" ), msg, CYAN ); lay_tmp_BOTTOM = Route_Layer_BOTTOM; lay_tmp_TOP = Route_Layer_TOP; - Route_Layer_BOTTOM = Route_Layer_TOP = Screen->m_Active_Layer; + Route_Layer_BOTTOM = Route_Layer_TOP = m_Layer; lp_tmp = g_DesignSettings.m_CurrentTrackWidth; g_DesignSettings.m_CurrentTrackWidth = g_GridRoutingSize; - /* Create the starting point for thz zone: + /* Create the starting point for the zone: * The starting point and all the tracks are suitable "starting points" */ TRACK* pt_segm = Pcb->m_Track; for( ; pt_segm != NULL; pt_segm = pt_segm->Next() ) { if( g_HightLigth_NetCode != pt_segm->GetNet() ) continue; - - if( pt_segm->GetLayer() != Screen->m_Active_Layer ) + + if( pt_segm->GetLayer() != m_Layer ) continue; - + if( pt_segm->Type() != TYPETRACK ) continue; - + TraceSegmentPcb( Pcb, pt_segm, CELL_is_FRIEND, 0, WRITE_CELL ); } // trace the pcb edges (pcb contour) into the routing matrix Route_Layer_BOTTOM = Route_Layer_TOP = EDGE_N; PlaceCells( Pcb, -1, 0 ); - Route_Layer_BOTTOM = Route_Layer_TOP = Screen->m_Active_Layer; + Route_Layer_BOTTOM = Route_Layer_TOP = m_Layer; // trace the zone edges into the routing matrix - for( PtLim = Pcb->m_CurrentLimitZone; PtLim; PtLim=PtLim->Next() ) + int i_start_contour = 0; + for( unsigned ic = 0; ic < corner.size(); ic++ ) { - int ux0, uy0, ux1, uy1; - ux0 = PtLim->m_Start.x - Pcb->m_BoundaryBox.m_Pos.x; - uy0 = PtLim->m_Start.y - Pcb->m_BoundaryBox.m_Pos.y; - ux1 = PtLim->m_End.x - Pcb->m_BoundaryBox.m_Pos.x; - uy1 = PtLim->m_End.y - Pcb->m_BoundaryBox.m_Pos.y; - TraceLignePcb( ux0, uy0, ux1, uy1, -1, HOLE | CELL_is_EDGE, WRITE_CELL ); + int xi = corner[ic].x - Pcb->m_BoundaryBox.m_Pos.x; + int yi = corner[ic].y - Pcb->m_BoundaryBox.m_Pos.y; + int xf, yf; + if( corner[ic].end_contour == FALSE && ic < corner.size() - 1 ) + { + xf = corner[ic + 1].x - Pcb->m_BoundaryBox.m_Pos.x; + yf = corner[ic + 1].y - Pcb->m_BoundaryBox.m_Pos.y; + } + else + { + xf = corner[i_start_contour].x - Pcb->m_BoundaryBox.m_Pos.x; + yf = corner[i_start_contour].y - Pcb->m_BoundaryBox.m_Pos.y; + i_start_contour = ic + 1; + } + TraceLignePcb( xi, yi, xf, yf, -1, HOLE | CELL_is_EDGE, WRITE_CELL ); } - OrCell( ZoneStartFill.y, ZoneStartFill.x, BOTTOM, CELL_is_ZONE ); + /* Create a starting point to create the zone filling */ + LISTE_PAD* pad; + int cells_count = 0; + for( ii = 0, pad = frame->m_Pcb->m_Pads; ii < frame->m_Pcb->m_NbPads; ii++, pad++ ) + { + int icont = 0; + wxPoint pos; + if( TestPointInsideContour( icont, (*pad)->m_Pos.x, (*pad)->m_Pos.y ) ) + { + ZoneStartFill.x = ( (*pad)->m_Pos.x - Pcb->m_BoundaryBox.m_Pos.x + + (g_GridRoutingSize / 2) ) / g_GridRoutingSize; + + ZoneStartFill.y = ( (*pad)->m_Pos.y - Pcb->m_BoundaryBox.m_Pos.y + + (g_GridRoutingSize / 2) ) / g_GridRoutingSize; + OrCell( ZoneStartFill.y, ZoneStartFill.x, BOTTOM, CELL_is_ZONE ); + cells_count++; + } + } + + if( cells_count == 0 ) + { + if( verbose ) + DisplayError( frame, _( "No pads or starting point found to fill this zone outline" ) ); + error_level = 2; + goto end_of_zone_fill; + } // mark the cells forming part of the zone ii = 1; jj = 1; @@ -164,36 +185,59 @@ void Build_Zone( WinEDA_PcbFrame* frame, wxDC* DC, int net_code, // now, all the cell candidates are marked - // place all the obstacles into the matrix, such as (pads, tracks, vias, + // place all the obstacles into the matrix, such as (pads, tracks, vias, // pcb edges or segments) ii = 0; - if( Zone_Exclude_Pads ) + if( m_PadOption == PAD_NOT_IN_ZONE ) ii = FORCE_PADS; Affiche_1_Parametre( frame, 42, wxT( "GenZone" ), wxEmptyString, RED ); PlaceCells( Pcb, g_HightLigth_NetCode, ii ); Affiche_1_Parametre( frame, -1, wxEmptyString, _( "Ok" ), RED ); - /* Create zone limits on the routing matrix - * (colud be deleted by PlaceCells()) : */ - for( PtLim = Pcb->m_CurrentLimitZone; PtLim; PtLim = PtLim->Next() ) + /* Recreate zone limits on the routing matrix + * (could be deleted by PlaceCells()) : */ + i_start_contour = 0; + for( unsigned ic = 0; ic < corner.size(); ic++ ) { - int ux0, uy0, ux1, uy1; - ux0 = PtLim->m_Start.x - Pcb->m_BoundaryBox.m_Pos.x; - uy0 = PtLim->m_Start.y - Pcb->m_BoundaryBox.m_Pos.y; - ux1 = PtLim->m_End.x - Pcb->m_BoundaryBox.m_Pos.x; - uy1 = PtLim->m_End.y - Pcb->m_BoundaryBox.m_Pos.y; - TraceLignePcb( ux0, uy0, ux1, uy1, -1, HOLE | CELL_is_EDGE, WRITE_CELL ); + int xi = corner[ic].x - Pcb->m_BoundaryBox.m_Pos.x; + int yi = corner[ic].y - Pcb->m_BoundaryBox.m_Pos.y; + int xf, yf; + if( corner[ic].end_contour == FALSE && ic < corner.size() - 1 ) + { + xf = corner[ic + 1].x - Pcb->m_BoundaryBox.m_Pos.x; + yf = corner[ic + 1].y - Pcb->m_BoundaryBox.m_Pos.y; + } + else + { + xf = corner[i_start_contour].x - Pcb->m_BoundaryBox.m_Pos.x; + yf = corner[i_start_contour].y - Pcb->m_BoundaryBox.m_Pos.y; + i_start_contour = ic + 1; + } + TraceLignePcb( xi, yi, xf, yf, -1, HOLE | CELL_is_EDGE, WRITE_CELL ); } /* Init the starting point for zone filling : this is the mouse position * (could be deleted by PlaceCells()) : */ - OrCell( ZoneStartFill.y, ZoneStartFill.x, BOTTOM, CELL_is_ZONE ); + for( ii = 0, pad = frame->m_Pcb->m_Pads; ii < frame->m_Pcb->m_NbPads; ii++, pad++ ) + { + int icont = 0; + wxPoint pos; + if( TestPointInsideContour( icont, (*pad)->m_Pos.x, (*pad)->m_Pos.y ) ) + { + ZoneStartFill.x = ( (*pad)->m_Pos.x - Pcb->m_BoundaryBox.m_Pos.x + + (g_GridRoutingSize / 2) ) / g_GridRoutingSize; + + ZoneStartFill.y = ( (*pad)->m_Pos.y - Pcb->m_BoundaryBox.m_Pos.y + + (g_GridRoutingSize / 2) ) / g_GridRoutingSize; + OrCell( ZoneStartFill.y, ZoneStartFill.x, BOTTOM, CELL_is_ZONE ); + } + } if( Zone_Debug ) DisplayBoard( frame->DrawPanel, DC ); - /* Filling the cells of the matrix (tjis is the zone building)*/ + /* Filling the cells of the matrix (this is the zone building)*/ ii = 1; jj = 1; while( ii ) { @@ -202,20 +246,25 @@ void Build_Zone( WinEDA_PcbFrame* frame, wxDC* DC, int net_code, ii = Propagation( frame ); } + // replace obstacles into the matrix(pads) + if( m_PadOption == THERMAL_PAD ) + PlaceCells( Pcb, g_HightLigth_NetCode, FORCE_PADS ); + if( Zone_Debug ) DisplayBoard( frame->DrawPanel, DC ); /* Convert the matrix information (cells) to segments which are actually the zone */ if( g_HightLigth_NetCode < 0 ) - Genere_Segments_Zone( frame, DC, 0 ); + Genere_Segments_Zone( frame, DC, 0, m_Layer ); else - Genere_Segments_Zone( frame, DC, g_HightLigth_NetCode ); + Genere_Segments_Zone( frame, DC, g_HightLigth_NetCode, m_Layer ); /* Create the thermal reliefs */ g_DesignSettings.m_CurrentTrackWidth = lp_tmp; - if( Zone_Exclude_Pads && Zone_Create_Thermal_Relief ) - frame->Genere_Pad_Connexion( DC, Screen->m_Active_Layer ); + if( m_PadOption == THERMAL_PAD ) + frame->Genere_Pad_Connexion( DC, m_Layer ); +end_of_zone_fill: g_DesignSettings.m_TrackClearence = save_isol; // free the memory @@ -224,21 +273,22 @@ void Build_Zone( WinEDA_PcbFrame* frame, wxDC* DC, int net_code, // restore original values unchanged Route_Layer_TOP = lay_tmp_TOP; Route_Layer_BOTTOM = lay_tmp_BOTTOM; + + return error_level; } - -/*******************************************************************************/ -static void Genere_Segments_Zone( WinEDA_PcbFrame* frame, wxDC* DC, int net_code ) -/*******************************************************************************/ +/*******************************************************************************************/ +static void Genere_Segments_Zone( WinEDA_PcbFrame* frame, wxDC* DC, int net_code, int layer ) +/*******************************************************************************************/ /** Function Genere_Segments_Zone() - * Create the zone segments from the routing matrix structure + * Create the zone segments from the routing matrix structure * Algorithm: * Search for consecutive cells (flagged "zone") , and create segments -* from the first cell to the last cell in the matrix + * from the first cell to the last cell in the matrix * 2 searchs are made - * 1 - From left to right and create horizontal zone segments + * 1 - From left to right and create horizontal zone segments * 2 - From top to bottom, and create vertical zone segmùents * @param net_code = net_code common to all segment zone created * @param DC = current device context @@ -252,11 +302,10 @@ static void Genere_Segments_Zone( WinEDA_PcbFrame* frame, wxDC* DC, int net_code int Xmin = frame->m_Pcb->m_BoundaryBox.m_Pos.x; int Ymin = frame->m_Pcb->m_BoundaryBox.m_Pos.y; SEGZONE* pt_track; - int layer = frame->GetScreen()->m_Active_Layer; int nbsegm = 0; wxString msg; - /* balayage Gauche-> droite */ + /* Create horizontal segments */ Affiche_1_Parametre( frame, 64, wxT( "Segm H" ), wxT( "0" ), BROWN ); for( row = 0; row < Nrows; row++ ) { @@ -280,17 +329,17 @@ static void Genere_Segments_Zone( WinEDA_PcbFrame* frame, wxDC* DC, int net_code pt_track = new SEGZONE( frame->m_Pcb ); pt_track->SetLayer( layer ); pt_track->SetNet( net_code ); - - pt_track->m_Width = g_GridRoutingSize; - - pt_track->m_Start.x = ux0; - pt_track->m_Start.y = uy0; - - pt_track->m_End.x = ux1; - pt_track->m_End.y = uy1; - + + pt_track->m_Width = g_GridRoutingSize; + + pt_track->m_Start.x = ux0; + pt_track->m_Start.y = uy0; + + pt_track->m_End.x = ux1; + pt_track->m_End.y = uy1; + pt_track->m_TimeStamp = s_TimeStamp; - + pt_track->Insert( frame->m_Pcb, NULL ); pt_track->Draw( frame->DrawPanel, DC, GR_OR ); nbsegm++; @@ -303,6 +352,7 @@ static void Genere_Segments_Zone( WinEDA_PcbFrame* frame, wxDC* DC, int net_code Affiche_1_Parametre( frame, -1, wxEmptyString, msg, BROWN ); } + /* Create vertical segments */ Affiche_1_Parametre( frame, 72, wxT( "Segm V" ), wxT( "0" ), BROWN ); for( col = 0; col < Ncols; col++ ) { @@ -324,15 +374,15 @@ static void Genere_Segments_Zone( WinEDA_PcbFrame* frame, wxDC* DC, int net_code /* un segment avait debute de longueur > 0 */ pt_track = new SEGZONE( frame->m_Pcb ); pt_track->SetLayer( layer ); - pt_track->m_Width = g_GridRoutingSize; + pt_track->m_Width = g_GridRoutingSize; pt_track->SetNet( net_code ); - - pt_track->m_Start.x = ux0; - pt_track->m_Start.y = uy0; - - pt_track->m_End.x = ux1; - pt_track->m_End.y = uy1; - + + pt_track->m_Start.x = ux0; + pt_track->m_Start.y = uy0; + + pt_track->m_End.x = ux1; + pt_track->m_End.y = uy1; + pt_track->m_TimeStamp = s_TimeStamp; pt_track->Insert( frame->m_Pcb, NULL ); pt_track->Draw( frame->DrawPanel, DC, GR_OR ); @@ -368,7 +418,7 @@ int Propagation( WinEDA_PcbFrame* frame ) * 2 - Right to left and top to bottom * 3 - bottom to top and Right to left * 4 - bottom to top and Left to right - * Given the current cell, for each search, we consider the 2 neightbour cells + * Given the current cell, for each search, we consider the 2 neightbour cells * the previous cell on the same line and the previous cell on the same column. * * This funtion can request some iterations @@ -471,7 +521,7 @@ int Propagation( WinEDA_PcbFrame* frame ) if( current_cell == 0 ) /* a free cell is found */ { if( (old_cell_H & CELL_is_ZONE) - || (pt_cell_V[row] & CELL_is_ZONE) ) + || (pt_cell_V[row] & CELL_is_ZONE) ) { OrCell( row, col, BOTTOM, CELL_is_ZONE ); current_cell = CELL_is_ZONE; @@ -506,9 +556,9 @@ bool WinEDA_PcbFrame::Genere_Pad_Connexion( wxDC* DC, int layer ) wxString msg; if( m_Pcb->m_Zone == NULL ) - return FALSE; /* error: no zone */ - - if( m_Pcb->m_Zone->m_TimeStamp != s_TimeStamp ) /* error: this is not the new zone */ + return FALSE; /* error: no zone */ + + if( m_Pcb->m_Zone->m_TimeStamp != s_TimeStamp ) /* error: this is not the new zone */ return FALSE; /* Count the pads, i.e. the thermal relief to create count, and displays it */ @@ -531,7 +581,7 @@ bool WinEDA_PcbFrame::Genere_Pad_Connexion( wxDC* DC, int layer ) msg.Printf( wxT( "%d" ), Npads ); Affiche_1_Parametre( this, -1, wxEmptyString, msg, CYAN ); - /* Create the thermal reliefs */ + /* Create the thermal reliefs */ Affiche_1_Parametre( this, 57, wxT( "Pads" ), wxT( " " ), CYAN ); pt_liste_pad = (LISTE_PAD*) m_Pcb->m_Pads; for( ii = 0, Npads = 0; ii < m_Pcb->m_NbPads; ii++, pt_liste_pad++ ) @@ -546,17 +596,17 @@ bool WinEDA_PcbFrame::Genere_Pad_Connexion( wxDC* DC, int layer ) continue; /* Create the theram relief for the current pad */ - Npads++; - + Npads++; + msg.Printf( wxT( "%d" ), Npads ); Affiche_1_Parametre( this, -1, wxEmptyString, msg, CYAN ); - - cX = pt_pad->GetPosition().x; + + cX = pt_pad->GetPosition().x; cY = pt_pad->GetPosition().y; - - dx = pt_pad->m_Size.x / 2; - dy = pt_pad->m_Size.y / 2; - + + dx = pt_pad->m_Size.x / 2; + dy = pt_pad->m_Size.y / 2; + dx += g_DesignSettings.m_TrackClearence + g_GridRoutingSize; dy += g_DesignSettings.m_TrackClearence + g_GridRoutingSize; @@ -580,7 +630,7 @@ bool WinEDA_PcbFrame::Genere_Pad_Connexion( wxDC* DC, int layer ) pt_track = new SEGZONE( m_Pcb ); pt_track->SetLayer( layer ); - pt_track->m_Width = g_DesignSettings.m_CurrentTrackWidth; + pt_track->m_Width = g_DesignSettings.m_CurrentTrackWidth; pt_track->SetNet( g_HightLigth_NetCode ); pt_track->start = pt_pad; pt_track->m_Start.x = cX; pt_track->m_Start.y = cY; @@ -591,7 +641,7 @@ bool WinEDA_PcbFrame::Genere_Pad_Connexion( wxDC* DC, int layer ) /* Test if the segment is allowed */ if( BAD_DRC==m_drc->DrcBlind( pt_track, m_Pcb->m_Track ) ) { - delete pt_track; + delete pt_track; continue; } @@ -599,7 +649,7 @@ bool WinEDA_PcbFrame::Genere_Pad_Connexion( wxDC* DC, int layer ) loctrack = Locate_Zone( m_Pcb->m_Zone, pt_track->m_End, layer ); if( (loctrack == NULL) || (loctrack->m_TimeStamp != s_TimeStamp) ) { - delete pt_track; + delete pt_track; continue; } diff --git a/pcbnew/zones_by_polygon.cpp b/pcbnew/zones_by_polygon.cpp index 4eebd190c7..4f1df84235 100644 --- a/pcbnew/zones_by_polygon.cpp +++ b/pcbnew/zones_by_polygon.cpp @@ -34,56 +34,58 @@ using namespace std; #include "protos.h" -/* Imported functions */ -void Build_Zone( WinEDA_PcbFrame* frame, wxDC* DC, int net_code, - bool Zone_Exclude_Pads, bool Zone_Create_Thermal_Relief ); - /* Local functions */ + // Outile creation: static void Abort_Zone_Create_Outline( WinEDA_DrawPanel* Panel, wxDC* DC ); static void Show_New_Zone_Edge_While_Move_Mouse( WinEDA_DrawPanel* panel, wxDC* DC, bool erase ); + // Corner moving static void Abort_Zone_Move_Corner( WinEDA_DrawPanel* Panel, wxDC* DC ); static void Show_Zone_Corner_While_Move_Mouse( WinEDA_DrawPanel* panel, wxDC* DC, bool erase ); /* Local variables */ -static bool Zone_45_Only = FALSE; -static bool Zone_Exclude_Pads = TRUE; -static bool s_Zone_Create_Thermal_Relief = TRUE; -static int s_Zone_Layer; // Layer used to create the current zone -static int s_Zone_Hatching; // Option to show the zone area (outlines only, short hatches or full hatches -static int s_NetcodeSelection; // Net code selection for the current zone -static wxPoint s_CornerInitialPosition; // Used to abort a move corner command -static bool s_CornerIsNew; // Used to abort a move corner command (if it is a new corner, it must be deleted) +static bool Zone_45_Only = FALSE; +static ZONE_CONTAINER::m_PadInZone s_Zone_Pad_Options = ZONE_CONTAINER::THERMAL_PAD; +static int s_Zone_Layer; // Layer used to create the current zone +static int s_Zone_Hatching; // Option to show the zone area (outlines only, short hatches or full hatches +static int s_NetcodeSelection; // Net code selection for the current zone +static wxPoint s_CornerInitialPosition; // Used to abort a move corner command +static bool s_CornerIsNew; // Used to abort a move corner command (if it is a new corner, it must be deleted) // key used to store net sort option in config file : -#define ZONE_NET_SORT_OPTION_KEY wxT("Zone_NetSort_Opt") +#define ZONE_NET_SORT_OPTION_KEY wxT( "Zone_NetSort_Opt" ) enum zone_cmd { - ZONE_ABORT, - ZONE_OK + ZONE_ABORT, + ZONE_OK }; #include "dialog_zones_by_polygon.cpp" +/*****************************************************************************/ +void WinEDA_PcbFrame::Delete_Zone( wxDC* DC, SEGZONE* aZone, long aTimestamp ) +/******************************************************************************/ -/**********************************************************/ -void WinEDA_PcbFrame::Delete_Zone( wxDC* DC, SEGZONE* aZone ) -/**********************************************************/ - -/* Remove the zone which include the segment aZone. +/** Function Delete_Zone + * Remove the zone which include the segment aZone, or the zone which have the given time stamp. * A zone is a group of segments which have the same TimeStamp + * @param DC = current Device Context (can be NULL) + * @param aZone = zone segment within the zone to delete. Can be NULL + * @param aTimestamp = Timestamp for the zone to delete, used if aZone == NULL */ { + int nb_segm = 0; + bool modify = FALSE; + unsigned long TimeStamp; + if( aZone == NULL ) - return; + TimeStamp = aTimestamp; + else + TimeStamp = aZone->m_TimeStamp; // Save reference time stamp (aZone will be deleted) - int nb_segm = 0; - bool modify = FALSE; - unsigned long TimeStamp = aZone->m_TimeStamp; // Save reference time stamp (aZone will be deleted) - - SEGZONE* next; + SEGZONE* next; for( SEGZONE* zone = m_Pcb->m_Zone; zone != NULL; zone = next ) { next = zone->Next(); @@ -92,7 +94,8 @@ void WinEDA_PcbFrame::Delete_Zone( wxDC* DC, SEGZONE* aZone ) modify = TRUE; /* Erase segment from screen */ - Trace_Une_Piste( DrawPanel, DC, zone, nb_segm, GR_XOR ); + if( DC ) + Trace_Une_Piste( DrawPanel, DC, zone, nb_segm, GR_XOR ); /* remove item from linked list and free memory */ zone->DeleteStructure(); } @@ -109,7 +112,10 @@ void WinEDA_PcbFrame::Delete_Zone( wxDC* DC, SEGZONE* aZone ) /*****************************************************************************/ EDGE_ZONE* WinEDA_PcbFrame::Del_SegmEdgeZone( wxDC* DC, EDGE_ZONE* edge_zone ) /*****************************************************************************/ -/* Routine d'effacement du segment de limite zone en cours de trace */ + +/* Used only while creating a new zonz outline + * Remove and delete the current outline segment in progress + */ { EDGE_ZONE* segm; @@ -151,7 +157,7 @@ static void Abort_Zone_Create_Outline( WinEDA_DrawPanel* Panel, wxDC* DC ) /** * Function Abort_Zone_Create_Outline - * cancels the Begin_Zone state if at least one EDGE_ZONE has been created. + * cancels the Begin_Zone command if at least one EDGE_ZONE has been created. */ { WinEDA_PcbFrame* pcbframe = (WinEDA_PcbFrame*) Panel->m_Parent; @@ -181,7 +187,7 @@ void WinEDA_BasePcbFrame::DelLimitesZone( wxDC* DC, bool Redraw ) if( m_Pcb->m_CurrentLimitZone == NULL ) return; - // erase the old zone border, one segment at a time + // erase the old zone outline, one segment at a time for( segment = m_Pcb->m_CurrentLimitZone; segment; segment = next ) { next = segment->Next(); @@ -197,104 +203,111 @@ void WinEDA_BasePcbFrame::DelLimitesZone( wxDC* DC, bool Redraw ) SetCurItem( NULL ); } + /*******************************************************************************************************/ -void WinEDA_PcbFrame::Start_Move_Zone_Corner( wxDC* DC , ZONE_CONTAINER * zone_container, - int corner_id, bool IsNewCorner ) +void WinEDA_PcbFrame::Start_Move_Zone_Corner( wxDC* DC, ZONE_CONTAINER* zone_container, + int corner_id, bool IsNewCorner ) /*******************************************************************************************************/ + /** * Function Start_Move_Zone_Corner * Initialise parametres to move an existing corner of a zone. * if IsNewCorner is true, the Abort_Zone_Move_Corner will remove this corner, if called */ { - /* Show the Net */ - if( (g_HightLigth_NetCode > 0) && (g_HightLigth_NetCode != s_NetcodeSelection) ) - { - Hight_Light( DC ); // Remove old hightlight selection - } - - g_HightLigth_NetCode = s_NetcodeSelection; - if ( ! g_HightLigt_Status ) - Hight_Light( DC ); + /* Show the Net */ + if( (g_HightLigth_NetCode > 0) && (g_HightLigth_NetCode != s_NetcodeSelection) ) + { + Hight_Light( DC ); // Remove old hightlight selection + } - zone_container->m_Flags = IN_EDIT; - DrawPanel->ManageCurseur = Show_Zone_Corner_While_Move_Mouse; - DrawPanel->ForceCloseManageCurseur = Abort_Zone_Move_Corner; - s_CornerInitialPosition.x = zone_container->GetX(corner_id); - s_CornerInitialPosition.y = zone_container->GetY(corner_id); - s_CornerIsNew = IsNewCorner; + g_HightLigth_NetCode = s_NetcodeSelection; + if( !g_HightLigt_Status ) + Hight_Light( DC ); + + zone_container->m_Flags = IN_EDIT; + DrawPanel->ManageCurseur = Show_Zone_Corner_While_Move_Mouse; + DrawPanel->ForceCloseManageCurseur = Abort_Zone_Move_Corner; + s_CornerInitialPosition.x = zone_container->GetX( corner_id ); + s_CornerInitialPosition.y = zone_container->GetY( corner_id ); + s_CornerIsNew = IsNewCorner; } + /***************************************************************************************/ -void WinEDA_PcbFrame::End_Move_Zone_Corner( wxDC* DC , ZONE_CONTAINER * zone_container ) +void WinEDA_PcbFrame::End_Move_Zone_Corner( wxDC* DC, ZONE_CONTAINER* zone_container ) /****************************************************************************************/ + /** * Function End_Move_Zone_Corner * Terminates a move corner in a zone outline */ { - zone_container->m_Flags = 0; - DrawPanel->ManageCurseur = NULL; - DrawPanel->ForceCloseManageCurseur = NULL; - zone_container->Draw(DrawPanel, DC, wxPoint(0,0), GR_OR); + zone_container->m_Flags = 0; + DrawPanel->ManageCurseur = NULL; + DrawPanel->ForceCloseManageCurseur = NULL; + zone_container->Draw( DrawPanel, DC, wxPoint( 0, 0 ), GR_OR ); + GetScreen()->SetModify(); } /**************************************************************/ void Abort_Zone_Move_Corner( WinEDA_DrawPanel* Panel, wxDC* DC ) /**************************************************************/ + /** * Function Abort_Zone_Move_Corner * cancels the Begin_Zone state if at least one EDGE_ZONE has been created. */ { WinEDA_PcbFrame* pcbframe = (WinEDA_PcbFrame*) Panel->m_Parent; - ZONE_CONTAINER* zone_container = (ZONE_CONTAINER*) pcbframe->GetCurItem(); + ZONE_CONTAINER* zone_container = (ZONE_CONTAINER*) pcbframe->GetCurItem(); - zone_container->Draw(Panel, DC, wxPoint(0,0), GR_XOR); - - if ( s_CornerIsNew ) - { - zone_container->DeleteCorner( zone_container->m_CornerSelection ); - } - else - { - wxPoint pos = s_CornerInitialPosition; - zone_container->MoveCorner( zone_container->m_CornerSelection, pos.x, pos.y ); - } - zone_container->Draw(Panel, DC, wxPoint(0,0), GR_XOR); + zone_container->Draw( Panel, DC, wxPoint( 0, 0 ), GR_XOR ); + + if( s_CornerIsNew ) + { + zone_container->DeleteCorner( zone_container->m_CornerSelection ); + } + else + { + wxPoint pos = s_CornerInitialPosition; + zone_container->MoveCorner( zone_container->m_CornerSelection, pos.x, pos.y ); + } + zone_container->Draw( Panel, DC, wxPoint( 0, 0 ), GR_XOR ); Panel->ManageCurseur = NULL; Panel->ForceCloseManageCurseur = NULL; pcbframe->SetCurItem( NULL ); - zone_container->m_Flags = 0; + zone_container->m_Flags = 0; } /**************************************************************************************/ void Show_Zone_Corner_While_Move_Mouse( WinEDA_DrawPanel* Panel, wxDC* DC, bool erase ) /**************************************************************************************/ + /* Redraws the zone outline when moving a corner according to the cursor position */ { WinEDA_PcbFrame* pcbframe = (WinEDA_PcbFrame*) Panel->m_Parent; - ZONE_CONTAINER* zone_container = (ZONE_CONTAINER*) pcbframe->GetCurItem(); + ZONE_CONTAINER* zone_container = (ZONE_CONTAINER*) pcbframe->GetCurItem(); // if( erase ) /* Undraw edge in old position*/ { - zone_container->Draw(Panel, DC, wxPoint(0,0), GR_XOR); + zone_container->Draw( Panel, DC, wxPoint( 0, 0 ), GR_XOR ); } - wxPoint pos = pcbframe->GetScreen()->m_Curseur; + wxPoint pos = pcbframe->GetScreen()->m_Curseur; zone_container->MoveCorner( zone_container->m_CornerSelection, pos.x, pos.y ); - zone_container->Draw(Panel, DC, wxPoint(0,0), GR_XOR); + zone_container->Draw( Panel, DC, wxPoint( 0, 0 ), GR_XOR ); } - /*************************************************/ EDGE_ZONE* WinEDA_PcbFrame::Begin_Zone( wxDC* DC ) /*************************************************/ + /** * Function Begin_Zone * either initializes the first segment of a new zone, or adds an @@ -305,35 +318,35 @@ EDGE_ZONE* WinEDA_PcbFrame::Begin_Zone( wxDC* DC ) EDGE_ZONE* newedge = NULL; oldedge = m_Pcb->m_CurrentLimitZone; - + if( m_Pcb->m_CurrentLimitZone == NULL ) /* Start a new contour: init zone params (net and layer) */ - { - DrawPanel->m_IgnoreMouseEvents = TRUE; - WinEDA_ZoneFrame* frame = new WinEDA_ZoneFrame( this ); + { + DrawPanel->m_IgnoreMouseEvents = TRUE; + WinEDA_ZoneFrame* frame = new WinEDA_ZoneFrame( this ); - int diag = frame->ShowModal(); - frame->Destroy(); - DrawPanel->MouseToCursorSchema(); - DrawPanel->m_IgnoreMouseEvents = FALSE; + int diag = frame->ShowModal(); + frame->Destroy(); + DrawPanel->MouseToCursorSchema(); + DrawPanel->m_IgnoreMouseEvents = FALSE; - if( diag == ZONE_ABORT ) - return NULL; + if( diag == ZONE_ABORT ) + return NULL; - GetScreen()->m_Active_Layer = s_Zone_Layer; + GetScreen()->m_Active_Layer = s_Zone_Layer; - /* Show the Net */ - if( (g_HightLigth_NetCode > 0) && (g_HightLigth_NetCode != s_NetcodeSelection) ) - { - Hight_Light( DC ); // Remove old hightlight selection - } - - g_HightLigth_NetCode = s_NetcodeSelection; - if ( ! g_HightLigt_Status ) - Hight_Light( DC ); - } + /* Show the Net */ + if( (g_HightLigth_NetCode > 0) && (g_HightLigth_NetCode != s_NetcodeSelection) ) + { + Hight_Light( DC ); // Remove old hightlight selection + } + + g_HightLigth_NetCode = s_NetcodeSelection; + if( !g_HightLigt_Status ) + Hight_Light( DC ); + } // if first segment - if( (m_Pcb->m_CurrentLimitZone == NULL ) /* debut reel du trace */ + if( (m_Pcb->m_CurrentLimitZone == NULL ) /* Initial startt of a new outline */ || (DrawPanel->ManageCurseur == NULL) ) /* reprise d'un trace complementaire */ { newedge = new EDGE_ZONE( m_Pcb ); @@ -354,7 +367,8 @@ EDGE_ZONE* WinEDA_PcbFrame::Begin_Zone( wxDC* DC ) } // edge in progress: else - { /* edge in progress : the ending point coordinate was set by Show_New_Zone_Edge_While_Move_Mouse */ + { + /* edge in progress : the ending point coordinate was set by Show_New_Zone_Edge_While_Move_Mouse */ if( oldedge->m_Start != oldedge->m_End ) { oldedge->m_Flags &= ~(IS_NEW | IS_MOVED); @@ -379,9 +393,9 @@ EDGE_ZONE* WinEDA_PcbFrame::Begin_Zone( wxDC* DC ) void WinEDA_PcbFrame::End_Zone( wxDC* DC ) /*********************************************/ -/* - * Terminates an edge zone creation - * Close the current edge zone considered as a polygon +/** Function End_Zone + * Terminates a zone outline creation + * Close the current zone outline considered as a polygon * put it in the main list m_Pcb->m_ZoneDescriptorList (a vector) */ { @@ -393,7 +407,7 @@ void WinEDA_PcbFrame::End_Zone( wxDC* DC ) /* The last segment is a stub: its lenght is 0. * Use it to close the polygon by setting its ending point coordinate = start point of first segment - */ + */ edge = m_Pcb->m_CurrentLimitZone; edge->m_Flags &= ~(IS_NEW | IS_MOVED); @@ -416,38 +430,42 @@ void WinEDA_PcbFrame::End_Zone( wxDC* DC ) DrawPanel->ManageCurseur = NULL; DrawPanel->ForceCloseManageCurseur = NULL; - - /* Put edges in list */ - ZONE_CONTAINER * polygon = new ZONE_CONTAINER( m_Pcb ); - polygon->SetLayer( GetScreen()->m_Active_Layer ); - polygon->SetNet( g_HightLigth_NetCode ); - polygon->m_TimeStamp = GetTimeStamp(); - - EQUIPOT* net = m_Pcb->FindNet( g_HightLigth_NetCode ); - if ( net ) polygon->m_Netname = net->m_Netname; + + /* Put edges in list */ + ZONE_CONTAINER* polygon = new ZONE_CONTAINER( m_Pcb ); + polygon->SetLayer( GetScreen()->m_Active_Layer ); + polygon->SetNet( g_HightLigth_NetCode ); + polygon->m_TimeStamp = GetTimeStamp(); + + EQUIPOT* net = m_Pcb->FindNet( g_HightLigth_NetCode ); + if( net ) + polygon->m_Netname = net->m_Netname; edge = m_Pcb->m_CurrentLimitZone; - polygon->Start( GetScreen()->m_Active_Layer, 0, NULL, - edge->m_Start.x, edge->m_Start.y, - s_Zone_Hatching ); + polygon->Start( GetScreen()->m_Active_Layer, 0, NULL, + edge->m_Start.x, edge->m_Start.y, + s_Zone_Hatching ); edge = edge->Next(); - while( edge ) - { - polygon->AppendCorner( edge->m_Start.x, edge->m_Start.y ); + while( edge ) + { + polygon->AppendCorner( edge->m_Start.x, edge->m_Start.y ); edge = edge->Next(); - } - polygon->Close(); // Close the current corner list - polygon->Hatch(); - - m_Pcb->m_ZoneDescriptorList.push_back(polygon); - - /* Remove the current temporary list */ + } + + polygon->Close(); // Close the current corner list + polygon->SetHatch( s_Zone_Hatching ); + polygon->m_PadOption = s_Zone_Pad_Options; + polygon->m_ZoneClearance = g_DesignSettings.m_ZoneClearence; + polygon->m_GridFillValue = g_GridRoutingSize; + + m_Pcb->m_ZoneDescriptorList.push_back( polygon ); + + /* Remove the current temporary list */ DelLimitesZone( DC, TRUE ); - - /* Redraw the real edge zone */ - polygon->CPolyLine::Draw( ); // Build the line list - polygon->Draw( DrawPanel, DC, wxPoint(0,0), GR_OR ); - - GetScreen()->SetModify(); + + /* Redraw the real edge zone */ + polygon->Draw( DrawPanel, DC, wxPoint( 0, 0 ), GR_OR ); + + GetScreen()->SetModify(); } @@ -503,8 +521,9 @@ static void Show_New_Zone_Edge_While_Move_Mouse( WinEDA_DrawPanel* panel, wxDC* /***********************************************************************************/ -void WinEDA_PcbFrame::Edit_Zone_Params( wxDC* DC , ZONE_CONTAINER * zone_container ) +void WinEDA_PcbFrame::Edit_Zone_Params( wxDC* DC, ZONE_CONTAINER* zone_container ) /***********************************************************************************/ + /** * Function Edit_Zone_Params * Edit params (layer, clearance, ...) for a zone outline @@ -521,55 +540,71 @@ void WinEDA_PcbFrame::Edit_Zone_Params( wxDC* DC , ZONE_CONTAINER * zone_contain if( diag == ZONE_ABORT ) return; - zone_container->Draw( DrawPanel, DC, wxPoint(0,0), GR_XOR ); + zone_container->Draw( DrawPanel, DC, wxPoint( 0, 0 ), GR_XOR ); - zone_container->SetLayer( s_Zone_Layer ); - zone_container->SetNet( s_NetcodeSelection ); - EQUIPOT* net = m_Pcb->FindNet( s_NetcodeSelection ); - if ( net ) zone_container->m_Netname = net->m_Netname; - zone_container->SetHatch(s_Zone_Hatching); + zone_container->SetLayer( s_Zone_Layer ); + zone_container->SetNet( s_NetcodeSelection ); + EQUIPOT* net = m_Pcb->FindNet( s_NetcodeSelection ); + if( net ) + zone_container->m_Netname = net->m_Netname; + zone_container->SetHatch( s_Zone_Hatching ); + zone_container->m_PadOption = s_Zone_Pad_Options; + zone_container->m_ZoneClearance = g_DesignSettings.m_ZoneClearence; + zone_container->m_GridFillValue = g_GridRoutingSize; - zone_container->Draw( DrawPanel, DC, wxPoint(0,0), GR_OR ); + zone_container->Draw( DrawPanel, DC, wxPoint( 0, 0 ), GR_OR ); + + GetScreen()->SetModify(); } -/***************************************************************************/ -void WinEDA_PcbFrame::Fill_Zone( wxDC* DC, ZONE_CONTAINER * zone_container ) -/***************************************************************************/ + +/***************************************************************************************/ +int WinEDA_PcbFrame::Fill_Zone( wxDC* DC, ZONE_CONTAINER* zone_container, bool verbose ) +/***************************************************************************************/ /** Function Fill_Zone() - * Fillst the zone defined in zone_container + * Calculate the zone filling for the outline zone_container + * The zone outline is a frontier, and can be complex (with holes) + * The filling starts from starting points like pads, tracks. + * If exists the old filling is removed + * @param DC = current Device Context + * @param zone_container = zone to fill + * @param verbose = true to show error messages + * @return error level (0 = no error) */ { - wxPoint ZoneStartFill; wxString msg; MsgPanel->EraseMsgBox(); if( m_Pcb->ComputeBoundaryBox() == FALSE ) { - DisplayError( this, wxT( "Board is empty!" ), 10 ); - return; + if( verbose ) + DisplayError( this, wxT( "Board is empty!" ), 10 ); + return -1; } /* Show the Net */ + s_NetcodeSelection = zone_container->GetNet(); if( (g_HightLigth_NetCode > 0) && (g_HightLigth_NetCode != s_NetcodeSelection) ) { - Hight_Light( DC ); // Remove old hightlight selection - } - + Hight_Light( DC ); // Remove old hightlight selection + } + g_HightLigth_NetCode = s_NetcodeSelection; - if ( ! g_HightLigt_Status ) + if( !g_HightLigt_Status ) Hight_Light( DC ); if( g_HightLigth_NetCode > 0 ) { - EQUIPOT* net = m_Pcb->FindNet( g_HightLigth_NetCode ); + EQUIPOT* net = m_Pcb->FindNet( g_HightLigth_NetCode ); if( net == NULL ) { if( g_HightLigth_NetCode > 0 ) - { - DisplayError( this, wxT( "Unable to find Net name" ) ); - return; - } + { + if( verbose ) + DisplayError( this, wxT( "Unable to find Net name" ) ); + return -2; + } } else msg = net->m_Netname; @@ -579,6 +614,40 @@ void WinEDA_PcbFrame::Fill_Zone( wxDC* DC, ZONE_CONTAINER * zone_container ) Affiche_1_Parametre( this, 22, _( "NetName" ), msg, RED ); - Build_Zone( this, DC, g_HightLigth_NetCode, Zone_Exclude_Pads, s_Zone_Create_Thermal_Relief ); - GetScreen()->SetModify(); + zone_container->m_PadOption = s_Zone_Pad_Options; + zone_container->m_ZoneClearance = g_DesignSettings.m_ZoneClearence; + zone_container->m_GridFillValue = g_GridRoutingSize; + int error_level = zone_container->Fill_Zone( this, DC, verbose ); + + GetScreen()->SetModify(); + + return error_level; +} + + +/************************************************************/ +int WinEDA_PcbFrame::Fill_All_Zones( wxDC* DC, bool verbose ) +/************************************************************/ + +/** Function Fill_All_Zones() + * Fill all zones on the board + * The old fillings are removed + * @param frame = reference to the main frame + * @param DC = current Device Context + * @param verbose = true to show error messages + * @return error level (0 = no error) + */ +{ + ZONE_CONTAINER* zone_container; + int error_level = 0; + + for( unsigned ii = 0; ii < m_Pcb->m_ZoneDescriptorList.size(); ii++ ) + { + zone_container = m_Pcb->m_ZoneDescriptorList[ii]; + error_level = Fill_Zone( DC, zone_container, verbose ); + if( error_level && ! verbose ) + break; + } + + return error_level; } diff --git a/polygon/PolyLine.cpp b/polygon/PolyLine.cpp index f5c003e4ac..903a942c7d 100644 --- a/polygon/PolyLine.cpp +++ b/polygon/PolyLine.cpp @@ -993,7 +993,7 @@ void CPolyLine::StartDraggingToMoveCorner( CDC * pDC, int ic, int x, int y ) // get indexes for preceding and following corners int pre_c, post_c; int poly_side_style1, poly_side_style2; - int style1, style2; + int style1 = DSS_STRAIGHT, style2 = DSS_STRAIGHT; if( ic == istart ) { pre_c = iend; @@ -1057,7 +1057,7 @@ void CPolyLine::HighlightSide( int is ) if( !GetClosed() && is >= (int)(corner.size()-1) ) return; - int style; + int style = DL_LINE; if( side_style[is] == CPolyLine::STRAIGHT ) style = DL_LINE; else if( side_style[is] == CPolyLine::ARC_CW ) @@ -1319,7 +1319,7 @@ void CPolyLine::Hatch() min_a = (int)(min_y - slope*min_x); } min_a = (min_a/spacing)*spacing; - int offset; + int offset = 0; if( layer < (LAY_TOP_COPPER+2) ) offset = 0; else if( layer < (LAY_TOP_COPPER+4) ) @@ -1400,7 +1400,7 @@ void CPolyLine::Hatch() for( int istart=0; istart<(npts-1); istart++ ) { int max_x = INT_MIN; - int imax; + int imax = INT_MIN; for( int i=istart; i max_x )