From 5bdbf47ccc476400fb8bcd7330d50257871d7c88 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Cerc=C3=B3s=20Pita?= Date: Tue, 7 Aug 2012 12:59:34 +0200 Subject: [PATCH] First simulator draft version. --- src/Mod/Ship/CMakeLists.txt | 17 +- src/Mod/Ship/Icons/SimIco.xcf | Bin 55163 -> 58237 bytes src/Mod/Ship/Icons/SimPostIco.png | Bin 0 -> 13708 bytes src/Mod/Ship/Icons/SimPostIco.xpm | 2077 +++++++++++++++++++++++ src/Mod/Ship/InitGui.py | 136 +- src/Mod/Ship/Makefile.am | 7 +- src/Mod/Ship/ShipGui.py | 352 ++-- src/Mod/Ship/simPost/TaskPanel.py | 156 ++ src/Mod/Ship/simPost/TaskPanel.ui | 81 + src/Mod/Ship/simPost/__init__.py | 40 + src/Mod/Ship/simRun/Sim/fsEvolution.py | 59 +- src/Mod/Ship/simRun/Sim/fsEvolution.pyc | Bin 0 -> 4941 bytes src/Mod/Ship/simRun/Simulation.py | 28 +- src/Mod/Ship/simRun/Simulation.pyc | Bin 0 -> 4343 bytes 14 files changed, 2684 insertions(+), 269 deletions(-) create mode 100644 src/Mod/Ship/Icons/SimPostIco.png create mode 100644 src/Mod/Ship/Icons/SimPostIco.xpm create mode 100644 src/Mod/Ship/simPost/TaskPanel.py create mode 100644 src/Mod/Ship/simPost/TaskPanel.ui create mode 100644 src/Mod/Ship/simPost/__init__.py create mode 100644 src/Mod/Ship/simRun/Sim/fsEvolution.pyc create mode 100644 src/Mod/Ship/simRun/Simulation.pyc diff --git a/src/Mod/Ship/CMakeLists.txt b/src/Mod/Ship/CMakeLists.txt index 300f999f8..9e7ed7347 100644 --- a/src/Mod/Ship/CMakeLists.txt +++ b/src/Mod/Ship/CMakeLists.txt @@ -45,6 +45,8 @@ SET(ShipIcons_SRCS Icons/SimRunIco.xpm Icons/SimStopIco.png Icons/SimStopIco.xpm + Icons/SimPostIco.png + Icons/SimPostIco.xpm Icons/Tank.png Icons/Tank.xcf Icons/Tank.xpm @@ -156,7 +158,14 @@ SET(SimRun_SRCS ) SOURCE_GROUP("simrun" FILES ${SimRun_SRCS}) -SET(all_files ${ShipMain_SRCS} ${ShipIcons_SRCS} ${ShipExamples_SRCS} ${ShipLoadExample_SRCS} ${ShipCreateShip_SRCS} ${ShipOutlineDraw_SRCS} ${ShipAreasCurve_SRCS} ${ShipHydrostatics_SRCS} ${ShipUtils_SRCS} ${ShipWeights_SRCS} ${ShipCreateTank_SRCS} ${ShipGZ_SRCS} ${SimCreate_SRCS} ${SimRun_SRCS}) +SET(SimPost_SRCS + simPost/__init__.py + simPost/TaskPanel.py + simPost/TaskPanel.ui +) +SOURCE_GROUP("simpost" FILES ${SimPost_SRCS}) + +SET(all_files ${ShipMain_SRCS} ${ShipIcons_SRCS} ${ShipExamples_SRCS} ${ShipLoadExample_SRCS} ${ShipCreateShip_SRCS} ${ShipOutlineDraw_SRCS} ${ShipAreasCurve_SRCS} ${ShipHydrostatics_SRCS} ${ShipUtils_SRCS} ${ShipWeights_SRCS} ${ShipCreateTank_SRCS} ${ShipGZ_SRCS} ${SimCreate_SRCS} ${SimRun_SRCS} ${SimPost_SRCS}) ADD_CUSTOM_TARGET(Ship ALL SOURCES ${all_files} @@ -242,6 +251,12 @@ INSTALL( DESTINATION Mod/Ship/simRun ) +INSTALL( + FILES + ${SimPost_SRCS} + DESTINATION + Mod/Ship/simPost +) INSTALL( FILES ${ShipMain_SRCS} diff --git a/src/Mod/Ship/Icons/SimIco.xcf b/src/Mod/Ship/Icons/SimIco.xcf index 8d250eb82f8e3c0da77f2f8765d0f0dedbbb1cc4..1c00aefe1875587f8987d1253f87003bd98f6186 100644 GIT binary patch delta 3348 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 c #E7E7E7", +", c #E7E6E7", +"' c #E6E6E6", +") c #5F5F5F", +"! c #606060", +"~ c #868686", +"{ c #AEAEAE", +"] c #C3C2C2", +"^ c #D1D1D1", +"/ c #E4E3E3", +"( c #E5E6E5", +"_ c #E6E5E5", +": c #E5E4E5", +"< c #6B6B6B", +"[ c #7B7A7A", +"} c #888889", +"| c #ABABAB", +"1 c #D5D5D5", +"2 c #E5E6E6", +"3 c #E5E5E5", +"4 c #E4E5E4", +"5 c #E4E4E4", +"6 c #E3E3E3", +"7 c #E3E3E2", +"8 c #E2E2E2", +"9 c #5E5E5E", +"0 c #5D5D5D", +"a c #5C5C5C", +"b c #5B5B5C", +"c c #5A5B5B", +"d c #838484", +"e c #BABABA", +"f c #DEDEDE", +"g c #E2E3E2", +"h c #E1E2E2", +"i c #E1E1E2", +"j c #E0E1E0", +"k c #E1E1E1", +"l c #EAE9E9", +"m c #5E5F5F", +"n c #5E5D5E", +"o c #5C5D5C", +"p c #5B5C5B", +"q c #5B5A5A", +"r c #5A5A5A", +"s c #595959", +"t c #595858", +"u c #585857", +"v c #575757", +"w c #686868", +"x c #909090", +"y c #BEBEBE", +"z c #D3D2D3", +"A c #E0E0E0", +"B c #E0DFE0", +"C c #E0DFDF", +"D c #DEDEDF", +"E c #5F5E5E", +"F c #5E5D5D", +"G c #5C5B5B", +"H c #5B5B5B", +"I c #5A5A59", +"J c #595A59", +"K c #595859", +"L c #585757", +"M c #565656", +"N c #555555", +"O c #545455", +"P c #545454", +"Q c #676666", +"R c #717272", +"S c #8B8B8A", +"T c #B7B7B8", +"U c #DFDFDF", +"V c #DDDDDD", +"W c #DCDDDD", +"X c #DDDCDC", +"Y c #E8E9E9", +"Z c #5D5E5E", +"` c #5C5B5C", +" . c #595958", +".. c #585858", +"+. c #565657", +"@. c #555556", +"#. c #545554", +"$. c #555454", +"%. c #535354", +"&. c #525252", +"*. c #525251", +"=. c #515050", +"-. c #4F5050", +";. c #4F4F50", +">. c #4E4F4F", +",. c #959595", +"'. c #CAC9C9", +"). c #D9D9DA", +"!. c #DADBDA", +"~. c #DCDCDC", +"{. c #DDDDDC", +"]. c #DBDCDB", +"^. c #DBDBDB", +"/. c #DADADB", +"(. c #DADADA", +"_. c #E8E8E9", +":. c #5B5A5B", +"<. c #505151", +"[. c #505050", +"}. c #4F4F4F", +"|. c #4E4D4E", +"1. c #4D4D4D", +"2. c #4C4D4D", +"3. c #4C4C4C", +"4. c #4B4B4B", +"5. c #707070", +"6. c #959596", +"7. c #AAAAAA", +"8. c #BFBEBF", +"9. c #D7D7D6", +"0. c #DADAD9", +"a. c #D9DADA", +"b. c #D8D9D9", +"c. c #5B5C5C", +"d. c #5A5B5A", +"e. c #5A5959", +"f. c #565757", +"g. c #535353", +"h. c #535253", +"i. c #505150", +"j. c #4F504F", +"k. c #4E4E4E", +"l. c #4C4B4B", +"m. c #494A49", +"n. c #494949", +"o. c #484747", +"p. c #6C6C6C", +"q. c #C7C7C7", +"r. c #DAD9D9", +"s. c #D9D8D9", +"t. c #D9D8D8", +"u. c #D8D8D8", +"v. c #D8D8D7", +"w. c #D7D8D8", +"x. c #D7D7D7", +"y. c #D6D6D6", +"z. c #D5D5D6", +"A. c #5E5E5D", +"B. c #595A5A", +"C. c #575656", +"D. c #545555", +"E. c #4F4E4E", +"F. c #4E4E4D", +"G. c #4C4D4C", +"H. c #4C4B4C", +"I. c #4A4A4A", +"J. c #494A4A", +"K. c #494848", +"L. c #484847", +"M. c #474747", +"N. c #474646", +"O. c #454545", +"P. c #444444", +"Q. c #434343", +"R. c #434243", +"S. c #6D6D6D", +"T. c #A7A8A7", +"U. c #D0D0D0", +"V. c #D4D4D4", +"W. c #D6D5D5", +"X. c #E7E8E8", +"Y. c #59595A", +"Z. c #535454", +"`. c #515151", +" + c #4D4D4C", +".+ c #464647", +"++ c #464545", +"@+ c #444545", +"#+ c #424242", +"$+ c #414141", +"%+ c #404041", +"&+ c #3F4040", +"*+ c #787878", +"=+ c #969696", +"-+ c #A7A7A7", +";+ c #C3C3C2", +">+ c #D5D4D5", +",+ c #D4D4D5", +"'+ c #D3D4D4", +")+ c #D3D3D3", +"!+ c #D2D3D3", +"~+ c #E6E7E6", +"{+ c #5A5A5B", +"]+ c #575858", +"^+ c #575657", +"/+ c #555656", +"(+ c #565555", +"_+ c #525352", +":+ c #515051", +"<+ c #4D4D4E", +"[+ c #4D4C4C", +"}+ c #4A4A49", +"|+ c #474848", +"1+ c #464747", +"2+ c #444544", +"3+ c #434342", +"4+ c #434142", +"5+ c #404141", +"6+ c #403F3F", +"7+ c #3F3E3E", +"8+ c #3E3E3E", +"9+ c #3D3D3D", +"0+ c #3C3C3C", +"a+ c #404040", +"b+ c #707071", +"c+ c #A4A5A5", +"d+ c #D4D3D3", +"e+ c #D3D2D2", +"f+ c #D2D2D2", +"g+ c #D2D2D1", +"h+ c #D1D0D0", +"i+ c #D0D1D0", +"j+ c #CFD0CF", +"k+ c #525353", +"l+ c #525152", +"m+ c #504F4F", +"n+ c #4B4A4A", +"o+ c #484848", +"p+ c #464646", +"q+ c #454544", +"r+ c #454444", +"s+ c #424343", +"t+ c #414142", +"u+ c #403F40", +"v+ c #3F3F3F", +"w+ c #3C3D3C", +"x+ c #3B3B3B", +"y+ c #3A3A3A", +"z+ c #3A3A39", +"A+ c #383838", +"B+ c #373737", +"C+ c #474847", +"D+ c #7F7F7F", +"E+ c #B6B6B6", +"F+ c #C8C9C8", +"G+ c #CBCBCB", +"H+ c #CFD0D0", +"I+ c #D0D0CF", +"J+ c #D0CFD0", +"K+ c #CFCFCF", +"L+ c #CECECE", +"M+ c #CECDCE", +"N+ c #545453", +"O+ c #525151", +"P+ c #4F4E4F", +"Q+ c #4A4B4B", +"R+ c #4A494A", +"S+ c #474647", +"T+ c #454645", +"U+ c #404140", +"V+ c #3E3E3F", +"W+ c #3D3E3E", +"X+ c #3D3C3C", +"Y+ c #3C3B3C", +"Z+ c #3C3B3B", +"`+ c #3A3939", +" @ c #383839", +".@ c #363637", +"+@ c #353636", +"@@ c #353535", +"#@ c #343434", +"$@ c #333333", +"%@ c #7B7B7C", +"&@ c #919190", +"*@ c #ACACAB", +"=@ c #C9C9C9", +"-@ c #CECFCE", +";@ c #CECECD", +">@ c #CDCDCD", +",@ c #CDCDCC", +"'@ c #CCCCCC", +")@ c #CCCCCB", +"!@ c #858585", +"~@ c #E6E5E6", +"{@ c #585859", +"]@ c #565655", +"^@ c #545354", +"/@ c #4E4F4E", +"(@ c #4C4C4D", +"_@ c #4B4B4A", +":@ c #484748", +"<@ c #434344", +"[@ c #3D3C3D", +"}@ c #393839", +"|@ c #373636", +"1@ c #333334", +"2@ c #323332", +"3@ c #323232", +"4@ c #313131", +"5@ c #303131", +"6@ c #383939", +"7@ c #50504F", +"8@ c #7E7F7E", +"9@ c #B6B7B6", +"0@ c #CBCBCC", +"a@ c #CBCBCA", +"b@ c #CACACA", +"c@ c #CAC9CA", +"d@ c #575857", +"e@ c #515150", +"f@ c #4A4A4B", +"g@ c #494849", +"h@ c #474746", +"i@ c #464547", +"j@ c #434444", +"k@ c #424141", +"l@ c #3D3D3E", +"m@ c #3B3C3B", +"n@ c #3B3B3A", +"o@ c #383737", +"p@ c #363737", +"q@ c #363636", +"r@ c #353635", +"s@ c #343433", +"t@ c #333233", +"u@ c #313132", +"v@ c #323131", +"w@ c #303030", +"x@ c #2F2F2F", +"y@ c #2F2F2E", +"z@ c #2E2E2F", +"A@ c #2D2C2D", +"B@ c #2C2D2D", +"C@ c #2C2C2C", +"D@ c #2C2B2C", +"E@ c #939393", +"F@ c #B9BAB9", +"G@ c #C0C0C0", +"H@ c #C7C6C7", +"I@ c #CACAC9", +"J@ c #C9C9C8", +"K@ c #C8C8C9", +"L@ c #C8C8C8", +"M@ c #585758", +"N@ c #535152", +"O@ c #504F50", +"P@ c #4B4C4A", +"Q@ c #494948", +"R@ c #454646", +"S@ c #434443", +"T@ c #414241", +"U@ c #3F3F40", +"V@ c #3F3E3F", +"W@ c #3E3E3D", +"X@ c #3D3C3E", +"Y@ c #393939", +"Z@ c #373838", +"`@ c #363535", +" # c #343334", +".# c #313232", +"+# c #2E2E2E", +"@# c #2D2D2D", +"## c #2C2B2B", +"$# c #2B2B2B", +"%# c #2A2A2A", +"&# c #29292A", +"*# c #292929", +"=# c #282828", +"-# c #383938", +";# c #5D5E5D", +"># c #7A797A", +",# c #919191", +"'# c #B3B2B3", +")# c #C8C7C8", +"!# c #C8C7C7", +"~# c #C8C8C7", +"{# c #C7C7C6", +"]# c #C6C6C7", +"^# c #C6C6C5", +"/# c #9D9D9D", +"(# c #E4E4E5", +"_# c #4A4B4A", +":# c #484949", +"<# c #474748", +"[# c #444443", +"}# c #424241", +"|# c #3C3D3D", +"1# c #3B3A3B", +"2# c #383837", +"3# c #353434", +"4# c #333434", +"5# c #313031", +"6# c #302F2F", +"7# c #2D2D2E", +"8# c #2A2B2B", +"9# c #292A2A", +"0# c #292828", +"a# c #282928", +"b# c #272727", +"c# c #262626", +"d# c #242524", +"e# c #C6C6C6", +"f# c #C5C5C5", +"g# c #C5C5C6", +"h# c #424243", +"i# c #3B3A3A", +"j# c #383738", +"k# c #343534", +"l# c #343333", +"m# c #313130", +"n# c #302F30", +"o# c #2D2C2C", +"p# c #2C2C2D", +"q# c #272626", +"r# c #252625", +"s# c #262525", +"t# c #242424", +"u# c #232423", +"v# c #222223", +"w# c #222222", +"x# c #212121", +"y# c #1F1F20", +"z# c #30302F", +"A# c #6A696A", +"B# c #A0A09F", +"C# c #C5C6C5", +"D# c #E3E4E4", +"E# c #555655", +"F# c #535352", +"G# c #4E4D4D", +"H# c #424142", +"I# c #414040", +"J# c #3F403F", +"K# c #3C3C3D", +"L# c #39393A", +"M# c #383637", +"N# c #323233", +"O# c #323132", +"P# c #303031", +"Q# c #2F2E2E", +"R# c #2E2E2D", +"S# c #2B2C2C", +"T# c #2B2A2A", +"U# c #272627", +"V# c #252525", +"W# c #242423", +"X# c #232222", +"Y# c #212221", +"Z# c #202021", +"`# c #202020", +" $ c #1F1F1F", +".$ c #1E1E1F", +"+$ c #1E1D1D", +"@$ c #1D1C1D", +"#$ c #C4C5C5", +"$$ c #C4C4C4", +"%$ c #525253", +"&$ c #515252", +"*$ c #4E4E4F", +"=$ c #4D4C4D", +"-$ c #4B4A4B", +";$ c #414041", +">$ c #3C3C3B", +",$ c #393938", +"'$ c #363536", +")$ c #353435", +"!$ c #333433", +"~$ c #2B2A2B", +"{$ c #2A2B2A", +"]$ c #292829", +"^$ c #262627", +"/$ c #252624", +"($ c #252424", +"_$ c #222322", +":$ c #20201F", +"<$ c #1E1F1E", +"[$ c #1D1D1D", +"}$ c #1C1D1D", +"|$ c #1C1C1C", +"1$ c #C4C5C4", +"2$ c #4F4F4E", +"3$ c #444344", +"4$ c #3E3F3E", +"5$ c #3E3D3E", +"6$ c #393A39", +"7$ c #393838", +"8$ c #363736", +"9$ c #2F302F", +"0$ c #2D2E2D", +"a$ c #2E2D2E", +"b$ c #2D2D2C", +"c$ c #2B2B2C", +"d$ c #2B2B2A", +"e$ c #262526", +"f$ c #242324", +"g$ c #232324", +"h$ c #212222", +"i$ c #202121", +"j$ c #1F2020", +"k$ c #1F1F1E", +"l$ c #1D1C1C", +"m$ c #1B1B1C", +"n$ c #C4C4C3", +"o$ c #E3E2E3", +"p$ c #555455", +"q$ c #515251", +"r$ c #4B4C4C", +"s$ c #3D3E3D", +"t$ c #3B3D3C", +"u$ c #3A3A3B", +"v$ c #373837", +"w$ c #373637", +"x$ c #2F2E2F", +"y$ c #232323", +"z$ c #1E1E1D", +"A$ c #1B1C1C", +"B$ c #1C1B1B", +"C$ c #1B1B1B", +"D$ c #C3C4C4", +"E$ c #C3C3C3", +"F$ c #464546", +"G$ c #3E3F3F", +"H$ c #3E3D3D", +"I$ c #3D3D3C", +"J$ c #3A3B3B", +"K$ c #323333", +"L$ c #313030", +"M$ c #2F3030", +"N$ c #2E2F2F", +"O$ c #2D2D2B", +"P$ c #2A2B29", +"Q$ c #292A29", +"R$ c #282726", +"S$ c #202120", +"T$ c #1E1E1E", +"U$ c #19191A", +"V$ c #C3C3C4", +"W$ c #E2E1E1", +"X$ c #4A4949", +"Y$ c #484849", +"Z$ c #3A3B3A", +"`$ c #373738", +" % c #373736", +".% c #252425", +"+% c #222122", +"@% c #212122", +"#% c #1A1B1B", +"$% c #1B1A1A", +"%% c #1A1919", +"&% c #E2E1E2", +"*% c #E1E0E1", +"=% c #505051", +"-% c #49494A", +";% c #1A1A1A", +">% c #3A393A", +",% c #2E2F2E", +"'% c #282727", +")% c #242425", +"!% c #232322", +"~% c #1E1F1F", +"{% c #1B1C1B", +"]% c #1A191A", +"^% c #191A19", +"/% c #191918", +"(% c #C2C2C2", +"_% c #E0E1E1", +":% c #E1E1E0", +"<% c #4B4B4C", +"[% c #454445", +"}% c #161515", +"|% c #8B8B8B", +"1% c #2C2C2B", +"2% c #282827", +"3% c #272728", +"4% c #262727", +"5% c #1F1E1F", +"6% c #1A1A19", +"7% c #181818", +"8% c #C1C1C2", +"9% c #E1E0E0", +"0% c #464746", +"a% c #111111", +"b% c #7C7C7C", +"c% c #BBBBBB", +"d% c #969697", +"e% c #5F5F5C", +"f% c #33332F", +"g% c #28292A", +"h% c #262726", +"i% c #201F20", +"j% c #1F201F", +"k% c #191919", +"l% c #171717", +"m% c #4C4C4B", +"n% c #444445", +"o% c #444343", +"p% c #1A1717", +"q% c #211515", +"r% c #2D2B2B", +"s% c #999999", +"t% c #B3B3B5", +"u% c #8B8BB2", +"v% c #6F6F89", +"w% c #4A4A4F", +"x% c #2A2929", +"y% c #2B2C2B", +"z% c #2A292A", +"A% c #232424", +"B% c #212120", +"C% c #181718", +"D% c #171818", +"E% c #171716", +"F% c #C1C1C1", +"G% c #C0C1C1", +"H% c #DFE0E0", +"I% c #484948", +"J% c #422121", +"K% c #552D2D", +"L% c #363232", +"M% c #A0A0A0", +"N% c #646464", +"O% c #ABABAE", +"P% c #7575C7", +"Q% c #5C5CD5", +"R% c #7878BD", +"S% c #7B7B8E", +"T% c #585855", +"U% c #30302E", +"V% c #2A2A29", +"W% c #212020", +"X% c #201E1F", +"Y% c #1E1D1E", +"Z% c #1C1C1D", +"`% c #1A1B1A", +" & c #191A1A", +".& c #171616", +"+& c #161616", +"@& c #C0C0C1", +"#& c #414242", +"$& c #1F1C1C", +"%& c #542424", +"&& c #4C2625", +"*& c #585756", +"=& c #A8A8A8", +"-& c #767677", +";& c #9D9D9E", +">& c #8A8AAD", +",& c #5A5AC4", +"'& c #3838D7", +")& c #3434D9", +"!& c #4848BD", +"~& c #535372", +"{& c #878888", +"]& c #A4A4A4", +"^& c #A7A6A6", +"/& c #B0B0B0", +"(& c #B1B1B1", +"_& c #A1A1A1", +":& c #808080", +"<& c #151515", +"[& c #242525", +"}& c #1D1E1E", +"|& c #1A1A1B", +"1& c #191819", +"2& c #181817", +"3& c #161717", +"4& c #151516", +"5& c #C1C0C0", +"6& c #DFDEDE", +"7& c #5B2020", +"8& c #391A19", +"9& c #A4A4A5", +"0& c #878687", +"a& c #8E8E8E", +"b& c #9B9B98", +"c& c #999994", +"d& c #888898", +"e& c #6C6BA8", +"f& c #4F4FBD", +"g& c #50508B", +"h& c #CECDCD", +"i& c #6A6A6A", +"j& c #242323", +"k& c #222121", +"l& c #1F1E1E", +"m& c #1C1D1C", +"n& c #151514", +"o& c #BFC0BF", +"p& c #DFDFDE", +"q& c #434445", +"r& c #3F3E40", +"s& c #1B1212", +"t& c #611717", +"u& c #301414", +"v& c #797878", +"w& c #9C9C9D", +"x& c #888888", +"y& c #8A8A89", +"z& c #868688", +"A& c #7C7C8F", +"B& c #45455C", +"C& c #B8B8B8", +"D& c #C5C4C4", +"E& c #AAA9A9", +"F& c #252523", +"G& c #222323", +"H& c #171817", +"I& c #161516", +"J& c #141514", +"K& c #141313", +"L& c #C0BFBF", +"M& c #4D4E4E", +"N& c #464645", +"O& c #1B0F0F", +"P& c #570D0D", +"Q& c #270D0D", +"R& c #706F6F", +"S& c #838383", +"T& c #757474", +"U& c #878787", +"V& c #6F6F6F", +"W& c #5C5C5A", +"X& c #353533", +"Y& c #656565", +"Z& c #BCBCBC", +"`& c #BFBFBF", +" * c #C1C2C1", +".* c #696969", +"+* c #1D1D1E", +"@* c #191818", +"#* c #131313", +"$* c #DDDEDD", +"%* c #110F0F", +"&* c #220B0B", +"** c #201B1B", +"=* c #7D7D7C", +"-* c #727272", +";* c #898989", +">* c #BBBBBA", +",* c #BCBCBB", +"'* c #BDBDBD", +")* c #676868", +"!* c #7A7A7A", +"~* c #1D1D1C", +"{* c #181918", +"]* c #141414", +"^* c #131314", +"/* c #131312", +"(* c #BEBFBF", +"_* c #454546", +":* c #3B3B3C", +"<* c #181919", +"[* c #818181", +"}* c #656465", +"|* c #888787", +"1* c #9B9B9B", +"2* c #ADADAD", +"3* c #B4B4B4", +"4* c #B5B5B5", +"5* c #B5B5B4", +"6* c #B6B6B5", +"7* c #B6B6B7", +"8* c #B7B7B7", +"9* c #B7B8B8", +"0* c #767676", +"a* c #121213", +"b* c #212021", +"c* c #141413", +"d* c #111212", +"e* c #9A9A9A", +"f* c #515152", +"g* c #616162", +"h* c #949495", +"i* c #A6A6A6", +"j* c #AFAFAF", +"k* c #ACADAD", +"l* c #B2B2B2", +"m* c #B0B0AF", +"n* c #AFAFB0", +"o* c #B3B3B3", +"p* c #B5B4B4", +"q* c #1C1B1C", +"r* c #131414", +"s* c #121313", +"t* c #121212", +"u* c #BEBDBD", +"v* c #DCDCDD", +"w* c #6E6E6E", +"x* c #A5A5A5", +"y* c #A9A9A9", +"z* c #ABABAA", +"A* c #AAAAA9", +"B* c #ABA9A9", +"C* c #ABAAAB", +"D* c #ABABAC", +"E* c #ACACAC", +"F* c #666766", +"G* c #141314", +"H* c #1D1E1D", +"I* c #1B1A1B", +"J* c #131213", +"K* c #101111", +"L* c #586362", +"M* c #5D6F74", +"N* c #596767", +"O* c #555A58", +"P* c #A2A2A3", +"Q* c #A2A2A2", +"R* c #A3A3A3", +"S* c #A5A5A3", +"T* c #A6A7A7", +"U* c #A5A4A5", +"V* c #A8A7A7", +"W* c #A9A8A9", +"X* c #9C9C9C", +"Y* c #424342", +"Z* c #6C6D6C", +"`* c #101010", +" = c #151616", +".= c #131412", +"+= c #101110", +"@= c #0F0F0F", +"#= c #BDBCBD", +"$= c #DBDCDC", +"%= c #7FA3AE", +"&= c #79A5EC", +"*= c #5F80EB", +"== c #485FD4", +"-= c #4758B4", +";= c #516392", +">= c #586874", +",= c #55605F", +"'= c #393A3A", +")= c #2D2E2F", +"!= c #9E9E9E", +"~= c #979897", +"{= c #9A9B9B", +"]= c #929493", +"^= c #8C8D8D", +"/= c #979797", +"(= c #989999", +"_= c #969898", +":= c #979898", +"<= c #9B9C9C", +"[= c #A2A1A2", +"}= c #737272", +"|= c #A6A5A6", +"1= c #616161", +"2= c #1B1B1A", +"3= c #181717", +"4= c #161615", +"5= c #151414", +"6= c #121112", +"7= c #111110", +"8= c #7A9DAE", +"9= c #597AF5", +"0= c #5373F9", +"a= c #668CFC", +"b= c #5D80FC", +"c= c #5271FB", +"d= c #5576F5", +"e= c #739AE6", +"f= c #7495A5", +"g= c #607578", +"h= c #54646B", +"i= c #58686B", +"j= c #505A59", +"k= c #484B4B", +"l= c #323432", +"m= c #919292", +"n= c #959494", +"o= c #878686", +"p= c #7A7979", +"q= c #7C7777", +"r= c #807778", +"s= c #776F6F", +"t= c #706565", +"u= c #7B6C6B", +"v= c #847171", +"w= c #7C6B6B", +"x= c #746464", +"y= c #736262", +"z= c #7A6969", +"A= c #807070", +"B= c #807676", +"C= c #807C7C", +"D= c #949696", +"E= c #9E9F9F", +"F= c #757575", +"G= c #171617", +"H= c #151615", +"I= c #141415", +"J= c #121111", +"K= c #0F1010", +"L= c #0F0F10", +"M= c #0E0F0E", +"N= c #BDBDBC", +"O= c #5B6766", +"P= c #799CA3", +"Q= c #76979D", +"R= c #6F8D9F", +"S= c #97CEEF", +"T= c #76A2FB", +"U= c #4C69FC", +"V= c #1B27FD", +"W= c #3549F4", +"X= c #5979E3", +"Y= c #698DE4", +"Z= c #77A2F2", +"`= c #688EE1", +" - c #5C78C4", +".- c #576FA2", +"+- c #55697C", +"@- c #4D5C5F", +"#- c #333E39", +"$- c #3D3B37", +"%- c #6F6766", +"&- c #786868", +"*- c #7D6666", +"=- c #947676", +"-- c #9C7979", +";- c #9D7676", +">- c #AB7E7E", +",- c #BA8888", +"'- c #B88585", +")- c #B17E7E", +"!- c #B57E7E", +"~- c #BD8383", +"{- c #BD8181", +"]- c #B07777", +"^- c #A06A6A", +"/- c #956161", +"(- c #8A5B5B", +"_- c #7D5858", +":- c #755F5F", +"<- c #807878", +"[- c #7D7D7D", +"}- c #797979", +"|- c #131212", +"1- c #0F0F0E", +"2- c #0D0E0E", +"3- c #BCBBBC", +"4- c #DBDADB", +"5- c #424545", +"6- c #4F5756", +"7- c #9BD0D5", +"8- c #6D96FC", +"9- c #435DFC", +"0- c #3E55FC", +"a- c #5270FC", +"b- c #5878F8", +"c- c #4862F2", +"d- c #435DF8", +"e- c #4D6BF8", +"f- c #597BFC", +"g- c #5B7DFB", +"h- c #5E81FB", +"i- c #678DEF", +"j- c #7198D3", +"k- c #354658", +"l- c #5B4442", +"m- c #B6817F", +"n- c #C68B8B", +"o- c #C38787", +"p- c #C78888", +"q- c #CE8C8C", +"r- c #CA8686", +"s- c #C68181", +"t- c #C78080", +"u- c #C87F7F", +"v- c #C57B7B", +"w- c #C37777", +"x- c #C07373", +"y- c #C17271", +"z- c #C17070", +"A- c #BF6B6B", +"B- c #BB6767", +"C- c #B15F5F", +"D- c #9E5453", +"E- c #744343", +"F- c #302929", +"G- c #161617", +"H- c #141515", +"I- c #131413", +"J- c #100F10", +"K- c #0F0E0E", +"L- c #0E0E0E", +"M- c #0D0D0D", +"N- c #BBBCBB", +"O- c #DAD9DA", +"P- c #40403F", +"Q- c #739297", +"R- c #78A2E4", +"S- c #7AA6E2", +"T- c #86B1C5", +"U- c #6A879E", +"V- c #6A879A", +"W- c #708F95", +"X- c #7C9FA0", +"Y- c #5F7788", +"Z- c #576C96", +"`- c #5974B8", +" ; c #5774D8", +".; c #4B67F1", +"+; c #4661FD", +"@; c #3549D3", +"#; c #2F236D", +"$; c #A86F81", +"%; c #C17777", +"&; c #C27472", +"*; c #C17272", +"=; c #BE6F6F", +"-; c #BC6C6C", +";; c #BC6969", +">; c #BA6766", +",; c #B96363", +"'; c #B86060", +"); c #B75D5D", +"!; c #B55B5B", +"~; c #B35757", +"{; c #B25554", +"]; c #B15251", +"^; c #B04F4F", +"/; c #AF4C4C", +"(; c #AF4A49", +"_; c #763030", +":; c #291313", +"<; c #0C0C0C", +"[; c #BBBBBC", +"}; c #434241", +"|; c #49504F", +"1; c #697F7E", +"2; c #607270", +"3; c #464C4B", +"4; c #454748", +"5; c #3B3D3D", +"6; c #454848", +"7; c #4D5353", +"8; c #637D7F", +"9; c #7BA3C0", +"0; c #688EE9", +"a; c #364CD9", +"b; c #564EC6", +"c; c #8F639C", +"d; c #B06D77", +"e; c #B75A55", +"f; c #B55753", +"g; c #B25352", +"h; c #B15050", +"i; c #B04E4D", +"j; c #AE4A4A", +"k; c #AD4747", +"l; c #AC4444", +"m; c #AA4242", +"n; c #A93F3F", +"o; c #A83C3C", +"p; c #A63939", +"q; c #A53636", +"r; c #A43333", +"s; c #8F2C2C", +"t; c #451616", +"u; c #541A1A", +"v; c #663B3B", +"w; c #848383", +"x; c #1C1A1C", +"y; c #0E0F0F", +"z; c #0E0D0D", +"A; c #0D0D0C", +"B; c #BBBABB", +"C; c #BABBBA", +"D; c #D9DAD9", +"E; c #3E4645", +"F; c #5A6F74", +"G; c #7094BE", +"H; c #5A7EF1", +"I; c #3F52F7", +"J; c #4A49DD", +"K; c #6E3D9B", +"L; c #914B73", +"M; c #A13B45", +"N; c #A73735", +"O; c #A6332F", +"P; c #A42F2C", +"Q; c #A22C2B", +"R; c #A02B2C", +"S; c #9F2929", +"T; c #9E2626", +"U; c #9D2323", +"V; c #9B2020", +"W; c #9A1E1D", +"X; c #951919", +"Y; c #581010", +"Z; c #3B0909", +"`; c #7E1C1C", +" > c #671B1B", +".> c #2F2929", +"+> c #101011", +"@> c #0B0B0B", +"#> c #D8D9D8", +"$> c #3B3C3C", +"%> c #353534", +"&> c #353334", +"*> c #454949", +"=> c #6B8382", +"-> c #779FB5", +";> c #76A2EF", +">> c #5B72EE", +",> c #555CDE", +"'> c #623AA0", +")> c #762969", +"!> c #872F51", +"~> c #922C3C", +"{> c #952129", +"]> c #941619", +"^> c #950D0B", +"/> c #960B07", +"(> c #950B06", +"_> c #930907", +":> c #8F0707", +"<> c #680504", +"[> c #350200", +"}> c #4D0301", +"|> c #680D0E", +"1> c #391213", +"2> c #252E29", +"3> c #242B25", +"4> c #252A26", +"5> c #151415", +"6> c #121312", +"7> c #111211", +"8> c #10100F", +"9> c #0E0E0F", +"0> c #0D0C0D", +"a> c #0C0C0B", +"b> c #0A0A0B", +"c> c #B9BABA", +"d> c #2F2F30", +"e> c #313333", +"f> c #51656B", +"g> c #587293", +"h> c #5574C3", +"i> c #5170F4", +"j> c #4658F3", +"k> c #4A4BDB", +"l> c #5943B8", +"m> c #6B3E8F", +"n> c #793468", +"o> c #7F264C", +"p> c #7E1435", +"q> c #7E0320", +"r> c #82051B", +"s> c #70030D", +"t> c #2B0003", +"u> c #170002", +"v> c #3A0B12", +"w> c #35272C", +"x> c #3F5785", +"y> c #455FC7", +"z> c #4961B0", +"A> c #495E89", +"B> c #445664", +"C> c #3C4A49", +"D> c #0A0B0B", +"E> c #0A0A09", +"F> c #BAB9BA", +"G> c #2D2E2E", +"H> c #2E3030", +"I> c #323231", +"J> c #464C4C", +"K> c #6B8887", +"L> c #6C8FA1", +"M> c #6183BB", +"N> c #5071D2", +"O> c #4463E8", +"P> c #3E55F8", +"Q> c #414EED", +"R> c #4B45CF", +"S> c #5131AA", +"T> c #502EA3", +"U> c #2E1FA3", +"V> c #09089D", +"W> c #0A0B8D", +"X> c #202788", +"Y> c #5476B4", +"Z> c #7BAAF4", +"`> c #5879FB", +" , c #5D7FFD", +"., c #5C7FFB", +"+, c #658AF7", +"@, c #749FE8", +"#, c #6383A7", +"$, c #4B616A", +"%, c #394443", +"&, c #1C1F1F", +"*, c #100F0F", +"=, c #0B0B0C", +"-, c #0B0B0A", +";, c #0A0A0A", +">, c #090909", +",, c #B9B9B9", +"', c #333332", +"), c #303130", +"!, c #2E2D2D", +"~, c #2A2A2B", +"{, c #2B2D2D", +"], c #363F40", +"^, c #445358", +"/, c #526873", +"(, c #5C778D", +"_, c #607FA4", +":, c #5D7FBE", +"<, c #597ED6", +"[, c #577BE9", +"}, c #3E56B9", +"|, c #5E81D3", +"1, c #5574D4", +"2, c #425AD8", +"3, c #425BF1", +"4, c #3C54FB", +"5, c #3B52FC", +"6, c #4660FC", +"7, c #5574FC", +"8, c #5473FC", +"9, c #455FFC", +"0, c #4059F5", +"a, c #516EE2", +"b, c #6A91CA", +"c, c #587480", +"d, c #2E3636", +"e, c #0D0C0C", +"f, c #0C0B0C", +"g, c #0A090A", +"h, c #B8B9B8", +"i, c #D8D7D7", +"j, c #D7D7D8", +"k, c #333232", +"l, c #282B2C", +"m, c #363F41", +"n, c #4B5B5B", +"o, c #5B6F6D", +"p, c #3C4747", +"q, c #404D54", +"r, c #465861", +"s, c #495C67", +"t, c #577285", +"u, c #5E7EA0", +"v, c #5B7ABA", +"w, c #6084ED", +"x, c #5677FB", +"y, c #6388FC", +"z, c #82B3FB", +"A, c #86B8FB", +"B, c #5575FB", +"C, c #354AFC", +"D, c #4F6EF8", +"E, c #719BD3", +"F, c #62838E", +"G, c #4B6466", +"H, c #32403F", +"I, c #171919", +"J, c #0A0A0C", +"K, c #080908", +"L, c #070708", +"M, c #B9B8B9", +"N, c #B9B9B8", +"O, c #383937", +"P, c #2C2D2C", +"Q, c #252626", +"R, c #272C30", +"S, c #4E6676", +"T, c #5C7CB0", +"U, c #5A7CEB", +"V, c #4159FC", +"W, c #435CFC", +"X, c #374CFC", +"Y, c #3347FC", +"Z, c #1C27FD", +"`, c #222FFD", +" ' c #4864F7", +".' c #5C7EE9", +"+' c #7098D4", +"@' c #5A798B", +"#' c #394948", +"$' c #252A2A", +"%' c #0B0A0B", +"&' c #0B0A09", +"*' c #090808", +"=' c #070808", +"-' c #070707", +";' c #B8B7B8", +">' c #D6D7D7", +",' c #D7D6D7", +"'' c #343435", +")' c #2D2D2F", +"!' c #282929", +"~' c #2C2F2E", +"{' c #576E6D", +"]' c #6B90A6", +"^' c #658AE8", +"/' c #3245FD", +"(' c #3F56FC", +"_' c #84B6FB", +":' c #76A1DB", +"<' c #5370C0", +"[' c #4A65D9", +"}' c #455FF7", +"|' c #4661FA", +"1' c #5D7FE7", +"2' c #6D94B7", +"3' c #3C4D4D", +"4' c #0B0C0C", +"5' c #080809", +"6' c #060606", +"7' c #B7B8B7", +"8' c #D7D6D6", +"9' c #3F3F3E", +"0' c #363635", +"a' c #282829", +"b' c #1A1C1C", +"c' c #495F68", +"d' c #6B92CC", +"e' c #5474FC", +"f' c #75A0FB", +"g' c #769FA3", +"h' c #283137", +"i' c #364651", +"j' c #5B7A97", +"k' c #6C93DA", +"l' c #5979FB", +"m' c #4D6AFC", +"n' c #6283CF", +"o' c #4D676B", +"p' c #0D0D0E", +"q' c #0A0909", +"r' c #080808", +"s' c #070706", +"t' c #060605", +"u' c #D6D5D6", +"v' c #606061", +"w' c #272726", +"x' c #232223", +"y' c #212220", +"z' c #1C1C1B", +"A' c #3E4C4A", +"B' c #77A2C3", +"C' c #82B1EC", +"D' c #6A8F90", +"E' c #2B3332", +"F' c #55727E", +"G' c #6D95E0", +"H' c #658AFB", +"I' c #8EC3D8", +"J' c #283432", +"K' c #050505", +"L' c #B8B7B7", +"M' c #D6D6D5", +"N' c #C5C5C4", +"O' c #848484", +"P' c #252526", +"Q' c #181819", +"R' c #353E3D", +"S' c #4F6664", +"T' c #313D3D", +"U' c #111010", +"V' c #3F5255", +"W' c #53718E", +"X' c #688C93", +"Y' c #1D2425", +"Z' c #080707", +"`' c #050606", +" ) c #050406", +".) c #040404", +"+) c #B7B7B6", +"@) c #D3D3D2", +"#) c #292928", +"$) c #111312", +"%) c #0B0A0A", +"&) c #080807", +"*) c #080607", +"=) c #060505", +"-) c #050504", +";) c #D1D1D2", +">) c #858484", +",) c #272827", +"') c #0F100F", +")) c #0E0D0E", +"!) c #0C0D0C", +"~) c #080A09", +"{) c #090809", +"]) c #060707", +"^) c #060506", +"/) c #040505", +"() c #030303", +"_) c #B6B5B5", +":) c #CFCECF", +"<) c #CFCECE", +"[) c #BDBEBE", +"}) c #0E0D0F", +"|) c #0C0D0D", +"1) c #0C0B0B", +"2) c #0A0B0A", +"3) c #090A0A", +"4) c #070807", +"5) c #050506", +"6) c #040303", +"7) c #030403", +"8) c #020202", +"9) c #CFCFCE", +"0) c #CDCCCC", +"a) c #828282", +"b) c #252524", +"c) c #121011", +"d) c #0C0C0D", +"e) c #060706", +"f) c #020203", +"g) c #010202", +"h) c #B4B4B5", +"i) c #555554", +"j) c #CCCCCD", +"k) c #CBCCCB", +"l) c #CACBCA", +"m) c #0E0E0D", +"n) c #030404", +"o) c #010101", +"p) c #B5B4B5", +"q) c #B4B5B4", +"r) c #C9CACA", +"s) c #C8C9C9", +"t) c #C9C8C9", +"u) c #777877", +"v) c #121311", +"w) c #050405", +"x) c #040403", +"y) c #020201", +"z) c #000000", +"A) c #4F504E", +"B) c #C9C8C8", +"C) c #C7C7C8", +"D) c #C6C7C6", +"E) c #60605F", +"F) c #050404", +"G) c #000001", +"H) c #B3B4B4", +"I) c #C7C6C6", +"J) c #C5C6C6", +"K) c #C6C5C6", +"L) c #B2B3B3", +"M) c #949494", +"N) c #7E7E7E", +"O) c #171718", +"P) c #0D0E0D", +"Q) c #09090A", +"R) c #080909", +"S) c #070607", +"T) c #060504", +"U) c #020303", +"V) c #B3B3B4", +"W) c #666666", +"X) c #9F9F9F", +"Y) c #C4C3C4", +"Z) c #C2C2C3", +"`) c #C0C0BF", +" ! c #BCBBBB", +".! c #909191", +"+! c #141516", +"@! c #121211", +"#! c #0F0E0F", +"$! c #090908", +"%! c #070606", +"&! c #050605", +"*! c #020101", +"=! c #B2B3B2", +"-! c #4D4E4D", +";! c #929292", +">! c #C2C3C2", +",! c #C1C2C2", +"'! c #C2C1C2", +")! c #0B0C0B", +"!! c #030202", +"~! c #000100", +"{! c #B3B2B2", +"]! c #4B4C4B", +"^! c #464745", +"/! c #AFB0AF", +"(! c #ADAEAE", +"_! c #ABAAAA", +":! c #BFBFBE", +"~ c #565756", +",~ c #989998", +"'~ c #A0A1A0", +")~ c #A4A3A4", +"!~ c #B0B1B1", +"~~ c #B1B0B1", +"{~ c #B6B7B7", +"]~ c #787877", +"^~ c #757676", +"/~ c #747474", +"(~ c #8C8D8C", +"_~ c #9D9C9D", +":~ c #A8A8A7", +"<~ c #545353", +"[~ c #989797", +"}~ c #9F9F9E", +"|~ c #A0A1A1", +"1~ c #8C8C8B", +"2~ c #706F70", +"3~ c #B1B1B0", +"4~ c #B4B5B5", +"5~ c #777677", +"6~ c #727172", +"7~ c #6B6C6C", +"8~ c #80807F", +"9~ c #919090", +"0~ c #9E9E9F", +"a~ c #A4A5A4", +"b~ c #A6A7A6", +"c~ c #898888", +"d~ c #6E6E6D", +"e~ c #5F5F60", +"f~ c #797A7A", +"g~ c #7E7F7F", +"h~ c #777777", +"i~ c #616060", +"j~ c #626263", +"k~ c #767777", +"l~ c #767675", +"m~ c #717171", +"n~ c #6E6E6F", +"o~ c #6C6D6D", +"p~ c #6A6969", +"q~ c #676767", +"r~ c #656665", +"s~ c #676766", +"t~ c #727373", +"u~ c #5C5C5B", +"v~ c #6A6A6B", +"w~ c #7B7A7B", +"x~ c #626262", +"y~ c #6B6A6B", +"z~ c #6C6B6B", +"A~ c #B1B1B2", +"B~ c #777676", +"C~ c #747575", +"D~ c #717271", +"E~ c #6D6E6D", +"F~ c #6B6B6A", +"G~ c #686767", +"H~ c #646363", +"I~ c #5D5D5C", +"J~ c #777776", +"K~ c #878788", +"L~ c #969596", +"M~ c #9A9898", +"N~ c #9A9A99", +"O~ c #646463", +"P~ c #7B7C7C", +"Q~ c #7B7C7B", +"R~ c #707170", +"S~ c #575756", +"T~ c #696968", +"U~ c #B0B0B1", +"V~ c #ABACAB", +"W~ c #787777", +"X~ c #717170", +"Y~ c #696869", +"Z~ c #666565", +"`~ c #646465", +" { c #636363", +".{ c #605F5F", +"+{ c #575758", +"@{ c #8B8A8B", +"#{ c #949393", +"${ c #666566", +"%{ c #A5A4A4", +"&{ c #969797", +"*{ c #787778", +"={ c #636364", +"-{ c #606161", +";{ c #5D5C5C", +">{ c #585958", +",{ c #5C5C5D", +"'{ c #868787", +"){ c #7F807F", +"!{ c #606160", +"~{ c #616261", +"{{ c #656566", +"]{ c #666767", +"^{ c #ADADAC", +"/{ c #A8A9A8", +"({ c #9A9999", +"_{ c #6A6A69", +":{ c #626261", +"<{ c #5F605F", +"[{ c #818081", +"}{ c #868685", +"|{ c #636362", +"1{ c #7C7B7B", +"2{ c #939292", +"3{ c #8A8B8A", +"4{ c #676768", +"5{ c #848485", +"6{ c #818281", +"7{ c #7F7E7E", +"8{ c #7B7B7A", +"9{ c #A5A6A6", +"0{ c #9F9FA0", +"a{ c #8B8C8B", +"b{ c #818180", +"c{ c #7E7D7E", +"d{ c #7C7C7D", +"e{ c #787978", +"f{ c #636463", +"g{ c #5D5D5E", +"h{ c #616160", +"i{ c #626161", +"j{ c #7C7D7C", +"k{ c #9B9A9A", +"l{ c #666667", +"m{ c #818182", +"n{ c #7D7E7D", +"o{ c #757475", +"p{ c #5F6060", +"q{ c #707171", +"r{ c #807F80", +"s{ c #8E8E8F", +"t{ c #979696", +"u{ c #959594", +"v{ c #686869", +"w{ c #7F8080", +"x{ c #7E7E7F", +"y{ c #7C7D7D", +"z{ c #737374", +"A{ c #4C4E4E", +"B{ c #535453", +"C{ c #5B595B", +"D{ c #5F5F5E", +"E{ c #747473", +"F{ c #838384", +"G{ c #908F90", +"H{ c #919192", +"I{ c #7D7C7D", +"J{ c #818282", +"K{ c #808081", +"L{ c #7F7F80", +"M{ c #5B5A5C", +"N{ c #5C5D5D", +"O{ c #828181", +"P{ c #5A595A", +"Q{ c #676667", +"R{ c #8A8A8A", +"S{ c #7A7A7B", +"T{ c #9E9E9D", +"U{ c #838282", +"V{ c #767576", +"W{ c #868585", +"X{ c #797A79", +"Y{ c #737273", +"Z{ c #626363", +"`{ c #F5F5F5", +" ] c #FDFDFD", +".] c #6E6D6D", +"+] c #7F7E7F", +"@] c #989897", +"#] c #9C9D9C", +"$] c #5E5E5F", +"%] c #CACBCB", +"&] c #FFFFFF", +"*] c #9C9B9C", +"=] c #9B9B9A", +"-] c #666665", +";] c #626362", +">] c #838483", +",] c #8D8D8C", +"'] c #959696", +")] c #959795", +"!] c #757574", +"~] c #656666", +"{] c #7D7E7E", +"]] c #737372", +"^] c #6C6C6D", +"/] c #747374", +"(] c #979796", +"_] c #939392", +":] c #7D7D7E", +"<] c #777878", +"[] c #747373", +"}] c #717071", +"|] c #858685", +"1] c #7A7B7B", +"2] c #929393", +"3] c #7C7C7B", +"4] c #F8F8F8", +"5] c #F3F3F3", +"6] c #7A7B7A", +"7] c #929293", +"8] c #898A8A", +"9] c #898988", +"0] c #787879", +"a] c #797978", +"b] c #757675", +"c] c #89898A", +"d] c #848384", +"e] c #808180", +"f] c #757576", +"g] c #747475", +"h] c #C0BFC0", +"i] c #E6FBFA", +"j] c #83EFE8", +"k] c #41E6DC", +"l] c #18DDD1", +"m] c #20DACF", +"n] c #41DBD2", +"o] c #83E5E0", +"p] c #E6F9F8", +"q] c #888788", +"r] c #838382", +"s] c #747576", +"t] c #737473", +"u] c #A4F2EE", +"v] c #20E5DA", +"w] c #19E7DB", +"x] c #18E5D9", +"y] c #18E0D4", +"z] c #18DBD0", +"A] c #18D6CB", +"B] c #19D1C6", +"C] c #21CDC3", +"D] c #A4E8E4", +"E] c #79797A", +"F] c #7A7A79", +"G] c #767776", +"H] c #A4F1EC", +"I] c #18E1D6", +"J] c #18E7DA", +"K] c #18ECDF", +"L] c #18D7CC", +"M] c #18D2C7", +"N] c #18CCC2", +"O] c #18C7BC", +"P] c #A4E6E3", +"Q] c #6B6A6A", +"R] c #747574", +"S] c #E6FAF9", +"T] c #20DCD1", +"U] c #18E4D9", +"V] c #18E6DB", +"W] c #18DCD0", +"X] c #18D7CB", +"Y] c #19CCC2", +"Z] c #18C7BD", +"`] c #20C3BA", +" ^ c #E6F7F6", +".^ c #84E8E2", +"+^ c #19D9CE", +"@^ c #19E0D5", +"#^ c #18E1D5", +"$^ c #17DED1", +"%^ c #119D95", +"&^ c #119A93", +"*^ c #17D2C6", +"=^ c #18D0C5", +"-^ c #18CBC0", +";^ c #18C6BC", +">^ c #19C0B6", +",^ c #84DAD5", +"'^ c #41DAD0", +")^ c #19D5CA", +"!^ c #18D9CD", +"~^ c #17D9CE", +"{^ c #010F0E", +"]^ c #010E0D", +"^^ c #18CBBF", +"/^ c #18C9BE", +"(^ c #18C4BA", +"_^ c #19BFB5", +":^ c #41C6BE", +"<^ c #1FCFC4", +"[^ c #18D1C6", +"}^ c #18D5C9", +"|^ c #19D6CB", +"1^ c #119990", +"2^ c #119089", +"3^ c #18C1B7", +"4^ c #18BCB3", +"5^ c #1FBAB0", +"6^ c #20CBC1", +"7^ c #19CDC3", +"8^ c #18CFC5", +"9^ c #11958E", +"0^ c #118D86", +"a^ c #19C3B9", +"b^ c #18BBB1", +"c^ c #20B7AE", +"d^ c #8A898A", +"e^ c #41D0C8", +"f^ c #19C8BE", +"g^ c #19CAC0", +"h^ c #19CCC1", +"i^ c #18CABF", +"j^ c #010D0D", +"k^ c #17C0B6", +"l^ c #18BCB2", +"m^ c #19B8AD", +"n^ c #42C0B9", +"o^ c #83DDD9", +"p^ c #19C4BA", +"q^ c #18C5BC", +"r^ c #19C7BD", +"s^ c #17C3B9", +"t^ c #118C85", +"u^ c #118B84", +"v^ c #18BFB5", +"w^ c #19BEB5", +"x^ c #19BBB1", +"y^ c #19B8AE", +"z^ c #19B3AB", +"A^ c #83D6D1", +"B^ c #878786", +"C^ c #F6F6F6", +"D^ c #E6F8F6", +"E^ c #21C1B7", +"F^ c #18C2B8", +"G^ c #18C1B8", +"H^ c #19C0B7", +"I^ c #18BCB4", +"J^ c #18BAB1", +"K^ c #18B7AE", +"L^ c #18B4AB", +"M^ c #21B5AD", +"N^ c #E6F6F6", +"O^ c #EFEFEF", +"P^ c #838283", +"Q^ c #A4E3E0", +"R^ c #19BBB2", +"S^ c #19BCB3", +"T^ c #19BDB3", +"U^ c #18BAB0", +"V^ c #18B8AF", +"W^ c #18B5AC", +"X^ c #19B3A9", +"Y^ c #19B3AA", +"Z^ c #A4E1DD", +"`^ c #A4E2DE", +" / c #21B9B0", +"./ c #18B8AE", +"+/ c #19B7AE", +"@/ c #18B6AD", +"#/ c #19B4AC", +"$/ c #18B3AA", +"%/ c #84D6D1", +"&/ c #41C0B9", +"*/ c #20B5AC", +"=/ c #6E6F6F", +"-/ c #BEBEBD", +";/ c #6F706F", +">/ c #6D6D6C", +",/ c #5E5F5E", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" . . . ", +" + + + . . . . . . . ", +" + + + + + @ # # $ . . . . . . ", +" + + % + & # * = - ; > , ' . . . . . ", +" + + ) ! ~ { ] ^ / > ' ' ' ( _ : . . . . . . . . ", +" + + ) ) ) ) ) < [ } | 1 2 3 3 4 5 5 6 7 8 8 . . . . . ", +" + # ) ) ) ) ) 9 0 a b c 0 d e f 8 8 7 g 8 h i j k . . . . . . ", +" l # ) ) ) m n 0 o p q r s t u v w x { y z k k A A B C D f . . . . . . . ", +" # # ) ) E F 0 a G H I J K L v M N O P u Q R S T A U U f f f V V W X . . . . . . ", +" Y $ ) ) Z 9 0 ` H r J ...+.+.@.#.$.%.&.*.=.-.;.>.! ,.'.).!.~.{.~.].^.^./.(.. . . . . ", +" _.- ) 9 0 0 H p :.s t ..v M M N P %.&.*.<.[.}.}.|.1.2.3.4.5.6.7.8.9.^.(./.0.a.% b.. . . . . . . . ", +" - ; 9 n a c.H d.e. .u v f.N N P g.h.&.[.i.j.k.k.1.3.l.4.m.n.n.o.&.) p.,.q.r.s.t.u.v.w.x.y.y.z.. . . . . ", +" ; > A.0 a H q B.s ..v C.M D.N g.&.&.<.i.[.E.F.|.G.3.H.I.J.K.L.M.N.O.O.P.Q.R.S.T.U.^ V.y.y.W.z.1 1 V.. . . . . . ", +" X.> 0 a b H Y.s s L f.C.N P Z.h.&.&.`.[.j.k.1. +3.4.J.n.n.L.M..+++@+P.Q.R.#+$+%+&+i.*+=+-+;+>+,+V.'+)+)+)+!+. . . . . . . ", +" > ~+a c.{+B.e.u ]+^+/+(+P %.h._+:+:+[.k.k.<+[+4.4.I.}+n.|+M.1+O.O.2+Q.3+4+5+%+6+7+8+9+0+a+4.N b+c+d+)+e+f+g+^ ^ h+i+j+. . . . . . ", +" , ' c.H r s t u v M N N P k+_+l+[.[.m+k.k.[+3.4.n+I.}+o+M.M.p+q+r+Q.s+#+t+a+u+v+8+9+w+0+x+y+z+A+A+B+C+D+E+F+G+H+U.I+J+K+K+L+M+. . . . . . . ", +" ' ' :.r Y.s L v v N N N+g.&.O+<.[.-.P+k.1.3.4.Q+R+n.o+M.S+T+O.2+Q.Q.#+5+U+a+v+V+W+X+Y+Z+y+`+ @A+B+.@+@@@#@$@..%@&@*@=@-@L+;@>@>@,@'@)@!@. . . . . . ", +" ~@3 r s {@..v /+]@D.^@g.k+`.<.[.}./@k.2.(@l._@I.n.o+:@M.p+O.P.<@#+3+$+$+&+v+8+9+[@0+x+y+`+}@A+B+|@+@@@#@1@2@3@4@5@6@R.7@8@9@>@,@'@'@0@G+a@b@b@c@. . . . . ", +" 3 3 r s ..d@+.@.N D.g.g.`.e@=.;.E.k.2.3.H.f@}+J.g@o.h@i@O.@+j@Q.#+k@$+a+v+V+l@9+0+m@n@y+6@A+o@p@q@r@#@s@t@u@v@w@x@y@z@A@B@C@D@M E@F@G@H@b@I@b@=@J@K@L@. . . . . . ", +" 3 4 .]+M@M N N $.Z.&.N@`.[.O@>.k.1. +3.P@I.n.Q@:@M.N.R@2+P.S@4+T@$+a+U@V@W@X@w+0+y+y+Y@A+Z@|@q@`@#@ #$@.#4@w@w@x@+#@#B@##$#%#&#*#=#-#;#>#,#'#F+L@)#!#~#{#]#^#. /#/# ", +" (#5 ..v ^+M N P Z.g.l+`.<.}.}.k.1.1.3._#_@R+:#<#M.p+O.O.[#Q.s+}#$+a+v+8+8+|#0+Y+1#y+Y@-#2#.@q@@@3#4#$@3@u@5#6#x@+#7#B@C@8#$#9#0#a#b#c#c#d#b#w@.@u ,#q.{#{#e#f#g#/#/# ", +" 5 6 ..v ]@N $.P g.&.`.:+j.>./@|.3.3.Q+I.I.o+o+M.p+++O.[#Q.h#t+$+a+v+8+W@9+w+0+i#y+Y@ @j#B+.@@@k#s@l#3@3@m#n#6#x@7#o#p#$#%#%#*#=#=#q#r#s#t#u#v#w#x#x#y#z#A#B#C#f#/#/# ", +" D#6 M M E#P g.F#&.`.e@}.}.k.G#1.3.4.n+}+g@o+1+M.p+@+r+<@s+H#t+I#J#v+8+|#K#Y+i#y+L# @A+M#q@q@k# # #N#O#4@P#x@Q#R#p#C@S#T#9#*#0#=#U#c#V#d#W#X#v#Y#Z#`# $.$+$@$#$$$/#/# ", +" 5 6 M @.D.P g.%$&$:+;.m+*$1.=$3.4.-$J.o+g@M.N.R@O.P.S@Q.H#$+;$J#V@W+9+w+>$x+y+Y@,$A+B+q@'$)$#@!$3@v@4@w@6#y@+#@#p#$#~${$]$a#=#q#^$/$($t#_$w#x#`#:$y#<$[$}$|$1$$$/#/# ", +" 6 6 (+D.N+g.F#O+:+[.2$*$F.=$2.l.4.I.:#o+o+1+p+R@P.3$Q.#+$+;$J#v+4$5$|#Y+x+y+6$7$A+B+8$@@k##@l#N#3@4@w@9$y@0$a$b$c$d${$*#=#=#b#c#e$t#f$g$w#h$i$j$ $k$+$}$l$m$$$n$/#/# ", +" o$8 p$P g.&.q$<.[.}.k.G#1.3.r$n+R+n.Q@L.M.p+@+O.3$Q.#+H#$+U@v+4$s$9+t$n@u$`+Y@A+v$w$q@r@#@#@2@O#4@w@z#x$+#@#p#C@~$%#*#a#=#b#c#V#V#t#y$w#x#Z#Z# $.$z$[$A$B$C$D$E$/#/# ", +" 8 h P g.%$&.`.[.7@}.G#1.G.4.Q+I.n.n.o+p+p+F$P.<@S@#+a+9+8+v+G$H$I$K#x+J$L# @A+o@|@q@@@)$s@K$3@4@L$M$N$+#7#O$S#c$P$Q$*#a#R$q#c#t#($u#v#h$S$`#`#T$z$+$|$C$C$U$V$E$/#/# ", +" W$i ^@k+*.q$=.}.}.k.G#G.H._#f@X$Y$o+M.p+++2+P.<@#+8+y$[$Q$8$5$9+w+>$Z$y+Y@7$`$ %q@@@)$4#t@3@4@w@w@x@+#+#@#S#c$$#�#0#b#c#c#.%t#t#X#+%@%`# $T$T$[$|$|$#%$%%%] ] /#/# ", +" &%*%F#&.q$=%j.j.k.<+3.r$4._#-%g@|+M.1+O.O.P.<@s+H#u$;%V#@@o#y$K$y+x+>%Y@7$Z@.@q@@@#@#@$@3@v@P#z#N$,%a$o#S###{$&#*#=#'%c#r#V#)%y$!%w#`#`# $~%T$+$l${%C$]%^%/%] (%/#/# ", +" _%:%&.l+i.[.}.|.1.1.r$<%I.n.n.Y$M.S+p+[%[%j@#+H#t+0+}%4@g.|%s @#w#6#q@-#Z@w$q@@@k#s@$@t@O#m#w@6#y@+#@#C@1%T#%#*#2%3%4%s#V#t#g$y$w#+%`#`#5%T$T$|$A$C$;%6%/%7%(%8%/#/# ", +" 9%A *.:+[.}.*$|.1.3.-$-$I.:#Y$1+1+0%[%P.j@s+#+H#9+8$a%Y@4.b%c%d%e%f%V#y@B+|@r@@@#@$@2@w@6#P#x@+#+#7#S#C@$#%#g%=#b#h%c#V#d#t#y$w#w#Z#i%j%T$[$[$|$C$$%6%k%7%l%(%8%/#/# ", +" A A :+[.j.E.F.1.m%4.f@I.Q@L.<#M.T+O.n%o%s+#+$+a+7#p%q%r%D+0+s%t%u%v%w%W#k%]$4@u@$#t#w#f$b#x%$#@#@#C@y%d$z%*#=#2%q#c#r#)%A%y$w#x#B%`#k$5%+$@$|$C$;%6%k%C%D%E%F%G%/#/# ", +" A H%[.;.>.F.1.H.4.-$J.m.I%M.M.p+O.2+P.R.h#k@a+V@X#J%K%L%M%g.N%O%P%Q%R%S%T%U%C$C$;%B+$+A+=# $C$l$t#$#d$T#V%*#=#b#^$s#V#t#y$X#Y#W%`#X%T$Y%Z%|$B$`% &k%7%C%.&+&G%@&/#/# ", +" U U m+/@|.F.H.<%4.I.J.Q@o.M.N.O.n%P.Q.#+#&%+a+V+$&%&&&*&=&-&Q.;&>&,&'&)&!&~&+&p+{&]&^&/&(&_&:&g.=#<&Y%b#]$3%4%c#r#[&)%y$X#w#x#`#i%.$}&z$|${%|&6%k%1&2&3&+&4&5&G@/#/# ", +" U 6&>.<+1.2.<%<%J.n.K.:@M.T+++O.[#Q.#+$+$+a+V@K#p%7&8&5.9&0&$@a&b&c&d&e&f&g&A+M%1$b@h&>@G+J@g#e /#i&3#7%C$w#U#V#)%A%j&_$k&x#W% $l&T$m&l$B$;%;%k%7%7%l%+&<&n&G@o&/#/# ", +" p&D k.1.3.<%4.R+m.n.|+o.S+O.q+q&R.s+H#$+a+r&G$,$s&t&u&v&w&x&@#:&x a&y&z&A&B&I.C&$$$$D&f#f#^#q.=@a@f#E&`.k%7%`%V#F&y$G&Y#B%S$i%T$T$@$|$|$#%;% &7%l%H&+&I&J&K&L&o&/#/# ", +" p&f M&=$3.<%R+X$n.o+M.S+N&n%P.Q.#+#+5+a+u+4$8+q@O&P&Q&R&,.S&+#T&U&. *+V&W&X&Y&Z&`&`&G@G@G@F%F%F% *(%] b%P..*+*;%f$G&w#x#W%`# $z$T$m&|$C$;%U$@*C%l%+&+&n&n&#*o&`&/#/# ", +" f $*(@<%-$I.m.n.o+o.p+R@[%[#P.#+H#$+5+v+v+8+K#3#%*&***Q.=*-*4@@+1.3.8+3@#+&.;*e e e >*c%,*Z&Z&Z&'*'*F@)*0 '*!*7%T$+%@%`# $ $T$[$~*|$;%;%k%{*@*l%+&<&<&]*^*/*8.(*/#/# ", +" V V 3.4.n+-%n.:@|+S+_*O.n%Q.Q.#&$+;$J#7+W@H$:*1%<*[.[*x+h#$+w#y+*$N }*|*E@1*2*3*4*5*6*E+7*8*8*9*C&C&2*J.0*e 4*`.a*b*x#i%<$5%z$Z%|$$%;%;%{*2&D%+&}%4&c*#*/*d*`&y /#/# ", +" V W r$_#J.n.o+o+S+p+O.2+Q.#+h#$+a+%+4$8+W@K#2#;%o+e*-+D+f*g*[*,#h*i*j*k*j*l*/&j*m*n*(&(&(&l*l*l*o*o*&@x+,#p*4*x |$C$W% $.$z$|$q*B$#%;%%%7%l%.&+&<&J&r*s*t*a%y u*/#/# ", +" v*{.-$J.n.o+C+.+p+_*M.P.R.H#T@I#v+v+8+9+9+0+4#<&w*x*x*x*_&y*^&-+z*A*=&=&7.y*B*C*| D*E*E*E*2*2*2*{ E*F*M.]&j*/&z*S@G* $k$H*[$|$I*;%;%1&<*l%.&+&<&]*r*J*t*a%K*u*'*/#/# ", +" W ~.I.n.o+C+M.p+T+L*M*N*O*2$C+#&v+4$8+K#0+m@o@]%`./#P*Q*R*P*Q*Q*R*S*]&R*i*T*i*U*i*=&=&V*=&=&=&W*y*X*Y*w y*7.| E*Z*`*H*+*[$~*C$`%`%k%7%7%.&I& =]*#*.=t*a%+=@=u*#=/#/# ", +" ~.$=R+o+|+M.p+F$2+%=&=*===-=;=>=,=8+[@0+I$y+'=)=U$k.,#R*_&M%M%Q*!=~=1*{=]=^=,#/=(=_=:=<=[=]&]&]&R*}=B+|%|=|=i*9&1=`*C$}$|$A$2=6%k%{*C%3=+&4=5=r*#*t*6=7=`*@='*'*/#/# ", +" ].^.Q@o+h@N.++q+3$8=9=0=a=b=c=d=e=f=g=h=i=j=k=v+l=+&`+U&m=n=o=p=q=r=s=t=u=v=w=x=y=z=A=B=C={&D=E==+M.&.X*[=Q*_&F=$#`*|$m&C$C$;%k%<*2&G=3&H=I=r*#*t*J=a%K=L=M='*N=/#/# ", +" ^.^.o+o.p+F$O.<@<@O=P=Q=R=S=T=U=V=W=X=Y=Z=`= -.-+-@-#-$-%-&-*-=---;->-,-'-)-!-~-{-]-^-/-(-_-:-<-R&3@[-M%_&X*}-w@`*k%~*q*C$#%k%<*7%G=+&+&5=]*^*|-J=J=`*@=1-2-Z&3-/#/# ", +" 4-(.:@p+p+O.P.j@Q.#+;$5-6-7-8-9-0-a-b-c-d-e-f-g-h-i-j-k-l-m-n-o-p-q-r-s-t-u-v-w-x-y-z-A-B-C-D-E-F-3.s%_&1*}-$@a%7%Z%A$C$;%%%1&7%l%G-}%H-]*I-J*t*a%`*J-K-L-M-3-N-/#/# ", +" (.O-N.R@O.q+S@Q.#+t+%+6+P-Q-R-S-T-U-V-W-X-Y-Z-`- ;.;+;@;#;$;%;&;*;=;-;;;>;,;';);!;~;{;];^;/;(;_;:;t M%e*w*+#M-<*~*|$C$;%U$k%<*l%G=H=<&]*c*t*d*a%`*@=1-2-M-<;[;c%/#/# ", +" (.).p+O.2+j@R.};}#5+J#v+8+|;1;2;3;4;v+Y@A+5;J#6;7;8;9;0;a;b;c;d;e;f;g;h;i;j;k;l;m;n;o;p;q;r;s;t;u;v;w;! b#L-;%|$m&x;C$]%1&7%l%3&+&<&]*c*a*t*a%`*`*y;L-z;A;<;B;C;/#/# ", +" O-D;O.n%[#P.#+$+%+&+v+v+W@X+0+x+y+y+ @A+o@|@q@@@3#$@E;F;G;H;I;J;K;L;M;N;O;P;Q;R;S;T;U;V;W;X;Y;Z;`; >.>%%a%I*}$Z%B$;%;%k%7%l%G-+& =I=G*s*t*J=+>`*@=L-M-M-<;@>C;e /#/# ", +" % #>[%P.Q.#+#&;$u+v+8+9+9+$>x+i#Y@Y@ @ %p@q@%>&>l#2@.#4@*>=>->;>>>,>'>)>!>~>{>]>^>/>(>_>:><>[>}>|>1>2>3>4> $Z%B$C$U$%%<*l%l%I&<&5>G*6>t*7>`*8>9>L-2-0>a>@>b>e c>/#/# ", +" % b.P.o%h#H#$+a+6+G$W@9+$>x+x+`+Y@6@o@w$'$r@#@l#K$O#O#4@d>x@e>f>g>h>i>j>k>l>m>n>o>p>q>r>s>t>u>v>w>x>y>z>A>B>C>x#|&/%k%D%3&E%<&]*]*/*t*6=7=J-@=L-2-M-<;@>D>E>F>F@/#/# ", +" u.u.S@#+#&$+a+6+G$W@|#w+x+y+>%Y@7$j#w$q@@@@@#@$@3@v@m#w@x@z@G>H>I>J>K>L>M>N>O>P>Q>R>S>T>U>V>W>X>Y>Z>`> ,.,+,@,#,$,%,&,l%+&H=n&]*#*t*t*a%`**,y;2-M-<;=,-,;,>,,,,,/#/# ", +" u.w.s+t+;$a+a+7+8+9+0+>$x+'=Y@,$B+B+q@@@@@#@',N#O#),M$x@+#@#!,C@$#~,x%{,],^,/,(,_,:,<,[,},|,1,2,3,4,5,6,7,8,9,0,a,b,c,d,<&<&r*#*/*t*K*+>@=1-L-e,<;f,D>g,>,>,,,h,/#/# ", +" i,j,#&$+U+6+v+W+s$X+$>x+'=6$}@o@p@q@'$k#4#$@k,3@5#M$x@z@+#@#C@S#~$%#*#]$3%b#c#V#l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,t*a%`*`*K-L-M-<;a>J,;,>,K,L,M,N,/#/# ", +" j,9.H#a+u+v+8+l@9+0+n@Z$L# @O,B+.@'$%>#@$@N#I>4@),d>N$a$A@P,##$#V%*#0#2%b#Q,V#V#t#y$X#Y#S$v#5%T$T$T$R,S,T,U,V,W,X,Y,Z,`, '.'+'@'#'$'`*y;L-M-M-<;%'&'>,*'='-'C&;'/#/# ", +" >','a+&+v+8+l@K#$>x+y+Y@Y@j#v$.@@@@@''$@K$3@L$L$M$,%)'@#C@$#$#9#*#!'2%4%c#V#V#t#y$w#Y#x#`# $.$T$[$|$C$y#~'{']'^'/'('_':'<'['}'|'1'2'3'3&0><;4'D>;,g,5'='L,6';'7'/#/# ", +" 8'y.a+7+9'8+9+>$Z+J$`+Y@A+B+B+0'@@)$l#k,3@4@w@M$x@+#@#p#C@$#%#*#a'2%b#c#V#.%t#y$v#h$x#W%y#<$}&l$|$q*2=;%]%7%b'c'd'e'f'g'h'i'j'k'l'm'n'o'p'a>4';,g,q'r'-'s't'T T /#/# ", +" y.u'E@D+v'$+0+x+y+6$`+A+v$|@+@@@#@$@t@3@4@w@x@x@,%7#p#C@$#%#z%a#2%b#w's#V#W#y$x'k&y'`#y#.$T$+$|$z'I*6%%%7%3=l%}$A'B'C'D't*a%+&E'F'G'H'I'J'J,b>E>K,K,-'-'6'K'L'8*/#/# ", +" M'1 1 1 '@N'8*O'=$Y@A+A+B++@r@k#l#$@N#4@4@M$x$z@+#C@p#1%%#*#]$'%b#w'P'V#)%W#w#+%x#`# $l&T$[$l$q*C$;%%%Q'7%l%+& =<&R'S'T'a%a%U'@=H-V'W'X'Y';,E>>,r'Z's'`' ).)+)E+/#/# ", +" 1 V.V.'+)+)+@)f+f+i*S.-%#+Y@$@k,t@u@m#w@x@+#+#@#1%y%8#z%#)=#3%q#c#V#t#W#y$h$k&i$:$ $T$[$l$|$C$;%^%7%7%C%+&+&<&G*I-a*/*+>`*@=L-L-L-a%$)%);,q'r'&)*)6'=)-).)9@E+/#/# ", +" d+@)e+f+;)^ ^ i+U.y /#>)< p+4@w@x@+#G>@#C@$#~$%#*#=#,)w'e$V#V#j&y$w#x#x#j$ $T$+*~*|$C$;%^%<*7%l%+&4=<&]*^*6>t*a%`*')y;))p'!)@>@>;,~){)&)])`'^)/).)()_)4*/#/# ", +" &.^ i+U.H+K+:)<)b@D$[)1*! +#@#C@c$T#9#*#=#'%b#r#V#.%u#y$w#k&B%i% $T$H*~*|$C$I*6%7%7%3&.&+&<&J&c*a*6=7>+=@=@=})M-|)1)2)2)3)r'4)-'^)5).)6)7)8)_)4*/#/# ", +" *.P N $.P ^@K+9)<)L+L+>@>@0)'@'@,,a)j.v+1@a#=#b#c#V#b)A%y$w#@%x#j$y#T$T$[$|${%I*]%<*{*7%.&+&<&]*G*J*6>c)7=@=L-1-M-d)<;@>;,E>*'r'-'e)5)/).)6)f)g)4*h)/#/# ", +" `.i)i)P P g.F#&.&$`.:+[.7@>@j)'@)@k)a@l)b@g#=&|%F==%9#V#A%y$w#Y#i$i% $<$T$[$l$C$#%;%k%7%2&E%+&4=I=c*s*t*a%K=J-@=m)))e,a>@>;,g,>,r'*)6'K'K'n)()8)8)o)p)q)/#/# ", +" j.i.k+N+g.g.g.g.&.l+q$`.[.}.}.M&F.3.3.4.G+b@b@r)=@s)t)q.(%y { u)Y@w#B%`# $<$z$[$|$C$C$ &k%7%7%E%+&<&5=]*J*v)J=a%`*@=9>M-M-<;@>b>q'K,&)Z'6'6'w).)x)8)g)y)z)q)3*/#/# ", +" A)-.`._+*.O+f*`.f*`.e@[.[.-.}.}.F.1.3.<%4.I.-%o+L.h@=@B)L@L@C)q.{#D)^#C#s%E)K#4@_$|$z'$%;%k%k%D%l%+& =I=]*c*t*J=a%@=J-1-M-M-<;@>;,;,{)r'&)e)`'K'F)x)()y)o)G)z)H)o*/#/# ", +" 1.}.-.i.[.=.[.[.=%[.7@7@j.}.>.k.M&1.G.3.4.f@I.m.o+o.M.R@<#.*e*e*/#q.I)J)K)f#$$$$$$L)M)N)) 3@%%Q'O)E%+&}%n&^*^*t*6=a%`**,M=P)M-!)f,%'Q)>,R)-'S)6'T)F)7)U)8)o)G)z)z)V)V)/#/# ", +" -%3.G#M&k.k.}.}.}.}.2$2$/@}.P+*$|.<+1.G.3.<%Q+I.R+Q@o+o.h@_*[%W)/#/#/#/#/#X)Q*x*N'D&Y)D$E$E$Z)`) !C&.!}.@*+!5=]*I-t*@!a%K=8>#!z;M-0>@>%'q'$!K,Z'])%!&!.)n)f)8)*!z)z)z)z)V)=!/#/# ", +" o+I.4.m%[+ +=$G#|.-!|.k.M&|.F.k.<+-!(@G.H.4._#_#I.n.:#o+C+.+++2+P.;!/#/#/#/#/#B#R*i*y*D*{ E$>!(%,!'!F%5&G@G@`)j*F=S@w@`#7>`*K=@=L-z;<;)!-,%)Q)r'r'-'6'=)w).)()!!g)~!z)z)z)z){!L)/#/# ", +" p+M.:#I.n+4.4.]!H.3. +G.1. +2.=$G.3.(@3.r$4.4.I.I.m.n.o+o.M.^!++2+P.P.1*/#/#/#/#/#M%R*^&A*2*/!l*3*l*/&(!_!@&G@o&`&:!>,>,f!S)%!K'/).)()g!8)h!z)z)z)z)z)z)l*(&/#/# ", +" P.3.&+U+[#O.M.o+:#n.m.J.}+I.I.I.I._@_#I.I.I.n.g@n.o+o+<#C+M.p+T+O.P.P.P.P.P.N s%/#/#/#/#i!j!k!l!E*j*m!3*V)(&{ | =&x*[=n!/#/#/#o!Z&Z&Z&c%c%e F>p!,,q!p$3@@%M-K'.)n)f)8)*!z)z)z)z)z)z)z)l*(&/#/# ", +" P./=r!s!G O.8+5+j@p+C+K.Q@n.K.:#n.X$n.:#Q@o+o+o+o+M.M.M..+++r+P.P.P.P.P.P.P.M ! /#/#/#/#!=t!9&u!7.2*v!w!(&j*x!y!z!x*Q*!=/#/#/#/#/#/#A!P.[!c>e ,,M,B!C&;'T.C!D!g. $8)E!E!z)z)z)z)z)z)z)(&(&/#/# ", +" P.G%[;o*k!F!A!s!M v+8+$+n%p+M.o+|+o.M.M.M.M.M.S+0%p+++O.O.P.P.P.P.P.P.P.P.P.P.P.`.A!/#/#/#M%G!x*=&7.E*2*{ H!| y*^&I!J!K!/#/#/#/#/#/#1*P.P.P.P.P.B!;'9*8*8*9@E+q)=!8!|!v+6'z)z)z)z)z)z)(&/&/#/# ", +" P.c%E+E+E++)4*L!u!B#M!w*k.9+v+#+P.O.p+p+p+p+T+T+O.O.r+P.P.P.P.P.P.P.P.P.P.P.P.P.P.k.p.M!/#!=_&R*i*V*E&7.| 7.N!-+x*O!B#/#/#/#/#/#/#/#a&P.P.P.P.P.P.P.P.P!+)E+6*4*4*h)3*o*Q!Q*p.x+b##*z)/&/&/#/#P. ", +" P.R!p)3*R*/&S!T!U!w!j*V!W!j!X!Y&M.a+#+Q.P.P.n%P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.) D+M)Y!Z!`!x*i*T* ~-+^&x*R*_&X)/#/#/#/#/#/#e*! P.P.P.P.P.P.P.P.P.P.P.P.P.P..~.~o*L){!l*+~@~#~b%/&/&/#/#P.P.P.P.P. ", +" P.B!Q!o*%@!*$~;*%~T*j*{ &~*~=~| E*-~;~a p+P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.o+@.>~-*} ,~'~R*)~9&]&`!j!_&E=/#/#/#/#/#/=x 1=O.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.o*l*(&+~!~~~/&/&/&/#P.P.P.P.P.P.P.P.P.P.P. ", +" P.{~l*(&!*}-]~0*^~/~s![-(~_~=&E&=&=&=&y*:~E@F=..4.n.p+P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.2+n.*$<~s !*. a)C![~}~|~|~/#/#e*1*/#e*1~. 2~K.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.3~/&/&/&P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.O. ", +" P.4~/&/&}-*+5~F=F=s!6~5.V&S.7~-*8~9~0~9&R*R*a~b~X)c~d~s &.3.p+#+Q.Q.P.P.P.P.P.P.P.P.R@4.}.p$r e~}*i&V&/~f~g~N):&[*D+h~W)i~) P+J.P.P.O.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.$+0 j~ ", +" P.Q!L!L!*+k~l~/~/~}=m~2~n~o~p.p~w q~r~s~t~S&M)}~Y!}~i!_&,.:&< 9 M 3.Q.$+#+Q.P.P.P.P.P.P.P.M u~! W)v~5.^~w~[-h~-*S.)*x~0 ..F#M&Y$o+P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.O.P...i&y~z~ ", +" P.A~2*H!B~^~C~s!s!D~5.n~E~p.F~.*G~W)}*H~g*! m I~Q J~K~L~F!M~N~F!|%. S.O~v I.a+$+#+Q.P.P.P.P.P.P.P.p.m~J~P~Q~0*R~p.W)1=a S~*.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.M.g.W).*q~T~i& ", +" P.U~V~| !@W~s!-*-*X~V&d~S.< i&Y~s~Z~`~ {1=.{9 a H I +{M :.Y~. @{E@#{#{M!>)}-m~Y&N p+v+$+Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.Q.P.n.`.! W)N%Y&${q~w ", +" P.j*7.N!A*A*%{&{U&*{w*S.p.< .*w W)Y&={x~-{) A.;{H >{M@M P g.`.}.7@,{1!D+|%C!A!'{){}-s! {[.Q.a+#+Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.Q.n.f*H x~!{~{x~={}*{{]{ ", +" P.^{/{l!e*%{=&T.V*V*x*({;*h~_{q~W)}* {:{! ) 0 u~r .v ]@N+&.`.-.1.3.4.n.<#}.<{6~[{}{>)[*[-p=R&9 3.$+$+Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.Q.M.F#f.A.0 9 ) ! 1=|{ {N%Z~ ", +" P.0!-+-+%@!*1{!@2{!=x*x*c+`!Q*e*3{*+4{1=) n 0 H s .v (+^@&.=%}.G#3._@Q@M.O.P.P.P.o+5{S&6{:&7{=*8{]~< ..n.#+Q.Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.Q.O.l+%.B.s I H ,{F E ! 1=1=j~H~ ", +" P.7.i*9{!*}-]~0*^~/~-*. x&,.X)_&'~0{n!e*a{}-4{c s M@M D.%.&.=%P+1.l.J.o+S+O.P.P.P.P.S&a)b{D+c{d{. f~*+e{h~-*f{g.M.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.Q.P.;.q$$.N M L K r c a g{9 ) ! h{i{ ", +" P.=&]&]&}-*+5~F=F=s!6~5.V&S.7~5.j{a{/=/#X*k{e*s%1~!*l{v h.`.[.k. +4.J.o+p+P.P.P.P.P.S&m{:&;~n{P~8{p=*+J~0*o{s!/~F=S.! `.n.M.O.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.0 g.P.P.P.P.3.[.[.o+;.P N M v t I H u~I~9 ) e~p{ ", +" P.b~Q*Q**+k~l~/~/~}=m~2~n~o~p.p~w q~r~s~q{r{s{%~/=t{6.u{A!b%v{M [+4.Q@C+p+2+P.P.P.P.a)[*w{x{y{b%!*}-*+J~F=z{-*-*-*s!/~F=F=< 9 &.3.n.p+P.Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.N 0 P.P.Y$k.2.A{k.M.[.g.B{N M v ..K C{:.a 0 n D{ ", +" P.c+_&_&B~^~C~s!s!D~5.n~E~p.F~.*G~W)}*H~g*! m I~Z~E{F{G{H{.!&@M!|%I{.*N 0%P.P.P.P.P.J{K{L{x{[-. !*}-W~-&F=s!-*-*-*-*-*-*-*s!/~F=-*.*0 P }.I.O.Q.Q.Q.P.P.P.P.P.P.P.P.P.P.P.P.P.3.W)p+_#-%R+4.2.1.M.[.O+&.%.O N ^+O M.s r M{,{N{ ", +" P.R*i!X)O{B~s!-*-*X~V&d~S.< i&Y~s~Z~`~ {1=.{9 a H I +{M P{Q{W~!@C!A!|%R{x&N)< ..n.P.6{:&D+N)b%S{f~e{h~0*/~s!-*-*-*-*-*-*-*-*-*-*-*s!/~F=5.q~9 ..&.I.P.#+Q.Q.P.P.P.P.1.I.L.O.H#4$o+Y@|@!$4@G>$#C@y+>.i.`.&.g.#.N +#v+..s Y.r H ", +" P.[=!=T{!=!=N~M!U{V{w*S.p.< .*w W)Y&={x~-{) A.;{H >{M@M P g.`.}.}.{+< [ ~ '{W{O'S&[-b{L{N)[-%@!*X{D!0*F=/~Y{-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*s!/~/~V&q~1=H g.n.#+v P `.&$Z{K{I!e#6 `{ ]`{k F%s%.]n%$#u#x#T$<.O+g.o+l$&.>~v .. .s ", +" P.+]#{@]N~#]_~X*X*X*k{,#S&F=_{q~W)}* {:{! ) 0 u~r .v ]@N+&.`.-.1.3.4.n.<#2$Z w*b%J{:&D+N)d{. !**+h~0*F=s!}=-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*s!s!s!w*$]G e~U&%]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]'*x~a'~*;%`.*#A+P N N M S~]+ ", +" P.8+v+1.W)D+A!,#/=1**]=]e*s%s%,#O'F=4{1=) n 0 H s .v (+^@&.=%}.G#3._@Q@M.O.P.P.P.o+D+;~[-. !*v&*+k~F=/~s!-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-];]z{c%&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]_&-#l%+&2$F#g.P O N M ", +" P.#+8+9+#+_+w b%>],]=+e*s%%~&{'])];!!@!]~]c s M@M D.%.&.=%P+1.l.J.o+S+O.P.P.P.P.D+{]d{. !*v&W~0*F=/~]]-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*^].**+G+&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]o*O#]*a%f*&.g.<~P 8) ", +" Q.a+ v+p+M W)/]c{|%=+:=(],._]_];!,#~ V{`~v h.`.[.k. +4.J.o+p+P.P.P.P.P.:]y{P~w~p=<]h~V{/~[]}=-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*}]}]l*&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]|]2&K=[.:+f*A+z) ", +" 8+#+R+N 1=7~1]|%=+,.2]&@M!a&a&^=~ B~${N [+4.Q@C+p+2+P.P.P.P.[-3]. f~}-h~0*F=/~t~-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*F=x&4]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]5]q@L-}.x@>, ", +" $+P.4.g.H q~6]1~7],#a&1~R{8];*x&|!*+-]Z.0%P.P.P.P.P.b%. !*}-*+h~0*F=s!-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*}-R*&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]9 4)@>O. ", +" Q.O.I.F.N q~b%A!C!|%9]U&~ !@O'S&a)0]w M o+P.b%1]!*a]h~0*b]z{-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*[-8*&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]b%>,<+ ", +" P.O.M.o+g.w =*c]U&|]d]a)e]:&D+{]d{e{. !*}-*+0*f]g]s!-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*O{h]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]i]j]k]l]m]n]o]p]&]&]&]&]&]&]&]&]&]q]>, ", +" P.P.P.P.p+N < =*r]b{e]N):]d{%@S{}-v&W~0*s]t]}=-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*~ c%&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]u]v]w]x]y]z]A]B]C]D]&]&]&]&]&]&]&]&]&]!*K, z) ", +" P.Q.#+$+M. .Z*E]%@!*. F]v&*{G]F=[]t~-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*R{{ &]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]H]I]J]K]J]I]l]L]M]N]O]P]&]&]&]&]&]&]&]&]&]r S) z) ", +" P.#+$+a+f@H Q]/~t]R]f]T&s!-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*A!!=&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]S]T]y]U]V]U]y]W]X]B]Y]Z]`] ^&]&]&]&]&]&]&]&]&]@#o)z) ", +" P.Q.$+a+#+1.H q~< S.m~s!s!-*-*-*-*-*-*-*-*-*-*-*-*-*-*A!E@&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&].^+^l]@^#^$^%^&^*^=^-^;^>^,^&]&]&]&]&]&]&]&]&]E%x) ", +" P.#+a+a+P.k.s {q~p.m~/~s!-*-*-*-*-*-*-*-*-*-*-*A!M%&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]'^)^!^z]~^{^z)z)]^^^/^(^_^:^&]&]&]&]&]&]&]&]J$@> ", +" Q. $+M.}...) W)S.s!/~s!-*-*-*-*-*-*-*-*A!{ &]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]<^[^}^|^1^z)z)z)z)2^;^3^4^5^&]&]&]&]&]&]&]c @= ", +" Q.o+}.M 0 Y&V&F=/~s!-*-*-*-*-*|%V)&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]6^7^8^[^9^z)z)z)z)0^a^_^b^c^&]&]&]&]&]&]Q]K& ", +" #+P.n.k.&.H q~m~0*/~s!-*-*d^*@&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]e^f^g^h^i^]^z)z)j^k^_^l^m^n^&]&]&]&]&]i~O) ", +" Q.O.n.3.`.a .*s!F=/~x&1*&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]o^p^q^O]r^s^t^u^v^w^x^y^z^A^&]&]&]&]:#B$ ", +" P.O.M.n.`.9 p.B^|%C^&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]D^E^3^F^G^3^H^v^I^J^K^L^M^N^&]&]O^w@Z# ", +" P.P.O.O.M.!@P^E&&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]Q^R^S^T^S^R^U^V^W^X^Y^Z^&]&]m~b#t# ", +" P.P.d [*S&E$&]&]&]&]&]&]&]&]&]&]&]&]&]&]`^ /./+/@/#/$/Y^M^Z^&]Q*q@S#0# ", +" L{$~:&o*&]&]&]&]&]&]&]&]&]&]&]&]&]N^%/&/$/*/&/%/N^x 4$k,9$ ", +" . }-B~x&E$&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]/&0 H$z+B+ ", +" h~/~m~=/m~a)/#-/V 5] ]5]^.{~M!i&l+N.3$5+8+ ", +" ;/>/i&G~N%i{,/a .M g.[.F._@o+ ", +" ", +" ", +" ", +" "}; diff --git a/src/Mod/Ship/InitGui.py b/src/Mod/Ship/InitGui.py index 77298ad84..e735befa1 100644 --- a/src/Mod/Ship/InitGui.py +++ b/src/Mod/Ship/InitGui.py @@ -1,68 +1,68 @@ -#*************************************************************************** -#* * -#* Copyright (c) 2011, 2012 * -#* Jose Luis Cercos Pita * -#* * -#* This program is free software; you can redistribute it and/or modify * -#* it under the terms of the GNU Lesser General Public License (LGPL) * -#* as published by the Free Software Foundation; either version 2 of * -#* the License, or (at your option) any later version. * -#* for detail see the LICENCE text file. * -#* * -#* This program is distributed in the hope that it will be useful, * -#* but WITHOUT ANY WARRANTY; without even the implied warranty of * -#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * -#* GNU Library General Public License for more details. * -#* * -#* You should have received a copy of the GNU Library General Public * -#* License along with this program; if not, write to the Free Software * -#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * -#* USA * -#* * -#*************************************************************************** - -class ShipWorkbench ( Workbench ): - """ @brief Workbench of Ship design module. Here toolbars & icons are append. """ - from shipUtils import Paths, Translator - import ShipGui - - Icon = Paths.iconsPath() + "/Ico.png" - MenuText = str(Translator.translate("Ship design")) - ToolTip = str(Translator.translate("Ship design")) - - def Initialize(self): - from shipUtils import Translator - # ToolBar - list = ["Ship_LoadExample", "Ship_CreateShip", "Ship_OutlineDraw", "Ship_AreasCurve", "Ship_Hydrostatics"] - self.appendToolbar("Ship design",list) - list = ["Ship_Weights", "Ship_CreateTank", "Ship_GZ"] - self.appendToolbar("Weights",list) - # Simulation stuff only if pyOpenCL & numpy are present - hasOpenCL = True - hasNumpy = True - try: - import pyopencl - except ImportError: - hasOpenCL = False - msg = Translator.translate("pyOpenCL not installed, ship simulations disabled\n") - App.Console.PrintWarning(msg) - try: - import numpy - except ImportError: - hasNumpy = False - msg = Translator.translate("numpy not installed, ship simulations disabled\n") - App.Console.PrintWarning(msg) - if hasOpenCL and hasNumpy: - list = ["Ship_CreateSim", "Ship_RunSim", "Ship_StopSim"] - self.appendToolbar("Simulation",list) - - # Menu - list = ["Ship_LoadExample", "Ship_CreateShip", "Ship_OutlineDraw", "Ship_AreasCurve", "Ship_Hydrostatics"] - self.appendMenu("Ship design",list) - list = ["Ship_Weights", "Ship_CreateTank", "Ship_GZ"] - self.appendMenu("Weights",list) - if hasOpenCL and hasNumpy: - list = ["Ship_CreateSim", "Ship_RunSim", "Ship_StopSim"] - self.appendMenu("Simulation",list) - -Gui.addWorkbench(ShipWorkbench()) +#*************************************************************************** +#* * +#* Copyright (c) 2011, 2012 * +#* Jose Luis Cercos Pita * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU Lesser General Public License (LGPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#*************************************************************************** + +class ShipWorkbench ( Workbench ): + """ @brief Workbench of Ship design module. Here toolbars & icons are append. """ + from shipUtils import Paths, Translator + import ShipGui + + Icon = Paths.iconsPath() + "/Ico.png" + MenuText = str(Translator.translate("Ship design")) + ToolTip = str(Translator.translate("Ship design")) + + def Initialize(self): + from shipUtils import Translator + # ToolBar + list = ["Ship_LoadExample", "Ship_CreateShip", "Ship_OutlineDraw", "Ship_AreasCurve", "Ship_Hydrostatics"] + self.appendToolbar("Ship design",list) + list = ["Ship_Weights", "Ship_CreateTank", "Ship_GZ"] + self.appendToolbar("Weights",list) + # Simulation stuff only if pyOpenCL & numpy are present + hasOpenCL = True + hasNumpy = True + try: + import pyopencl + except ImportError: + hasOpenCL = False + msg = Translator.translate("pyOpenCL not installed, ship simulations disabled\n") + App.Console.PrintWarning(msg) + try: + import numpy + except ImportError: + hasNumpy = False + msg = Translator.translate("numpy not installed, ship simulations disabled\n") + App.Console.PrintWarning(msg) + if hasOpenCL and hasNumpy: + list = ["Ship_CreateSim", "Ship_RunSim", "Ship_StopSim", "Ship_TrackSim"] + self.appendToolbar("Simulation",list) + + # Menu + list = ["Ship_LoadExample", "Ship_CreateShip", "Ship_OutlineDraw", "Ship_AreasCurve", "Ship_Hydrostatics"] + self.appendMenu("Ship design",list) + list = ["Ship_Weights", "Ship_CreateTank", "Ship_GZ"] + self.appendMenu("Weights",list) + if hasOpenCL and hasNumpy: + list = ["Ship_CreateSim", "Ship_RunSim", "Ship_StopSim", "Ship_TrackSim"] + self.appendMenu("Simulation",list) + +Gui.addWorkbench(ShipWorkbench()) diff --git a/src/Mod/Ship/Makefile.am b/src/Mod/Ship/Makefile.am index 308131bba..2c643646c 100644 --- a/src/Mod/Ship/Makefile.am +++ b/src/Mod/Ship/Makefile.am @@ -46,6 +46,8 @@ nobase_data_DATA = \ Icons/SimRunIco.xpm \ Icons/SimStopIco.png \ Icons/SimStopIco.xpm \ + Icons/SimPostIco.png \ + Icons/SimPostIco.xpm \ Icons/Tank.png \ Icons/Tank.xcf \ Icons/Tank.xpm \ @@ -105,7 +107,10 @@ nobase_data_DATA = \ simRun/Sim/initialization.py \ simRun/Sim/matrixGen.py \ simRun/Sim/computeSources.py \ - simRun/Sim/fsEvolution.py + simRun/Sim/fsEvolution.py \ + simPost/__init__.py \ + simPost/TaskPanel.py \ + simPost/TaskPanel.ui CLEANFILES = $(BUILT_SOURCES) diff --git a/src/Mod/Ship/ShipGui.py b/src/Mod/Ship/ShipGui.py index 821bb01ac..4848a6609 100644 --- a/src/Mod/Ship/ShipGui.py +++ b/src/Mod/Ship/ShipGui.py @@ -1,169 +1,183 @@ -#*************************************************************************** -#* * -#* Copyright (c) 2011, 2012 * -#* Jose Luis Cercos Pita * -#* * -#* This program is free software; you can redistribute it and/or modify * -#* it under the terms of the GNU Lesser General Public License (LGPL) * -#* as published by the Free Software Foundation; either version 2 of * -#* the License, or (at your option) any later version. * -#* for detail see the LICENCE text file. * -#* * -#* This program is distributed in the hope that it will be useful, * -#* but WITHOUT ANY WARRANTY; without even the implied warranty of * -#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * -#* GNU Library General Public License for more details. * -#* * -#* You should have received a copy of the GNU Library General Public * -#* License along with this program; if not, write to the Free Software * -#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * -#* USA * -#* * -#*************************************************************************** - -from PyQt4 import QtCore, QtGui -import FreeCAD, FreeCADGui, os - -class LoadExample: - def Activated(self): - import shipLoadExample - shipLoadExample.load() - - def GetResources(self): - from shipUtils import Paths, Translator - IconPath = Paths.iconsPath() + "/LoadIco.png" - MenuText = str(Translator.translate('Load an example ship geometry')) - ToolTip = str(Translator.translate('Load an example ship geometry able to be converted into a ship.')) - return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} - -class CreateShip: - def Activated(self): - import shipCreateShip - shipCreateShip.load() - - def GetResources(self): - from shipUtils import Paths, Translator - IconPath = Paths.iconsPath() + "/Ico.png" - MenuText = str(Translator.translate('Create a new ship')) - ToolTip = str(Translator.translate('Create a new ship in order to work with them')) - return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} - -class OutlineDraw: - def Activated(self): - import shipOutlineDraw - shipOutlineDraw.load() - - def GetResources(self): - from shipUtils import Paths, Translator - IconPath = Paths.iconsPath() + "/OutlineDrawIco.png" - MenuText = str(Translator.translate('Outline draw')) - ToolTip = str(Translator.translate('Plot ship outline draw')) - return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} - -class AreasCurve: - def Activated(self): - import shipAreasCurve - shipAreasCurve.load() - - def GetResources(self): - from shipUtils import Paths, Translator - IconPath = Paths.iconsPath() + "/AreaCurveIco.png" - MenuText = str(Translator.translate('Areas curve')) - ToolTip = str(Translator.translate('Plot transversal areas curve')) - return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} - -class Hydrostatics: - def Activated(self): - import shipHydrostatics - shipHydrostatics.load() - - def GetResources(self): - from shipUtils import Paths, Translator - IconPath = Paths.iconsPath() + "/HydrostaticsIco.png" - MenuText = str(Translator.translate('Hydrostatics')) - ToolTip = str(Translator.translate('Plot ship hydrostatics')) - return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} - -class SetWeights: - def Activated(self): - import tankWeights - tankWeights.load() - - def GetResources(self): - from shipUtils import Paths, Translator - IconPath = Paths.iconsPath() + "/Weight.png" - MenuText = str(Translator.translate('Set ship weights')) - ToolTip = str(Translator.translate('Set ship weights, tanks must be added later')) - return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} - -class CreateTank: - def Activated(self): - import tankCreateTank - tankCreateTank.load() - - def GetResources(self): - from shipUtils import Paths, Translator - IconPath = Paths.iconsPath() + "/Tank.png" - MenuText = str(Translator.translate('Create a new tank')) - ToolTip = str(Translator.translate('Create a new ship tank')) - return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} - -class GZ: - def Activated(self): - import tankGZ - tankGZ.load() - - def GetResources(self): - from shipUtils import Paths, Translator - IconPath = Paths.iconsPath() + "/HydrostaticsIco.png" - MenuText = str(Translator.translate('GZ curve')) - ToolTip = str(Translator.translate('Transversal stability GZ curve computation')) - return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} - -class CreateSim: - def Activated(self): - import simCreate - simCreate.load() - - def GetResources(self): - from shipUtils import Paths, Translator - IconPath = Paths.iconsPath() + "/SimCreateIco.png" - MenuText = str(Translator.translate('Create a new simulation')) - ToolTip = str(Translator.translate('Create a new simulation in order to process later')) - return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} - -class RunSim: - def Activated(self): - import simRun - simRun.load() - - def GetResources(self): - from shipUtils import Paths, Translator - IconPath = Paths.iconsPath() + "/SimRunIco.png" - MenuText = str(Translator.translate('Run a simulation')) - ToolTip = str(Translator.translate('Run a simulation')) - return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} - -class StopSim: - def Activated(self): - import simRun - simRun.stop() - - def GetResources(self): - from shipUtils import Paths, Translator - IconPath = Paths.iconsPath() + "/SimStopIco.png" - MenuText = str(Translator.translate('Stop active simulation')) - ToolTip = str(Translator.translate('Stop active simulation')) - return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} - -FreeCADGui.addCommand('Ship_LoadExample', LoadExample()) -FreeCADGui.addCommand('Ship_CreateShip', CreateShip()) -FreeCADGui.addCommand('Ship_OutlineDraw', OutlineDraw()) -FreeCADGui.addCommand('Ship_AreasCurve', AreasCurve()) -FreeCADGui.addCommand('Ship_Hydrostatics', Hydrostatics()) -FreeCADGui.addCommand('Ship_Weights', SetWeights()) -FreeCADGui.addCommand('Ship_CreateTank', CreateTank()) -FreeCADGui.addCommand('Ship_GZ', GZ()) -FreeCADGui.addCommand('Ship_CreateSim', CreateSim()) -FreeCADGui.addCommand('Ship_RunSim', RunSim()) -FreeCADGui.addCommand('Ship_StopSim', StopSim()) +#*************************************************************************** +#* * +#* Copyright (c) 2011, 2012 * +#* Jose Luis Cercos Pita * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU Lesser General Public License (LGPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#*************************************************************************** + +from PyQt4 import QtCore, QtGui +import FreeCAD, FreeCADGui, os + +class LoadExample: + def Activated(self): + import shipLoadExample + shipLoadExample.load() + + def GetResources(self): + from shipUtils import Paths, Translator + IconPath = Paths.iconsPath() + "/LoadIco.png" + MenuText = str(Translator.translate('Load an example ship geometry')) + ToolTip = str(Translator.translate('Load an example ship geometry able to be converted into a ship.')) + return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} + +class CreateShip: + def Activated(self): + import shipCreateShip + shipCreateShip.load() + + def GetResources(self): + from shipUtils import Paths, Translator + IconPath = Paths.iconsPath() + "/Ico.png" + MenuText = str(Translator.translate('Create a new ship')) + ToolTip = str(Translator.translate('Create a new ship in order to work with them')) + return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} + +class OutlineDraw: + def Activated(self): + import shipOutlineDraw + shipOutlineDraw.load() + + def GetResources(self): + from shipUtils import Paths, Translator + IconPath = Paths.iconsPath() + "/OutlineDrawIco.png" + MenuText = str(Translator.translate('Outline draw')) + ToolTip = str(Translator.translate('Plot ship outline draw')) + return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} + +class AreasCurve: + def Activated(self): + import shipAreasCurve + shipAreasCurve.load() + + def GetResources(self): + from shipUtils import Paths, Translator + IconPath = Paths.iconsPath() + "/AreaCurveIco.png" + MenuText = str(Translator.translate('Areas curve')) + ToolTip = str(Translator.translate('Plot transversal areas curve')) + return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} + +class Hydrostatics: + def Activated(self): + import shipHydrostatics + shipHydrostatics.load() + + def GetResources(self): + from shipUtils import Paths, Translator + IconPath = Paths.iconsPath() + "/HydrostaticsIco.png" + MenuText = str(Translator.translate('Hydrostatics')) + ToolTip = str(Translator.translate('Plot ship hydrostatics')) + return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} + +class SetWeights: + def Activated(self): + import tankWeights + tankWeights.load() + + def GetResources(self): + from shipUtils import Paths, Translator + IconPath = Paths.iconsPath() + "/Weight.png" + MenuText = str(Translator.translate('Set ship weights')) + ToolTip = str(Translator.translate('Set ship weights, tanks must be added later')) + return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} + +class CreateTank: + def Activated(self): + import tankCreateTank + tankCreateTank.load() + + def GetResources(self): + from shipUtils import Paths, Translator + IconPath = Paths.iconsPath() + "/Tank.png" + MenuText = str(Translator.translate('Create a new tank')) + ToolTip = str(Translator.translate('Create a new ship tank')) + return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} + +class GZ: + def Activated(self): + import tankGZ + tankGZ.load() + + def GetResources(self): + from shipUtils import Paths, Translator + IconPath = Paths.iconsPath() + "/HydrostaticsIco.png" + MenuText = str(Translator.translate('GZ curve')) + ToolTip = str(Translator.translate('Transversal stability GZ curve computation')) + return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} + +class CreateSim: + def Activated(self): + import simCreate + simCreate.load() + + def GetResources(self): + from shipUtils import Paths, Translator + IconPath = Paths.iconsPath() + "/SimCreateIco.png" + MenuText = str(Translator.translate('Create a new simulation')) + ToolTip = str(Translator.translate('Create a new simulation in order to process later')) + return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} + +class RunSim: + def Activated(self): + import simRun + simRun.load() + + def GetResources(self): + from shipUtils import Paths, Translator + IconPath = Paths.iconsPath() + "/SimRunIco.png" + MenuText = str(Translator.translate('Run a simulation')) + ToolTip = str(Translator.translate('Run a simulation')) + return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} + +class StopSim: + def Activated(self): + import simRun + simRun.stop() + + def GetResources(self): + from shipUtils import Paths, Translator + IconPath = Paths.iconsPath() + "/SimStopIco.png" + MenuText = str(Translator.translate('Stop active simulation')) + ToolTip = str(Translator.translate('Stop active simulation')) + return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} + +class TrackSim: + def Activated(self): + import simPost + simPost.load() + + def GetResources(self): + from shipUtils import Paths, Translator + IconPath = Paths.iconsPath() + "/SimPostIco.png" + MenuText = str(Translator.translate('Track simulation')) + ToolTip = str(Translator.translate('Track simulation')) + return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} + + +FreeCADGui.addCommand('Ship_LoadExample', LoadExample()) +FreeCADGui.addCommand('Ship_CreateShip', CreateShip()) +FreeCADGui.addCommand('Ship_OutlineDraw', OutlineDraw()) +FreeCADGui.addCommand('Ship_AreasCurve', AreasCurve()) +FreeCADGui.addCommand('Ship_Hydrostatics', Hydrostatics()) +FreeCADGui.addCommand('Ship_Weights', SetWeights()) +FreeCADGui.addCommand('Ship_CreateTank', CreateTank()) +FreeCADGui.addCommand('Ship_GZ', GZ()) +FreeCADGui.addCommand('Ship_CreateSim', CreateSim()) +FreeCADGui.addCommand('Ship_RunSim', RunSim()) +FreeCADGui.addCommand('Ship_StopSim', StopSim()) +FreeCADGui.addCommand('Ship_TrackSim', TrackSim()) diff --git a/src/Mod/Ship/simPost/TaskPanel.py b/src/Mod/Ship/simPost/TaskPanel.py new file mode 100644 index 000000000..9c6ca53c3 --- /dev/null +++ b/src/Mod/Ship/simPost/TaskPanel.py @@ -0,0 +1,156 @@ +#*************************************************************************** +#* * +#* Copyright (c) 2011, 2012 * +#* Jose Luis Cercos Pita * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU Lesser General Public License (LGPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#*************************************************************************** + +# FreeCAD modules +import FreeCAD as App +import FreeCADGui as Gui +# Qt library +from PyQt4 import QtGui,QtCore +# pyOpenCL +import pyopencl as cl +# Module +import SimInstance +from shipUtils import Paths, Translator +from simRun import Simulation +Sim = Simulation.FreeCADShipSimulation +# from Simulation import FreeCADShipSimulation as Sim + +class TaskPanel: + def __init__(self): + self.ui = Paths.modulePath() + "/simPost/TaskPanel.ui" + + def accept(self): + return True + + def reject(self): + return True + + def clicked(self, index): + pass + + def open(self): + pass + + def needsFullSpace(self): + return True + + def isAllowedAlterSelection(self): + return False + + def isAllowedAlterView(self): + return True + + def isAllowedAlterDocument(self): + return False + + def helpRequested(self): + pass + + def setupUi(self): + mw = self.getMainWindow() + form = mw.findChild(QtGui.QWidget, "TaskPanel") + form.time = form.findChild(QtGui.QLabel, "TimeLabel") + form.first = form.findChild(QtGui.QPushButton, "First") + form.prev = form.findChild(QtGui.QPushButton, "Prev") + form.now = form.findChild(QtGui.QPushButton, "Now") + form.next = form.findChild(QtGui.QPushButton, "Next") + form.last = form.findChild(QtGui.QPushButton, "Last") + self.form = form + # Initial values + if self.initValues(): + return True + self.retranslateUi() + # Connect Signals and Slots + QtCore.QObject.connect(form.first, QtCore.SIGNAL("pressed()"), self.onFirst) + QtCore.QObject.connect(form.prev, QtCore.SIGNAL("pressed()"), self.onPrev) + QtCore.QObject.connect(form.now, QtCore.SIGNAL("pressed()"), self.onNow) + QtCore.QObject.connect(form.next, QtCore.SIGNAL("pressed()"), self.onNext) + QtCore.QObject.connect(form.last, QtCore.SIGNAL("pressed()"), self.onLast) + + def getMainWindow(self): + "returns the main window" + # using QtGui.qApp.activeWindow() isn't very reliable because if another + # widget than the mainwindow is active (e.g. a dialog) the wrong widget is + # returned + toplevel = QtGui.qApp.topLevelWidgets() + for i in toplevel: + if i.metaObject().className() == "Gui::MainWindow": + return i + raise Exception("No main window found") + + def initValues(self): + """ Set initial values for fields + """ + msg = Translator.translate("Ready to work\n") + App.Console.PrintMessage(msg) + return False + + def retranslateUi(self): + """ Set user interface locale strings. + """ + self.form.setWindowTitle(Translator.translate("Track simulation")) + self.form.findChild(QtGui.QPushButton, "Now").setText(Translator.translate("Now")) + + def onFirst(self): + """ Called when first frame button is pressed. + """ + + def onPrev(self): + """ Called when previous frame button is pressed. + """ + + def onNow(self): + """ Called when actual frame button is pressed. + """ + sim = Sim() + pos = sim.sim.FS_Position[:] + nx = sim.FS['Nx'] + ny = sim.FS['Ny'] + for i in range(0, nx): + for j in range(0, ny): + pos[i*ny+j].z = float(sim.FS['pos'][i,j][2]) + sim.sim.FS_Position = pos[:] + App.ActiveDocument.recompute() + self.form.time.setText("t = %g s" % (sim.t)) + + def onNext(self): + """ Called when next frame button is pressed. + """ + + def onLast(self): + """ Called when last frame button is pressed. + """ + +def createTask(): + try: + simulator = Sim() + except: + msg = Translator.translate("Can't find any active simulation!\n") + App.Console.PrintError(msg) + return + panel = TaskPanel() + Gui.Control.showDialog(panel) + if panel.setupUi(): + Gui.Control.closeDialog(panel) + return None + return panel diff --git a/src/Mod/Ship/simPost/TaskPanel.ui b/src/Mod/Ship/simPost/TaskPanel.ui new file mode 100644 index 000000000..dd43f4c9d --- /dev/null +++ b/src/Mod/Ship/simPost/TaskPanel.ui @@ -0,0 +1,81 @@ + + + TaskPanel + + + + 0 + 0 + 300 + 102 + + + + + 0 + 1 + + + + + 0 + 100 + + + + + 300 + 16777215 + + + + Track simulation + + + + + + |< + + + + + + + < + + + + + + + > + + + + + + + >| + + + + + + + Now + + + + + + + t = 0 s + + + + + + + + diff --git a/src/Mod/Ship/simPost/__init__.py b/src/Mod/Ship/simPost/__init__.py new file mode 100644 index 000000000..64c597c02 --- /dev/null +++ b/src/Mod/Ship/simPost/__init__.py @@ -0,0 +1,40 @@ +#*************************************************************************** +#* * +#* Copyright (c) 2011, 2012 * +#* Jose Luis Cercos Pita * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU Lesser General Public License (LGPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#*************************************************************************** + +# FreeCAD modules +import FreeCAD +import FreeCADGui + +# Qt libraries +from PyQt4 import QtGui,QtCore + +# Main object +import TaskPanel + +def load(): + """ Loads the tool """ + TaskPanel.createTask() + +def stop(): + """ Stops the simulation """ + TaskPanel.stopSimulation() diff --git a/src/Mod/Ship/simRun/Sim/fsEvolution.py b/src/Mod/Ship/simRun/Sim/fsEvolution.py index fd0be670a..a4d2e0161 100644 --- a/src/Mod/Ship/simRun/Sim/fsEvolution.py +++ b/src/Mod/Ship/simRun/Sim/fsEvolution.py @@ -57,24 +57,47 @@ class simFSEvolution: # Get value at pos using characteristics method gradVal = np.dot(np.abs(grad[i*ny+j]),grad[i*ny+j]) gradVal = np.copysign(np.sqrt(np.abs(gradVal)), gradVal) - self.fs['pos'][i,j][2] = self.fs['pos'][i,j][2] + \ - dt*np.linalg.norm(grad[i*ny+j]) - # Free surface points position - self.fs['pos'][i,j][2] = self.fs['pos'][i,j][2] + dt*grad[i*ny+j][2] + self.fs['pos'][i,j][2] = self.fs['pos'][i,j][2] + dt*gradVal # Velocity potential self.fs['velPot'][i,j] = self.fs['velPot'][i,j] + \ - dt*self.fs['accPot'][i,j] - \ - 0.5*dt*dt*grav*grad[i*ny+j][2] - # Acceleration potential - self.fs['accPot'][i,j] = self.fs['accPot'][i,j] - \ - dt*grav*grad[i*ny+j][2] - # Force boundary conditions + dt*self.fs['accPot'][i,j] + \ + 0.5*dt*dt*grav*self.fs['pos'][i,j][2] + # Acceleration potential. This is really hard to simulate + # accurately due to numerical diffusion of the function, so + # external waves, and diffracted waves will be computed + # in two different ways: + # * External waves will be considered analitically, + # substracting waves at t, and adding waves at t+dt + # * Second order waves will be computed substracting external + # waves to free surface height, and then imposing boundary + # condition. + pos = np.copy(self.fs['pos'][i,j]) + for w in waves['data']: + A = w[0] + T = w[1] + phase = w[2] + heading = np.pi*w[3]/180.0 + wl = 0.5 * grav / np.pi * T*T + k = 2.0*np.pi/wl + frec = 2.0*np.pi/T + l = pos[0]*np.cos(heading) + pos[1]*np.sin(heading) + # Substract external waves height in order to know second + # order waves free surface amplitude. + amp = A*np.sin(k*l - frec*(t+dt) + phase) + pos[2] = pos[2] - amp + # Compute analitic external waves acceleration potential + amp0 = grav*A*np.cos(k*l - frec*t + phase) + amp1 = grav*A*np.cos(k*l - frec*(t+dt) + phase) + self.fs['accPot'][i,j] = self.fs['accPot'][i,j] - amp0 + amp1 + # Now impose free surface boundary condition + # self.fs['accPot'][i,j] = self.fs['accPot'][i,j] + grav*pos[2] + # Impose values at beach (far free surface) for i in range(0,nx): for j in [0,ny-1]: - self.boundaryCondition(i,j, waves, dt, t) + self.beach(i,j, waves, dt, t) for j in range(0,ny): for i in [0,nx-1]: - self.boundaryCondition(i,j, waves, dt, t) + self.beach(i,j, waves, dt, t) def evaluateGradient(self): """ Evaluate potential gradients over free surface. @@ -84,10 +107,15 @@ class simFSEvolution: ny = self.fs['Ny'] nF = nx*ny grad = np.ndarray((nF,3), dtype=np.float32) + FF = open('gradient', 'w') for i in range(0,nx): for j in range(0,ny): pos = self.fs['pos'][i,j] grad[i*ny+j] = self.gradientphi(pos) + gradVal = np.dot(np.abs(grad[i*ny+j]),grad[i*ny+j]) + gradVal = np.copysign(np.sqrt(np.abs(gradVal)), gradVal) + FF.write('%g\t%g\n' % (pos[1], gradVal)) + FF.close() return grad def gradientphi(self, pos): @@ -112,9 +140,9 @@ class simFSEvolution: grad[2] = 0. return grad - def boundaryCondition(self, i,j, waves, dt, t): - """ Compute free surface at boundaries, assuming that only - incident wave can be taken into account. + def beach(self, i,j, waves, dt, t): + """ Compute far free surface where only + incident waves can be taken into account. @param i First free surface cell index. @param j Second free surface cell index. @param waves Waves instance. @@ -133,7 +161,6 @@ class simFSEvolution: wl = 0.5 * grav / np.pi * T*T k = 2.0*np.pi/wl frec = 2.0*np.pi/T - pos = self.fs['pos'][i,j] l = pos[0]*np.cos(heading) + pos[1]*np.sin(heading) amp = A*np.sin(k*l - frec*(t+dt) + phase) self.fs['pos'][i,j][2] = self.fs['pos'][i,j][2] + amp diff --git a/src/Mod/Ship/simRun/Sim/fsEvolution.pyc b/src/Mod/Ship/simRun/Sim/fsEvolution.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e8cf2ab57f85012e37793c30e682c17326e5a245 GIT binary patch literal 4941 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 literal 0 HcmV?d00001