diff --git a/change_log.txt b/change_log.txt index 503f8e6f24..e0920ce33e 100644 --- a/change_log.txt +++ b/change_log.txt @@ -5,6 +5,18 @@ Started 2007-June-11 Please add newer entries at the top, list the date and your name with email address. + +2008-Sep-26 UPDATE Jean-Pierre Charras +================================================================================ ++pcbnew: + Starting work to use polygons in zone fill algos. + Currently, use this to add zone on non copper layers (technical layers) + Only for eyes. + Plot outputs do not handle this. + Problems with holes in zones. + Also: first used of wxFormBuilder + + 2008-Sep-17 UPDATE Jean-Pierre Charras ================================================================================ +pcbnew: diff --git a/eeschema/class_pin.cpp b/eeschema/class_pin.cpp index 4900a824c1..8dc6d3581f 100644 --- a/eeschema/class_pin.cpp +++ b/eeschema/class_pin.cpp @@ -727,42 +727,41 @@ wxPoint LibDrawPin::ReturnPinEndPoint() int LibDrawPin::ReturnPinDrawOrient( int TransMat[2][2] ) /********************************************************/ -/* Return the pin real orientation (PIN_UP, PIN_DOWN, PIN_RIGHT, PIN_LEFT), - * according to its orientation, - * AND the matrix transform (rot, mirror) TransMat +/** Function ReturnPinDrawOrient + * Return the pin real orientation (PIN_UP, PIN_DOWN, PIN_RIGHT, PIN_LEFT), + * according to its orientation and the matrix transform (rot, mirror) TransMat + * @param TransMat = transform matrix */ { int orient; - int x1 = 0, y1 = 0; - int t1, t2; + wxPoint end; // position of a end pin starting at 0,0 according to its orientation, lenght = 1 switch( m_Orient ) { case PIN_UP: - y1 = 1; break; + end.y = 1; break; case PIN_DOWN: - y1 = -1; break; + end.y = -1; break; case PIN_LEFT: - x1 = -1; break; + end.x = -1; break; case PIN_RIGHT: - x1 = 1; break; + end.x = 1; break; } - t1 = TransMat[0][0] * x1 + TransMat[0][1] * y1; - t2 = TransMat[1][0] * x1 + TransMat[1][1] * y1; + end = TransformCoordinate( TransMat, end ); // = pos of end point, accordint to the component orientation orient = PIN_UP; - if( t1 == 0 ) + if( end.x == 0 ) { - if( t2 > 0 ) + if( end.y > 0 ) orient = PIN_DOWN; } else { orient = PIN_RIGHT; - if( t1 < 0 ) + if( end.x < 0 ) orient = PIN_LEFT; } diff --git a/internat/fr/kicad.mo b/internat/fr/kicad.mo index 50090d2b04..691a5b8276 100644 Binary files a/internat/fr/kicad.mo and b/internat/fr/kicad.mo differ diff --git a/internat/fr/kicad.po b/internat/fr/kicad.po index 9b7cf58777..fec0010bfa 100644 --- a/internat/fr/kicad.po +++ b/internat/fr/kicad.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: kicad\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-09-08 19:19+0100\n" -"PO-Revision-Date: 2008-09-08 19:21+0100\n" +"POT-Creation-Date: 2008-09-23 21:02+0100\n" +"PO-Revision-Date: 2008-09-23 21:02+0100\n" "Last-Translator: \n" "Language-Team: kicad team \n" "MIME-Version: 1.0\n" @@ -688,6 +688,33 @@ msgstr "Connecte une extrémité de piste en l'air, lorsque elle couvre un pad o msgid "Clean pcb" msgstr "Nettoyage PCB" +#: pcbnew/plot_rtn.cpp:224 +#, c-format +msgid "" +"Your BOARD has a bad layer number of %u for module\n" +" %s's \"reference\" text." +msgstr "" +"Votre PCB a un mauvais numero de couche %u pour le module\n" +" %s's \"reference\"." + +#: pcbnew/plot_rtn.cpp:244 +#, c-format +msgid "" +"Your BOARD has a bad layer number of %u for module\n" +" %s's \"value\" text." +msgstr "" +"Votre PCB a un mauvais numero de couche %u pour le module\n" +" %s's \"valeur\"." + +#: pcbnew/plot_rtn.cpp:290 +#, c-format +msgid "" +"Your BOARD has a bad layer number of %u for module\n" +" %s's \"module text\" text of %s." +msgstr "" +"Votre PCB a un mauvais numero de couche %u pour le module\n" +" %s's \"texte module\" de %s." + #: pcbnew/controle.cpp:172 msgid "Selection Clarification" msgstr "Clarification de la Sélection" @@ -697,8 +724,8 @@ msgid "Dimension properties" msgstr "Propriétés des Cotes" #: pcbnew/cotation.cpp:113 -#: pcbnew/dialog_edit_module.cpp:267 -#: pcbnew/dialog_edit_module.cpp:313 +#: pcbnew/dialog_edit_module.cpp:270 +#: pcbnew/dialog_edit_module.cpp:316 msgid "Normal" msgstr "Normal" @@ -985,83 +1012,83 @@ msgstr "Propriétés" msgid "3D settings" msgstr "3D Caract" -#: pcbnew/dialog_edit_module.cpp:171 +#: pcbnew/dialog_edit_module.cpp:184 msgid "X" msgstr "X" -#: pcbnew/dialog_edit_module.cpp:172 +#: pcbnew/dialog_edit_module.cpp:185 msgid "Y" msgstr "Y" -#: pcbnew/dialog_edit_module.cpp:184 +#: pcbnew/dialog_edit_module.cpp:187 msgid "Change module(s)" msgstr "Change module(s)" -#: pcbnew/dialog_edit_module.cpp:188 +#: pcbnew/dialog_edit_module.cpp:191 msgid "Edit Module" msgstr "Edit Module" -#: pcbnew/dialog_edit_module.cpp:192 +#: pcbnew/dialog_edit_module.cpp:195 msgid "Position" msgstr "Position" -#: pcbnew/dialog_edit_module.cpp:217 +#: pcbnew/dialog_edit_module.cpp:220 msgid "Doc" msgstr "Doc" -#: pcbnew/dialog_edit_module.cpp:224 +#: pcbnew/dialog_edit_module.cpp:227 msgid "Keywords" msgstr "Mots Cles" -#: pcbnew/dialog_edit_module.cpp:231 +#: pcbnew/dialog_edit_module.cpp:234 msgid "Fields:" msgstr "Champs:" -#: pcbnew/dialog_edit_module.cpp:241 +#: pcbnew/dialog_edit_module.cpp:244 msgid "Add Field" msgstr "Ajouter Champ" -#: pcbnew/dialog_edit_module.cpp:246 +#: pcbnew/dialog_edit_module.cpp:249 msgid "Edit Field" msgstr "Editer Champ" -#: pcbnew/dialog_edit_module.cpp:251 +#: pcbnew/dialog_edit_module.cpp:254 msgid "Delete Field" msgstr "Supprimer Champ" -#: pcbnew/dialog_edit_module.cpp:258 +#: pcbnew/dialog_edit_module.cpp:261 msgid "Component" msgstr "Composant" -#: pcbnew/dialog_edit_module.cpp:258 +#: pcbnew/dialog_edit_module.cpp:261 msgid "Copper" msgstr "Cuivre" -#: pcbnew/dialog_edit_module.cpp:267 +#: pcbnew/dialog_edit_module.cpp:270 msgid "User" msgstr "User" -#: pcbnew/dialog_edit_module.cpp:303 +#: pcbnew/dialog_edit_module.cpp:306 msgid "Orient (0.1 deg)" msgstr "Orient (0.1 deg)" -#: pcbnew/dialog_edit_module.cpp:313 +#: pcbnew/dialog_edit_module.cpp:316 msgid "Normal+Insert" msgstr "Normal+Insert" -#: pcbnew/dialog_edit_module.cpp:313 +#: pcbnew/dialog_edit_module.cpp:316 msgid "Virtual" msgstr "Virtuel" -#: pcbnew/dialog_edit_module.cpp:314 +#: pcbnew/dialog_edit_module.cpp:317 msgid "Attributes" msgstr "Attributs" -#: pcbnew/dialog_edit_module.cpp:317 +#: pcbnew/dialog_edit_module.cpp:320 msgid "Use this attribute for most non smd components" msgstr "Utiliser cet attribut pour la plupart des composants" -#: pcbnew/dialog_edit_module.cpp:319 +#: pcbnew/dialog_edit_module.cpp:322 msgid "" "Use this attribute for smd components.\n" "Only components with this option are put in the footprint position list file" @@ -1069,75 +1096,75 @@ msgstr "" "Uiliser cet attribut pour les composants CMS.\n" "Seuls les composants avec cette option sont mis dans le fichier de position des composants" -#: pcbnew/dialog_edit_module.cpp:321 +#: pcbnew/dialog_edit_module.cpp:324 msgid "Use this attribute for \"virtual\" components drawn on board (like a old ISA PC bus connector)" msgstr "Uiliser cet attribut pour les composants \"virtuels\" directement dessinés sur le PCB (tel que les vieux connecteurs ISA de PC)" -#: pcbnew/dialog_edit_module.cpp:345 +#: pcbnew/dialog_edit_module.cpp:348 msgid "Free" msgstr "Libre" -#: pcbnew/dialog_edit_module.cpp:345 +#: pcbnew/dialog_edit_module.cpp:348 msgid "Locked" msgstr "Verrouillé" -#: pcbnew/dialog_edit_module.cpp:347 +#: pcbnew/dialog_edit_module.cpp:350 msgid "Move and Auto Place" msgstr "Move et Placement Automatique" -#: pcbnew/dialog_edit_module.cpp:352 +#: pcbnew/dialog_edit_module.cpp:355 msgid "Enable hotkey move commands and Auto Placement" msgstr "Autoriser les commandes clavier de déplacement et l'auto placement" -#: pcbnew/dialog_edit_module.cpp:353 +#: pcbnew/dialog_edit_module.cpp:356 msgid "Disable hotkey move commands and Auto Placement" msgstr "Interdire les commandes clavier de déplacement et l'auto placement" -#: pcbnew/dialog_edit_module.cpp:357 +#: pcbnew/dialog_edit_module.cpp:360 msgid "Rot 90" msgstr "Rot 90" -#: pcbnew/dialog_edit_module.cpp:365 +#: pcbnew/dialog_edit_module.cpp:368 msgid "Rot 180" msgstr "Rot 180" -#: pcbnew/dialog_edit_module.cpp:402 +#: pcbnew/dialog_edit_module.cpp:405 msgid "3D Shape Name" msgstr "3D forme" -#: pcbnew/dialog_edit_module.cpp:419 +#: pcbnew/dialog_edit_module.cpp:422 msgid "Browse" msgstr "Examiner" -#: pcbnew/dialog_edit_module.cpp:423 +#: pcbnew/dialog_edit_module.cpp:426 msgid "Add 3D Shape" msgstr "Ajout Forme 3D" -#: pcbnew/dialog_edit_module.cpp:429 +#: pcbnew/dialog_edit_module.cpp:432 msgid "Remove 3D Shape" msgstr "Suppr. Forme 3D:" -#: pcbnew/dialog_edit_module.cpp:435 +#: pcbnew/dialog_edit_module.cpp:438 msgid "Shape Scale:" msgstr "Echelle de la forme:" -#: pcbnew/dialog_edit_module.cpp:442 +#: pcbnew/dialog_edit_module.cpp:445 msgid "Shape Offset:" msgstr "Offset forme:" -#: pcbnew/dialog_edit_module.cpp:451 +#: pcbnew/dialog_edit_module.cpp:454 msgid "Shape Rotation:" msgstr "Rot de la forme" -#: pcbnew/dialog_edit_module.cpp:491 +#: pcbnew/dialog_edit_module.cpp:494 msgid "3D Shape:" msgstr "Forme 3D:" -#: pcbnew/dialog_edit_module.cpp:802 +#: pcbnew/dialog_edit_module.cpp:810 msgid "Reference or Value cannot be deleted" msgstr "Référence ou Valeur ne peut etre effacée" -#: pcbnew/dialog_edit_module.cpp:806 +#: pcbnew/dialog_edit_module.cpp:814 #, c-format msgid "Delete [%s]" msgstr "Supprimer [%s]" @@ -1805,17 +1832,21 @@ msgstr "Le caractère de délimitation de ligne doit être un seul caractère ' msgid "Un-terminated delimited string" msgstr "Ligne délimitée non terminée" -#: pcbnew/edgemod.cpp:204 -msgid "The graphic item will be on a copper layer.It is very dangerous. Are you sure" -msgstr "L'élément graphique sera sur une couche cuivre. C'est très dangereux. Etes vous sûr" +#: pcbnew/modules.cpp:81 +msgid "Footprint name:" +msgstr "Nom Module: " -#: pcbnew/edgemod.cpp:246 -msgid "New Width (1/10000\"):" -msgstr "Novelle largeur (1/10000\"):" +#: pcbnew/modules.cpp:81 +msgid "Search Footprint" +msgstr "Cherche Module" -#: pcbnew/edgemod.cpp:253 -msgid "Incorrect number, no change" -msgstr "Nombre incorrect, pas de changement" +#: pcbnew/modules.cpp:305 +msgid "Delete Module" +msgstr "Supprimer Module" + +#: pcbnew/modules.cpp:306 +msgid "Value " +msgstr "Valeur " #: pcbnew/edit.cpp:179 #: pcbnew/editmod.cpp:45 @@ -1956,6 +1987,10 @@ msgid "GenCAD file:" msgstr "Fichier GenCAD:" #: pcbnew/export_gencad.cpp:83 +#: pcbnew/files.cpp:352 +#: pcbnew/gen_modules_placefile.cpp:128 +#: pcbnew/gen_modules_placefile.cpp:139 +#: pcbnew/gen_modules_placefile.cpp:292 msgid "Unable to create " msgstr "Impossible de créer " @@ -1964,7 +1999,6 @@ msgid "Recovery file " msgstr "Fichier de secours " #: pcbnew/files.cpp:56 -#: pcbnew/librairi.cpp:256 msgid " not found" msgstr " non trouvé" @@ -1981,7 +2015,6 @@ msgid "Load board files:" msgstr "Charger Fichiers C.I.:" #: pcbnew/files.cpp:188 -#: pcbnew/librairi.cpp:77 #, c-format msgid "File <%s> not found" msgstr " fichier %s non trouvé" @@ -2113,6 +2146,18 @@ msgstr "Fichier placement coté cuivre:" msgid "Module count" msgstr "Nb Modules" +#: pcbnew/surbrill.cpp:37 +msgid "Filter for net names:" +msgstr "Filtre pour nets:" + +#: pcbnew/surbrill.cpp:37 +msgid "Net Filter" +msgstr "Filtre Equipot" + +#: pcbnew/surbrill.cpp:41 +msgid "List Nets" +msgstr "Liste équipots" + #: pcbnew/globaleditpad.cpp:74 msgid "Pads Global Edit" msgstr "Pads: Edition globale" @@ -2206,123 +2251,97 @@ msgstr "Effacer Textes Pcb" msgid "Error: Unexpected end of file !" msgstr "Erreur: Fin de fichier inattendue !" -#: pcbnew/librairi.cpp:61 -msgid "Import Module:" -msgstr "Importer Module:" +#: pcbnew/muonde.cpp:149 +msgid "Gap" +msgstr "Gap" -#: pcbnew/librairi.cpp:97 -msgid "Not a module file" -msgstr "N'est pas un fichier de Modules" +#: pcbnew/muonde.cpp:154 +msgid "Stub" +msgstr "Stub" -#: pcbnew/librairi.cpp:179 -msgid "Create lib" -msgstr "Créer lib" +#: pcbnew/muonde.cpp:160 +msgid "Arc Stub" +msgstr "Arc Stub" -#: pcbnew/librairi.cpp:179 -msgid "Export Module:" -msgstr "Exporter Module:" +#: pcbnew/muonde.cpp:175 +msgid " (mm):" +msgstr " (mm):" -#: pcbnew/librairi.cpp:194 -#: pcbnew/librairi.cpp:441 -#, c-format -msgid "File %s exists, OK to replace ?" -msgstr "Fichier %s existant, OK pour remplacer ?" +#: pcbnew/muonde.cpp:176 +#: pcbnew/muonde.cpp:183 +#: pcbnew/muonde.cpp:199 +msgid "Create microwave module" +msgstr "Créer Module MicroOnde" -#: pcbnew/librairi.cpp:203 -#, c-format -msgid "Unable to create <%s>" -msgstr "Incapable de créer <%s>" +#: pcbnew/muonde.cpp:182 +msgid " (inch):" +msgstr " (pouce):" -#: pcbnew/librairi.cpp:224 -#, c-format -msgid "Module exported in file <%s>" -msgstr "Module exporté en fichier <%s>" +#: pcbnew/muonde.cpp:189 +#: pcbnew/muonde.cpp:202 +msgid "Incorrect number, abort" +msgstr "Nombre incorrect, arret" -#: pcbnew/librairi.cpp:246 -#, c-format -msgid "Ok to delete module %s in library %s" -msgstr "Ok pour effacer module %sein librairie %s" +#: pcbnew/muonde.cpp:198 +msgid "Angle (0.1deg):" +msgstr "Angle (0.1deg):" -#: pcbnew/librairi.cpp:256 -msgid "Library " -msgstr "Librairie " +#: pcbnew/muonde.cpp:330 +msgid "Complex shape" +msgstr "Formr complexe" -#: pcbnew/librairi.cpp:267 -msgid "Not a Library file" -msgstr "N'est pas un fichier Librairie" +#: pcbnew/muonde.cpp:356 +msgid "Read Shape Descr File..." +msgstr "Lire fichier de description de forme..." -#: pcbnew/librairi.cpp:296 -#, c-format -msgid "Module [%s] not found" -msgstr "Module [%s] non trouvé" +#: pcbnew/muonde.cpp:360 +msgid "Symmetrical" +msgstr "Symétrique" -#: pcbnew/librairi.cpp:390 -#, c-format -msgid "Component %s deleted in library %s" -msgstr "Composant %s supprimé en librairie %s" +#: pcbnew/muonde.cpp:360 +msgid "Mirrored" +msgstr "Miroir" -#: pcbnew/librairi.cpp:416 -msgid " No modules to archive!" -msgstr "Pas de Modules a archiver" +#: pcbnew/muonde.cpp:362 +msgid "Shape Option" +msgstr "Option Forme" -#: pcbnew/librairi.cpp:423 -msgid "Library" -msgstr "Librairie" +#: pcbnew/muonde.cpp:428 +msgid "Read descr shape file" +msgstr "Lire fichier de description de forme" -#: pcbnew/librairi.cpp:516 -#, c-format -msgid "Library %s not found" -msgstr "Librairie %s non trouvée" +#: pcbnew/muonde.cpp:444 +msgid "File not found" +msgstr "fichier non trouvé" -#: pcbnew/librairi.cpp:527 -msgid "Name:" -msgstr "Nom:" +#: pcbnew/muonde.cpp:548 +msgid "Shape has a null size!" +msgstr "La forme a une taille nulle" -#: pcbnew/librairi.cpp:537 -#, c-format -msgid "Unable to open %s" -msgstr "Ne peut pas ouvrir \"%s\"" +#: pcbnew/muonde.cpp:553 +msgid "Shape has no points!" +msgstr "La forme n'a pas de points" -#: pcbnew/librairi.cpp:547 -#, c-format -msgid "File %s is not a eeschema library" -msgstr "Fichier %s n'est pas une librairie eeschema" +#: pcbnew/muonde.cpp:679 +msgid "No pad for this module" +msgstr "Pas de pad dans ce module" -#: pcbnew/librairi.cpp:576 -msgid "Module exists Line " -msgstr "Module existe Ligne " +#: pcbnew/muonde.cpp:684 +msgid "Only one pad for this module" +msgstr "Seulement un pad dans ce module" -#: pcbnew/librairi.cpp:695 -msgid "Component " -msgstr "Composant" +#: pcbnew/muonde.cpp:698 +msgid "Gap (mm):" +msgstr "Gap (mm):" -#: pcbnew/librairi.cpp:696 -msgid " added in " -msgstr " ajouté dans " +#: pcbnew/muonde.cpp:698 +#: pcbnew/muonde.cpp:704 +msgid "Create Microwave Gap" +msgstr "Créer Gap MicroOnde " -#: pcbnew/librairi.cpp:696 -msgid " replaced in " -msgstr " remplacé dans " - -#: pcbnew/librairi.cpp:723 -msgid "Module Reference:" -msgstr "Référence Module" - -#: pcbnew/librairi.cpp:775 -msgid "Active Lib:" -msgstr "Librairie Active:" - -#: pcbnew/librairi.cpp:786 -msgid "Module Editor (lib: " -msgstr "Editeur de modules (lib: " - -#: pcbnew/librairi.cpp:801 -msgid "Library exists " -msgstr "Librairie existante " - -#: pcbnew/librairi.cpp:816 -msgid "Create error " -msgstr "Erreur en création " +#: pcbnew/muonde.cpp:704 +msgid "Gap (inch):" +msgstr "Gap (inch):" #: pcbnew/loadcmp.cpp:103 msgid "Module name:" @@ -2362,58 +2381,72 @@ msgid "Sizes and Widths" msgstr "Dims. et Epaiss." #: pcbnew/menubarmodedit.cpp:41 +#: pcbnew/menubarpcb.cpp:229 msgid "Adjust width for texts and drawings" msgstr "Ajuster dims pour textes et graphiques" #: pcbnew/menubarmodedit.cpp:45 +#: pcbnew/menubarpcb.cpp:233 msgid "Pad Settings" msgstr "Caract pads" #: pcbnew/menubarmodedit.cpp:46 +#: pcbnew/menubarpcb.cpp:234 msgid "Adjust size,shape,layers... for Pads" msgstr "Ajuster taille, forme, couches... pour pads" #: pcbnew/menubarmodedit.cpp:50 +#: pcbnew/menubarpcb.cpp:223 msgid "User Grid Size" msgstr "Dim Grille utilisteur" #: pcbnew/menubarmodedit.cpp:51 +#: pcbnew/menubarpcb.cpp:224 msgid "Adjust User Grid" msgstr "Ajuster Grille utilisateur" #: pcbnew/menubarmodedit.cpp:60 +#: pcbnew/menubarpcb.cpp:292 msgid "&Contents" msgstr "&Contenu" #: pcbnew/menubarmodedit.cpp:60 +#: pcbnew/menubarpcb.cpp:292 msgid "Open the pcbnew manual" msgstr "Ouvrir la documentation de pcbnew" #: pcbnew/menubarmodedit.cpp:64 +#: pcbnew/menubarpcb.cpp:296 msgid "&About" msgstr "&Infos logiciel" #: pcbnew/menubarmodedit.cpp:64 +#: pcbnew/menubarpcb.cpp:296 msgid "About this application" msgstr "Au sujet de cette application" #: pcbnew/menubarmodedit.cpp:72 +#: pcbnew/menubarpcb.cpp:304 msgid "3D Display" msgstr "3D Visu" #: pcbnew/menubarmodedit.cpp:72 +#: pcbnew/menubarpcb.cpp:304 msgid "Show Board in 3D Mode" msgstr "Visualisation en 3D" #: pcbnew/menubarmodedit.cpp:76 +#: pcbnew/menubarpcb.cpp:310 msgid "&Dimensions" msgstr "&Dimensions" #: pcbnew/menubarmodedit.cpp:77 +#: pcbnew/menubarpcb.cpp:313 msgid "&3D Display" msgstr "&3D Visu" #: pcbnew/menubarmodedit.cpp:78 +#: pcbnew/menubarpcb.cpp:314 msgid "&Help" msgstr "&Aide" @@ -2725,42 +2758,6 @@ msgstr "Forme X" msgid "Target Shape:" msgstr "Forme Mire:" -#: pcbnew/modedit.cpp:263 -msgid "Unable to find the footprint source on the main board" -msgstr "Impossible de trouver le module source sur le PCB principal" - -#: pcbnew/modedit.cpp:264 -msgid "" -"\n" -"Cannot update the footprint" -msgstr "" -"\n" -"Ne peut mettre à jour le module" - -#: pcbnew/modedit.cpp:272 -msgid "A footprint source was found on the main board" -msgstr "Un module source a été trouvé sur le PCB principal" - -#: pcbnew/modedit.cpp:273 -msgid "" -"\n" -"Cannot insert this footprint" -msgstr "" -"\n" -"Ne peut insérer cd module" - -#: pcbnew/modedit.cpp:393 -msgid "Add Pad" -msgstr "Ajouter Pastilles" - -#: pcbnew/modedit.cpp:406 -msgid "Add Drawing" -msgstr "Ajout d'éléments graphiques" - -#: pcbnew/modedit.cpp:410 -msgid "Place anchor" -msgstr "Place Ancre" - #: pcbnew/modedit_onclick.cpp:196 msgid "End Tool" msgstr "Fin Outil" @@ -2897,18 +2894,6 @@ msgstr "Ajuste Epaiss" msgid "Module Editor: module modified!, Continue ?" msgstr "Editeur de Module: module modifié! Continuer ?" -#: pcbnew/modules.cpp:81 -msgid "Footprint name:" -msgstr "Nom Module: " - -#: pcbnew/modules.cpp:305 -msgid "Delete Module" -msgstr "Supprimer Module" - -#: pcbnew/modules.cpp:306 -msgid "Value " -msgstr "Valeur " - #: pcbnew/move-drag_pads.cpp:274 #, c-format msgid "Delete Pad (module %s %s) " @@ -2922,87 +2907,6 @@ msgstr "Impossible de drag ce segment: trop de segments connectés" 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" - -#: pcbnew/muonde.cpp:154 -msgid "Stub" -msgstr "Stub" - -#: pcbnew/muonde.cpp:160 -msgid "Arc Stub" -msgstr "Arc Stub" - -#: pcbnew/muonde.cpp:175 -msgid " (mm):" -msgstr " (mm):" - -#: pcbnew/muonde.cpp:182 -msgid " (inch):" -msgstr " (pouce):" - -#: pcbnew/muonde.cpp:189 -#: pcbnew/muonde.cpp:202 -msgid "Incorrect number, abort" -msgstr "Nombre incorrect, arret" - -#: pcbnew/muonde.cpp:198 -msgid "Angle (0.1deg):" -msgstr "Angle (0.1deg):" - -#: pcbnew/muonde.cpp:330 -msgid "Complex shape" -msgstr "Formr complexe" - -#: pcbnew/muonde.cpp:356 -msgid "Read Shape Descr File..." -msgstr "Lire fichier de description de forme..." - -#: pcbnew/muonde.cpp:360 -msgid "Symmetrical" -msgstr "Symétrique" - -#: pcbnew/muonde.cpp:360 -msgid "Mirrored" -msgstr "Miroir" - -#: pcbnew/muonde.cpp:362 -msgid "Shape Option" -msgstr "Option Forme" - -#: pcbnew/muonde.cpp:428 -msgid "Read descr shape file" -msgstr "Lire fichier de description de forme" - -#: pcbnew/muonde.cpp:444 -msgid "File not found" -msgstr "fichier non trouvé" - -#: pcbnew/muonde.cpp:548 -msgid "Shape has a null size!" -msgstr "La forme a une taille nulle" - -#: pcbnew/muonde.cpp:553 -msgid "Shape has no points!" -msgstr "La forme n'a pas de points" - -#: pcbnew/muonde.cpp:679 -msgid "No pad for this module" -msgstr "Pas de pad dans ce module" - -#: pcbnew/muonde.cpp:684 -msgid "Only one pad for this module" -msgstr "Seulement un pad dans ce module" - -#: pcbnew/muonde.cpp:698 -msgid "Gap (mm):" -msgstr "Gap (mm):" - -#: pcbnew/muonde.cpp:704 -msgid "Gap (inch):" -msgstr "Gap (inch):" - #: pcbnew/muwave_command.cpp:52 msgid "Add Line" msgstr "Addition de lignes" @@ -3435,6 +3339,43 @@ msgstr "Grille perso dim Y" msgid "Abort routing?" msgstr "Stopper routage?" +#: pcbnew/modedit.cpp:268 +msgid "Unable to find the footprint source on the main board" +msgstr "Impossible de trouver le module source sur le PCB principal" + +#: pcbnew/modedit.cpp:269 +msgid "" +"\n" +"Cannot update the footprint" +msgstr "" +"\n" +"Ne peut mettre à jour le module" + +#: pcbnew/modedit.cpp:277 +msgid "A footprint source was found on the main board" +msgstr "Un module source a été trouvé sur le PCB principal" + +#: pcbnew/modedit.cpp:278 +msgid "" +"\n" +"Cannot insert this footprint" +msgstr "" +"\n" +"Ne peut insérer cd module" + +#: pcbnew/modedit.cpp:396 +msgid "Add Pad" +msgstr "Ajouter Pastilles" + +#: pcbnew/modedit.cpp:409 +msgid "Add Drawing" +msgstr "Ajout d'éléments graphiques" + +#: pcbnew/modedit.cpp:413 +#: pcbnew/tool_modedit.cpp:176 +msgid "Place anchor" +msgstr "Place Ancre" + #: pcbnew/specctra.cpp:133 #: pcbnew/specctra.cpp:140 msgid "Expecting" @@ -3445,89 +3386,38 @@ msgstr "Attendu" msgid "Unexpected" msgstr "Inattendu" -#: pcbnew/specctra.cpp:321 -#: pcbnew/specctra.cpp:351 -#: pcbnew/specctra.cpp:3524 -#: pcbnew/specctra.cpp:3549 +#: pcbnew/specctra.cpp:324 +#: pcbnew/specctra.cpp:354 +#: pcbnew/specctra.cpp:3527 +#: pcbnew/specctra.cpp:3552 #, c-format msgid "Unable to open file \"%s\"" msgstr "Ne peut pas ouvrirle fichier \"%s\"" -#: pcbnew/specctra.cpp:3465 +#: pcbnew/specctra.cpp:3468 #, c-format msgid "System file error writing to file \"%s\"" msgstr "Erreur système sur écriture fichier \"%s\"" -#: pcbnew/specctra.cpp:3644 +#: pcbnew/specctra.cpp:3647 msgid "Error writing to STRINGFORMATTER" msgstr "Error writing to STRINGFORMATTER" -#: pcbnew/specctra_import.cpp:74 -msgid "Merge Specctra Session file:" -msgstr "Fichier Specctra Session à Fusionner:" +#: pcbnew/edgemod.cpp:204 +msgid "The graphic item will be on a copper layer.It is very dangerous. Are you sure" +msgstr "L'élément graphique sera sur une couche cuivre. C'est très dangereux. Etes vous sûr" -#: pcbnew/specctra_import.cpp:101 -msgid "BOARD may be corrupted, do not save it." -msgstr "Le PCB peut être corrompu. Ne pas le sauver" +#: pcbnew/edgemod.cpp:246 +msgid "New Width (1/10000\"):" +msgstr "Novelle largeur (1/10000\"):" -#: pcbnew/specctra_import.cpp:103 -msgid "Fix problem and try again." -msgstr "Fixer le problème et recommencer." +#: pcbnew/edgemod.cpp:246 +msgid "Edge Width" +msgstr "Epaisseur Contour" -#: pcbnew/specctra_import.cpp:117 -msgid "Session file imported and merged OK." -msgstr "Fichier Session importé et fusionné correctement." - -#: pcbnew/specctra_import.cpp:192 -#: pcbnew/specctra_import.cpp:300 -#, c-format -msgid "Session file uses invalid layer id \"%s\"" -msgstr "Le Fichier Session utilise une couche invalide n° \"%s\"" - -#: pcbnew/specctra_import.cpp:242 -msgid "Session via padstack has no shapes" -msgstr "Manque dans le Fichier Session file la section " - -#: pcbnew/specctra_import.cpp:249 -#: pcbnew/specctra_import.cpp:267 -#: pcbnew/specctra_import.cpp:291 -#, c-format -msgid "Unsupported via shape: \"%s\"" -msgstr "Forme via inconnue: \"%s\"" - -#: pcbnew/specctra_import.cpp:348 -msgid "Session file is missing the \"session\" section" -msgstr "Session file is missing the \"session\" section" - -#: pcbnew/specctra_import.cpp:351 -msgid "Session file is missing the \"placement\" section" -msgstr "Manque dans le Fichier Session file la section \"placement\"" - -#: pcbnew/specctra_import.cpp:354 -msgid "Session file is missing the \"routes\" section" -msgstr "Manque dans le Fichier Session file la section \"routes\"" - -#: pcbnew/specctra_import.cpp:357 -msgid "Session file is missing the \"library_out\" section" -msgstr "Manque dans le Fichier Session file la section \"library_out\"" - -#: pcbnew/specctra_import.cpp:387 -#, c-format -msgid "Session file has 'reference' to non-existent component \"%s\"" -msgstr "Le fichier Session a une 'reference' a un composant non existant \"%s\"" - -#: pcbnew/specctra_import.cpp:531 -#, c-format -msgid "A wire_via references a missing padstack \"%s\"" -msgstr "Une piste ou via a une référence vers un pad \"%s\" manquant" - -#: pcbnew/surbrill.cpp:37 -msgid "Filter for net names:" -msgstr "Filtre pour nets:" - -#: pcbnew/surbrill.cpp:41 -msgid "List Nets" -msgstr "Liste équipots" +#: pcbnew/edgemod.cpp:253 +msgid "Incorrect number, no change" +msgstr "Nombre incorrect, pas de changement" #: pcbnew/swap_layers.cpp:70 msgid "Swap Layers:" @@ -3981,40 +3871,190 @@ msgstr "Pas de pads ou de points de départ pour remplir ce contour de zone" msgid "Ok" msgstr "Ok" -#: pcbnew/specctra_export.cpp:64 -msgid "Specctra DSN file:" -msgstr "Fichier Specctra DSN" +#: pcbnew/librairi.cpp:61 +msgid "Import Module:" +msgstr "Importer Module:" -#: pcbnew/specctra_export.cpp:122 -msgid "BOARD exported OK." -msgstr "PCB exporté Ok." +#: pcbnew/librairi.cpp:97 +msgid "Not a module file" +msgstr "N'est pas un fichier de Modules" -#: pcbnew/specctra_export.cpp:127 -msgid "Unable to export, please fix and try again." -msgstr "Impossible d'exporter, fixer le problème et recommencer" +#: pcbnew/librairi.cpp:179 +msgid "Create lib" +msgstr "Créer lib" -#: pcbnew/specctra_export.cpp:805 +#: pcbnew/librairi.cpp:179 +msgid "Export Module:" +msgstr "Exporter Module:" + +#: pcbnew/librairi.cpp:194 +#: pcbnew/librairi.cpp:441 #, c-format -msgid "Unsupported DRAWSEGMENT type %s" -msgstr "DRAWSEGMENT type %s non supporté" +msgid "File %s exists, OK to replace ?" +msgstr "Fichier %s existant, OK pour remplacer ?" -#: pcbnew/specctra_export.cpp:840 -msgid "Unable to find the next segment with an endpoint of " -msgstr "Impossible de trouver le segment suivant avec une extrémité à " - -#: pcbnew/specctra_export.cpp:843 -msgid "Edit Edges_Pcb segments, making them contiguous." -msgstr "Modifier les segments du contour PCB pour les rendre contigus." - -#: pcbnew/specctra_export.cpp:895 +#: pcbnew/librairi.cpp:203 #, c-format -msgid "Component with value of \"%s\" has empty reference id." -msgstr "Le composant avec valeur \"%s\" a une référence vide." +msgid "Unable to create <%s>" +msgstr "Incapable de créer <%s>" -#: pcbnew/specctra_export.cpp:903 +#: pcbnew/librairi.cpp:224 #, c-format -msgid "Multiple components have identical reference IDs of \"%s\"." -msgstr "Multiple composants ont une reference identique \"%s\"." +msgid "Module exported in file <%s>" +msgstr "Module exporté en fichier <%s>" + +#: pcbnew/librairi.cpp:246 +#, c-format +msgid "Ok to delete module %s in library %s" +msgstr "Ok pour effacer module %sein librairie %s" + +#: pcbnew/librairi.cpp:256 +msgid "Library " +msgstr "Librairie " + +#: pcbnew/librairi.cpp:267 +msgid "Not a Library file" +msgstr "N'est pas un fichier Librairie" + +#: pcbnew/librairi.cpp:296 +#, c-format +msgid "Module [%s] not found" +msgstr "Module [%s] non trouvé" + +#: pcbnew/librairi.cpp:390 +#, c-format +msgid "Component %s deleted in library %s" +msgstr "Composant %s supprimé en librairie %s" + +#: pcbnew/librairi.cpp:416 +msgid " No modules to archive!" +msgstr "Pas de Modules a archiver" + +#: pcbnew/librairi.cpp:423 +msgid "Library" +msgstr "Librairie" + +#: pcbnew/librairi.cpp:516 +#, c-format +msgid "Library %s not found" +msgstr "Librairie %s non trouvée" + +#: pcbnew/librairi.cpp:527 +msgid "Name:" +msgstr "Nom:" + +#: pcbnew/librairi.cpp:527 +msgid "Save module" +msgstr "Sauver Module" + +#: pcbnew/librairi.cpp:537 +#, c-format +msgid "Unable to open %s" +msgstr "Ne peut pas ouvrir \"%s\"" + +#: pcbnew/librairi.cpp:547 +#, c-format +msgid "File %s is not a eeschema library" +msgstr "Fichier %s n'est pas une librairie eeschema" + +#: pcbnew/librairi.cpp:576 +msgid "Module exists Line " +msgstr "Module existe Ligne " + +#: pcbnew/librairi.cpp:695 +msgid "Component " +msgstr "Composant" + +#: pcbnew/librairi.cpp:696 +msgid " added in " +msgstr " ajouté dans " + +#: pcbnew/librairi.cpp:696 +msgid " replaced in " +msgstr " remplacé dans " + +#: pcbnew/librairi.cpp:723 +msgid "Module Reference:" +msgstr "Référence Module" + +#: pcbnew/librairi.cpp:723 +msgid "Create module" +msgstr "Créer Module" + +#: pcbnew/librairi.cpp:775 +msgid "Active Lib:" +msgstr "Librairie Active:" + +#: pcbnew/librairi.cpp:786 +msgid "Module Editor (lib: " +msgstr "Editeur de modules (lib: " + +#: pcbnew/librairi.cpp:801 +msgid "Library exists " +msgstr "Librairie existante " + +#: pcbnew/librairi.cpp:816 +msgid "Create error " +msgstr "Erreur en création " + +#: pcbnew/specctra_import.cpp:73 +msgid "Merge Specctra Session file:" +msgstr "Fichier Specctra Session à Fusionner:" + +#: pcbnew/specctra_import.cpp:100 +msgid "BOARD may be corrupted, do not save it." +msgstr "Le PCB peut être corrompu. Ne pas le sauver" + +#: pcbnew/specctra_import.cpp:102 +msgid "Fix problem and try again." +msgstr "Fixer le problème et recommencer." + +#: pcbnew/specctra_import.cpp:116 +msgid "Session file imported and merged OK." +msgstr "Fichier Session importé et fusionné correctement." + +#: pcbnew/specctra_import.cpp:191 +#: pcbnew/specctra_import.cpp:299 +#, c-format +msgid "Session file uses invalid layer id \"%s\"" +msgstr "Le Fichier Session utilise une couche invalide n° \"%s\"" + +#: pcbnew/specctra_import.cpp:241 +msgid "Session via padstack has no shapes" +msgstr "Manque dans le Fichier Session file la section " + +#: pcbnew/specctra_import.cpp:248 +#: pcbnew/specctra_import.cpp:266 +#: pcbnew/specctra_import.cpp:290 +#, c-format +msgid "Unsupported via shape: \"%s\"" +msgstr "Forme via inconnue: \"%s\"" + +#: pcbnew/specctra_import.cpp:347 +msgid "Session file is missing the \"session\" section" +msgstr "Session file is missing the \"session\" section" + +#: pcbnew/specctra_import.cpp:350 +msgid "Session file is missing the \"placement\" section" +msgstr "Manque dans le Fichier Session file la section \"placement\"" + +#: pcbnew/specctra_import.cpp:353 +msgid "Session file is missing the \"routes\" section" +msgstr "Manque dans le Fichier Session file la section \"routes\"" + +#: pcbnew/specctra_import.cpp:356 +msgid "Session file is missing the \"library_out\" section" +msgstr "Manque dans le Fichier Session file la section \"library_out\"" + +#: pcbnew/specctra_import.cpp:386 +#, c-format +msgid "Session file has 'reference' to non-existent component \"%s\"" +msgstr "Le fichier Session a une 'reference' a un composant non existant \"%s\"" + +#: pcbnew/specctra_import.cpp:530 +#, c-format +msgid "A wire_via references a missing padstack \"%s\"" +msgstr "Une piste ou via a une référence vers un pad \"%s\" manquant" #: pcbnew/pcbnew.cpp:43 msgid "Pcbnew is already running, Continue?" @@ -4460,6 +4500,41 @@ msgstr "Autoroute Pad" msgid "Autoroute Net" msgstr "Autoroute Net" +#: pcbnew/specctra_export.cpp:64 +msgid "Specctra DSN file:" +msgstr "Fichier Specctra DSN" + +#: pcbnew/specctra_export.cpp:122 +msgid "BOARD exported OK." +msgstr "PCB exporté Ok." + +#: pcbnew/specctra_export.cpp:127 +msgid "Unable to export, please fix and try again." +msgstr "Impossible d'exporter, fixer le problème et recommencer" + +#: pcbnew/specctra_export.cpp:805 +#, c-format +msgid "Unsupported DRAWSEGMENT type %s" +msgstr "DRAWSEGMENT type %s non supporté" + +#: pcbnew/specctra_export.cpp:840 +msgid "Unable to find the next segment with an endpoint of " +msgstr "Impossible de trouver le segment suivant avec une extrémité à " + +#: pcbnew/specctra_export.cpp:843 +msgid "Edit Edges_Pcb segments, making them contiguous." +msgstr "Modifier les segments du contour PCB pour les rendre contigus." + +#: pcbnew/specctra_export.cpp:895 +#, c-format +msgid "Component with value of \"%s\" has empty reference id." +msgstr "Le composant avec valeur \"%s\" a une référence vide." + +#: pcbnew/specctra_export.cpp:903 +#, c-format +msgid "Multiple components have identical reference IDs of \"%s\"." +msgstr "Multiple composants ont une reference identique \"%s\"." + #: pcbnew/dialog_pad_edit.cpp:157 msgid "Pad Num :" msgstr "Num Pad :" @@ -4569,33 +4644,6 @@ msgstr "couche E.C.O.2" msgid "Draft layer" msgstr "Couche dessin" -#: pcbnew/plot_rtn.cpp:224 -#, c-format -msgid "" -"Your BOARD has a bad layer number of %u for module\n" -" %s's \"reference\" text." -msgstr "" -"Votre PCB a un mauvais numero de couche %u pour le module\n" -" %s's \"reference\"." - -#: pcbnew/plot_rtn.cpp:244 -#, c-format -msgid "" -"Your BOARD has a bad layer number of %u for module\n" -" %s's \"value\" text." -msgstr "" -"Votre PCB a un mauvais numero de couche %u pour le module\n" -" %s's \"valeur\"." - -#: pcbnew/plot_rtn.cpp:290 -#, c-format -msgid "" -"Your BOARD has a bad layer number of %u for module\n" -" %s's \"module text\" text of %s." -msgstr "" -"Votre PCB a un mauvais numero de couche %u pour le module\n" -" %s's \"texte module\" de %s." - #: pcbnew/dialog_gendrill.cpp:166 msgid "Millimeters" msgstr "Millimetres" @@ -5041,19 +5089,19 @@ msgstr "" "\n" "Cette opération supprimera l'annotation existante et ne peut être annulée." -#: eeschema/backanno.cpp:136 +#: eeschema/backanno.cpp:134 msgid "Load Stuff File" msgstr "Charger Fichier d'échange" -#: eeschema/backanno.cpp:157 +#: eeschema/backanno.cpp:155 msgid "Set the Footprint Field to Visible ?" msgstr "Rendre le Champ Module Visible" -#: eeschema/backanno.cpp:158 +#: eeschema/backanno.cpp:156 msgid "Field Display Option" msgstr "Options d'affichage du Champ" -#: eeschema/backanno.cpp:171 +#: eeschema/backanno.cpp:169 #, c-format msgid "Failed to open Stuff File <%s>" msgstr "Ne peut pas ouvrir fichier d'échange <%s>" @@ -5170,12 +5218,11 @@ msgstr "Doit on la convertir en une feuille de hiérarchie simple (autrement sup msgid "%8.8lX/" msgstr "%8.8lX/" -#: eeschema/component_class.cpp:75 +#: eeschema/component_class.cpp:72 msgid "Sheet" msgstr "Feuille" -#: eeschema/component_class.cpp:316 -#: eeschema/dialog_create_component.cpp:171 +#: eeschema/component_class.cpp:313 msgid "U" msgstr "U" @@ -5321,10 +5368,13 @@ msgid "As Convert" msgstr "A une forme \"convertie\"" #: eeschema/dialog_create_component.cpp:187 +#: eeschema/dialog_edit_component_in_lib.cpp:161 msgid "Power Symbol" msgstr "Symbole Alimentation" #: eeschema/dialog_create_component.cpp:191 +#: eeschema/dialog_edit_component_in_lib.cpp:165 +#: eeschema/dialog_edit_component_in_schematic.cpp:188 msgid "Parts are locked" msgstr "Les parts sont verrouillées" @@ -5453,6 +5503,7 @@ msgid "Pin Name Inside" msgstr "Nom de pin a l'intérieur" #: eeschema/dialog_create_component.cpp:262 +#: eeschema/dialog_edit_component_in_lib.cpp:155 msgid "Skew:" msgstr "Décalage:" @@ -5489,7 +5540,6 @@ msgid "Browse DocFiles" msgstr "Examen Fichiers de Doc" #: eeschema/dialog_edit_component_in_lib.cpp:210 -#: eeschema/edit_component_in_lib.cpp:216 msgid "Alias" msgstr "Alias" @@ -5631,17 +5681,14 @@ msgid "Chip Name:" msgstr "Nom en librairie" #: eeschema/dialog_edit_component_in_schematic.cpp:212 -#: eeschema/edit_component_in_lib.cpp:497 msgid "Show Text" msgstr "Texte visible" #: eeschema/dialog_edit_component_in_schematic.cpp:216 -#: eeschema/edit_component_in_lib.cpp:502 msgid "Vertical" msgstr "Vertical" #: eeschema/dialog_edit_component_in_schematic.cpp:226 -#: eeschema/edit_component_in_lib.cpp:484 msgid "Fields" msgstr "Champs" @@ -5919,786 +5966,6 @@ msgstr "Epaiss. ligne par défaut" msgid "Default Label Size" msgstr "Taille Label par défaut:" -#: eeschema/edit_component_in_lib.cpp:168 -msgid "Lib Component Properties" -msgstr "Propriétés du composant librairie" - -#: eeschema/edit_component_in_lib.cpp:172 -msgid "Properties for " -msgstr "Propriétés pour " - -#: eeschema/edit_component_in_lib.cpp:177 -msgid "(alias of " -msgstr "(alias de " - -#: eeschema/edit_component_in_lib.cpp:245 -#: eeschema/edit_component_in_lib.cpp:328 -msgid "Delete All" -msgstr "Tout Supprimer" - -#: eeschema/edit_component_in_lib.cpp:281 -msgid "Footprint Filter" -msgstr "Filtrage Modules" - -#: eeschema/edit_component_in_lib.cpp:293 -msgid "Footprints" -msgstr "Modules" - -#: eeschema/edit_component_in_lib.cpp:407 -msgid "Show Pin Num" -msgstr "Montre Numéro de Pin" - -#: eeschema/edit_component_in_lib.cpp:476 -msgid "Left justify" -msgstr "Justifié à gauche" - -#: eeschema/edit_component_in_lib.cpp:476 -#: eeschema/edit_component_in_lib.cpp:478 -msgid "Center" -msgstr "Centrer" - -#: eeschema/edit_component_in_lib.cpp:476 -msgid "Right justify" -msgstr "Justifié à droite" - -#: eeschema/edit_component_in_lib.cpp:478 -msgid "Bottom justify" -msgstr "Justifié en bas" - -#: eeschema/edit_component_in_lib.cpp:478 -msgid "Top justify" -msgstr "Justifié en haut" - -#: eeschema/edit_component_in_lib.cpp:508 -#: eeschema/edit_component_in_schematic.cpp:205 -msgid "Field Name:" -msgstr "Nom Champ" - -#: eeschema/edit_component_in_lib.cpp:518 -#: eeschema/edit_component_in_schematic.cpp:215 -msgid "Field Text:" -msgstr "Texte du Champ:" - -#: eeschema/edit_component_in_lib.cpp:524 -#: eeschema/edit_component_in_schematic.cpp:223 -msgid "Pos" -msgstr "Pos" - -#: eeschema/edit_component_in_lib.cpp:529 -msgid "Hor Justify" -msgstr "Justifié horiz" - -#: eeschema/edit_component_in_lib.cpp:536 -msgid "Vert Justify" -msgstr "Justifié Vert." - -#: eeschema/edit_component_in_lib.cpp:551 -msgid "Chip Name" -msgstr "Nom en librairie" - -#: eeschema/edit_component_in_lib.cpp:554 -#: eeschema/edit_component_in_schematic.cpp:199 -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" - -#: eeschema/edit_component_in_lib.cpp:915 -msgid "New alias:" -msgstr "Noveau alias" - -#: eeschema/edit_component_in_lib.cpp:923 -msgid "This is the Root Part" -msgstr "Ceci est le composant racine" - -#: eeschema/edit_component_in_lib.cpp:932 -#: eeschema/edit_component_in_lib.cpp:1200 -msgid "Already in use" -msgstr "Déja en usage" - -#: eeschema/edit_component_in_lib.cpp:957 -msgid " is Current Selected Alias!" -msgstr " est l' Alias actuellement sélectionné!" - -#: eeschema/edit_component_in_lib.cpp:1010 -msgid "Delete units" -msgstr "Supprimer unité" - -#: eeschema/edit_component_in_lib.cpp:1080 -msgid "Create pins for Convert items" -msgstr "Créér les pins des unitées converties" - -#: eeschema/edit_component_in_lib.cpp:1084 -msgid "Part as \"De Morgan\" anymore" -msgstr "Le composant a une représentation convertie" - -#: eeschema/edit_component_in_lib.cpp:1109 -msgid "Delete Convert items" -msgstr "Suppression des éléments convertis" - -#: eeschema/edit_component_in_lib.cpp:1144 -msgid "Doc Files" -msgstr "Fichiers de Doc" - -#: eeschema/edit_component_in_lib.cpp:1167 -msgid "Ok to Delete FootprintFilter LIST" -msgstr "Ok pour effacer la LISTE des filtres de modules" - -#: eeschema/edit_component_in_lib.cpp:1189 -msgid "New FootprintFilter:" -msgstr "Nouveau Filtre de Modules:" - -#: eeschema/edit_component_in_schematic.cpp:330 -msgid "No Component Name!" -msgstr "Pas de nom de composant!" - -#: eeschema/edit_component_in_schematic.cpp:336 -#, c-format -msgid "Component [%s] not found!" -msgstr "Composant [%s] non trouvé!" - -#: eeschema/edit_component_in_schematic.cpp:457 -msgid "No Field to move" -msgstr "Pas de champ a déplacer" - -#: eeschema/edit_component_in_schematic.cpp:520 -msgid "No Field To Edit" -msgstr "Pas de champ a éditer" - -#: eeschema/edit_component_in_schematic.cpp:534 -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:581 -msgid "Reference needed !, No change" -msgstr "Référence NECESSAIRE: changement refusé" - -#: eeschema/edit_component_in_schematic.cpp:585 -msgid "Value needed !, No change" -msgstr "Valeur NECESSAIRE: changement refusé" - -#: eeschema/edit_label.cpp:49 -msgid "Empty Text!" -msgstr "Texte vide" - -#: eeschema/eeconfig.cpp:73 -msgid "File " -msgstr "Fichier " - -#: eeschema/eeconfig.cpp:73 -msgid "not found" -msgstr " non trouvé" - -#: eeschema/eelayer.cpp:233 -msgid "White" -msgstr "Blanc" - -#: eeschema/eelayer.cpp:234 -msgid "Black" -msgstr "Noir" - -#: eeschema/eelayer.cpp:235 -msgid "Background Color:" -msgstr "Couleur du Fond:" - -#: eeschema/eelibs_read_libraryfiles.cpp:115 -msgid "Start loading schematic libs" -msgstr "Demarre chargement des librairies schématiques" - -#: eeschema/eelibs_read_libraryfiles.cpp:302 -#: eeschema/eelibs_read_libraryfiles.cpp:309 -msgid "File <" -msgstr "Fichier <" - -#: eeschema/eelibs_read_libraryfiles.cpp:302 -msgid "> is empty!" -msgstr "> est vide" - -#: eeschema/eelibs_read_libraryfiles.cpp:309 -msgid "> is NOT EESCHEMA library!" -msgstr "> nest PAS une librairie EESCHEMA !" - -#: eeschema/eelibs_read_libraryfiles.cpp:328 -msgid "Library <" -msgstr "Librairie <" - -#: eeschema/eelibs_read_libraryfiles.cpp:328 -msgid "> header read error" -msgstr "> erreur lecture entête" - -#: eeschema/eeschema.cpp:54 -msgid "Eeschema is already running, Continue?" -msgstr "Eeschema est est cours d'exécution. Continuer ?" - -#: eeschema/erc.cpp:287 -msgid "Annotation Required!" -msgstr "Numérotation requise!" - -#: eeschema/erc.cpp:392 -msgid "ERC file:" -msgstr "Fichier ERC:" - -#: eeschema/erc.cpp:546 -#, c-format -msgid "Warning HLabel %s not connected to SheetLabel" -msgstr "Attention HLabel %s non connecté a SheetLabel" - -#: eeschema/erc.cpp:550 -#, c-format -msgid "Warning SheetLabel %s not connected to HLabel" -msgstr "Warning SheetLabel %s non connecté a HLabel" - -#: eeschema/erc.cpp:564 -#, c-format -msgid "Warning Pin %s Unconnected" -msgstr "Warning Pin %s Non connectée" - -#: eeschema/erc.cpp:573 -#, c-format -msgid "Warning Pin %s not driven (Net %d)" -msgstr "Warning Pin %s non pilotée (Net %d)" - -#: eeschema/erc.cpp:584 -msgid "Warning More than 1 Pin connected to UnConnect symbol" -msgstr "Warning: plus que 1 Pin connectée a un symbole de non connexion" - -#: eeschema/erc.cpp:595 -msgid "Warning" -msgstr "Avertissement" - -#: eeschema/erc.cpp:598 -msgid "Error" -msgstr "Erreur" - -#: eeschema/erc.cpp:604 -#, c-format -msgid "%s: Pin %s connected to Pin %s (net %d)" -msgstr "%s: Pin %s connectée a Pin %s (net %d)" - -#: eeschema/erc.cpp:723 -msgid "ERC control" -msgstr "Controle ERC" - -#: eeschema/erc.cpp:733 -msgid "" -"\n" -"***** Sheet / (Root) \n" -msgstr "" -"\n" -"***** Feuille/ ( Racine)\n" - -#: eeschema/erc.cpp:738 -#, c-format -msgid "" -"\n" -"***** Sheet %s\n" -msgstr "" -"\n" -"***** Feuille %s\n" - -#: eeschema/erc.cpp:755 -#, c-format -msgid "ERC: %s (X= %2.3f inches, Y= %2.3f inches\n" -msgstr "ERC: %s (X= %2.3f pouces, Y= %2.3f pouces\n" - -#: eeschema/erc.cpp:764 -#, c-format -msgid "" -"\n" -" >> Errors ERC: %d\n" -msgstr "" -"\n" -" >> Erreurs ERC: %d\n" - -#: eeschema/files-io.cpp:72 -msgid "Clear Schematic Hierarchy (modified!)?" -msgstr "Effacer la hiérarchie schématique (modifiée!)?" - -#: eeschema/files-io.cpp:82 -msgid "Schematic files:" -msgstr "Fichiers schématiques:" - -#: eeschema/files-io.cpp:133 -msgid "" -"Ready\n" -"Working dir: \n" -msgstr "" -"Pret\n" -"Répertoire de travail: \n" - -#: eeschema/files-io.cpp:181 -#, c-format -msgid "File %s not found (new project ?)" -msgstr " fichier %s non trouvé (nouveau projet ?)" - -#: eeschema/find.cpp:212 -msgid "Pin " -msgstr "Pin " - -#: eeschema/find.cpp:216 -msgid "Ref " -msgstr "Ref " - -#: eeschema/find.cpp:224 -msgid "Field " -msgstr "Champ " - -#: eeschema/find.cpp:234 -#: eeschema/find.cpp:238 -msgid " found" -msgstr " trouvé " - -#: eeschema/find.cpp:371 -#, c-format -msgid "Marker %d found in %s" -msgstr "Marqueur %d trouvé en %s " - -#: eeschema/find.cpp:377 -msgid "Marker Not Found" -msgstr "Marqueur non trouvé" - -#: eeschema/find.cpp:609 -msgid " Found in " -msgstr " Trouvé en " - -#: eeschema/find.cpp:621 -msgid " Not Found" -msgstr " Non trouvé" - -#: eeschema/find.cpp:653 -msgid "No libraries are loaded" -msgstr "Pas de librairies chargées" - -#: eeschema/find.cpp:680 -#: eeschema/find.cpp:745 -#: eeschema/find.cpp:761 -msgid "Found " -msgstr "Trouvé " - -#: eeschema/find.cpp:682 -#: eeschema/find.cpp:746 -#: eeschema/find.cpp:762 -msgid " in lib " -msgstr " en libr. " - -#: eeschema/find.cpp:693 -msgid " found only in cache" -msgstr "trouvé seulement en cache" - -#: eeschema/find.cpp:696 -msgid "" -"\n" -"Explore All Libraries?" -msgstr "" -"\n" -"Explorer toutes les Librairies?" - -#: eeschema/find.cpp:702 -msgid "Nothing found" -msgstr " Rien trouvé" - -#: eeschema/getpart.cpp:106 -#, c-format -msgid "component selection (%d items loaded):" -msgstr "Sélection Composant (%d items chargés):" - -#: eeschema/getpart.cpp:171 -msgid "Failed to find part " -msgstr "Impossible de trouver le composant " - -#: eeschema/getpart.cpp:171 -msgid " in library" -msgstr " en librairie" - -#: eeschema/hierarch.cpp:122 -msgid "Navigator" -msgstr "Navigateur" - -#: eeschema/hierarch.cpp:133 -msgid "Root" -msgstr "Racine" - -#: eeschema/hotkeys.cpp:249 -msgid "Add Component" -msgstr "Ajout Composant" - -#: eeschema/hotkeys.cpp:271 -msgid "Add Wire" -msgstr "Ajouter Fils" - -#: eeschema/libarch.cpp:78 -msgid "Failed to create archive lib file " -msgstr "Impossible de créer le fichier librairie archive " - -#: eeschema/libarch.cpp:85 -msgid "Failed to create doc lib file " -msgstr "Impossible de créer le fichier lib document" - -#: 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:112 -#: eeschema/libedit.cpp:389 -msgid "Component \"" -msgstr "Composant \"" - -#: eeschema/libedit.cpp:112 -msgid "\" not found." -msgstr "\" non trouvé" - -#: eeschema/libedit.cpp:234 -msgid "Modify Library File \"" -msgstr "Ok pour modifier le fichier Librairie \"" - -#: eeschema/libedit.cpp:234 -msgid "\"?" -msgstr "\"?" - -#: eeschema/libedit.cpp:243 -msgid "Error while saving Library File \"" -msgstr "Erreur en sauvant le fichier Librairie \"" - -#: eeschema/libedit.cpp:243 -#: eeschema/libedit.cpp:390 -msgid "\"." -msgstr "\"." - -#: eeschema/libedit.cpp:249 -msgid "Library File \"" -msgstr "Fichier Librairie \"" - -#: eeschema/libedit.cpp:251 -msgid "Document File \"" -msgstr "Fichier de Doc \"" - -#: eeschema/libedit.cpp:304 -msgid "No Active Library" -msgstr "Pas de Librairie Active" - -#: eeschema/libedit.cpp:320 -#, c-format -msgid "Select Component (%d items)" -msgstr "Selection composant (%d items)" - -#: eeschema/libedit.cpp:343 -msgid "Component not found" -msgstr "Composant non trouvé" - -#: eeschema/libedit.cpp:347 -msgid "Delete component \"" -msgstr "Suppression Composant \"" - -#: eeschema/libedit.cpp:348 -msgid "\" from library \"" -msgstr "\" de la librairie \"" - -#: eeschema/libedit.cpp:372 -msgid "Clear old component from screen (changes will be lost)?" -msgstr "Supprimer l'ancien composant de l'écran (les changements seront perdus)?" - -#: eeschema/libedit.cpp:390 -msgid "\" exists in library \"" -msgstr "\" existe en librairie \"" - -#: eeschema/libedit.cpp:557 -msgid "No component to Save." -msgstr "Pas de composant à sauver" - -#: eeschema/libedit.cpp:564 -msgid "No Library specified." -msgstr "Pas de Librairie spécifiée." - -#: eeschema/libedit.cpp:575 -#, c-format -msgid "Component \"%s\" exists. Change it?" -msgstr "Le composant \" %s\" existe, Le changer ?" - -#: eeschema/libedit.cpp:614 -#, c-format -msgid "Component %s saved in %s" -msgstr "Composant %s sauvé en %s" - -#: eeschema/libedit_onrightclick.cpp:77 -msgid "Move Arc " -msgstr "Déplacer arc" - -#: eeschema/libedit_onrightclick.cpp:81 -msgid "Arc Options" -msgstr "Options pour l'Arc" - -#: eeschema/libedit_onrightclick.cpp:84 -msgid "Delete Arc " -msgstr "Effacer Arc" - -#: eeschema/libedit_onrightclick.cpp:92 -msgid "Move Circle " -msgstr "Déplacer Cercle" - -#: eeschema/libedit_onrightclick.cpp:96 -msgid "Circle Options" -msgstr "Options pour le Cercle" - -#: eeschema/libedit_onrightclick.cpp:99 -msgid "Delete Circle " -msgstr "Supprimer Cercle" - -#: eeschema/libedit_onrightclick.cpp:107 -msgid "Move Rect " -msgstr "Déplacer Rect" - -#: eeschema/libedit_onrightclick.cpp:111 -msgid "Rect Options" -msgstr "Options pour le Rectangle" - -#: eeschema/libedit_onrightclick.cpp:114 -msgid "Delete Rect " -msgstr "Supprimer Rect" - -#: eeschema/libedit_onrightclick.cpp:122 -msgid "Move Text " -msgstr "Déplacer Texte" - -#: eeschema/libedit_onrightclick.cpp:126 -msgid "Text Editor" -msgstr "Editeur de Texte" - -#: eeschema/libedit_onrightclick.cpp:128 -msgid "Rotate Text" -msgstr "Rot. Texte" - -#: eeschema/libedit_onrightclick.cpp:131 -msgid "Delete Text " -msgstr "Supprimer Texte" - -#: eeschema/libedit_onrightclick.cpp:139 -msgid "Move Line " -msgstr "Déplacer Ligne" - -#: eeschema/libedit_onrightclick.cpp:145 -msgid "Line End" -msgstr "Fin ligne" - -#: eeschema/libedit_onrightclick.cpp:148 -msgid "Line Options" -msgstr "Options pour Ligne" - -#: eeschema/libedit_onrightclick.cpp:151 -msgid "Delete Line " -msgstr "Efface Ligne" - -#: eeschema/libedit_onrightclick.cpp:158 -msgid "Delete Segment " -msgstr "Supprimer Segment" - -#: eeschema/libedit_onrightclick.cpp:168 -msgid "Move Field " -msgstr "Déplace Champ" - -#: eeschema/libedit_onrightclick.cpp:172 -msgid "Field Rotate" -msgstr "Rotation Champ" - -#: eeschema/libedit_onrightclick.cpp:174 -msgid "Field Edit" -msgstr "Edition du champ" - -#: eeschema/libedit_onrightclick.cpp:199 -msgid "Move Pin" -msgstr "Déplace pin" - -#: eeschema/libedit_onrightclick.cpp:202 -msgid "Edit Pin " -msgstr "Editer Pin" - -#: eeschema/libedit_onrightclick.cpp:207 -msgid "Delete Pin " -msgstr "Supprimer Pin" - -#: eeschema/libedit_onrightclick.cpp:212 -msgid "Global" -msgstr "Global" - -#: eeschema/libedit_onrightclick.cpp:214 -msgid "Pin Size to selected pins" -msgstr "Change taille pins sélectionnées" - -#: eeschema/libedit_onrightclick.cpp:214 -msgid "Pin Size to others" -msgstr "Change taille autres pins" - -#: eeschema/libedit_onrightclick.cpp:217 -msgid "Pin Name Size to selected pin" -msgstr "Change taille Nom pin sélectionnées" - -#: eeschema/libedit_onrightclick.cpp:217 -msgid "Pin Name Size to others" -msgstr "Change taille Nom pin autres pins" - -#: eeschema/libedit_onrightclick.cpp:220 -msgid "Pin Num Size to selected pin" -msgstr "Change taille Num pins sélectionnées" - -#: eeschema/libedit_onrightclick.cpp:220 -msgid "Pin Num Size to others" -msgstr "Change taille Num pin autres pins" - -#: eeschema/libedit_onrightclick.cpp:242 -msgid "Select items" -msgstr "Sélection des éléments" - -#: eeschema/libedit_onrightclick.cpp:245 -msgid "Mirror Block (ctrl + drag mouse)" -msgstr "Bloc Miroir (ctrl + drag mouse)" - -#: eeschema/libedit_onrightclick.cpp:247 -msgid "Del. Block (shift+ctrl + drag mouse)" -msgstr "Effacement Bloc (shift+ctrl + drag mouse)" - -#: eeschema/libfield.cpp:221 -msgid "No new text: no change" -msgstr "Pas de nouveau texte: pas de changements" - -#: eeschema/libframe.cpp:102 -msgid "" -"Component was modified!\n" -"Discard changes?" -msgstr "" -"Le composant a été modifié\n" -"Perdre les changements" - -#: eeschema/libframe.cpp:115 -#, c-format -msgid "" -"Library \"%s\" was modified!\n" -"Discard changes?" -msgstr "" -"Librairie \"%s\" modifiée!\n" -"Perdre les changements ?" - -#: eeschema/libframe.cpp:342 -msgid "Include last component changes?" -msgstr "Inclure les dernieres modifs du composant" - -#: eeschema/libframe.cpp:405 -msgid " Pins Test OK!" -msgstr " Test Pins OK!" - -#: eeschema/libframe.cpp:479 -msgid "Add Pin" -msgstr "Addition de \"pins\"" - -#: eeschema/libframe.cpp:483 -msgid "Set Pin Options" -msgstr "Choix Options des Pins" - -#: eeschema/libframe.cpp:505 -msgid "Add Rectangle" -msgstr "Addition de rectangles" - -#: eeschema/libframe.cpp:509 -msgid "Add Circle" -msgstr "Addition de cercle" - -#: eeschema/libframe.cpp:513 -msgid "Add Arc" -msgstr "Addition d' arc" - -#: eeschema/libframe.cpp:521 -msgid "Anchor" -msgstr "Ancre" - -#: eeschema/libframe.cpp:531 -msgid "Export" -msgstr "Exporter" - -#: eeschema/lib_export.cpp:39 -msgid "Import component:" -msgstr "Importer composant:" - -#: eeschema/lib_export.cpp:73 -msgid "File is empty" -msgstr "Fichier vide" - -#: eeschema/lib_export.cpp:95 -msgid "No Part to Save" -msgstr "Pas de composant à sauver" - -#: eeschema/lib_export.cpp:107 -msgid "New Library" -msgstr "Nouvelle Librairie" - -#: eeschema/lib_export.cpp:107 -msgid "Export component:" -msgstr "Exporter composant:" - -#: eeschema/lib_export.cpp:144 -msgid "0k" -msgstr "Ok" - -#: eeschema/lib_export.cpp:146 -msgid "" -"Note: this new library will be available only if it is loaded by eeschema.\n" -"Modify eeschema config if you want use it." -msgstr "" -"Note: cette nouvelle librairie sera disponible seulement si elle est chargée par eeschema\n" -"Modifier la config de eeschema si vous voulez l'utiliser" - -#: eeschema/lib_export.cpp:149 -msgid "Error while create " -msgstr "Erreur en création de " - -#: eeschema/load_one_schematic_file.cpp:104 -msgid "Failed to open " -msgstr "Erreur ouverture " - -#: eeschema/load_one_schematic_file.cpp:109 -msgid "Loading " -msgstr "Chargement " - -#: eeschema/load_one_schematic_file.cpp:116 -#: eeschema/load_one_schematic_file.cpp:141 -msgid " is NOT an EESchema file!" -msgstr " n'est PAS un fichier EESchema!" - -#: eeschema/load_one_schematic_file.cpp:126 -msgid " was created by a more recent version of EESchema and may not load correctly. Please consider updating!" -msgstr " a été créé par une version plus récente de Eeschema et peut ne pas être chargé correctement. SVP mettez a jour Eeschema!" - -#: eeschema/load_one_schematic_file.cpp:133 -msgid " was created by an older version of EESchema. It will be stored in the new file format when you save this file again." -msgstr " a été créé par une version plus ancienne de Eeschema. Il sera enregistré au nouveau format après la prochaine sauvegarde." - -#: eeschema/load_one_schematic_file.cpp:484 -msgid "Done Loading " -msgstr "Chargement terminé" - #: eeschema/menubar.cpp:41 msgid "&New" msgstr "&Nouveau" @@ -6970,6 +6237,651 @@ msgstr "&Voir" msgid "&Place" msgstr "&Placer" +#: eeschema/libfield.cpp:206 +msgid "Edit field" +msgstr "Editer Champ" + +#: eeschema/libfield.cpp:221 +msgid "No new text: no change" +msgstr "Pas de nouveau texte: pas de changements" + +#: eeschema/sheetlab.cpp:73 +msgid "PinSheet Properties:" +msgstr "Propriétés des Pins de Hierarchie" + +#: eeschema/sheetlab.cpp:107 +msgid "PinSheet Shape:" +msgstr "Forme Pin de hiérarchie:" + +#: eeschema/sheetlab.cpp:328 +msgid "PinSheet" +msgstr "Pin de Feuille de Hiérarchie" + +#: eeschema/sheetlab.cpp:388 +msgid "No New Hierarchal Label found" +msgstr "Pas de nouvea Label Hiérarchique trouvé" + +#: eeschema/viewlib_frame.cpp:53 +msgid "Library browser" +msgstr "Visualisateur des librairies" + +#: eeschema/edit_label.cpp:49 +msgid "Empty Text!" +msgstr "Texte vide" + +#: eeschema/eeconfig.cpp:73 +msgid "File " +msgstr "Fichier " + +#: eeschema/eeconfig.cpp:73 +msgid "not found" +msgstr " non trouvé" + +#: eeschema/eelayer.cpp:233 +msgid "White" +msgstr "Blanc" + +#: eeschema/eelayer.cpp:234 +msgid "Black" +msgstr "Noir" + +#: eeschema/eelayer.cpp:235 +msgid "Background Color:" +msgstr "Couleur du Fond:" + +#: eeschema/symbdraw.cpp:789 +#, c-format +msgid "Arc %.1f deg" +msgstr "Arc %.1f deg" + +#: eeschema/eelibs_read_libraryfiles.cpp:115 +msgid "Start loading schematic libs" +msgstr "Demarre chargement des librairies schématiques" + +#: eeschema/eelibs_read_libraryfiles.cpp:302 +#: eeschema/eelibs_read_libraryfiles.cpp:309 +msgid "File <" +msgstr "Fichier <" + +#: eeschema/eelibs_read_libraryfiles.cpp:302 +msgid "> is empty!" +msgstr "> est vide" + +#: eeschema/eelibs_read_libraryfiles.cpp:309 +msgid "> is NOT EESCHEMA library!" +msgstr "> nest PAS une librairie EESCHEMA !" + +#: eeschema/eelibs_read_libraryfiles.cpp:328 +msgid "Library <" +msgstr "Librairie <" + +#: eeschema/eelibs_read_libraryfiles.cpp:328 +msgid "> header read error" +msgstr "> erreur lecture entête" + +#: eeschema/eeschema.cpp:54 +msgid "Eeschema is already running, Continue?" +msgstr "Eeschema est est cours d'exécution. Continuer ?" + +#: eeschema/erc.cpp:287 +msgid "Annotation Required!" +msgstr "Numérotation requise!" + +#: eeschema/erc.cpp:392 +msgid "ERC file:" +msgstr "Fichier ERC:" + +#: eeschema/erc.cpp:546 +#, c-format +msgid "Warning HLabel %s not connected to SheetLabel" +msgstr "Attention HLabel %s non connecté a SheetLabel" + +#: eeschema/erc.cpp:550 +#, c-format +msgid "Warning SheetLabel %s not connected to HLabel" +msgstr "Warning SheetLabel %s non connecté a HLabel" + +#: eeschema/erc.cpp:564 +#, c-format +msgid "Warning Pin %s Unconnected" +msgstr "Warning Pin %s Non connectée" + +#: eeschema/erc.cpp:573 +#, c-format +msgid "Warning Pin %s not driven (Net %d)" +msgstr "Warning Pin %s non pilotée (Net %d)" + +#: eeschema/erc.cpp:584 +msgid "Warning More than 1 Pin connected to UnConnect symbol" +msgstr "Warning: plus que 1 Pin connectée a un symbole de non connexion" + +#: eeschema/erc.cpp:595 +msgid "Warning" +msgstr "Avertissement" + +#: eeschema/erc.cpp:598 +msgid "Error" +msgstr "Erreur" + +#: eeschema/erc.cpp:604 +#, c-format +msgid "%s: Pin %s connected to Pin %s (net %d)" +msgstr "%s: Pin %s connectée a Pin %s (net %d)" + +#: eeschema/erc.cpp:723 +msgid "ERC control" +msgstr "Controle ERC" + +#: eeschema/erc.cpp:733 +msgid "" +"\n" +"***** Sheet / (Root) \n" +msgstr "" +"\n" +"***** Feuille/ ( Racine)\n" + +#: eeschema/erc.cpp:738 +#, c-format +msgid "" +"\n" +"***** Sheet %s\n" +msgstr "" +"\n" +"***** Feuille %s\n" + +#: eeschema/erc.cpp:755 +#, c-format +msgid "ERC: %s (X= %2.3f inches, Y= %2.3f inches\n" +msgstr "ERC: %s (X= %2.3f pouces, Y= %2.3f pouces\n" + +#: eeschema/erc.cpp:764 +#, c-format +msgid "" +"\n" +" >> Errors ERC: %d\n" +msgstr "" +"\n" +" >> Erreurs ERC: %d\n" + +#: eeschema/files-io.cpp:72 +msgid "Clear Schematic Hierarchy (modified!)?" +msgstr "Effacer la hiérarchie schématique (modifiée!)?" + +#: eeschema/files-io.cpp:82 +msgid "Schematic files:" +msgstr "Fichiers schématiques:" + +#: eeschema/files-io.cpp:133 +msgid "" +"Ready\n" +"Working dir: \n" +msgstr "" +"Pret\n" +"Répertoire de travail: \n" + +#: eeschema/files-io.cpp:181 +#, c-format +msgid "File %s not found (new project ?)" +msgstr " fichier %s non trouvé (nouveau projet ?)" + +#: eeschema/find.cpp:212 +msgid "Pin " +msgstr "Pin " + +#: eeschema/find.cpp:216 +msgid "Ref " +msgstr "Ref " + +#: eeschema/find.cpp:224 +msgid "Field " +msgstr "Champ " + +#: eeschema/find.cpp:234 +#: eeschema/find.cpp:238 +msgid " found" +msgstr " trouvé " + +#: eeschema/find.cpp:371 +#, c-format +msgid "Marker %d found in %s" +msgstr "Marqueur %d trouvé en %s " + +#: eeschema/find.cpp:377 +msgid "Marker Not Found" +msgstr "Marqueur non trouvé" + +#: eeschema/find.cpp:609 +msgid " Found in " +msgstr " Trouvé en " + +#: eeschema/find.cpp:621 +msgid " Not Found" +msgstr " Non trouvé" + +#: eeschema/find.cpp:653 +msgid "No libraries are loaded" +msgstr "Pas de librairies chargées" + +#: eeschema/find.cpp:680 +#: eeschema/find.cpp:745 +#: eeschema/find.cpp:761 +msgid "Found " +msgstr "Trouvé " + +#: eeschema/find.cpp:682 +#: eeschema/find.cpp:746 +#: eeschema/find.cpp:762 +msgid " in lib " +msgstr " en libr. " + +#: eeschema/find.cpp:693 +msgid " found only in cache" +msgstr "trouvé seulement en cache" + +#: eeschema/find.cpp:696 +msgid "" +"\n" +"Explore All Libraries?" +msgstr "" +"\n" +"Explorer toutes les Librairies?" + +#: eeschema/find.cpp:702 +msgid "Nothing found" +msgstr " Rien trouvé" + +#: eeschema/getpart.cpp:106 +#, c-format +msgid "component selection (%d items loaded):" +msgstr "Sélection Composant (%d items chargés):" + +#: eeschema/getpart.cpp:171 +msgid "Failed to find part " +msgstr "Impossible de trouver le composant " + +#: eeschema/getpart.cpp:171 +msgid " in library" +msgstr " en librairie" + +#: eeschema/hierarch.cpp:122 +msgid "Navigator" +msgstr "Navigateur" + +#: eeschema/hierarch.cpp:133 +msgid "Root" +msgstr "Racine" + +#: eeschema/hotkeys.cpp:249 +msgid "Add Component" +msgstr "Ajout Composant" + +#: eeschema/hotkeys.cpp:271 +msgid "Add Wire" +msgstr "Ajouter Fils" + +#: eeschema/libarch.cpp:78 +msgid "Failed to create archive lib file " +msgstr "Impossible de créer le fichier librairie archive " + +#: eeschema/libarch.cpp:85 +msgid "Failed to create doc lib file " +msgstr "Impossible de créer le fichier lib document" + +#: 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:112 +#: eeschema/libedit.cpp:388 +msgid "Component \"" +msgstr "Composant \"" + +#: eeschema/libedit.cpp:112 +msgid "\" not found." +msgstr "\" non trouvé" + +#: eeschema/libedit.cpp:233 +msgid "Modify Library File \"" +msgstr "Ok pour modifier le fichier Librairie \"" + +#: eeschema/libedit.cpp:233 +msgid "\"?" +msgstr "\"?" + +#: eeschema/libedit.cpp:242 +msgid "Error while saving Library File \"" +msgstr "Erreur en sauvant le fichier Librairie \"" + +#: eeschema/libedit.cpp:242 +#: eeschema/libedit.cpp:389 +msgid "\"." +msgstr "\"." + +#: eeschema/libedit.cpp:248 +msgid "Library File \"" +msgstr "Fichier Librairie \"" + +#: eeschema/libedit.cpp:250 +msgid "Document File \"" +msgstr "Fichier de Doc \"" + +#: eeschema/libedit.cpp:303 +msgid "No Active Library" +msgstr "Pas de Librairie Active" + +#: eeschema/libedit.cpp:319 +#, c-format +msgid "Select Component (%d items)" +msgstr "Selection composant (%d items)" + +#: eeschema/libedit.cpp:342 +msgid "Component not found" +msgstr "Composant non trouvé" + +#: eeschema/libedit.cpp:346 +msgid "Delete component \"" +msgstr "Suppression Composant \"" + +#: eeschema/libedit.cpp:347 +msgid "\" from library \"" +msgstr "\" de la librairie \"" + +#: eeschema/libedit.cpp:371 +msgid "Clear old component from screen (changes will be lost)?" +msgstr "Supprimer l'ancien composant de l'écran (les changements seront perdus)?" + +#: eeschema/libedit.cpp:389 +msgid "\" exists in library \"" +msgstr "\" existe en librairie \"" + +#: eeschema/libedit.cpp:556 +msgid "No component to Save." +msgstr "Pas de composant à sauver" + +#: eeschema/libedit.cpp:563 +msgid "No Library specified." +msgstr "Pas de Librairie spécifiée." + +#: eeschema/libedit.cpp:574 +#, c-format +msgid "Component \"%s\" exists. Change it?" +msgstr "Le composant \" %s\" existe, Le changer ?" + +#: eeschema/libedit.cpp:613 +#, c-format +msgid "Component %s saved in %s" +msgstr "Composant %s sauvé en %s" + +#: eeschema/libedit_onrightclick.cpp:77 +msgid "Move Arc " +msgstr "Déplacer arc" + +#: eeschema/libedit_onrightclick.cpp:81 +msgid "Arc Options" +msgstr "Options pour l'Arc" + +#: eeschema/libedit_onrightclick.cpp:84 +msgid "Delete Arc " +msgstr "Effacer Arc" + +#: eeschema/libedit_onrightclick.cpp:92 +msgid "Move Circle " +msgstr "Déplacer Cercle" + +#: eeschema/libedit_onrightclick.cpp:96 +msgid "Circle Options" +msgstr "Options pour le Cercle" + +#: eeschema/libedit_onrightclick.cpp:99 +msgid "Delete Circle " +msgstr "Supprimer Cercle" + +#: eeschema/libedit_onrightclick.cpp:107 +msgid "Move Rect " +msgstr "Déplacer Rect" + +#: eeschema/libedit_onrightclick.cpp:111 +msgid "Rect Options" +msgstr "Options pour le Rectangle" + +#: eeschema/libedit_onrightclick.cpp:114 +msgid "Delete Rect " +msgstr "Supprimer Rect" + +#: eeschema/libedit_onrightclick.cpp:122 +msgid "Move Text " +msgstr "Déplacer Texte" + +#: eeschema/libedit_onrightclick.cpp:126 +msgid "Text Editor" +msgstr "Editeur de Texte" + +#: eeschema/libedit_onrightclick.cpp:128 +msgid "Rotate Text" +msgstr "Rot. Texte" + +#: eeschema/libedit_onrightclick.cpp:131 +msgid "Delete Text " +msgstr "Supprimer Texte" + +#: eeschema/libedit_onrightclick.cpp:139 +msgid "Move Line " +msgstr "Déplacer Ligne" + +#: eeschema/libedit_onrightclick.cpp:145 +msgid "Line End" +msgstr "Fin ligne" + +#: eeschema/libedit_onrightclick.cpp:148 +msgid "Line Options" +msgstr "Options pour Ligne" + +#: eeschema/libedit_onrightclick.cpp:151 +msgid "Delete Line " +msgstr "Efface Ligne" + +#: eeschema/libedit_onrightclick.cpp:158 +msgid "Delete Segment " +msgstr "Supprimer Segment" + +#: eeschema/libedit_onrightclick.cpp:168 +msgid "Move Field " +msgstr "Déplace Champ" + +#: eeschema/libedit_onrightclick.cpp:172 +msgid "Field Rotate" +msgstr "Rotation Champ" + +#: eeschema/libedit_onrightclick.cpp:174 +msgid "Field Edit" +msgstr "Edition du champ" + +#: eeschema/libedit_onrightclick.cpp:199 +msgid "Move Pin" +msgstr "Déplace pin" + +#: eeschema/libedit_onrightclick.cpp:202 +msgid "Edit Pin " +msgstr "Editer Pin" + +#: eeschema/libedit_onrightclick.cpp:207 +msgid "Delete Pin " +msgstr "Supprimer Pin" + +#: eeschema/libedit_onrightclick.cpp:212 +msgid "Global" +msgstr "Global" + +#: eeschema/libedit_onrightclick.cpp:214 +msgid "Pin Size to selected pins" +msgstr "Change taille pins sélectionnées" + +#: eeschema/libedit_onrightclick.cpp:214 +msgid "Pin Size to others" +msgstr "Change taille autres pins" + +#: eeschema/libedit_onrightclick.cpp:217 +msgid "Pin Name Size to selected pin" +msgstr "Change taille Nom pin sélectionnées" + +#: eeschema/libedit_onrightclick.cpp:217 +msgid "Pin Name Size to others" +msgstr "Change taille Nom pin autres pins" + +#: eeschema/libedit_onrightclick.cpp:220 +msgid "Pin Num Size to selected pin" +msgstr "Change taille Num pins sélectionnées" + +#: eeschema/libedit_onrightclick.cpp:220 +msgid "Pin Num Size to others" +msgstr "Change taille Num pin autres pins" + +#: eeschema/libedit_onrightclick.cpp:242 +msgid "Select items" +msgstr "Sélection des éléments" + +#: eeschema/libedit_onrightclick.cpp:245 +msgid "Mirror Block (ctrl + drag mouse)" +msgstr "Bloc Miroir (ctrl + drag mouse)" + +#: eeschema/libedit_onrightclick.cpp:247 +msgid "Del. Block (shift+ctrl + drag mouse)" +msgstr "Effacement Bloc (shift+ctrl + drag mouse)" + +#: eeschema/libframe.cpp:102 +msgid "" +"Component was modified!\n" +"Discard changes?" +msgstr "" +"Le composant a été modifié\n" +"Perdre les changements" + +#: eeschema/libframe.cpp:115 +#, c-format +msgid "" +"Library \"%s\" was modified!\n" +"Discard changes?" +msgstr "" +"Librairie \"%s\" modifiée!\n" +"Perdre les changements ?" + +#: eeschema/libframe.cpp:342 +msgid "Include last component changes?" +msgstr "Inclure les dernieres modifs du composant" + +#: eeschema/libframe.cpp:405 +msgid " Pins Test OK!" +msgstr " Test Pins OK!" + +#: eeschema/libframe.cpp:479 +msgid "Add Pin" +msgstr "Addition de \"pins\"" + +#: eeschema/libframe.cpp:483 +msgid "Set Pin Options" +msgstr "Choix Options des Pins" + +#: eeschema/libframe.cpp:505 +msgid "Add Rectangle" +msgstr "Addition de rectangles" + +#: eeschema/libframe.cpp:509 +msgid "Add Circle" +msgstr "Addition de cercle" + +#: eeschema/libframe.cpp:513 +msgid "Add Arc" +msgstr "Addition d' arc" + +#: eeschema/libframe.cpp:521 +msgid "Anchor" +msgstr "Ancre" + +#: eeschema/libframe.cpp:531 +msgid "Export" +msgstr "Exporter" + +#: eeschema/lib_export.cpp:39 +msgid "Import component:" +msgstr "Importer composant:" + +#: eeschema/lib_export.cpp:73 +msgid "File is empty" +msgstr "Fichier vide" + +#: eeschema/lib_export.cpp:94 +msgid "No Part to Save" +msgstr "Pas de composant à sauver" + +#: eeschema/lib_export.cpp:106 +msgid "New Library" +msgstr "Nouvelle Librairie" + +#: eeschema/lib_export.cpp:106 +msgid "Export component:" +msgstr "Exporter composant:" + +#: eeschema/lib_export.cpp:143 +msgid "0k" +msgstr "Ok" + +#: eeschema/lib_export.cpp:145 +msgid "" +"Note: this new library will be available only if it is loaded by eeschema.\n" +"Modify eeschema config if you want use it." +msgstr "" +"Note: cette nouvelle librairie sera disponible seulement si elle est chargée par eeschema\n" +"Modifier la config de eeschema si vous voulez l'utiliser" + +#: eeschema/lib_export.cpp:148 +msgid "Error while create " +msgstr "Erreur en création de " + +#: eeschema/load_one_schematic_file.cpp:104 +msgid "Failed to open " +msgstr "Erreur ouverture " + +#: eeschema/load_one_schematic_file.cpp:109 +msgid "Loading " +msgstr "Chargement " + +#: eeschema/load_one_schematic_file.cpp:116 +#: eeschema/load_one_schematic_file.cpp:141 +msgid " is NOT an EESchema file!" +msgstr " n'est PAS un fichier EESchema!" + +#: eeschema/load_one_schematic_file.cpp:126 +msgid " was created by a more recent version of EESchema and may not load correctly. Please consider updating!" +msgstr " a été créé par une version plus récente de Eeschema et peut ne pas être chargé correctement. SVP mettez a jour Eeschema!" + +#: eeschema/load_one_schematic_file.cpp:133 +msgid " was created by an older version of EESchema. It will be stored in the new file format when you save this file again." +msgstr " a été créé par une version plus ancienne de Eeschema. Il sera enregistré au nouveau format après la prochaine sauvegarde." + +#: eeschema/load_one_schematic_file.cpp:484 +msgid "Done Loading " +msgstr "Chargement terminé" + #: eeschema/plothpgl.cpp:222 msgid "Sheet Size" msgstr "Dim. feuille" @@ -7472,21 +7384,21 @@ msgstr "low out" msgid "Occupied by other pin. Continue?" msgstr "Occupé une autre pin, Continuer ?" -#: eeschema/pinedit.cpp:1005 +#: eeschema/pinedit.cpp:1004 #, c-format msgid "Duplicate Pin %4.4s (Pin %s loc %d, %d, and Pin %s loc %d, %d)" msgstr "Pin dupliquée %4.4s (Pin %s loc %d, %d, etPin %s loc %d, %d)" -#: eeschema/pinedit.cpp:1011 +#: eeschema/pinedit.cpp:1010 #, c-format msgid " Part %d" msgstr "Composant %d" -#: eeschema/pinedit.cpp:1017 +#: eeschema/pinedit.cpp:1016 msgid " Convert" msgstr " Convert" -#: eeschema/pinedit.cpp:1019 +#: eeschema/pinedit.cpp:1018 msgid " Normal" msgstr " Normal" @@ -7600,23 +7512,6 @@ msgstr "Cette opération changera l'annotation actuelle et ne pourra être annul msgid "Ok to continue renaming?" msgstr "Ok pour continuer le changement de nom?" -#: eeschema/sheetlab.cpp:73 -msgid "PinSheet Properties:" -msgstr "Propriétés des Pins de Hierarchie" - -#: eeschema/sheetlab.cpp:107 -msgid "PinSheet Shape:" -msgstr "Forme Pin de hiérarchie:" - -#: eeschema/sheetlab.cpp:388 -msgid "No New Hierarchal Label found" -msgstr "Pas de nouvea Label Hiérarchique trouvé" - -#: eeschema/symbdraw.cpp:790 -#, c-format -msgid "Arc %.1f deg" -msgstr "Arc %.1f deg" - #: eeschema/symbedit.cpp:52 msgid "Import symbol drawings:" msgstr "Importer les symboles:" @@ -7634,11 +7529,11 @@ msgstr "Warning: plus de 1élément dans le fichier symbole" msgid "Symbol File is void" msgstr "Fichier Symbole vide" -#: eeschema/symbedit.cpp:151 +#: eeschema/symbedit.cpp:150 msgid "Export symbol drawings:" msgstr "Exporter le symbole" -#: eeschema/symbedit.cpp:171 +#: eeschema/symbedit.cpp:170 #, c-format msgid "Save Symbol in [%s]" msgstr "Symbole sauvé en [%s]" @@ -7866,7 +7761,6 @@ msgid "Place the graphic line or polygon" msgstr "Placer la ligne ou le polygones graphique" #: eeschema/tool_sch.cpp:267 -#: eeschema/schframe.cpp:421 msgid "Show Hidden Pins" msgstr "Force affichage des pins invisibles" @@ -7941,9 +7835,190 @@ msgstr "Erreur: Root Part <%s> non trouvé" msgid "Current Part: <%s>" msgstr "Cmp Courant: <%s>" -#: eeschema/viewlib_frame.cpp:53 -msgid "Library browser" -msgstr "Visualisateur des librairies" +#: eeschema/edit_component_in_lib.cpp:168 +msgid "Lib Component Properties" +msgstr "Propriétés du composant librairie" + +#: eeschema/edit_component_in_lib.cpp:172 +msgid "Properties for " +msgstr "Propriétés pour " + +#: eeschema/edit_component_in_lib.cpp:177 +msgid "(alias of " +msgstr "(alias de " + +#: eeschema/edit_component_in_lib.cpp:245 +#: eeschema/edit_component_in_lib.cpp:328 +msgid "Delete All" +msgstr "Tout Supprimer" + +#: eeschema/edit_component_in_lib.cpp:281 +#: eeschema/edit_component_in_lib.cpp:1189 +msgid "Footprint Filter" +msgstr "Filtrage Modules" + +#: eeschema/edit_component_in_lib.cpp:293 +msgid "Footprints" +msgstr "Modules" + +#: eeschema/edit_component_in_lib.cpp:407 +msgid "Show Pin Num" +msgstr "Montre Numéro de Pin" + +#: eeschema/edit_component_in_lib.cpp:476 +msgid "Left justify" +msgstr "Justifié à gauche" + +#: eeschema/edit_component_in_lib.cpp:476 +#: eeschema/edit_component_in_lib.cpp:478 +msgid "Center" +msgstr "Centrer" + +#: eeschema/edit_component_in_lib.cpp:476 +msgid "Right justify" +msgstr "Justifié à droite" + +#: eeschema/edit_component_in_lib.cpp:478 +msgid "Bottom justify" +msgstr "Justifié en bas" + +#: eeschema/edit_component_in_lib.cpp:478 +msgid "Top justify" +msgstr "Justifié en haut" + +#: eeschema/edit_component_in_lib.cpp:508 +#: eeschema/edit_component_in_schematic.cpp:205 +msgid "Field Name:" +msgstr "Nom Champ" + +#: eeschema/edit_component_in_lib.cpp:518 +#: eeschema/edit_component_in_schematic.cpp:215 +msgid "Field Text:" +msgstr "Texte du Champ:" + +#: eeschema/edit_component_in_lib.cpp:524 +#: eeschema/edit_component_in_schematic.cpp:223 +msgid "Pos" +msgstr "Pos" + +#: eeschema/edit_component_in_lib.cpp:529 +msgid "Hor Justify" +msgstr "Justifié horiz" + +#: eeschema/edit_component_in_lib.cpp:536 +msgid "Vert Justify" +msgstr "Justifié Vert." + +#: eeschema/edit_component_in_lib.cpp:551 +msgid "Chip Name" +msgstr "Nom en librairie" + +#: eeschema/edit_component_in_lib.cpp:554 +#: eeschema/edit_component_in_schematic.cpp:199 +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" + +#: eeschema/edit_component_in_lib.cpp:915 +msgid "New alias:" +msgstr "Noveau alias" + +#: eeschema/edit_component_in_lib.cpp:915 +msgid "Component Alias" +msgstr "Alias de Composant" + +#: eeschema/edit_component_in_lib.cpp:923 +msgid "This is the Root Part" +msgstr "Ceci est le composant racine" + +#: eeschema/edit_component_in_lib.cpp:932 +#: eeschema/edit_component_in_lib.cpp:1200 +msgid "Already in use" +msgstr "Déja en usage" + +#: eeschema/edit_component_in_lib.cpp:957 +msgid " is Current Selected Alias!" +msgstr " est l' Alias actuellement sélectionné!" + +#: eeschema/edit_component_in_lib.cpp:1010 +msgid "Delete units" +msgstr "Supprimer unité" + +#: eeschema/edit_component_in_lib.cpp:1080 +msgid "Create pins for Convert items" +msgstr "Créér les pins des unitées converties" + +#: eeschema/edit_component_in_lib.cpp:1084 +msgid "Part as \"De Morgan\" anymore" +msgstr "Le composant a une représentation convertie" + +#: eeschema/edit_component_in_lib.cpp:1109 +msgid "Delete Convert items" +msgstr "Suppression des éléments convertis" + +#: eeschema/edit_component_in_lib.cpp:1144 +msgid "Doc Files" +msgstr "Fichiers de Doc" + +#: eeschema/edit_component_in_lib.cpp:1167 +msgid "Ok to Delete FootprintFilter LIST" +msgstr "Ok pour effacer la LISTE des filtres de modules" + +#: eeschema/edit_component_in_lib.cpp:1189 +msgid "New FootprintFilter:" +msgstr "Nouveau Filtre de Modules:" + +#: eeschema/edit_component_in_schematic.cpp:330 +msgid "No Component Name!" +msgstr "Pas de nom de composant!" + +#: eeschema/edit_component_in_schematic.cpp:336 +#, c-format +msgid "Component [%s] not found!" +msgstr "Composant [%s] non trouvé!" + +#: eeschema/edit_component_in_schematic.cpp:457 +msgid "No Field to move" +msgstr "Pas de champ a déplacer" + +#: eeschema/edit_component_in_schematic.cpp:520 +msgid "No Field To Edit" +msgstr "Pas de champ a éditer" + +#: eeschema/edit_component_in_schematic.cpp:534 +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:558 +msgid "Component field text" +msgstr "Champ de Composant" + +#: eeschema/edit_component_in_schematic.cpp:581 +msgid "Reference needed !, No change" +msgstr "Référence NECESSAIRE: changement refusé" + +#: eeschema/edit_component_in_schematic.cpp:585 +msgid "Value needed !, No change" +msgstr "Valeur NECESSAIRE: changement refusé" + +#: eeschema/edit_component_in_schematic.cpp:758 +msgid "Component Reference" +msgstr "Référence du Composant" + +#: eeschema/edit_component_in_schematic.cpp:796 +msgid "Component Value" +msgstr "Valeur du Composant" + +#: eeschema/edit_component_in_schematic.cpp:835 +msgid "Component Footprint" +msgstr "Module du Composant" #: eeschema/pinedit-dialog.cpp:160 msgid "Pin Name :" @@ -8028,23 +8103,23 @@ msgstr "Hiérar." msgid "Sorting Nets" msgstr "Tri des Nets" -#: eeschema/netlist.cpp:852 +#: eeschema/netlist.cpp:836 msgid "Bad Bus Label: " msgstr "Mauvais label de Bus: " -#: eeschema/schframe.cpp:309 +#: eeschema/schframe.cpp:308 msgid "Schematic modified, Save before exit ?" msgstr "Schematique modifiée, Sauver avant de quitter ?" -#: eeschema/schframe.cpp:421 +#: eeschema/schframe.cpp:418 msgid "No show Hidden Pins" msgstr "N'affichage pas les pins invisibles" -#: eeschema/schframe.cpp:425 +#: eeschema/schframe.cpp:422 msgid "Draw lines at any direction" msgstr "Tracer traits de direction quelconque" -#: eeschema/schframe.cpp:426 +#: eeschema/schframe.cpp:423 msgid "Draw lines H, V or 45 deg only" msgstr "Tracer traits H, V ou 45 deg seulement" @@ -8729,6 +8804,48 @@ msgstr "Supprimer Fichier" msgid "no kicad files found in this directory" msgstr "Pas de fichier Kicad tropuvés dans ce répertoire" +#: kicad/commandframe.cpp:58 +msgid "EESchema (Schematic editor)" +msgstr "EESchema (Editeur de Schématique)" + +#: kicad/commandframe.cpp:62 +msgid "CVpcb (Components to modules)" +msgstr "CVpcb ( Association Composants/ Modules)" + +#: kicad/commandframe.cpp:66 +msgid "PCBnew (PCB editor)" +msgstr "PCBnew (Editeur de circuits imprimés)" + +#: kicad/commandframe.cpp:70 +msgid "GerbView (Gerber viewer)" +msgstr "GerbView (Visualisateur Gerber)" + +#: kicad/commandframe.cpp:78 +msgid "Run Python Script" +msgstr "Exécuter le Script Python" + +#: kicad/mainframe.cpp:102 +#, c-format +msgid "" +"Ready\n" +"Working dir: %s\n" +msgstr "" +"Pret\n" +"Répertoire de travail: %s\n" + +#: kicad/mainframe.cpp:338 +msgid "Execute Python Script:" +msgstr "Executer le Script Python:" + +#: kicad/mainframe.cpp:361 +msgid "Load file:" +msgstr "Charger Fichiers:" + +#: kicad/kicad.cpp:215 +#: kicad/treeprj_frame.cpp:432 +msgid "noname" +msgstr "noname" + #: kicad/treeprj_frame.cpp:94 msgid "&Run" msgstr "Exécute&r" @@ -8822,50 +8939,13 @@ msgstr "Créer un nouveau Fichier" msgid "Create New Directory" msgstr "Créer un nouveau Répertoire" -#: kicad/treeprj_frame.cpp:432 -msgid "noname" -msgstr "noname" - #: kicad/treeprj_frame.cpp:878 -msgid "Change File Name: " -msgstr "ChangerNom Fichier: " +msgid "Change Filename: " +msgstr "Changer Nom Fichier: " -#: kicad/commandframe.cpp:58 -msgid "EESchema (Schematic editor)" -msgstr "EESchema (Editeur de Schématique)" - -#: kicad/commandframe.cpp:62 -msgid "CVpcb (Components to modules)" -msgstr "CVpcb ( Association Composants/ Modules)" - -#: kicad/commandframe.cpp:66 -msgid "PCBnew (PCB editor)" -msgstr "PCBnew (Editeur de circuits imprimés)" - -#: kicad/commandframe.cpp:70 -msgid "GerbView (Gerber viewer)" -msgstr "GerbView (Visualisateur Gerber)" - -#: kicad/commandframe.cpp:78 -msgid "Run Python Script" -msgstr "Exécuter le Script Python" - -#: kicad/mainframe.cpp:102 -#, c-format -msgid "" -"Ready\n" -"Working dir: %s\n" -msgstr "" -"Pret\n" -"Répertoire de travail: %s\n" - -#: kicad/mainframe.cpp:338 -msgid "Execute Python Script:" -msgstr "Executer le Script Python:" - -#: kicad/mainframe.cpp:361 -msgid "Load file:" -msgstr "Charger Fichiers:" +#: kicad/treeprj_frame.cpp:879 +msgid "Change Filename" +msgstr "Changer Nom Fichier" #: gerbview/affiche.cpp:34 msgid "Layer " @@ -9592,7 +9672,7 @@ msgstr "Catalan" msgid "Dutch" msgstr "Hollandais" -#: common/edaappl.cpp:603 +#: common/edaappl.cpp:604 msgid "Language" msgstr "Langage" @@ -10061,6 +10141,11 @@ msgstr "ErrType(%d): %s
  • %s: %s
" msgid "Length(inch):" msgstr "Longueur (pouces):" +#: pcbnew/gen_self.h:217 +#: pcbnew/gen_self.h:223 +msgid "Lenght" +msgstr "Longueur" + #: pcbnew/gen_self.h:223 msgid "Length(mm):" msgstr "Long. (mm):" @@ -10150,10 +10235,6 @@ msgstr "Génération Fichiers de Perçagee" msgid "EESchema Annotation" msgstr "Annotation des composants" -#: eeschema/dialog_backanno.h:37 -msgid "EESchema Back Annotate" -msgstr "Eeschema Retro Annotation" - #: eeschema/dialog_build_BOM.h:61 msgid "List of Material" msgstr "Liste du Matériel" @@ -10454,8 +10535,8 @@ msgstr "Imprimer" msgid "Create SVG file" msgstr "Créer Fichier SVG" -#~ msgid "Lengh" -#~ msgstr "Long." +#~ msgid "EESchema Back Annotate" +#~ msgstr "Eeschema Retro Annotation" #~ msgid "MyComponent" #~ msgstr "MyComponent" diff --git a/pcbnew/CMakeLists.txt b/pcbnew/CMakeLists.txt index 75189e6885..0d35296bab 100644 --- a/pcbnew/CMakeLists.txt +++ b/pcbnew/CMakeLists.txt @@ -51,6 +51,8 @@ set(PCBNEW_SRCS # dialog_graphic_items_options.cpp # dialog_initpcb.cpp # dialog_netlist.cpp + zones_non_copper_type_functions.cpp + dialog_non_copper_zones_properties.cpp # dialog_pad_edit.cpp dialog_setup_libs.cpp dialog_orient_footprints.cpp diff --git a/pcbnew/class_board.cpp b/pcbnew/class_board.cpp index 6239e77c33..0a0a3b8f9b 100644 --- a/pcbnew/class_board.cpp +++ b/pcbnew/class_board.cpp @@ -1063,6 +1063,24 @@ void BOARD::RedrawAreasOutlines(WinEDA_DrawPanel* panel, wxDC * aDC, int aDrawMo } } +/***********************************************************************************************/ +void BOARD::RedrawFilledAreas(WinEDA_DrawPanel* panel, wxDC * aDC, int aDrawMode, int aLayer) +/***********************************************************************************************/ +/** + * Function RedrawFilledAreas + * Redraw all areas outlines on layer aLayer ( redraw all if aLayer < 0 ) + */ +{ + if ( ! aDC ) return; + + for( int ii = 0; ii < GetAreaCount(); ii++ ) + { + ZONE_CONTAINER* edge_zone = GetArea(ii); + if( (aLayer < 0) || (aLayer == edge_zone->GetLayer()) ) + edge_zone->DrawFilledArea( panel, aDC, aDrawMode ); + } +} + #if defined(DEBUG) diff --git a/pcbnew/class_board.h b/pcbnew/class_board.h index fc55048c37..8260fe4bdf 100644 --- a/pcbnew/class_board.h +++ b/pcbnew/class_board.h @@ -366,6 +366,12 @@ public: */ void RedrawAreasOutlines(WinEDA_DrawPanel* panel, wxDC * aDC, int aDrawMode, int aLayer); + /** + * Function RedrawFilledAreas + * Redraw all filled areas on layer aLayer ( redraw all if aLayer < 0 ) + */ + void RedrawFilledAreas(WinEDA_DrawPanel* panel, wxDC * aDC, int aDrawMode, int aLayer); + /** * Function SetAreasNetCodesFromNetNames * Set the .m_NetCode member of all copper areas, according to the area Net Name diff --git a/pcbnew/class_board_item.cpp b/pcbnew/class_board_item.cpp index c95a3b2cb1..c92f430ddb 100644 --- a/pcbnew/class_board_item.cpp +++ b/pcbnew/class_board_item.cpp @@ -149,7 +149,11 @@ wxString BOARD_ITEM::MenuText( const BOARD* aPcb ) const TimeStampText.Printf( wxT( "(%8.8X)" ), item->m_TimeStamp ); text << TimeStampText; } - if( ((ZONE_CONTAINER*) item)->GetNet() >= 0 ) + if ( !((ZONE_CONTAINER*) item)->IsOnCopperLayer() ) + { + text << wxT( " [" ) << _("Not on copper layer") << wxT( "]" ); + } + else if( ((ZONE_CONTAINER*) item)->GetNet() >= 0 ) { net = aPcb->FindNet( ( (ZONE_CONTAINER*) item )->GetNet() ); if( net ) diff --git a/pcbnew/class_zone.cpp b/pcbnew/class_zone.cpp index 4397dfcea1..c28d8415b2 100644 --- a/pcbnew/class_zone.cpp +++ b/pcbnew/class_zone.cpp @@ -84,8 +84,8 @@ bool ZONE_CONTAINER::Save( FILE* aFile ) const // Save the outline main info ret = fprintf( aFile, "ZInfo %8.8lX %d \"%s\"\n", - m_TimeStamp, m_NetCode, - CONV_TO_UTF8( m_Netname ) ); + m_TimeStamp, m_NetCode, + CONV_TO_UTF8( m_Netname ) ); if( ret < 3 ) return false; @@ -122,9 +122,11 @@ bool ZONE_CONTAINER::Save( FILE* aFile ) const case PAD_IN_ZONE: padoption = 'I'; break; + case THERMAL_PAD: padoption = 'T'; break; + case PAD_NOT_IN_ZONE: padoption = 'X'; break; @@ -138,8 +140,8 @@ bool ZONE_CONTAINER::Save( FILE* aFile ) const for( item_pos = 0; item_pos < corners_count; item_pos++ ) { ret = fprintf( aFile, "ZCorner %d %d %d\n", - m_Poly->corner[item_pos].x, m_Poly->corner[item_pos].y, - m_Poly->corner[item_pos].end_contour ); + m_Poly->corner[item_pos].x, m_Poly->corner[item_pos].y, + m_Poly->corner[item_pos].end_contour ); if( ret < 3 ) return false; } @@ -157,7 +159,7 @@ int ZONE_CONTAINER::ReadDescr( FILE* aFile, int* aLineNum ) /** Function ReadDescr * @param aFile = opened file * @param aLineNum = pointer on a line number counter (can be NULL or missing) - * @return 0 if ok or NULL + * @return 1 if ok or 0 */ { char Line[1024], * text; @@ -182,7 +184,7 @@ int ZONE_CONTAINER::ReadDescr( FILE* aFile, int* aLineNum ) if( !has_corner ) m_Poly->Start( m_Layer, x, y, outline_hatch ); else - AppendCorner( wxPoint(x, y) ); + AppendCorner( wxPoint( x, y ) ); has_corner = true; if( flag ) m_Poly->Close(); @@ -281,6 +283,9 @@ int ZONE_CONTAINER::ReadDescr( FILE* aFile, int* aLineNum ) } } + if( !IsOnCopperLayer() ) + SetNet( 0 ); + return error ? 0 : 1; } @@ -300,8 +305,8 @@ void ZONE_CONTAINER::Draw( WinEDA_DrawPanel* panel, wxDC* DC, int draw_mode, con return; wxPoint seg_start, seg_end; - int curr_layer = ( (PCB_SCREEN*) panel->GetScreen() )->m_Active_Layer; - int color = g_DesignSettings.m_LayerColor[m_Layer]; + int curr_layer = ( (PCB_SCREEN*) panel->GetScreen() )->m_Active_Layer; + int color = g_DesignSettings.m_LayerColor[m_Layer]; if( ( color & (ITEM_NOT_SHOW | HIGHT_LIGHT_FLAG) ) == ITEM_NOT_SHOW ) return; @@ -331,14 +336,14 @@ void ZONE_CONTAINER::Draw( WinEDA_DrawPanel* panel, wxDC* DC, int draw_mode, con int i_start_contour = 0; for( int ic = 0; ic < GetNumCorners(); ic++ ) { - seg_start = GetCornerPosition(ic) + offset; + seg_start = GetCornerPosition( ic ) + offset; if( m_Poly->corner[ic].end_contour == FALSE && ic < GetNumCorners() - 1 ) { - seg_end = GetCornerPosition(ic + 1) + offset; + seg_end = GetCornerPosition( ic + 1 ) + offset; } else { - seg_end = GetCornerPosition(i_start_contour) + offset; + seg_end = GetCornerPosition( i_start_contour ) + offset; i_start_contour = ic + 1; } GRLine( &panel->m_ClipBox, DC, seg_start.x, seg_start.y, seg_end.x, seg_end.y, 0, color ); @@ -356,20 +361,108 @@ void ZONE_CONTAINER::Draw( WinEDA_DrawPanel* panel, wxDC* DC, int draw_mode, con } -EDA_Rect ZONE_CONTAINER::GetBoundingBox() +/************************************************************************************/ +void ZONE_CONTAINER::DrawFilledArea( WinEDA_DrawPanel* panel, + wxDC* DC, int aDrawMode, const wxPoint& offset ) +/************************************************************************************/ + +/** + * Function DrawDrawFilledArea + * Draws the filled area for this zone (polygon list .m_FilledPolysList) + * @param panel = current Draw Panel + * @param DC = current Device Context + * @param offset = Draw offset (usually wxPoint(0,0)) + * @param aDrawMode = GR_OR, GR_XOR, GR_COPY .. + */ { - const int PRELOAD = 500000; + static int* CornersBuffer = NULL; + static unsigned CornersBufferSize = 0; - int ymax = -PRELOAD; - int ymin = PRELOAD; - int xmin = PRELOAD; - int xmax = -PRELOAD; + if( DC == NULL ) + return; - int count = GetNumCorners(); + if( !DisplayOpt.DisplayZones ) + return; - for( int i=0; iGetScreen() )->m_Active_Layer; + int color = g_DesignSettings.m_LayerColor[m_Layer]; + + if( ( color & (ITEM_NOT_SHOW | HIGHT_LIGHT_FLAG) ) == ITEM_NOT_SHOW ) + return; + + GRSetDrawMode( DC, aDrawMode ); + + if( DisplayOpt.ContrastModeDisplay ) { - wxPoint corner = GetCornerPosition(i); + if( !IsOnLayer( curr_layer ) ) + { + color &= ~MASKCOLOR; + color |= DARKDARKGRAY; + } + } + + if( aDrawMode & GR_SURBRILL ) + { + if( aDrawMode & GR_AND ) + color &= ~HIGHT_LIGHT_FLAG; + else + color |= HIGHT_LIGHT_FLAG; + } + if( color & HIGHT_LIGHT_FLAG ) + color = ColorRefs[color & MASKCOLOR].m_LightColor; + + // draw the filled polygon + if( CornersBuffer == NULL ) + { + CornersBufferSize = imax * 4; + CornersBuffer = (int*) MyMalloc( CornersBufferSize * sizeof(int) ); + } + + if( (imax * 4) > CornersBufferSize ) + { + CornersBufferSize = imax * 4; + CornersBuffer = (int*) realloc( CornersBuffer, CornersBufferSize * sizeof(int) ); + } + + int corners_count = 0; + for( unsigned ic = 0, ii = 0; ic < imax; ic++ ) + { + CPolyPt* corner = &m_FilledPolysList[ic]; + CornersBuffer[ii++] = corner->x + offset.x; + CornersBuffer[ii++] = corner->y + offset.y; + corners_count++; + if( corner->end_contour ) + { + GRPoly( &panel->m_ClipBox, DC, corners_count, CornersBuffer, + 1, 0, color, color ); + corners_count = 0; + ii = 0; + } + } +} + + +/****************************************/ +EDA_Rect ZONE_CONTAINER::GetBoundingBox() +/****************************************/ +{ + const int PRELOAD = 0x7FFFFFFF; // Biggest integer (32 bits) + + int ymax = -PRELOAD; + int ymin = PRELOAD; + int xmin = PRELOAD; + int xmax = -PRELOAD; + + int count = GetNumCorners(); + + for( int i = 0; iGetScreen())->m_Active_Layer; - int color = g_DesignSettings.m_LayerColor[m_Layer] & MASKCOLOR; + int curr_layer = ( (PCB_SCREEN*) panel->GetScreen() )->m_Active_Layer; + int color = g_DesignSettings.m_LayerColor[m_Layer] & MASKCOLOR; if( DisplayOpt.ContrastModeDisplay ) { @@ -417,18 +511,18 @@ void ZONE_CONTAINER::DrawWhileCreateOutline( WinEDA_DrawPanel* panel, wxDC* DC, // draw the lines - wxPoint start_contour_pos = GetCornerPosition(0); + wxPoint start_contour_pos = GetCornerPosition( 0 ); for( int ic = 0; ic < GetNumCorners(); ic++ ) { - int xi = GetCornerPosition(ic).x; - int yi = GetCornerPosition(ic).y; + int xi = GetCornerPosition( ic ).x; + int yi = GetCornerPosition( ic ).y; int xf, yf; if( m_Poly->corner[ic].end_contour == FALSE && ic < GetNumCorners() - 1 ) { is_close_segment = false; - xf = GetCornerPosition(ic + 1).x; - yf = GetCornerPosition(ic + 1).y; - if ( (m_Poly->corner[ic + 1].end_contour) || (ic == GetNumCorners() - 2) ) + xf = GetCornerPosition( ic + 1 ).x; + yf = GetCornerPosition( ic + 1 ).y; + if( (m_Poly->corner[ic + 1].end_contour) || (ic == GetNumCorners() - 2) ) current_gr_mode = GR_XOR; else current_gr_mode = draw_mode; @@ -436,13 +530,13 @@ void ZONE_CONTAINER::DrawWhileCreateOutline( WinEDA_DrawPanel* panel, wxDC* DC, else { is_close_segment = true; - current_gr_mode = GR_XOR; + current_gr_mode = GR_XOR; xf = start_contour_pos.x; yf = start_contour_pos.y; - start_contour_pos = GetCornerPosition(ic + 1); + start_contour_pos = GetCornerPosition( ic + 1 ); } GRSetDrawMode( DC, current_gr_mode ); - if ( is_close_segment ) + if( is_close_segment ) GRLine( &panel->m_ClipBox, DC, xi, yi, xf, yf, 0, WHITE ); else GRLine( &panel->m_ClipBox, DC, xi, yi, xf, yf, 0, color ); @@ -450,7 +544,6 @@ void ZONE_CONTAINER::DrawWhileCreateOutline( WinEDA_DrawPanel* panel, wxDC* DC, } - /** * Function HitTest * tests if the given wxPoint is within the bounds of this object. @@ -541,11 +634,11 @@ int ZONE_CONTAINER::HitTestForEdge( const wxPoint& refPos ) /* test the dist between segment and ref point */ dist = (int) GetPointToLineSegmentDistance( refPos.x, - refPos.y, - m_Poly->corner[item_pos].x, - m_Poly->corner[item_pos].y, - m_Poly->corner[end_segm].x, - m_Poly->corner[end_segm].y ); + refPos.y, + m_Poly->corner[item_pos].x, + m_Poly->corner[item_pos].y, + m_Poly->corner[end_segm].x, + m_Poly->corner[end_segm].y ); if( dist <= min_dist ) { m_CornerSelection = item_pos; @@ -609,23 +702,28 @@ void ZONE_CONTAINER::Display_Infos( WinEDA_DrawFrame* frame ) text_pos += 15; - if( GetNet() >= 0 ) + if( IsOnCopperLayer() ) { - EQUIPOT* equipot = ( (WinEDA_PcbFrame*) frame )->m_Pcb->FindNet( GetNet() ); + if( GetNet() >= 0 ) + { + EQUIPOT* equipot = ( (WinEDA_PcbFrame*) frame )->m_Pcb->FindNet( GetNet() ); - if( equipot ) - msg = equipot->m_Netname; - else - msg = wxT( "" ); - } - else // a netcode < 0 is an error - { - msg = wxT( " [" ); - msg << m_Netname + wxT( "]" ); - msg << wxT( " <" ) << _( "Not Found" ) << wxT( ">" ); - } + if( equipot ) + msg = equipot->m_Netname; + else + msg = wxT( "" ); + } + else // a netcode < 0 is an error + { + msg = wxT( " [" ); + msg << m_Netname + wxT( "]" ); + msg << wxT( " <" ) << _( "Not Found" ) << wxT( ">" ); + } - Affiche_1_Parametre( frame, text_pos, _( "NetName" ), msg, RED ); + Affiche_1_Parametre( frame, text_pos, _( "NetName" ), msg, RED ); + } + else + Affiche_1_Parametre( frame, text_pos, _( "Non Copper Zone" ), wxEmptyString, RED ); /* Display net code : (usefull in test or debug) */ text_pos += 18; @@ -657,12 +755,13 @@ void ZONE_CONTAINER::Move( const wxPoint& offset ) { for( unsigned ii = 0; ii < m_Poly->corner.size(); ii++ ) { - SetCornerPosition(ii, GetCornerPosition(ii) + offset); + SetCornerPosition( ii, GetCornerPosition( ii ) + offset ); } m_Poly->Hatch(); } + /** * Function MoveEdge * Move the outline Edge. m_CornerSelection is the start point of the outline edge @@ -673,17 +772,17 @@ void ZONE_CONTAINER::MoveEdge( const wxPoint& offset ) int ii = m_CornerSelection; // Move the start point of the selected edge: - SetCornerPosition(ii, GetCornerPosition(ii) + offset); + SetCornerPosition( ii, GetCornerPosition( ii ) + offset ); // Move the end point of the selected edge: - if ( m_Poly->corner[ii].end_contour || ii == GetNumCorners() - 1) + if( m_Poly->corner[ii].end_contour || ii == GetNumCorners() - 1 ) { int icont = m_Poly->GetContour( ii ); ii = m_Poly->GetContourStart( icont ); } else ii++; - SetCornerPosition(ii, GetCornerPosition(ii) + offset); + SetCornerPosition( ii, GetCornerPosition( ii ) + offset ); m_Poly->Hatch(); } diff --git a/pcbnew/class_zone.h b/pcbnew/class_zone.h index 2621a6e0b0..b55987c0e2 100644 --- a/pcbnew/class_zone.h +++ b/pcbnew/class_zone.h @@ -5,6 +5,8 @@ #ifndef CLASS_ZONE_H #define CLASS_ZONE_H +#include + #include "PolyLine.h" /************************/ @@ -25,30 +27,38 @@ public: PAD_IN_ZONE // pads are covered by copper }; - wxString m_Netname; // Net Name - CPolyLine* m_Poly; // outlines - int m_CornerSelection; // For corner moving, corner index to drag, or -1 if no selection - int m_ZoneClearance; // clearance value - int m_GridFillValue; // Grid used for filling - m_PadInZone m_PadOption; // see m_PadInZone - int utility, utility2; // flags used in polygon calculations + wxString m_Netname; // Net Name + CPolyLine* m_Poly; // outlines + int m_CornerSelection; // For corner moving, corner index to drag, or -1 if no selection + int m_ZoneClearance; // clearance value + int m_GridFillValue; // Grid used for filling + m_PadInZone m_PadOption; // see m_PadInZone + int utility, utility2; // flags used in polygon calculations + std::vector m_FilledPolysList; /* set of filled polygons used to draw a zone as a filled area. + * from outlines (m_Poly) but unlike m_Poly these filled polygons have no hole (they are all in one piece) + * In very simple cases m_FilledPolysList is same as m_Poly + * In less simple cases (when m_Poly has holes) m_FilledPolysList is a polygon equivalent to m_Poly, without holes + * In complex cases an ouline decribed by m_Poly can have many filled areas + */ private: - int m_NetCode; // Net number for fast comparisons + int m_NetCode; // Net number for fast comparisons public: - ZONE_CONTAINER( BOARD * parent ); + ZONE_CONTAINER( BOARD* parent ); ~ZONE_CONTAINER(); - bool Save( FILE* aFile ) const; - int ReadDescr( FILE* aFile, int* aLineNum = NULL ); + bool Save( FILE* aFile ) const; + int ReadDescr( FILE* aFile, int* aLineNum = NULL ); wxPoint& GetPosition() { static wxPoint pos; + return pos; } + void UnLink( void ) { }; @@ -58,9 +68,9 @@ public: * copy usefull data from the source. * flags and linked list pointers are NOT copied */ - void Copy( ZONE_CONTAINER* src ); + void Copy( ZONE_CONTAINER* src ); - void Display_Infos( WinEDA_DrawFrame* frame ); + void Display_Infos( WinEDA_DrawFrame* frame ); /** * Function Draw @@ -70,8 +80,23 @@ public: * @param offset = Draw offset (usually wxPoint(0,0)) * @param aDrawMode = GR_OR, GR_XOR, GR_COPY .. */ - void Draw( WinEDA_DrawPanel* panel, wxDC* DC, int aDrawMode, const wxPoint& offset = ZeroOffset ); + void Draw( WinEDA_DrawPanel* panel, + wxDC* DC, + int aDrawMode, + const wxPoint& offset = ZeroOffset ); + /** + * Function DrawDrawFilledArea + * Draws the filled area for this zone (polygon list .m_FilledPolysList) + * @param panel = current Draw Panel + * @param DC = current Device Context + * @param offset = Draw offset (usually wxPoint(0,0)) + * @param aDrawMode = GR_OR, GR_XOR, GR_COPY .. + */ + void DrawFilledArea( WinEDA_DrawPanel* panel, + wxDC* DC, + int aDrawMode, + const wxPoint& offset = ZeroOffset ); EDA_Rect GetBoundingBox(); @@ -85,14 +110,26 @@ public: * @param DC = current Device Context * @param draw_mode = draw mode: OR, XOR .. */ - void DrawWhileCreateOutline( WinEDA_DrawPanel* panel, wxDC* DC, int draw_mode = GR_OR ); + void DrawWhileCreateOutline( WinEDA_DrawPanel* panel, wxDC* DC, int draw_mode = GR_OR ); + + + /** + * Function IsOnCopperLayer + * @return true if this zone is on a copper layer, false if on a technical layer + */ + bool IsOnCopperLayer( void ) + { + return ( GetLayer() < FIRST_NO_COPPER_LAYER ) ? true : false; + } int GetNet( void ) const { return m_NetCode; } - void SetNet( int anet_code ); + + + void SetNet( int anet_code ); /** * Function HitTest @@ -100,7 +137,15 @@ public: * @param refPos A wxPoint to test * @return bool - true if a hit, else false */ - bool HitTest( const wxPoint& refPos ); + bool HitTest( const wxPoint& refPos ); + + /** function BuildFilledPolysListData + * Build m_FilledPolysList data from real outlines (m_Poly) + * in order to have drawable (and plottable) filled polygons + * drawable filled polygons are polygons without hole + * @return number of polygons + */ + int BuildFilledPolysListData( void ); /** * Function HitTestForCorner @@ -108,7 +153,7 @@ public: * @return -1 if none, corner index in .corner * @param refPos : A wxPoint to test */ - int HitTestForCorner( const wxPoint& refPos ); + int HitTestForCorner( const wxPoint& refPos ); /** * Function HitTestForEdge @@ -116,7 +161,7 @@ public: * @return -1 if none, or index of the starting corner in .corner * @param refPos : A wxPoint to test */ - int HitTestForEdge( const wxPoint& refPos ); + int HitTestForEdge( const wxPoint& refPos ); /** * Function HitTest (overlayed) @@ -124,7 +169,7 @@ public: * @param refArea : the given EDA_Rect * @return bool - true if a hit, else false */ - bool HitTest( EDA_Rect& refArea ); + bool HitTest( EDA_Rect& refArea ); /** * Function Fill_Zone() @@ -137,7 +182,7 @@ public: * @param verbose = true to show error messages * @return error level (0 = no error) */ - int Fill_Zone( WinEDA_PcbFrame* frame, wxDC* DC, bool verbose = TRUE ); + int Fill_Zone( WinEDA_PcbFrame* frame, wxDC* DC, bool verbose = TRUE ); /* Geometric transformations: */ @@ -146,14 +191,14 @@ public: * Move the outlines * @param offset = moving vector */ - void Move( const wxPoint& offset ); + void Move( const wxPoint& offset ); /** * Function MoveEdge * Move the outline Edge. m_CornerSelection is the start point of the outline edge * @param offset = moving vector */ - void MoveEdge( const wxPoint& offset ); + void MoveEdge( const wxPoint& offset ); /** * Function Rotate @@ -161,7 +206,7 @@ public: * @param centre = rot centre * @param angle = in 0.1 degree */ - void Rotate( const wxPoint& centre, int angle ); + void Rotate( const wxPoint& centre, int angle ); /** * Function Mirror @@ -169,7 +214,7 @@ public: * the layer is not changed * @param mirror_ref = vertical axis position */ - void Mirror( const wxPoint& mirror_ref ); + void Mirror( const wxPoint& mirror_ref ); /** * Function GetClass @@ -181,30 +226,35 @@ public: return wxT( "ZONE_CONTAINER" ); } - /** Acces to m_Poly parameters - */ - int GetNumCorners(void) + /** Acces to m_Poly parameters + */ + + int GetNumCorners( void ) { return m_Poly->GetNumCorners(); } - void RemoveAllContours(void) + + void RemoveAllContours( void ) { m_Poly->RemoveAllContours(); } - wxPoint GetCornerPosition(int aCornerIndex) + + wxPoint GetCornerPosition( int aCornerIndex ) { - return wxPoint(m_Poly->GetX(aCornerIndex), m_Poly->GetY(aCornerIndex)); + return wxPoint( m_Poly->GetX( aCornerIndex ), m_Poly->GetY( aCornerIndex ) ); } - void SetCornerPosition(int aCornerIndex, wxPoint new_pos) + + void SetCornerPosition( int aCornerIndex, wxPoint new_pos ) { - m_Poly->SetX(aCornerIndex, new_pos.x); - m_Poly->SetY(aCornerIndex, new_pos.y); + m_Poly->SetX( aCornerIndex, new_pos.x ); + m_Poly->SetY( aCornerIndex, new_pos.y ); } + void AppendCorner( wxPoint position ) { m_Poly->AppendCorner( position.x, position.y ); diff --git a/pcbnew/dialog_non_copper_zones_properties.cpp b/pcbnew/dialog_non_copper_zones_properties.cpp new file mode 100644 index 0000000000..d425d2fca5 --- /dev/null +++ b/pcbnew/dialog_non_copper_zones_properties.cpp @@ -0,0 +1,69 @@ +/////////////////////////////////////////////////////////////////////////// +// C++ code generated with wxFormBuilder (version Apr 16 2008) +// http://www.wxformbuilder.org/ +// +// PLEASE DO "NOT" EDIT THIS FILE! +/////////////////////////////////////////////////////////////////////////// + +#include "dialog_non_copper_zones_properties.h" + +/////////////////////////////////////////////////////////////////////////// + +BEGIN_EVENT_TABLE( DialogNonCopperZonesProperties, wxDialog ) + EVT_INIT_DIALOG( DialogNonCopperZonesProperties::_wxFB_InitDialog ) + EVT_BUTTON( wxID_OK, DialogNonCopperZonesProperties::_wxFB_OnOkClick ) + EVT_BUTTON( wxID_CANCEL, DialogNonCopperZonesProperties::_wxFB_OnCancelClick ) +END_EVENT_TABLE() + +DialogNonCopperZonesProperties::DialogNonCopperZonesProperties( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style ) +{ + this->SetSizeHints( wxDefaultSize, wxDefaultSize ); + + wxBoxSizer* m_MainSizer; + m_MainSizer = new wxBoxSizer( wxVERTICAL ); + + wxBoxSizer* m_UpperSizer; + m_UpperSizer = new wxBoxSizer( wxHORIZONTAL ); + + wxString m_OutlineAppearanceCtrlChoices[] = { _("Line"), _("Hatched Outline"), _("Full Hatched") }; + int m_OutlineAppearanceCtrlNChoices = sizeof( m_OutlineAppearanceCtrlChoices ) / sizeof( wxString ); + m_OutlineAppearanceCtrl = new wxRadioBox( this, wxID_ANY, _("Outlines Appearence"), wxDefaultPosition, wxDefaultSize, m_OutlineAppearanceCtrlNChoices, m_OutlineAppearanceCtrlChoices, 1, wxRA_SPECIFY_COLS ); + m_OutlineAppearanceCtrl->SetSelection( 1 ); + m_UpperSizer->Add( m_OutlineAppearanceCtrl, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); + + wxString m_OrientEdgesOptChoices[] = { _("Any"), _("H, V and 45 deg") }; + int m_OrientEdgesOptNChoices = sizeof( m_OrientEdgesOptChoices ) / sizeof( wxString ); + m_OrientEdgesOpt = new wxRadioBox( this, wxID_ANY, _("Zone Edges Orient"), wxDefaultPosition, wxDefaultSize, m_OrientEdgesOptNChoices, m_OrientEdgesOptChoices, 1, wxRA_SPECIFY_COLS ); + m_OrientEdgesOpt->SetSelection( 0 ); + m_UpperSizer->Add( m_OrientEdgesOpt, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); + + wxBoxSizer* m_ButtonsSizer; + m_ButtonsSizer = new wxBoxSizer( wxVERTICAL ); + + m_buttonOk = new wxButton( this, wxID_OK, _("OK"), wxDefaultPosition, wxDefaultSize, 0 ); + m_buttonOk->SetDefault(); + m_ButtonsSizer->Add( m_buttonOk, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxDefaultSize, 0 ); + m_ButtonsSizer->Add( m_buttonCancel, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_UpperSizer->Add( m_ButtonsSizer, 1, wxALIGN_CENTER_VERTICAL, 5 ); + + m_MainSizer->Add( m_UpperSizer, 1, wxEXPAND|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_staticTextLayerSelection = new wxStaticText( this, wxID_ANY, _("Layer selection:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextLayerSelection->Wrap( -1 ); + m_MainSizer->Add( m_staticTextLayerSelection, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); + + m_LayerSelectionCtrl = new wxListBox( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); + m_MainSizer->Add( m_LayerSelectionCtrl, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + + this->SetSizer( m_MainSizer ); + this->Layout(); + + this->Centre( wxBOTH ); +} + +DialogNonCopperZonesProperties::~DialogNonCopperZonesProperties() +{ +} diff --git a/pcbnew/dialog_non_copper_zones_properties.fbp b/pcbnew/dialog_non_copper_zones_properties.fbp new file mode 100644 index 0000000000..9d2f33da73 --- /dev/null +++ b/pcbnew/dialog_non_copper_zones_properties.fbp @@ -0,0 +1,418 @@ + + + + + + C++ + 1 + UTF-8 + table + dialog_non_copper_zones_properties + 1000 + none + 1 + dialog_non_copper_zones_properties + + . + + 1 + 1 + 0 + + + wxBOTH + + 1 + + + + 0 + wxID_ANY + + + DialogNonCopperZonesProperties + + 366,221 + wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER + + Non Copper Zones Properties + + + + wxFULL_REPAINT_ON_RESIZE|wxSUNKEN_BORDER + + + + + + + + + + InitDialog + + + + + + + + + + + + + + + + + + + + + + + m_MainSizer + wxVERTICAL + none + + 5 + wxEXPAND|wxALIGN_CENTER_HORIZONTAL + 1 + + + m_UpperSizer + wxHORIZONTAL + none + + 5 + wxALL|wxALIGN_CENTER_VERTICAL + 0 + + + "Line" "Hatched Outline" "Full Hatched" + + 1 + + + 0 + wxID_ANY + Outlines Appearence + 1 + + + m_OutlineAppearanceCtrl + protected + + 1 + + wxRA_SPECIFY_COLS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL|wxALIGN_CENTER_VERTICAL + 0 + + + "Any" "H, V and 45 deg" + + 1 + + + 0 + wxID_ANY + Zone Edges Orient + 1 + + + m_OrientEdgesOpt + protected + + 0 + + wxRA_SPECIFY_COLS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL + 1 + + + m_ButtonsSizer + wxVERTICAL + none + + 5 + wxALL|wxALIGN_CENTER_HORIZONTAL + 0 + + + + 1 + 1 + + + 0 + wxID_OK + OK + + + m_buttonOk + protected + + + + + + + + + OnOkClick + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL|wxALIGN_CENTER_HORIZONTAL + 0 + + + + 0 + 1 + + + 0 + wxID_CANCEL + Cancel + + + m_buttonCancel + protected + + + + + + + + + OnCancelClick + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxTOP|wxRIGHT|wxLEFT + 0 + + + + 1 + + + 0 + wxID_ANY + Layer selection: + + + m_staticTextLayerSelection + protected + + + + + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT + 0 + + + + + 1 + + + 0 + wxID_ANY + + + m_LayerSelectionCtrl + protected + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pcbnew/dialog_non_copper_zones_properties.h b/pcbnew/dialog_non_copper_zones_properties.h new file mode 100644 index 0000000000..3a7f46d908 --- /dev/null +++ b/pcbnew/dialog_non_copper_zones_properties.h @@ -0,0 +1,61 @@ +/////////////////////////////////////////////////////////////////////////// +// C++ code generated with wxFormBuilder (version Apr 16 2008) +// http://www.wxformbuilder.org/ +// +// PLEASE DO "NOT" EDIT THIS FILE! +/////////////////////////////////////////////////////////////////////////// + +#ifndef __dialog_non_copper_zones_properties__ +#define __dialog_non_copper_zones_properties__ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/////////////////////////////////////////////////////////////////////////// + +/////////////////////////////////////////////////////////////////////////////// +/// Class DialogNonCopperZonesProperties +/////////////////////////////////////////////////////////////////////////////// +class DialogNonCopperZonesProperties : public wxDialog +{ + DECLARE_EVENT_TABLE() + private: + + // Private event handlers + void _wxFB_InitDialog( wxInitDialogEvent& event ){ InitDialog( event ); } + void _wxFB_OnOkClick( wxCommandEvent& event ){ OnOkClick( event ); } + void _wxFB_OnCancelClick( wxCommandEvent& event ){ OnCancelClick( event ); } + + + protected: + wxRadioBox* m_OutlineAppearanceCtrl; + wxRadioBox* m_OrientEdgesOpt; + wxButton* m_buttonOk; + wxButton* m_buttonCancel; + wxStaticText* m_staticTextLayerSelection; + wxListBox* m_LayerSelectionCtrl; + + // Virtual event handlers, overide them in your derived class + virtual void InitDialog( wxInitDialogEvent& event ){ event.Skip(); } + virtual void OnOkClick( wxCommandEvent& event ){ event.Skip(); } + virtual void OnCancelClick( wxCommandEvent& event ){ event.Skip(); } + + + public: + DialogNonCopperZonesProperties( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Non Copper Zones Properties"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 366,221 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER|wxFULL_REPAINT_ON_RESIZE|wxSUNKEN_BORDER ); + ~DialogNonCopperZonesProperties(); + +}; + +#endif //__dialog_non_copper_zones_properties__ diff --git a/pcbnew/dialog_zones_by_polygon.cpp b/pcbnew/dialog_zones_by_polygon.cpp index 25a98ecda1..5e706b9a48 100644 --- a/pcbnew/dialog_zones_by_polygon.cpp +++ b/pcbnew/dialog_zones_by_polygon.cpp @@ -260,7 +260,7 @@ void WinEDA_ZoneFrame::CreateControls() m_Parent->m_InternalUnits ); m_ZoneClearanceCtrl->SetValue( title ); - if( Zone_45_Only ) + if( g_Zone_45_Only ) m_OrientEdgesOpt->SetSelection( 1 ); static const int GridList[4] = { 25, 50, 100, 250 }; @@ -297,7 +297,7 @@ void WinEDA_ZoneFrame::CreateControls() m_FillOpt->SetSelection( 0 ); break; } - s_Zone_Hatching = m_Zone_Container->m_Poly->GetHatchStyle(); + g_Zone_Hatching = m_Zone_Container->m_Poly->GetHatchStyle(); } else @@ -314,11 +314,11 @@ void WinEDA_ZoneFrame::CreateControls() m_FillOpt->SetSelection( 0 ); break; } - s_Zone_Hatching = m_Parent->m_Parent->m_EDA_Config->Read( ZONE_NET_OUTLINES_HATCH_OPTION_KEY, + g_Zone_Hatching = m_Parent->m_Parent->m_EDA_Config->Read( ZONE_NET_OUTLINES_HATCH_OPTION_KEY, (long) CPolyLine::DIAGONAL_EDGE ); } - switch( s_Zone_Hatching ) + switch( g_Zone_Hatching ) { case CPolyLine::NO_HATCH: m_OutlineAppearanceCtrl->SetSelection(0); @@ -485,21 +485,21 @@ bool WinEDA_ZoneFrame::AcceptOptions(bool aPromptForErrors) switch( m_OutlineAppearanceCtrl->GetSelection() ) { case 0: - s_Zone_Hatching = CPolyLine::NO_HATCH; + g_Zone_Hatching = CPolyLine::NO_HATCH; break; case 1: - s_Zone_Hatching = CPolyLine::DIAGONAL_EDGE; + g_Zone_Hatching = CPolyLine::DIAGONAL_EDGE; break; case 2: - s_Zone_Hatching = CPolyLine::DIAGONAL_FULL; + g_Zone_Hatching = CPolyLine::DIAGONAL_FULL; break; } if( m_Parent->m_Parent->m_EDA_Config ) { - m_Parent->m_Parent->m_EDA_Config->Write( ZONE_NET_OUTLINES_HATCH_OPTION_KEY, (long)s_Zone_Hatching); + m_Parent->m_Parent->m_EDA_Config->Write( ZONE_NET_OUTLINES_HATCH_OPTION_KEY, (long)g_Zone_Hatching); } switch( m_GridCtrl->GetSelection() ) @@ -526,9 +526,9 @@ bool WinEDA_ZoneFrame::AcceptOptions(bool aPromptForErrors) g_DesignSettings.m_ZoneClearence = ReturnValueFromString( g_UnitMetric, txtvalue, m_Parent->m_InternalUnits ); if( m_OrientEdgesOpt->GetSelection() == 0 ) - Zone_45_Only = FALSE; + g_Zone_45_Only = FALSE; else - Zone_45_Only = TRUE; + g_Zone_45_Only = TRUE; /* Get the layer selection for this zone */ int ii = m_LayerSelectionCtrl->GetSelection(); @@ -537,7 +537,7 @@ bool WinEDA_ZoneFrame::AcceptOptions(bool aPromptForErrors) DisplayError( this, _( "Error : you must choose a layer" ) ); return false; } - s_Zone_Layer = m_LayerId[ii]; + g_CurrentZone_Layer = m_LayerId[ii]; /* Get the net name selection for this zone */ ii = m_ListNetNameSelection->GetSelection(); diff --git a/pcbnew/drc.cpp b/pcbnew/drc.cpp index 7e1525fd15..61fb6e15aa 100644 --- a/pcbnew/drc.cpp +++ b/pcbnew/drc.cpp @@ -320,6 +320,8 @@ void DRC::testZones(bool adoTestFillSegments) for( int ii = 0; ii < m_pcb->GetAreaCount(); ii++ ) { ZONE_CONTAINER* Area_To_Test = m_pcb->GetArea( ii ); + if( ! Area_To_Test->IsOnCopperLayer() ) + continue; if( Area_To_Test->GetNet() <= 0 ) { m_currentMarker = fillMarker( Area_To_Test, diff --git a/pcbnew/ioascii.cpp b/pcbnew/ioascii.cpp index f29a5e6965..d3770655d2 100644 --- a/pcbnew/ioascii.cpp +++ b/pcbnew/ioascii.cpp @@ -771,7 +771,7 @@ int WinEDA_PcbFrame::ReadPcbFile( FILE* File, bool Append ) wxBusyCursor dummy; - // Switch the locale to standard C (needed to print floating point numbers like 1.3) + // Switch the locale to standard C (needed to read floating point numbers like 1.3) SetLocaleTo_C_standard( ); NbDraw = NbTrack = NbZone = NbMod = NbNets = -1; @@ -1010,6 +1010,13 @@ int WinEDA_PcbFrame::ReadPcbFile( FILE* File, bool Append ) BestZoom(); #ifdef PCBNEW + if( m_Pcb->m_ZoneDescriptorList.size() > 0 ) + { // Build filled areas + for( unsigned ia = 0; ia < m_Pcb->m_ZoneDescriptorList.size(); ia++ ) + m_Pcb->m_ZoneDescriptorList[ia]->BuildFilledPolysListData( ); + } + + // Build connectivity info Compile_Ratsnest( NULL, TRUE ); #endif return 1; diff --git a/pcbnew/makefile.include b/pcbnew/makefile.include index cfefc06cd5..d6f1050238 100644 --- a/pcbnew/makefile.include +++ b/pcbnew/makefile.include @@ -20,6 +20,8 @@ OBJECTS= $(TARGET).o classpcb.o\ $(SPECCTRA_TOOLS)\ lay2plot.o\ dialog_freeroute_exchange.o\ + dialog_non_copper_zones_properties.o\ + zones_non_copper_type_functions.o\ modedit_undo_redo.o\ block_module_editor.o\ onrightclick.o\ diff --git a/pcbnew/pcbnew.cpp b/pcbnew/pcbnew.cpp index 6c767b2ffc..67f883176d 100644 --- a/pcbnew/pcbnew.cpp +++ b/pcbnew/pcbnew.cpp @@ -18,6 +18,7 @@ #include "trigo.h" #include "cell.h" #include "worksheet.h" +#include "zones.h" #include "protos.h" diff --git a/pcbnew/protos.h b/pcbnew/protos.h index 07e168e940..ec491b1cc5 100644 --- a/pcbnew/protos.h +++ b/pcbnew/protos.h @@ -8,6 +8,10 @@ #include + +/* install function for DialogNonCopperZonesEditor dialog frame :*/ +bool InstallDialogNonCopperZonesEditor(WinEDA_PcbFrame* aParent, ZONE_CONTAINER* aZone); + /***************/ /* PAD_CONNECT.CPP */ /***************/ diff --git a/pcbnew/tracepcb.cpp b/pcbnew/tracepcb.cpp index d6c6d95f7f..203584bac4 100644 --- a/pcbnew/tracepcb.cpp +++ b/pcbnew/tracepcb.cpp @@ -173,7 +173,10 @@ void WinEDA_PcbFrame::Trace_Pcb( wxDC* DC, int mode ) // Areas must be drawn here only if not moved or dragged, // because these areas are drawn by ManageCursor() in a specific manner if ( (edge_zone->m_Flags & (IN_EDIT | IS_DRAGGED | IS_MOVED)) == 0 ) + { edge_zone->Draw( DrawPanel, DC, mode ); + edge_zone->DrawFilledArea( DrawPanel, DC, mode ); + } } // draw the BOARD's markers. diff --git a/pcbnew/zones.h b/pcbnew/zones.h new file mode 100644 index 0000000000..1ea7d2ecc6 --- /dev/null +++ b/pcbnew/zones.h @@ -0,0 +1,37 @@ +/************************************************/ +/* constants used in zone dialogs and functions */ +/************************************************/ + +#ifndef ZONES_H +#define ZONES_H + + +#ifndef eda_global +#define eda_global extern +#endif + + +// keys used to store net sort option in config file : +#define ZONE_NET_OUTLINES_HATCH_OPTION_KEY wxT( "Zone_Ouline_Hatch_Opt" ) +#define ZONE_NET_SORT_OPTION_KEY wxT( "Zone_NetSort_Opt" ) +#define ZONE_NET_FILTER_STRING_KEY wxT( "Zone_Filter_Opt" ) + +enum zone_cmd { + ZONE_ABORT, + ZONE_OK +}; + + +/************************************************/ +/* variables used in zone dialogs and functions */ +/************************************************/ + +eda_global bool g_Zone_45_Only +#ifdef MAIN += FALSE +#endif +; +eda_global int g_CurrentZone_Layer; // Layer used to create the current zone +eda_global int g_Zone_Hatching; // Option to show the zone area (outlines only, short hatches or full hatches + +#endif // ifndef ZONES_H diff --git a/pcbnew/zones_by_polygon.cpp b/pcbnew/zones_by_polygon.cpp index 2cacb72a36..2fd03186c7 100644 --- a/pcbnew/zones_by_polygon.cpp +++ b/pcbnew/zones_by_polygon.cpp @@ -33,6 +33,8 @@ using namespace std; #include "protos.h" +#include "zones.h" + bool verbose = false; // false if zone outline diags must not be shown // Outline creation: @@ -46,25 +48,13 @@ static void Show_Zone_Corner_Or_Outline_While_Move_Mouse( WinEDA_DrawPanel* pane bool erase ); /* Local variables */ -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) -static bool s_AddCutoutToCurrentZone; // if true, the next outline will be addes to s_CurrentZone -static ZONE_CONTAINER* s_CurrentZone; // if != NULL, these ZONE_CONTAINER params will be used for the next zone -static wxPoint s_CursorLastPosition; // in move zone outline, last cursor position. Used to calculate the move vector -// keys used to store net sort option in config file : -#define ZONE_NET_OUTLINES_HATCH_OPTION_KEY wxT( "Zone_Ouline_Hatch_Opt" ) -#define ZONE_NET_SORT_OPTION_KEY wxT( "Zone_NetSort_Opt" ) -#define ZONE_NET_FILTER_STRING_KEY wxT( "Zone_Filter_Opt" ) - -enum zone_cmd { - ZONE_ABORT, - ZONE_OK -}; +static int s_NetcodeSelection; // Net code selection for the current zone +static wxPoint s_CornerInitialPosition; // Used to abort a move corner command +static bool s_CornerIsNew; // Used to abort a move corner command (if it is a new corner, it must be deleted) +static bool s_AddCutoutToCurrentZone; // if true, the next outline will be addes to s_CurrentZone +static ZONE_CONTAINER* s_CurrentZone; // if != NULL, these ZONE_CONTAINER params will be used for the next zone +static wxPoint s_CursorLastPosition; // in move zone outline, last cursor position. Used to calculate the move vector #include "dialog_zones_by_polygon.cpp" @@ -228,15 +218,17 @@ void WinEDA_PcbFrame::Start_Move_Zone_Corner( wxDC* DC, ZONE_CONTAINER* zone_con * if IsNewCorner is true, the Abort_Zone_Move_Corner_Or_Outlines will remove this corner, if called */ { - /* Show the Net */ - if( g_HightLigt_Status && DC ) + if( zone_container->IsOnCopperLayer() ) /* Show the Net */ { - Hight_Light( DC ); // Remove old hightlight selection - } + if( g_HightLigt_Status && DC ) + { + Hight_Light( DC ); // Remove old hightlight selection + } - g_HightLigth_NetCode = s_NetcodeSelection = zone_container->GetNet(); - if( DC ) - Hight_Light( DC ); + g_HightLigth_NetCode = s_NetcodeSelection = zone_container->GetNet(); + if( DC ) + Hight_Light( DC ); + } zone_container->m_Flags = IN_EDIT; DrawPanel->ManageCurseur = Show_Zone_Corner_Or_Outline_While_Move_Mouse; @@ -259,11 +251,11 @@ void WinEDA_PcbFrame::Start_Move_Zone_Drag_Outline_Edge( wxDC* DC, * Prepares a drag edge for an existing zone outline, */ { - zone_container->m_Flags = IS_DRAGGED; + zone_container->m_Flags = IS_DRAGGED; zone_container->m_CornerSelection = corner_id; DrawPanel->ManageCurseur = Show_Zone_Corner_Or_Outline_While_Move_Mouse; DrawPanel->ForceCloseManageCurseur = Abort_Zone_Move_Corner_Or_Outlines; - s_CursorLastPosition = s_CornerInitialPosition = GetScreen()->m_Curseur; + s_CursorLastPosition = s_CornerInitialPosition = GetScreen()->m_Curseur; s_AddCutoutToCurrentZone = false; s_CurrentZone = NULL; } @@ -279,13 +271,16 @@ void WinEDA_PcbFrame::Start_Move_Zone_Outlines( wxDC* DC, ZONE_CONTAINER* zone_c */ { /* Show the Net */ - if( g_HightLigt_Status ) + if( zone_container->IsOnCopperLayer() ) /* Show the Net */ { - Hight_Light( DC ); // Remove old hightlight selection - } + if( g_HightLigt_Status ) + { + Hight_Light( DC ); // Remove old hightlight selection + } - g_HightLigth_NetCode = s_NetcodeSelection = zone_container->GetNet(); - Hight_Light( DC ); + g_HightLigth_NetCode = s_NetcodeSelection = zone_container->GetNet(); + Hight_Light( DC ); + } zone_container->m_Flags = IS_MOVED; DrawPanel->ManageCurseur = Show_Zone_Corner_Or_Outline_While_Move_Mouse; @@ -321,12 +316,7 @@ void WinEDA_PcbFrame::End_Move_Zone_Corner_Or_Outlines( wxDC* DC, ZONE_CONTAINER /* Combine zones if possible */ wxBusyCursor dummy; - -// int layer = zone_container->GetLayer(); - -// m_Pcb->RedrawAreasOutlines( DrawPanel, DC, GR_XOR, layer ); m_Pcb->AreaPolygonModified( zone_container, true, verbose ); -// m_Pcb->RedrawAreasOutlines( DrawPanel, DC, GR_OR, layer ); DrawPanel->Refresh(); @@ -347,9 +337,12 @@ void WinEDA_PcbFrame::Remove_Zone_Corner( wxDC* DC, ZONE_CONTAINER* zone_contain /*************************************************************************************/ /** - * Function End_Move_Zone_Corner + * Function Remove_Zone_Corner * Remove the currently selected corner in a zone outline * the .m_CornerSelection is used as corner selection + * @param DC = Current deice context (can be NULL ) + * @param zone_container = the zone that contains the selected corner + * the member .m_CornerSelection is used as selected corner */ { GetScreen()->SetModify(); @@ -357,20 +350,32 @@ void WinEDA_PcbFrame::Remove_Zone_Corner( wxDC* DC, ZONE_CONTAINER* zone_contain if( zone_container->m_Poly->GetNumCorners() <= 3 ) { DrawPanel->PostDirtyRect( zone_container->GetBoundingBox() ); - Delete_Zone_Fill( DC, NULL, zone_container->m_TimeStamp ); + if( DC ) + { + Delete_Zone_Fill( DC, NULL, zone_container->m_TimeStamp ); + zone_container->DrawFilledArea( DrawPanel, DC, GR_XOR ); + } m_Pcb->Delete( zone_container ); return; } int layer = zone_container->GetLayer(); - m_Pcb->RedrawAreasOutlines( DrawPanel, DC, GR_XOR, layer ); + if( DC ) + { + m_Pcb->RedrawAreasOutlines( DrawPanel, DC, GR_XOR, layer ); + m_Pcb->RedrawFilledAreas( DrawPanel, DC, GR_XOR, layer ); + } zone_container->m_Poly->DeleteCorner( zone_container->m_CornerSelection ); // modify zones outlines according to the new zone_container shape m_Pcb->AreaPolygonModified( zone_container, true, verbose ); - m_Pcb->RedrawAreasOutlines( DrawPanel, DC, GR_OR, layer ); + if( DC ) + { + m_Pcb->RedrawAreasOutlines( DrawPanel, DC, GR_OR, layer ); + m_Pcb->RedrawFilledAreas( DrawPanel, DC, GR_OR, layer ); + } int ii = m_Pcb->GetAreaIndex( zone_container ); // test if zone_container exists if( ii < 0 ) @@ -506,38 +511,50 @@ int WinEDA_PcbFrame::Begin_Zone( wxDC* DC ) zone = m_Pcb->m_CurrentZoneContour; if( zone->GetNumCorners() == 0 ) /* Start a new contour: init zone params (net and layer) */ { - if( s_CurrentZone == NULL ) + if( s_CurrentZone == NULL ) // A new outline is created { + int diag; DrawPanel->m_IgnoreMouseEvents = TRUE; - WinEDA_ZoneFrame* frame = new WinEDA_ZoneFrame( this ); - - int diag = frame->ShowModal(); - frame->Destroy(); + zone->SetLayer( ( (PCB_SCREEN*) GetScreen() )->m_Active_Layer ); + if( zone->IsOnCopperLayer() ) + { // Put a zone on a copper layer + WinEDA_ZoneFrame* frame = new WinEDA_ZoneFrame( this ); + diag = frame->ShowModal(); + frame->Destroy(); + } + else // Put a zone on a non copper layer (technical layer) + { + diag = InstallDialogNonCopperZonesEditor( this, zone ); + s_NetcodeSelection = 0; // No net for non copper zones + } DrawPanel->MouseToCursorSchema(); DrawPanel->m_IgnoreMouseEvents = FALSE; if( diag == ZONE_ABORT ) return 0; - ((PCB_SCREEN*)GetScreen())->m_Active_Layer = s_Zone_Layer; // Set by the dialog frame + ( (PCB_SCREEN*) GetScreen() )->m_Active_Layer = g_CurrentZone_Layer; // Set by the dialog frame } - else /* Start a new contour: init zone params (net and layer) from an existing zone */ + else /* Start a new contour: init zone params (net and layer) from an existing zone */ { - ((PCB_SCREEN*)GetScreen())->m_Active_Layer = s_Zone_Layer = s_CurrentZone->GetLayer(); - s_Zone_Hatching = s_CurrentZone->m_Poly->GetHatchStyle(); + ( (PCB_SCREEN*) GetScreen() )->m_Active_Layer = g_CurrentZone_Layer = + s_CurrentZone->GetLayer(); + g_Zone_Hatching = s_CurrentZone->m_Poly->GetHatchStyle(); } - /* Show the Net */ - if( g_HightLigt_Status && (g_HightLigth_NetCode != s_NetcodeSelection) ) + /* Show the Net for zones on copper layers */ + if( g_CurrentZone_Layer < FIRST_NO_COPPER_LAYER ) { - Hight_Light( DC ); // Remove old hightlight selection + if( g_HightLigt_Status && (g_HightLigth_NetCode != s_NetcodeSelection) ) + { + Hight_Light( DC ); // Remove old hightlight selection + } + + if( s_CurrentZone ) + s_NetcodeSelection = s_CurrentZone->GetNet(); + g_HightLigth_NetCode = s_NetcodeSelection; + Hight_Light( DC ); } - - if( s_CurrentZone ) - s_NetcodeSelection = s_CurrentZone->GetNet(); - g_HightLigth_NetCode = s_NetcodeSelection; - Hight_Light( DC ); - if( !s_AddCutoutToCurrentZone ) s_CurrentZone = NULL; // the zone is used only once } @@ -546,17 +563,17 @@ int WinEDA_PcbFrame::Begin_Zone( wxDC* DC ) if( zone->GetNumCorners() == 0 ) { zone->m_Flags = IS_NEW; - zone->SetLayer( s_Zone_Layer ); + zone->SetLayer( g_CurrentZone_Layer ); zone->SetNet( s_NetcodeSelection ); zone->m_TimeStamp = GetTimeStamp(); zone->m_PadOption = s_Zone_Pad_Options; zone->m_ZoneClearance = g_DesignSettings.m_ZoneClearence; zone->m_GridFillValue = g_GridRoutingSize; - zone->m_Poly->Start( s_Zone_Layer, - GetScreen()->m_Curseur.x, GetScreen()->m_Curseur.y, - s_Zone_Hatching ); + zone->m_Poly->Start( g_CurrentZone_Layer, + GetScreen()->m_Curseur.x, GetScreen()->m_Curseur.y, + g_Zone_Hatching ); zone->AppendCorner( GetScreen()->m_Curseur ); - if( Drc_On && m_drc->Drc( zone, 0 ) == BAD_DRC ) + if( Drc_On && (m_drc->Drc( zone, 0 ) == BAD_DRC) && zone->IsOnCopperLayer() ) { zone->m_Flags = 0; zone->RemoveAllContours(); @@ -566,7 +583,7 @@ int WinEDA_PcbFrame::Begin_Zone( wxDC* DC ) // WinEDA_PcbFrame::SetCurItem() calls Display_Infos(). GetScreen()->SetCurItem( NULL ); DisplayError( this, - _( "DRC error: this start point is inside or too close an other area" ) ); + _( "DRC error: this start point is inside or too close an other area" ) ); return 0; } @@ -582,7 +599,8 @@ int WinEDA_PcbFrame::Begin_Zone( wxDC* DC ) /* edge in progress : the current corner coordinate was set by Show_New_Edge_While_Move_Mouse */ if( zone->GetCornerPosition( ii - 1 ) != zone->GetCornerPosition( ii ) ) { - if( Drc_On && m_drc->Drc( zone, ii - 1 ) == OK_DRC ) // Ok, we can add a new corner + if( (Drc_On && m_drc->Drc( zone, ii - 1 ) == OK_DRC) + || !zone->IsOnCopperLayer() ) // Ok, we can add a new corner { zone->AppendCorner( GetScreen()->m_Curseur ); SetCurItem( zone ); // calls Display_Infos(). @@ -620,14 +638,17 @@ bool WinEDA_PcbFrame::End_Zone( wxDC* DC ) // Validate the current edge: int icorner = zone->GetNumCorners() - 1; - if( Drc_On && m_drc->Drc( zone, icorner - 1 ) == BAD_DRC ) // we can't validate last edge - return false; - if( Drc_On && m_drc->Drc( zone, icorner ) == BAD_DRC ) // we can't validate the closing edge + if( zone->IsOnCopperLayer() ) { - DisplayError( this, - _( "DRC error: closing this area creates a drc error with an other area" ) ); - DrawPanel->MouseToCursorSchema(); - return false; + if( Drc_On && m_drc->Drc( zone, icorner - 1 ) == BAD_DRC ) // we can't validate last edge + return false; + if( Drc_On && m_drc->Drc( zone, icorner ) == BAD_DRC ) // we can't validate the closing edge + { + DisplayError( this, + _( "DRC error: closing this area creates a drc error with an other area" ) ); + DrawPanel->MouseToCursorSchema(); + return false; + } } zone->m_Flags = 0; @@ -640,6 +661,7 @@ bool WinEDA_PcbFrame::End_Zone( wxDC* DC ) // Undraw old drawings, because they can have important changes int layer = zone->GetLayer(); m_Pcb->RedrawAreasOutlines( DrawPanel, DC, GR_XOR, layer ); + m_Pcb->RedrawFilledAreas( DrawPanel, DC, GR_XOR, layer ); /* Put edges in list */ if( s_CurrentZone == NULL ) @@ -670,6 +692,7 @@ bool WinEDA_PcbFrame::End_Zone( wxDC* DC ) // Redraw the real edge zone : m_Pcb->RedrawAreasOutlines( DrawPanel, DC, GR_OR, layer ); + m_Pcb->RedrawFilledAreas( DrawPanel, DC, GR_OR, layer ); int ii = m_Pcb->GetAreaIndex( zone ); // test if zone_container exists if( ii < 0 ) @@ -707,12 +730,12 @@ static void Show_New_Edge_While_Move_Mouse( WinEDA_DrawPanel* panel, wxDC* DC, b } /* Redraw the curent edge in its new position */ - if( Zone_45_Only ) + if( g_Zone_45_Only ) { // calculate the new position as allowed wxPoint StartPoint = zone->GetCornerPosition( icorner - 1 ); Calcule_Coord_Extremite_45( StartPoint.x, StartPoint.y, - &c_pos.x, &c_pos.y ); + &c_pos.x, &c_pos.y ); } zone->SetCornerPosition( icorner, c_pos ); @@ -730,11 +753,18 @@ void WinEDA_PcbFrame::Edit_Zone_Params( wxDC* DC, ZONE_CONTAINER* zone_container * Edit params (layer, clearance, ...) for a zone outline */ { - DrawPanel->m_IgnoreMouseEvents = TRUE; - WinEDA_ZoneFrame* frame = new WinEDA_ZoneFrame( this, zone_container ); + int diag; + + DrawPanel->m_IgnoreMouseEvents = TRUE; + if( zone_container->GetLayer() < FIRST_NO_COPPER_LAYER ) + { // edit a zone on a copper layer + WinEDA_ZoneFrame* frame = new WinEDA_ZoneFrame( this ); + diag = frame->ShowModal(); + frame->Destroy(); + } + else // edit a zone on a non copper layer (technical layer) + diag = InstallDialogNonCopperZonesEditor( this, zone_container ); - int diag = frame->ShowModal(); - frame->Destroy(); DrawPanel->MouseToCursorSchema(); DrawPanel->m_IgnoreMouseEvents = FALSE; @@ -748,12 +778,12 @@ void WinEDA_PcbFrame::Edit_Zone_Params( wxDC* DC, ZONE_CONTAINER* zone_container edge_zone->Draw( DrawPanel, DC, GR_XOR ); } - zone_container->SetLayer( s_Zone_Layer ); + zone_container->SetLayer( g_CurrentZone_Layer ); zone_container->SetNet( s_NetcodeSelection ); EQUIPOT* net = m_Pcb->FindNet( s_NetcodeSelection ); if( net ) zone_container->m_Netname = net->m_Netname; - zone_container->m_Poly->SetHatch( s_Zone_Hatching ); + zone_container->m_Poly->SetHatch( g_Zone_Hatching ); zone_container->m_PadOption = s_Zone_Pad_Options; zone_container->m_ZoneClearance = g_DesignSettings.m_ZoneClearence; zone_container->m_GridFillValue = g_GridRoutingSize; @@ -782,7 +812,7 @@ void WinEDA_PcbFrame::Delete_Zone_Contour( wxDC* DC, ZONE_CONTAINER* zone_contai * otherwise, the hole is deleted */ { - int ncont = zone_container->m_Poly->GetContour( zone_container->m_CornerSelection ); + int ncont = zone_container->m_Poly->GetContour( zone_container->m_CornerSelection ); EDA_Rect dirty = zone_container->GetBoundingBox(); @@ -860,7 +890,7 @@ int WinEDA_PcbFrame::Fill_Zone( wxDC* DC, ZONE_CONTAINER* zone_container, bool v wxBusyCursor dummy; // Shows an hourglass cursor (removed by its destructor) zone_container->m_GridFillValue = g_GridRoutingSize; - int error_level = zone_container->Fill_Zone( this, DC, verbose ); + int error_level = zone_container->Fill_Zone( this, DC, verbose ); GetScreen()->SetModify(); diff --git a/pcbnew/zones_non_copper_type_functions.cpp b/pcbnew/zones_non_copper_type_functions.cpp new file mode 100644 index 0000000000..5857452e47 --- /dev/null +++ b/pcbnew/zones_non_copper_type_functions.cpp @@ -0,0 +1,210 @@ + +#include "fctsys.h" +#include "gr_basic.h" + +#include "common.h" +#include "pcbnew.h" + +#include "zones.h" + +#include "dialog_non_copper_zones_properties.h" + +/* Local functions */ + +/* Local variables */ + +/* Class DialogNonCopperZonesEditor + * Dialog editor for non copper zones properties + * Derived from DialogNonCopperZonesProperties, created by wxFormBuilder + */ +class DialogNonCopperZonesEditor : public DialogNonCopperZonesProperties +{ +private: + WinEDA_PcbFrame* m_Parent; + ZONE_CONTAINER* m_Zone_Container; + +private: + void OnOkClick( wxCommandEvent& event ); + void OnCancelClick( wxCommandEvent& event ); + void InitDialog( wxInitDialogEvent& event ); + +public: + DialogNonCopperZonesEditor( WinEDA_PcbFrame* parent, + ZONE_CONTAINER* zone_container ); + ~DialogNonCopperZonesEditor(); +}; + + +/*******************************************************************************************/ +DialogNonCopperZonesEditor::DialogNonCopperZonesEditor( WinEDA_PcbFrame* parent, + ZONE_CONTAINER* zone_container ) : + DialogNonCopperZonesProperties( parent ) +/*******************************************************************************************/ +{ + m_Parent = parent; + m_Zone_Container = zone_container; + SetFont( *g_DialogFont ); +} + + +/********************************************************/ +DialogNonCopperZonesEditor::~DialogNonCopperZonesEditor() +/********************************************************/ +{ +} + +/* install function for DialogNonCopperZonesEditor dialog frame :*/ +bool InstallDialogNonCopperZonesEditor(WinEDA_PcbFrame* aParent, ZONE_CONTAINER* aZone) +{ + DialogNonCopperZonesEditor* frame = new DialogNonCopperZonesEditor( aParent, aZone ); + bool diag = frame->ShowModal(); + frame->Destroy(); + + return diag; +} + + +/********************************************************************/ +void DialogNonCopperZonesEditor::InitDialog( wxInitDialogEvent& event ) +/********************************************************************/ +{ + SetFocus(); + SetReturnCode( ZONE_ABORT ); // Will be changed on buttons click + + if( g_Zone_45_Only ) + m_OrientEdgesOpt->SetSelection( 1 ); + + switch( g_Zone_Hatching ) + { + case CPolyLine::NO_HATCH: + m_OutlineAppearanceCtrl->SetSelection( 0 ); + break; + + case CPolyLine::DIAGONAL_EDGE: + m_OutlineAppearanceCtrl->SetSelection( 1 ); + break; + + case CPolyLine::DIAGONAL_FULL: + m_OutlineAppearanceCtrl->SetSelection( 2 ); + break; + } + + for( int layer_number = FIRST_NO_COPPER_LAYER, ii = 0; + layer_number < LAST_NO_COPPER_LAYER - 1; + layer_number++, ii++ ) + { + wxString msg; + + msg = m_Parent->m_Pcb->GetLayerName( layer_number ).Trim(); + m_LayerSelectionCtrl->InsertItems( 1, &msg, ii ); + + if( m_Zone_Container ) + { + if( m_Zone_Container->GetLayer() == layer_number ) + m_LayerSelectionCtrl->SetSelection( ii ); + } + else + { + if( ( (PCB_SCREEN*) ( m_Parent->GetScreen() ) )->m_Active_Layer == layer_number ) + m_LayerSelectionCtrl->SetSelection( ii ); + } + } + + /* the size of m_LayerSelectionCtrl has changed, so we must recall SetSizeHints() */ + GetSizer()->SetSizeHints(this); +} + + +/******************************************************************/ +void DialogNonCopperZonesEditor::OnOkClick( wxCommandEvent& event ) +/******************************************************************/ +{ + switch( m_OutlineAppearanceCtrl->GetSelection() ) + { + case 0: + g_Zone_Hatching = CPolyLine::NO_HATCH; + break; + + case 1: + g_Zone_Hatching = CPolyLine::DIAGONAL_EDGE; + break; + + case 2: + g_Zone_Hatching = CPolyLine::DIAGONAL_FULL; + break; + } + + if( m_Parent->m_Parent->m_EDA_Config ) + { + m_Parent->m_Parent->m_EDA_Config->Write( ZONE_NET_OUTLINES_HATCH_OPTION_KEY, + (long) g_Zone_Hatching ); + } + + if( m_OrientEdgesOpt->GetSelection() == 0 ) + g_Zone_45_Only = FALSE; + else + g_Zone_45_Only = TRUE; + + /* Get the layer selection for this zone */ + int ii = m_LayerSelectionCtrl->GetSelection(); + if( ii < 0 ) + { + DisplayError( this, _( "Error : you must choose a layer" ) ); + return; + } + g_CurrentZone_Layer = ii + FIRST_NO_COPPER_LAYER; + EndModal( ZONE_OK ); +} + + +/**********************************************************************/ +void DialogNonCopperZonesEditor::OnCancelClick( wxCommandEvent& event ) +/**********************************************************************/ +{ + EndModal( ZONE_ABORT ); +} + + + +/***************************************************/ +int ZONE_CONTAINER::BuildFilledPolysListData( void ) +/***************************************************/ +/** function BuildFilledPolysListData + * Build m_FilledPolysList data from real outlines (m_Poly) + * in order to have drawable (and plottable) filled polygons + * drawable filled polygons are polygons without hole + * @return number of polygons + * Currently useable only for non copper zones + */ +{ + /* Currently only for non copper zones */ + if ( IsOnCopperLayer() ) + return 0; + + m_FilledPolysList.clear(); + /* convert outlines + holes to outlines without holes (adding extra segments if necessary) + * m_Poly data is expected normalized, i.e. NormalizeAreaOutlines was used after building this zone + */ + m_Poly->MakeKboolPoly( -1, -1, NULL, true ); + int count = 0; + while( m_Poly->GetKboolEngine()->StartPolygonGet() ) + { + CPolyPt corner(0,0,false); + while( m_Poly->GetKboolEngine()->PolygonHasMorePoints() ) + { + corner.x = (int)m_Poly->GetKboolEngine()->GetPolygonXPoint(); + corner.y = (int)m_Poly->GetKboolEngine()->GetPolygonYPoint(); + corner.end_contour = false; + m_FilledPolysList.push_back(corner); + count ++; + } + corner.end_contour = true; + m_FilledPolysList.pop_back(); + m_FilledPolysList.push_back(corner); + m_Poly->GetKboolEngine()->EndPolygonGet(); + } + + m_Poly->FreeKboolEngine(); + + return count; +} diff --git a/pcbnew/zones_test_and_combine_areas.cpp b/pcbnew/zones_test_and_combine_areas.cpp index 27ac131f99..795c59636e 100644 --- a/pcbnew/zones_test_and_combine_areas.cpp +++ b/pcbnew/zones_test_and_combine_areas.cpp @@ -328,6 +328,7 @@ int BOARD::AreaPolygonModified( ZONE_CONTAINER* modified_area, return test; // now see if we need to clip against other areas + int layer = modified_area->GetLayer(); bool bCheckAllAreas = false; if( test == 1 ) bCheckAllAreas = true; @@ -336,6 +337,15 @@ int BOARD::AreaPolygonModified( ZONE_CONTAINER* modified_area, if( bCheckAllAreas ) CombineAllAreasInNet( modified_area->GetNet(), bMessageBoxInt, true ); + if ( layer >= FIRST_NO_COPPER_LAYER ) // Refill non copper zones on this layer + { + if( m_ZoneDescriptorList.size() > 0 ) + { + for( unsigned ia = 0; ia < m_ZoneDescriptorList.size(); ia++ ) + if( m_ZoneDescriptorList[ia]->GetLayer() == layer ) + m_ZoneDescriptorList[ia]->BuildFilledPolysListData( ); + } + } return test; } @@ -878,6 +888,9 @@ int BOARD::Test_Drc_Areas_Outlines_To_Areas_Outlines( ZONE_CONTAINER* aArea_To_E for( int ia = 0; ia < GetAreaCount(); ia++ ) { ZONE_CONTAINER* Area_Ref = GetArea( ia ); + if ( ! Area_Ref->IsOnCopperLayer() ) + continue; + if( aArea_To_Examine && (aArea_To_Examine != Area_Ref) ) continue; for( int ia2 = 0; ia2 < GetAreaCount(); ia2++ ) @@ -1026,6 +1039,9 @@ int BOARD::Test_Drc_Areas_Outlines_To_Areas_Outlines( ZONE_CONTAINER* aArea_To_E bool DRC::doEdgeZoneDrc( ZONE_CONTAINER* aArea, int aCornerIndex ) { + if ( ! aArea->IsOnCopperLayer() ) // Cannot have a Drc error if not on copper layer + return true; + wxString str; wxPoint start = aArea->GetCornerPosition( aCornerIndex ); diff --git a/polygon/PolyLine.cpp b/polygon/PolyLine.cpp index b3645cc732..c8867cb2ac 100644 --- a/polygon/PolyLine.cpp +++ b/polygon/PolyLine.cpp @@ -250,9 +250,14 @@ int CPolyLine::AddPolygonsToBoolEng( Bool_Engine* aBooleng, * @param aEnd_contour: ending contour number (-1 = all after aStart_contour) * combining intersecting contours if possible * @param arc_array : return corners computed from arcs approximations in arc_array + * @param aConvertHoles = mode for holes when a boolean operation is made + * true: holes are linked into outer contours by double overlapping segments + * false: holes are not linked: in this mode contours are added clockwise + * and polygons added counter clockwise are holes (default) * @return error: 0 if Ok, 1 if error */ -int CPolyLine::MakeKboolPoly( int aStart_contour, int aEnd_contour, std::vector * arc_array ) +int CPolyLine::MakeKboolPoly( int aStart_contour, int aEnd_contour, std::vector * arc_array, + bool aConvertHoles ) { if( m_Kbool_Poly_Engine ) { @@ -493,7 +498,7 @@ int CPolyLine::MakeKboolPoly( int aStart_contour, int aEnd_contour, std::vector< booleng->Do_Operation( BOOL_OR ); } - // now copy result to m_gpc_poly + // now use result as new polygon (delete the old one if exists) if( m_Kbool_Poly_Engine ) delete m_Kbool_Poly_Engine; m_Kbool_Poly_Engine = booleng; diff --git a/polygon/PolyLine.h b/polygon/PolyLine.h index f65dfb1136..3666cb9749 100644 --- a/polygon/PolyLine.h +++ b/polygon/PolyLine.h @@ -28,7 +28,7 @@ * @param aConvertHoles = mode for holes when a boolean operation is made * true: holes are linked into outer contours by double overlapping segments * false: holes are not linked: in this mode contours are added clockwise - * and polygons added counter clockwise are holes + * and polygons added counter clockwise are holes (default) */ void ArmBoolEng( Bool_Engine* aBooleng, bool aConvertHoles = false ); @@ -199,11 +199,16 @@ public: * @param aEnd_contour: ending contour number (-1 = all after aStart_contour) * combining intersecting contours if possible * @param arc_array : return data on arcs in arc_array + * @param aConvertHoles = mode for holes when a boolean operation is made + * true: holes are linked into outer contours by double overlapping segments + * false: holes are not linked: in this mode contours are added clockwise + * and polygons added counter clockwise are holes (default) * @return error: 0 if Ok, 1 if error */ int MakeKboolPoly( int aStart_contour = -1, int aEnd_contour = -1, - std::vector * arc_array = NULL ); + std::vector * arc_array = NULL, + bool aConvertHoles = false); /** Function NormalizeWithKbool * Use the Kbool Library to clip contours: if outlines are crossing, the self-crossing polygon @@ -217,6 +222,16 @@ public: * @return number of external contours, or -1 if error */ int NormalizeWithKbool( std::vector * aExtraPolyList, bool bRetainArcs ); + + /** function GetKboolEngine + * @return the current used Kbool Engine (after normalization using kbool) + */ + Bool_Engine* GetKboolEngine( ) { return m_Kbool_Poly_Engine; } + /** function FreeKboolEngine + * delete the current used Kbool Engine (free memory after normalization using kbool) + */ + void FreeKboolEngine( ) { delete m_Kbool_Poly_Engine; m_Kbool_Poly_Engine = NULL; } + private: int m_layer; // layer to draw on diff --git a/template/kicad.pro b/template/kicad.pro index c5eea7f405..a9192ed3e1 100644 --- a/template/kicad.pro +++ b/template/kicad.pro @@ -1,4 +1,4 @@ -update=19/9/2008-05:53:18 +update=23/9/2008-19:07:03 version=1 last_client=eeschema [general] @@ -140,5 +140,6 @@ LibName24=display LibName25=cypress LibName26=siliconi LibName27=opto -LibName28=contrib -LibName29=valves +LibName28=atmel +LibName29=contrib +LibName30=valves