From eda39ae8c0adecd7ecb4826a46cf9ffc28b62693 Mon Sep 17 00:00:00 2001 From: CHARRAS Date: Thu, 2 Aug 2007 07:42:58 +0000 Subject: [PATCH] pcbnew: drc control now generates a DRC report file --- change_log.txt | 6 + internat/fr/kicad.mo | Bin 129683 -> 130049 bytes internat/fr/kicad.po | 2013 +++++++++++++++++++++-------------------- pcbnew/dialog_drc.cpp | 102 ++- pcbnew/dialog_drc.h | 8 + pcbnew/drc.cpp | 155 +++- pcbnew/drc_dialog.pjd | 227 +++++ 7 files changed, 1442 insertions(+), 1069 deletions(-) diff --git a/change_log.txt b/change_log.txt index 98b013aa7c..585d1ab1d5 100644 --- a/change_log.txt +++ b/change_log.txt @@ -4,6 +4,12 @@ Started 2007-June-11 Please add newer entries at the top, list the date and your name with email address. +2007-aug-02 UPDATE Jean-Pierre Charras +================================================================================ ++ pcbnew + Drc test now generates a DRC file report. + + 2007-Jul-31 UPDATE Geoff Harland ================================================================================ + pcbnew diff --git a/internat/fr/kicad.mo b/internat/fr/kicad.mo index 62921b6479f43be0e7e87af5ee61a7c46863f603..46ff4a413ee6b34dc4a5a88d49351be7cacee729 100644 GIT binary patch delta 47588 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 Sa?JKfw`ya>HOkD3I{yd9RtsYQ delta 47264 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 diff --git a/internat/fr/kicad.po b/internat/fr/kicad.po index 0a0d71a976..1210bba8db 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-07-30 14:17+0100\n" +"PO-Revision-Date: 2007-08-02 10:01+0100\n" "Last-Translator: \n" "Language-Team: kicad team \n" "MIME-Version: 1.0\n" @@ -80,13 +80,13 @@ msgstr "Attention: Impossible de cr #: pcbnew/librairi.cpp:377 #: pcbnew/librairi.cpp:518 #: pcbnew/librairi.cpp:712 +#: pcbnew/export_gencad.cpp:79 #: pcbnew/gen_modules_placefile.cpp:82 #: pcbnew/gen_modules_placefile.cpp:93 #: pcbnew/gen_modules_placefile.cpp:239 -#: pcbnew/export_gencad.cpp:79 #: pcbnew/plothpgl.cpp:65 -#: eeschema/plothpgl.cpp:560 #: eeschema/plotps.cpp:388 +#: eeschema/plothpgl.cpp:560 #: cvpcb/genequiv.cpp:42 #: gerbview/export_to_pcbnew.cpp:53 msgid "Unable to create " @@ -301,6 +301,161 @@ msgstr "Fichiers Librairies" msgid "Library exists! No Change" msgstr "Librairie existante! Pas de changement" +#: pcbnew/muonde.cpp:142 +msgid "Gap" +msgstr "Gap" + +#: pcbnew/muonde.cpp:147 +msgid "Stub" +msgstr "Stub" + +#: pcbnew/muonde.cpp:153 +msgid "Arc Stub" +msgstr "Arc Stub" + +#: pcbnew/muonde.cpp:168 +#: common/common.cpp:48 +msgid " (mm):" +msgstr " (mm):" + +#: pcbnew/muonde.cpp:175 +msgid " (inch):" +msgstr " (pouce):" + +#: pcbnew/muonde.cpp:182 +#: pcbnew/muonde.cpp:195 +#: pcbnew/gen_self.h:226 +msgid "Incorrect number, abort" +msgstr "Nombre incorrect, arret" + +#: pcbnew/muonde.cpp:191 +msgid "Angle (0.1deg):" +msgstr "Angle (0.1deg):" + +#: pcbnew/muonde.cpp:325 +msgid "Complex shape" +msgstr "Formr complexe" + +#: pcbnew/muonde.cpp:342 +#: pcbnew/pcbtexte.cpp:113 +#: pcbnew/zones.cpp:873 +#: pcbnew/block.cpp:117 +#: pcbnew/cotation.cpp:109 +#: pcbnew/mirepcb.cpp:102 +#: pcbnew/dialog_edit_module.cpp:119 +#: eeschema/fieldedi.cpp:208 +#: eeschema/sheetlab.cpp:99 +#: eeschema/libedpart.cpp:230 +#: eeschema/editpart.cpp:193 +#: common/displlst.cpp:102 +msgid "Ok" +msgstr "Ok" + +#: pcbnew/muonde.cpp:346 +#: pcbnew/pcbtexte.cpp:118 +#: pcbnew/modedit_onclick.cpp:195 +#: pcbnew/modedit_onclick.cpp:228 +#: pcbnew/block.cpp:122 +#: pcbnew/globaleditpad.cpp:111 +#: pcbnew/cotation.cpp:114 +#: pcbnew/swap_layers.cpp:86 +#: pcbnew/pcbpiste.cpp:87 +#: pcbnew/mirepcb.cpp:106 +#: pcbnew/dialog_edit_module.cpp:124 +#: pcbnew/onrightclick.cpp:153 +#: pcbnew/onrightclick.cpp:172 +#: pcbnew/sel_layer.cpp:123 +#: pcbnew/sel_layer.cpp:250 +#: eeschema/libedit_onrightclick.cpp:68 +#: eeschema/libedit_onrightclick.cpp:83 +#: eeschema/optionsframe.cpp:155 +#: eeschema/onrightclick.cpp:111 +#: eeschema/onrightclick.cpp:125 +#: eeschema/sheetlab.cpp:104 +#: eeschema/options.cpp:114 +#: eeschema/libedpart.cpp:219 +#: gerbview/onrightclick.cpp:39 +#: gerbview/onrightclick.cpp:57 +#: gerbview/options.cpp:175 +#: gerbview/options.cpp:305 +#: gerbview/select_layers_to_pcb.cpp:127 +#: common/get_component_dialog.cpp:121 +#: common/displlst.cpp:106 +msgid "Cancel" +msgstr "Annuler" + +#: pcbnew/muonde.cpp:350 +msgid "Read Shape Descr File" +msgstr "Lire fichier de description de forme" + +#: pcbnew/muonde.cpp:354 +#: pcbnew/pcbtexte.cpp:177 +#: pcbnew/cotation.cpp:118 +#: pcbnew/dialog_edit_module.cpp:237 +#: pcbnew/dialog_edit_module.cpp:279 +#: eeschema/dialog_options.cpp:229 +#: eeschema/options.cpp:177 +#: eeschema/dialog_edit_component_in_schematic.cpp:182 +#: eeschema/editpart.cpp:312 +msgid "Normal" +msgstr "Normal" + +#: pcbnew/muonde.cpp:354 +msgid "Symmetrical" +msgstr "Symétrique" + +#: pcbnew/muonde.cpp:354 +msgid "mirrored" +msgstr "Miroir" + +#: pcbnew/muonde.cpp:355 +msgid "ShapeOption" +msgstr "Option Forme" + +#: pcbnew/muonde.cpp:359 +#: pcbnew/pcbtexte.cpp:128 +#: pcbnew/cotation.cpp:129 +#: pcbnew/mirepcb.cpp:111 +#: eeschema/sheet.cpp:166 +#: eeschema/sheet.cpp:172 +#: eeschema/pinedit-dialog.cpp:273 +#: eeschema/pinedit-dialog.cpp:279 +#: common/wxwineda.cpp:91 +msgid "Size" +msgstr "Taille " + +#: pcbnew/muonde.cpp:417 +msgid "Read descr shape file" +msgstr "Lire fichier de description de forme" + +#: pcbnew/muonde.cpp:432 +msgid "File not found" +msgstr "fichier non trouvé" + +#: pcbnew/muonde.cpp:530 +msgid "Shape has a null size!" +msgstr "La forme a une taille nulle" + +#: pcbnew/muonde.cpp:535 +msgid "Shape has no points!" +msgstr "La forme n'a pas de points" + +#: pcbnew/muonde.cpp:652 +msgid "No pad for this module" +msgstr "Pas de pad dans ce module" + +#: pcbnew/muonde.cpp:657 +msgid "Only one pad for this module" +msgstr "Seulement un pad dans ce module" + +#: pcbnew/muonde.cpp:671 +msgid "Gap (mm):" +msgstr "Gap (mm):" + +#: pcbnew/muonde.cpp:677 +msgid "Gap (inch):" +msgstr "Gap (inch):" + #: pcbnew/librairi.cpp:47 msgid "Import Module:" msgstr "Importer Module:" @@ -694,74 +849,262 @@ msgstr "Org = Centre" msgid "Draw origin ( 0,0 )in on sheet center" msgstr "Origine des tracés au centre de la feuille" -#: pcbnew/gen_modules_placefile.cpp:71 -msgid "No Modules for Automated Placement" -msgstr "Pas de Module pour placement Automatisé" +#: pcbnew/clean.cpp:152 +msgid "Delete unconnected tracks:" +msgstr "Suppression Pistes non connectées" -#: pcbnew/gen_modules_placefile.cpp:105 -msgid "Component side place file:" -msgstr "Fichier placement coté composant:" +#: pcbnew/clean.cpp:169 +msgid "ViaDef" +msgstr "ViaDef" -#: pcbnew/gen_modules_placefile.cpp:108 -msgid "Copper side place file:" -msgstr "Fichier placement coté cuivre:" +#: pcbnew/clean.cpp:314 +msgid "Clean Null Segments" +msgstr "Nettoyage segments nulls" -#: pcbnew/gen_modules_placefile.cpp:111 -msgid "Module count" -msgstr "Nb Modules" +#: pcbnew/clean.cpp:396 +msgid "Merging Segments:" +msgstr "Associe Segment" + +#: pcbnew/clean.cpp:398 +msgid "Merge" +msgstr "Merge" + +#: pcbnew/clean.cpp:398 +#: pcbnew/dialog_pad_edit.cpp:187 +#: eeschema/dialog_erc.cpp:192 +#: eeschema/dialog_erc.cpp:196 +#: eeschema/dialog_edit_component_in_schematic.cpp:172 +msgid "0" +msgstr "0" + +#: pcbnew/clean.cpp:411 +msgid "Merge: " +msgstr "Merge: " + +#: pcbnew/clean.cpp:603 +msgid "DRC Control:" +msgstr "Controle ERC:" + +#: pcbnew/clean.cpp:607 +msgid "NetCtr" +msgstr "NetCtr" + +#: pcbnew/clean.cpp:815 +msgid "Centre" +msgstr "Centre" + +#: pcbnew/clean.cpp:815 +msgid "0 " +msgstr "0" + +#: pcbnew/clean.cpp:826 +msgid "Pads: " +msgstr "Pastilles: " + +#: pcbnew/clean.cpp:829 +msgid "Max" +msgstr "Max" + +#: pcbnew/clean.cpp:831 +msgid "Segm" +msgstr "Segm" + +#: pcbnew/gendrill.cpp:146 +msgid "Drill tools" +msgstr "Outils de perçage" + +#: pcbnew/gendrill.cpp:167 +#: pcbnew/dialog_general_options.cpp:271 +#: eeschema/options.cpp:185 +#: gerbview/options.cpp:192 +msgid "millimeters" +msgstr "millimetres" + +#: pcbnew/gendrill.cpp:167 +#: eeschema/dialog_options.cpp:246 +#: eeschema/options.cpp:185 +msgid "inches" +msgstr "Pouces" + +#: pcbnew/gendrill.cpp:169 +msgid "Drill Units:" +msgstr "Unités perçage:" + +#: pcbnew/gendrill.cpp:176 +msgid "decimal format" +msgstr "Format décimal" + +#: pcbnew/gendrill.cpp:177 +msgid "suppress leading zeros" +msgstr "Suppression zeros de tête" + +#: pcbnew/gendrill.cpp:177 +msgid "suppress trailing zeros" +msgstr "Suppression zeros de fin" + +#: pcbnew/gendrill.cpp:177 +msgid "keep zeros" +msgstr "Garder les zéros" + +#: pcbnew/gendrill.cpp:180 +msgid "Zeros Format" +msgstr "Format des zéros" + +#: pcbnew/gendrill.cpp:187 +#: pcbnew/gendrill.cpp:427 +msgid "2:3" +msgstr "2:3" + +#: pcbnew/gendrill.cpp:187 +#: pcbnew/gendrill.cpp:428 +msgid "2:4" +msgstr "2:4" + +#: pcbnew/gendrill.cpp:188 +#: pcbnew/gendrill.cpp:432 +msgid "3:2" +msgstr "3:2" + +#: pcbnew/gendrill.cpp:188 +#: pcbnew/gendrill.cpp:433 +msgid "3:3" +msgstr "3:3" + +#: pcbnew/gendrill.cpp:194 +msgid "Precision" +msgstr "Précision" + +#: pcbnew/gendrill.cpp:207 +msgid "Drill Origin:" +msgstr "Origine des coord de percage:" + +#: pcbnew/gendrill.cpp:215 +#: pcbnew/gendrill.cpp:223 +#: eeschema/libedit.cpp:41 +#: eeschema/viewlibs.cpp:119 +msgid "None" +msgstr "Aucun" + +#: pcbnew/gendrill.cpp:215 +msgid "drill sheet (HPGL)" +msgstr "Plan de perçage (HPGL)" + +#: pcbnew/gendrill.cpp:215 +msgid "drill sheet (PostScript)" +msgstr "Plan de perçage (Postscript)" + +#: pcbnew/gendrill.cpp:217 +msgid "Drill Sheet:" +msgstr "Plan de perçage:" + +#: pcbnew/gendrill.cpp:223 +msgid "Drill report" +msgstr "Rapport de perçage" + +#: pcbnew/gendrill.cpp:225 +msgid "Drill Report:" +msgstr "Rapport de perçage:" + +#: pcbnew/gendrill.cpp:230 +msgid "Via Drill" +msgstr "Perçage des vias" + +#: pcbnew/gendrill.cpp:234 +#: eeschema/plothpgl.cpp:239 +msgid "Pen Number" +msgstr "Numéro de plume" + +#: pcbnew/gendrill.cpp:237 +msgid "Speed (cm/s)" +msgstr "Vitesse plume ( cm/s )" + +#: pcbnew/gendrill.cpp:240 +msgid "mirror y axis" +msgstr "Miroir sur axe Y" + +#: pcbnew/gendrill.cpp:244 +msgid "minimal header" +msgstr "Entête minimal" + +#: pcbnew/gendrill.cpp:250 +msgid "&Execute" +msgstr "&Exécuter" + +#: pcbnew/gendrill.cpp:254 +#: pcbnew/dialog_netlist.cpp:178 +#: pcbnew/dialog_drc.cpp:199 +#: eeschema/plotps.cpp:207 +#: eeschema/netlist_control.cpp:124 +#: eeschema/netlist_control.cpp:275 +#: eeschema/dialog_edit_label.cpp:181 +#: eeschema/dialog_edit_component_in_schematic.cpp:235 +#: eeschema/annotate_dialog.cpp:154 +#: common/svg_print.cpp:220 +#: share/svg_print.cpp:222 +#: share/dialog_print.cpp:225 +msgid "&Close" +msgstr "&Fermer" + +#: pcbnew/gendrill.cpp:368 +msgid "Drill file" +msgstr "Fichier de percage" + +#: pcbnew/gendrill.cpp:382 +#: pcbnew/gendrill.cpp:1458 +#: pcbnew/xchgmod.cpp:599 +#: pcbnew/plotps.cpp:47 +msgid "Unable to create file " +msgstr "Impossible de créer le fichier " + +#: pcbnew/gendrill.cpp:389 +#: pcbnew/gendrill.cpp:937 +#: pcbnew/gendrill.cpp:1464 +#: pcbnew/plotgerb.cpp:83 +#: pcbnew/plothpgl.cpp:72 +#: pcbnew/plotps.cpp:53 +msgid "File" +msgstr "Fichier" + +#: pcbnew/gendrill.cpp:395 +#: pcbnew/gendrill.cpp:942 +#: pcbnew/gendrill.cpp:1469 +msgid "Tools" +msgstr "Outils" + +#: pcbnew/gendrill.cpp:399 +#: pcbnew/gendrill.cpp:1008 +#: pcbnew/gendrill.cpp:1521 +#: pcbnew/class_pad.cpp:792 +#: pcbnew/affiche.cpp:208 +#: pcbnew/affiche.cpp:210 +msgid "Drill" +msgstr "Perçage" + +#: pcbnew/gendrill.cpp:873 +msgid "Drill Map file" +msgstr "Fichier Plan de perçage" + +#: pcbnew/gendrill.cpp:931 +#, c-format +msgid "Unable to create file <%s>" +msgstr "Impossible de créer fichier <%s>" + +#: pcbnew/gendrill.cpp:1216 +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 reçage: trop de diametres différents pour tracer 1 symbole par diametre\n" +"Le tracé utilise des cercles pour quelques valeurs " + +#: pcbnew/gendrill.cpp:1444 +msgid "Drill Report file" +msgstr "Fichier rapport de perçage:" #: pcbnew/pcbtexte.cpp:90 msgid "TextPCB properties" msgstr "Propriétés des textes PCB" -#: pcbnew/pcbtexte.cpp:113 -#: pcbnew/muonde.cpp:341 -#: pcbnew/block.cpp:117 -#: pcbnew/cotation.cpp:109 -#: pcbnew/zones.cpp:873 -#: pcbnew/mirepcb.cpp:102 -#: pcbnew/dialog_edit_module.cpp:119 -#: eeschema/fieldedi.cpp:208 -#: eeschema/sheetlab.cpp:99 -#: eeschema/libedpart.cpp:230 -#: eeschema/editpart.cpp:193 -#: common/displlst.cpp:102 -msgid "Ok" -msgstr "Ok" - -#: pcbnew/pcbtexte.cpp:118 -#: pcbnew/muonde.cpp:345 -#: pcbnew/modedit_onclick.cpp:195 -#: pcbnew/modedit_onclick.cpp:228 -#: pcbnew/onrightclick.cpp:153 -#: pcbnew/onrightclick.cpp:172 -#: pcbnew/block.cpp:122 -#: pcbnew/globaleditpad.cpp:111 -#: pcbnew/cotation.cpp:114 -#: pcbnew/swap_layers.cpp:86 -#: pcbnew/pcbpiste.cpp:87 -#: pcbnew/mirepcb.cpp:106 -#: pcbnew/dialog_edit_module.cpp:124 -#: pcbnew/sel_layer.cpp:123 -#: pcbnew/sel_layer.cpp:250 -#: eeschema/libedit_onrightclick.cpp:68 -#: eeschema/libedit_onrightclick.cpp:83 -#: eeschema/optionsframe.cpp:155 -#: eeschema/onrightclick.cpp:111 -#: eeschema/onrightclick.cpp:125 -#: eeschema/sheetlab.cpp:104 -#: eeschema/options.cpp:114 -#: eeschema/libedpart.cpp:219 -#: gerbview/onrightclick.cpp:39 -#: gerbview/onrightclick.cpp:57 -#: gerbview/options.cpp:175 -#: gerbview/options.cpp:305 -#: gerbview/select_layers_to_pcb.cpp:127 -#: common/get_component_dialog.cpp:121 -#: common/displlst.cpp:106 -msgid "Cancel" -msgstr "Annuler" - #: pcbnew/pcbtexte.cpp:122 #: pcbnew/dialog_edit_mod_text.cpp:314 #: eeschema/sheetlab.cpp:108 @@ -769,18 +1112,6 @@ msgstr "Annuler" msgid "Text:" msgstr "Texte:" -#: pcbnew/pcbtexte.cpp:128 -#: pcbnew/muonde.cpp:358 -#: pcbnew/cotation.cpp:129 -#: pcbnew/mirepcb.cpp:111 -#: eeschema/sheet.cpp:166 -#: eeschema/sheet.cpp:172 -#: eeschema/pinedit-dialog.cpp:273 -#: eeschema/pinedit-dialog.cpp:279 -#: common/wxwineda.cpp:91 -msgid "Size" -msgstr "Taille " - #: pcbnew/pcbtexte.cpp:132 #: pcbnew/dialog_edit_mod_text.cpp:204 #: pcbnew/cotation.cpp:133 @@ -806,18 +1137,6 @@ msgstr "Position" msgid "Orientation" msgstr "Orientation" -#: pcbnew/pcbtexte.cpp:177 -#: pcbnew/muonde.cpp:353 -#: pcbnew/cotation.cpp:118 -#: pcbnew/dialog_edit_module.cpp:237 -#: pcbnew/dialog_edit_module.cpp:279 -#: eeschema/dialog_options.cpp:229 -#: eeschema/options.cpp:177 -#: eeschema/dialog_edit_component_in_schematic.cpp:182 -#: eeschema/editpart.cpp:312 -msgid "Normal" -msgstr "Normal" - #: pcbnew/pcbtexte.cpp:177 #: pcbnew/modedit_onclick.cpp:246 #: pcbnew/cotation.cpp:118 @@ -859,88 +1178,13 @@ msgstr "Pas de memoire pour autoroutage" msgid "Place Cells" msgstr "Place Cells" -#: pcbnew/muonde.cpp:141 -msgid "Gap" -msgstr "Gap" +#: pcbnew/hotkeys.cpp:160 +msgid "Footprint found, but locked" +msgstr "Module trouvé, mais verrouillé" -#: pcbnew/muonde.cpp:146 -msgid "Stub" -msgstr "Stub" - -#: pcbnew/muonde.cpp:152 -msgid "Arc Stub" -msgstr "Arc Stub" - -#: pcbnew/muonde.cpp:167 -#: common/common.cpp:48 -msgid " (mm):" -msgstr " (mm):" - -#: pcbnew/muonde.cpp:174 -msgid " (inch):" -msgstr " (pouce):" - -#: pcbnew/muonde.cpp:181 -#: pcbnew/muonde.cpp:194 -#: pcbnew/gen_self.h:226 -msgid "Incorrect number, abort" -msgstr "Nombre incorrect, arret" - -#: pcbnew/muonde.cpp:190 -msgid "Angle (0.1deg):" -msgstr "Angle (0.1deg):" - -#: pcbnew/muonde.cpp:324 -msgid "Complex shape" -msgstr "Formr complexe" - -#: pcbnew/muonde.cpp:349 -msgid "Read Shape Descr File" -msgstr "Lire fichier de description de forme" - -#: pcbnew/muonde.cpp:353 -msgid "Symmetrical" -msgstr "Symétrique" - -#: pcbnew/muonde.cpp:353 -msgid "mirrored" -msgstr "Miroir" - -#: pcbnew/muonde.cpp:354 -msgid "ShapeOption" -msgstr "Option Forme" - -#: pcbnew/muonde.cpp:416 -msgid "Read descr shape file" -msgstr "Lire fichier de description de forme" - -#: pcbnew/muonde.cpp:431 -msgid "File not found" -msgstr "fichier non trouvé" - -#: pcbnew/muonde.cpp:529 -msgid "Shape has a null size!" -msgstr "La forme a une taille nulle" - -#: pcbnew/muonde.cpp:534 -msgid "Shape has no points!" -msgstr "La forme n'a pas de points" - -#: pcbnew/muonde.cpp:651 -msgid "No pad for this module" -msgstr "Pas de pad dans ce module" - -#: pcbnew/muonde.cpp:656 -msgid "Only one pad for this module" -msgstr "Seulement un pad dans ce module" - -#: pcbnew/muonde.cpp:670 -msgid "Gap (mm):" -msgstr "Gap (mm):" - -#: pcbnew/muonde.cpp:676 -msgid "Gap (inch):" -msgstr "Gap (inch):" +#: pcbnew/hotkeys.cpp:281 +msgid "Delete module?" +msgstr "Effacer Module?" #: pcbnew/dialog_graphic_items_options.cpp:192 msgid "Graphics:" @@ -1009,15 +1253,14 @@ msgid "&OK" msgstr "&OK" #: pcbnew/dialog_graphic_items_options.cpp:265 +#: pcbnew/zones.cpp:180 #: pcbnew/dialog_edit_mod_text.cpp:217 #: pcbnew/dialog_initpcb.cpp:164 #: pcbnew/dialog_track_options.cpp:185 #: pcbnew/dialog_display_options.cpp:284 -#: pcbnew/zones.cpp:180 #: pcbnew/set_grid.cpp:176 #: pcbnew/dialog_pad_edit.cpp:225 #: pcbnew/dialog_general_options.cpp:368 -#: eeschema/plothpgl.cpp:274 #: eeschema/symbtext.cpp:178 #: eeschema/dialog_options.cpp:278 #: eeschema/sheet.cpp:183 @@ -1025,6 +1268,7 @@ msgstr "&OK" #: eeschema/dialog_create_component.cpp:200 #: eeschema/dialog_cmp_graphic_properties.cpp:182 #: eeschema/pinedit-dialog.cpp:304 +#: eeschema/plothpgl.cpp:274 #: share/setpage.cpp:237 msgid "&Cancel" msgstr "&Annuler" @@ -1037,65 +1281,87 @@ msgstr "Fenetre 3D d msgid "3D Viewer" msgstr "Visu 3D" -#: pcbnew/clean.cpp:156 -msgid "Delete unconnected tracks:" -msgstr "Suppression Pistes non connectées" +#: pcbnew/zones.cpp:136 +#: pcbnew/zones.cpp:137 +#: pcbnew/zones.cpp:138 +#: pcbnew/zones.cpp:139 +msgid "0.00000" +msgstr "0.00000" -#: pcbnew/clean.cpp:173 -msgid "ViaDef" -msgstr "ViaDef" +#: pcbnew/zones.cpp:141 +msgid "Grid size:" +msgstr "Dim Grille" -#: pcbnew/clean.cpp:318 -msgid "Clean Null Segments" -msgstr "Nettoyage segments nulls" +#: pcbnew/zones.cpp:144 +msgid "Zone clearance value (mm):" +msgstr "Valeur isolation zone (mm):" -#: pcbnew/clean.cpp:400 -msgid "Merging Segments:" -msgstr "Associe Segment" +#: pcbnew/zones.cpp:156 +msgid "Include Pads" +msgstr "Inclure Pads" -#: pcbnew/clean.cpp:402 -msgid "Merge" -msgstr "Merge" +#: pcbnew/zones.cpp:157 +msgid "Thermal" +msgstr "Thermique" -#: pcbnew/clean.cpp:402 -#: pcbnew/dialog_pad_edit.cpp:187 -#: eeschema/dialog_erc.cpp:192 -#: eeschema/dialog_erc.cpp:196 -#: eeschema/dialog_edit_component_in_schematic.cpp:172 -msgid "0" -msgstr "0" +#: pcbnew/zones.cpp:158 +msgid "Exclude Pads" +msgstr "Exclure Pads" -#: pcbnew/clean.cpp:415 -msgid "Merge: " -msgstr "Merge: " +#: pcbnew/zones.cpp:160 +msgid "Pad options:" +msgstr "Options pads" -#: pcbnew/clean.cpp:607 -msgid "DRC Control:" -msgstr "Controle ERC:" +#: pcbnew/zones.cpp:164 +#: eeschema/dialog_options.cpp:257 +#: eeschema/options.cpp:194 +msgid "Any" +msgstr "Tout" -#: pcbnew/clean.cpp:611 -msgid "NetCtr" -msgstr "NetCtr" +#: pcbnew/zones.cpp:165 +msgid "H , V and 45 deg" +msgstr "H, V et 45 deg" -#: pcbnew/clean.cpp:819 -msgid "Centre" -msgstr "Centre" +#: pcbnew/zones.cpp:167 +msgid "Zone edges orient:" +msgstr "Direction contours zone:" -#: pcbnew/clean.cpp:819 -msgid "0 " -msgstr "0" +#: pcbnew/zones.cpp:175 +msgid "Fill" +msgstr "Remplissage" -#: pcbnew/clean.cpp:830 -msgid "Pads: " -msgstr "Pastilles: " +#: pcbnew/zones.cpp:184 +msgid "Update Options" +msgstr "Maj Options" -#: pcbnew/clean.cpp:833 -msgid "Max" -msgstr "Max" +#: pcbnew/zones.cpp:191 +msgid "Zone clearance value:" +msgstr "Valeur isolation zone:" -#: pcbnew/clean.cpp:835 -msgid "Segm" -msgstr "Segm" +#: pcbnew/zones.cpp:194 +msgid "Grid :" +msgstr "Grille:" + +#: pcbnew/zones.cpp:336 +msgid "New zone segment width: " +msgstr "Nouvelle largeur des segments zone:" + +#: pcbnew/zones.cpp:520 +msgid "Zone: No net selected" +msgstr "Zone: Net non sélectionné" + +#: pcbnew/zones.cpp:562 +msgid "Delete Current Zone Edges" +msgstr "Effacer contour zone courant" + +#: pcbnew/zones.cpp:807 +msgid "No Net" +msgstr "No Net" + +#: pcbnew/zones.cpp:809 +#: pcbnew/affiche.cpp:160 +msgid "NetName" +msgstr "NetName" #: pcbnew/via_edit.cpp:51 msgid "Incorrect value for Via drill. No via drill change" @@ -1492,21 +1758,6 @@ msgstr "Test Modules" msgid "Compile" msgstr "Compile" -#: pcbnew/dialog_netlist.cpp:178 -#: pcbnew/dialog_drc.cpp:193 -#: pcbnew/gendrill.cpp:254 -#: eeschema/plotps.cpp:207 -#: eeschema/netlist_control.cpp:124 -#: eeschema/netlist_control.cpp:275 -#: eeschema/dialog_edit_label.cpp:181 -#: eeschema/dialog_edit_component_in_schematic.cpp:235 -#: eeschema/annotate_dialog.cpp:154 -#: common/svg_print.cpp:220 -#: share/svg_print.cpp:222 -#: share/dialog_print.cpp:225 -msgid "&Close" -msgstr "&Fermer" - #: pcbnew/dialog_edit_mod_text.cpp:156 #, c-format msgid "Module %s (%s) orient %.1f" @@ -1669,25 +1920,25 @@ msgstr "Err. Zone" msgid "Tst Zones\n" msgstr "Test Zones\n" -#: pcbnew/drc.cpp:1119 -#, c-format -msgid "%d Drc Err %d PAD %s (%s) @ %d,%d\n" -msgstr "%d Err Drc %d PAD %s (%s) @ %d,%d\n" - #: pcbnew/drc.cpp:1130 #, c-format -msgid "%d Err type %d: sur VIA @ %d,%d\n" -msgstr "%d Err type %d: sur VIA @ %d,%d\n" +msgid "%d Drc Err %d %s (net %s)and PAD %s (%s) net %s @ %d,%d\n" +msgstr "%d Err Drc %d %s (net %s) et PAD %s (%s) net %s @ %d,%d\n" -#: pcbnew/drc.cpp:1141 +#: pcbnew/drc.cpp:1145 #, c-format -msgid "%d Err type %d: sur SEGMENT @ %d,%d\n" -msgstr "%d Err type %d: sur SEGMENT @ %d,%d\n" +msgid "%d Err type %d: %s (net %s) and VIA (net %s) @ %d,%d\n" +msgstr "%d Err type %d: %s (net %s) et VIA (net %s) @ %d,%d\n" -#: pcbnew/drc.cpp:1176 +#: pcbnew/drc.cpp:1158 #, c-format -msgid "%d Drc Err: PAD %s (%s) @ %d,%d and PAD %s (%s) @ %d,%d\n" -msgstr "%d Err Drc: PAD %s (%s) @ %d,%d et PAD %s (%s) @ %d,%d\n" +msgid "%d Err type %d: %s (net %s) and track (net %s) @ %d,%d\n" +msgstr "%d Err type %d: %s (net %s) et piste (net %s) @ %d,%d\n" + +#: pcbnew/drc.cpp:1202 +#, c-format +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/editrack-part2.cpp:31 #, c-format @@ -1918,14 +2169,6 @@ msgstr "Taille H" msgid "V Size" msgstr "Taille V" -#: pcbnew/class_pad.cpp:792 -#: pcbnew/affiche.cpp:208 -#: pcbnew/affiche.cpp:210 -#: pcbnew/gendrill.cpp:398 -#: pcbnew/gendrill.cpp:1010 -msgid "Drill" -msgstr "Perçage" - #: pcbnew/class_pad.cpp:800 msgid "Drill X / Y" msgstr "Perçage X/Y" @@ -2016,7 +2259,7 @@ msgid "Track Width" msgstr "Epais. Piste" #: pcbnew/dialog_track_options.cpp:164 -#: pcbnew/dialog_drc.cpp:141 +#: pcbnew/dialog_drc.cpp:143 msgid "Clearance" msgstr "Isolation" @@ -2160,399 +2403,7 @@ msgstr "Supprimer Module" msgid "Value " msgstr "Valeur " -#: pcbnew/onrightclick.cpp:91 -#, c-format -msgid "Track %.1f" -msgstr "Piste %.1f" - -#: pcbnew/onrightclick.cpp:93 -#, c-format -msgid "Track %.3f" -msgstr "Piste %.3f" - -#: pcbnew/onrightclick.cpp:106 -#, c-format -msgid "Via %.1f" -msgstr "Via %.1f" - -#: pcbnew/onrightclick.cpp:108 -#, c-format -msgid "Via %.3f" -msgstr "Via %.3f" - -#: pcbnew/onrightclick.cpp:190 -msgid "Get and Move Footprint" -msgstr "Sel et Dépl.t module" - -#: pcbnew/onrightclick.cpp:203 -msgid "Lock Module" -msgstr "Verrouiller Modules" - -#: pcbnew/onrightclick.cpp:205 -msgid "Free Module" -msgstr "Libère Module" - -#: pcbnew/onrightclick.cpp:209 -msgid "Auto place Module" -msgstr "Auto place Module" - -#: pcbnew/onrightclick.cpp:215 -msgid "Autoroute" -msgstr "Autoroute" - -#: pcbnew/onrightclick.cpp:234 -msgid "Autoroute Pad" -msgstr "Autoroute Pad" - -#: pcbnew/onrightclick.cpp:235 -msgid "Autoroute Net" -msgstr "Autoroute Net" - -#: pcbnew/onrightclick.cpp:257 -msgid "Move Drawing" -msgstr "Déplace Tracé" - -#: pcbnew/onrightclick.cpp:262 -msgid "End Drawing" -msgstr "Fin tracé" - -#: pcbnew/onrightclick.cpp:264 -msgid "Edit Drawing" -msgstr "Edit Tracé" - -#: pcbnew/onrightclick.cpp:265 -msgid "Delete Drawing" -msgstr "Supprimer Tracé" - -#: pcbnew/onrightclick.cpp:272 -msgid "End edge zone" -msgstr "Fin contour Zone" - -#: pcbnew/onrightclick.cpp:275 -msgid "Delete edge zone" -msgstr "Supprimer Contour Zone" - -#: pcbnew/onrightclick.cpp:291 -msgid "Edit Zone" -msgstr "Editer Zone" - -#: pcbnew/onrightclick.cpp:293 -msgid "Delete Zone" -msgstr "Supprimer Zone" - -#: pcbnew/onrightclick.cpp:298 -msgid "Delete Marker" -msgstr "Effacer Marqueur" - -#: pcbnew/onrightclick.cpp:305 -msgid "Edit Cotation" -msgstr "Editer Cotation" - -#: pcbnew/onrightclick.cpp:308 -msgid "Delete Cotation" -msgstr "Supprimer Cotation" - -#: pcbnew/onrightclick.cpp:315 -msgid "Move Mire" -msgstr "Déplace Mire" - -#: pcbnew/onrightclick.cpp:318 -msgid "Edit Mire" -msgstr "Edit Mire" - -#: pcbnew/onrightclick.cpp:320 -msgid "Delete Mire" -msgstr "Supprimer Mire" - -#: pcbnew/onrightclick.cpp:350 -msgid "Fill zone" -msgstr "Remplir zone" - -#: pcbnew/onrightclick.cpp:358 -msgid "Select Net" -msgstr "Sélection Net" - -#: pcbnew/onrightclick.cpp:363 -msgid "Delete Zone Limit" -msgstr "Supprimer Limite de Zone" - -#: pcbnew/onrightclick.cpp:367 -#: pcbnew/onrightclick.cpp:378 -#: pcbnew/onrightclick.cpp:391 -#: pcbnew/onrightclick.cpp:450 -msgid "Select Working Layer" -msgstr "Sélection de la couche de travail" - -#: pcbnew/onrightclick.cpp:376 -#: pcbnew/onrightclick.cpp:447 -msgid "Select Track Width" -msgstr "Sélection Epais. Piste" - -#: pcbnew/onrightclick.cpp:380 -msgid "Select layer pair for vias" -msgstr "Selection couple de couches pour Vias" - -#: pcbnew/onrightclick.cpp:397 -msgid "Footprint documentation" -msgstr "Documentation des modules" - -#: pcbnew/onrightclick.cpp:406 -msgid "Glob Move and Place" -msgstr "Move et Place Globaux" - -#: pcbnew/onrightclick.cpp:408 -msgid "Free All Modules" -msgstr "Libère tous les Modules" - -#: pcbnew/onrightclick.cpp:410 -msgid "Fixe All Modules" -msgstr "Verrouille tous les Modules" - -#: pcbnew/onrightclick.cpp:413 -msgid "Move All Modules" -msgstr "Déplace tous les Modules" - -#: pcbnew/onrightclick.cpp:414 -msgid "Move New Modules" -msgstr "Déplace nouveaux Modules" - -#: pcbnew/onrightclick.cpp:416 -msgid "Autoplace All Modules" -msgstr "Autoplace Tous Modules" - -#: pcbnew/onrightclick.cpp:417 -msgid "Autoplace New Modules" -msgstr "AutoPlace nouveaux Modules" - -#: pcbnew/onrightclick.cpp:418 -msgid "Autoplace Next Module" -msgstr "Autoplace Module suivant" - -#: pcbnew/onrightclick.cpp:421 -msgid "Orient All Modules" -msgstr "Oriente Tous Modules" - -#: pcbnew/onrightclick.cpp:427 -msgid "Global Autoroute" -msgstr "Autoroutage global" - -#: pcbnew/onrightclick.cpp:429 -msgid "Select layer pair" -msgstr "Selection couple de couches" - -#: pcbnew/onrightclick.cpp:431 -msgid "Autoroute All Modules" -msgstr "Autoroute Tous Modules" - -#: pcbnew/onrightclick.cpp:433 -msgid "Reset Unrouted" -msgstr "Réinit Non routés" - -#: pcbnew/onrightclick.cpp:438 -msgid "Global AutoRouter" -msgstr "Autorouteur Global" - -#: pcbnew/onrightclick.cpp:440 -msgid "Read Global AutoRouter Data" -msgstr "Lire Données de L'autorouteur global" - -#: pcbnew/onrightclick.cpp:476 -msgid "Flip Block (alt + drag mouse)" -msgstr "Inversion Bloc (alt + drag mouse)" - -#: pcbnew/onrightclick.cpp:497 -msgid "Drag Via" -msgstr "Drag Via" - -#: pcbnew/onrightclick.cpp:500 -msgid "Edit Via" -msgstr "Edit Via" - -#: pcbnew/onrightclick.cpp:502 -msgid "Set via hole to Default" -msgstr "Ajuste perçage via à défaut" - -#: pcbnew/onrightclick.cpp:503 -msgid "Set via hole to alt value" -msgstr "Ajuste perçage via à valeur alternative" - -#: pcbnew/onrightclick.cpp:504 -msgid "Set the via hole alt value" -msgstr "Ajuste la valeur alt. perçage via" - -#: pcbnew/onrightclick.cpp:505 -msgid "Export Via hole to alt value" -msgstr "Exporte perçage via à valeur alt." - -#: pcbnew/onrightclick.cpp:506 -msgid "Export via hole to others id vias" -msgstr "Exporte perçage via aux autres semblables." - -#: pcbnew/onrightclick.cpp:507 -msgid "Set ALL via holes to default" -msgstr "Ajuste perçage TOUTES vias au défaut" - -#: pcbnew/onrightclick.cpp:520 -msgid "Move Node" -msgstr "Déplace Noeud" - -#: pcbnew/onrightclick.cpp:525 -msgid "Drag Segments, keep slope" -msgstr "Drag Segments, garder direction" - -#: pcbnew/onrightclick.cpp:527 -msgid "Drag Segment" -msgstr "Drag Segment" - -#: pcbnew/onrightclick.cpp:530 -msgid "Move Segment" -msgstr "Déplace Segment" - -#: pcbnew/onrightclick.cpp:533 -msgid "Break Track" -msgstr "Briser piste" - -#: pcbnew/onrightclick.cpp:541 -msgid "Place Node" -msgstr "Place noeud" - -#: pcbnew/onrightclick.cpp:548 -msgid "End Track (end)" -msgstr "Terminer Pistes (end)" - -#: pcbnew/onrightclick.cpp:549 -msgid "Place Via (V)" -msgstr "Place Via (V)" - -#: pcbnew/onrightclick.cpp:555 -msgid "Change Width" -msgstr "Change Largeur" - -#: pcbnew/onrightclick.cpp:557 -msgid "Edit Segment" -msgstr "Edit Segment" - -#: pcbnew/onrightclick.cpp:561 -msgid "Edit Track" -msgstr "Editer Piste" - -#: pcbnew/onrightclick.cpp:563 -msgid "Edit Net" -msgstr "Edit Net" - -#: pcbnew/onrightclick.cpp:565 -msgid "Edit ALL Tracks and Vias" -msgstr "Editer TOUTES Pistes et Vias" - -#: pcbnew/onrightclick.cpp:567 -msgid "Edit ALL Vias (no track)" -msgstr "Editer TOUTES Vias (pas les pistes)" - -#: pcbnew/onrightclick.cpp:569 -msgid "Edit ALL Tracks (no via)" -msgstr "Editer TOUTES Pistes (pas les vias)" - -#: pcbnew/onrightclick.cpp:577 -msgid "Delete Segment (backspace)" -msgstr "Supprimer Segment (backspace)" - -#: pcbnew/onrightclick.cpp:581 -msgid "Delete Track (delete)" -msgstr "Supprimer Piste (Suppr)" - -#: pcbnew/onrightclick.cpp:583 -msgid "Delete Net" -msgstr "Supprimer Net" - -#: pcbnew/onrightclick.cpp:587 -msgid "Set Flags" -msgstr "Ajust. Flags" - -#: pcbnew/onrightclick.cpp:588 -msgid "Locked: Yes" -msgstr "Verrou: Oui" - -#: pcbnew/onrightclick.cpp:589 -msgid "Locked: No" -msgstr "Verrou: Non" - -#: pcbnew/onrightclick.cpp:597 -msgid "Track Locked: Yes" -msgstr "Piste verrouillée: Oui" - -#: pcbnew/onrightclick.cpp:598 -msgid "Track Locked: No" -msgstr "Piste verrouillée: Non" - -#: pcbnew/onrightclick.cpp:600 -msgid "Net Locked: Yes" -msgstr "Net verrouillé: Oui" - -#: pcbnew/onrightclick.cpp:601 -msgid "Net Locked: No" -msgstr "Net verrouillé: Non" - -#: pcbnew/onrightclick.cpp:615 -#: eeschema/component_class.cpp:51 -msgid "Footprint" -msgstr "Module" - -#: pcbnew/onrightclick.cpp:623 -msgid "Move (M)" -msgstr "Move (M)" - -#: pcbnew/onrightclick.cpp:625 -msgid "Drag (G)" -msgstr "Drag (G)" - -#: pcbnew/onrightclick.cpp:628 -msgid "Rotate + (R)" -msgstr "Rotation + (R)" - -#: pcbnew/onrightclick.cpp:630 -#: eeschema/onrightclick.cpp:275 -msgid "Rotate -" -msgstr "Rotation -" - -#: pcbnew/onrightclick.cpp:632 -msgid "Flip (S)" -msgstr "Change face (S)" - -#: pcbnew/onrightclick.cpp:658 -msgid "Footprint ref" -msgstr "Référence Module" - -#: pcbnew/onrightclick.cpp:662 -msgid "Footprint value" -msgstr "Valeur Module" - -#: pcbnew/onrightclick.cpp:666 -msgid "Footprint text" -msgstr "Texte Module" - -#: pcbnew/onrightclick.cpp:676 -#: pcbnew/onrightclick.cpp:705 -#: pcbnew/onrightclick.cpp:748 -msgid "Move" -msgstr "Move" - -#: pcbnew/onrightclick.cpp:697 -msgid "Pad" -msgstr "Pad" - -#: pcbnew/onrightclick.cpp:707 -msgid "Drag" -msgstr "Drag" - -#: pcbnew/onrightclick.cpp:722 -msgid "delete" -msgstr "Effacer" - -#: pcbnew/onrightclick.cpp:736 -msgid "Pcb Text" -msgstr "Texte Pcb" - -#: pcbnew/dialog_drc.cpp:137 +#: pcbnew/dialog_drc.cpp:139 #: eeschema/fieldedi.cpp:223 #: eeschema/dialog_erc.cpp:237 #: eeschema/dialog_edit_component_in_lib.cpp:166 @@ -2565,40 +2416,54 @@ msgstr "Texte Pcb" msgid "Options" msgstr "Options" -#: pcbnew/dialog_drc.cpp:149 +#: pcbnew/dialog_drc.cpp:151 msgid "Test Drc:" msgstr "Test Drc:" -#: pcbnew/dialog_drc.cpp:153 +#: pcbnew/dialog_drc.cpp:155 msgid "Include pad to pad test" msgstr "Inclure test pad à pad" -#: pcbnew/dialog_drc.cpp:157 +#: pcbnew/dialog_drc.cpp:159 msgid "Include unconnected" msgstr "Inclure non connexions" -#: pcbnew/dialog_drc.cpp:161 +#: pcbnew/dialog_drc.cpp:163 #: pcbnew/block.cpp:136 msgid "Include zones" msgstr "Inclure zones" -#: pcbnew/dialog_drc.cpp:174 +#: pcbnew/dialog_drc.cpp:167 +msgid "Create Report file" +msgstr "Créer fichier rapport " + +#: pcbnew/dialog_drc.cpp:180 msgid "Test Drc" msgstr "Test Drc" -#: pcbnew/dialog_drc.cpp:178 +#: pcbnew/dialog_drc.cpp:184 msgid "Stop Drc" msgstr "Stop Drc" -#: pcbnew/dialog_drc.cpp:185 +#: pcbnew/dialog_drc.cpp:191 msgid "Del Markers" msgstr "Supprimer Marqueurs" -#: pcbnew/dialog_drc.cpp:189 +#: pcbnew/dialog_drc.cpp:195 msgid "List Unconn" msgstr "Liste Non Conn." -#: pcbnew/dialog_drc.cpp:196 +#: pcbnew/dialog_drc.cpp:202 +msgid "Report File" +msgstr "Fichier rapport" + +#: pcbnew/dialog_drc.cpp:206 +#: pcbnew/dialog_edit_module.cpp:375 +#: eeschema/dialog_eeschema_config.cpp:227 +msgid "Browse" +msgstr "Examiner" + +#: pcbnew/dialog_drc.cpp:213 #: common/svg_print.cpp:232 #: share/svg_print.cpp:232 msgid "Messages:" @@ -2897,11 +2762,6 @@ msgstr "Piste" msgid "Zone" msgstr "Zone" -#: pcbnew/affiche.cpp:160 -#: pcbnew/zones.cpp:809 -msgid "NetName" -msgstr "NetName" - #: pcbnew/affiche.cpp:165 msgid "NetCode" msgstr "NetCode" @@ -3041,83 +2901,6 @@ msgstr "OK" msgid "Deselect" msgstr "Deselection" -#: pcbnew/zones.cpp:136 -#: pcbnew/zones.cpp:137 -#: pcbnew/zones.cpp:138 -#: pcbnew/zones.cpp:139 -msgid "0.00000" -msgstr "0.00000" - -#: pcbnew/zones.cpp:141 -msgid "Grid size:" -msgstr "Dim Grille" - -#: pcbnew/zones.cpp:144 -msgid "Zone clearance value (mm):" -msgstr "Valeur isolation zone (mm):" - -#: pcbnew/zones.cpp:156 -msgid "Include Pads" -msgstr "Inclure Pads" - -#: pcbnew/zones.cpp:157 -msgid "Thermal" -msgstr "Thermique" - -#: pcbnew/zones.cpp:158 -msgid "Exclude Pads" -msgstr "Exclure Pads" - -#: pcbnew/zones.cpp:160 -msgid "Pad options:" -msgstr "Options pads" - -#: pcbnew/zones.cpp:164 -#: eeschema/dialog_options.cpp:257 -#: eeschema/options.cpp:194 -msgid "Any" -msgstr "Tout" - -#: pcbnew/zones.cpp:165 -msgid "H , V and 45 deg" -msgstr "H, V et 45 deg" - -#: pcbnew/zones.cpp:167 -msgid "Zone edges orient:" -msgstr "Direction contours zone:" - -#: pcbnew/zones.cpp:175 -msgid "Fill" -msgstr "Remplissage" - -#: pcbnew/zones.cpp:184 -msgid "Update Options" -msgstr "Maj Options" - -#: pcbnew/zones.cpp:191 -msgid "Zone clearance value:" -msgstr "Valeur isolation zone:" - -#: pcbnew/zones.cpp:194 -msgid "Grid :" -msgstr "Grille:" - -#: pcbnew/zones.cpp:336 -msgid "New zone segment width: " -msgstr "Nouvelle largeur des segments zone:" - -#: pcbnew/zones.cpp:520 -msgid "Zone: No net selected" -msgstr "Zone: Net non sélectionné" - -#: pcbnew/zones.cpp:562 -msgid "Delete Current Zone Edges" -msgstr "Effacer contour zone courant" - -#: pcbnew/zones.cpp:807 -msgid "No Net" -msgstr "No Net" - #: pcbnew/automove.cpp:200 #: pcbnew/xchgmod.cpp:573 msgid "No Modules!" @@ -3406,169 +3189,6 @@ msgstr "Change module %s (%s) " msgid "Cmp files:" msgstr "Fichiers Cmp: " -#: pcbnew/xchgmod.cpp:599 -#: pcbnew/gendrill.cpp:381 -#: pcbnew/gendrill.cpp:1419 -#: pcbnew/plotps.cpp:47 -msgid "Unable to create file " -msgstr "Impossible de créer le fichier " - -#: pcbnew/gendrill.cpp:146 -msgid "Drill tools" -msgstr "Outils de perçage" - -#: pcbnew/gendrill.cpp:167 -#: pcbnew/dialog_general_options.cpp:271 -#: eeschema/options.cpp:185 -#: gerbview/options.cpp:192 -msgid "millimeters" -msgstr "millimetres" - -#: pcbnew/gendrill.cpp:167 -#: eeschema/dialog_options.cpp:246 -#: eeschema/options.cpp:185 -msgid "inches" -msgstr "Pouces" - -#: pcbnew/gendrill.cpp:169 -msgid "Drill Units:" -msgstr "Unités perçage:" - -#: pcbnew/gendrill.cpp:176 -msgid "decimal format" -msgstr "Format décimal" - -#: pcbnew/gendrill.cpp:177 -msgid "suppress leading zeros" -msgstr "Suppression zeros de tête" - -#: pcbnew/gendrill.cpp:177 -msgid "suppress trailing zeros" -msgstr "Suppression zeros de fin" - -#: pcbnew/gendrill.cpp:177 -msgid "keep zeros" -msgstr "Garder les zéros" - -#: pcbnew/gendrill.cpp:180 -msgid "Zeros Format" -msgstr "Format des zéros" - -#: pcbnew/gendrill.cpp:187 -#: pcbnew/gendrill.cpp:429 -msgid "2:3" -msgstr "2:3" - -#: pcbnew/gendrill.cpp:187 -#: pcbnew/gendrill.cpp:430 -msgid "2:4" -msgstr "2:4" - -#: pcbnew/gendrill.cpp:188 -#: pcbnew/gendrill.cpp:434 -msgid "3:2" -msgstr "3:2" - -#: pcbnew/gendrill.cpp:188 -#: pcbnew/gendrill.cpp:435 -msgid "3:3" -msgstr "3:3" - -#: pcbnew/gendrill.cpp:194 -msgid "Precision" -msgstr "Précision" - -#: pcbnew/gendrill.cpp:207 -msgid "Drill Origin:" -msgstr "Origine des coord de percage:" - -#: pcbnew/gendrill.cpp:215 -#: pcbnew/gendrill.cpp:223 -#: eeschema/libedit.cpp:41 -#: eeschema/viewlibs.cpp:119 -msgid "None" -msgstr "Aucun" - -#: pcbnew/gendrill.cpp:215 -msgid "drill sheet (HPGL)" -msgstr "Plan de perçage (HPGL)" - -#: pcbnew/gendrill.cpp:215 -msgid "drill sheet (PostScript)" -msgstr "Plan de perçage (Postscript)" - -#: pcbnew/gendrill.cpp:217 -msgid "Drill Sheet:" -msgstr "Plan de perçage:" - -#: pcbnew/gendrill.cpp:223 -msgid "Drill report" -msgstr "Plan de perçage" - -#: pcbnew/gendrill.cpp:225 -msgid "Drill Report:" -msgstr "Plan de perçage:" - -#: pcbnew/gendrill.cpp:230 -msgid "Via Drill" -msgstr "Perçage des vias" - -#: pcbnew/gendrill.cpp:234 -#: eeschema/plothpgl.cpp:239 -msgid "Pen Number" -msgstr "Numéro de plume" - -#: pcbnew/gendrill.cpp:237 -msgid "Speed (cm/s)" -msgstr "Vitesse plume ( cm/s )" - -#: pcbnew/gendrill.cpp:240 -msgid "mirror y axis" -msgstr "Miroir sur axe Y" - -#: pcbnew/gendrill.cpp:244 -msgid "minimal header" -msgstr "Entête minimal" - -#: pcbnew/gendrill.cpp:250 -msgid "&Execute" -msgstr "&Exécuter" - -#: pcbnew/gendrill.cpp:367 -msgid "Drill file" -msgstr "Fichier de percage" - -#: pcbnew/gendrill.cpp:388 -#: pcbnew/gendrill.cpp:939 -#: pcbnew/plotgerb.cpp:83 -#: pcbnew/plothpgl.cpp:72 -#: pcbnew/plotps.cpp:53 -msgid "File" -msgstr "Fichier" - -#: pcbnew/gendrill.cpp:394 -#: pcbnew/gendrill.cpp:944 -msgid "Tools" -msgstr "Outils" - -#: pcbnew/gendrill.cpp:875 -#: pcbnew/gendrill.cpp:1405 -msgid "Drill Map file" -msgstr "Fichier Plan de perçage" - -#: pcbnew/gendrill.cpp:933 -#, c-format -msgid "Unable to create file <%s>" -msgstr "Impossible de créer fichier <%s>" - -#: pcbnew/gendrill.cpp:1182 -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 reçage: trop de diametres différents pour tracer 1 symbole par diametre\n" -"Le tracé utilise des cercles pour quelques valeurs " - #: pcbnew/menubarpcb.cpp:41 msgid "Load Board Ctrl-O" msgstr "Charger Circuit Imprimé (Ctrl O)" @@ -4061,11 +3681,6 @@ msgstr "Rot 180" msgid "3D Shape Name" msgstr "3D forme" -#: pcbnew/dialog_edit_module.cpp:375 -#: eeschema/dialog_eeschema_config.cpp:227 -msgid "Browse" -msgstr "Examiner" - #: pcbnew/dialog_edit_module.cpp:379 msgid "Add 3D Shape" msgstr "Ajout Forme 3D" @@ -4099,6 +3714,414 @@ msgstr "R msgid "Delete [%s]" msgstr "Supprimer [%s]" +#: pcbnew/gen_modules_placefile.cpp:71 +msgid "No Modules for Automated Placement" +msgstr "Pas de Module pour placement Automatisé" + +#: pcbnew/gen_modules_placefile.cpp:105 +msgid "Component side place file:" +msgstr "Fichier placement coté composant:" + +#: pcbnew/gen_modules_placefile.cpp:108 +msgid "Copper side place file:" +msgstr "Fichier placement coté cuivre:" + +#: pcbnew/gen_modules_placefile.cpp:111 +msgid "Module count" +msgstr "Nb Modules" + +#: pcbnew/onrightclick.cpp:91 +#, c-format +msgid "Track %.1f" +msgstr "Piste %.1f" + +#: pcbnew/onrightclick.cpp:93 +#, c-format +msgid "Track %.3f" +msgstr "Piste %.3f" + +#: pcbnew/onrightclick.cpp:106 +#, c-format +msgid "Via %.1f" +msgstr "Via %.1f" + +#: pcbnew/onrightclick.cpp:108 +#, c-format +msgid "Via %.3f" +msgstr "Via %.3f" + +#: pcbnew/onrightclick.cpp:190 +msgid "Get and Move Footprint" +msgstr "Sel et Dépl.t module" + +#: pcbnew/onrightclick.cpp:203 +msgid "Lock Module" +msgstr "Verrouiller Modules" + +#: pcbnew/onrightclick.cpp:205 +msgid "Free Module" +msgstr "Libère Module" + +#: pcbnew/onrightclick.cpp:209 +msgid "Auto place Module" +msgstr "Auto place Module" + +#: pcbnew/onrightclick.cpp:215 +msgid "Autoroute" +msgstr "Autoroute" + +#: pcbnew/onrightclick.cpp:234 +msgid "Autoroute Pad" +msgstr "Autoroute Pad" + +#: pcbnew/onrightclick.cpp:235 +msgid "Autoroute Net" +msgstr "Autoroute Net" + +#: pcbnew/onrightclick.cpp:257 +msgid "Move Drawing" +msgstr "Déplace Tracé" + +#: pcbnew/onrightclick.cpp:262 +msgid "End Drawing" +msgstr "Fin tracé" + +#: pcbnew/onrightclick.cpp:264 +msgid "Edit Drawing" +msgstr "Edit Tracé" + +#: pcbnew/onrightclick.cpp:265 +msgid "Delete Drawing" +msgstr "Supprimer Tracé" + +#: pcbnew/onrightclick.cpp:272 +msgid "End edge zone" +msgstr "Fin contour Zone" + +#: pcbnew/onrightclick.cpp:275 +msgid "Delete edge zone" +msgstr "Supprimer Contour Zone" + +#: pcbnew/onrightclick.cpp:291 +msgid "Edit Zone" +msgstr "Editer Zone" + +#: pcbnew/onrightclick.cpp:293 +msgid "Delete Zone" +msgstr "Supprimer Zone" + +#: pcbnew/onrightclick.cpp:298 +msgid "Delete Marker" +msgstr "Effacer Marqueur" + +#: pcbnew/onrightclick.cpp:305 +msgid "Edit Cotation" +msgstr "Editer Cotation" + +#: pcbnew/onrightclick.cpp:308 +msgid "Delete Cotation" +msgstr "Supprimer Cotation" + +#: pcbnew/onrightclick.cpp:315 +msgid "Move Mire" +msgstr "Déplace Mire" + +#: pcbnew/onrightclick.cpp:318 +msgid "Edit Mire" +msgstr "Edit Mire" + +#: pcbnew/onrightclick.cpp:320 +msgid "Delete Mire" +msgstr "Supprimer Mire" + +#: pcbnew/onrightclick.cpp:350 +msgid "Fill zone" +msgstr "Remplir zone" + +#: pcbnew/onrightclick.cpp:358 +msgid "Select Net" +msgstr "Sélection Net" + +#: pcbnew/onrightclick.cpp:363 +msgid "Delete Zone Limit" +msgstr "Supprimer Limite de Zone" + +#: pcbnew/onrightclick.cpp:367 +#: pcbnew/onrightclick.cpp:378 +#: pcbnew/onrightclick.cpp:391 +#: pcbnew/onrightclick.cpp:450 +msgid "Select Working Layer" +msgstr "Sélection de la couche de travail" + +#: pcbnew/onrightclick.cpp:376 +#: pcbnew/onrightclick.cpp:447 +msgid "Select Track Width" +msgstr "Sélection Epais. Piste" + +#: pcbnew/onrightclick.cpp:380 +msgid "Select layer pair for vias" +msgstr "Selection couple de couches pour Vias" + +#: pcbnew/onrightclick.cpp:397 +msgid "Footprint documentation" +msgstr "Documentation des modules" + +#: pcbnew/onrightclick.cpp:406 +msgid "Glob Move and Place" +msgstr "Move et Place Globaux" + +#: pcbnew/onrightclick.cpp:408 +msgid "Free All Modules" +msgstr "Libère tous les Modules" + +#: pcbnew/onrightclick.cpp:410 +msgid "Fixe All Modules" +msgstr "Verrouille tous les Modules" + +#: pcbnew/onrightclick.cpp:413 +msgid "Move All Modules" +msgstr "Déplace tous les Modules" + +#: pcbnew/onrightclick.cpp:414 +msgid "Move New Modules" +msgstr "Déplace nouveaux Modules" + +#: pcbnew/onrightclick.cpp:416 +msgid "Autoplace All Modules" +msgstr "Autoplace Tous Modules" + +#: pcbnew/onrightclick.cpp:417 +msgid "Autoplace New Modules" +msgstr "AutoPlace nouveaux Modules" + +#: pcbnew/onrightclick.cpp:418 +msgid "Autoplace Next Module" +msgstr "Autoplace Module suivant" + +#: pcbnew/onrightclick.cpp:421 +msgid "Orient All Modules" +msgstr "Oriente Tous Modules" + +#: pcbnew/onrightclick.cpp:427 +msgid "Global Autoroute" +msgstr "Autoroutage global" + +#: pcbnew/onrightclick.cpp:429 +msgid "Select layer pair" +msgstr "Selection couple de couches" + +#: pcbnew/onrightclick.cpp:431 +msgid "Autoroute All Modules" +msgstr "Autoroute Tous Modules" + +#: pcbnew/onrightclick.cpp:433 +msgid "Reset Unrouted" +msgstr "Réinit Non routés" + +#: pcbnew/onrightclick.cpp:438 +msgid "Global AutoRouter" +msgstr "Autorouteur Global" + +#: pcbnew/onrightclick.cpp:440 +msgid "Read Global AutoRouter Data" +msgstr "Lire Données de L'autorouteur global" + +#: pcbnew/onrightclick.cpp:476 +msgid "Flip Block (alt + drag mouse)" +msgstr "Inversion Bloc (alt + drag mouse)" + +#: pcbnew/onrightclick.cpp:497 +msgid "Drag Via" +msgstr "Drag Via" + +#: pcbnew/onrightclick.cpp:500 +msgid "Edit Via" +msgstr "Edit Via" + +#: pcbnew/onrightclick.cpp:502 +msgid "Set via hole to Default" +msgstr "Ajuste perçage via à défaut" + +#: pcbnew/onrightclick.cpp:503 +msgid "Set via hole to alt value" +msgstr "Ajuste perçage via à valeur alternative" + +#: pcbnew/onrightclick.cpp:504 +msgid "Set the via hole alt value" +msgstr "Ajuste la valeur alt. perçage via" + +#: pcbnew/onrightclick.cpp:505 +msgid "Export Via hole to alt value" +msgstr "Exporte perçage via à valeur alt." + +#: pcbnew/onrightclick.cpp:506 +msgid "Export via hole to others id vias" +msgstr "Exporte perçage via aux autres semblables." + +#: pcbnew/onrightclick.cpp:507 +msgid "Set ALL via holes to default" +msgstr "Ajuste perçage TOUTES vias au défaut" + +#: pcbnew/onrightclick.cpp:520 +msgid "Move Node" +msgstr "Déplace Noeud" + +#: pcbnew/onrightclick.cpp:525 +msgid "Drag Segments, keep slope" +msgstr "Drag Segments, garder direction" + +#: pcbnew/onrightclick.cpp:527 +msgid "Drag Segment" +msgstr "Drag Segment" + +#: pcbnew/onrightclick.cpp:530 +msgid "Move Segment" +msgstr "Déplace Segment" + +#: pcbnew/onrightclick.cpp:533 +msgid "Break Track" +msgstr "Briser piste" + +#: pcbnew/onrightclick.cpp:541 +msgid "Place Node" +msgstr "Place noeud" + +#: pcbnew/onrightclick.cpp:548 +msgid "End Track (end)" +msgstr "Terminer Pistes (end)" + +#: pcbnew/onrightclick.cpp:549 +msgid "Place Via (V)" +msgstr "Place Via (V)" + +#: pcbnew/onrightclick.cpp:555 +msgid "Change Width" +msgstr "Change Largeur" + +#: pcbnew/onrightclick.cpp:557 +msgid "Edit Segment" +msgstr "Edit Segment" + +#: pcbnew/onrightclick.cpp:561 +msgid "Edit Track" +msgstr "Editer Piste" + +#: pcbnew/onrightclick.cpp:563 +msgid "Edit Net" +msgstr "Edit Net" + +#: pcbnew/onrightclick.cpp:565 +msgid "Edit ALL Tracks and Vias" +msgstr "Editer TOUTES Pistes et Vias" + +#: pcbnew/onrightclick.cpp:567 +msgid "Edit ALL Vias (no track)" +msgstr "Editer TOUTES Vias (pas les pistes)" + +#: pcbnew/onrightclick.cpp:569 +msgid "Edit ALL Tracks (no via)" +msgstr "Editer TOUTES Pistes (pas les vias)" + +#: pcbnew/onrightclick.cpp:577 +msgid "Delete Segment (backspace)" +msgstr "Supprimer Segment (backspace)" + +#: pcbnew/onrightclick.cpp:581 +msgid "Delete Track (delete)" +msgstr "Supprimer Piste (Suppr)" + +#: pcbnew/onrightclick.cpp:583 +msgid "Delete Net" +msgstr "Supprimer Net" + +#: pcbnew/onrightclick.cpp:587 +msgid "Set Flags" +msgstr "Ajust. Flags" + +#: pcbnew/onrightclick.cpp:588 +msgid "Locked: Yes" +msgstr "Verrou: Oui" + +#: pcbnew/onrightclick.cpp:589 +msgid "Locked: No" +msgstr "Verrou: Non" + +#: pcbnew/onrightclick.cpp:597 +msgid "Track Locked: Yes" +msgstr "Piste verrouillée: Oui" + +#: pcbnew/onrightclick.cpp:598 +msgid "Track Locked: No" +msgstr "Piste verrouillée: Non" + +#: pcbnew/onrightclick.cpp:600 +msgid "Net Locked: Yes" +msgstr "Net verrouillé: Oui" + +#: pcbnew/onrightclick.cpp:601 +msgid "Net Locked: No" +msgstr "Net verrouillé: Non" + +#: pcbnew/onrightclick.cpp:615 +#: eeschema/component_class.cpp:51 +msgid "Footprint" +msgstr "Module" + +#: pcbnew/onrightclick.cpp:623 +msgid "Move (M)" +msgstr "Move (M)" + +#: pcbnew/onrightclick.cpp:625 +msgid "Drag (G)" +msgstr "Drag (G)" + +#: pcbnew/onrightclick.cpp:628 +msgid "Rotate + (R)" +msgstr "Rotation + (R)" + +#: pcbnew/onrightclick.cpp:630 +#: eeschema/onrightclick.cpp:275 +msgid "Rotate -" +msgstr "Rotation -" + +#: pcbnew/onrightclick.cpp:632 +msgid "Flip (S)" +msgstr "Change face (S)" + +#: pcbnew/onrightclick.cpp:658 +msgid "Footprint ref" +msgstr "Référence Module" + +#: pcbnew/onrightclick.cpp:662 +msgid "Footprint value" +msgstr "Valeur Module" + +#: pcbnew/onrightclick.cpp:666 +msgid "Footprint text" +msgstr "Texte Module" + +#: pcbnew/onrightclick.cpp:676 +#: pcbnew/onrightclick.cpp:705 +#: pcbnew/onrightclick.cpp:748 +msgid "Move" +msgstr "Move" + +#: pcbnew/onrightclick.cpp:697 +msgid "Pad" +msgstr "Pad" + +#: pcbnew/onrightclick.cpp:707 +msgid "Drag" +msgstr "Drag" + +#: pcbnew/onrightclick.cpp:722 +msgid "delete" +msgstr "Effacer" + +#: pcbnew/onrightclick.cpp:736 +msgid "Pcb Text" +msgstr "Texte Pcb" + #: pcbnew/edit.cpp:154 msgid "Graphic not autorized on Copper layers" msgstr "Graphique non autorisé sur couches cuivre" @@ -4749,14 +4772,6 @@ msgstr "Pin localis msgid "Module Editor: module modified!, Continue ?" msgstr "Editeur de Module: module modifié! Continuer ?" -#: pcbnew/hotkeys.cpp:156 -msgid "Footprint found, but locked" -msgstr "Module trouvé, mais verrouillé" - -#: pcbnew/hotkeys.cpp:277 -msgid "Delete module?" -msgstr "Effacer Module?" - #: eeschema/save_schemas.cpp:71 #: eeschema/files-io.cpp:62 #: eeschema/eeload.cpp:56 @@ -5082,103 +5097,21 @@ msgstr "Fichier " msgid "not found" msgstr " non trouvé" -#: eeschema/plothpgl.cpp:205 -msgid "Sheet Size" -msgstr "Dim. feuille" - -#: eeschema/plothpgl.cpp:206 #: eeschema/plotps.cpp:169 +#: eeschema/plothpgl.cpp:206 msgid "Page Size A4" msgstr "Feuille A4" -#: eeschema/plothpgl.cpp:207 -msgid "Page Size A3" -msgstr "Feuille A3" - -#: eeschema/plothpgl.cpp:208 -msgid "Page Size A2" -msgstr "Feuille A2" - -#: eeschema/plothpgl.cpp:209 -msgid "Page Size A1" -msgstr "Feuille A1" - -#: eeschema/plothpgl.cpp:210 -msgid "Page Size A0" -msgstr "Feuille A0" - -#: eeschema/plothpgl.cpp:211 #: eeschema/plotps.cpp:170 +#: eeschema/plothpgl.cpp:211 msgid "Page Size A" msgstr "Feuille A" -#: eeschema/plothpgl.cpp:212 -msgid "Page Size B" -msgstr "Feuille B" - -#: eeschema/plothpgl.cpp:213 -msgid "Page Size C" -msgstr "Feuille C" - -#: eeschema/plothpgl.cpp:214 -msgid "Page Size D" -msgstr "Feuille D" - -#: eeschema/plothpgl.cpp:215 -msgid "Page Size E" -msgstr "Feuille E" - -#: eeschema/plothpgl.cpp:217 #: eeschema/plotps.cpp:172 +#: eeschema/plothpgl.cpp:217 msgid "Plot page size:" msgstr "Format de la feuille:" -#: eeschema/plothpgl.cpp:223 -msgid "Pen control:" -msgstr "Controle plume" - -#: eeschema/plothpgl.cpp:227 -msgid "Pen Width ( mils )" -msgstr "Epaiss plume (mils)" - -#: eeschema/plothpgl.cpp:233 -msgid "Pen Speed ( cm/s )" -msgstr "Vitesse plume ( cm/s )" - -#: eeschema/plothpgl.cpp:245 -msgid "Page offset:" -msgstr "Offset page:" - -#: eeschema/plothpgl.cpp:249 -msgid "Plot Offset X" -msgstr "Offset de tracé X" - -#: eeschema/plothpgl.cpp:255 -msgid "Plot Offset Y" -msgstr "Offset de tracé Y" - -#: eeschema/plothpgl.cpp:266 -#: eeschema/plotps.cpp:199 -msgid "&Plot CURRENT" -msgstr "&Imprimer courant" - -#: eeschema/plothpgl.cpp:270 -#: eeschema/plotps.cpp:203 -msgid "Plot A&LL" -msgstr "&Tout tracer" - -#: eeschema/plothpgl.cpp:280 -msgid "&Accept Offset" -msgstr "&Accepter Offset" - -#: eeschema/plothpgl.cpp:539 -msgid "** Plot End **\n" -msgstr "** Fin de Tracé **\n" - -#: eeschema/plothpgl.cpp:564 -msgid "Plot " -msgstr "Trace " - #: eeschema/plotps.cpp:178 msgid "Plot Options:" msgstr "Options de tracé:" @@ -5198,6 +5131,16 @@ msgstr "Couleur" msgid "Plot Color:" msgstr "Tracé et Couleurs:" +#: eeschema/plotps.cpp:199 +#: eeschema/plothpgl.cpp:266 +msgid "&Plot CURRENT" +msgstr "&Imprimer courant" + +#: eeschema/plotps.cpp:203 +#: eeschema/plothpgl.cpp:270 +msgid "Plot A&LL" +msgstr "&Tout tracer" + #: eeschema/plotps.cpp:214 msgid "Messages :" msgstr "Messages :" @@ -7680,6 +7623,78 @@ msgstr "Emetteur ouv." msgid "Electrical Type:" msgstr "Type électrique:" +#: eeschema/plothpgl.cpp:205 +msgid "Sheet Size" +msgstr "Dim. feuille" + +#: eeschema/plothpgl.cpp:207 +msgid "Page Size A3" +msgstr "Feuille A3" + +#: eeschema/plothpgl.cpp:208 +msgid "Page Size A2" +msgstr "Feuille A2" + +#: eeschema/plothpgl.cpp:209 +msgid "Page Size A1" +msgstr "Feuille A1" + +#: eeschema/plothpgl.cpp:210 +msgid "Page Size A0" +msgstr "Feuille A0" + +#: eeschema/plothpgl.cpp:212 +msgid "Page Size B" +msgstr "Feuille B" + +#: eeschema/plothpgl.cpp:213 +msgid "Page Size C" +msgstr "Feuille C" + +#: eeschema/plothpgl.cpp:214 +msgid "Page Size D" +msgstr "Feuille D" + +#: eeschema/plothpgl.cpp:215 +msgid "Page Size E" +msgstr "Feuille E" + +#: eeschema/plothpgl.cpp:223 +msgid "Pen control:" +msgstr "Controle plume" + +#: eeschema/plothpgl.cpp:227 +msgid "Pen Width ( mils )" +msgstr "Epaiss plume (mils)" + +#: eeschema/plothpgl.cpp:233 +msgid "Pen Speed ( cm/s )" +msgstr "Vitesse plume ( cm/s )" + +#: eeschema/plothpgl.cpp:245 +msgid "Page offset:" +msgstr "Offset page:" + +#: eeschema/plothpgl.cpp:249 +msgid "Plot Offset X" +msgstr "Offset de tracé X" + +#: eeschema/plothpgl.cpp:255 +msgid "Plot Offset Y" +msgstr "Offset de tracé Y" + +#: eeschema/plothpgl.cpp:280 +msgid "&Accept Offset" +msgstr "&Accepter Offset" + +#: eeschema/plothpgl.cpp:539 +msgid "** Plot End **\n" +msgstr "** Fin de Tracé **\n" + +#: eeschema/plothpgl.cpp:564 +msgid "Plot " +msgstr "Trace " + #: eeschema/edit_label.cpp:48 msgid "Empty Text!" msgstr "Texte vide" @@ -9829,7 +9844,7 @@ msgstr "Netliste: " msgid "General Options" msgstr "Options générales" -#: pcbnew/dialog_drc.h:53 +#: pcbnew/dialog_drc.h:56 msgid "DRC Control" msgstr "Controle ERC" diff --git a/pcbnew/dialog_drc.cpp b/pcbnew/dialog_drc.cpp index b09c282bfd..d7bbc35aa7 100644 --- a/pcbnew/dialog_drc.cpp +++ b/pcbnew/dialog_drc.cpp @@ -59,6 +59,8 @@ BEGIN_EVENT_TABLE( WinEDA_DrcFrame, wxDialog ) EVT_BUTTON( wxID_CLOSE, WinEDA_DrcFrame::OnCloseClick ) + EVT_BUTTON( ID_BUTTON_BROWSE_RPT_FILE, WinEDA_DrcFrame::OnButtonBrowseRptFileClick ) + ////@end WinEDA_DrcFrame event table entries END_EVENT_TABLE() @@ -98,6 +100,8 @@ bool WinEDA_DrcFrame::Create( wxWindow* parent, wxWindowID id, const wxString& c m_Pad2PadTestCtrl = NULL; m_UnconnectedTestCtrl = NULL; m_ZonesTestCtrl = NULL; + m_CreateRptCtrl = NULL; + m_RptFilenameCtrl = NULL; m_logWindow = NULL; ////@end WinEDA_DrcFrame member initialisation @@ -124,7 +128,7 @@ void WinEDA_DrcFrame::CreateControls() SetFont(*g_DialogFont); ////@begin WinEDA_DrcFrame content construction - // Generated by DialogBlocks, 30/07/2007 12:44:15 (unregistered) + // Generated by DialogBlocks, 02/08/2007 10:11:17 (unregistered) WinEDA_DrcFrame* itemDialog1 = this; @@ -162,39 +166,54 @@ void WinEDA_DrcFrame::CreateControls() m_ZonesTestCtrl->SetValue(false); itemStaticBoxSizer8->Add(m_ZonesTestCtrl, 0, wxGROW|wxALL, 5); - wxBoxSizer* itemBoxSizer12 = new wxBoxSizer(wxVERTICAL); - m_CommandSizer->Add(itemBoxSizer12, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5); + m_CreateRptCtrl = new wxCheckBox( itemDialog1, ID_CHECKBOX_CREATE_FILE, _("Create Report file"), wxDefaultPosition, wxDefaultSize, 0 ); + m_CreateRptCtrl->SetValue(false); + itemStaticBoxSizer8->Add(m_CreateRptCtrl, 0, wxGROW|wxALL, 5); - wxBoxSizer* itemBoxSizer13 = new wxBoxSizer(wxHORIZONTAL); - itemBoxSizer12->Add(itemBoxSizer13, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5); + wxBoxSizer* itemBoxSizer13 = new wxBoxSizer(wxVERTICAL); + m_CommandSizer->Add(itemBoxSizer13, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5); - wxBoxSizer* itemBoxSizer14 = new wxBoxSizer(wxVERTICAL); - itemBoxSizer13->Add(itemBoxSizer14, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5); + wxBoxSizer* itemBoxSizer14 = new wxBoxSizer(wxHORIZONTAL); + itemBoxSizer13->Add(itemBoxSizer14, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5); - wxButton* itemButton15 = new wxButton( itemDialog1, ID_DRC_RUN, _("Test Drc"), wxDefaultPosition, wxDefaultSize, 0 ); - itemButton15->SetForegroundColour(wxColour(202, 0, 0)); - itemBoxSizer14->Add(itemButton15, 0, wxGROW|wxALL, 5); + wxBoxSizer* itemBoxSizer15 = new wxBoxSizer(wxVERTICAL); + itemBoxSizer14->Add(itemBoxSizer15, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5); - wxButton* itemButton16 = new wxButton( itemDialog1, ID_STOP_CONTROL_DRC, _("Stop Drc"), wxDefaultPosition, wxDefaultSize, 0 ); - itemButton16->SetForegroundColour(wxColour(0, 128, 128)); - itemBoxSizer14->Add(itemButton16, 0, wxGROW|wxALL, 5); + wxButton* itemButton16 = new wxButton( itemDialog1, ID_DRC_RUN, _("Test Drc"), wxDefaultPosition, wxDefaultSize, 0 ); + itemButton16->SetForegroundColour(wxColour(202, 0, 0)); + itemBoxSizer15->Add(itemButton16, 0, wxGROW|wxALL, 5); - wxBoxSizer* itemBoxSizer17 = new wxBoxSizer(wxVERTICAL); - itemBoxSizer13->Add(itemBoxSizer17, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5); + wxButton* itemButton17 = new wxButton( itemDialog1, ID_STOP_CONTROL_DRC, _("Stop Drc"), wxDefaultPosition, wxDefaultSize, 0 ); + itemButton17->SetForegroundColour(wxColour(0, 128, 128)); + itemBoxSizer15->Add(itemButton17, 0, wxGROW|wxALL, 5); - wxButton* itemButton18 = new wxButton( itemDialog1, ID_ERASE_DRC_MARKERS, _("Del Markers"), wxDefaultPosition, wxDefaultSize, 0 ); - itemButton18->SetForegroundColour(wxColour(0, 128, 0)); - itemBoxSizer17->Add(itemButton18, 0, wxGROW|wxALL, 5); + wxBoxSizer* itemBoxSizer18 = new wxBoxSizer(wxVERTICAL); + itemBoxSizer14->Add(itemBoxSizer18, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5); - wxButton* itemButton19 = new wxButton( itemDialog1, ID_LIST_UNCONNECTED_PADS, _("List Unconn"), wxDefaultPosition, wxDefaultSize, 0 ); - itemButton19->SetForegroundColour(wxColour(0, 0, 255)); - itemBoxSizer17->Add(itemButton19, 0, wxGROW|wxALL, 5); + wxButton* itemButton19 = new wxButton( itemDialog1, ID_ERASE_DRC_MARKERS, _("Del Markers"), wxDefaultPosition, wxDefaultSize, 0 ); + itemButton19->SetForegroundColour(wxColour(0, 128, 0)); + itemBoxSizer18->Add(itemButton19, 0, wxGROW|wxALL, 5); - wxButton* itemButton20 = new wxButton( itemDialog1, wxID_CLOSE, _("&Close"), wxDefaultPosition, wxDefaultSize, 0 ); - itemBoxSizer12->Add(itemButton20, 0, wxGROW|wxALL, 5); + wxButton* itemButton20 = new wxButton( itemDialog1, ID_LIST_UNCONNECTED_PADS, _("List Unconn"), wxDefaultPosition, wxDefaultSize, 0 ); + itemButton20->SetForegroundColour(wxColour(0, 0, 255)); + itemBoxSizer18->Add(itemButton20, 0, wxGROW|wxALL, 5); - wxStaticText* itemStaticText21 = new wxStaticText( itemDialog1, wxID_STATIC, _("Messages:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_MainSizer->Add(itemStaticText21, 0, wxGROW|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5); + wxButton* itemButton21 = new wxButton( itemDialog1, wxID_CLOSE, _("&Close"), wxDefaultPosition, wxDefaultSize, 0 ); + itemBoxSizer13->Add(itemButton21, 0, wxGROW|wxALL, 5); + + wxStaticBox* itemStaticBoxSizer22Static = new wxStaticBox(itemDialog1, wxID_ANY, _("Report File")); + wxStaticBoxSizer* itemStaticBoxSizer22 = new wxStaticBoxSizer(itemStaticBoxSizer22Static, wxVERTICAL); + itemBoxSizer13->Add(itemStaticBoxSizer22, 0, wxGROW|wxALL, 5); + + wxButton* itemButton23 = new wxButton( itemDialog1, ID_BUTTON_BROWSE_RPT_FILE, _("Browse"), wxDefaultPosition, wxDefaultSize, 0 ); + itemButton23->SetForegroundColour(wxColour(0, 128, 128)); + itemStaticBoxSizer22->Add(itemButton23, 0, wxALIGN_LEFT|wxALL, 5); + + m_RptFilenameCtrl = new wxTextCtrl( itemDialog1, ID_TEXTCTRL_GET_RPT_FILENAME, _T(""), wxDefaultPosition, wxDefaultSize, 0 ); + itemStaticBoxSizer22->Add(m_RptFilenameCtrl, 0, wxGROW|wxALL, 5); + + wxStaticText* itemStaticText25 = new wxStaticText( itemDialog1, wxID_STATIC, _("Messages:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_MainSizer->Add(itemStaticText25, 0, wxGROW|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5); m_logWindow = new wxTextCtrl( itemDialog1, ID_TEXTCTRL, _T(""), wxDefaultPosition, wxSize(-1, 200), wxTE_MULTILINE|wxTE_READONLY ); m_MainSizer->Add(m_logWindow, 0, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5); @@ -203,9 +222,12 @@ void WinEDA_DrcFrame::CreateControls() m_Pad2PadTestCtrl->SetValidator( wxGenericValidator(& s_Pad2PadTestOpt) ); m_UnconnectedTestCtrl->SetValidator( wxGenericValidator(& s_UnconnectedTestOpt) ); m_ZonesTestCtrl->SetValidator( wxGenericValidator(& s_ZonesTestOpt) ); + m_CreateRptCtrl->SetValidator( wxGenericValidator(& s_CreateRptFileOpt) ); ////@end WinEDA_DrcFrame content construction AddUnitSymbol(*m_ClearenceTitle); + m_RptFilenameCtrl->SetValue(s_RptFilename); + } /*! @@ -288,6 +310,7 @@ void WinEDA_DrcFrame::OnCloseClick( wxCommandEvent& event ) s_Pad2PadTestOpt = m_Pad2PadTestCtrl->IsChecked(); s_UnconnectedTestOpt = m_UnconnectedTestCtrl->IsChecked(); s_ZonesTestOpt = m_ZonesTestCtrl->IsChecked(); + s_CreateRptFileOpt = m_CreateRptCtrl->IsChecked(); Close(); } @@ -304,6 +327,35 @@ void WinEDA_DrcFrame::OnCloseWindow( wxCloseEvent& event ) s_Pad2PadTestOpt = m_Pad2PadTestCtrl->IsChecked(); s_UnconnectedTestOpt = m_UnconnectedTestCtrl->IsChecked(); s_ZonesTestOpt = m_ZonesTestCtrl->IsChecked(); + s_CreateRptFileOpt = m_CreateRptCtrl->IsChecked(); event.Skip(); } + +/*! + * wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_BUTTON_BROWSE_RPT_FILE + */ + +void WinEDA_DrcFrame::OnButtonBrowseRptFileClick( wxCommandEvent& event ) +{ +wxString FileName, Mask(wxT("*")), Ext(wxT(".rpt")); + + FileName = m_Parent->m_CurrentScreen->m_FileName; + ChangeFileNameExt(FileName, wxT("-drc") + Ext); + Mask += Ext; + + FileName = EDA_FileSelector(_("Drill Report file"), + wxEmptyString, /* Chemin par defaut */ + FileName, /* nom fichier par defaut */ + Ext, /* extension par defaut */ + Mask, /* Masque d'affichage */ + this, + wxFD_SAVE, + TRUE + ); + if ( FileName.IsEmpty()) return; + + m_RptFilenameCtrl->SetValue(FileName); + s_RptFilename = FileName; +} + diff --git a/pcbnew/dialog_drc.h b/pcbnew/dialog_drc.h index 01741412d1..53f1142e23 100644 --- a/pcbnew/dialog_drc.h +++ b/pcbnew/dialog_drc.h @@ -44,10 +44,13 @@ class wxBoxSizer; #define ID_CHECKBOX_PAD2PAD 10009 #define ID_CHECKBOX 10008 #define ID_CHECKBOX_TEST_ZONES 10007 +#define ID_CHECKBOX_CREATE_FILE 10012 #define ID_DRC_RUN 10003 #define ID_STOP_CONTROL_DRC 10004 #define ID_ERASE_DRC_MARKERS 10005 #define ID_LIST_UNCONNECTED_PADS 10006 +#define ID_BUTTON_BROWSE_RPT_FILE 10011 +#define ID_TEXTCTRL_GET_RPT_FILENAME 10010 #define ID_TEXTCTRL 10001 #define SYMBOL_WINEDA_DRCFRAME_STYLE wxCAPTION|wxRESIZE_BORDER|wxSYSTEM_MENU|wxCLOSE_BOX #define SYMBOL_WINEDA_DRCFRAME_TITLE _("DRC Control") @@ -105,6 +108,9 @@ public: /// wxEVT_COMMAND_BUTTON_CLICKED event handler for wxID_CLOSE void OnCloseClick( wxCommandEvent& event ); + /// wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_BUTTON_BROWSE_RPT_FILE + void OnButtonBrowseRptFileClick( wxCommandEvent& event ); + ////@end WinEDA_DrcFrame event handler declarations ////@begin WinEDA_DrcFrame member function declarations @@ -131,6 +137,8 @@ public: wxCheckBox* m_Pad2PadTestCtrl; wxCheckBox* m_UnconnectedTestCtrl; wxCheckBox* m_ZonesTestCtrl; + wxCheckBox* m_CreateRptCtrl; + wxTextCtrl* m_RptFilenameCtrl; wxTextCtrl* m_logWindow; ////@end WinEDA_DrcFrame member variables WinEDA_PcbFrame * m_Parent; diff --git a/pcbnew/drc.cpp b/pcbnew/drc.cpp index e06ab440de..6d34840eab 100644 --- a/pcbnew/drc.cpp +++ b/pcbnew/drc.cpp @@ -17,15 +17,17 @@ class WinEDA_DrcFrame; WinEDA_DrcFrame * DrcFrame; /* saving drc options */ -bool s_Pad2PadTestOpt = true; -bool s_UnconnectedTestOpt = true; -bool s_ZonesTestOpt = false; +static bool s_Pad2PadTestOpt = true; +static bool s_UnconnectedTestOpt = true; +static bool s_ZonesTestOpt = false; +static bool s_CreateRptFileOpt = false; +static FILE * s_RptFile = NULL; +static wxString s_RptFilename; - -int NumberOfErrors; +static int ErrorsDRC_Count; static MARQUEUR * current_marqueur; /* Pour gestion des marqueurs sur pcb */ -bool AbortDrc, DrcInProgress = FALSE; +static bool AbortDrc, DrcInProgress = FALSE; static int spot_cX, spot_cY; /* position d'elements a tester */ static int finx, finy; // coord relatives de l'extremite du segm de reference static int segm_angle; // angle d'inclinaison du segment de reference en 0,1 degre @@ -68,7 +70,10 @@ int ii; wxString msg; float convert = 0.0001; - m_logWindow->AppendText(_("Look for active routes\n")); + msg = _("Look for active routes\n"); + m_logWindow->AppendText(msg); + if ( s_RptFile ) fprintf(s_RptFile, "%s", CONV_TO_UTF8(msg) ); + m_UnconnectedCount = 0; for( ii = m_Parent->m_Pcb->GetNumRatsnests() ;ii > 0; Ratsnest++, ii--) { @@ -82,6 +87,7 @@ float convert = 0.0001; msg.Printf(_("%d > Pad %s (%s) @ %.4f,%.4f and "), m_UnconnectedCount, pad_name.GetData(), module_name.GetData(), pad->m_Pos.x * convert, pad->m_Pos.y * convert); m_logWindow->AppendText(msg); + if ( s_RptFile ) fprintf(s_RptFile, "%s", CONV_TO_UTF8(msg) ); pad = Ratsnest->pad_end; pad->Draw(panel, m_DC, wxPoint(0,0),draw_mode); @@ -90,11 +96,13 @@ float convert = 0.0001; msg.Printf(_("Pad %s (%s) @ %.4f,%.4f\n"), pad_name.GetData(), module_name.GetData(), pad->m_Pos.x * convert, pad->m_Pos.y * convert); m_logWindow->AppendText(msg); + if ( s_RptFile ) fprintf(s_RptFile, "%s", CONV_TO_UTF8(msg) ); } if ( m_UnconnectedCount ) msg.Printf(_("Active routes: %d\n"), m_UnconnectedCount); else msg = _("OK! (No active routes)\n"); m_logWindow->AppendText(msg); + if ( s_RptFile ) fprintf(s_RptFile, "%s", CONV_TO_UTF8(msg) ); } @@ -104,8 +112,24 @@ void WinEDA_DrcFrame::TestDrc(wxCommandEvent & event) { int errors; wxString msg; + if ( ! DrcInProgress ) { + if ( m_CreateRptCtrl->IsChecked() ) // Create a file rpt + { + s_RptFilename = m_RptFilenameCtrl->GetValue(); + if ( s_RptFilename.IsEmpty() ) OnButtonBrowseRptFileClick( event ); + if ( ! s_RptFilename.IsEmpty() ) s_RptFile = wxFopen(s_RptFilename, wxT("w")); + else s_RptFile = NULL; + } + + if ( s_RptFile ) + { + fprintf(s_RptFile, "Drc report for %s\n", CONV_TO_UTF8(m_Parent->m_CurrentScreen->m_FileName) ); + char line[256]; + fprintf(s_RptFile, "Created on %s\n", DateAndTime(line)); + } + s_Pad2PadTestOpt = m_Pad2PadTestCtrl->IsChecked(); s_UnconnectedTestOpt = m_UnconnectedTestCtrl->IsChecked(); s_ZonesTestOpt = m_ZonesTestCtrl->IsChecked(); @@ -123,6 +147,17 @@ wxString msg; else if ( m_UnconnectedCount == 0 ) msg = _("** End Drc: No Error **\n"); m_logWindow->AppendText(msg); + + if ( s_RptFile ) fprintf(s_RptFile, "%s", CONV_TO_UTF8(msg) ); + + if ( s_RptFile ) + { + msg.Printf( _("Report file <%s> created\n"), s_RptFilename.GetData()); + m_logWindow->AppendText(msg); + fclose(s_RptFile); + s_RptFile = NULL; + } + } else wxBell(); } @@ -180,7 +215,7 @@ wxString Line; #define PRINT_ZONE_ERR_POS 70 DrcInProgress = TRUE; - NumberOfErrors = 0; + ErrorsDRC_Count = 0; Compile_Ratsnest(DC, TRUE); MsgPanel->EraseMsgBox(); @@ -217,9 +252,9 @@ wxString Line; if( Marqueur == NULL ) { DisplayError(this, wxT("Test_Drc(): internal err")); - return NumberOfErrors; + return ErrorsDRC_Count; } - Line.Printf( wxT("%d"),NumberOfErrors) ; + Line.Printf( wxT("%d"),ErrorsDRC_Count) ; Affiche_1_Parametre(this, PRINT_PAD_ERR_POS,wxEmptyString,Line, LIGHTRED); Marqueur->Pnext = m_Pcb->m_Drawings; Marqueur->Pback = m_Pcb; @@ -275,7 +310,7 @@ wxString Line; if( Marqueur == NULL ) { DisplayError(this, wxT("Test_Drc(): internal err")); - return NumberOfErrors; + return ErrorsDRC_Count; } Marqueur->Pnext = m_Pcb->m_Drawings; Marqueur->Pback = m_Pcb; @@ -286,7 +321,7 @@ wxString Line; GRSetDrawMode(DC, GR_OR); pt_segm->Draw(DrawPanel, DC, RED^LIGHTRED ); - Line.Printf( wxT("%d"),NumberOfErrors); + Line.Printf( wxT("%d"),ErrorsDRC_Count); Affiche_1_Parametre(this, PRINT_TRACK_ERR_POS,wxEmptyString,Line, LIGHTRED); } } @@ -340,7 +375,7 @@ wxString Line; if( Marqueur == NULL ) { DisplayError(this, wxT("Test_Drc(): internal err")); - return NumberOfErrors; + return ErrorsDRC_Count; } Marqueur->Pnext = m_Pcb->m_Drawings; Marqueur->Pback = m_Pcb; @@ -351,7 +386,7 @@ wxString Line; GRSetDrawMode(DC, GR_OR); pt_segm->Draw(DrawPanel, DC, RED^LIGHTRED ); - Line.Printf( wxT("%d"),NumberOfErrors); + Line.Printf( wxT("%d"),ErrorsDRC_Count); Affiche_1_Parametre(this, PRINT_ZONE_ERR_POS, wxEmptyString, Line, LIGHTRED); } @@ -366,7 +401,7 @@ wxString Line; if( Marqueur == NULL ) { DisplayError(this, wxT("Test_Drc(): internal err")); - return NumberOfErrors; + return ErrorsDRC_Count; } Marqueur->Pnext = m_Pcb->m_Drawings; Marqueur->Pback = m_Pcb; @@ -377,7 +412,7 @@ wxString Line; GRSetDrawMode(DC, GR_OR); pt_segm->Draw(DrawPanel, DC, RED^LIGHTRED ); - Line.Printf( wxT("%d"),NumberOfErrors); + Line.Printf( wxT("%d"),ErrorsDRC_Count); Affiche_1_Parametre(this, PRINT_ZONE_ERR_POS, wxEmptyString, Line, LIGHTRED); } } @@ -386,7 +421,7 @@ wxString Line; AbortDrc = FALSE; DrcInProgress = FALSE; - return NumberOfErrors; + return ErrorsDRC_Count; } @@ -462,7 +497,7 @@ wxPoint shape_pos; spot_cY = pseudo_pad.m_Pos.y - org_Y; if( TestClearanceSegmToPad(&pseudo_pad, w_dist, g_DesignSettings.m_TrackClearence) != OK_DRC ) { - NumberOfErrors++; + ErrorsDRC_Count++; if( show_err ) Affiche_Erreur_DRC(frame->DrawPanel, DC, frame->m_Pcb, pt_segment,pt_pad,0); @@ -485,7 +520,7 @@ wxPoint shape_pos; /* extremite sur pad ou defaut d'isolation trouve */ else { - NumberOfErrors++; + ErrorsDRC_Count++; if( show_err ) Affiche_Erreur_DRC(frame->DrawPanel, DC, frame->m_Pcb, pt_segment,pt_pad,1); @@ -527,7 +562,7 @@ wxPoint shape_pos; { if( (int)hypot((float)x0,(float)y0) < w_dist ) { - NumberOfErrors++; + ErrorsDRC_Count++; if( show_err) Affiche_Erreur_DRC(frame->DrawPanel, DC, frame->m_Pcb, pt_segment,pttrack,21); return(BAD_DRC) ; @@ -544,7 +579,7 @@ wxPoint shape_pos; if( TestMarginToCircle(x0, y0, w_dist, dx) == BAD_DRC ) { - NumberOfErrors++; + ErrorsDRC_Count++; if(show_err) Affiche_Erreur_DRC(frame->DrawPanel, DC, frame->m_Pcb, pt_segment,pttrack,20); return(BAD_DRC) ; @@ -563,7 +598,7 @@ wxPoint shape_pos; if ( pttrack->m_StructType == TYPEVIA ) { if( TestMarginToCircle(x0, y0,w_dist,segm_long) == OK_DRC) continue; - NumberOfErrors++; + ErrorsDRC_Count++; if(show_err) Affiche_Erreur_DRC(frame->DrawPanel, DC, frame->m_Pcb, pt_segment,pttrack,21); return(BAD_DRC) ; @@ -584,14 +619,14 @@ wxPoint shape_pos; /* test fin tenant compte des formes arrondies des extremites */ if ( x0 >= 0 && x0 <= segm_long ) { - NumberOfErrors++; + ErrorsDRC_Count++; if ( show_err ) Affiche_Erreur_DRC(frame->DrawPanel, DC, frame->m_Pcb, pt_segment,pttrack,2); return(BAD_DRC) ; } if( TestMarginToCircle(x0, y0, w_dist,segm_long) == BAD_DRC) { - NumberOfErrors++; + ErrorsDRC_Count++; if(show_err) Affiche_Erreur_DRC(frame->DrawPanel, DC, frame->m_Pcb, pt_segment,pttrack,2); return(BAD_DRC) ; @@ -602,14 +637,14 @@ wxPoint shape_pos; /* test fin tenant compte des formes arrondies des extremites */ if ( xf >= 0 && xf <= segm_long ) { - NumberOfErrors++; + ErrorsDRC_Count++; if(show_err) Affiche_Erreur_DRC(frame->DrawPanel, DC, frame->m_Pcb, pt_segment,pttrack,3); return(BAD_DRC) ; } if( TestMarginToCircle(xf, yf, w_dist,segm_long) == BAD_DRC) { - NumberOfErrors++; + ErrorsDRC_Count++; if(show_err) Affiche_Erreur_DRC(frame->DrawPanel, DC, frame->m_Pcb, pt_segment,pttrack,3); return(BAD_DRC) ; @@ -618,7 +653,7 @@ wxPoint shape_pos; if ( x0 <=0 && xf >= 0 ) { - NumberOfErrors++; + ErrorsDRC_Count++; if(show_err) Affiche_Erreur_DRC(frame->DrawPanel, DC, frame->m_Pcb, pt_segment,pttrack,4); return(BAD_DRC) ; @@ -633,7 +668,7 @@ wxPoint shape_pos; if( y0 > yf ) EXCHG(y0, yf); if( (y0 < 0) && (yf > 0) ) { - NumberOfErrors++; + ErrorsDRC_Count++; if( show_err) Affiche_Erreur_DRC(frame->DrawPanel, DC, frame->m_Pcb, pt_segment,pttrack,6); return(BAD_DRC); @@ -643,14 +678,14 @@ wxPoint shape_pos; de reference */ if(TestMarginToCircle(x0,y0,w_dist,segm_long) == BAD_DRC) { - NumberOfErrors++; + ErrorsDRC_Count++; if(show_err) Affiche_Erreur_DRC(frame->DrawPanel, DC, frame->m_Pcb, pt_segment,pttrack,7); return(BAD_DRC) ; } if(TestMarginToCircle(xf,yf,w_dist,segm_long) == BAD_DRC) { - NumberOfErrors++; + ErrorsDRC_Count++; if(show_err) Affiche_Erreur_DRC(frame->DrawPanel, DC, frame->m_Pcb, pt_segment,pttrack,8); return(BAD_DRC) ; @@ -677,7 +712,7 @@ wxPoint shape_pos; if(bflag == BAD_DRC) { - NumberOfErrors++; + ErrorsDRC_Count++; if(show_err) Affiche_Erreur_DRC(frame->DrawPanel, DC, frame->m_Pcb, pt_segment,pttrack,9); return(BAD_DRC) ; @@ -705,14 +740,14 @@ wxPoint shape_pos; RotatePoint(&rxf,&ryf, angle); if(TestMarginToCircle(rx0,ry0,w_dist,dx) == BAD_DRC) { - NumberOfErrors++; + ErrorsDRC_Count++; if(show_err) Affiche_Erreur_DRC(frame->DrawPanel, DC, frame->m_Pcb, pt_segment,pttrack,10); return(BAD_DRC) ; } if(TestMarginToCircle(rxf,ryf,w_dist,dx) == BAD_DRC) { - NumberOfErrors++; + ErrorsDRC_Count++; if(show_err) Affiche_Erreur_DRC(frame->DrawPanel, DC, frame->m_Pcb, pt_segment,pttrack,11); return(BAD_DRC) ; @@ -765,7 +800,7 @@ LISTE_PAD * pad_list = start_buffer; if( Pad_to_Pad_Isol(pad_ref, pad, g_DesignSettings.m_TrackClearence) == OK_DRC ) continue ; else /* defaut d'isolation trouve */ { - NumberOfErrors++; + ErrorsDRC_Count++; if( show_err ) Affiche_Erreur_DRC(frame->DrawPanel, DC, frame->m_Pcb, pad_ref, pad); return(BAD_DRC); @@ -1106,29 +1141,46 @@ static void Affiche_Erreur_DRC(WinEDA_DrawPanel * panel, wxDC * DC, BOARD * Pcb, */ { wxPoint erc_pos; -D_PAD * pad; TRACK * pt_segm; wxString msg; +wxString tracktype, netname1, netname2; +EQUIPOT * equipot = GetEquipot(Pcb, pt_ref->m_NetCode); + if ( equipot ) netname1 = equipot->m_Netname; + else netname1 = wxT(""); + netname2 = wxT(""); + + tracktype = wxT("Track"); + if ( pt_ref->m_StructType == TYPEVIA ) tracktype = wxT("Via"); + if ( pt_ref->m_StructType == TYPEZONE ) tracktype = wxT("Zone"); + if( ((EDA_BaseStruct*)pt_item)->m_StructType == TYPEPAD ) { - pad = (D_PAD*) pt_item; + D_PAD * pad = (D_PAD*) pt_item; + equipot = GetEquipot(Pcb, pad->m_NetCode); + if ( equipot ) netname2 = equipot->m_Netname; erc_pos = pad->m_Pos; wxString pad_name = pad->ReturnStringPadName(); wxString module_name = ((MODULE*)(pad->m_Parent))->m_Reference->m_Text; - msg.Printf(_("%d Drc Err %d PAD %s (%s) @ %d,%d\n"), - NumberOfErrors, errnumber, + msg.Printf(_("%d Drc Err %d %s (net %s)and PAD %s (%s) net %s @ %d,%d\n"), + ErrorsDRC_Count, errnumber, tracktype.GetData(), + netname1.GetData(), pad_name.GetData(), module_name.GetData(), + netname2.GetData(), erc_pos.x, erc_pos.y); } else /* erreur sur segment de piste */ { pt_segm = (TRACK *) pt_item; + equipot = GetEquipot(Pcb, pt_segm->m_NetCode); + if ( equipot ) netname2 = equipot->m_Netname; erc_pos = pt_segm->m_Start; if(pt_segm->m_StructType == TYPEVIA) { - msg.Printf(_("%d Err type %d: sur VIA @ %d,%d\n"), - NumberOfErrors, errnumber,erc_pos.x,erc_pos.y); + msg.Printf(_("%d Err type %d: %s (net %s) and VIA (net %s) @ %d,%d\n"), + ErrorsDRC_Count, errnumber, tracktype.GetData(), + netname1.GetData(), netname2.GetData(), + erc_pos.x,erc_pos.y); } else { @@ -1138,13 +1190,16 @@ wxString msg; { EXCHG(erc_pos_f.x, erc_pos.x); EXCHG(erc_pos_f.y, erc_pos.y); } - msg.Printf(_("%d Err type %d: sur SEGMENT @ %d,%d\n"), - NumberOfErrors, errnumber,erc_pos.x,erc_pos.y); + msg.Printf(_("%d Err type %d: %s (net %s) and track (net %s) @ %d,%d\n"), + ErrorsDRC_Count, errnumber, tracktype.GetData(), + netname1.GetData(), netname2.GetData(), + erc_pos.x,erc_pos.y); } } if ( DrcFrame ) DrcFrame->m_logWindow->AppendText(msg); else panel->m_Parent->Affiche_Message(msg); + if ( s_RptFile ) fprintf(s_RptFile, "%s", CONV_TO_UTF8(msg) ); if(current_marqueur == NULL) current_marqueur = new MARQUEUR(Pcb); current_marqueur->m_Pos = wxPoint(erc_pos.x, erc_pos.y); @@ -1172,12 +1227,22 @@ wxString msg; wxString module_name1 = ((MODULE*)(pad1->m_Parent))->m_Reference->m_Text; wxString pad_name2 = pad2->ReturnStringPadName(); wxString module_name2 = ((MODULE*)(pad2->m_Parent))->m_Reference->m_Text; + wxString netname1, netname2; + EQUIPOT * equipot = GetEquipot(Pcb, pad1->m_NetCode); + if ( equipot ) netname1 = equipot->m_Netname; + else netname1 = wxT(""); + equipot = GetEquipot(Pcb, pad2->m_NetCode); + if ( equipot ) netname2 = equipot->m_Netname; + else netname2 = wxT(""); - msg.Printf( _("%d Drc Err: PAD %s (%s) @ %d,%d and PAD %s (%s) @ %d,%d\n"), - NumberOfErrors, pad_name1.GetData(), module_name1.GetData(), pad1->m_Pos.x,pad1->m_Pos.y, - pad_name2.GetData(), module_name2.GetData(), pad2->m_Pos.x, pad2->m_Pos.y); + msg.Printf( _("%d Drc Err: PAD %s (%s) net %s @ %d,%d and PAD %s (%s) net %s @ %d,%d\n"), + ErrorsDRC_Count, pad_name1.GetData(), module_name1.GetData(), + netname1.GetData(), pad1->m_Pos.x,pad1->m_Pos.y, + pad_name2.GetData(), module_name2.GetData(), + netname2.GetData(), pad2->m_Pos.x, pad2->m_Pos.y); if ( DrcFrame ) DrcFrame->m_logWindow->AppendText(msg); else panel->m_Parent->Affiche_Message(msg); + if ( s_RptFile ) fprintf(s_RptFile, "%s", CONV_TO_UTF8(msg) ); if(current_marqueur == NULL) current_marqueur = new MARQUEUR(Pcb); current_marqueur->m_Pos = pad1->m_Pos; diff --git a/pcbnew/drc_dialog.pjd b/pcbnew/drc_dialog.pjd index 75d4eba6e1..e4016db2c6 100644 --- a/pcbnew/drc_dialog.pjd +++ b/pcbnew/drc_dialog.pjd @@ -716,6 +716,64 @@ "" "" + + "wxCheckBox: ID_CHECKBOX_CREATE_FILE" + "dialog-control-document" + "" + "checkbox" + 0 + 1 + 0 + 0 + "2/8/2007" + "wbCheckBoxProxy" + "ID_CHECKBOX_CREATE_FILE" + 10012 + "wxCheckBox" + "wxCheckBox" + 1 + 0 + "" + "" + "m_CreateRptCtrl" + "Create Report file" + 0 + "" + "" + "s_CreateRptFileOpt" + "wxGenericValidator(& %VARIABLE%)" + "" + "" + "" + 0 + 1 + "<Any platform>" + 0 + 0 + 0 + 0 + 0 + 0 + 0 + "" + -1 + -1 + -1 + -1 + "Expand" + "Centre" + 0 + 5 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + "" + "" + @@ -1116,6 +1174,175 @@ "" "" + + "wxStaticBoxSizer V" + "dialog-control-document" + "" + "sizer" + 0 + 1 + 0 + 0 + "2/8/2007" + "wbStaticBoxSizerProxy" + "wxID_ANY" + -1 + "Report File" + "" + "" + "" + "" + 0 + 1 + "wxStaticBox" + "Vertical" + "Expand" + "Centre" + 0 + 5 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + "<Any platform>" + + "wxButton: ID_BUTTON_BROWSE_RPT_FILE" + "dialog-control-document" + "" + "dialogcontrol" + 0 + 1 + 0 + 0 + "2/8/2007" + "wbButtonProxy" + "wxEVT_COMMAND_BUTTON_CLICKED|OnButtonBrowseRptFileClick|NONE||" + "ID_BUTTON_BROWSE_RPT_FILE" + 10011 + "wxButton" + "wxButton" + 1 + 0 + "" + "" + "" + "Browse" + 0 + "" + "" + "" + "008080" + "" + 0 + 1 + "<Any platform>" + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + "" + -1 + -1 + -1 + -1 + "Left" + "Centre" + 0 + 5 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + "" + "" + + + "wxTextCtrl: ID_TEXTCTRL_GET_RPT_FILENAME" + "dialog-control-document" + "" + "textctrl" + 0 + 1 + 0 + 0 + "2/8/2007" + "wbTextCtrlProxy" + "ID_TEXTCTRL_GET_RPT_FILENAME" + 10010 + "wxTextCtrl" + "wxTextCtrl" + 1 + 0 + "" + "" + "m_RptFilenameCtrl" + "" + 0 + "" + "" + "" + "" + "" + 0 + 1 + "<Any platform>" + "" + "" + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + "" + -1 + -1 + -1 + -1 + "Expand" + "Centre" + 0 + 5 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + "" + "" + +