Compare commits
1823 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| d2618caabc | |||
| 43b5aa4c8d | |||
| a6a1af9d75 | |||
| d895a90bdc | |||
| 6409f7f96b | |||
| 53fef8d4c4 | |||
| e1290101aa | |||
| 35721397bd | |||
| 6b74b5771a | |||
| 3f320e4d68 | |||
| 6e0c7a938c | |||
| 5e3030ee89 | |||
| 936e0be090 | |||
| 5598acb617 | |||
| 87b3f2e499 | |||
| e6c20adc5a | |||
| 12b8714aff | |||
| 61066fa608 | |||
| 7b7a331645 | |||
| d1578e4e1a | |||
| 1624320749 | |||
| c4ad58f2a8 | |||
| 1de8eba49e | |||
| 96d162c907 | |||
| 7837dfa3ac | |||
| 171857a7a8 | |||
| 7db595da31 | |||
| 8e472c736a | |||
| a991cb4470 | |||
| 4f78403463 | |||
| b39d562aea | |||
| c00533a150 | |||
| d4d801204f | |||
| 0ae31f3ecb | |||
| 1e8430d53d | |||
| 2c03bf4109 | |||
| eb784536af | |||
| fd973478dd | |||
| c7531d6c38 | |||
| bb39956057 | |||
| 979f549e99 | |||
| 0d4b71ef3c | |||
| 87dccc9f81 | |||
| db62d672d2 | |||
| 9ec4520c45 | |||
| 74f42a6241 | |||
| 9b16651607 | |||
| 56c78d44bf | |||
| dcb5d8f25c | |||
| 75b59d8fa4 | |||
| 1112d279c5 | |||
| 88ee288465 | |||
| 5202ec58c7 | |||
| dea793209d | |||
| 23298886a1 | |||
| d8480e4674 | |||
| 6fb731189c | |||
| 028b0bd3f3 | |||
| 3f6fa86190 | |||
| 300c066b68 | |||
| 867067aa9c | |||
| c5c65d366d | |||
| f53dafd496 | |||
| 3d0753c920 | |||
| 0224bc2f58 | |||
| 7de43e4aec | |||
| ab21124b71 | |||
| 8e0674b724 | |||
| 373c8d6441 | |||
| 7207de9bea | |||
| 8a1c97ea56 | |||
| 573f9841df | |||
| 86f520f76e | |||
| 9fbf45ebfc | |||
| e0f3e2900b | |||
| ce409e3699 | |||
| b907e74d37 | |||
| 886a3e937a | |||
| 299f424345 | |||
| 9adbdd803a | |||
| 782867f7b3 | |||
| 00ecafe94f | |||
| 228a9451f7 | |||
| 7b0531fdd1 | |||
| 4c2e3b9a59 | |||
| 87290e5248 | |||
| 50242fd54d | |||
| bc8a3c7bf3 | |||
| 1883370387 | |||
| e00c8e92cb | |||
| 42860b5d02 | |||
| f9cc914960 | |||
| d9ff4b851a | |||
| 82fe1a4972 | |||
| ac871702ce | |||
| f85bf48a4b | |||
| 660d4cc6c9 | |||
| c3759d870c | |||
| bfdad27893 | |||
| 8f5e6badc4 | |||
| 382c6bd201 | |||
| b04de0cada | |||
| d13355f7fe | |||
| c029dc398b | |||
| f179183dea | |||
| 90a3b97c2f | |||
| e2f5b2779f | |||
| afe2e27b0a | |||
| c5d3376c26 | |||
| cd56848326 | |||
| 7d4aed1099 | |||
| 9eb3916852 | |||
| fa817b7475 | |||
| b73474bda6 | |||
| f14db7c78c | |||
| 9daa1ab52a | |||
| 6d15131231 | |||
| 08e797551b | |||
| 082f3f9bb4 | |||
| 5659dd479e | |||
| 6ac8188f7f | |||
| 4f0aa1c07c | |||
| 87da6a8ad3 | |||
| b0357ce9a7 | |||
| b0694e0333 | |||
| da2f63bf31 | |||
| 20eedfd7dc | |||
| 6639c2d8db | |||
| d0749a3a52 | |||
| 8a4417ec46 | |||
| cba1e0bf91 | |||
| 5e3ab406e2 | |||
| 0dc587e2ef | |||
| dbbe628b8c | |||
| d2c47a74f2 | |||
| 31f7ecc16a | |||
| 230c5f8f5a | |||
| f1b0ffd3d7 | |||
| c012554daa | |||
| 8658d90663 | |||
| d213a26057 | |||
| f2b4c7a18b | |||
| 9ab7c18f46 | |||
| ab4cb862b0 | |||
| f04df9d79c | |||
| f93d297cb5 | |||
| bf3690d841 | |||
| 000f1122b1 | |||
| 44bafd1c8f | |||
| 36ae78ff94 | |||
| 55744d1e9a | |||
| ede208f3cb | |||
| 2a45987d46 | |||
| 8a0157069b | |||
| b7b972d8ad | |||
| 902e5ccee5 | |||
| f4ec1e729e | |||
| ee3f47ae51 | |||
| 8e88a621ba | |||
| e8083ae808 | |||
| fef50dd81e | |||
| 047749a8dc | |||
| 684bfad0af | |||
| 93eeb75c8f | |||
| e3c104d69e | |||
| 0ba6f998c8 | |||
| b6110bfcc3 | |||
| eb1f89d02e | |||
| 6c14eee672 | |||
| d0fc362ec6 | |||
| 01d4080e47 | |||
| fb9a4c2bfc | |||
| 424aa28e1f | |||
| 89849cdfa7 | |||
| edea2f9112 | |||
| 51eaeccf03 | |||
| 90029a4e1f | |||
| 90b820a52c | |||
| bd8998d1da | |||
| 6fe086ab6d | |||
| 0b48116119 | |||
| 9af4ea4014 | |||
| 215f35e237 | |||
| 32e962e8ee | |||
| a7e963bd6f | |||
| 379f04af80 | |||
| a7e32b03b9 | |||
| 0c2e03ae32 | |||
| 9b52e9dd89 | |||
| 6ee32b9912 | |||
| 3962464190 | |||
| c40f5917c1 | |||
| 8cca89ffbe | |||
| 3d40bd7e16 | |||
| b03f97b991 | |||
| 4428d69a63 | |||
| 961a8c2eca | |||
| 875c0f7062 | |||
| 1057d5a5be | |||
| 6b3742b76b | |||
| 89a138c09e | |||
| 0be3992913 | |||
| e04860d61b | |||
| 5adba827a6 | |||
| 61ba40aa7e | |||
| 43ae1cb98d | |||
| e87eea7abc | |||
| e697a2c41c | |||
| f2055f6c5d | |||
| d04ab1fe75 | |||
| 87eb527d67 | |||
| 33b8142b71 | |||
| 2afe1eab7a | |||
| 7e1aef2200 | |||
| ddff71c11b | |||
| aabd2a46d0 | |||
| 9bd7ba36ac | |||
| 761023f6bc | |||
| 336d1b23f9 | |||
| 1b7593f403 | |||
| 31461a9b53 | |||
| cc7a070b63 | |||
| 6e102489dd | |||
| 5817c99a4a | |||
| 723424df07 | |||
| d73d153665 | |||
| 6af09fedda | |||
| 1293c026f7 | |||
| 2cb6e59dfd | |||
| 80901c69cf | |||
| d0a69ac7b7 | |||
| 92baa531f3 | |||
| e5a94ff994 | |||
| 12e10fd43a | |||
| 282995eaee | |||
| 402f3c6f2c | |||
| cc5c038362 | |||
| 16437e5d45 | |||
| 8c37e70889 | |||
| 69c880e088 | |||
| 45155ff0af | |||
| ee80c7f674 | |||
| 62ea71fcae | |||
| e050133c07 | |||
| 8ab98ae60b | |||
| 6196921ae1 | |||
| 3f8343b341 | |||
| 4c6f7bc158 | |||
| bc69429a56 | |||
| 7d5a456344 | |||
| f193e389ec | |||
| c0832a0342 | |||
| 7377cb541f | |||
| c58bd957a5 | |||
| 2134e7de04 | |||
| e8dc730526 | |||
| 8753bef2fa | |||
| e89db97dd4 | |||
| d15f0e91e2 | |||
| 2c2e506edf | |||
| c99243ffc5 | |||
| 790e0ef36c | |||
| 1b5a1b74fa | |||
| d68c727b0f | |||
| 76a604bc35 | |||
| efb34166ea | |||
| 096dd7a09b | |||
| df6cacf64b | |||
| d1a0bfcc39 | |||
| fdf9898eb2 | |||
| 8ea0f7ae5b | |||
| 31389c4063 | |||
| 69a44d5f13 | |||
| 4c777e92f3 | |||
| 09182d814d | |||
| cc6ca277e3 | |||
| ca138b8e92 | |||
| 241061025b | |||
| e4315f0664 | |||
| 2fd2c1dc03 | |||
| 19b344806d | |||
| 5e474cf87f | |||
| ebc2a4269e | |||
| 744dd80eaf | |||
| 8d7054a592 | |||
| f5b0c19830 | |||
| 8fda1d2264 | |||
| 544726e4f3 | |||
| d34df18f2c | |||
| 190ed58568 | |||
| 790a1f8563 | |||
| 1ce21605a5 | |||
| 6dda8d4a7e | |||
| f9d74ccb70 | |||
| bd182aad9f | |||
| be012cac94 | |||
| 4a7f92fb4f | |||
| b1ed22f7ed | |||
| 1760a28ea7 | |||
| 17b1c04f45 | |||
| 234c4a3814 | |||
| bd0c713691 | |||
| d786ac91df | |||
| cb52b9d0fe | |||
| ee1b8e2a80 | |||
| 862d5a4bf2 | |||
| a82bc9d1a2 | |||
| 3b246ca483 | |||
| 2ee99f74c4 | |||
| 1fa882db53 | |||
| 9dd6b6a8ee | |||
| 1ef311cd01 | |||
| c9199ea80a | |||
| 4076f99332 | |||
| 71a40b0d09 | |||
| eaea2ea12b | |||
| ee749988f1 | |||
| 28cd996394 | |||
| 27113348b9 | |||
| 67c0cd2205 | |||
| 99535864e4 | |||
| 618a5f0e75 | |||
| fff2f017d8 | |||
| 9076bfc9f7 | |||
| ec7ee344b5 | |||
| b65c7df0a3 | |||
| d7f569ae78 | |||
| a8f4791395 | |||
| 5242fff9d7 | |||
| c328d6b118 | |||
| 1f3f11ca0d | |||
| f2003d8dda | |||
| 50743cf3ba | |||
| 4d7db7171c | |||
| 92ccc2018e | |||
| bbc0e8eb74 | |||
| 99e8814028 | |||
| 861ea0592e | |||
| f4114d22c5 | |||
| cc901496e9 | |||
| c5ca075e24 | |||
| b0c1b97ff3 | |||
| aa6a5ab671 | |||
| fef47b0b67 | |||
| 7739cfef2f | |||
| 0544134ae3 | |||
| 07e4fc31b4 | |||
| cbec733deb | |||
| 20c86db71f | |||
| 64122ae057 | |||
| 9374d642bf | |||
| ba16d9e763 | |||
| 58280f749a | |||
| 34e6314a3e | |||
| 8c2d3d12fc | |||
| e44fa93776 | |||
| e135b7f669 | |||
| 6c3534bd35 | |||
| 32db0d469a | |||
| b7747bc224 | |||
| 89637b89b8 | |||
| b7447ff05e | |||
| 36f1147da1 | |||
| 46eabaa44e | |||
| fb1f4ad8e5 | |||
| 3841b0ac3a | |||
| 032ef3a74c | |||
| 5a0869f2e2 | |||
| d51b8a8744 | |||
| 180c72ef83 | |||
| d81a351c73 | |||
| 07781d34be | |||
| 28d702f6a9 | |||
| b5aadfc3f9 | |||
| eb041ee2d3 | |||
| 408fb4f159 | |||
| e29a829a70 | |||
| 9c4e02379a | |||
| aff3787b34 | |||
| af5a695c85 | |||
| 073eb024fe | |||
| 84392f1723 | |||
| fe6c901a9f | |||
| 26bd37e086 | |||
| 97f914ccb3 | |||
| 68961c82fd | |||
| 0f5aa0630a | |||
| 9d6ec5a265 | |||
| 6dc79cf193 | |||
| 9e4fe8b410 | |||
| 4360860bee | |||
| 8a44751b61 | |||
| a73216fc95 | |||
| caf5fc8d8d | |||
| 44d31a1897 | |||
| 00847a8aed | |||
| ee8901d9dd | |||
| 27a6f8afd6 | |||
| 335bf72060 | |||
| 5eb38ec232 | |||
| 5c247857d3 | |||
| a56d3235e3 | |||
| 820153c7d4 | |||
| bc8ea55092 | |||
| ccbc4882fd | |||
| 0a11144cad | |||
| 770d72c538 | |||
| cec229bf83 | |||
| ce94880a52 | |||
| 10352b1df5 | |||
| 3f1da8b2c0 | |||
| 649a7fa305 | |||
| 628c069a39 | |||
| 332a7b4bd9 | |||
| 58de62aacc | |||
| 1367d33cd8 | |||
| b66d6e2d8c | |||
| e513380a85 | |||
| db74de74f5 | |||
| 0bac4a1e07 | |||
| 0baa580b8d | |||
| fbc3d63c24 | |||
| 978b548c64 | |||
| ef865aab68 | |||
| 322c71d2cc | |||
| 81c674387e | |||
| 08c54e8acf | |||
| f7d85691c2 | |||
| 4fad477d1a | |||
| 9d86345ea5 | |||
| 1f9ee2e45e | |||
| 26f6e259e6 | |||
| 145a3f20de | |||
| 2b25beb074 | |||
| 8552a6e29d | |||
| fd6ab6003d | |||
| 929a849b99 | |||
| 781cc00aca | |||
| bb9ee216e8 | |||
| 83f5bd60c1 | |||
| 3b423cb12d | |||
| 4de43d7c5f | |||
| 1fc0113b06 | |||
| cd517f67db | |||
| 876bf75d89 | |||
| 4536e27426 | |||
| b4d0cd7467 | |||
| 60eb4b006d | |||
| 26b7bdc35c | |||
| 2810f5a5fe | |||
| dea9dd2361 | |||
| 64f8e0b8e1 | |||
| a3f2980d80 | |||
| 179ada1c70 | |||
| 39993e27e4 | |||
| 00adc67d2a | |||
| 36aca68e40 | |||
| b1489cbe40 | |||
| 92ac2ac47e | |||
| a287f89304 | |||
| 98eb5e75e5 | |||
| 515f5fbe5e | |||
| 0c5d9fa20c | |||
| ee6cd0883d | |||
| ecbe947bc6 | |||
| 9929919b59 | |||
| aaab12d37e | |||
| c8c05cb4ee | |||
| 7432d4de29 | |||
| 7f18b883ab | |||
| e7b7e0e687 | |||
| 8742dae4a4 | |||
| 142306e238 | |||
| 66f5b3d3cc | |||
| 0f1f0f92f1 | |||
| 1ec4986422 | |||
| 91c3f3bc83 | |||
| 8e1fe5d766 | |||
| e9ebdf2583 | |||
| 3bddb98de9 | |||
| 94338e072f | |||
| 04b4f236be | |||
| 28511cf4fe | |||
| 0390fbf978 | |||
| ad5d10a8ba | |||
| f280c7374c | |||
| 387d0c4e01 | |||
| 70b8e6b6e2 | |||
| 2fc698846b | |||
| a23dcccce5 | |||
| 5c98951954 | |||
| 96f8f6066d | |||
| d8f87cca3c | |||
| 0eae829b11 | |||
| 6231ce5959 | |||
| 57b30ad254 | |||
| 5e8c38d293 | |||
| da6f4024ff | |||
| 43afa81a8c | |||
| 5560cb54e2 | |||
| 4e94d8e793 | |||
| 2043001b0a | |||
| ea04a4af7d | |||
| b750414561 | |||
| e8acd2919b | |||
| 8ccf0320b4 | |||
| 94dccc9128 | |||
| da51dbe1e0 | |||
| 29613e2974 | |||
| 38a5e9af4b | |||
| dc9122c5b6 | |||
| c4c58e1279 | |||
| 8bafc54cdc | |||
| 7080828fe2 | |||
| 26f2c04f13 | |||
| 82cc923356 | |||
| a9a009029f | |||
| b454998677 | |||
| 3f38a6d89a | |||
| 001723e077 | |||
| 568ae2ec7e | |||
| 26a3029a88 | |||
| c9be8bfdd4 | |||
| a8a640811b | |||
| 6b0980d964 | |||
| 172bbc8f9c | |||
| 0f885e7f31 | |||
| d45008a847 | |||
| 7a8e1fc6b4 | |||
| 7a5f5cb009 | |||
| 7a1718d0f5 | |||
| 2579fd524d | |||
| 733e5a55e3 | |||
| c9f9c4ddbc | |||
| c91b4ffbc4 | |||
| a43dd351df | |||
| 0ef043f0f8 | |||
| 1a4c6781d8 | |||
| 806dd7d8ec | |||
| e1ecd301a7 | |||
| ac1386a5a2 | |||
| 135149e2d3 | |||
| c55e063745 | |||
| 1b1216e53d | |||
| a6c8beb73b | |||
| 6fa4f1e6ac | |||
| 32784ea191 | |||
| bce9f685ea | |||
| f78497bf4f | |||
| e8f33ac903 | |||
| b5bb56426a | |||
| 2554575656 | |||
| cf86e18f5c | |||
| 2e6969fe96 | |||
| 6fcd9eb8a6 | |||
| 69b7c2a1b6 | |||
| 2be09ba9e2 | |||
| 8430508272 | |||
| 7e2779784b | |||
| af5a9a8de9 | |||
| e5dae4b149 | |||
| d00c83cde9 | |||
| cb49ca5ae2 | |||
| b2a76062c7 | |||
| ea990230ca | |||
| 91674347b5 | |||
| 19845828ef | |||
| 78e41187b3 | |||
| 226b3d64be | |||
| fc8e0bfb75 | |||
| 4ac7dd5845 | |||
| 0e903dba5b | |||
| 000ec33af2 | |||
| 9634fa5c07 | |||
| a26e59d8ed | |||
| d55ab920d2 | |||
| e9e4ed4230 | |||
| 63985f67cf | |||
| f8f35a8cd0 | |||
| 191cb40e79 | |||
| f50f31e5a3 | |||
| 218fb338ab | |||
| 625e8b0680 | |||
| bb6fffa5a9 | |||
| f92cfcaee6 | |||
| 3a9f3f89c1 | |||
| 4a9681d5c7 | |||
| 6b500d606c | |||
| 3b1ddd952f | |||
| 3c5c795c1f | |||
| 2080739f76 | |||
| 6c2c647703 | |||
| ec497d5d9a | |||
| 8ddbf84cbb | |||
| 81271ad41a | |||
| 24f95c66db | |||
| 5c0b735d82 | |||
| d3bf8c6b51 | |||
| 0cd108b55d | |||
| 3ff70deab0 | |||
| 61b4f8a9eb | |||
| d8ba7b3af8 | |||
| 790e4c6af7 | |||
| b70adc5f99 | |||
| 00ee6c7b3b | |||
| dd8601cbf8 | |||
| 10dd5023e2 | |||
| bb3f3d063f | |||
| 4868af8b62 | |||
| ced0d8add9 | |||
| d7d7b16334 | |||
| f24048e8da | |||
| 0a55a2b672 | |||
| 1944fea398 | |||
| 3815087b29 | |||
| d3f28fb71c | |||
| ad4a72ff11 | |||
| 062fc2d200 | |||
| 74c64958f4 | |||
| 97ccebf355 | |||
| c597e75b73 | |||
| a20c89288f | |||
| 1f3b3d681c | |||
| fb57b54be8 | |||
| 5d704c9692 | |||
| a96c5379b3 | |||
| e4bac0d91a | |||
| 5da0a971d5 | |||
| 9af45c05bb | |||
| e799d7a06c | |||
| fde71bdf33 | |||
| 16a28348b4 | |||
| 520be6f67b | |||
| 6cf04e6820 | |||
| 188ea1f59f | |||
| 71a1ad6ff5 | |||
| c4dc992c03 | |||
| 4eadf2ef47 | |||
| bee0d69289 | |||
| 01ebf03110 | |||
| 820e6e5e16 | |||
| 5b9057823a | |||
| 70dc51d1f9 | |||
| 2cad7a52ad | |||
| 088832b8f6 | |||
| 35e1c65996 | |||
| e1fcd31381 | |||
| e3cb0aa36f | |||
| b1144a864f | |||
| 3412e82799 | |||
| d23724f59e | |||
| 65b7f23d46 | |||
| d5fff4a6da | |||
| e07590f930 | |||
| 877dd3f79a | |||
| 53ec1efc1d | |||
| e5740af069 | |||
| 297a54fa3e | |||
| 3e4a79d063 | |||
| b1c710a214 | |||
| cca97586a9 | |||
| 07cd3bcb56 | |||
| 80999ba0a4 | |||
| 0d85444062 | |||
| 0d41a7a523 | |||
| ccd2ebefd3 | |||
| 4cbbce3aa6 | |||
| 66453e3d92 | |||
| 42709330e0 | |||
| 20eaf66d5b | |||
| b525e3be55 | |||
| 5fda7bf32f | |||
| d400a25075 | |||
| ef5693080f | |||
| 70769d5d46 | |||
| 0de48234bc | |||
| 477069c063 | |||
| 6bf3d7cdc3 | |||
| 05e3ae645d | |||
| 664692b2e6 | |||
| 850c0a8473 | |||
| 7bb04c8f63 | |||
| e04b6a04a6 | |||
| b739b2b075 | |||
| 204d085b64 | |||
| 9ebb4afacc | |||
| 150cfebb59 | |||
| ca4a3651c0 | |||
| 74a57d4ea8 | |||
| 00f0e27851 | |||
| db09deedf7 | |||
| 90f2e67ed8 | |||
| 52ec277592 | |||
| 84239542b7 | |||
| 63e987edd0 | |||
| 752e4a4a58 | |||
| d12a45923b | |||
| 6d088b4365 | |||
| ccc0fb06c9 | |||
| 329eae1f74 | |||
| 826d5a8954 | |||
| 18374e53a0 | |||
| a47d36e399 | |||
| 2e5bd2fad1 | |||
| 39086ffb3f | |||
| 41d254fb48 | |||
| 23981977f3 | |||
| 4e4776c370 | |||
| a97c9a1b96 | |||
| e262b32198 | |||
| f4d6430eb0 | |||
| e18404eea1 | |||
| fd1cd36f63 | |||
| 92e0eb628c | |||
| f37812f898 | |||
| 0dd413a711 | |||
| cc0524a21a | |||
| 8175163296 | |||
| c32f56ffaa | |||
| 86851d39a4 | |||
| 9fd79dfa91 | |||
| 8e09679437 | |||
| 29bf40dc96 | |||
| 27ee815742 | |||
| c650c378c0 | |||
| e0303a4558 | |||
| 1702ab3a00 | |||
| 9c60e618c0 | |||
| 51291b0965 | |||
| 45fc0125a7 | |||
| d0724de1de | |||
| bf56b2b35d | |||
| 675f8d4a0b | |||
| cd18ff1762 | |||
| ef2c94069f | |||
| ad4bf38e7a | |||
| 7e0a44e4af | |||
| 30e1aaec26 | |||
| 3c037a3c31 | |||
| 4865a68fa0 | |||
| 5a5b90984a | |||
| e90fc3a9b2 | |||
| 5874ac0f6f | |||
| aae87178a7 | |||
| 0cbe14c12e | |||
| 50682ef2dc | |||
| ccd0ab78f3 | |||
| cc46ee0ec9 | |||
| a6232e2c92 | |||
| f824c83842 | |||
| 00bdc80087 | |||
| 8cb20938f4 | |||
| 019d1364d3 | |||
| db5d90ce9f | |||
| 8d61cd0e5b | |||
| 372ce6595a | |||
| 2b9297020b | |||
| 21d1402c03 | |||
| 25e7abec0d | |||
| 25b65b2e3b | |||
| 8421cacef4 | |||
| 7d0ec1a138 | |||
| da9e6b1679 | |||
| 3e8bd5592b | |||
| f227383341 | |||
| 1cf52baaa0 | |||
| 31a693cb8d | |||
| f83a200e5e | |||
| b992feeaf6 | |||
| 9a8baa00f2 | |||
| ecc6a69f4f | |||
| 6c614e2996 | |||
| 155ea57c36 | |||
| cefd3cd5e2 | |||
| df93154dee | |||
| 1477210b67 | |||
| 76e21c28a4 | |||
| ea5a03f93c | |||
| 155a53dc57 | |||
| 53e98dede8 | |||
| 42d7bf6c8e | |||
| 8287775bac | |||
| 22c85e78ff | |||
| 1be0b66d53 | |||
| c8ed3280f3 | |||
| 742e1a7e44 | |||
| 93a8e7b395 | |||
| 2a2a530c62 | |||
| a88d067abf | |||
| 9d40727b4c | |||
| ccd9500bfb | |||
| 5fc382df85 | |||
| 8306f4c65c | |||
| 2ab86e7400 | |||
| 9a131706d7 | |||
| 1ae31edb9a | |||
| 46f106b6cd | |||
| c1fbc8ef8b | |||
| 88e50d9da4 | |||
| 248343c0a3 | |||
| c1f6576f07 | |||
| 9f3cea6755 | |||
| 7ff61616dc | |||
| fa869a9690 | |||
| fa73d54456 | |||
| 02b5b477da | |||
| e4f72171f5 | |||
| 35bec26ff3 | |||
| 807ac4e3e5 | |||
| 43eaba0bb0 | |||
| 9191f28aeb | |||
| a9fbce5c72 | |||
| 3313b34a01 | |||
| 7a5386a1a1 | |||
| 4343eb5b8d | |||
| af433f8031 | |||
| facde96ec2 | |||
| cd664e8b9b | |||
| 348b7de4ab | |||
| 0e4bb20e3c | |||
| 74540cb49a | |||
| 41c5e68e6c | |||
| e37372f45f | |||
| 72e845b2f1 | |||
| 55526a100a | |||
| ee2ed120bd | |||
| 0564cbc70c | |||
| 77945c4eb8 | |||
| 8cd77e78f9 | |||
| 13972e0678 | |||
| e6df9921b1 | |||
| f77c10ac96 | |||
| af9ee9f4e7 | |||
| a379e5d67c | |||
| 34f7cbc6f9 | |||
| 3217bb59a7 | |||
| 8289899df8 | |||
| 0a34f97624 | |||
| 49bca46a5c | |||
| fdc8a1345d | |||
| e4d09b96bc | |||
| 89f590a1fc | |||
| fa0a51411a | |||
| 330b8bff30 | |||
| e1addadb4d | |||
| 6a54a198ca | |||
| 95213372fe | |||
| 226b877ab9 | |||
| 001afa4960 | |||
| e206a1b4c5 | |||
| 4d465ec8a0 | |||
| 00fafe7d58 | |||
| 93a5b4a07f | |||
| 42c2399af7 | |||
| 3af054c702 | |||
| 6582cea862 | |||
| f2ebfdf34e | |||
| da757938e6 | |||
| eed97c549d | |||
| d958f92ccc | |||
| 410644343d | |||
| 02bacd668e | |||
| 7ceb3d11f2 | |||
| 0bdf5bac72 | |||
| 619125f9ab | |||
| 638decafae | |||
| 85562b45e8 | |||
| eacc8b93f0 | |||
| 8fb8b4335a | |||
| 78a8be0e8e | |||
| 5d5a50dde9 | |||
| 2bea1c677c | |||
| a641ebb344 | |||
| 72690e769c | |||
| 017fe9c4d4 | |||
| 03ffc93786 | |||
| 9ededca9d7 | |||
| 2f3c5e7a1e | |||
| 273244a196 | |||
| 8fd0c322cd | |||
| ac64da651d | |||
| 7b8c89149b | |||
| 81f9f743d3 | |||
| 129f93b8d3 | |||
| 5aaa55c898 | |||
| 295b5b5dea | |||
| 07273ac439 | |||
| 00d865c173 | |||
| 24f73eb87c | |||
| 968a0c9204 | |||
| cfa75bb828 | |||
| de78b60dda | |||
| 8d22086097 | |||
| a864ab6f9e | |||
| 7819efacf6 | |||
| 8d5479ca1c | |||
| 3e18fa422c | |||
| f8a56d446f | |||
| 5c2efcbf3e | |||
| 0fedf6b3eb | |||
| 4cb0cf6402 | |||
| ccfd2369b9 | |||
| 8a5ea7ec0d | |||
| 8b6d5cb42f | |||
| 518fdb93e5 | |||
| 0cb7b84880 | |||
| 2dd5bcea2f | |||
| f1af605d6c | |||
| 840e38de59 | |||
| 3821472ad8 | |||
| f914cd0dec | |||
| 16402d8180 | |||
| ade6ec3256 | |||
| 7dbcbf6d15 | |||
| 7ae228d70e | |||
| ab55b61970 | |||
| 5436798e51 | |||
| 2fc643de36 | |||
| 9c62d2dfb7 | |||
| 45bd443184 | |||
| dd3b684ce6 | |||
| aaf6cce614 | |||
| 08f8703898 | |||
| 8c75adb8c1 | |||
| 6f72aaecca | |||
| 45b01a5c9c | |||
| 6789e62210 | |||
| f4af52f94d | |||
| 40f4304b2f | |||
| 7c86749ca6 | |||
| d2126bafff | |||
| 8653e362b2 | |||
| c39ca125d4 | |||
| 6c867989ca | |||
| 9ba242bc1f | |||
| 97749ed192 | |||
| d919d71054 | |||
| 143debdd61 | |||
| 75072f4330 | |||
| bde103f5be | |||
| 96f302c958 | |||
| 09b1748bc4 | |||
| a674dd6581 | |||
| ea603c4deb | |||
| 63b884558a | |||
| 87e5b6b874 | |||
| 4352eddadb | |||
| 3c315005ee | |||
| 4b14415596 | |||
| 97ea4e83f7 | |||
| cd62be66e7 | |||
| 1b4f7d6ce5 | |||
| 760d02e4d2 | |||
| a564d2f865 | |||
| 79b4846200 | |||
| 312254bc8a | |||
| b4f0230658 | |||
| a9ccf49580 | |||
| 2f41c40163 | |||
| 1886082fce | |||
| 4a26d543d5 | |||
| ee48de6744 | |||
| f477464f77 | |||
| 9a806749ea | |||
| 063907211e | |||
| 926dec84a5 | |||
| ba05519662 | |||
| 1671432ac1 | |||
| 14fcf7f933 | |||
| 3e7c4a7624 | |||
| b18e3f5372 | |||
| 52541cc10c | |||
| c648806703 | |||
| 151f81aa95 | |||
| 79015495b1 | |||
| c971460467 | |||
| 275f02adc3 | |||
| ac41e7009e | |||
| affbb8a8e0 | |||
| 8f52ba14db | |||
| 91d5bb5812 | |||
| 6559d6a582 | |||
| 23c1c4a067 | |||
| 84c7b07e02 | |||
| 70ca712c81 | |||
| 6ad94a4912 | |||
| cace69a6f2 | |||
| efdf28f67e | |||
| 5155c35a71 | |||
| b065b37a1e | |||
| 9ae4e60911 | |||
| 98086a8891 | |||
| e5c1959dcd | |||
| 7f84f6aeb1 | |||
| 2d1a7e099b | |||
| 978ae91841 | |||
| c00a93e94f | |||
| 126a7c103c | |||
| dd5661e5a8 | |||
| b95ab35534 | |||
| cbb28977a2 | |||
| 932c5e9989 | |||
| 22645084bb | |||
| bf3b8f567a | |||
| eb3ba80643 | |||
| 31332c3973 | |||
| 1dd0adf7e0 | |||
| b5302db70e | |||
| 2aa27122b0 | |||
| cb62f5c8ba | |||
| b080f860c9 | |||
| e435a104c9 | |||
| a93637b14f | |||
| 4794d3774a | |||
| 3688bae75f | |||
| 9bbff22d96 | |||
| 89a40eeb80 | |||
| 4612ef9d50 | |||
| d378dcc734 | |||
| 272936ef21 | |||
| b4ab7ef7ea | |||
| 96a77d7618 | |||
| 703293fa30 | |||
| 31e58d87d4 | |||
| e0cc8a2f11 | |||
| dd519d68ea | |||
| e21bd2479e | |||
| df810f744c | |||
| efa0286f26 | |||
| 4e61451c9c | |||
| 7c5e42b4d0 | |||
| 58ae2e1920 | |||
| d32333a012 | |||
| 9cd011abbb | |||
| ea4b3877e2 | |||
| 28222961dd | |||
| 5634bc3381 | |||
| 484eb55ae8 | |||
| 1e772280b9 | |||
| 6abf0e9f94 | |||
| 28f238e36b | |||
| c771811498 | |||
| 945fef938c | |||
| 292c1f0912 | |||
| 9e41a8127d | |||
| f3cc32f9e2 | |||
| 58299fc921 | |||
| f03b9048fe | |||
| 69dbeab90f | |||
| fb43f4ad6f | |||
| 0e1e7f53b1 | |||
| e7925279ab | |||
| 80693fa7c1 | |||
| ae19bbfa33 | |||
| b1ea9d0eb5 | |||
| 2dc8c27ec2 | |||
| 0dc4d9c19e | |||
| 012fa536e1 | |||
| 26eab9c767 | |||
| 77e1a4c03c | |||
| 819404614a | |||
| 9823666ca9 | |||
| 621a43c4ad | |||
| cedcd2bace | |||
| eee9738755 | |||
| fc9c8cc0ec | |||
| 87e773b6f6 | |||
| c11f3407b8 | |||
| bb383e22b3 | |||
| 56796a950c | |||
| 44c25d14ec | |||
| b97ece7f58 | |||
| 7d08facb45 | |||
| fdc7e9a818 | |||
| 1468a4ae31 | |||
| 8031e512e6 | |||
| c41bb774e4 | |||
| 5951a7f9bc | |||
| 7c0af1bf9d | |||
| bae892dfe5 | |||
| c169de804d | |||
| 0e941708f4 | |||
| 6bb4dea501 | |||
| 143af26952 | |||
| 63257245e8 | |||
| 0355119044 | |||
| 21dbfef350 | |||
| 4fec212627 | |||
| 99c1d45fa0 | |||
| 92f8f006fa | |||
| 5fa61ecd25 | |||
| 2d49ced742 | |||
| c646c2f806 | |||
| cc47e88b9e | |||
| 160560c916 | |||
| fb193c1232 | |||
| 6454d91923 | |||
| b660b033ad | |||
| 210a7036db | |||
| eb94e66c9d | |||
| b1c9c54221 | |||
| 9e0960615a | |||
| 436c17f60b | |||
| 534c8a8944 | |||
| 136d84ef3c | |||
| 44ced95e66 | |||
| 5179ed926b | |||
| c3ecce2ec6 | |||
| 5590e1ebf5 | |||
| 0037e153a0 | |||
| 3ed33e3912 | |||
| 996bf80d1f | |||
| 16064881be | |||
| a9744e3f84 | |||
| a2b9241ea3 | |||
| 819589cf05 | |||
| 3ff16a0b14 | |||
| 93ebdb2cd0 | |||
| b810135e4e | |||
| bb6795ddf1 | |||
| 3668f4ccc3 | |||
| 5aec46049d | |||
| 7d154606be | |||
| 61c3339d09 | |||
| 05dc1bbf3d | |||
| a66e910827 | |||
| 34c74d17b4 | |||
| e771112259 | |||
| 3157b4d188 | |||
| 082d901d60 | |||
| f301b196ab | |||
| eaf4919ef8 | |||
| e6dd5128fa | |||
| 92b43c7407 | |||
| 37ee239449 | |||
| ba6da604cc | |||
| 137066e53c | |||
| 7cef5395b3 | |||
| 715af96184 | |||
| b44d719446 | |||
| c7e3e31db6 | |||
| 94fdc674aa | |||
| 0938f2cff6 | |||
| e7fd324a75 | |||
| a2c75829f9 | |||
| fef8347176 | |||
| 79d55c0460 | |||
| 96bf0a5460 | |||
| 5b9c354759 | |||
| a4de3018d7 | |||
| bff11cea90 | |||
| 20acc9a918 | |||
| 5542910960 | |||
| 31ff1bac4f | |||
| 0c4c65d7a2 | |||
| 96771ccc03 | |||
| 3a07ab1f09 | |||
| b19cc14ef2 | |||
| 2dbb428b23 | |||
| 0ebc3f063e | |||
| 898275fa43 | |||
| 367bfb4e14 | |||
| 6bb2fce7d9 | |||
| abe5c08e20 | |||
| 7c3f47ec5a | |||
| f80357cb1a | |||
| c7d6dad7e0 | |||
| ccb74b99d3 | |||
| 9d5e271334 | |||
| c82b878787 | |||
| c0992a9386 | |||
| 1f277fd66d | |||
| 7fd24c7f03 | |||
| 4ff3a78de0 | |||
| 899d23d4fd | |||
| 4d2def3593 | |||
| 89dd074841 | |||
| 3b56ea6732 | |||
| b0881d8ec5 | |||
| 5140c348cd | |||
| beec323603 | |||
| ef39c5f38e | |||
| 90a6daa722 | |||
| 474128a445 | |||
| dfdd2cfdbf | |||
| ae05cd80c3 | |||
| f96d557e73 | |||
| 1c9433fb31 | |||
| a8e4f8b0ed | |||
| 99b90d2fa3 | |||
| ef5f1b9e6b | |||
| 9259b21ffa | |||
| 894e6eb5ea | |||
| 5d0dee1364 | |||
| 4f01bedf97 | |||
| 9e20800f8c | |||
| 9ec6139f9d | |||
| 9d8c684a4a | |||
| 5742bfb8cc | |||
| 465dabd919 | |||
| aaabdeaed7 | |||
| a3ea46d0e4 | |||
| 829e952e49 | |||
| 863c1b4823 | |||
| 2a9b8df888 | |||
| 5a6c088bd9 | |||
| f20bf0d217 | |||
| 018b080001 | |||
| 0bdec796be | |||
| 8439dc450f | |||
| 8234b9e184 | |||
| 701140a6dd | |||
| af0d21474d | |||
| 096f4a1080 | |||
| 1da099dd1f | |||
| 974fe74f66 | |||
| 04a17d3347 | |||
| 7f16520498 | |||
| 0459b4dafa | |||
| b7c5649463 | |||
| 1f1a7703d9 | |||
| c7f6343bb4 | |||
| 08af577218 | |||
| 20f0a5f884 | |||
| 91b0191a02 | |||
| a6bc4a0dc6 | |||
| 047bb44ef5 | |||
| 1b08d1874f | |||
| 0c946870c5 | |||
| db427cb2cd | |||
| f94a95ab5b | |||
| e5452a7a39 | |||
| 4019284e66 | |||
| e06ce757b7 | |||
| 4b596cc5f3 | |||
| 3a8bf14c9f | |||
| 025d550955 | |||
| 70c30bce74 | |||
| 52ee7c6e2a | |||
| 0588092184 | |||
| 8975fd3cf4 | |||
| 5d415c4c4b | |||
| 1f50b2c767 | |||
| 0028c05484 | |||
| 8c72db6631 | |||
| d9ed8a3085 | |||
| b59cebb2a7 | |||
| 0c4a026e70 | |||
| 3b2be428f4 | |||
| f7755bdcec | |||
| c4c2cd3acd | |||
| 8b210d05ec | |||
| a71857baaa | |||
| 9fea98dd2f | |||
| d3f9554841 | |||
| b34d8e2150 | |||
| a2753e85ad | |||
| 2d0d805014 | |||
| de471744cd | |||
| 7f07b48e88 | |||
| fc9e25fce7 | |||
| 4f471eb569 | |||
| e07fd7ef82 | |||
| f5047b29dd | |||
| be832f8855 | |||
| 64c1ea5cec | |||
| 27d6310cbf | |||
| e7817f3e84 | |||
| b5c0cada0d | |||
| 30e251bfba | |||
| e936d3c13a | |||
| 2475b2b6f7 | |||
| 20a6b7ea70 | |||
| 2455a6cc3b | |||
| 57acee0d4e | |||
| a8c71d4a71 | |||
| 16e5866611 | |||
| d1b73df4e7 | |||
| c5869705f4 | |||
| 808020b1eb | |||
| 69905af749 | |||
| 7bdcad155a | |||
| b3fd915f59 | |||
| b68fa7cdfd | |||
| ad86e50a69 | |||
| f2bd20ab34 | |||
| 52318f6988 | |||
| fd8bfe0cb1 | |||
| 28bcad847e | |||
| 5e436255af | |||
| d8c14403f2 | |||
| e6ec9f0a32 | |||
| 925774760c | |||
| 6e78a592f2 | |||
| afdf5258f3 | |||
| 76765f2269 | |||
| 43caa734ac | |||
| cdd60c956e | |||
| aac1010636 | |||
| cb210042b8 | |||
| 4812968129 | |||
| 5cda6bc1a6 | |||
| 30c7e31839 | |||
| ea467e6730 | |||
| 6d1fe6fe5e | |||
| 9e7cbed8c1 | |||
| 879f85aa7c | |||
| 70df15175b | |||
| ab001b902a | |||
| ffd57d88d7 | |||
| 4a7b5304a0 | |||
| 84c782fba7 | |||
| 42f1b9e415 | |||
| 40c5a46f38 | |||
| 9f41cac041 | |||
| 4dc70b2fc8 | |||
| 4ead38a83d | |||
| ff66db7b6f | |||
| 351e08c8a9 | |||
| eff5023287 | |||
| f6551172d2 | |||
| c051c1a4a9 | |||
| 23bec4b80b | |||
| 2e0941a1de | |||
| 6824dc7199 | |||
| 40ccdd5763 | |||
| fb9e1ea010 | |||
| 86e04b4fb3 | |||
| fda7bbffc3 | |||
| ba96329648 | |||
| f0c50f007c | |||
| a3f83d771f | |||
| edee5dc1ce | |||
| 051a7e5733 | |||
| 1ad84c07d6 | |||
| 5f5c504288 | |||
| 173c93969d | |||
| f459e4f78d | |||
| 687a127b97 | |||
| 4125ea7789 | |||
| 2fe9a99b8f | |||
| 684d98ecca | |||
| 61acac28e1 | |||
| ebcb6d3b82 | |||
| f114e800a4 | |||
| d26e9ff2e1 | |||
| f35037238c | |||
| 3fa7c200b7 | |||
| b322a885a2 | |||
| e96f1aeb3d | |||
| 9d6c1d12ed | |||
| cdaa5ceac7 | |||
| 8680e9f34a | |||
| 758f22161a | |||
| 3b671e09d1 | |||
| a00df5b330 | |||
| fa3ebc4043 | |||
| e3b6385cd3 | |||
| b939f3bc2f | |||
| a2f1482192 | |||
| 2140efdce3 | |||
| 33616f3051 | |||
| d719282aaf | |||
| d8b60a14e1 | |||
| 5157657eba | |||
| aef92a345c | |||
| 42fad8a754 | |||
| a9d1f4788b | |||
| e594732646 | |||
| c24863c078 | |||
| 9a6612c6ec | |||
| f3e171797c | |||
| 47a41f9c66 | |||
| 72d4b2353b | |||
| 597833b55e | |||
| e88bc8e58b | |||
| 51a83a7a66 | |||
| 3341669fc6 | |||
| bf5802f1f7 | |||
| 6468805c27 | |||
| 5d5eb7d38c | |||
| a42490e0f3 | |||
| 8c0dc01fdd | |||
| add5321328 | |||
| 55c0eafd6f | |||
| 57d75a75a8 | |||
| b28e976e35 | |||
| bed96be750 | |||
| 38ea600803 | |||
| b4bb924eab | |||
| 1121b9cc3c | |||
| 7bd6c82cf0 | |||
| f0dc54340d | |||
| 0df3793329 | |||
| a20372579c | |||
| a0c80381f2 | |||
| 36dac0c14d | |||
| e730219b31 | |||
| 6652845683 | |||
| 8f62c6aa05 | |||
| a201522f6b | |||
| 0cdc5c59ab | |||
| f2f0f66a50 | |||
| 9e980d916f | |||
| 149f6d807d | |||
| 1f108b0b6c | |||
| 946ddbaa08 | |||
| be15057977 | |||
| 9c16a218c0 | |||
| 6976d2538f | |||
| d739f03c5f | |||
| 7c8bfab5ca | |||
| 485ec24f61 | |||
| b54acf607a | |||
| 96c1a50e00 | |||
| 1effb1fefc | |||
| 173b869dcb | |||
| 571bca200b | |||
| 3f761c890c | |||
| 100ea3a59b | |||
| 3d6437863c | |||
| f8490ff4af | |||
| e4309287bf | |||
| 70cf189132 | |||
| 7ce97878e8 | |||
| d7feb9ab45 | |||
| 57ede4aff4 | |||
| 4882d5459a | |||
| e356e6dc6b | |||
| 45445dd88f | |||
| 005a13fef3 | |||
| 625e964c8d | |||
| acc07c338c | |||
| cf9864766b | |||
| b01bcda079 | |||
| 31a84b84ec | |||
| fda20d28d8 | |||
| 00e6f01584 | |||
| b8a2c4e240 | |||
| f49c27798e | |||
| 6d643f70b5 | |||
| df494fc83e | |||
| 87aa22f13f | |||
| cd93e14d7d | |||
| 9ebe983eaa | |||
| 9398eb9767 | |||
| b5cac30abd | |||
| 7a25604161 | |||
| b28dbd31c3 | |||
| c0be31aeda | |||
| 06c570bab3 | |||
| f422350605 | |||
| 058e17edf7 | |||
| ffbbd64c73 | |||
| 5080d4cc3e | |||
| 6dc85d1c96 | |||
| aad54ec406 | |||
| 6375497825 | |||
| e56f76dbcf | |||
| 389656e58c | |||
| 72e9106481 | |||
| 396538e176 | |||
| 2e29b4f152 | |||
| 970e033399 | |||
| ec5757a4fa | |||
| 562d2461aa | |||
| 3976d5087e | |||
| c047d7f484 | |||
| 909c2a6051 | |||
| 672b55fd05 | |||
| a731a6b712 | |||
| e90cc8adf5 | |||
| 5e5ec6f1a9 | |||
| db7c8cfd92 | |||
| ed5585eb6c | |||
| 3dacab9691 | |||
| f13e020314 | |||
| b21dbd9561 | |||
| c41752fdf4 | |||
| d7692cd115 | |||
| 75d2dc7311 | |||
| 4a7394038f | |||
| 07e5eee133 | |||
| 6219291ddc | |||
| aaa1cc3e02 | |||
| a1ff326181 | |||
| bfe4937162 | |||
| b536b1cf82 | |||
| bcd66579d9 | |||
| 23aea616e0 | |||
| d57a12772a | |||
| 2ecda37806 | |||
| 165cbf1149 | |||
| 39ba360861 | |||
| 4154af55e1 | |||
| 97884551f0 | |||
| 0a68744e2d | |||
| 718b25656c | |||
| 76e2efedb2 | |||
| 30ecdbea6a | |||
| 477e98dc6c | |||
| aaa62cddf3 | |||
| b6cae6fe86 | |||
| c2fa1b8816 | |||
| 107ef8f102 | |||
| f1e5be9a67 | |||
| 9ef6ae5b49 | |||
| 6c0c4dbeb5 | |||
| 5208bf9976 | |||
| 9e2eb0c856 | |||
| 827352511a | |||
| ba689c10e3 | |||
| 35ddad2193 | |||
| 4082e12252 | |||
| a7d7e8dcc6 | |||
| 2153f4d1e2 | |||
| 74aecb3e72 | |||
| 197ace9e44 | |||
| 1393e5c38e | |||
| d7da6083e4 | |||
| 2082fbba4f | |||
| 72605c343b | |||
| 623ae37f22 | |||
| fa470d5c4a | |||
| 54e221cfad | |||
| b90d657cb8 | |||
| 822e5db5dc | |||
| be57e57ee4 | |||
| 3da1b75c67 | |||
| 398607a658 | |||
| e7b3ed2e88 | |||
| 6c04e60587 | |||
| 08ef741770 | |||
| 8e846082bb | |||
| 716d21d88a | |||
| cc46daa67f | |||
| 7b658917ab | |||
| 1ca894584c | |||
| 2b3b2fc0cf | |||
| f9e2f9dc77 | |||
| 9eb7cba156 | |||
| c5f104a548 | |||
| 0c00c88f11 | |||
| f6f52d87e4 | |||
| 98b5cddab0 | |||
| 60fb3fb7f7 | |||
| e630672397 | |||
| ee8d721c3c | |||
| c0d39da548 | |||
| 72ab517400 | |||
| 499fc46eb1 | |||
| fb7b03a650 | |||
| 96f435202c | |||
| 7eb1a136f1 | |||
| 4cbb5c5e94 | |||
| bc48b8507b | |||
| a51dab7341 | |||
| ebb85aa232 | |||
| 7fd0f0cab5 | |||
| 94097a6b22 | |||
| 23172cce23 | |||
| 2b394c7ccb | |||
| b8a0ab4c52 | |||
| 3b8f191cc4 | |||
| e6c8515873 | |||
| 4565308d63 | |||
| ec307ef62c | |||
| 30fa7158c0 | |||
| 708aef8522 | |||
| b594b4b28c | |||
| b142b9defe | |||
| 5cf2d4fabb | |||
| a7b251450f | |||
| 6d39b53efb | |||
| 4502149368 | |||
| 2c84a28f6b | |||
| 286c62d898 | |||
| b76d05f591 | |||
| 0025ac7d38 | |||
| 9147e66dce | |||
| f3132afe2a | |||
| 81d6ebae24 | |||
| 9431c2a60a | |||
| 5289c22087 | |||
| 742486dce6 | |||
| 3383d6c8a5 | |||
| 5a9fcf6f11 | |||
| 3421863c01 | |||
| f40a92561c | |||
| 6b097a57bf | |||
| 1c98200721 | |||
| 54c20b57f2 | |||
| 0404ddae29 | |||
| 409d6e8ea2 | |||
| d000d48653 | |||
| 78d921e731 | |||
| 67e28ade74 | |||
| f694035366 | |||
| 0cad6e7913 | |||
| 6d3fd3a01d | |||
| 2caa72f063 | |||
| c3c6b9ef6c | |||
| 9cc4f5d0a6 | |||
| 148aecf963 | |||
| 00052a60c9 | |||
| 9d080b0868 | |||
| dac20005db | |||
| dd091fc6b9 | |||
| 90bb27ca66 | |||
| 1393eb0f11 | |||
| 152b8d91e3 | |||
| 5a96588eec | |||
| d3afe95ca8 | |||
| b774d96fb0 | |||
| 0ba26e1d8f | |||
| 697f912307 | |||
| 3f15b9c057 | |||
| e420623fde | |||
| 5916688f35 | |||
| 8985a1807b | |||
| b7db108cd7 | |||
| 1cb1e88ef4 | |||
| 375310f2ab | |||
| 750dd6eeac | |||
| 929d5c7a3f | |||
| 0d4598656b | |||
| 1983b2db05 | |||
| c2e5fcaec8 | |||
| 2df818b844 | |||
| 85d2f2f1d5 | |||
| 6c28cdc62c | |||
| 98fa228302 | |||
| 81d3487244 | |||
| d41b81fc3b | |||
| ccb910eb62 | |||
| e50d18bc1b | |||
| 018ffe7eac | |||
| a180518f4b | |||
| 2c150e4817 | |||
| 0e27f45ffd | |||
| d463580560 | |||
| b3a6ddb6e9 | |||
| fac288cffa | |||
| c9269232cf | |||
| bbc626b750 | |||
| a9e2399669 | |||
| cc70c1a463 | |||
| 6767a0b2a3 | |||
| 95891006cd | |||
| 463c17b807 | |||
| 02bb2111e2 | |||
| d5a1736346 | |||
| 74ccc4b558 | |||
| 96bb90dee1 | |||
| bced8c9774 | |||
| b2c11207e4 | |||
| a63a2006f0 | |||
| 5465966c7b | |||
| d9af562f8f | |||
| 768ec258f7 | |||
| 0498f2657c | |||
| b979d1e0b9 | |||
| dc982a2824 | |||
| 4c2a1dd5d1 | |||
| 2600bb31c0 | |||
| 9461f16281 | |||
| 4cb29f6104 | |||
| a67ff643f3 | |||
| d8ad2cceb0 | |||
| 37c3e32119 | |||
| ac74985685 | |||
| 1047e60e35 | |||
| eb52f4ba63 | |||
| a089ae7ac3 | |||
| 9dce6fba09 | |||
| 16131a500d | |||
| bcbde5d813 | |||
| c7fe98db2f | |||
| b6dcf9b7f4 | |||
| c4979318d2 | |||
| 539f4e1ed7 | |||
| 68d752bb13 | |||
| e8c3ca2929 | |||
| 241fdb4de4 | |||
| fafd74ca6f | |||
| 680a4407f4 | |||
| 40ee72653e | |||
| b26580d5df | |||
| f311bb4d59 | |||
| 2ae221d97f | |||
| a37fdd9751 | |||
| 343e55b09a | |||
| 0fb4954f19 | |||
| 086c8decb0 | |||
| 0bdef38585 | |||
| 6418163d3c | |||
| 05faa36962 | |||
| 1b5edd6d4c | |||
| d9e0ab0241 | |||
| 6c2fcf7e78 | |||
| 3bb91baf11 | |||
| 1ab12c2be4 | |||
| b6508af0f4 | |||
| 3a887850ee | |||
| 31bcc6eed9 | |||
| 7a93d0b21c | |||
| 8f79b14680 | |||
| 701fa6b0a3 | |||
| 2515a806ae | |||
| 5e3ca2e769 | |||
| b707493f35 | |||
| 63399bbeea | |||
| dea21ba82e | |||
| 2fd8613777 | |||
| 778832a665 | |||
| 683921f98d | |||
| cc097762c7 | |||
| d4bfa450e0 | |||
| 1ef58372a9 | |||
| 2a69ffb406 | |||
| 69f8b30b25 | |||
| 35749e57c4 | |||
| 169576703d | |||
| 959e338698 | |||
| 38553be4de | |||
| 09a61396ba | |||
| 4b9b2f4e66 | |||
| 6f3aa6aca9 | |||
| 1259683846 | |||
| 790b6b54f5 | |||
| 9cb27eb85c | |||
| 7a5e6a2d66 | |||
| 6ebb044d45 | |||
| 77521c4b60 | |||
| 4221c3619a | |||
| fc7189e6f4 | |||
| cc7e7fc5ca | |||
| 7bd8284661 | |||
| 0fdf71a80e | |||
| a273b7bdb5 | |||
| 311a8186ff | |||
| cd0b231656 | |||
| b88505dd85 | |||
| 619a82a61a | |||
| 393e020442 | |||
| 7c17187052 | |||
| 936d831b82 | |||
| ed2141a6d6 | |||
| 721cdc4831 | |||
| 3541335a08 | |||
| fcb482df41 | |||
| 9f69193a62 | |||
| 9bf1f390b2 | |||
| 8cad403d23 | |||
| 9cd1fdd92c | |||
| d5ea4750e7 | |||
| 0ee7234cf9 | |||
| 8a034512ea | |||
| bbda48f9e8 | |||
| a834c47be5 | |||
| 858636fd27 | |||
| 60805606a0 | |||
| 7195644360 | |||
| 443b4a6fe1 | |||
| 32526511de | |||
| b98b23a1a6 | |||
| 2476bc7f62 | |||
| 51a845470b | |||
| 4cbcf56cee | |||
| 14c1486062 | |||
| e21ebb7282 | |||
| 8e584fc233 | |||
| 4e626d44b9 | |||
| 609abb2f0c | |||
| 7bbe2f784e | |||
| 78377058c9 | |||
| 4c063574ae | |||
| 15f0147ece | |||
| 6311e4e9ea | |||
| c5f24127a2 | |||
| 30a4bd3902 | |||
| 6a4e8aa909 | |||
| 341e3a507a | |||
| 1bd7fc8a4e | |||
| 1fde4ca807 | |||
| 0409bc8d1b | |||
| 153b1bd0d2 | |||
| 2db1e221d4 | |||
| 8a82c61543 | |||
| 2c251196c6 | |||
| 13324c06b5 | |||
| 021a075fbe | |||
| 121b65bfb8 | |||
| 8e6ac6c5a9 | |||
| b7a8719617 | |||
| 70569edb05 | |||
| 0dff6b9bd3 | |||
| 31ed2c288c | |||
| 4e55b6be65 | |||
| 31a4334a5a | |||
| d5cbd5d186 | |||
| 2ba1984442 | |||
| d4fb921b43 | |||
| 5602177d45 | |||
| 22b42b2a41 | |||
| 6a33eed0f4 | |||
| 301ef32e17 | |||
| c2f1113e5d | |||
| 4b853dedb4 | |||
| 611a5155fc | |||
| c09bc26dc2 | |||
| eaf17c596a | |||
| cac9951682 | |||
| 538b1ed314 | |||
| 25f95ec11f | |||
| e6681f17e4 | |||
| b9b341dce2 | |||
| de96452c41 | |||
| 063c56be30 | |||
| 2d761f302b | |||
| 8db19bbd6a | |||
| edd35b4e90 | |||
| 846dca8c05 |
+1
-7
@@ -1,20 +1,15 @@
|
||||
boost_root
|
||||
.downloads-by-cmake
|
||||
Build
|
||||
common/netlist_keywords.*
|
||||
common/netlist_lexer.h
|
||||
common/pcb_plot_params_lexer.h
|
||||
common/page_layout/page_layout_reader_keywords.cpp
|
||||
common/page_layout_reader_keywords.cpp
|
||||
common/fp_lib_table_keywords.*
|
||||
common/gal/opengl/shader_src.h
|
||||
include/fp_lib_table_lexer.h
|
||||
include/netlist_lexer.h
|
||||
include/page_layout_reader_lexer.h
|
||||
eeschema/cmp_library_lexer.h
|
||||
eeschema/cmp_library_keywords.*
|
||||
eeschema/dialogs/dialog_bom_cfg_keywords.cpp
|
||||
eeschema/dialogs/dialog_bom_cfg_lexer.h
|
||||
eeschema/dialogs/dialog_bom_help_html.h
|
||||
eeschema/template_fieldnames_keywords.*
|
||||
eeschema/template_fieldnames_lexer.h
|
||||
pcbnew/dialogs/dialog_freeroute_exchange_help_html.h
|
||||
@@ -28,7 +23,6 @@ version.h
|
||||
config.h
|
||||
install_manifest.txt
|
||||
Documentation/doxygen
|
||||
Documentation/development/doxygen
|
||||
*.bak
|
||||
common/pcb_plot_params_keywords.cpp
|
||||
include/pcb_plot_params_lexer.h
|
||||
|
||||
+52
-27
@@ -45,11 +45,16 @@
|
||||
#include <info3d_visu.h>
|
||||
#include <trackball.h>
|
||||
|
||||
// Exported function:
|
||||
void Set_Object_Data( std::vector< S3D_VERTEX >& aVertices, double aBiuTo3DUnits );
|
||||
|
||||
void S3D_MASTER::ObjectCoordsTo3DUnits( std::vector< S3D_VERTEX >& aVertices )
|
||||
|
||||
void S3D_MASTER::Set_Object_Coords( std::vector< S3D_VERTEX >& aVertices )
|
||||
{
|
||||
unsigned ii;
|
||||
|
||||
/* adjust object scale, rotation and offset position */
|
||||
for( unsigned ii = 0; ii < aVertices.size(); ii++ )
|
||||
for( ii = 0; ii < aVertices.size(); ii++ )
|
||||
{
|
||||
aVertices[ii].x *= m_MatScale.x;
|
||||
aVertices[ii].y *= m_MatScale.y;
|
||||
@@ -57,31 +62,13 @@ void S3D_MASTER::ObjectCoordsTo3DUnits( std::vector< S3D_VERTEX >& aVertices )
|
||||
|
||||
// adjust rotation
|
||||
if( m_MatRotation.x )
|
||||
{
|
||||
double a = aVertices[ii].y;
|
||||
double b = aVertices[ii].z;
|
||||
RotatePoint( &a, &b, m_MatRotation.x * 10 );
|
||||
aVertices[ii].y = (float)a;
|
||||
aVertices[ii].z = (float)b;
|
||||
}
|
||||
RotatePoint( &aVertices[ii].y, &aVertices[ii].z, m_MatRotation.x * 10 );
|
||||
|
||||
if( m_MatRotation.y )
|
||||
{
|
||||
double a = aVertices[ii].z;
|
||||
double b = aVertices[ii].x;
|
||||
RotatePoint( &a, &b, m_MatRotation.x * 10 );
|
||||
aVertices[ii].z = (float)a;
|
||||
aVertices[ii].x = (float)b;
|
||||
}
|
||||
RotatePoint( &aVertices[ii].z, &aVertices[ii].x, m_MatRotation.y * 10 );
|
||||
|
||||
if( m_MatRotation.z )
|
||||
{
|
||||
double a = aVertices[ii].x;
|
||||
double b = aVertices[ii].y;
|
||||
RotatePoint( &a, &b, m_MatRotation.x * 10 );
|
||||
aVertices[ii].x = (float)a;
|
||||
aVertices[ii].y = (float)b;
|
||||
}
|
||||
RotatePoint( &aVertices[ii].x, &aVertices[ii].y, m_MatRotation.z * 10 );
|
||||
|
||||
/* adjust offset position (offset is given in UNIT 3D (0.1 inch) */
|
||||
#define SCALE_3D_CONV ((IU_PER_MILS * 1000) / UNITS3D_TO_UNITSPCB)
|
||||
@@ -92,7 +79,7 @@ void S3D_MASTER::ObjectCoordsTo3DUnits( std::vector< S3D_VERTEX >& aVertices )
|
||||
}
|
||||
|
||||
|
||||
void TransfertToGLlist( std::vector< S3D_VERTEX >& aVertices, double aBiuTo3DUnits )
|
||||
void Set_Object_Data( std::vector< S3D_VERTEX >& aVertices, double aBiuTo3DUnits )
|
||||
{
|
||||
unsigned ii;
|
||||
GLfloat ax, ay, az, bx, by, bz, nx, ny, nz, r;
|
||||
@@ -151,14 +138,52 @@ void TransfertToGLlist( std::vector< S3D_VERTEX >& aVertices, double aBiuTo3DUni
|
||||
glEnd();
|
||||
}
|
||||
|
||||
|
||||
GLuint EDA_3D_CANVAS::DisplayCubeforTest()
|
||||
{
|
||||
GLuint gllist = glGenLists( 1 );
|
||||
|
||||
glNewList( gllist, GL_COMPILE_AND_EXECUTE );
|
||||
/* draw six faces of a cube */
|
||||
glBegin( GL_QUADS );
|
||||
glNormal3f( 0.0F, 0.0F, 1.0F );
|
||||
glVertex3f( 0.5F, 0.5F, 0.5F ); glVertex3f( -0.5F, 0.5F, 0.5F );
|
||||
glVertex3f( -0.5F, -0.5F, 0.5F ); glVertex3f( 0.5F, -0.5F, 0.5F );
|
||||
|
||||
glNormal3f( 0.0F, 0.0F, -1.0F );
|
||||
glVertex3f( -0.5F, -0.5F, -0.5F ); glVertex3f( -0.5F, 0.5F, -0.5F );
|
||||
glVertex3f( 0.5F, 0.5F, -0.5F ); glVertex3f( 0.5F, -0.5F, -0.5F );
|
||||
|
||||
glNormal3f( 0.0F, 1.0F, 0.0F );
|
||||
glVertex3f( 0.5F, 0.5F, 0.5F ); glVertex3f( 0.5F, 0.5F, -0.5F );
|
||||
glVertex3f( -0.5F, 0.5F, -0.5F ); glVertex3f( -0.5F, 0.5F, 0.5F );
|
||||
|
||||
glNormal3f( 0.0F, -1.0F, 0.0F );
|
||||
glVertex3f( -0.5F, -0.5F, -0.5F ); glVertex3f( 0.5F, -0.5F, -0.5F );
|
||||
glVertex3f( 0.5F, -0.5F, 0.5F ); glVertex3f( -0.5F, -0.5F, 0.5F );
|
||||
|
||||
glNormal3f( 1.0F, 0.0F, 0.0F );
|
||||
glVertex3f( 0.5F, 0.5F, 0.5F ); glVertex3f( 0.5F, -0.5F, 0.5F );
|
||||
glVertex3f( 0.5F, -0.5F, -0.5F ); glVertex3f( 0.5F, 0.5F, -0.5F );
|
||||
|
||||
glNormal3f( -1.0F, 0.0F, 0.0F );
|
||||
glVertex3f( -0.5F, -0.5F, -0.5F ); glVertex3f( -0.5F, -0.5F, 0.5F );
|
||||
glVertex3f( -0.5F, 0.5F, 0.5F ); glVertex3f( -0.5F, 0.5F, -0.5F );
|
||||
glEnd();
|
||||
|
||||
glEndList();
|
||||
|
||||
return gllist;
|
||||
}
|
||||
|
||||
VERTEX_VALUE_CTRL::VERTEX_VALUE_CTRL( wxWindow* aParent, wxBoxSizer* aBoxSizer )
|
||||
{
|
||||
wxString text;
|
||||
|
||||
wxFlexGridSizer* gridSizer = new wxFlexGridSizer( 0, 2, 0, 0 );
|
||||
gridSizer->AddGrowableCol( 1 );
|
||||
gridSizer->SetFlexibleDirection( wxHORIZONTAL );
|
||||
gridSizer->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
|
||||
gridSizer->AddGrowableCol( 1 );
|
||||
gridSizer->SetFlexibleDirection( wxHORIZONTAL );
|
||||
gridSizer->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
|
||||
|
||||
aBoxSizer->Add( gridSizer, 0, wxEXPAND, 5 );
|
||||
|
||||
|
||||
+69
-84
@@ -16,23 +16,17 @@
|
||||
|
||||
#include <gestfich.h>
|
||||
|
||||
#ifdef __WINDOWS__
|
||||
#include <GL/glew.h> // must be included before gl.h
|
||||
#endif
|
||||
|
||||
#include <3d_viewer.h>
|
||||
#include <3d_canvas.h>
|
||||
#include <info3d_visu.h>
|
||||
#include <trackball.h>
|
||||
#include <3d_viewer_id.h>
|
||||
|
||||
#include <textures/text_silk.c>
|
||||
#include <textures/text_pcb.c>
|
||||
|
||||
// -----------------
|
||||
// helper function (from wxWidgets, opengl/cube.cpp sample
|
||||
// -----------------
|
||||
void CheckGLError(const char *aFileName, int aLineNumber)
|
||||
void CheckGLError()
|
||||
{
|
||||
GLenum errLast = GL_NO_ERROR;
|
||||
|
||||
@@ -53,8 +47,7 @@ void CheckGLError(const char *aFileName, int aLineNumber)
|
||||
|
||||
errLast = err;
|
||||
|
||||
wxLogError( wxT( "OpenGL error %d At: %s, line: %d" ), err,
|
||||
GetChars( FROM_UTF8( aFileName ) ), aLineNumber );
|
||||
wxLogError(wxT("OpenGL error %d"), err);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -85,12 +78,7 @@ EDA_3D_CANVAS::EDA_3D_CANVAS( EDA_3D_FRAME* parent, int* attribList ) :
|
||||
wxFULL_REPAINT_ON_RESIZE )
|
||||
{
|
||||
m_init = false;
|
||||
m_shadow_init = false;
|
||||
|
||||
// Clear all gl list identifiers:
|
||||
for( int ii = GL_ID_BEGIN; ii < GL_ID_END; ii++ )
|
||||
m_glLists[ii] = 0;
|
||||
|
||||
m_gllist = 0;
|
||||
// Explicitly create a new rendering context instance for this canvas.
|
||||
m_glRC = new wxGLContext( this );
|
||||
|
||||
@@ -106,25 +94,12 @@ EDA_3D_CANVAS::~EDA_3D_CANVAS()
|
||||
}
|
||||
|
||||
|
||||
void EDA_3D_CANVAS::ClearLists( int aGlList )
|
||||
void EDA_3D_CANVAS::ClearLists()
|
||||
{
|
||||
if( aGlList )
|
||||
{
|
||||
if( m_glLists[aGlList] > 0 )
|
||||
glDeleteLists( m_glLists[aGlList], 1 );
|
||||
if( m_gllist > 0 )
|
||||
glDeleteLists( m_gllist, 1 );
|
||||
|
||||
m_glLists[aGlList] = 0;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
for( int ii = GL_ID_BEGIN; ii < GL_ID_END; ii++ )
|
||||
{
|
||||
if( m_glLists[ii] > 0 )
|
||||
glDeleteLists( m_glLists[ii], 1 );
|
||||
|
||||
m_glLists[ii] = 0;
|
||||
}
|
||||
m_gllist = 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -253,6 +228,8 @@ void EDA_3D_CANVAS::SetView3D( int keycode )
|
||||
|
||||
void EDA_3D_CANVAS::OnMouseWheel( wxMouseEvent& event )
|
||||
{
|
||||
wxSize size( GetClientSize() );
|
||||
|
||||
if( event.ShiftDown() )
|
||||
{
|
||||
if( event.GetWheelRotation() < 0 )
|
||||
@@ -498,69 +475,83 @@ void EDA_3D_CANVAS::OnEraseBackground( wxEraseEvent& event )
|
||||
// Do nothing, to avoid flashing.
|
||||
}
|
||||
|
||||
typedef struct s_sImage
|
||||
{
|
||||
unsigned int width;
|
||||
unsigned int height;
|
||||
unsigned int bytes_per_pixel; /* 2:RGB16, 3:RGB, 4:RGBA */
|
||||
unsigned char pixel_data[64 * 64 * 4 + 1];
|
||||
}tsImage;
|
||||
|
||||
|
||||
GLuint load_and_generate_texture( tsImage *image )
|
||||
{
|
||||
|
||||
GLuint texture;
|
||||
glPixelStorei (GL_UNPACK_ALIGNMENT, 1);
|
||||
glPixelStorei (GL_PACK_ALIGNMENT, 1);
|
||||
|
||||
glGenTextures( 1, &texture );
|
||||
glBindTexture( GL_TEXTURE_2D, texture );
|
||||
gluBuild2DMipmaps( GL_TEXTURE_2D, GL_RGBA, image->width, image->height, GL_RGBA, GL_UNSIGNED_BYTE, image->pixel_data );
|
||||
|
||||
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR );
|
||||
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
|
||||
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_MIRRORED_REPEAT);
|
||||
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_MIRRORED_REPEAT);
|
||||
|
||||
glTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE );
|
||||
return texture;
|
||||
}
|
||||
|
||||
/* Initialize broad parameters for OpenGL */
|
||||
void EDA_3D_CANVAS::InitGL()
|
||||
{
|
||||
wxSize size = GetClientSize();
|
||||
|
||||
if( !m_init )
|
||||
{
|
||||
m_init = true;
|
||||
|
||||
|
||||
m_text_pcb = load_and_generate_texture( (tsImage *)&text_pcb );
|
||||
m_text_silk = load_and_generate_texture( (tsImage *)&text_silk );
|
||||
|
||||
g_Parm_3D_Visu.m_Zoom = 1.0;
|
||||
m_ZBottom = 1.0;
|
||||
m_ZTop = 10.0;
|
||||
|
||||
glDisable( GL_CULL_FACE ); // show back faces
|
||||
|
||||
glEnable( GL_DEPTH_TEST ); // Enable z-buferring
|
||||
glEnable( GL_ALPHA_TEST );
|
||||
|
||||
glEnable( GL_LINE_SMOOTH );
|
||||
// glEnable(GL_POLYGON_SMOOTH); // creates issues with some graphic cards
|
||||
glShadeModel( GL_SMOOTH );
|
||||
glEnable( GL_COLOR_MATERIAL );
|
||||
glColorMaterial( GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE );
|
||||
|
||||
// speedups
|
||||
//glEnable( GL_DITHER );
|
||||
/* speedups */
|
||||
glEnable( GL_DITHER );
|
||||
glShadeModel( GL_SMOOTH );
|
||||
glHint( GL_PERSPECTIVE_CORRECTION_HINT, GL_DONT_CARE );
|
||||
glHint( GL_LINE_SMOOTH_HINT, GL_NICEST );
|
||||
glHint( GL_POLYGON_SMOOTH_HINT, GL_NICEST );
|
||||
glHint( GL_POLYGON_SMOOTH_HINT, GL_NICEST ); // can be GL_FASTEST
|
||||
|
||||
// Initialize alpha blending function.
|
||||
/* blend */
|
||||
glEnable( GL_BLEND );
|
||||
glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
|
||||
}
|
||||
|
||||
// set viewing projection
|
||||
|
||||
glMatrixMode( GL_PROJECTION );
|
||||
glLoadIdentity();
|
||||
|
||||
#define MAX_VIEW_ANGLE 160.0 / 45.0
|
||||
if( g_Parm_3D_Visu.m_Zoom > MAX_VIEW_ANGLE )
|
||||
g_Parm_3D_Visu.m_Zoom = MAX_VIEW_ANGLE;
|
||||
|
||||
if( Parent()->ModeIsOrtho() )
|
||||
{
|
||||
// OrthoReductionFactor is chosen so as to provide roughly the same size as
|
||||
// Perspective View
|
||||
const double orthoReductionFactor = 400 / g_Parm_3D_Visu.m_Zoom;
|
||||
|
||||
// Initialize Projection Matrix for Ortographic View
|
||||
glOrtho( -size.x / orthoReductionFactor, size.x / orthoReductionFactor,
|
||||
-size.y / orthoReductionFactor, size.y / orthoReductionFactor, 1, 10 );
|
||||
}
|
||||
else
|
||||
{
|
||||
// Ratio width / height of the window display
|
||||
double ratio_HV = (double) size.x / size.y;
|
||||
|
||||
// Initialize Projection Matrix for Perspective View
|
||||
gluPerspective( 45.0 * g_Parm_3D_Visu.m_Zoom, ratio_HV, 1, 10 );
|
||||
}
|
||||
|
||||
|
||||
// position viewer
|
||||
glMatrixMode( GL_MODELVIEW );
|
||||
glLoadIdentity();
|
||||
glTranslatef( 0.0F, 0.0F, -( m_ZBottom + m_ZTop) / 2 );
|
||||
|
||||
// clear color and depth buffers
|
||||
glClearColor( g_Parm_3D_Visu.m_BgColor.m_Red,
|
||||
g_Parm_3D_Visu.m_BgColor.m_Green,
|
||||
g_Parm_3D_Visu.m_BgColor.m_Blue, 1 );
|
||||
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
|
||||
|
||||
// Setup light sources:
|
||||
SetLights();
|
||||
|
||||
CheckGLError();
|
||||
}
|
||||
|
||||
|
||||
@@ -572,19 +563,16 @@ void EDA_3D_CANVAS::SetLights()
|
||||
|
||||
/* set viewing projection */
|
||||
light_color[3] = 1.0;
|
||||
GLfloat Z_axis_pos[4] = { 0.0, 0.0, 30.0, 0.0 };
|
||||
GLfloat lowZ_axis_pos[4] = { 0.0, 0.0, -30.0, 0.5 };
|
||||
GLfloat Z_axis_pos[4] = { 0.0, 0.0, 3.0, 0.0 };
|
||||
GLfloat lowZ_axis_pos[4] = { 0.0, 0.0, -3.0, 0.5 };
|
||||
|
||||
/* activate light */
|
||||
light = 1.0;
|
||||
light_color[0] = light_color[1] = light_color[2] = light;
|
||||
glLightfv( GL_LIGHT0, GL_POSITION, Z_axis_pos );
|
||||
glLightfv( GL_LIGHT0, GL_DIFFUSE, light_color );
|
||||
|
||||
light_color[0] = 0.3;
|
||||
light_color[1] = 0.3;
|
||||
light_color[2] = 0.4;
|
||||
|
||||
light = 0.3;
|
||||
light_color[0] = light_color[1] = light_color[2] = light;
|
||||
glLightfv( GL_LIGHT1, GL_POSITION, lowZ_axis_pos );
|
||||
glLightfv( GL_LIGHT1, GL_DIFFUSE, light_color );
|
||||
glEnable( GL_LIGHT0 ); // White spot on Z axis
|
||||
@@ -626,7 +614,7 @@ void EDA_3D_CANVAS::TakeScreenshot( wxCommandEvent& event )
|
||||
wxYield();
|
||||
}
|
||||
|
||||
struct viewport_params
|
||||
struct vieport_params
|
||||
{
|
||||
GLint originx;
|
||||
GLint originy;
|
||||
@@ -634,10 +622,6 @@ void EDA_3D_CANVAS::TakeScreenshot( wxCommandEvent& event )
|
||||
GLint y;
|
||||
} viewport;
|
||||
|
||||
// Be sure we have the latest 3D view (remember 3D view is buffered)
|
||||
Refresh();
|
||||
wxYield();
|
||||
|
||||
// Build image from the 3D buffer
|
||||
wxWindowUpdateLocker noUpdates( this );
|
||||
glGetIntegerv( GL_VIEWPORT, (GLint*) &viewport );
|
||||
@@ -655,6 +639,7 @@ void EDA_3D_CANVAS::TakeScreenshot( wxCommandEvent& event )
|
||||
viewport.x, viewport.y,
|
||||
GL_ALPHA, GL_UNSIGNED_BYTE, alphabuffer );
|
||||
|
||||
|
||||
image.SetData( pixelbuffer );
|
||||
image.SetAlpha( alphabuffer );
|
||||
image = image.Mirror( false );
|
||||
|
||||
+15
-147
@@ -31,6 +31,7 @@
|
||||
#define _3D_CANVAS_H_
|
||||
|
||||
#include <wx/glcanvas.h>
|
||||
#include <wxBasePcbFrame.h> // for m_auimanager member.
|
||||
|
||||
#ifdef __WXMAC__
|
||||
# ifdef __DARWIN__
|
||||
@@ -46,69 +47,27 @@
|
||||
|
||||
class BOARD_DESIGN_SETTINGS;
|
||||
class EDA_3D_FRAME;
|
||||
class CPOLYGONS_LIST;
|
||||
class S3D_VERTEX;
|
||||
class SEGVIA;
|
||||
|
||||
class VIA;
|
||||
class D_PAD;
|
||||
|
||||
// We are using GL lists to store layers and other items
|
||||
// to draw or not
|
||||
// GL_LIST_ID are the GL lists indexes in m_glLists
|
||||
enum GL_LIST_ID
|
||||
{
|
||||
GL_ID_BEGIN = 0,
|
||||
GL_ID_AXIS = GL_ID_BEGIN, // list id for 3D axis
|
||||
GL_ID_GRID, // list id for 3D grid
|
||||
GL_ID_BOARD, // List id for copper layers
|
||||
GL_ID_TECH_LAYERS, // List id for non copper layers (masks...)
|
||||
GL_ID_AUX_LAYERS, // List id for user layers (draw, eco, comment)
|
||||
GL_ID_3DSHAPES_SOLID_FRONT, // List id for 3D shapes, non transparent entities
|
||||
GL_ID_3DSHAPES_TRANSP_FRONT,// List id for 3D shapes, transparent entities
|
||||
GL_ID_3DSHAPES_SOLID_BACK, // List id for 3D shapes, non transparent entities
|
||||
GL_ID_3DSHAPES_TRANSP_BACK,// List id for 3D shapes, transparent entities
|
||||
GL_ID_SHADOW_FRONT,
|
||||
GL_ID_SHADOW_BACK,
|
||||
GL_ID_SHADOW_BOARD,
|
||||
GL_ID_BODY, // Body only list
|
||||
GL_ID_END
|
||||
};
|
||||
|
||||
class EDA_3D_CANVAS : public wxGLCanvas
|
||||
{
|
||||
private:
|
||||
bool m_init;
|
||||
GLuint m_glLists[GL_ID_END]; // GL lists
|
||||
GLuint m_gllist;
|
||||
wxGLContext* m_glRC;
|
||||
wxRealPoint m_draw3dOffset; // offset to draw the 3D mesh.
|
||||
wxRealPoint m_draw3dOffset; // offset to draw the 3 mesh.
|
||||
double m_ZBottom; // position of the back layer
|
||||
double m_ZTop; // position of the front layer
|
||||
|
||||
GLuint m_text_pcb;
|
||||
GLuint m_text_silk;
|
||||
|
||||
bool m_shadow_init;
|
||||
GLuint m_text_fake_shadow_front;
|
||||
GLuint m_text_fake_shadow_back;
|
||||
GLuint m_text_fake_shadow_board;
|
||||
|
||||
void Create_and_Render_Shadow_Buffer( GLuint *aDst_gl_texture,
|
||||
GLuint aTexture_size, bool aDraw_body, int aBlurPasses );
|
||||
|
||||
public:
|
||||
EDA_3D_CANVAS( EDA_3D_FRAME* parent, int* attribList = 0 );
|
||||
~EDA_3D_CANVAS();
|
||||
|
||||
EDA_3D_FRAME* Parent() const { return static_cast<EDA_3D_FRAME*>( GetParent() ); }
|
||||
EDA_3D_FRAME* Parent() { return (EDA_3D_FRAME*)GetParent(); }
|
||||
|
||||
BOARD* GetBoard() { return Parent()->GetBoard(); }
|
||||
|
||||
/**
|
||||
* Function ClearLists
|
||||
* Clear the display list.
|
||||
* @param aGlList = the list to clear.
|
||||
* if 0 (default) all lists are cleared
|
||||
*/
|
||||
void ClearLists( int aGlList = 0 );
|
||||
void ClearLists();
|
||||
|
||||
// Event functions:
|
||||
void OnPaint( wxPaintEvent& event );
|
||||
@@ -122,9 +81,10 @@ public:
|
||||
void OnEnterWindow( wxMouseEvent& event );
|
||||
|
||||
// Display functions
|
||||
GLuint DisplayCubeforTest(); // Just a test function
|
||||
void SetView3D( int keycode );
|
||||
void DisplayStatus();
|
||||
void Redraw();
|
||||
void Redraw( bool finish = false );
|
||||
void Render();
|
||||
|
||||
/**
|
||||
@@ -132,119 +92,27 @@ public:
|
||||
* Prepares the parameters of the OpenGL draw list
|
||||
* creates the OpenGL draw list items (board, grid ...
|
||||
*/
|
||||
void CreateDrawGL_List();
|
||||
GLuint CreateDrawGL_List();
|
||||
void InitGL();
|
||||
void SetLights();
|
||||
|
||||
void SetOffset(double aPosX, double aPosY)
|
||||
{
|
||||
m_draw3dOffset.x = aPosX;
|
||||
m_draw3dOffset.y = aPosY;
|
||||
}
|
||||
|
||||
private:
|
||||
/**
|
||||
* Helper function SetGLTechLayersColor
|
||||
* Initialize the color to draw the non copper layers
|
||||
* in realistic mode and normal mode.
|
||||
*/
|
||||
void SetGLTechLayersColor( LAYER_NUM aLayer );
|
||||
|
||||
/**
|
||||
* Helper function SetGLCopperColor
|
||||
* Initialize the copper color to draw the board
|
||||
* in realistic mode (a golden yellow color )
|
||||
*/
|
||||
void SetGLCopperColor();
|
||||
|
||||
/**
|
||||
* Helper function SetGLEpoxyColor
|
||||
* Initialize the color to draw the epoxy body board in realistic mode.
|
||||
*/
|
||||
void SetGLEpoxyColor( double aTransparency = 1.0 );
|
||||
|
||||
/**
|
||||
* Helper function SetGLSolderMaskColor
|
||||
* Initialize the color to draw the solder mask layers in realistic mode.
|
||||
*/
|
||||
void SetGLSolderMaskColor( double aTransparency = 1.0 );
|
||||
|
||||
/**
|
||||
* Function BuildBoard3DView
|
||||
* Called by CreateDrawGL_List()
|
||||
* Populates the OpenGL GL_ID_BOARD draw list with board items only on copper layers.
|
||||
* 3D footprint shapes, tech layers and aux layers are not on this list
|
||||
* Fills the OpenGL draw list with board items draw list.
|
||||
*/
|
||||
void BuildBoard3DView(GLuint aBoardList, GLuint aBodyOnlyList);
|
||||
void BuildBoard3DView();
|
||||
|
||||
/**
|
||||
* Function BuildTechLayers3DView
|
||||
* Called by CreateDrawGL_List()
|
||||
* Populates the OpenGL GL_ID_TECH_LAYERS draw list with items on tech layers
|
||||
*/
|
||||
void BuildTechLayers3DView();
|
||||
|
||||
/**
|
||||
* Function BuildShadowList
|
||||
* Called by CreateDrawGL_List()
|
||||
*/
|
||||
void BuildShadowList( GLuint aFrontList, GLuint aBacklist, GLuint aBoardList );
|
||||
|
||||
/**
|
||||
* Function BuildFootprintShape3DList
|
||||
* Called by CreateDrawGL_List()
|
||||
* Fills the OpenGL GL_ID_3DSHAPES_SOLID and GL_ID_3DSHAPES_TRANSP
|
||||
* draw lists with 3D footprint shapes
|
||||
* @param aOpaqueList is the gl list for non transparent items
|
||||
* @param aTransparentList is the gl list for non transparent items,
|
||||
* which need to be drawn after all other items
|
||||
*/
|
||||
void BuildFootprintShape3DList( GLuint aOpaqueList,
|
||||
GLuint aTransparentList,
|
||||
bool aSideToLoad );
|
||||
/**
|
||||
* Function BuildBoard3DAuxLayers
|
||||
* Called by CreateDrawGL_List()
|
||||
* Fills the OpenGL GL_ID_AUX_LAYERS draw list
|
||||
* with items on aux layers only
|
||||
*/
|
||||
void BuildBoard3DAuxLayers();
|
||||
|
||||
void Draw3DGrid( double aGriSizeMM );
|
||||
void Draw3DAxis();
|
||||
|
||||
/**
|
||||
* Helper function BuildPadShapeThickOutlineAsPolygon:
|
||||
* Build a pad outline as non filled polygon, to draw pads on silkscreen layer
|
||||
* with a line thickness = aWidth
|
||||
* Used only to draw pads outlines on silkscreen layers.
|
||||
*/
|
||||
void BuildPadShapeThickOutlineAsPolygon( const D_PAD* aPad,
|
||||
CPOLYGONS_LIST& aCornerBuffer,
|
||||
int aWidth,
|
||||
int aCircleToSegmentsCount,
|
||||
double aCorrectionFactor );
|
||||
|
||||
|
||||
/**
|
||||
* Helper function Draw3DViaHole:
|
||||
* Draw the via hole:
|
||||
* Build a vertical hole (a cylinder) between the first and the last via layers
|
||||
*/
|
||||
void Draw3DViaHole( const VIA * aVia );
|
||||
|
||||
/**
|
||||
* Helper function Draw3DPadHole:
|
||||
* Draw the pad hole:
|
||||
* Build a vertical hole (round or oblong) between the front and back layers
|
||||
*/
|
||||
void Draw3DPadHole( const D_PAD * aPad );
|
||||
|
||||
void GenerateFakeShadowsTextures();
|
||||
void DrawGrid( double aGriSizeMM );
|
||||
void Draw3DViaHole( SEGVIA * aVia );
|
||||
void Draw3DPadHole( D_PAD * aPad );
|
||||
|
||||
DECLARE_EVENT_TABLE()
|
||||
};
|
||||
|
||||
void CheckGLError(const char *aFileName, int aLineNumber);
|
||||
|
||||
#endif /* _3D_CANVAS_H_ */
|
||||
|
||||
+20
-68
@@ -29,37 +29,37 @@
|
||||
#include <fctsys.h>
|
||||
|
||||
#include <3d_viewer.h>
|
||||
#include <3d_struct.h>
|
||||
|
||||
|
||||
bool S3D_MASTER::IsOpenGlAllowed()
|
||||
S3D_MATERIAL::S3D_MATERIAL( S3D_MASTER* father, const wxString& name ) :
|
||||
EDA_ITEM( father, NOT_USED )
|
||||
{
|
||||
if( m_loadNonTransparentObjects ) // return true for non transparent objects only
|
||||
{
|
||||
if( m_lastTransparency == 0.0 )
|
||||
return true;
|
||||
}
|
||||
|
||||
if( m_loadTransparentObjects ) // return true for transparent objects only
|
||||
{
|
||||
if( m_lastTransparency != 0.0 )
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
m_DiffuseColor.x = m_DiffuseColor.y = m_DiffuseColor.z = 1.0;
|
||||
m_SpecularColor.x = m_SpecularColor.y = m_SpecularColor.z = 1.0;
|
||||
m_AmbientIntensity = 1.0;
|
||||
m_Transparency = 0.0;
|
||||
m_Shininess = 1.0;
|
||||
m_Name = name;
|
||||
}
|
||||
|
||||
|
||||
void S3D_MASTER::Insert( S3D_MATERIAL* aMaterial )
|
||||
void S3D_MATERIAL::SetMaterial()
|
||||
{
|
||||
aMaterial->SetNext( m_Materials );
|
||||
m_Materials = aMaterial;
|
||||
glColorMaterial( GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE );
|
||||
glColor4f( m_DiffuseColor.x * m_AmbientIntensity,
|
||||
m_DiffuseColor.y * m_AmbientIntensity,
|
||||
m_DiffuseColor.z * m_AmbientIntensity,
|
||||
1.0 - m_Transparency );
|
||||
#if 0
|
||||
glColorMaterial( GL_FRONT_AND_BACK, GL_SPECULAR );
|
||||
glColor3f( m_SpecularColor.x, m_SpecularColor.y, m_SpecularColor.z );
|
||||
#endif
|
||||
glColorMaterial( GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE );
|
||||
}
|
||||
|
||||
|
||||
void S3D_MASTER::Copy( S3D_MASTER* pattern )
|
||||
{
|
||||
SetShape3DName( pattern->GetShape3DName() );
|
||||
m_Shape3DName = pattern->m_Shape3DName;
|
||||
m_MatScale = pattern->m_MatScale;
|
||||
m_MatRotation = pattern->m_MatRotation;
|
||||
m_MatPosition = pattern->m_MatPosition;
|
||||
@@ -72,17 +72,8 @@ S3D_MASTER::S3D_MASTER( EDA_ITEM* aParent ) :
|
||||
EDA_ITEM( aParent, NOT_USED )
|
||||
{
|
||||
m_MatScale.x = m_MatScale.y = m_MatScale.z = 1.0;
|
||||
m_lastTransparency = 0.0;
|
||||
m_3D_Drawings = NULL;
|
||||
m_Materials = NULL;
|
||||
m_ShapeType = FILE3D_NONE;
|
||||
|
||||
m_use_modelfile_diffuseColor = true;
|
||||
m_use_modelfile_emissiveColor = false;
|
||||
m_use_modelfile_specularColor = false;
|
||||
m_use_modelfile_ambientIntensity = false;
|
||||
m_use_modelfile_transparency = true;
|
||||
m_use_modelfile_shininess = false;
|
||||
}
|
||||
|
||||
|
||||
@@ -105,45 +96,6 @@ S3D_MASTER:: ~S3D_MASTER()
|
||||
}
|
||||
|
||||
|
||||
bool S3D_MASTER::Is3DType( enum FILE3D_TYPE aShapeType )
|
||||
{
|
||||
// type 'none' is not valid and will always return false
|
||||
if( aShapeType == FILE3D_NONE )
|
||||
return false;
|
||||
|
||||
// no one is interested if we have no file
|
||||
if( m_Shape3DName.empty() )
|
||||
return false;
|
||||
|
||||
if( aShapeType == m_ShapeType )
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
void S3D_MASTER::SetShape3DName( const wxString& aShapeName )
|
||||
{
|
||||
m_ShapeType = FILE3D_NONE;
|
||||
m_Shape3DName = aShapeName;
|
||||
|
||||
if( m_Shape3DName.empty() )
|
||||
return;
|
||||
|
||||
wxFileName fn = m_Shape3DName;
|
||||
wxString ext = fn.GetExt();
|
||||
|
||||
if( ext == wxT( "wrl" ) || ext == wxT( "x3d" ) )
|
||||
m_ShapeType = FILE3D_VRML;
|
||||
else if( ext == wxT( "idf" ) )
|
||||
m_ShapeType = FILE3D_IDF;
|
||||
else
|
||||
m_ShapeType = FILE3D_UNKNOWN;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
STRUCT_3D_SHAPE::STRUCT_3D_SHAPE( EDA_ITEM* aParent ) :
|
||||
EDA_ITEM( aParent, NOT_USED )
|
||||
{
|
||||
|
||||
+424
-1108
File diff suppressed because it is too large
Load Diff
@@ -33,7 +33,11 @@
|
||||
#include <3d_viewer.h>
|
||||
#include <info3d_visu.h>
|
||||
#include <3d_draw_basic_functions.h>
|
||||
#include <modelparsers.h>
|
||||
|
||||
|
||||
// Imported function:
|
||||
extern void Set_Object_Data( std::vector<S3D_VERTEX>& aVertices, double aBiuTo3DUnits );
|
||||
extern void CheckGLError();
|
||||
|
||||
// Number of segments to approximate a circle by segments
|
||||
#define SEGM_PER_CIRCLE 16
|
||||
@@ -51,15 +55,14 @@ static void CALLBACK tessCPolyPt2Vertex( const GLvoid* data );
|
||||
// 2 helper functions to set the current normal vector for gle items
|
||||
static inline void SetNormalZpos()
|
||||
{
|
||||
//glNormal3f( 0.0, 0.0, 1.0 );
|
||||
glNormal3f( 0.0, 0.0, 1.0 );
|
||||
}
|
||||
|
||||
static inline void SetNormalZneg()
|
||||
{
|
||||
//glNormal3f( 0.0, 0.0, -1.0 );
|
||||
glNormal3f( 0.0, 0.0, -1.0 );
|
||||
}
|
||||
|
||||
void TransfertToGLlist( std::vector< S3D_VERTEX >& aVertices, double aBiuTo3DUnits );
|
||||
|
||||
/* Draw3D_VerticalPolygonalCylinder is a helper function.
|
||||
*
|
||||
@@ -114,12 +117,12 @@ static void Draw3D_VerticalPolygonalCylinder( const CPOLYGONS_LIST& aPolysList,
|
||||
coords[3].y = coords[2].y; // only z change
|
||||
|
||||
// Creates the GL_QUAD
|
||||
TransfertToGLlist( coords, aBiuTo3DUnits );
|
||||
Set_Object_Data( coords, aBiuTo3DUnits );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void SetGLColor( EDA_COLOR_T color, double alpha )
|
||||
void SetGLColor( EDA_COLOR_T color )
|
||||
{
|
||||
double red, green, blue;
|
||||
const StructColors &colordata = g_ColorRefs[ColorGetBase( color )];
|
||||
@@ -127,16 +130,7 @@ void SetGLColor( EDA_COLOR_T color, double alpha )
|
||||
red = colordata.m_Red / 255.0;
|
||||
blue = colordata.m_Blue / 255.0;
|
||||
green = colordata.m_Green / 255.0;
|
||||
glColor4f( red, green, blue, alpha );
|
||||
}
|
||||
|
||||
static float m_texture_scale;
|
||||
|
||||
void SetGLTexture( GLuint text_id, float scale )
|
||||
{
|
||||
glEnable( GL_TEXTURE_2D );
|
||||
glBindTexture( GL_TEXTURE_2D, text_id );
|
||||
m_texture_scale = scale;
|
||||
glColor3f( red, green, blue );
|
||||
}
|
||||
|
||||
|
||||
@@ -159,9 +153,9 @@ void Draw3D_SolidHorizontalPolyPolygons( const CPOLYGONS_LIST& aPolysList,
|
||||
gluTessCallback( tess, GLU_TESS_VERTEX, ( void (CALLBACK*) () )tessCPolyPt2Vertex );
|
||||
|
||||
GLdouble v_data[3];
|
||||
double zpos = ( aZpos + (aThickness / 2.0) ) * aBiuTo3DUnits;
|
||||
double zpos = ( aZpos + (aThickness / 2) ) * aBiuTo3DUnits;
|
||||
g_Parm_3D_Visu.m_CurrentZpos = zpos;
|
||||
v_data[2] = aZpos + (aThickness / 2.0);
|
||||
v_data[2] = aZpos + (aThickness / 2);
|
||||
|
||||
// Set normal to toward positive Z axis, for a solid object only (to draw the top side)
|
||||
if( aThickness )
|
||||
@@ -172,11 +166,9 @@ void Draw3D_SolidHorizontalPolyPolygons( const CPOLYGONS_LIST& aPolysList,
|
||||
// Draw solid areas contained in this list
|
||||
CPOLYGONS_LIST polylist = aPolysList; // temporary copy for gluTessVertex
|
||||
|
||||
int startContour;
|
||||
|
||||
for( int side = 0; side < 2; side++ )
|
||||
{
|
||||
startContour = 1;
|
||||
int startContour = 1;
|
||||
|
||||
for( unsigned ii = 0; ii < polylist.GetCornersCount(); ii++ )
|
||||
{
|
||||
@@ -187,10 +179,6 @@ void Draw3D_SolidHorizontalPolyPolygons( const CPOLYGONS_LIST& aPolysList,
|
||||
startContour = 0;
|
||||
}
|
||||
|
||||
// https://www.opengl.org/sdk/docs/man2/xhtml/gluTessNormal.xml
|
||||
gluTessNormal( tess, 0.0, 0.0, 0.0 );
|
||||
|
||||
|
||||
v_data[0] = polylist.GetX( ii ) * aBiuTo3DUnits;
|
||||
v_data[1] = -polylist.GetY( ii ) * aBiuTo3DUnits;
|
||||
// gluTessVertex store pointers on data, not data, so do not store
|
||||
@@ -199,7 +187,6 @@ void Draw3D_SolidHorizontalPolyPolygons( const CPOLYGONS_LIST& aPolysList,
|
||||
// before calling gluDeleteTess
|
||||
gluTessVertex( tess, v_data, &polylist[ii] );
|
||||
|
||||
|
||||
if( polylist.IsEndContour( ii ) )
|
||||
{
|
||||
gluTessEndContour( tess );
|
||||
@@ -212,28 +199,20 @@ void Draw3D_SolidHorizontalPolyPolygons( const CPOLYGONS_LIST& aPolysList,
|
||||
break;
|
||||
|
||||
// Prepare the bottom side of solid areas
|
||||
zpos = ( aZpos - (aThickness / 2.0) ) * aBiuTo3DUnits;
|
||||
zpos = ( aZpos - (aThickness / 2) ) * aBiuTo3DUnits;
|
||||
g_Parm_3D_Visu.m_CurrentZpos = zpos;
|
||||
v_data[2] = zpos;
|
||||
// Now;, set normal to toward negative Z axis, for the solid object bottom side
|
||||
SetNormalZneg();
|
||||
}
|
||||
|
||||
if( startContour == 0 )
|
||||
{
|
||||
gluTessEndContour( tess );
|
||||
gluTessEndPolygon( tess );
|
||||
}
|
||||
|
||||
gluDeleteTess( tess );
|
||||
|
||||
if( aThickness == 0 )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Build the 3D data : vertical side
|
||||
Draw3D_VerticalPolygonalCylinder( polylist, aThickness, aZpos - (aThickness / 2.0), false, aBiuTo3DUnits );
|
||||
Draw3D_VerticalPolygonalCylinder( polylist, aThickness, aZpos - (aThickness / 2), false, aBiuTo3DUnits );
|
||||
}
|
||||
|
||||
|
||||
@@ -422,12 +401,6 @@ void CALLBACK tessCPolyPt2Vertex( const GLvoid* data )
|
||||
// cast back to double type
|
||||
const CPolyPt* ptr = (const CPolyPt*) data;
|
||||
|
||||
if( g_Parm_3D_Visu.IsRealisticMode() && g_Parm_3D_Visu.HightQualityMode() )
|
||||
{
|
||||
glTexCoord2f( ptr->x* g_Parm_3D_Visu.m_BiuTo3Dunits * m_texture_scale,
|
||||
-ptr->y * g_Parm_3D_Visu.m_BiuTo3Dunits * m_texture_scale);
|
||||
}
|
||||
|
||||
glVertex3d( ptr->x * g_Parm_3D_Visu.m_BiuTo3Dunits,
|
||||
-ptr->y * g_Parm_3D_Visu.m_BiuTo3Dunits,
|
||||
g_Parm_3D_Visu.m_CurrentZpos );
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
* @param aThickness = thickness in board internal units
|
||||
* @param aBiuTo3DUnits = board internal units to 3D units scaling value
|
||||
* If aThickness = 0, a polygon area is drawn in a XY plane at Z position = aZpos.
|
||||
* If aThickness > 0, a solid object is drawn.
|
||||
* If aThickness 1 0, a solid object is drawn.
|
||||
* The top side is located at aZpos + aThickness / 2
|
||||
* The bottom side is located at aZpos - aThickness / 2
|
||||
*/
|
||||
@@ -118,20 +118,5 @@ void Draw3D_ZaxisCylinder( wxPoint aCenterPos, int aRadius,
|
||||
void Draw3D_ZaxisOblongCylinder( wxPoint aAxis1Pos, wxPoint aAxis2Pos,
|
||||
int aRadius, int aHeight, int aThickness,
|
||||
int aZpos, double aBiuTo3DUnits );
|
||||
/**
|
||||
* Set the current 3D color from a Kicad color, with optional transparency
|
||||
* @param aColor = a EDA_COLOR_T kicad color index
|
||||
* @param aTransparency = the color transparency (default = 1.0 = no transparency)
|
||||
*/
|
||||
void SetGLColor( EDA_COLOR_T aColor, double aTransparency = 1.0 );
|
||||
|
||||
|
||||
/**
|
||||
* Set a texture id and a scale to apply when rendering the polygons
|
||||
* @param text_id = texture ID created by glGenTextures
|
||||
* @param scale = scale to apply to texture coords
|
||||
*/
|
||||
void SetGLTexture( GLuint text_id, float scale );
|
||||
|
||||
|
||||
#endif // _3D_DRAW_BASIC_FUNCTIONS_H_
|
||||
|
||||
@@ -1,395 +0,0 @@
|
||||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 1992-2014 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* 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 General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, you may find one here:
|
||||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
* or you may search the http://www.gnu.org website for the version 2 license,
|
||||
* or you may write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file 3d_draw_helper_functions.cpp
|
||||
*/
|
||||
|
||||
#include <fctsys.h>
|
||||
|
||||
#include <PolyLine.h>
|
||||
#include <colors.h>
|
||||
#include <colors_selection.h>
|
||||
#include <class_pad.h>
|
||||
#include <class_track.h>
|
||||
|
||||
#include <convert_basic_shapes_to_polygon.h>
|
||||
|
||||
#include <3d_viewer.h>
|
||||
#include <3d_canvas.h>
|
||||
#include <info3d_visu.h>
|
||||
#include <3d_draw_basic_functions.h>
|
||||
|
||||
|
||||
// Helper function: initialize the copper color to draw the board
|
||||
// in realistic mode.
|
||||
void EDA_3D_CANVAS::SetGLCopperColor()
|
||||
{
|
||||
glDisable( GL_TEXTURE_2D );
|
||||
|
||||
// Generates a golden yellow color, near board "copper" color
|
||||
const double lum = 0.7/255.0;
|
||||
glColor4f( 255.0*lum, 223.0*lum, 0.0*lum, 1.0 );
|
||||
}
|
||||
|
||||
// Helper function: initialize the color to draw the epoxy
|
||||
// body board in realistic mode.
|
||||
void EDA_3D_CANVAS::SetGLEpoxyColor( double aTransparency )
|
||||
{
|
||||
// Generates an epoxy color, near board color
|
||||
const double lum = 0.2/255.0;
|
||||
glColor4f( 255.0*lum, 218.0*lum, 110.0*lum, aTransparency );
|
||||
}
|
||||
|
||||
// Helper function: initialize the color to draw the
|
||||
// solder mask layers in realistic mode.
|
||||
void EDA_3D_CANVAS::SetGLSolderMaskColor( double aTransparency )
|
||||
{
|
||||
// Generates a solder mask color
|
||||
const double lum = 0.2/255.0;
|
||||
glColor4f( 100.0*lum, 255.0*lum, 180.0*lum, aTransparency );
|
||||
}
|
||||
|
||||
// Helper function: initialize the color to draw the non copper layers
|
||||
// in realistic mode and normal mode.
|
||||
void EDA_3D_CANVAS::SetGLTechLayersColor( LAYER_NUM aLayer )
|
||||
{
|
||||
EDA_COLOR_T color;
|
||||
|
||||
if( g_Parm_3D_Visu.IsRealisticMode() )
|
||||
{
|
||||
switch( aLayer )
|
||||
{
|
||||
case B_Paste:
|
||||
case F_Paste:
|
||||
SetGLColor( DARKGRAY, 0.7 );
|
||||
break;
|
||||
|
||||
case B_SilkS:
|
||||
case F_SilkS:
|
||||
SetGLColor( LIGHTGRAY, 0.9 );
|
||||
if( g_Parm_3D_Visu.HightQualityMode() )
|
||||
{
|
||||
SetGLTexture( m_text_silk, 50.0f );
|
||||
}
|
||||
break;
|
||||
|
||||
case B_Mask:
|
||||
case F_Mask:
|
||||
SetGLSolderMaskColor( 0.7 );
|
||||
if( g_Parm_3D_Visu.HightQualityMode() )
|
||||
{
|
||||
SetGLTexture( m_text_pcb, 35.0f );
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
color = g_ColorsSettings.GetLayerColor( aLayer );
|
||||
SetGLColor( color, 0.7 );
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
color = g_ColorsSettings.GetLayerColor( aLayer );
|
||||
SetGLColor( color, 0.7 );
|
||||
}
|
||||
}
|
||||
|
||||
void EDA_3D_CANVAS::Draw3DAxis()
|
||||
{
|
||||
if( ! m_glLists[GL_ID_AXIS] )
|
||||
{
|
||||
m_glLists[GL_ID_AXIS] = glGenLists( 1 );
|
||||
glNewList( m_glLists[GL_ID_AXIS], GL_COMPILE );
|
||||
|
||||
glEnable( GL_COLOR_MATERIAL );
|
||||
SetGLColor( WHITE );
|
||||
glBegin( GL_LINES );
|
||||
glNormal3f( 0.0f, 0.0f, 1.0f ); // Normal is Z axis
|
||||
glVertex3f( 0.0f, 0.0f, 0.0f );
|
||||
glVertex3f( 1.0f, 0.0f, 0.0f ); // X axis
|
||||
glVertex3f( 0.0f, 0.0f, 0.0f );
|
||||
glVertex3f( 0.0f, -1.0f, 0.0f ); // Y axis
|
||||
glNormal3f( 1.0f, 0.0f, 0.0f ); // Normal is Y axis
|
||||
glVertex3f( 0.0f, 0.0f, 0.0f );
|
||||
glVertex3f( 0.0f, 0.0f, 0.3f ); // Z axis
|
||||
glEnd();
|
||||
|
||||
glEndList();
|
||||
}
|
||||
}
|
||||
|
||||
// draw a 3D grid: an horizontal grid (XY plane and Z = 0,
|
||||
// and a vertical grid (XZ plane and Y = 0)
|
||||
void EDA_3D_CANVAS::Draw3DGrid( double aGriSizeMM )
|
||||
{
|
||||
double zpos = 0.0;
|
||||
EDA_COLOR_T gridcolor = DARKGRAY; // Color of grid lines
|
||||
EDA_COLOR_T gridcolor_marker = LIGHTGRAY; // Color of grid lines every 5 lines
|
||||
const double scale = g_Parm_3D_Visu.m_BiuTo3Dunits;
|
||||
const double transparency = 0.3;
|
||||
|
||||
glNormal3f( 0.0, 0.0, 1.0 );
|
||||
|
||||
wxSize brd_size = g_Parm_3D_Visu.m_BoardSize;
|
||||
wxPoint brd_center_pos = g_Parm_3D_Visu.m_BoardPos;
|
||||
NEGATE( brd_center_pos.y );
|
||||
|
||||
int xsize = std::max( brd_size.x, Millimeter2iu( 100 ) );
|
||||
int ysize = std::max( brd_size.y, Millimeter2iu( 100 ) );
|
||||
|
||||
// Grid limits, in 3D units
|
||||
double xmin = (brd_center_pos.x - xsize / 2) * scale;
|
||||
double xmax = (brd_center_pos.x + xsize / 2) * scale;
|
||||
double ymin = (brd_center_pos.y - ysize / 2) * scale;
|
||||
double ymax = (brd_center_pos.y + ysize / 2) * scale;
|
||||
double zmin = Millimeter2iu( -50 ) * scale;
|
||||
double zmax = Millimeter2iu( 100 ) * scale;
|
||||
|
||||
// Draw horizontal grid centered on 3D origin (center of the board)
|
||||
for( int ii = 0; ; ii++ )
|
||||
{
|
||||
if( (ii % 5) )
|
||||
SetGLColor( gridcolor, transparency );
|
||||
else
|
||||
SetGLColor( gridcolor_marker, transparency );
|
||||
|
||||
int delta = KiROUND( ii * aGriSizeMM * IU_PER_MM );
|
||||
|
||||
if( delta <= xsize / 2 ) // Draw grid lines parallel to X axis
|
||||
{
|
||||
glBegin( GL_LINES );
|
||||
glVertex3f( (brd_center_pos.x + delta) * scale, -ymin, zpos );
|
||||
glVertex3f( (brd_center_pos.x + delta) * scale, -ymax, zpos );
|
||||
glEnd();
|
||||
|
||||
if( ii != 0 )
|
||||
{
|
||||
glBegin( GL_LINES );
|
||||
glVertex3f( (brd_center_pos.x - delta) * scale, -ymin, zpos );
|
||||
glVertex3f( (brd_center_pos.x - delta) * scale, -ymax, zpos );
|
||||
glEnd();
|
||||
}
|
||||
}
|
||||
|
||||
if( delta <= ysize / 2 ) // Draw grid lines parallel to Y axis
|
||||
{
|
||||
glBegin( GL_LINES );
|
||||
glVertex3f( xmin, -(brd_center_pos.y + delta) * scale, zpos );
|
||||
glVertex3f( xmax, -(brd_center_pos.y + delta) * scale, zpos );
|
||||
glEnd();
|
||||
|
||||
if( ii != 0 )
|
||||
{
|
||||
glBegin( GL_LINES );
|
||||
glVertex3f( xmin, -(brd_center_pos.y - delta) * scale, zpos );
|
||||
glVertex3f( xmax, -(brd_center_pos.y - delta) * scale, zpos );
|
||||
glEnd();
|
||||
}
|
||||
}
|
||||
|
||||
if( ( delta > ysize / 2 ) && ( delta > xsize / 2 ) )
|
||||
break;
|
||||
}
|
||||
|
||||
// Draw vertical grid n Z axis
|
||||
glNormal3f( 0.0, -1.0, 0.0 );
|
||||
|
||||
// Draw vertical grid lines (parallel to Z axis)
|
||||
for( int ii = 0; ; ii++ )
|
||||
{
|
||||
if( (ii % 5) )
|
||||
SetGLColor( gridcolor, transparency );
|
||||
else
|
||||
SetGLColor( gridcolor_marker, transparency );
|
||||
|
||||
double delta = ii * aGriSizeMM * IU_PER_MM;
|
||||
|
||||
glBegin( GL_LINES );
|
||||
glVertex3f( (brd_center_pos.x + delta) * scale, -brd_center_pos.y * scale, zmin );
|
||||
glVertex3f( (brd_center_pos.x + delta) * scale, -brd_center_pos.y * scale, zmax );
|
||||
glEnd();
|
||||
|
||||
if( ii != 0 )
|
||||
{
|
||||
glBegin( GL_LINES );
|
||||
glVertex3f( (brd_center_pos.x - delta) * scale, -brd_center_pos.y * scale, zmin );
|
||||
glVertex3f( (brd_center_pos.x - delta) * scale, -brd_center_pos.y * scale, zmax );
|
||||
glEnd();
|
||||
}
|
||||
|
||||
if( delta > xsize / 2 )
|
||||
break;
|
||||
}
|
||||
|
||||
// Draw horizontal grid lines on Z axis
|
||||
for( int ii = 0; ; ii++ )
|
||||
{
|
||||
if( (ii % 5) )
|
||||
SetGLColor( gridcolor, transparency);
|
||||
else
|
||||
SetGLColor( gridcolor_marker, transparency );
|
||||
|
||||
double delta = ii * aGriSizeMM * IU_PER_MM * scale;
|
||||
|
||||
if( delta <= zmax )
|
||||
{
|
||||
// Draw grid lines on Z axis (positive Z axis coordinates)
|
||||
glBegin( GL_LINES );
|
||||
glVertex3f( xmin, -brd_center_pos.y * scale, delta );
|
||||
glVertex3f( xmax, -brd_center_pos.y * scale, delta );
|
||||
glEnd();
|
||||
}
|
||||
|
||||
if( delta <= -zmin && ( ii != 0 ) )
|
||||
{
|
||||
// Draw grid lines on Z axis (negative Z axis coordinates)
|
||||
glBegin( GL_LINES );
|
||||
glVertex3f( xmin, -brd_center_pos.y * scale, -delta );
|
||||
glVertex3f( xmax, -brd_center_pos.y * scale, -delta );
|
||||
glEnd();
|
||||
}
|
||||
|
||||
if( ( delta > zmax ) && ( delta > -zmin ) )
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Draw 3D pads.
|
||||
void EDA_3D_CANVAS::Draw3DPadHole( const D_PAD* aPad )
|
||||
{
|
||||
// Draw the pad hole
|
||||
wxSize drillsize = aPad->GetDrillSize();
|
||||
bool hasHole = drillsize.x && drillsize.y;
|
||||
|
||||
if( !hasHole )
|
||||
return;
|
||||
|
||||
// Store here the points to approximate hole by segments
|
||||
CPOLYGONS_LIST holecornersBuffer;
|
||||
int thickness = g_Parm_3D_Visu.GetCopperThicknessBIU();
|
||||
int height = g_Parm_3D_Visu.GetLayerZcoordBIU( F_Cu ) -
|
||||
g_Parm_3D_Visu.GetLayerZcoordBIU( B_Cu );
|
||||
|
||||
if( g_Parm_3D_Visu.IsRealisticMode() )
|
||||
SetGLCopperColor();
|
||||
else
|
||||
SetGLColor( DARKGRAY );
|
||||
|
||||
int holeZpoz = g_Parm_3D_Visu.GetLayerZcoordBIU( B_Cu ) + thickness / 2;
|
||||
int holeHeight = height - thickness;
|
||||
|
||||
if( drillsize.x == drillsize.y ) // usual round hole
|
||||
{
|
||||
Draw3D_ZaxisCylinder( aPad->GetPosition(),
|
||||
(drillsize.x + thickness) / 2, holeHeight,
|
||||
thickness, holeZpoz, g_Parm_3D_Visu.m_BiuTo3Dunits );
|
||||
}
|
||||
else // Oblong hole
|
||||
{
|
||||
wxPoint ends_offset;
|
||||
int width;
|
||||
|
||||
if( drillsize.x > drillsize.y ) // Horizontal oval
|
||||
{
|
||||
ends_offset.x = ( drillsize.x - drillsize.y ) / 2;
|
||||
width = drillsize.y;
|
||||
}
|
||||
else // Vertical oval
|
||||
{
|
||||
ends_offset.y = ( drillsize.y - drillsize.x ) / 2;
|
||||
width = drillsize.x;
|
||||
}
|
||||
|
||||
RotatePoint( &ends_offset, aPad->GetOrientation() );
|
||||
|
||||
wxPoint start = aPad->GetPosition() + ends_offset;
|
||||
wxPoint end = aPad->GetPosition() - ends_offset;
|
||||
int hole_radius = ( width + thickness ) / 2;
|
||||
|
||||
// Draw the hole
|
||||
Draw3D_ZaxisOblongCylinder( start, end, hole_radius, holeHeight,
|
||||
thickness, holeZpoz, g_Parm_3D_Visu.m_BiuTo3Dunits );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void EDA_3D_CANVAS::Draw3DViaHole( const VIA* aVia )
|
||||
{
|
||||
LAYER_ID top_layer, bottom_layer;
|
||||
int inner_radius = aVia->GetDrillValue() / 2;
|
||||
int thickness = g_Parm_3D_Visu.GetCopperThicknessBIU();
|
||||
|
||||
aVia->LayerPair( &top_layer, &bottom_layer );
|
||||
|
||||
// Drawing via hole:
|
||||
if( g_Parm_3D_Visu.IsRealisticMode() )
|
||||
SetGLCopperColor();
|
||||
else
|
||||
{
|
||||
EDA_COLOR_T color = g_ColorsSettings.GetItemColor( VIAS_VISIBLE + aVia->GetViaType() );
|
||||
SetGLColor( color );
|
||||
}
|
||||
|
||||
int height = g_Parm_3D_Visu.GetLayerZcoordBIU( top_layer ) -
|
||||
g_Parm_3D_Visu.GetLayerZcoordBIU( bottom_layer ) - thickness;
|
||||
int zpos = g_Parm_3D_Visu.GetLayerZcoordBIU( bottom_layer ) + thickness / 2;
|
||||
|
||||
Draw3D_ZaxisCylinder( aVia->GetStart(), inner_radius + thickness / 2, height,
|
||||
thickness, zpos, g_Parm_3D_Visu.m_BiuTo3Dunits );
|
||||
}
|
||||
|
||||
/* Build a pad outline as non filled polygon, to draw pads on silkscreen layer
|
||||
* Used only to draw pads outlines on silkscreen layers.
|
||||
*/
|
||||
void EDA_3D_CANVAS::BuildPadShapeThickOutlineAsPolygon( const D_PAD* aPad,
|
||||
CPOLYGONS_LIST& aCornerBuffer,
|
||||
int aWidth,
|
||||
int aCircleToSegmentsCount,
|
||||
double aCorrectionFactor )
|
||||
{
|
||||
if( aPad->GetShape() == PAD_CIRCLE ) // Draw a ring
|
||||
{
|
||||
TransformRingToPolygon( aCornerBuffer, aPad->ShapePos(),
|
||||
aPad->GetSize().x / 2, aCircleToSegmentsCount, aWidth );
|
||||
return;
|
||||
}
|
||||
|
||||
// For other shapes, draw polygon outlines
|
||||
CPOLYGONS_LIST corners;
|
||||
aPad->BuildPadShapePolygon( corners, wxSize( 0, 0 ),
|
||||
aCircleToSegmentsCount, aCorrectionFactor );
|
||||
|
||||
// Add outlines as thick segments in polygon buffer
|
||||
for( unsigned ii = 0, jj = corners.GetCornersCount() - 1;
|
||||
ii < corners.GetCornersCount(); jj = ii, ii++ )
|
||||
{
|
||||
TransformRoundedEndsSegmentToPolygon( aCornerBuffer,
|
||||
corners.GetPos( jj ),
|
||||
corners.GetPos( ii ),
|
||||
aCircleToSegmentsCount, aWidth );
|
||||
}
|
||||
}
|
||||
|
||||
+136
-230
@@ -26,8 +26,7 @@
|
||||
*/
|
||||
|
||||
#include <fctsys.h>
|
||||
#include <kiface_i.h>
|
||||
#include <pgm_base.h>
|
||||
#include <appl_wxstruct.h>
|
||||
|
||||
#include <3d_viewer.h>
|
||||
#include <3d_canvas.h>
|
||||
@@ -35,33 +34,31 @@
|
||||
#include <trackball.h>
|
||||
|
||||
#include <wx/colordlg.h>
|
||||
#include <wxstruct.h>
|
||||
#include <3d_viewer_id.h>
|
||||
#include <wxBasePcbFrame.h>
|
||||
|
||||
INFO3D_VISU g_Parm_3D_Visu;
|
||||
|
||||
// Key to store 3D Viewer config:
|
||||
static const wxChar keyBgColor_Red[] = wxT( "BgColor_Red" );
|
||||
static const wxChar keyBgColor_Green[] = wxT( "BgColor_Green" );
|
||||
static const wxChar keyBgColor_Blue[] = wxT( "BgColor_Blue" );
|
||||
static const wxChar keyShowRealisticMode[] = wxT( "ShowRealisticMode" );
|
||||
static const wxChar keyUseHQinRealisticMode[] = wxT( "UseHQinRealisticMode" );
|
||||
static const wxChar keyShowAxis[] = wxT( "ShowAxis" );
|
||||
static const wxChar keyShowGrid[] = wxT( "ShowGrid3D" );
|
||||
static const wxChar keyShowGridSize[] = wxT( "Grid3DSize" );
|
||||
static const wxChar keyShowZones[] = wxT( "ShowZones" );
|
||||
static const wxChar keyShowFootprints[] = wxT( "ShowFootprints" );
|
||||
static const wxChar keyShowCopperThickness[] = wxT( "ShowCopperThickness" );
|
||||
static const wxChar keyShowAdhesiveLayers[] = wxT( "ShowAdhesiveLayers" );
|
||||
static const wxChar keyShowSilkScreenLayers[] = wxT( "ShowSilkScreenLayers" );
|
||||
static const wxChar keyShowSolderMaskLayers[] = wxT( "ShowSolderMasLayers" );
|
||||
static const wxChar keyShowSolderPasteLayers[] =wxT( "ShowSolderPasteLayers" );
|
||||
static const wxChar keyShowCommentsLayer[] = wxT( "ShowCommentsLayers" );
|
||||
static const wxChar keyShowBoardBody[] = wxT( "ShowBoardBody" );
|
||||
static const wxChar keyShowEcoLayers[] = wxT( "ShowEcoLayers" );
|
||||
static const wxString keyPosx( wxT( "Pos_x" ) );
|
||||
static const wxString keyPosy( wxT( "Pos_y" ) );
|
||||
static const wxString keySizex( wxT( "Size_x" ) );
|
||||
static const wxString keySizey( wxT( "Size_y" ) );
|
||||
static const wxString keyBgColor_Red( wxT( "BgColor_Red" ) );
|
||||
static const wxString keyBgColor_Green( wxT( "BgColor_Green" ) );
|
||||
static const wxString keyBgColor_Blue( wxT( "BgColor_Blue" ) );
|
||||
static const wxString keyShowAxis( wxT( "ShowAxis" ) );
|
||||
static const wxString keyShowZones( wxT( "ShowZones" ) );
|
||||
static const wxString keyShowFootprints( wxT( "ShowFootprints" ) );
|
||||
static const wxString keyShowCopperThickness( wxT( "ShowCopperThickness" ) );
|
||||
static const wxString keyShowAdhesiveLayers( wxT( "ShowAdhesiveLayers" ) );
|
||||
static const wxString keyShowSilkScreenLayers( wxT( "ShowSilkScreenLayers" ) );
|
||||
static const wxString keyShowSolderMaskLayers( wxT( "ShowSolderMasLayers" ) );
|
||||
static const wxString keyShowSolderPasteLayers( wxT( "ShowSolderPasteLayers" ) );
|
||||
static const wxString keyShowCommentsLayer( wxT( "ShowCommentsLayers" ) );
|
||||
static const wxString keyShowEcoLayers( wxT( "ShowEcoLayers" ) );
|
||||
|
||||
|
||||
BEGIN_EVENT_TABLE( EDA_3D_FRAME, EDA_BASE_FRAME )
|
||||
BEGIN_EVENT_TABLE( EDA_3D_FRAME, wxFrame )
|
||||
EVT_ACTIVATE( EDA_3D_FRAME::OnActivate )
|
||||
|
||||
EVT_TOOL_RANGE( ID_ZOOM_IN, ID_ZOOM_PAGE, EDA_3D_FRAME::Process_Zoom )
|
||||
@@ -77,15 +74,15 @@ EVT_MENU_RANGE( ID_MENU3D_GRID, ID_MENU3D_GRID_END,
|
||||
|
||||
EVT_CLOSE( EDA_3D_FRAME::OnCloseWindow )
|
||||
|
||||
END_EVENT_TABLE()
|
||||
|
||||
|
||||
EDA_3D_FRAME::EDA_3D_FRAME( KIWAY* aKiway, PCB_BASE_FRAME* aParent,
|
||||
const wxString& aTitle, long style ) :
|
||||
KIWAY_PLAYER( aKiway, aParent, FRAME_PCB_DISPLAY3D, aTitle,
|
||||
wxDefaultPosition, wxDefaultSize, style, wxT( "Frame3D" ) )
|
||||
END_EVENT_TABLE() EDA_3D_FRAME::EDA_3D_FRAME( PCB_BASE_FRAME* parent,
|
||||
const wxString& title,
|
||||
long style ) :
|
||||
wxFrame( parent, DISPLAY3D_FRAME_TYPE, title, wxDefaultPosition, wxDefaultSize, style )
|
||||
{
|
||||
m_frameName = wxT( "Frame3D" );
|
||||
m_canvas = NULL;
|
||||
m_HToolBar = NULL;
|
||||
m_VToolBar = NULL;
|
||||
m_reloadRequest = false;
|
||||
m_ortho = false;
|
||||
|
||||
@@ -94,8 +91,8 @@ EDA_3D_FRAME::EDA_3D_FRAME( KIWAY* aKiway, PCB_BASE_FRAME* aParent,
|
||||
icon.CopyFromBitmap( KiBitmap( icon_3d_xpm ) );
|
||||
SetIcon( icon );
|
||||
|
||||
LoadSettings( config() );
|
||||
SetSize( m_FramePos.x, m_FramePos.y, m_FrameSize.x, m_FrameSize.y );
|
||||
GetSettings();
|
||||
SetSize( m_framePos.x, m_framePos.y, m_frameSize.x, m_frameSize.y );
|
||||
|
||||
// Create the status line
|
||||
static const int dims[5] = { -1, 100, 100, 100, 140 };
|
||||
@@ -104,85 +101,23 @@ EDA_3D_FRAME::EDA_3D_FRAME( KIWAY* aKiway, PCB_BASE_FRAME* aParent,
|
||||
SetStatusWidths( 5, dims );
|
||||
|
||||
CreateMenuBar();
|
||||
ReCreateMainToolbar();
|
||||
ReCreateHToolbar();
|
||||
|
||||
// ReCreateAuxiliaryToolbar();
|
||||
ReCreateVToolbar();
|
||||
|
||||
// Make a EDA_3D_CANVAS
|
||||
// Note: We try to use anti aliasing if the graphic card allows that,
|
||||
// but only on wxWidgets >= 3.0.0 (this option does not exist on wxWidgets 2.8)
|
||||
int attrs[] = { // This array should be 2*n+1
|
||||
// Sadly wxwidgets / glx < 13 allowed
|
||||
// a thing named "boolean attributes" that don't take a value.
|
||||
// (See src/unix/glx11.cpp -> wxGLCanvasX11::ConvertWXAttrsToGL() ).
|
||||
// To avoid problems due to this, just specify those attributes twice.
|
||||
// Only WX_GL_RGBA, WX_GL_DOUBLEBUFFER, WX_GL_STEREO are such boolean
|
||||
// attributes.
|
||||
|
||||
// Boolean attributes (using itself at padding):
|
||||
WX_GL_RGBA, WX_GL_RGBA,
|
||||
WX_GL_DOUBLEBUFFER, WX_GL_DOUBLEBUFFER,
|
||||
|
||||
// Normal attributes with values:
|
||||
WX_GL_DEPTH_SIZE, 16,
|
||||
WX_GL_STENCIL_SIZE, 1,
|
||||
#if wxCHECK_VERSION( 3, 0, 0 )
|
||||
WX_GL_SAMPLE_BUFFERS, 1, // Enable multisampling support (antialiasing).
|
||||
WX_GL_SAMPLES, 0, // Disable AA for the start.
|
||||
#endif
|
||||
0 }; // NULL termination
|
||||
|
||||
|
||||
#if wxCHECK_VERSION( 3, 0, 0 )
|
||||
|
||||
unsigned int ii;
|
||||
|
||||
// Check if the canvas supports multisampling.
|
||||
if( EDA_3D_CANVAS::IsDisplaySupported( attrs ) )
|
||||
{
|
||||
// Check for possible sample sizes, start form the top.
|
||||
int maxSamples = 8; // Any higher doesn't change anything.
|
||||
int samplesOffset = 0;
|
||||
|
||||
for( ii = 0; ii < sizeof( attrs ) / sizeof( attrs[0] ) - 1; ii += 2 )
|
||||
{
|
||||
if( attrs[ii] == WX_GL_SAMPLES )
|
||||
{
|
||||
samplesOffset = ii+1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
attrs[samplesOffset] = maxSamples;
|
||||
|
||||
for( ; maxSamples > 0 && !EDA_3D_CANVAS::IsDisplaySupported( attrs );
|
||||
maxSamples = maxSamples>>1 )
|
||||
{
|
||||
attrs[samplesOffset] = maxSamples;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Disable multisampling
|
||||
for( ii = 0; ii < sizeof( attrs ) / sizeof( attrs[0] ) - 1; ii += 2 )
|
||||
{
|
||||
if( attrs[ii] == WX_GL_SAMPLE_BUFFERS )
|
||||
{
|
||||
attrs[ii+1] = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
int attrs[] = { WX_GL_RGBA, WX_GL_DOUBLEBUFFER, WX_GL_DEPTH_SIZE, 16, 0 };
|
||||
m_canvas = new EDA_3D_CANVAS( this, attrs );
|
||||
|
||||
m_auimgr.SetManagedWindow( this );
|
||||
|
||||
|
||||
EDA_PANEINFO horiztb;
|
||||
horiztb.HorizontalToolbarPane();
|
||||
EDA_PANEINFO horiz;
|
||||
horiz.HorizontalToolbarPane();
|
||||
|
||||
m_auimgr.AddPane( m_mainToolBar,
|
||||
wxAuiPaneInfo( horiztb ).Name( wxT( "m_mainToolBar" ) ).Top() );
|
||||
m_auimgr.AddPane( m_HToolBar,
|
||||
wxAuiPaneInfo( horiz ).Name( wxT( "m_HToolBar" ) ).Top() );
|
||||
|
||||
m_auimgr.AddPane( m_canvas,
|
||||
wxAuiPaneInfo().Name( wxT( "DrawFrame" ) ).CentrePane() );
|
||||
@@ -204,6 +139,8 @@ void EDA_3D_FRAME::Exit3DFrame( wxCommandEvent& event )
|
||||
|
||||
void EDA_3D_FRAME::OnCloseWindow( wxCloseEvent& Event )
|
||||
{
|
||||
SaveSettings();
|
||||
|
||||
if( Parent() )
|
||||
Parent()->m_Draw3DFrame = NULL;
|
||||
|
||||
@@ -211,88 +148,78 @@ void EDA_3D_FRAME::OnCloseWindow( wxCloseEvent& Event )
|
||||
}
|
||||
|
||||
|
||||
void EDA_3D_FRAME::LoadSettings( wxConfigBase* aCfg )
|
||||
void EDA_3D_FRAME::GetSettings()
|
||||
{
|
||||
EDA_BASE_FRAME::LoadSettings( aCfg );
|
||||
wxString text;
|
||||
wxConfig* config = wxGetApp().GetSettings(); // Current config used by application
|
||||
|
||||
INFO3D_VISU& prms = g_Parm_3D_Visu;
|
||||
|
||||
aCfg->Read( keyBgColor_Red, &g_Parm_3D_Visu.m_BgColor.m_Red, 0.0 );
|
||||
aCfg->Read( keyBgColor_Green, &g_Parm_3D_Visu.m_BgColor.m_Green, 0.0 );
|
||||
aCfg->Read( keyBgColor_Blue, &g_Parm_3D_Visu.m_BgColor.m_Blue, 0.0 );
|
||||
|
||||
bool tmp;
|
||||
aCfg->Read( keyShowRealisticMode, &tmp, false );
|
||||
prms.SetFlag( FL_USE_REALISTIC_MODE, tmp );
|
||||
|
||||
aCfg->Read( keyUseHQinRealisticMode, &tmp, false );
|
||||
prms.SetFlag( FL_USE_MAXQUALITY_IN_REALISTIC_MODE, tmp );
|
||||
|
||||
aCfg->Read( keyShowAxis, &tmp, true );
|
||||
prms.SetFlag( FL_AXIS, tmp );
|
||||
|
||||
aCfg->Read( keyShowGrid, &tmp, true );
|
||||
prms.SetFlag( FL_GRID, tmp );
|
||||
|
||||
aCfg->Read( keyShowGridSize, &prms.m_3D_Grid, 10.0 );
|
||||
prms.SetFlag( FL_MODULE, tmp );
|
||||
|
||||
aCfg->Read( keyShowFootprints, &tmp, true );
|
||||
prms.SetFlag( FL_MODULE, tmp );
|
||||
|
||||
aCfg->Read( keyShowCopperThickness, &tmp, false );
|
||||
prms.SetFlag( FL_USE_COPPER_THICKNESS, tmp );
|
||||
|
||||
aCfg->Read( keyShowZones, &tmp, true );
|
||||
prms.SetFlag( FL_ZONE, tmp );
|
||||
|
||||
aCfg->Read( keyShowAdhesiveLayers, &tmp, true );
|
||||
prms.SetFlag( FL_ADHESIVE, tmp );
|
||||
|
||||
aCfg->Read( keyShowSilkScreenLayers, &tmp, true );
|
||||
prms.SetFlag( FL_SILKSCREEN, tmp );
|
||||
|
||||
aCfg->Read( keyShowSolderMaskLayers, &tmp, true );
|
||||
prms.SetFlag( FL_SOLDERMASK, tmp );
|
||||
|
||||
aCfg->Read( keyShowSolderPasteLayers, &tmp, true );
|
||||
prms.SetFlag( FL_SOLDERPASTE, tmp );
|
||||
|
||||
aCfg->Read( keyShowCommentsLayer, &tmp, true );
|
||||
prms.SetFlag( FL_COMMENTS, tmp );
|
||||
|
||||
aCfg->Read( keyShowEcoLayers, &tmp, true );
|
||||
prms.SetFlag( FL_ECO, tmp );
|
||||
|
||||
aCfg->Read( keyShowBoardBody, &tmp, true );
|
||||
prms.SetFlag( FL_SHOW_BOARD_BODY, tmp );
|
||||
if( config )
|
||||
{
|
||||
text = m_frameName + keyPosx;
|
||||
config->Read( text, &m_framePos.x );
|
||||
text = m_frameName + keyPosy;
|
||||
config->Read( text, &m_framePos.y );
|
||||
text = m_frameName + keySizex;
|
||||
config->Read( text, &m_frameSize.x, 600 );
|
||||
text = m_frameName + keySizey;
|
||||
config->Read( text, &m_frameSize.y, 400 );
|
||||
config->Read( keyBgColor_Red, &g_Parm_3D_Visu.m_BgColor.m_Red, 0.0 );
|
||||
config->Read( keyBgColor_Green, &g_Parm_3D_Visu.m_BgColor.m_Green, 0.0 );
|
||||
config->Read( keyBgColor_Blue, &g_Parm_3D_Visu.m_BgColor.m_Blue, 0.0 );
|
||||
class INFO3D_VISU& prms = g_Parm_3D_Visu;
|
||||
config->Read( keyShowAxis, &prms.m_DrawFlags[prms.FL_AXIS], true );
|
||||
config->Read( keyShowFootprints, &prms.m_DrawFlags[prms.FL_MODULE], true );
|
||||
config->Read( keyShowCopperThickness,
|
||||
&prms.m_DrawFlags[prms.FL_USE_COPPER_THICKNESS],
|
||||
false );
|
||||
config->Read( keyShowZones, &prms.m_DrawFlags[prms.FL_ZONE], true );
|
||||
config->Read( keyShowAdhesiveLayers, &prms.m_DrawFlags[prms.FL_ADHESIVE], true );
|
||||
config->Read( keyShowSilkScreenLayers, &prms.m_DrawFlags[prms.FL_SILKSCREEN], true );
|
||||
config->Read( keyShowSolderMaskLayers, &prms.m_DrawFlags[prms.FL_SOLDERMASK], true );
|
||||
config->Read( keyShowSolderPasteLayers, &prms.m_DrawFlags[prms.FL_SOLDERPASTE], true );
|
||||
config->Read( keyShowCommentsLayer, &prms.m_DrawFlags[prms.FL_COMMENTS], true );
|
||||
config->Read( keyShowEcoLayers, &prms.m_DrawFlags[prms.FL_ECO], true );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void EDA_3D_FRAME::SaveSettings( wxConfigBase* aCfg )
|
||||
void EDA_3D_FRAME::SaveSettings()
|
||||
{
|
||||
EDA_BASE_FRAME::SaveSettings( aCfg );
|
||||
wxString text;
|
||||
wxConfig* config = wxGetApp().GetSettings(); // Current config used by application
|
||||
|
||||
INFO3D_VISU& prms = g_Parm_3D_Visu;
|
||||
if( !config )
|
||||
return;
|
||||
|
||||
aCfg->Write( keyBgColor_Red, g_Parm_3D_Visu.m_BgColor.m_Red );
|
||||
aCfg->Write( keyBgColor_Green, g_Parm_3D_Visu.m_BgColor.m_Green );
|
||||
aCfg->Write( keyBgColor_Blue, g_Parm_3D_Visu.m_BgColor.m_Blue );
|
||||
aCfg->Write( keyShowRealisticMode, prms.GetFlag( FL_USE_REALISTIC_MODE ) );
|
||||
aCfg->Write( keyUseHQinRealisticMode, prms.GetFlag( FL_USE_MAXQUALITY_IN_REALISTIC_MODE ) );
|
||||
aCfg->Write( keyShowAxis, prms.GetFlag( FL_AXIS ) );
|
||||
aCfg->Write( keyShowGrid, prms.GetFlag( FL_GRID ) );
|
||||
aCfg->Write( keyShowGridSize, prms.m_3D_Grid );
|
||||
aCfg->Write( keyShowFootprints, prms.GetFlag( FL_MODULE ) );
|
||||
aCfg->Write( keyShowCopperThickness, prms.GetFlag( FL_USE_COPPER_THICKNESS ) );
|
||||
aCfg->Write( keyShowZones, prms.GetFlag( FL_ZONE ) );
|
||||
aCfg->Write( keyShowAdhesiveLayers, prms.GetFlag( FL_ADHESIVE ) );
|
||||
aCfg->Write( keyShowSilkScreenLayers, prms.GetFlag( FL_SILKSCREEN ) );
|
||||
aCfg->Write( keyShowSolderMaskLayers, prms.GetFlag( FL_SOLDERMASK ) );
|
||||
aCfg->Write( keyShowSolderPasteLayers, prms.GetFlag( FL_SOLDERPASTE ) );
|
||||
aCfg->Write( keyShowCommentsLayer, prms.GetFlag( FL_COMMENTS ) );
|
||||
aCfg->Write( keyShowEcoLayers, prms.GetFlag( FL_ECO ) );
|
||||
aCfg->Write( keyShowBoardBody, prms.GetFlag( FL_SHOW_BOARD_BODY ) );
|
||||
config->Write( keyBgColor_Red, g_Parm_3D_Visu.m_BgColor.m_Red );
|
||||
config->Write( keyBgColor_Green, g_Parm_3D_Visu.m_BgColor.m_Green );
|
||||
config->Write( keyBgColor_Blue, g_Parm_3D_Visu.m_BgColor.m_Blue );
|
||||
class INFO3D_VISU& prms = g_Parm_3D_Visu;
|
||||
config->Write( keyShowAxis, prms.m_DrawFlags[prms.FL_AXIS] );
|
||||
config->Write( keyShowFootprints, prms.m_DrawFlags[prms.FL_MODULE] );
|
||||
config->Write( keyShowCopperThickness, prms.m_DrawFlags[prms.FL_USE_COPPER_THICKNESS] );
|
||||
config->Write( keyShowZones, prms.m_DrawFlags[prms.FL_ZONE] );
|
||||
config->Write( keyShowAdhesiveLayers, prms.m_DrawFlags[prms.FL_ADHESIVE] );
|
||||
config->Write( keyShowSilkScreenLayers, prms.m_DrawFlags[prms.FL_SILKSCREEN] );
|
||||
config->Write( keyShowSolderMaskLayers, prms.m_DrawFlags[prms.FL_SOLDERMASK] );
|
||||
config->Write( keyShowSolderPasteLayers, prms.m_DrawFlags[prms.FL_SOLDERPASTE] );
|
||||
config->Write( keyShowCommentsLayer, prms.m_DrawFlags[prms.FL_COMMENTS] );
|
||||
config->Write( keyShowEcoLayers, prms.m_DrawFlags[prms.FL_ECO] );
|
||||
|
||||
if( IsIconized() )
|
||||
return;
|
||||
|
||||
m_frameSize = GetSize();
|
||||
m_framePos = GetPosition();
|
||||
|
||||
text = m_frameName + keyPosx;
|
||||
config->Write( text, (long) m_framePos.x );
|
||||
text = m_frameName + keyPosy;
|
||||
config->Write( text, (long) m_framePos.y );
|
||||
text = m_frameName + keySizex;
|
||||
config->Write( text, (long) m_frameSize.x );
|
||||
text = m_frameName + keySizey;
|
||||
config->Write( text, (long) m_frameSize.y );
|
||||
}
|
||||
|
||||
|
||||
@@ -428,69 +355,54 @@ void EDA_3D_FRAME::Process_Special_Functions( wxCommandEvent& event )
|
||||
Set3DBgColor();
|
||||
return;
|
||||
|
||||
case ID_MENU3D_REALISTIC_MODE:
|
||||
g_Parm_3D_Visu.SetFlag( FL_USE_REALISTIC_MODE, isChecked );
|
||||
NewDisplay();
|
||||
return;
|
||||
|
||||
case ID_MENU3D_MAX_QUALITY_FOR_REALISTIC_MODE:
|
||||
g_Parm_3D_Visu.SetFlag( FL_USE_MAXQUALITY_IN_REALISTIC_MODE, isChecked );
|
||||
NewDisplay();
|
||||
return;
|
||||
|
||||
case ID_MENU3D_SHOW_BOARD_BODY:
|
||||
g_Parm_3D_Visu.SetFlag( FL_SHOW_BOARD_BODY, isChecked );
|
||||
NewDisplay();
|
||||
return;
|
||||
|
||||
case ID_MENU3D_AXIS_ONOFF:
|
||||
g_Parm_3D_Visu.SetFlag( FL_AXIS, isChecked );
|
||||
m_canvas->Refresh();
|
||||
g_Parm_3D_Visu.m_DrawFlags[g_Parm_3D_Visu.FL_AXIS] = isChecked;
|
||||
NewDisplay();
|
||||
return;
|
||||
|
||||
case ID_MENU3D_MODULE_ONOFF:
|
||||
g_Parm_3D_Visu.SetFlag( FL_MODULE, isChecked );
|
||||
m_canvas->Refresh();
|
||||
g_Parm_3D_Visu.m_DrawFlags[g_Parm_3D_Visu.FL_MODULE] = isChecked;
|
||||
NewDisplay();
|
||||
return;
|
||||
|
||||
case ID_MENU3D_USE_COPPER_THICKNESS:
|
||||
g_Parm_3D_Visu.SetFlag( FL_USE_COPPER_THICKNESS, isChecked );
|
||||
NewDisplay(GL_ID_BOARD);
|
||||
g_Parm_3D_Visu.m_DrawFlags[g_Parm_3D_Visu.FL_USE_COPPER_THICKNESS] = isChecked;
|
||||
NewDisplay();
|
||||
return;
|
||||
|
||||
case ID_MENU3D_ZONE_ONOFF:
|
||||
g_Parm_3D_Visu.SetFlag( FL_ZONE, isChecked );
|
||||
NewDisplay(GL_ID_BOARD);
|
||||
g_Parm_3D_Visu.m_DrawFlags[g_Parm_3D_Visu.FL_ZONE] = isChecked;
|
||||
NewDisplay();
|
||||
return;
|
||||
|
||||
case ID_MENU3D_ADHESIVE_ONOFF:
|
||||
g_Parm_3D_Visu.SetFlag( FL_ADHESIVE, isChecked );
|
||||
NewDisplay(GL_ID_TECH_LAYERS);
|
||||
g_Parm_3D_Visu.m_DrawFlags[g_Parm_3D_Visu.FL_ADHESIVE] = isChecked;
|
||||
NewDisplay();
|
||||
return;
|
||||
|
||||
case ID_MENU3D_SILKSCREEN_ONOFF:
|
||||
g_Parm_3D_Visu.SetFlag( FL_SILKSCREEN, isChecked );
|
||||
NewDisplay(GL_ID_TECH_LAYERS);
|
||||
g_Parm_3D_Visu.m_DrawFlags[g_Parm_3D_Visu.FL_SILKSCREEN] = isChecked;
|
||||
NewDisplay();
|
||||
return;
|
||||
|
||||
case ID_MENU3D_SOLDER_MASK_ONOFF:
|
||||
g_Parm_3D_Visu.SetFlag( FL_SOLDERMASK, isChecked );
|
||||
NewDisplay(GL_ID_TECH_LAYERS);
|
||||
g_Parm_3D_Visu.m_DrawFlags[g_Parm_3D_Visu.FL_SOLDERMASK] = isChecked;
|
||||
NewDisplay();
|
||||
return;
|
||||
|
||||
case ID_MENU3D_SOLDER_PASTE_ONOFF:
|
||||
g_Parm_3D_Visu.SetFlag( FL_SOLDERPASTE, isChecked );
|
||||
NewDisplay(GL_ID_TECH_LAYERS);
|
||||
g_Parm_3D_Visu.m_DrawFlags[g_Parm_3D_Visu.FL_SOLDERPASTE] = isChecked;
|
||||
NewDisplay();
|
||||
return;
|
||||
|
||||
case ID_MENU3D_COMMENTS_ONOFF:
|
||||
g_Parm_3D_Visu.SetFlag( FL_COMMENTS, isChecked );
|
||||
NewDisplay(GL_ID_AUX_LAYERS);
|
||||
g_Parm_3D_Visu.m_DrawFlags[g_Parm_3D_Visu.FL_COMMENTS] = isChecked;
|
||||
NewDisplay();
|
||||
return;
|
||||
|
||||
case ID_MENU3D_ECO_ONOFF:
|
||||
g_Parm_3D_Visu.SetFlag( FL_ECO, isChecked );
|
||||
NewDisplay(GL_ID_AUX_LAYERS);
|
||||
g_Parm_3D_Visu.m_DrawFlags[g_Parm_3D_Visu.FL_ECO] = isChecked;
|
||||
NewDisplay();
|
||||
return;
|
||||
|
||||
default:
|
||||
@@ -515,29 +427,30 @@ void EDA_3D_FRAME::On3DGridSelection( wxCommandEvent& event )
|
||||
GetMenuBar()->Check( ii, false );
|
||||
}
|
||||
|
||||
|
||||
switch( id )
|
||||
{
|
||||
case ID_MENU3D_GRID_NOGRID:
|
||||
g_Parm_3D_Visu.SetFlag( FL_GRID, false );
|
||||
g_Parm_3D_Visu.m_DrawFlags[g_Parm_3D_Visu.FL_GRID] = false;
|
||||
break;
|
||||
|
||||
case ID_MENU3D_GRID_10_MM:
|
||||
g_Parm_3D_Visu.SetFlag( FL_GRID, true );
|
||||
g_Parm_3D_Visu.m_DrawFlags[g_Parm_3D_Visu.FL_GRID] = true;
|
||||
g_Parm_3D_Visu.m_3D_Grid = 10.0;
|
||||
break;
|
||||
|
||||
case ID_MENU3D_GRID_5_MM:
|
||||
g_Parm_3D_Visu.SetFlag( FL_GRID, true );
|
||||
g_Parm_3D_Visu.m_DrawFlags[g_Parm_3D_Visu.FL_GRID] = true;
|
||||
g_Parm_3D_Visu.m_3D_Grid = 5.0;
|
||||
break;
|
||||
|
||||
case ID_MENU3D_GRID_2P5_MM:
|
||||
g_Parm_3D_Visu.SetFlag( FL_GRID, true );
|
||||
g_Parm_3D_Visu.m_DrawFlags[g_Parm_3D_Visu.FL_GRID] = true;
|
||||
g_Parm_3D_Visu.m_3D_Grid = 2.5;
|
||||
break;
|
||||
|
||||
case ID_MENU3D_GRID_1_MM:
|
||||
g_Parm_3D_Visu.SetFlag( FL_GRID, true );
|
||||
g_Parm_3D_Visu.m_DrawFlags[g_Parm_3D_Visu.FL_GRID] = true;
|
||||
g_Parm_3D_Visu.m_3D_Grid = 1.0;
|
||||
break;
|
||||
|
||||
@@ -546,17 +459,18 @@ void EDA_3D_FRAME::On3DGridSelection( wxCommandEvent& event )
|
||||
return;
|
||||
}
|
||||
|
||||
NewDisplay( GL_ID_GRID );
|
||||
NewDisplay();
|
||||
}
|
||||
|
||||
|
||||
void EDA_3D_FRAME::NewDisplay( int aGlList )
|
||||
void EDA_3D_FRAME::NewDisplay()
|
||||
{
|
||||
m_reloadRequest = false;
|
||||
|
||||
m_canvas->ClearLists( aGlList );
|
||||
m_canvas->ClearLists();
|
||||
m_canvas->CreateDrawGL_List();
|
||||
|
||||
// m_canvas->InitGL();
|
||||
m_canvas->Refresh( true );
|
||||
m_canvas->DisplayStatus();
|
||||
}
|
||||
@@ -586,19 +500,11 @@ void EDA_3D_FRAME::Set3DBgColor()
|
||||
|
||||
newcolor = wxGetColourFromUser( this, oldcolor );
|
||||
|
||||
if( !newcolor.IsOk() ) // Cancel command
|
||||
return;
|
||||
|
||||
if( newcolor != oldcolor )
|
||||
{
|
||||
g_Parm_3D_Visu.m_BgColor.m_Red = (double) newcolor.Red() / 255.0;
|
||||
g_Parm_3D_Visu.m_BgColor.m_Red = (double) newcolor.Red() / 255.0;
|
||||
g_Parm_3D_Visu.m_BgColor.m_Green = (double) newcolor.Green() / 255.0;
|
||||
g_Parm_3D_Visu.m_BgColor.m_Blue = (double) newcolor.Blue() / 255.0;
|
||||
m_canvas->Redraw();
|
||||
NewDisplay();
|
||||
}
|
||||
}
|
||||
|
||||
BOARD* EDA_3D_FRAME::GetBoard()
|
||||
{
|
||||
return Parent()->GetBoard();
|
||||
}
|
||||
|
||||
@@ -1,136 +0,0 @@
|
||||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2014 Mario Luzeiro <mrluzeiro@gmail.com>
|
||||
* Copyright (C) 1992-2012 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* 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 General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, you may find one here:
|
||||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
* or you may search the http://www.gnu.org website for the version 2 license,
|
||||
* or you may write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
/**
|
||||
* @file 3d_class.cpp
|
||||
*/
|
||||
|
||||
#include <fctsys.h>
|
||||
#include <3d_struct.h>
|
||||
#include <3d_material.h>
|
||||
|
||||
#ifdef __WXMAC__
|
||||
# ifdef __DARWIN__
|
||||
# include <OpenGL/glu.h>
|
||||
# else
|
||||
# include <glu.h>
|
||||
# endif
|
||||
#else
|
||||
# include <GL/glu.h>
|
||||
#endif
|
||||
|
||||
S3D_MATERIAL::S3D_MATERIAL( S3D_MASTER* father, const wxString& name ) :
|
||||
EDA_ITEM( father, NOT_USED )
|
||||
{
|
||||
m_Name = name;
|
||||
m_AmbientColor.clear();
|
||||
m_DiffuseColor.clear();
|
||||
m_EmissiveColor.clear();
|
||||
m_SpecularColor.clear();
|
||||
m_Shininess.clear();
|
||||
m_Transparency.clear();
|
||||
}
|
||||
|
||||
|
||||
void SetOpenGlDefaultMaterial()
|
||||
{
|
||||
glm::vec4 ambient( 0.15, 0.15, 0.15, 1.0 );
|
||||
glm::vec4 specular( 0.1, 0.1, 0.1, 1.0 );
|
||||
glm::vec4 emissive( 0.1, 0.1, 0.1, 1.0 );
|
||||
GLint shininess_value = 80;
|
||||
|
||||
glColorMaterial( GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE );
|
||||
//glColor4f( 1.0, 1.0, 1.0, 1.0 );
|
||||
glMateriali ( GL_FRONT_AND_BACK, GL_SHININESS, shininess_value );
|
||||
glMaterialfv( GL_FRONT_AND_BACK, GL_EMISSION, &emissive.x );
|
||||
glMaterialfv( GL_FRONT_AND_BACK, GL_SPECULAR, &specular.x );
|
||||
glMaterialfv( GL_FRONT_AND_BACK, GL_AMBIENT, &ambient.x );
|
||||
|
||||
}
|
||||
|
||||
|
||||
void S3D_MATERIAL::SetOpenGLMaterial( unsigned int materialIndex )
|
||||
{
|
||||
S3D_MASTER * s3dParent = (S3D_MASTER *) GetParent();
|
||||
|
||||
if( ! s3dParent->IsOpenGlAllowed() )
|
||||
return;
|
||||
|
||||
float transparency_value = 0.0f;
|
||||
if( m_Transparency.size() > materialIndex )
|
||||
{
|
||||
transparency_value = m_Transparency[materialIndex];
|
||||
s3dParent->SetLastTransparency( transparency_value );
|
||||
}
|
||||
|
||||
if( m_DiffuseColor.size() > materialIndex )
|
||||
{
|
||||
glm::vec3 color = m_DiffuseColor[materialIndex];
|
||||
|
||||
if( m_AmbientColor.size() == 0 )
|
||||
{
|
||||
glColorMaterial( GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE );
|
||||
}
|
||||
|
||||
glColor4f( color.x, color.y, color.z, 1.0 - transparency_value );
|
||||
}
|
||||
|
||||
if( m_Shininess.size() > materialIndex )
|
||||
{
|
||||
glMateriali(GL_FRONT_AND_BACK, GL_SHININESS, m_Shininess[materialIndex] );
|
||||
}
|
||||
|
||||
// emissive
|
||||
if( m_EmissiveColor.size() > materialIndex )
|
||||
{
|
||||
glm::vec4 emissive;
|
||||
emissive[0] = m_EmissiveColor[materialIndex].x;
|
||||
emissive[1] = m_EmissiveColor[materialIndex].y;
|
||||
emissive[2] = m_EmissiveColor[materialIndex].z;
|
||||
emissive[3] = 1.0f;
|
||||
glMaterialfv( GL_FRONT_AND_BACK, GL_EMISSION, &emissive.x );
|
||||
}
|
||||
|
||||
// specular
|
||||
if( m_SpecularColor.size() > materialIndex )
|
||||
{
|
||||
glm::vec4 specular;
|
||||
specular[0] = m_SpecularColor[materialIndex].x;
|
||||
specular[1] = m_SpecularColor[materialIndex].y;
|
||||
specular[2] = m_SpecularColor[materialIndex].z;
|
||||
specular[3] = 1.0f;
|
||||
glMaterialfv( GL_FRONT_AND_BACK, GL_SPECULAR, &specular.x );
|
||||
}
|
||||
|
||||
// ambient
|
||||
if( m_AmbientColor.size() > materialIndex )
|
||||
{
|
||||
glm::vec4 ambient;
|
||||
ambient[0] = m_AmbientColor[materialIndex].x;
|
||||
ambient[1] = m_AmbientColor[materialIndex].y;
|
||||
ambient[2] = m_AmbientColor[materialIndex].z;
|
||||
ambient[3] = 1.0f;
|
||||
glMaterialfv( GL_FRONT_AND_BACK, GL_AMBIENT, &ambient.x );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,66 +0,0 @@
|
||||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2014 Mario Luzeiro <mrluzeiro@gmail.com>
|
||||
* Copyright (C) 1992-2014 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* 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 General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, you may find one here:
|
||||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
* or you may search the http://www.gnu.org website for the version 2 license,
|
||||
* or you may write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file 3d_material.h
|
||||
*/
|
||||
|
||||
#ifndef STRUCT_3D_MATERIAL_H
|
||||
#define STRUCT_3D_MATERIAL_H
|
||||
|
||||
#include <common.h>
|
||||
#include <base_struct.h>
|
||||
#include <gal/opengl/glm/glm.hpp>
|
||||
|
||||
class S3D_MASTER;
|
||||
|
||||
class S3D_MATERIAL : public EDA_ITEM /* openGL "material" data*/
|
||||
{
|
||||
public:
|
||||
wxString m_Name;
|
||||
|
||||
// Material list
|
||||
std::vector< glm::vec3 > m_AmbientColor;
|
||||
std::vector< glm::vec3 > m_DiffuseColor;
|
||||
std::vector< glm::vec3 > m_EmissiveColor;
|
||||
std::vector< glm::vec3 > m_SpecularColor;
|
||||
std::vector< float > m_Shininess;
|
||||
std::vector< float > m_Transparency;
|
||||
|
||||
public:
|
||||
S3D_MATERIAL( S3D_MASTER* father, const wxString& name );
|
||||
|
||||
S3D_MATERIAL* Next() const { return (S3D_MATERIAL*) Pnext; }
|
||||
S3D_MATERIAL* Back() const { return (S3D_MATERIAL*) Pback; }
|
||||
|
||||
void SetOpenGLMaterial(unsigned int materialIndex);
|
||||
|
||||
#if defined(DEBUG)
|
||||
void Show( int nestLevel, std::ostream& os ) const { ShowDummy( os ); } // override
|
||||
#endif
|
||||
};
|
||||
|
||||
void SetOpenGlDefaultMaterial();
|
||||
|
||||
#endif
|
||||
@@ -1,408 +0,0 @@
|
||||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2014 Mario Luzeiro <mrluzeiro@gmail.com>
|
||||
* Copyright (C) 1992-2014 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* 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 General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, you may find one here:
|
||||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
* or you may search the http://www.gnu.org website for the version 2 license,
|
||||
* or you may write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file 3d_mesh_model.cpp
|
||||
* @brief
|
||||
*/
|
||||
|
||||
|
||||
#include <3d_mesh_model.h>
|
||||
#include <boost/geometry/algorithms/area.hpp>
|
||||
|
||||
S3D_MESH::S3D_MESH()
|
||||
{
|
||||
isPerFaceNormalsComputed = false;
|
||||
isPointNormalizedComputed = false;
|
||||
isPerPointNormalsComputed = false;
|
||||
m_Materials = NULL;
|
||||
childs.clear();
|
||||
|
||||
m_translation = glm::vec3( 0.0f, 0.0f, 0.0f );
|
||||
m_rotation = glm::vec4( 0.0f, 0.0f, 0.0f, 0.0f );
|
||||
m_scale = glm::vec3( 1.0f, 1.0f, 1.0f );
|
||||
m_scaleOrientation = glm::vec4( 0.0f, 0.0f, 1.0f, 0.0f ); // not used
|
||||
m_center = glm::vec3( 0.0f, 0.0f, 0.0f ); // not used
|
||||
}
|
||||
|
||||
|
||||
S3D_MESH::~S3D_MESH()
|
||||
{
|
||||
for( unsigned int idx = 0; idx < childs.size(); idx++ )
|
||||
{
|
||||
delete childs[idx];
|
||||
}
|
||||
}
|
||||
|
||||
void S3D_MESH::openGL_RenderAllChilds()
|
||||
{
|
||||
//DBG( printf( "openGL_RenderAllChilds") );
|
||||
|
||||
glPushMatrix();
|
||||
glTranslatef( m_translation.x, m_translation.y, m_translation.z );
|
||||
glRotatef( m_rotation[3], m_rotation[0], m_rotation[1], m_rotation[2] );
|
||||
glScalef( m_scale.x, m_scale.y, m_scale.z );
|
||||
|
||||
SetOpenGlDefaultMaterial();
|
||||
|
||||
// Render your self
|
||||
openGL_Render();
|
||||
|
||||
// Render childs
|
||||
for( unsigned int idx = 0; idx < childs.size(); idx++ )
|
||||
{
|
||||
childs[idx]->openGL_Render();
|
||||
}
|
||||
|
||||
SetOpenGlDefaultMaterial();
|
||||
|
||||
glPopMatrix();
|
||||
|
||||
}
|
||||
|
||||
|
||||
void S3D_MESH::openGL_Render()
|
||||
{
|
||||
//DBG( printf( "openGL_Render" ) );
|
||||
|
||||
if( m_Materials )
|
||||
{
|
||||
m_Materials->SetOpenGLMaterial( 0 );
|
||||
}
|
||||
|
||||
if( m_CoordIndex.size() == 0)
|
||||
{
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
glPushMatrix();
|
||||
glTranslatef( m_translation.x, m_translation.y, m_translation.z );
|
||||
glRotatef( m_rotation[3], m_rotation[0], m_rotation[1], m_rotation[2] );
|
||||
glScalef( m_scale.x, m_scale.y, m_scale.z );
|
||||
|
||||
std::vector< glm::vec3 > normals;
|
||||
|
||||
calcPointNormalized();
|
||||
calcPerFaceNormals();
|
||||
|
||||
if( m_PerVertexNormalsNormalized.size() == 0 )
|
||||
{
|
||||
if( g_Parm_3D_Visu.IsRealisticMode() && g_Parm_3D_Visu.HightQualityMode() )
|
||||
{
|
||||
calcPerPointNormals();
|
||||
}
|
||||
}
|
||||
|
||||
for( unsigned int idx = 0; idx < m_CoordIndex.size(); idx++ )
|
||||
{
|
||||
if( m_MaterialIndex.size() > 1 )
|
||||
{
|
||||
if( m_Materials )
|
||||
{
|
||||
m_Materials->SetOpenGLMaterial( m_MaterialIndex[idx] );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
switch( m_CoordIndex[idx].size() )
|
||||
{
|
||||
case 3: glBegin( GL_TRIANGLES );break;
|
||||
case 4: glBegin( GL_QUADS ); break;
|
||||
default: glBegin( GL_POLYGON ); break;
|
||||
}
|
||||
|
||||
|
||||
if( m_PerVertexNormalsNormalized.size() > 0 )
|
||||
{
|
||||
for( unsigned int ii = 0; ii < m_CoordIndex[idx].size(); ii++ )
|
||||
{
|
||||
glm::vec3 normal = m_PerVertexNormalsNormalized[m_NormalIndex[idx][ii]];
|
||||
glNormal3fv( &normal.x );
|
||||
|
||||
glm::vec3 point = m_Point[m_CoordIndex[idx][ii]];
|
||||
glVertex3fv( &point.x );
|
||||
}
|
||||
} else if( g_Parm_3D_Visu.IsRealisticMode() && g_Parm_3D_Visu.HightQualityMode() )
|
||||
{
|
||||
std::vector< glm::vec3 > normals_list;
|
||||
normals_list = m_PerFaceVertexNormals[idx];
|
||||
|
||||
for( unsigned int ii = 0; ii < m_CoordIndex[idx].size(); ii++ )
|
||||
{
|
||||
glm::vec3 normal = normals_list[ii];
|
||||
glNormal3fv( &normal.x );
|
||||
|
||||
glm::vec3 point = m_Point[m_CoordIndex[idx][ii]];
|
||||
glVertex3fv( &point.x );
|
||||
}
|
||||
} else
|
||||
{
|
||||
// Flat
|
||||
glm::vec3 normal = m_PerFaceNormalsNormalized[idx];
|
||||
|
||||
for( unsigned int ii = 0; ii < m_CoordIndex[idx].size(); ii++ )
|
||||
{
|
||||
glNormal3fv( &normal.x );
|
||||
|
||||
glm::vec3 point = m_Point[m_CoordIndex[idx][ii]];
|
||||
glVertex3fv( &point.x );
|
||||
}
|
||||
}
|
||||
|
||||
glEnd();
|
||||
}
|
||||
|
||||
glPopMatrix();
|
||||
}
|
||||
|
||||
|
||||
void S3D_MESH::calcPointNormalized ()
|
||||
{
|
||||
//DBG( printf( "calcPointNormalized\n" ) );
|
||||
|
||||
if( isPointNormalizedComputed == true )
|
||||
{
|
||||
return;
|
||||
}
|
||||
isPointNormalizedComputed = true;
|
||||
|
||||
if( m_PerVertexNormalsNormalized.size() > 0 )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
m_PointNormalized.clear();
|
||||
|
||||
float biggerPoint = 0.0f;
|
||||
for( unsigned int i = 0; i< m_Point.size(); i++ )
|
||||
{
|
||||
if( fabs( m_Point[i].x ) > biggerPoint) biggerPoint = fabs( m_Point[i].x );
|
||||
if( fabs( m_Point[i].y ) > biggerPoint) biggerPoint = fabs( m_Point[i].y );
|
||||
if( fabs( m_Point[i].z ) > biggerPoint) biggerPoint = fabs( m_Point[i].z );
|
||||
}
|
||||
|
||||
biggerPoint = 1.0 / biggerPoint;
|
||||
|
||||
for( unsigned int i= 0; i< m_Point.size(); i++ )
|
||||
{
|
||||
glm::vec3 p;
|
||||
p = m_Point[i] * biggerPoint;
|
||||
m_PointNormalized.push_back( p );
|
||||
}
|
||||
|
||||
//DBG( printf("m_Point.size %u\n", m_Point.size()) );
|
||||
}
|
||||
|
||||
|
||||
bool IsClockwise( glm::vec3 v0, glm::vec3 v1, glm::vec3 v2 )
|
||||
{
|
||||
double sum = 0.0;
|
||||
|
||||
sum += (v1.x - v0.x) * (v1.y + v0.y);
|
||||
sum += (v2.x - v1.x) * (v2.y + v1.y);
|
||||
sum += (v0.x - v2.x) * (v0.y + v2.y);
|
||||
|
||||
return sum > FLT_EPSILON;
|
||||
}
|
||||
|
||||
|
||||
void S3D_MESH::calcPerFaceNormals ()
|
||||
{
|
||||
//DBG( printf( "calcPerFaceNormals" ) );
|
||||
|
||||
if( isPerFaceNormalsComputed == true )
|
||||
{
|
||||
|
||||
return;
|
||||
}
|
||||
isPerFaceNormalsComputed = true;
|
||||
|
||||
|
||||
if( m_PerVertexNormalsNormalized.size() > 0 )
|
||||
{
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
bool haveAlreadyNormals_from_model_file = false;
|
||||
|
||||
if( m_PerFaceNormalsNormalized.size() > 0 )
|
||||
{
|
||||
haveAlreadyNormals_from_model_file = true;
|
||||
}
|
||||
|
||||
m_PerFaceNormalsRaw.clear();
|
||||
m_PerFaceSquaredArea.clear();
|
||||
|
||||
//DBG( printf("m_CoordIndex.size %u\n", m_CoordIndex.size()) );
|
||||
//DBG( printf("m_PointNormalized.size %u\n", m_PointNormalized.size()) );
|
||||
|
||||
for( unsigned int idx = 0; idx < m_CoordIndex.size(); idx++ )
|
||||
{
|
||||
|
||||
// User normalized and multiply to get better resolution
|
||||
glm::vec3 v0 = m_PointNormalized[m_CoordIndex[idx][0]];
|
||||
glm::vec3 v1 = m_PointNormalized[m_CoordIndex[idx][1]];
|
||||
glm::vec3 v2 = m_PointNormalized[m_CoordIndex[idx][m_CoordIndex[idx].size() - 1]];
|
||||
|
||||
/*
|
||||
// !TODO: improove and check what is best to calc the normal (check what have more resolution)
|
||||
glm::vec3 v0 = m_Point[m_CoordIndex[idx][0]];
|
||||
glm::vec3 v1 = m_Point[m_CoordIndex[idx][1]];
|
||||
glm::vec3 v2 = m_Point[m_CoordIndex[idx][m_CoordIndex[idx].size() - 1]];
|
||||
*/
|
||||
|
||||
glm::vec3 cross_prod;
|
||||
|
||||
/*
|
||||
// This is not working as good as it is expected :/
|
||||
if( IsClockwise( v0, v1, v2 ) )
|
||||
{
|
||||
// CW
|
||||
cross_prod = glm::cross( v1 - v2, v0 - v2 );
|
||||
} else
|
||||
{*/
|
||||
// CCW
|
||||
cross_prod = glm::cross( v1 - v0, v2 - v0 );
|
||||
//}
|
||||
|
||||
float area = glm::dot( cross_prod, cross_prod );
|
||||
|
||||
if( cross_prod[2] < 0.0 )
|
||||
{
|
||||
area = -area;
|
||||
}
|
||||
|
||||
if( area < FLT_EPSILON )
|
||||
{
|
||||
area = FLT_EPSILON * 2.0f;
|
||||
}
|
||||
|
||||
m_PerFaceSquaredArea.push_back( area );
|
||||
|
||||
m_PerFaceNormalsRaw.push_back( cross_prod );
|
||||
|
||||
if( haveAlreadyNormals_from_model_file == false )
|
||||
{
|
||||
|
||||
// normalize vertex normal
|
||||
float l = glm::length( cross_prod );
|
||||
|
||||
if( l > FLT_EPSILON ) // avoid division by zero
|
||||
{
|
||||
cross_prod = cross_prod / l;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Cannot calc normal
|
||||
if( ( cross_prod.x > cross_prod.y ) && ( cross_prod.x > cross_prod.z ) )
|
||||
{
|
||||
cross_prod.x = 1.0; cross_prod.y = 0.0; cross_prod.z = 0.0;
|
||||
} else if( ( cross_prod.y > cross_prod.x ) && ( cross_prod.y > cross_prod.z ))
|
||||
{
|
||||
cross_prod.x = 0.0; cross_prod.y = 1.0; cross_prod.z = 0.0;
|
||||
} else
|
||||
{
|
||||
cross_prod.x = 0.0; cross_prod.y = 1.0; cross_prod.z = 0.0;
|
||||
}
|
||||
}
|
||||
|
||||
m_PerFaceNormalsNormalized.push_back( cross_prod );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// http://www.bytehazard.com/code/vertnorm.html
|
||||
// http://www.emeyex.com/site/tuts/VertexNormals.pdf
|
||||
void S3D_MESH::calcPerPointNormals ()
|
||||
{
|
||||
//DBG( printf( "calcPerPointNormals" ) );
|
||||
|
||||
if( isPerPointNormalsComputed == true )
|
||||
{
|
||||
return;
|
||||
}
|
||||
isPerPointNormalsComputed = true;
|
||||
|
||||
if( m_PerVertexNormalsNormalized.size() > 0 )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
m_PerFaceVertexNormals.clear();
|
||||
|
||||
// for each face A in mesh
|
||||
for( unsigned int each_face_A_idx = 0; each_face_A_idx < m_CoordIndex.size(); each_face_A_idx++ )
|
||||
{
|
||||
// n = face A facet normal
|
||||
std::vector< glm::vec3 > face_A_normals;
|
||||
face_A_normals.clear();
|
||||
face_A_normals.resize(m_CoordIndex[each_face_A_idx].size());
|
||||
|
||||
// loop through all 3 vertices
|
||||
// for each vert in face A
|
||||
for( unsigned int each_vert_A_idx = 0; each_vert_A_idx < m_CoordIndex[each_face_A_idx].size(); each_vert_A_idx++ )
|
||||
{
|
||||
face_A_normals[each_vert_A_idx] = m_PerFaceNormalsRaw[each_face_A_idx] * (m_PerFaceSquaredArea[each_face_A_idx]);
|
||||
|
||||
int vertexIndex = (int)(m_CoordIndex[each_face_A_idx][each_vert_A_idx]);
|
||||
glm::vec3 vector_face_A = m_PerFaceNormalsNormalized[each_face_A_idx];
|
||||
|
||||
// for each face B in mesh
|
||||
for( unsigned int each_face_B_idx = 0; each_face_B_idx < m_CoordIndex.size(); each_face_B_idx++ )
|
||||
{
|
||||
//if A != B { // ignore self
|
||||
if ( each_face_A_idx != each_face_B_idx)
|
||||
{
|
||||
if( (m_CoordIndex[each_face_B_idx][0] == vertexIndex) ||
|
||||
(m_CoordIndex[each_face_B_idx][1] == vertexIndex) ||
|
||||
(m_CoordIndex[each_face_B_idx][2] == vertexIndex) )
|
||||
{
|
||||
glm::vec3 vector_face_B = m_PerFaceNormalsNormalized[each_face_B_idx];
|
||||
|
||||
float dot_prod = glm::dot(vector_face_A, vector_face_B);
|
||||
if( dot_prod > 0.05f )
|
||||
{
|
||||
face_A_normals[each_vert_A_idx] += m_PerFaceNormalsRaw[each_face_B_idx] * (m_PerFaceSquaredArea[each_face_B_idx] * dot_prod);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// normalize vertex normal
|
||||
float l = glm::length( face_A_normals[each_vert_A_idx] );
|
||||
|
||||
if( l > FLT_EPSILON ) // avoid division by zero
|
||||
{
|
||||
face_A_normals[each_vert_A_idx] /= l;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
m_PerFaceVertexNormals.push_back( face_A_normals );
|
||||
}
|
||||
}
|
||||
@@ -1,101 +0,0 @@
|
||||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2014 Mario Luzeiro <mrluzeiro@gmail.com>
|
||||
* Copyright (C) 1992-2014 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* 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 General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, you may find one here:
|
||||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
* or you may search the http://www.gnu.org website for the version 2 license,
|
||||
* or you may write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file 3d_mesh_model.h
|
||||
* @brief
|
||||
*/
|
||||
|
||||
#ifndef __3D_MESH_MODEL_H__
|
||||
#define __3D_MESH_MODEL_H__
|
||||
|
||||
#include <fctsys.h>
|
||||
#include <common.h>
|
||||
#include <macros.h>
|
||||
#include <base_struct.h>
|
||||
#include <gal/opengl/glm/glm.hpp>
|
||||
#include <vector>
|
||||
#include <kicad_string.h>
|
||||
#include <info3d_visu.h>
|
||||
#ifdef __WXMAC__
|
||||
# ifdef __DARWIN__
|
||||
# include <OpenGL/glu.h>
|
||||
# else
|
||||
# include <glu.h>
|
||||
# endif
|
||||
#else
|
||||
# include <GL/glu.h>
|
||||
#endif
|
||||
#include <wx/glcanvas.h>
|
||||
|
||||
class S3D_MESH;
|
||||
|
||||
class S3D_MESH
|
||||
{
|
||||
public:
|
||||
|
||||
S3D_MESH();
|
||||
~S3D_MESH();
|
||||
|
||||
void openGL_Render();
|
||||
void openGL_RenderAllChilds();
|
||||
|
||||
S3D_MATERIAL *m_Materials;
|
||||
|
||||
// Point and index list
|
||||
std::vector< glm::vec3 > m_Point;
|
||||
std::vector< std::vector<int> > m_CoordIndex;
|
||||
std::vector< std::vector<int> > m_NormalIndex;
|
||||
std::vector< glm::vec3 > m_PerFaceNormalsNormalized;
|
||||
std::vector< glm::vec3 > m_PerVertexNormalsNormalized;
|
||||
|
||||
std::vector< int > m_MaterialIndex;
|
||||
|
||||
glm::vec3 m_translation;
|
||||
glm::vec4 m_rotation;
|
||||
glm::vec3 m_scale;
|
||||
glm::vec4 m_scaleOrientation; // not used
|
||||
glm::vec3 m_center; // not used
|
||||
|
||||
std::vector<S3D_MESH *> childs;
|
||||
|
||||
private:
|
||||
std::vector< glm::vec3 > m_PerFaceNormalsRaw;
|
||||
std::vector< std::vector< glm::vec3 > > m_PerFaceVertexNormals;
|
||||
std::vector< glm::vec3 > m_PointNormalized;
|
||||
std::vector< float > m_PerFaceSquaredArea;
|
||||
std::vector< std::vector<int> > m_InvalidCoordIndexes; //!TODO: check for invalid CoordIndex in file and remove the index and the same material index
|
||||
|
||||
bool isPerFaceNormalsComputed;
|
||||
void calcPerFaceNormals ();
|
||||
|
||||
bool isPointNormalizedComputed;
|
||||
void calcPointNormalized();
|
||||
|
||||
bool isPerPointNormalsComputed;
|
||||
void calcPerPointNormals();
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
+47
-53
@@ -31,13 +31,16 @@
|
||||
#include <common.h>
|
||||
#include <macros.h>
|
||||
#include <kicad_string.h>
|
||||
#include <pgm_base.h>
|
||||
#include <appl_wxstruct.h>
|
||||
|
||||
#include <3d_viewer.h>
|
||||
#include <info3d_visu.h>
|
||||
#include "3d_struct.h"
|
||||
#include "modelparsers.h"
|
||||
|
||||
// Imported function:
|
||||
extern void Set_Object_Data( std::vector< S3D_VERTEX >& aVertices, double aBiuTo3DUnits );
|
||||
|
||||
|
||||
S3D_MODEL_PARSER* S3D_MODEL_PARSER::Create( S3D_MASTER* aMaster,
|
||||
const wxString aExtension )
|
||||
@@ -56,76 +59,67 @@ S3D_MODEL_PARSER* S3D_MODEL_PARSER::Create( S3D_MASTER* aMaster,
|
||||
}
|
||||
}
|
||||
|
||||
const wxString S3D_MASTER::GetShape3DFullFilename()
|
||||
{
|
||||
|
||||
wxString shapeName;
|
||||
|
||||
// Expand any environment variables embedded in footprint's m_Shape3DName field.
|
||||
// To ensure compatibility with most of footprint's m_Shape3DName field,
|
||||
// if the m_Shape3DName is not an absolute path the default path
|
||||
// given by the environment variable KISYS3DMOD will be used
|
||||
|
||||
if( m_Shape3DName.StartsWith( wxT("${") ) )
|
||||
shapeName = wxExpandEnvVars( m_Shape3DName );
|
||||
else
|
||||
shapeName = m_Shape3DName;
|
||||
|
||||
wxFileName fn( shapeName );
|
||||
|
||||
if( fn.IsAbsolute() || shapeName.StartsWith( wxT(".") ) )
|
||||
return shapeName;
|
||||
|
||||
wxString default_path;
|
||||
wxGetEnv( wxT( KISYS3DMOD ), &default_path );
|
||||
|
||||
if( default_path.IsEmpty() )
|
||||
return shapeName;
|
||||
|
||||
if( !default_path.EndsWith( wxT("/") ) && !default_path.EndsWith( wxT("\\") ) )
|
||||
default_path += wxT("/");
|
||||
|
||||
default_path += shapeName;
|
||||
|
||||
return default_path;
|
||||
}
|
||||
|
||||
int S3D_MASTER::ReadData()
|
||||
{
|
||||
wxFileName fn;
|
||||
wxString FullFilename;
|
||||
|
||||
if( m_Shape3DName.IsEmpty() )
|
||||
return 1;
|
||||
|
||||
wxString filename = GetShape3DFullFilename();
|
||||
|
||||
#ifdef __WINDOWS__
|
||||
filename.Replace( wxT( "/" ), wxT( "\\" ) );
|
||||
#else
|
||||
filename.Replace( wxT( "\\" ), wxT( "/" ) );
|
||||
#endif
|
||||
|
||||
if( !wxFileName::FileExists( filename ) )
|
||||
{
|
||||
wxLogDebug( wxT( "3D shape '%s' not found, even tried '%s' after env var substitution." ),
|
||||
GetChars( m_Shape3DName ),
|
||||
GetChars( filename )
|
||||
);
|
||||
return -1;
|
||||
return 1;
|
||||
}
|
||||
|
||||
wxFileName fn( filename );
|
||||
wxString shape3DNname = m_Shape3DName;
|
||||
|
||||
#ifdef __WINDOWS__
|
||||
shape3DNname.Replace( wxT( "/" ), wxT( "\\" ) );
|
||||
#else
|
||||
shape3DNname.Replace( wxT( "\\" ), wxT( "/" ) );
|
||||
#endif
|
||||
|
||||
if( wxFileName::FileExists( shape3DNname ) )
|
||||
{
|
||||
FullFilename = shape3DNname;
|
||||
fn.Assign( FullFilename );
|
||||
}
|
||||
else
|
||||
{
|
||||
fn = shape3DNname;
|
||||
FullFilename = wxGetApp().FindLibraryPath( fn );
|
||||
|
||||
if( FullFilename.IsEmpty() )
|
||||
{
|
||||
wxLogDebug( wxT( "3D part library <%s> could not be found." ),
|
||||
GetChars( fn.GetFullPath() ) );
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
wxString extension = fn.GetExt();
|
||||
S3D_MODEL_PARSER* parser = S3D_MODEL_PARSER::Create( this, extension );
|
||||
|
||||
if( parser )
|
||||
{
|
||||
parser->Load( filename );
|
||||
parser->Load( FullFilename );
|
||||
delete parser;
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
wxLogDebug( wxT( "Unknown file type '%s'" ), GetChars( extension ) );
|
||||
wxLogDebug( wxT( "Unknown file type <%s>" ), GetChars( extension ) );
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
int STRUCT_3D_SHAPE::ReadData( FILE* file, int* LineNum )
|
||||
{
|
||||
char line[512];
|
||||
|
||||
while( GetLine( file, line, LineNum, 512 ) )
|
||||
{
|
||||
}
|
||||
|
||||
return -1;
|
||||
|
||||
+53
-91
@@ -1,7 +1,6 @@
|
||||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2014 Mario Luzeiro <mrluzeiro@gmail.com>
|
||||
* Copyright (C) 2004 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com
|
||||
* Copyright (C) 2011 Wayne Stambaugh <stambaughw@verizon.net>
|
||||
* Copyright (C) 1992-2011 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
@@ -33,9 +32,8 @@
|
||||
|
||||
#include <common.h>
|
||||
#include <base_struct.h>
|
||||
#include <3d_material.h>
|
||||
#include <gal/opengl/glm/glm.hpp>
|
||||
|
||||
|
||||
|
||||
/* 3D modeling units -> PCB units conversion scale:
|
||||
* 1 "3D model unit" wings3d = 1 unit = 2.54 mm = 0.1 inch = 100 mils
|
||||
*/
|
||||
@@ -46,45 +44,61 @@ class S3D_MASTER;
|
||||
class STRUCT_3D_SHAPE;
|
||||
|
||||
/* S3D_VERTEX manages a 3D coordinate (3 float numbers: x,y,z coordinates)*/
|
||||
#define S3D_VERTEX glm::vec3
|
||||
class S3D_VERTEX
|
||||
{
|
||||
public:
|
||||
double x, y, z;
|
||||
|
||||
public:
|
||||
S3D_VERTEX()
|
||||
{
|
||||
x = y = z = 0.0;
|
||||
}
|
||||
|
||||
S3D_VERTEX( double px, double py, double pz)
|
||||
{
|
||||
x = px;
|
||||
y = py;
|
||||
z = pz;
|
||||
}
|
||||
};
|
||||
|
||||
class S3D_MATERIAL : public EDA_ITEM /* openGL "material" data*/
|
||||
{
|
||||
public:
|
||||
wxString m_Name;
|
||||
S3D_VERTEX m_DiffuseColor;
|
||||
S3D_VERTEX m_EmissiveColor;
|
||||
S3D_VERTEX m_SpecularColor;
|
||||
float m_AmbientIntensity;
|
||||
float m_Transparency;
|
||||
float m_Shininess;
|
||||
|
||||
public:
|
||||
S3D_MATERIAL( S3D_MASTER* father, const wxString& name );
|
||||
|
||||
S3D_MATERIAL* Next() const { return (S3D_MATERIAL*) Pnext; }
|
||||
S3D_MATERIAL* Back() const { return (S3D_MATERIAL*) Pback; }
|
||||
|
||||
void SetMaterial();
|
||||
|
||||
#if defined(DEBUG)
|
||||
void Show( int nestLevel, std::ostream& os ) const { ShowDummy( os ); } // override
|
||||
#endif
|
||||
};
|
||||
|
||||
|
||||
/* Master structure for a 3D item description */
|
||||
class S3D_MASTER : public EDA_ITEM
|
||||
{
|
||||
public:
|
||||
wxString m_Shape3DName; /* 3D shape name in 3D library */
|
||||
S3D_VERTEX m_MatScale;
|
||||
S3D_VERTEX m_MatRotation;
|
||||
S3D_VERTEX m_MatPosition;
|
||||
STRUCT_3D_SHAPE* m_3D_Drawings;
|
||||
S3D_MATERIAL* m_Materials;
|
||||
|
||||
enum FILE3D_TYPE
|
||||
{
|
||||
FILE3D_NONE = 0,
|
||||
FILE3D_VRML,
|
||||
FILE3D_IDF,
|
||||
FILE3D_UNKNOWN
|
||||
};
|
||||
|
||||
// Check defaults in S3D_MASTER
|
||||
bool m_use_modelfile_diffuseColor;
|
||||
bool m_use_modelfile_emissiveColor;
|
||||
bool m_use_modelfile_specularColor;
|
||||
bool m_use_modelfile_ambientIntensity;
|
||||
bool m_use_modelfile_transparency;
|
||||
bool m_use_modelfile_shininess;
|
||||
|
||||
private:
|
||||
wxString m_Shape3DName; /* 3D shape name in 3D library */
|
||||
FILE3D_TYPE m_ShapeType;
|
||||
double m_lastTransparency; // last transparency value from
|
||||
// last material in use
|
||||
bool m_loadTransparentObjects;
|
||||
bool m_loadNonTransparentObjects;
|
||||
|
||||
|
||||
|
||||
public:
|
||||
S3D_MASTER( EDA_ITEM* aParent );
|
||||
~S3D_MASTER();
|
||||
@@ -92,74 +106,20 @@ public:
|
||||
S3D_MASTER* Next() const { return (S3D_MASTER*) Pnext; }
|
||||
S3D_MASTER* Back() const { return (S3D_MASTER*) Pback; }
|
||||
|
||||
// Accessors
|
||||
void SetLastTransparency( double aValue ) { m_lastTransparency = aValue; }
|
||||
void Insert( S3D_MATERIAL* aMaterial )
|
||||
{
|
||||
aMaterial->SetNext( m_Materials );
|
||||
m_Materials = aMaterial;
|
||||
}
|
||||
|
||||
void SetLoadTransparentObjects( bool aLoad )
|
||||
{ m_loadTransparentObjects = aLoad; }
|
||||
|
||||
void SetLoadNonTransparentObjects( bool aLoad )
|
||||
{ m_loadNonTransparentObjects = aLoad; }
|
||||
|
||||
void Insert( S3D_MATERIAL* aMaterial );
|
||||
|
||||
/**
|
||||
* Function IsOpenGlAllowed
|
||||
* @return true if opengl current list accepts a gl data
|
||||
* used to filter transparent objects, which are drawn after
|
||||
* non transparent objects
|
||||
*/
|
||||
bool IsOpenGlAllowed();
|
||||
|
||||
void Copy( S3D_MASTER* pattern );
|
||||
|
||||
/**
|
||||
* Function ReadData
|
||||
* Select the parser to read the 3D data file (vrml, x3d ...)
|
||||
* and build the description objects list
|
||||
*/
|
||||
int ReadData();
|
||||
|
||||
/**
|
||||
* Function ObjectCoordsTo3DUnits
|
||||
* @param aVertices = a list of 3D coordinates in shape units
|
||||
* to convert to 3D canvas units, according to the
|
||||
* footprint 3Dshape rotation, offset and scale parameters
|
||||
*/
|
||||
void ObjectCoordsTo3DUnits( std::vector< S3D_VERTEX >& aVertices );
|
||||
void Set_Object_Coords( std::vector< S3D_VERTEX >& aVertices );
|
||||
|
||||
#if defined(DEBUG)
|
||||
void Show( int nestLevel, std::ostream& os ) const { ShowDummy( os ); } // override
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Function Is3DType
|
||||
* returns true if the argument matches the type of model referred to
|
||||
* by m_Shape3DName
|
||||
*/
|
||||
bool Is3DType( enum FILE3D_TYPE aShapeType );
|
||||
|
||||
const wxString& GetShape3DName( void )
|
||||
{
|
||||
return m_Shape3DName;
|
||||
}
|
||||
|
||||
/**
|
||||
* Function GetShape3DFullFilename
|
||||
* @return the full filename of the 3D shape,
|
||||
* expanding environment variable (if any ) and/or adding default 3D path
|
||||
* given by environment variable KISYS3DMOD
|
||||
*/
|
||||
const wxString GetShape3DFullFilename();
|
||||
|
||||
/**
|
||||
* Function SetShape3DName
|
||||
* @param aShapeName = file name of the data file relative to the 3D shape
|
||||
*
|
||||
* Set the filename of the 3D shape, and depending on the file extention
|
||||
* (vrl, x3d, idf ) the type of file.
|
||||
*/
|
||||
void SetShape3DName( const wxString& aShapeName );
|
||||
};
|
||||
|
||||
|
||||
@@ -178,6 +138,8 @@ public:
|
||||
STRUCT_3D_SHAPE* Next() const { return (STRUCT_3D_SHAPE*) Pnext; }
|
||||
STRUCT_3D_SHAPE* Back() const { return (STRUCT_3D_SHAPE*) Pback; }
|
||||
|
||||
int ReadData( FILE* file, int* LineNum );
|
||||
|
||||
#if defined(DEBUG)
|
||||
void Show( int nestLevel, std::ostream& os ) const { ShowDummy( os ); } // override
|
||||
#endif
|
||||
|
||||
+72
-103
@@ -1,9 +1,9 @@
|
||||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2013 Jean-Pierre Charras, jp.charras at wanadoo.fr
|
||||
* Copyright (C) 2013 Wayne Stambaugh <stambaughw@verizon.net>
|
||||
* Copyright (C) 1992-2013 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
* Copyright (C) 2009 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com
|
||||
* Copyright (C) 2011 Wayne Stambaugh <stambaughw@verizon.net>
|
||||
* Copyright (C) 1992-2011 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
@@ -35,98 +35,104 @@
|
||||
#include <3d_viewer_id.h>
|
||||
|
||||
|
||||
void EDA_3D_FRAME::ReCreateMainToolbar()
|
||||
void EDA_3D_FRAME::ReCreateHToolbar()
|
||||
{
|
||||
if( m_mainToolBar != NULL )
|
||||
if( m_HToolBar != NULL )
|
||||
{
|
||||
// Simple update to the list of old files.
|
||||
SetToolbars();
|
||||
return;
|
||||
}
|
||||
|
||||
m_mainToolBar = new wxAuiToolBar( this, ID_H_TOOLBAR, wxDefaultPosition, wxDefaultSize,
|
||||
m_HToolBar = new wxAuiToolBar( this, ID_H_TOOLBAR, wxDefaultPosition, wxDefaultSize,
|
||||
wxAUI_TB_DEFAULT_STYLE | wxAUI_TB_HORZ_LAYOUT );
|
||||
|
||||
// Set up toolbar
|
||||
m_mainToolBar->AddTool( ID_RELOAD3D_BOARD, wxEmptyString,
|
||||
KiBitmap( import3d_xpm ), _( "Reload board" ) );
|
||||
m_HToolBar->AddTool( ID_RELOAD3D_BOARD, wxEmptyString,
|
||||
KiBitmap( import3d_xpm ),
|
||||
_( "Reload board" ) );
|
||||
|
||||
#if (defined(__WINDOWS__) || defined(__APPLE__ ) )
|
||||
|
||||
// Does not work properly under linux
|
||||
m_mainToolBar->AddSeparator();
|
||||
m_HToolBar->AddSeparator();
|
||||
|
||||
m_mainToolBar->AddTool( ID_TOOL_SCREENCOPY_TOCLIBBOARD, wxEmptyString,
|
||||
m_HToolBar->AddTool( ID_TOOL_SCREENCOPY_TOCLIBBOARD, wxEmptyString,
|
||||
KiBitmap( copy_button_xpm ),
|
||||
_( "Copy 3D Image to Clipboard" ) );
|
||||
#endif
|
||||
|
||||
m_mainToolBar->AddSeparator();
|
||||
m_HToolBar->AddSeparator();
|
||||
|
||||
m_mainToolBar->AddTool( ID_TOOL_SET_VISIBLE_ITEMS, wxEmptyString,
|
||||
m_HToolBar->AddTool( ID_TOOL_SET_VISIBLE_ITEMS, wxEmptyString,
|
||||
KiBitmap( read_setup_xpm ),
|
||||
_( "Set display options, and some layers visibility" ) );
|
||||
m_mainToolBar->AddSeparator();
|
||||
m_HToolBar->AddSeparator();
|
||||
|
||||
m_mainToolBar->AddTool( ID_ZOOM_IN, wxEmptyString, KiBitmap( zoom_in_xpm ),
|
||||
m_HToolBar->AddTool( ID_ZOOM_IN, wxEmptyString, KiBitmap( zoom_in_xpm ),
|
||||
_( "Zoom in" ) );
|
||||
|
||||
m_mainToolBar->AddTool( ID_ZOOM_OUT, wxEmptyString, KiBitmap( zoom_out_xpm ),
|
||||
m_HToolBar->AddTool( ID_ZOOM_OUT, wxEmptyString, KiBitmap( zoom_out_xpm ),
|
||||
_( "Zoom out" ) );
|
||||
|
||||
m_mainToolBar->AddTool( ID_ZOOM_REDRAW, wxEmptyString,
|
||||
m_HToolBar->AddTool( ID_ZOOM_REDRAW, wxEmptyString,
|
||||
KiBitmap( zoom_redraw_xpm ),
|
||||
_( "Redraw view" ) );
|
||||
|
||||
m_mainToolBar->AddTool( ID_ZOOM_PAGE, wxEmptyString, KiBitmap( zoom_fit_in_page_xpm ),
|
||||
m_HToolBar->AddTool( ID_ZOOM_PAGE, wxEmptyString, KiBitmap( zoom_fit_in_page_xpm ),
|
||||
_( "Fit in page" ) );
|
||||
|
||||
m_mainToolBar->AddSeparator();
|
||||
m_mainToolBar->AddTool( ID_ROTATE3D_X_NEG, wxEmptyString,
|
||||
m_HToolBar->AddSeparator();
|
||||
m_HToolBar->AddTool( ID_ROTATE3D_X_NEG, wxEmptyString,
|
||||
KiBitmap( rotate_neg_x_xpm ),
|
||||
_( "Rotate X <-" ) );
|
||||
|
||||
m_mainToolBar->AddTool( ID_ROTATE3D_X_POS, wxEmptyString,
|
||||
m_HToolBar->AddTool( ID_ROTATE3D_X_POS, wxEmptyString,
|
||||
KiBitmap( rotate_pos_x_xpm ),
|
||||
_( "Rotate X ->" ) );
|
||||
|
||||
m_mainToolBar->AddSeparator();
|
||||
m_mainToolBar->AddTool( ID_ROTATE3D_Y_NEG, wxEmptyString,
|
||||
m_HToolBar->AddSeparator();
|
||||
m_HToolBar->AddTool( ID_ROTATE3D_Y_NEG, wxEmptyString,
|
||||
KiBitmap( rotate_neg_y_xpm ),
|
||||
_( "Rotate Y <-" ) );
|
||||
|
||||
m_mainToolBar->AddTool( ID_ROTATE3D_Y_POS, wxEmptyString,
|
||||
m_HToolBar->AddTool( ID_ROTATE3D_Y_POS, wxEmptyString,
|
||||
KiBitmap( rotate_pos_y_xpm ),
|
||||
_( "Rotate Y ->" ) );
|
||||
|
||||
m_mainToolBar->AddSeparator();
|
||||
m_mainToolBar->AddTool( ID_ROTATE3D_Z_NEG, wxEmptyString,
|
||||
m_HToolBar->AddSeparator();
|
||||
m_HToolBar->AddTool( ID_ROTATE3D_Z_NEG, wxEmptyString,
|
||||
KiBitmap( rotate_neg_z_xpm ),
|
||||
_( "Rotate Z <-" ) );
|
||||
|
||||
m_mainToolBar->AddTool( ID_ROTATE3D_Z_POS, wxEmptyString,
|
||||
m_HToolBar->AddTool( ID_ROTATE3D_Z_POS, wxEmptyString,
|
||||
KiBitmap( rotate_pos_z_xpm ),
|
||||
_( "Rotate Z ->" ) );
|
||||
|
||||
m_mainToolBar->AddSeparator();
|
||||
m_mainToolBar->AddTool( ID_MOVE3D_LEFT, wxEmptyString, KiBitmap( left_xpm ),
|
||||
m_HToolBar->AddSeparator();
|
||||
m_HToolBar->AddTool( ID_MOVE3D_LEFT, wxEmptyString, KiBitmap( left_xpm ),
|
||||
_( "Move left" ) );
|
||||
|
||||
m_mainToolBar->AddTool( ID_MOVE3D_RIGHT, wxEmptyString, KiBitmap( right_xpm ),
|
||||
m_HToolBar->AddTool( ID_MOVE3D_RIGHT, wxEmptyString, KiBitmap( right_xpm ),
|
||||
_( "Move right" ) );
|
||||
|
||||
m_mainToolBar->AddTool( ID_MOVE3D_UP, wxEmptyString, KiBitmap( up_xpm ),
|
||||
m_HToolBar->AddTool( ID_MOVE3D_UP, wxEmptyString, KiBitmap( up_xpm ),
|
||||
_( "Move up" ) );
|
||||
|
||||
m_mainToolBar->AddTool( ID_MOVE3D_DOWN, wxEmptyString, KiBitmap( down_xpm ),
|
||||
m_HToolBar->AddTool( ID_MOVE3D_DOWN, wxEmptyString, KiBitmap( down_xpm ),
|
||||
_( "Move down" ) );
|
||||
|
||||
m_mainToolBar->AddSeparator();
|
||||
m_mainToolBar->AddTool( ID_ORTHO, wxEmptyString, KiBitmap( ortho_xpm ),
|
||||
m_HToolBar->AddSeparator();
|
||||
m_HToolBar->AddTool( ID_ORTHO, wxEmptyString, KiBitmap( ortho_xpm ),
|
||||
_( "Enable/Disable orthographic projection" ),
|
||||
wxITEM_CHECK );
|
||||
|
||||
m_mainToolBar->Realize();
|
||||
m_HToolBar->Realize();
|
||||
}
|
||||
|
||||
|
||||
void EDA_3D_FRAME::ReCreateVToolbar()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -152,81 +158,56 @@ void EDA_3D_FRAME::CreateMenuBar()
|
||||
|
||||
menuBar->Append( prefsMenu, _( "&Preferences" ) );
|
||||
|
||||
AddMenuItem( prefsMenu, ID_MENU3D_REALISTIC_MODE,
|
||||
_( "Realistic Mode" ),
|
||||
KiBitmap( use_3D_copper_thickness_xpm ), wxITEM_CHECK );
|
||||
|
||||
AddMenuItem( prefsMenu, ID_MENU3D_MAX_QUALITY_FOR_REALISTIC_MODE,
|
||||
_( "Max Quality in Realistic Mode" ),
|
||||
_( "When using max quality, holes are removed from copper zones, "
|
||||
"but the calculation time is longer" ),
|
||||
KiBitmap( green_xpm ), wxITEM_CHECK );
|
||||
|
||||
prefsMenu->AppendSeparator();
|
||||
|
||||
AddMenuItem( prefsMenu, ID_MENU3D_BGCOLOR_SELECTION,
|
||||
_( "Choose Background Color" ), KiBitmap( palette_xpm ) );
|
||||
_( "Choose background color" ), KiBitmap( palette_xpm ) );
|
||||
|
||||
AddMenuItem( prefsMenu, ID_MENU3D_AXIS_ONOFF,
|
||||
_( "Show 3D &Axis" ), KiBitmap( axis3d_front_xpm ), wxITEM_CHECK );
|
||||
wxMenuItem* item;
|
||||
item = AddMenuItem( prefsMenu, ID_MENU3D_AXIS_ONOFF,
|
||||
_( "Show 3D &Axis" ), KiBitmap( axis3d_front_xpm ), wxITEM_CHECK );
|
||||
item->Check(g_Parm_3D_Visu.m_DrawFlags[g_Parm_3D_Visu.FL_AXIS]);
|
||||
|
||||
// Creates grid menu
|
||||
wxMenu * gridlistMenu = new wxMenu;
|
||||
AddMenuItem( prefsMenu, gridlistMenu, ID_MENU3D_GRID,
|
||||
item = AddMenuItem( prefsMenu, gridlistMenu, ID_MENU3D_GRID,
|
||||
_( "3D Grid" ), KiBitmap( grid_xpm ) );
|
||||
gridlistMenu->Append( ID_MENU3D_GRID_NOGRID, _( "No 3D Grid" ), wxEmptyString, true );
|
||||
gridlistMenu->Append( ID_MENU3D_GRID_10_MM, _( "3D Grid 10 mm" ), wxEmptyString, true );
|
||||
gridlistMenu->Append( ID_MENU3D_GRID_5_MM, _( "3D Grid 5 mm" ), wxEmptyString, true );
|
||||
gridlistMenu->Append( ID_MENU3D_GRID_2P5_MM, _( "3D Grid 2.5 mm" ), wxEmptyString, true );
|
||||
gridlistMenu->Append( ID_MENU3D_GRID_1_MM, _( "3D Grid 1 mm" ), wxEmptyString, true );
|
||||
gridlistMenu->Append( ID_MENU3D_GRID_NOGRID, _( "No 3D Grid" ), wxEmptyString, true );
|
||||
gridlistMenu->Check( ID_MENU3D_GRID_NOGRID, true );
|
||||
|
||||
// If the grid is on, check the corresponding menuitem showing the grid size
|
||||
if( g_Parm_3D_Visu.GetFlag( FL_GRID ) )
|
||||
{
|
||||
gridlistMenu->Check( ID_MENU3D_GRID_10_MM, g_Parm_3D_Visu.m_3D_Grid == 10.0 );
|
||||
gridlistMenu->Check( ID_MENU3D_GRID_5_MM, g_Parm_3D_Visu.m_3D_Grid == 5.0 );
|
||||
gridlistMenu->Check( ID_MENU3D_GRID_2P5_MM, g_Parm_3D_Visu.m_3D_Grid == 2.5 );
|
||||
gridlistMenu->Check( ID_MENU3D_GRID_1_MM, g_Parm_3D_Visu.m_3D_Grid == 1.0 );
|
||||
}
|
||||
else
|
||||
gridlistMenu->Check( ID_MENU3D_GRID_NOGRID, true );
|
||||
gridlistMenu->Append( ID_MENU3D_GRID_10_MM, _( "3D Grid 10 mm" ), wxEmptyString, true );
|
||||
gridlistMenu->Append( ID_MENU3D_GRID_5_MM, _( "3D Grid 5 mm" ), wxEmptyString, true );
|
||||
gridlistMenu->Append( ID_MENU3D_GRID_2P5_MM, _( "3D Grid 2.5 mm" ), wxEmptyString, true );
|
||||
gridlistMenu->Append( ID_MENU3D_GRID_1_MM, _( "3D Grid 1 mm" ), wxEmptyString, true );
|
||||
|
||||
prefsMenu->AppendSeparator();
|
||||
|
||||
AddMenuItem( prefsMenu, ID_MENU3D_SHOW_BOARD_BODY,
|
||||
_( "Show Board Body" ), KiBitmap( use_3D_copper_thickness_xpm ), wxITEM_CHECK );
|
||||
|
||||
AddMenuItem( prefsMenu, ID_MENU3D_USE_COPPER_THICKNESS,
|
||||
item = AddMenuItem( prefsMenu, ID_MENU3D_USE_COPPER_THICKNESS,
|
||||
_( "Show Copper Thickness" ), KiBitmap( use_3D_copper_thickness_xpm ), wxITEM_CHECK );
|
||||
|
||||
AddMenuItem( prefsMenu, ID_MENU3D_MODULE_ONOFF,
|
||||
item = AddMenuItem( prefsMenu, ID_MENU3D_MODULE_ONOFF,
|
||||
_( "Show 3D F&ootprints" ), KiBitmap( shape_3d_xpm ), wxITEM_CHECK );
|
||||
|
||||
AddMenuItem( prefsMenu, ID_MENU3D_ZONE_ONOFF,
|
||||
item = AddMenuItem( prefsMenu, ID_MENU3D_ZONE_ONOFF,
|
||||
_( "Show Zone &Filling" ), KiBitmap( add_zone_xpm ), wxITEM_CHECK );
|
||||
|
||||
prefsMenu->AppendSeparator();
|
||||
|
||||
AddMenuItem( prefsMenu, ID_MENU3D_ADHESIVE_ONOFF,
|
||||
item = AddMenuItem( prefsMenu, ID_MENU3D_ADHESIVE_ONOFF,
|
||||
_( "Show &Adhesive Layers" ), KiBitmap( tools_xpm ), wxITEM_CHECK );
|
||||
item->Check(g_Parm_3D_Visu.m_DrawFlags[g_Parm_3D_Visu.FL_ADHESIVE]);
|
||||
|
||||
AddMenuItem( prefsMenu, ID_MENU3D_SILKSCREEN_ONOFF,
|
||||
item = AddMenuItem( prefsMenu, ID_MENU3D_SILKSCREEN_ONOFF,
|
||||
_( "Show &Silkscreen Layer" ), KiBitmap( add_text_xpm ), wxITEM_CHECK );
|
||||
|
||||
AddMenuItem( prefsMenu, ID_MENU3D_SOLDER_MASK_ONOFF,
|
||||
item = AddMenuItem( prefsMenu, ID_MENU3D_SOLDER_MASK_ONOFF,
|
||||
_( "Show Solder &Mask Layers" ), KiBitmap( pads_mask_layers_xpm ), wxITEM_CHECK );
|
||||
|
||||
AddMenuItem( prefsMenu, ID_MENU3D_SOLDER_PASTE_ONOFF,
|
||||
item = AddMenuItem( prefsMenu, ID_MENU3D_SOLDER_PASTE_ONOFF,
|
||||
_( "Show Solder &Paste Layers" ), KiBitmap( pads_mask_layers_xpm ), wxITEM_CHECK );
|
||||
|
||||
AddMenuItem( prefsMenu, ID_MENU3D_COMMENTS_ONOFF,
|
||||
item = AddMenuItem( prefsMenu, ID_MENU3D_COMMENTS_ONOFF,
|
||||
_( "Show &Comments and Drawings Layer" ), KiBitmap( edit_sheet_xpm ), wxITEM_CHECK );
|
||||
|
||||
AddMenuItem( prefsMenu, ID_MENU3D_ECO_ONOFF,
|
||||
item = AddMenuItem( prefsMenu, ID_MENU3D_ECO_ONOFF,
|
||||
_( "Show &Eco Layers" ), KiBitmap( edit_sheet_xpm ), wxITEM_CHECK );
|
||||
|
||||
SetMenuBar( menuBar );
|
||||
SetMenuBarOptionsState();
|
||||
SetMenuBar( menuBar );
|
||||
}
|
||||
|
||||
void EDA_3D_FRAME::SetMenuBarOptionsState()
|
||||
@@ -238,44 +219,32 @@ void EDA_3D_FRAME::SetMenuBarOptionsState()
|
||||
|
||||
wxMenuItem* item;
|
||||
// Set the state of toggle menus according to the current display options
|
||||
item = menuBar->FindItem( ID_MENU3D_REALISTIC_MODE );
|
||||
item->Check( g_Parm_3D_Visu.IsRealisticMode() );
|
||||
|
||||
item = menuBar->FindItem( ID_MENU3D_MAX_QUALITY_FOR_REALISTIC_MODE );
|
||||
item->Check( g_Parm_3D_Visu.HightQualityMode() );
|
||||
|
||||
item = menuBar->FindItem( ID_MENU3D_SHOW_BOARD_BODY );
|
||||
item->Check( g_Parm_3D_Visu.GetFlag( FL_SHOW_BOARD_BODY ) );
|
||||
|
||||
item = menuBar->FindItem( ID_MENU3D_USE_COPPER_THICKNESS );
|
||||
item->Check( g_Parm_3D_Visu.GetFlag( FL_USE_COPPER_THICKNESS ) );
|
||||
item->Check(g_Parm_3D_Visu.m_DrawFlags[g_Parm_3D_Visu.FL_USE_COPPER_THICKNESS]);
|
||||
|
||||
item = menuBar->FindItem( ID_MENU3D_MODULE_ONOFF );
|
||||
item->Check( g_Parm_3D_Visu.GetFlag( FL_MODULE ) );
|
||||
item->Check(g_Parm_3D_Visu.m_DrawFlags[g_Parm_3D_Visu.FL_MODULE]);
|
||||
|
||||
item = menuBar->FindItem( ID_MENU3D_ZONE_ONOFF );
|
||||
item->Check( g_Parm_3D_Visu.GetFlag( FL_ZONE ) );
|
||||
|
||||
item = menuBar->FindItem( ID_MENU3D_AXIS_ONOFF );
|
||||
item->Check( g_Parm_3D_Visu.GetFlag( FL_AXIS ) );
|
||||
item->Check(g_Parm_3D_Visu.m_DrawFlags[g_Parm_3D_Visu.FL_ZONE]);
|
||||
|
||||
item = menuBar->FindItem( ID_MENU3D_ADHESIVE_ONOFF );
|
||||
item->Check( g_Parm_3D_Visu.GetFlag( FL_ADHESIVE ) );
|
||||
item->Check(g_Parm_3D_Visu.m_DrawFlags[g_Parm_3D_Visu.FL_ADHESIVE]);
|
||||
|
||||
item = menuBar->FindItem( ID_MENU3D_SILKSCREEN_ONOFF );
|
||||
item->Check( g_Parm_3D_Visu.GetFlag( FL_SILKSCREEN ) );
|
||||
item->Check(g_Parm_3D_Visu.m_DrawFlags[g_Parm_3D_Visu.FL_SILKSCREEN]);
|
||||
|
||||
item = menuBar->FindItem( ID_MENU3D_SOLDER_MASK_ONOFF );
|
||||
item->Check( g_Parm_3D_Visu.GetFlag( FL_SOLDERMASK ) );
|
||||
item->Check(g_Parm_3D_Visu.m_DrawFlags[g_Parm_3D_Visu.FL_SOLDERMASK]);
|
||||
|
||||
item = menuBar->FindItem( ID_MENU3D_SOLDER_PASTE_ONOFF );
|
||||
item->Check( g_Parm_3D_Visu.GetFlag( FL_SOLDERPASTE ) );
|
||||
item->Check(g_Parm_3D_Visu.m_DrawFlags[g_Parm_3D_Visu.FL_SOLDERPASTE]);
|
||||
|
||||
item = menuBar->FindItem( ID_MENU3D_COMMENTS_ONOFF );
|
||||
item->Check( g_Parm_3D_Visu.GetFlag( FL_COMMENTS ) );
|
||||
item->Check(g_Parm_3D_Visu.m_DrawFlags[g_Parm_3D_Visu.FL_COMMENTS]);
|
||||
|
||||
item = menuBar->FindItem( ID_MENU3D_ECO_ONOFF );
|
||||
item->Check( g_Parm_3D_Visu.GetFlag( FL_ECO ));
|
||||
item->Check(g_Parm_3D_Visu.m_DrawFlags[g_Parm_3D_Visu.FL_ECO]);
|
||||
}
|
||||
|
||||
void EDA_3D_FRAME::SetToolbars()
|
||||
|
||||
+30
-23
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2014 Jean-Pierre Charras, jp.charras at wanadoo.fr
|
||||
* Copyright (C) 2004 Jean-Pierre Charras, jp.charras at wanadoo.fr
|
||||
* Copyright (C) 2011 Wayne Stambaugh <stambaughw@verizon.net>
|
||||
* Copyright (C) 1992-2011 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
*
|
||||
@@ -30,46 +30,55 @@
|
||||
#ifndef __3D_VIEWER_H__
|
||||
#define __3D_VIEWER_H__
|
||||
|
||||
#include <draw_frame.h>
|
||||
#include <wxBasePcbFrame.h> // for m_auimanager member.
|
||||
|
||||
#if !wxUSE_GLCANVAS
|
||||
#error Please build wxWidgets with Opengl support (./configure --with-opengl)
|
||||
#error Please set wxUSE_GLCANVAS to 1 in setup.h.
|
||||
#endif
|
||||
|
||||
#include <wx/glcanvas.h>
|
||||
|
||||
#ifdef __WXMAC__
|
||||
# ifdef __DARWIN__
|
||||
# include <OpenGL/glu.h>
|
||||
# else
|
||||
# include <glu.h>
|
||||
# endif
|
||||
#else
|
||||
# include <GL/glu.h>
|
||||
#endif
|
||||
|
||||
#include <3d_struct.h>
|
||||
|
||||
#define KISYS3DMOD "KISYS3DMOD"
|
||||
|
||||
class EDA_3D_CANVAS;
|
||||
class PCB_BASE_FRAME;
|
||||
|
||||
#define KICAD_DEFAULT_3D_DRAWFRAME_STYLE (wxDEFAULT_FRAME_STYLE | wxWANTS_CHARS)
|
||||
#define LIB3D_PATH wxT( "packages3d" )
|
||||
#define KICAD_DEFAULT_3D_DRAWFRAME_STYLE wxDEFAULT_FRAME_STYLE | wxWANTS_CHARS
|
||||
#define LIB3D_PATH wxT( "packages3d" )
|
||||
|
||||
|
||||
class EDA_3D_FRAME : public KIWAY_PLAYER
|
||||
class EDA_3D_FRAME : public wxFrame
|
||||
{
|
||||
private:
|
||||
wxString m_frameName; // name used for writing and reading setup. It is "Frame3D"
|
||||
EDA_3D_CANVAS* m_canvas;
|
||||
wxAuiToolBar* m_HToolBar;
|
||||
wxAuiToolBar* m_VToolBar;
|
||||
wxPoint m_framePos;
|
||||
wxSize m_frameSize;
|
||||
wxAuiManager m_auimgr;
|
||||
bool m_reloadRequest;
|
||||
wxString m_defaultFileName; /// Filename to propose for screenshot
|
||||
|
||||
/// Tracks whether to use Orthographic or Perspective projection
|
||||
bool m_ortho;
|
||||
|
||||
public:
|
||||
EDA_3D_FRAME( KIWAY* aKiway, PCB_BASE_FRAME* aParent, const wxString& aTitle,
|
||||
EDA_3D_FRAME( PCB_BASE_FRAME* parent, const wxString& title,
|
||||
long style = KICAD_DEFAULT_3D_DRAWFRAME_STYLE );
|
||||
|
||||
~EDA_3D_FRAME()
|
||||
{
|
||||
m_auimgr.UnInit();
|
||||
};
|
||||
|
||||
PCB_BASE_FRAME* Parent() const { return (PCB_BASE_FRAME*)GetParent(); }
|
||||
|
||||
BOARD* GetBoard();
|
||||
PCB_BASE_FRAME* Parent() { return (PCB_BASE_FRAME*)GetParent(); }
|
||||
|
||||
/**
|
||||
* Function ReloadRequest
|
||||
@@ -86,10 +95,8 @@ public:
|
||||
* Function NewDisplay
|
||||
* Rebuild the display list.
|
||||
* must be called when 3D opengl data is modified
|
||||
* @param aGlList = the list to rebuild.
|
||||
* if 0 (default) all lists are rebuilt
|
||||
*/
|
||||
void NewDisplay( int aGlList = 0 );
|
||||
void NewDisplay();
|
||||
|
||||
void SetDefaultFileName(const wxString &aFn) { m_defaultFileName = aFn; }
|
||||
const wxString &GetDefaultFileName() const { return m_defaultFileName; }
|
||||
@@ -114,11 +121,11 @@ private:
|
||||
void CreateMenuBar();
|
||||
void SetMenuBarOptionsState(); // Set the state of toggle menus according
|
||||
// to the current display options
|
||||
void ReCreateMainToolbar();
|
||||
void ReCreateHToolbar();
|
||||
void ReCreateVToolbar();
|
||||
void SetToolbars();
|
||||
|
||||
void LoadSettings( wxConfigBase* aCfg ); // overload virtual
|
||||
void SaveSettings( wxConfigBase* aCfg ); // overload virtual
|
||||
void GetSettings();
|
||||
void SaveSettings();
|
||||
|
||||
// Other functions
|
||||
void OnLeftClick( wxDC* DC, const wxPoint& MousePos );
|
||||
|
||||
@@ -39,9 +39,6 @@ enum id_3dview_frm
|
||||
ID_MENU3D_SOLDER_MASK_ONOFF,
|
||||
ID_MENU3D_COMMENTS_ONOFF,
|
||||
ID_MENU3D_ECO_ONOFF,
|
||||
ID_MENU3D_SHOW_BOARD_BODY,
|
||||
ID_MENU3D_REALISTIC_MODE,
|
||||
ID_MENU3D_MAX_QUALITY_FOR_REALISTIC_MODE,
|
||||
ID_END_COMMAND_3D,
|
||||
|
||||
ID_TOOL_SET_VISIBLE_ITEMS,
|
||||
|
||||
@@ -2,10 +2,8 @@ add_definitions(-DPCBNEW)
|
||||
|
||||
include_directories(BEFORE ${INC_BEFORE})
|
||||
include_directories(
|
||||
textures
|
||||
../pcbnew
|
||||
../polygon
|
||||
${GLEW_INCLUDE_DIR}
|
||||
${INC_AFTER}
|
||||
)
|
||||
|
||||
@@ -17,19 +15,13 @@ set(3D-VIEWER_SRCS
|
||||
3d_class.cpp
|
||||
3d_draw.cpp
|
||||
3d_draw_basic_functions.cpp
|
||||
3d_draw_helper_functions.cpp
|
||||
3d_frame.cpp
|
||||
3d_material.cpp
|
||||
3d_mesh_model.cpp
|
||||
3d_read_mesh.cpp
|
||||
3d_toolbar.cpp
|
||||
info3d_visu.cpp
|
||||
trackball.cpp
|
||||
vrmlmodelparser.cpp
|
||||
vrml_aux.cpp
|
||||
vrml_v1_modelparser.cpp
|
||||
vrml_v2_modelparser.cpp
|
||||
x3dmodelparser.cpp
|
||||
vrmlmodelparser.cpp
|
||||
)
|
||||
|
||||
add_library(3d-viewer STATIC ${3D-VIEWER_SRCS})
|
||||
|
||||
@@ -10,7 +10,6 @@ public:
|
||||
|
||||
private:
|
||||
EDA_3D_FRAME* m_parent;
|
||||
INFO3D_VISU & m_3Dprms;
|
||||
|
||||
void initDialog();
|
||||
|
||||
@@ -32,7 +31,7 @@ void EDA_3D_FRAME::Install_3D_ViewOptionDialog( wxCommandEvent& event )
|
||||
|
||||
|
||||
DIALOG_3D_VIEW_OPTIONS::DIALOG_3D_VIEW_OPTIONS( EDA_3D_FRAME* parent )
|
||||
:DIALOG_3D_VIEW_OPTIONS_BASE( parent ), m_3Dprms( g_Parm_3D_Visu )
|
||||
:DIALOG_3D_VIEW_OPTIONS_BASE( parent )
|
||||
{
|
||||
m_parent = parent;
|
||||
|
||||
@@ -56,15 +55,24 @@ void DIALOG_3D_VIEW_OPTIONS::initDialog()
|
||||
m_bitmapECO->SetBitmap( KiBitmap( edit_sheet_xpm ) );
|
||||
|
||||
// Check/uncheck checkboxes
|
||||
m_checkBoxCuThickness->SetValue( m_3Dprms.GetFlag( FL_USE_COPPER_THICKNESS ) );
|
||||
m_checkBox3Dshapes->SetValue( m_3Dprms.GetFlag( FL_MODULE ) );
|
||||
m_checkBoxAreas->SetValue( m_3Dprms.GetFlag( FL_ZONE ) );
|
||||
m_checkBoxSilkscreen->SetValue( m_3Dprms.GetFlag( FL_SILKSCREEN ) );
|
||||
m_checkBoxSolderMask->SetValue( m_3Dprms.GetFlag( FL_SOLDERMASK ) );
|
||||
m_checkBoxSolderpaste->SetValue( m_3Dprms.GetFlag( FL_SOLDERPASTE ) );
|
||||
m_checkBoxAdhesive->SetValue( m_3Dprms.GetFlag( FL_ADHESIVE ) );
|
||||
m_checkBoxComments->SetValue( m_3Dprms.GetFlag( FL_COMMENTS ) );
|
||||
m_checkBoxECO->SetValue( m_3Dprms.GetFlag( FL_ECO ) );
|
||||
m_checkBoxCuThickness->SetValue(
|
||||
g_Parm_3D_Visu.m_DrawFlags[g_Parm_3D_Visu.FL_USE_COPPER_THICKNESS] );
|
||||
m_checkBox3Dshapes->SetValue(
|
||||
g_Parm_3D_Visu.m_DrawFlags[g_Parm_3D_Visu.FL_MODULE] );
|
||||
m_checkBoxAreas->SetValue(
|
||||
g_Parm_3D_Visu.m_DrawFlags[g_Parm_3D_Visu.FL_ZONE] );
|
||||
m_checkBoxSilkscreen->SetValue(
|
||||
g_Parm_3D_Visu.m_DrawFlags[g_Parm_3D_Visu.FL_SILKSCREEN] );
|
||||
m_checkBoxSolderMask->SetValue(
|
||||
g_Parm_3D_Visu.m_DrawFlags[g_Parm_3D_Visu.FL_SOLDERMASK] );
|
||||
m_checkBoxSolderpaste->SetValue(
|
||||
g_Parm_3D_Visu.m_DrawFlags[g_Parm_3D_Visu.FL_SOLDERPASTE] );
|
||||
m_checkBoxAdhesive->SetValue(
|
||||
g_Parm_3D_Visu.m_DrawFlags[g_Parm_3D_Visu.FL_ADHESIVE] );
|
||||
m_checkBoxComments->SetValue(
|
||||
g_Parm_3D_Visu.m_DrawFlags[g_Parm_3D_Visu.FL_COMMENTS] );
|
||||
m_checkBoxECO->SetValue(
|
||||
g_Parm_3D_Visu.m_DrawFlags[g_Parm_3D_Visu.FL_ECO] );
|
||||
}
|
||||
|
||||
void DIALOG_3D_VIEW_OPTIONS::OnShowAllClick( wxCommandEvent& event )
|
||||
@@ -97,16 +105,24 @@ void DIALOG_3D_VIEW_OPTIONS::OnShowNoneClick( wxCommandEvent& event )
|
||||
|
||||
void DIALOG_3D_VIEW_OPTIONS::OnOKClick( wxCommandEvent& event )
|
||||
{
|
||||
m_3Dprms.SetFlag( FL_USE_COPPER_THICKNESS,
|
||||
m_checkBoxCuThickness->GetValue() );
|
||||
m_3Dprms.SetFlag( FL_MODULE, m_checkBox3Dshapes->GetValue() );
|
||||
m_3Dprms.SetFlag( FL_ZONE, m_checkBoxAreas->GetValue() );
|
||||
m_3Dprms.SetFlag( FL_SILKSCREEN, m_checkBoxSilkscreen->GetValue() );
|
||||
m_3Dprms.SetFlag( FL_SOLDERMASK, m_checkBoxSolderMask->GetValue() );
|
||||
m_3Dprms.SetFlag( FL_SOLDERPASTE, m_checkBoxSolderpaste->GetValue() );
|
||||
m_3Dprms.SetFlag( FL_ADHESIVE, m_checkBoxAdhesive->GetValue() );
|
||||
m_3Dprms.SetFlag( FL_COMMENTS, m_checkBoxComments->GetValue() );
|
||||
m_3Dprms.SetFlag( FL_ECO, m_checkBoxECO->GetValue( ) );
|
||||
g_Parm_3D_Visu.m_DrawFlags[g_Parm_3D_Visu.FL_USE_COPPER_THICKNESS] =
|
||||
m_checkBoxCuThickness->GetValue();
|
||||
g_Parm_3D_Visu.m_DrawFlags[g_Parm_3D_Visu.FL_MODULE] =
|
||||
m_checkBox3Dshapes->GetValue();
|
||||
g_Parm_3D_Visu.m_DrawFlags[g_Parm_3D_Visu.FL_ZONE] =
|
||||
m_checkBoxAreas->GetValue();
|
||||
g_Parm_3D_Visu.m_DrawFlags[g_Parm_3D_Visu.FL_SILKSCREEN] =
|
||||
m_checkBoxSilkscreen->GetValue();
|
||||
g_Parm_3D_Visu.m_DrawFlags[g_Parm_3D_Visu.FL_SOLDERMASK] =
|
||||
m_checkBoxSolderMask->GetValue();
|
||||
g_Parm_3D_Visu.m_DrawFlags[g_Parm_3D_Visu.FL_SOLDERPASTE] =
|
||||
m_checkBoxSolderpaste->GetValue();
|
||||
g_Parm_3D_Visu.m_DrawFlags[g_Parm_3D_Visu.FL_ADHESIVE] =
|
||||
m_checkBoxAdhesive->GetValue();
|
||||
g_Parm_3D_Visu.m_DrawFlags[g_Parm_3D_Visu.FL_COMMENTS] =
|
||||
m_checkBoxComments->GetValue();
|
||||
g_Parm_3D_Visu.m_DrawFlags[g_Parm_3D_Visu.FL_ECO] =
|
||||
m_checkBoxECO->GetValue();
|
||||
|
||||
EndModal( wxID_OK );
|
||||
}
|
||||
|
||||
+56
-53
@@ -39,7 +39,7 @@
|
||||
|
||||
// Thickness of copper
|
||||
// TODO: define the actual copper thickness by user
|
||||
#define COPPER_THICKNESS KiROUND( 0.035 * IU_PER_MM ) // for 35 um
|
||||
#define COPPER_THICKNESS KiROUND( 0.035 * IU_PER_MM ) // for 35 µm
|
||||
#define TECH_LAYER_THICKNESS KiROUND( 0.04 * IU_PER_MM )
|
||||
#define EPOXY_THICKNESS KiROUND( 1.6 * IU_PER_MM ) // for 1.6 mm
|
||||
|
||||
@@ -62,17 +62,16 @@ INFO3D_VISU::INFO3D_VISU()
|
||||
|
||||
m_CopperLayersCount = 2;
|
||||
m_BoardSettings = NULL;
|
||||
m_copperThickness = 0;
|
||||
m_epoxyThickness = 0;
|
||||
m_nonCopperLayerThickness = 0;
|
||||
m_CopperThickness = 0;
|
||||
m_EpoxyThickness = 0;
|
||||
m_NonCopperLayerThickness = 0;
|
||||
|
||||
// default all special item layers Visible
|
||||
for( ii = 0; ii < FL_LAST; ii++ )
|
||||
m_drawFlags[ii] = true;
|
||||
m_DrawFlags[ii] = true;
|
||||
|
||||
SetFlag( FL_GRID, false );
|
||||
SetFlag( FL_USE_COPPER_THICKNESS, false );
|
||||
SetFlag( FL_USE_MAXQUALITY_IN_REALISTIC_MODE, false );
|
||||
m_DrawFlags[FL_GRID] = false;
|
||||
m_DrawFlags[FL_USE_COPPER_THICKNESS] = false;
|
||||
}
|
||||
|
||||
|
||||
@@ -85,15 +84,14 @@ INFO3D_VISU::~INFO3D_VISU()
|
||||
*/
|
||||
void INFO3D_VISU::InitSettings( BOARD* aBoard )
|
||||
{
|
||||
EDA_RECT bbbox = aBoard->ComputeBoundingBox( true );
|
||||
EDA_RECT bbbox = aBoard->ComputeBoundingBox( false );
|
||||
|
||||
if( bbbox.GetWidth() == 0 && bbbox.GetHeight() == 0 )
|
||||
{
|
||||
bbbox.SetWidth( Millimeter2iu( 100 ) );
|
||||
bbbox.SetHeight( Millimeter2iu( 100 ) );
|
||||
bbbox.SetWidth( 100 * IU_PER_MM );
|
||||
bbbox.SetHeight( 100 * IU_PER_MM );
|
||||
}
|
||||
|
||||
|
||||
m_BoardSettings = &aBoard->GetDesignSettings();
|
||||
|
||||
m_BoardSize = bbbox.GetSize();
|
||||
@@ -109,99 +107,104 @@ void INFO3D_VISU::InitSettings( BOARD* aBoard )
|
||||
|
||||
m_BiuTo3Dunits = 2.0 / std::max( m_BoardSize.x, m_BoardSize.y );
|
||||
|
||||
m_epoxyThickness = aBoard->GetDesignSettings().GetBoardThickness() * m_BiuTo3Dunits;
|
||||
m_EpoxyThickness = aBoard->GetDesignSettings().GetBoardThickness() * m_BiuTo3Dunits;
|
||||
|
||||
// TODO use value defined by user (currently use default values by ctor
|
||||
m_copperThickness = COPPER_THICKNESS * m_BiuTo3Dunits;
|
||||
m_nonCopperLayerThickness = TECH_LAYER_THICKNESS * m_BiuTo3Dunits;
|
||||
m_CopperThickness = COPPER_THICKNESS * m_BiuTo3Dunits;
|
||||
m_NonCopperLayerThickness = TECH_LAYER_THICKNESS * m_BiuTo3Dunits;
|
||||
|
||||
// Init Z position of each layer
|
||||
// calculate z position for each copper layer
|
||||
// Z = 0 is the z position of the back (bottom) layer (layer id = 31)
|
||||
// Z = m_epoxyThickness is the z position of the front (top) layer (layer id = 0)
|
||||
// all unused copper layer z position are set to 0
|
||||
int layer;
|
||||
int copper_layers_cnt = m_CopperLayersCount;
|
||||
|
||||
for( layer = 0; layer < copper_layers_cnt; layer++ )
|
||||
{
|
||||
m_layerZcoord[layer] =
|
||||
m_epoxyThickness - (m_epoxyThickness * layer / (copper_layers_cnt - 1));
|
||||
m_LayerZcoord[layer] =
|
||||
m_EpoxyThickness * layer / (copper_layers_cnt - 1);
|
||||
}
|
||||
|
||||
#define layerThicknessMargin 1.1
|
||||
double zpos_offset = m_nonCopperLayerThickness * layerThicknessMargin;
|
||||
double zpos_copper_back = - layerThicknessMargin*m_copperThickness/2;
|
||||
double zpos_copper_front = m_epoxyThickness + layerThicknessMargin*m_copperThickness/2;
|
||||
double zpos_copper_back = m_LayerZcoord[0];
|
||||
double zpos_copper_front = m_EpoxyThickness;
|
||||
|
||||
// Fill remaining unused copper layers and back layer zpos
|
||||
// with 0
|
||||
for( ; layer < MAX_CU_LAYERS; layer++ )
|
||||
// Fill remaining unused copper layers and front layer zpos
|
||||
// with m_EpoxyThickness
|
||||
for( ; layer <= LAST_COPPER_LAYER; layer++ )
|
||||
{
|
||||
m_layerZcoord[layer] = 0;
|
||||
m_LayerZcoord[layer] = m_EpoxyThickness;
|
||||
}
|
||||
|
||||
// calculate z position for each non copper layer
|
||||
// Solder mask and Solder paste have the same Z position
|
||||
for( int layer_id = MAX_CU_LAYERS; layer_id < LAYER_ID_COUNT; layer_id++ )
|
||||
for( int layer_id = FIRST_NON_COPPER_LAYER; layer_id < NB_PCB_LAYERS; layer_id++ )
|
||||
{
|
||||
double zpos;
|
||||
#define NonCopperLayerThicknessMargin 1.1
|
||||
|
||||
switch( layer_id )
|
||||
{
|
||||
case B_Adhes:
|
||||
zpos = zpos_copper_back - 3 * zpos_offset;
|
||||
case ADHESIVE_N_BACK:
|
||||
zpos = zpos_copper_back -
|
||||
4 * m_NonCopperLayerThickness * NonCopperLayerThicknessMargin;
|
||||
break;
|
||||
|
||||
case F_Adhes:
|
||||
zpos = zpos_copper_front + 3 * zpos_offset;
|
||||
case ADHESIVE_N_FRONT:
|
||||
zpos = zpos_copper_front +
|
||||
4 * m_NonCopperLayerThickness * NonCopperLayerThicknessMargin;
|
||||
break;
|
||||
|
||||
case B_Paste:
|
||||
zpos = zpos_copper_back - 1 * zpos_offset;
|
||||
case SOLDERPASTE_N_BACK:
|
||||
zpos = zpos_copper_back -
|
||||
3 * m_NonCopperLayerThickness * NonCopperLayerThicknessMargin;
|
||||
break;
|
||||
|
||||
case F_Paste:
|
||||
zpos = zpos_copper_front + 1 * zpos_offset;
|
||||
case SOLDERPASTE_N_FRONT:
|
||||
zpos = zpos_copper_front +
|
||||
3 * m_NonCopperLayerThickness * NonCopperLayerThicknessMargin;
|
||||
break;
|
||||
|
||||
case B_Mask:
|
||||
zpos = zpos_copper_back - 1 * zpos_offset;
|
||||
case SOLDERMASK_N_BACK:
|
||||
zpos = zpos_copper_back -
|
||||
1 * m_NonCopperLayerThickness * NonCopperLayerThicknessMargin;
|
||||
break;
|
||||
|
||||
case F_Mask:
|
||||
zpos = zpos_copper_front + 1 * zpos_offset;
|
||||
case SOLDERMASK_N_FRONT:
|
||||
zpos = zpos_copper_front +
|
||||
1 * m_NonCopperLayerThickness * NonCopperLayerThicknessMargin;
|
||||
break;
|
||||
|
||||
case B_SilkS:
|
||||
zpos = zpos_copper_back - 2 * zpos_offset;
|
||||
case SILKSCREEN_N_BACK:
|
||||
zpos = zpos_copper_back -
|
||||
2 * m_NonCopperLayerThickness * NonCopperLayerThicknessMargin;
|
||||
break;
|
||||
|
||||
case F_SilkS:
|
||||
zpos = zpos_copper_front + 2 * zpos_offset;
|
||||
case SILKSCREEN_N_FRONT:
|
||||
zpos = zpos_copper_front +
|
||||
2 * m_NonCopperLayerThickness * NonCopperLayerThicknessMargin;
|
||||
break;
|
||||
|
||||
default:
|
||||
zpos = zpos_copper_front + (layer_id - MAX_CU_LAYERS + 4) * zpos_offset;
|
||||
zpos = zpos_copper_front +
|
||||
(layer_id - FIRST_NON_COPPER_LAYER + 5) *
|
||||
m_NonCopperLayerThickness * NonCopperLayerThicknessMargin;
|
||||
break;
|
||||
}
|
||||
|
||||
m_layerZcoord[layer_id] = zpos;
|
||||
m_LayerZcoord[layer_id] = zpos;
|
||||
}
|
||||
}
|
||||
|
||||
/* return the Z position of 3D shapes, in 3D Units
|
||||
* aIsFlipped: true for modules on Front (top) layer, false
|
||||
* if on back (bottom) layer
|
||||
* Note: in draw functions, the copper has a thickness = m_copperThickness
|
||||
* Vias and tracks are draw with the top side position = m_copperThickness/2
|
||||
* and the bottom side position = -m_copperThickness/2 from the Z layer position
|
||||
* Note: in draw functions, the copper has a thickness = m_CopperThickness
|
||||
* Vias and tracks are draw with the top side position = m_CopperThickness/2
|
||||
* and the bottom side position = -m_CopperThickness/2 from the Z layer position
|
||||
*/
|
||||
double INFO3D_VISU::GetModulesZcoord3DIU( bool aIsFlipped )
|
||||
{
|
||||
if( aIsFlipped )
|
||||
return m_layerZcoord[B_Paste] - ( m_copperThickness / 2 ); //B_Cu NOTE: in order to display modules in top of Paste and near the shadow
|
||||
return m_LayerZcoord[LAYER_N_BACK] - ( m_CopperThickness / 2 );
|
||||
else
|
||||
return m_layerZcoord[F_Paste] + ( m_copperThickness / 2 ); //F_Cu
|
||||
return m_LayerZcoord[LAYER_N_FRONT] + ( m_CopperThickness / 2 );
|
||||
}
|
||||
|
||||
|
||||
+28
-51
@@ -30,6 +30,7 @@
|
||||
#ifndef __INFO3D_VISU_H__
|
||||
#define __INFO3D_VISU_H__
|
||||
|
||||
#include <wxBasePcbFrame.h> // m_auimanager member.
|
||||
#include <layers_id_colors_and_visibility.h> // Layers id definitions
|
||||
|
||||
#include <wx/glcanvas.h>
|
||||
@@ -50,7 +51,6 @@
|
||||
#define m_ROTY m_Rot[1]
|
||||
#define m_ROTZ m_Rot[2]
|
||||
|
||||
class BOARD_DESIGN_SETTINGS;
|
||||
|
||||
class S3D_COLOR /* 3D color (R, G, B) 3 floats range 0 to 1.0*/
|
||||
{
|
||||
@@ -63,27 +63,25 @@ public: S3D_COLOR()
|
||||
};
|
||||
|
||||
/* information needed to display 3D board */
|
||||
enum DISPLAY3D_FLG {
|
||||
FL_AXIS=0, FL_MODULE, FL_ZONE,
|
||||
FL_ADHESIVE, FL_SILKSCREEN, FL_SOLDERMASK, FL_SOLDERPASTE,
|
||||
FL_COMMENTS, FL_ECO,
|
||||
FL_GRID,
|
||||
FL_USE_COPPER_THICKNESS,
|
||||
FL_SHOW_BOARD_BODY,
|
||||
FL_USE_REALISTIC_MODE,
|
||||
FL_USE_MAXQUALITY_IN_REALISTIC_MODE,
|
||||
FL_LAST
|
||||
};
|
||||
|
||||
class INFO3D_VISU
|
||||
{
|
||||
public:
|
||||
enum DISPLAY3D_FLG {
|
||||
FL_AXIS=0, FL_MODULE, FL_ZONE,
|
||||
FL_ADHESIVE, FL_SILKSCREEN, FL_SOLDERMASK, FL_SOLDERPASTE,
|
||||
FL_COMMENTS, FL_ECO,
|
||||
FL_GRID,
|
||||
FL_USE_COPPER_THICKNESS,
|
||||
FL_LAST
|
||||
};
|
||||
|
||||
double m_Beginx, m_Beginy; // position of mouse (used in drag commands)
|
||||
double m_Quat[4]; // orientation of 3D view
|
||||
double m_Rot[4]; // rotation parameters of 3D view
|
||||
double m_Zoom; // 3D zoom value
|
||||
double m_3D_Grid; // 3D grid value, in mm
|
||||
S3D_COLOR m_BgColor;
|
||||
bool m_DrawFlags[FL_LAST]; // Enable/disable flags (see DISPLAY3D_FLG list)
|
||||
wxPoint m_BoardPos; // center board actual position in board units
|
||||
wxSize m_BoardSize; // board actual size in board units
|
||||
int m_CopperLayersCount; // Number of copper layers actually used by the board
|
||||
@@ -95,26 +93,15 @@ public:
|
||||
// to scale 3D units between -1.0 and +1.0
|
||||
double m_CurrentZpos; // temporary storage of current value of Z position,
|
||||
// used in some calculation
|
||||
|
||||
double zpos_offset;
|
||||
|
||||
private:
|
||||
double m_layerZcoord[LAYER_ID_COUNT]; // Z position of each layer (normalized)
|
||||
double m_copperThickness; // Copper thickness (normalized)
|
||||
double m_epoxyThickness; // Epoxy thickness (normalized)
|
||||
double m_nonCopperLayerThickness; // Non copper layers thickness
|
||||
bool m_drawFlags[FL_LAST]; // Enable/disable flags (see DISPLAY3D_FLG list)
|
||||
double m_LayerZcoord[NB_LAYERS]; // Z position of each layer (normalized)
|
||||
double m_CopperThickness; // Copper thickness (normalized)
|
||||
double m_EpoxyThickness; // Epoxy thickness (normalized)
|
||||
double m_NonCopperLayerThickness; // Non copper layers thickness
|
||||
|
||||
public: INFO3D_VISU();
|
||||
~INFO3D_VISU();
|
||||
|
||||
// Accessors
|
||||
bool GetFlag( DISPLAY3D_FLG aFlag ) const { return m_drawFlags[aFlag]; }
|
||||
bool SetFlag( DISPLAY3D_FLG aFlag, bool aState )
|
||||
{
|
||||
return m_drawFlags[aFlag] = aState;
|
||||
}
|
||||
|
||||
/**
|
||||
* Function InitSettings
|
||||
* Initialize info 3D Parameters from aBoard
|
||||
@@ -137,7 +124,7 @@ public: INFO3D_VISU();
|
||||
*/
|
||||
int GetLayerZcoordBIU( int aLayerId )
|
||||
{
|
||||
return KiROUND( m_layerZcoord[aLayerId] / m_BiuTo3Dunits );
|
||||
return KiROUND( m_LayerZcoord[aLayerId] / m_BiuTo3Dunits );
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -146,15 +133,12 @@ public: INFO3D_VISU();
|
||||
* note: the thickness (Z size) of the copper is not the thickness
|
||||
* of the layer (the thickness of the layer is the epoxy thickness / layer count)
|
||||
*
|
||||
* Note: if m_drawFlags[FL_USE_COPPER_THICKNESS] is not set,
|
||||
* and normal mode, returns 0
|
||||
* Note: if m_DrawFlags[FL_USE_COPPER_THICKNESS] is not set, returns 0
|
||||
*/
|
||||
int GetCopperThicknessBIU() const
|
||||
{
|
||||
bool use_thickness = GetFlag( FL_USE_COPPER_THICKNESS );
|
||||
|
||||
return use_thickness ?
|
||||
KiROUND( m_copperThickness / m_BiuTo3Dunits )
|
||||
return m_DrawFlags[FL_USE_COPPER_THICKNESS] ?
|
||||
KiROUND( m_CopperThickness / m_BiuTo3Dunits )
|
||||
: 0;
|
||||
}
|
||||
|
||||
@@ -164,7 +148,7 @@ public: INFO3D_VISU();
|
||||
*/
|
||||
int GetEpoxyThicknessBIU() const
|
||||
{
|
||||
return KiROUND( m_epoxyThickness / m_BiuTo3Dunits );
|
||||
return KiROUND( m_EpoxyThickness / m_BiuTo3Dunits );
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -172,15 +156,12 @@ public: INFO3D_VISU();
|
||||
* @return the thickness (Z size) of a technical layer,
|
||||
* in Board Internal Units
|
||||
*
|
||||
* Note: if m_drawFlags[FL_USE_COPPER_THICKNESS] is not set, returns 0
|
||||
* Note: if m_DrawFlags[FL_USE_COPPER_THICKNESS] is not set, returns 0
|
||||
*/
|
||||
int GetNonCopperLayerThicknessBIU() const
|
||||
{
|
||||
bool use_thickness = GetFlag( FL_USE_COPPER_THICKNESS )
|
||||
// || GetFlag( FL_USE_REALISTIC_MODE )
|
||||
;
|
||||
return use_thickness ?
|
||||
KiROUND( m_nonCopperLayerThickness / m_BiuTo3Dunits )
|
||||
return m_DrawFlags[FL_USE_COPPER_THICKNESS] ?
|
||||
KiROUND( m_NonCopperLayerThickness / m_BiuTo3Dunits )
|
||||
: 0;
|
||||
}
|
||||
|
||||
@@ -189,18 +170,14 @@ public: INFO3D_VISU();
|
||||
* @return the thickness (Z size) of the copper or a technical layer,
|
||||
* in Board Internal Units, depending on the layer id
|
||||
*
|
||||
* Note: if m_drawFlags[FL_USE_COPPER_THICKNESS] is not set, returns 0
|
||||
* Note: if m_DrawFlags[FL_USE_COPPER_THICKNESS] is not set, returns 0
|
||||
*/
|
||||
int GetLayerObjectThicknessBIU( int aLayerId ) const
|
||||
int GetLayerObjectThicknessBIU( int aLayerId) const
|
||||
{
|
||||
return IsCopperLayer( aLayerId ) ?
|
||||
GetCopperThicknessBIU() :
|
||||
GetNonCopperLayerThicknessBIU()
|
||||
;
|
||||
return aLayerId >= FIRST_NON_COPPER_LAYER ?
|
||||
GetNonCopperLayerThicknessBIU() :
|
||||
GetCopperThicknessBIU();
|
||||
}
|
||||
|
||||
bool IsRealisticMode() { return GetFlag( FL_USE_REALISTIC_MODE ); }
|
||||
bool HightQualityMode() { return GetFlag( FL_USE_MAXQUALITY_IN_REALISTIC_MODE ); }
|
||||
};
|
||||
|
||||
extern INFO3D_VISU g_Parm_3D_Visu;
|
||||
|
||||
+47
-101
@@ -32,9 +32,13 @@
|
||||
#include <map>
|
||||
#include <vector>
|
||||
#include <wx/string.h>
|
||||
#include <3d_mesh_model.h>
|
||||
|
||||
|
||||
class S3D_MASTER;
|
||||
class S3D_VERTEX;
|
||||
|
||||
extern void Set_Object_Data( std::vector< S3D_VERTEX >& aVertices, double aBiuTo3DUnits );
|
||||
|
||||
class S3D_MODEL_PARSER;
|
||||
class X3D_MODEL_PARSER;
|
||||
|
||||
@@ -114,17 +118,13 @@ public:
|
||||
static void GetNodeProperties( wxXmlNode* aNode, PROPERTY_MAP& aProps );
|
||||
|
||||
/**
|
||||
* Return string representing x3d file in vrml2 format
|
||||
* Return string representing x3d file in vrml format
|
||||
* Function Load must be called before this function, otherwise empty
|
||||
* data set is returned.
|
||||
*/
|
||||
wxString VRML2_representation();
|
||||
wxString VRML_representation();
|
||||
|
||||
private:
|
||||
wxString m_Filename;
|
||||
S3D_MESH *m_model;
|
||||
std::vector<S3D_MESH *> childs;
|
||||
|
||||
std::vector< wxString > vrml_materials;
|
||||
std::vector< wxString > vrml_points;
|
||||
std::vector< wxString > vrml_coord_indexes;
|
||||
@@ -137,98 +137,8 @@ private:
|
||||
void rotate( S3D_VERTEX& aCoordinate, S3D_VERTEX& aRotAxis, double angle );
|
||||
};
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* class VRML2_MODEL_PARSER
|
||||
* Parses
|
||||
*/
|
||||
class VRML2_MODEL_PARSER: public S3D_MODEL_PARSER
|
||||
{
|
||||
public:
|
||||
VRML2_MODEL_PARSER( S3D_MASTER* aMaster );
|
||||
~VRML2_MODEL_PARSER();
|
||||
void Load( const wxString aFilename );
|
||||
|
||||
/**
|
||||
* Return string representing VRML2 file in vrml2 format
|
||||
* Function Load must be called before this function, otherwise empty
|
||||
* data set is returned.
|
||||
*/
|
||||
wxString VRML2_representation();
|
||||
|
||||
private:
|
||||
int read_Transform();
|
||||
int read_DEF();
|
||||
int read_Shape();
|
||||
int read_Appearance();
|
||||
int read_material();
|
||||
int read_Material();
|
||||
int read_IndexedFaceSet();
|
||||
int read_Coordinate();
|
||||
int read_Normal();
|
||||
int read_NormalIndex();
|
||||
int read_Color();
|
||||
int read_coordIndex();
|
||||
int read_colorIndex();
|
||||
|
||||
bool m_normalPerVertex;
|
||||
bool colorPerVertex;
|
||||
S3D_MESH *m_model;
|
||||
std::vector<S3D_MESH *> childs;
|
||||
FILE *m_file;
|
||||
S3D_MATERIAL *m_Materials;
|
||||
wxString m_Filename;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* class VRML1_MODEL_PARSER
|
||||
* Parses
|
||||
*/
|
||||
class VRML1_MODEL_PARSER: public S3D_MODEL_PARSER
|
||||
{
|
||||
public:
|
||||
VRML1_MODEL_PARSER( S3D_MASTER* aMaster );
|
||||
~VRML1_MODEL_PARSER();
|
||||
void Load( const wxString aFilename );
|
||||
|
||||
/**
|
||||
* Return string representing VRML2 file in vrml2 format
|
||||
* Function Load must be called before this function, otherwise empty
|
||||
* data set is returned.
|
||||
*/
|
||||
wxString VRML2_representation();
|
||||
|
||||
private:
|
||||
int read_separator();
|
||||
int readMaterial();
|
||||
int readCoordinate3();
|
||||
int readIndexedFaceSet();
|
||||
|
||||
int readMaterial_ambientColor();
|
||||
int readMaterial_diffuseColor();
|
||||
int readMaterial_emissiveColor();
|
||||
int readMaterial_specularColor();
|
||||
int readMaterial_shininess();
|
||||
int readMaterial_transparency();
|
||||
|
||||
int readCoordinate3_point();
|
||||
|
||||
int readIndexedFaceSet_coordIndex();
|
||||
int readIndexedFaceSet_materialIndex();
|
||||
|
||||
bool m_normalPerVertex;
|
||||
bool colorPerVertex;
|
||||
S3D_MESH *m_model;
|
||||
std::vector<S3D_MESH *> childs;
|
||||
S3D_MATERIAL *m_Materials;
|
||||
FILE *m_file;
|
||||
wxString m_Filename;
|
||||
};
|
||||
|
||||
/**
|
||||
* class VRML_MODEL_PARSER
|
||||
* class WRL_MODEL_PARSER
|
||||
* Parses
|
||||
*/
|
||||
class VRML_MODEL_PARSER: public S3D_MODEL_PARSER
|
||||
@@ -239,9 +149,45 @@ public:
|
||||
void Load( const wxString aFilename );
|
||||
|
||||
private:
|
||||
VRML1_MODEL_PARSER *vrml1_parser;
|
||||
VRML2_MODEL_PARSER *vrml2_parser;
|
||||
/**
|
||||
* Function ReadMaterial
|
||||
* read the description of a 3D material definition in the form:
|
||||
* DEF yellow material Material (
|
||||
* DiffuseColor 1.00000 1.00000 0.00000e 0
|
||||
* EmissiveColor 0.00000e 0 0.00000e 0 0.00000e 0
|
||||
* SpecularColor 1.00000 1.00000 1.00000
|
||||
* AmbientIntensity 1.00000
|
||||
* Transparency 0.00000e 0
|
||||
* Shininess 1.00000
|
||||
*)
|
||||
* Or type:
|
||||
* USE yellow material
|
||||
*/
|
||||
int readMaterial( FILE* file, int* LineNum );
|
||||
int readChildren( FILE* file, int* LineNum );
|
||||
int readShape( FILE* file, int* LineNum );
|
||||
int readAppearance( FILE* file, int* LineNum );
|
||||
int readGeometry( FILE* file, int* LineNum );
|
||||
|
||||
/**
|
||||
* Function ReadCoordList
|
||||
* reads 3D coordinate lists like:
|
||||
* coord Coordinate { point [
|
||||
* -5.24489 6.57640e-3 -9.42129e-2,
|
||||
* -5.11821 6.57421e-3 0.542654,
|
||||
* -3.45868 0.256565 1.32000 ] }
|
||||
* or:
|
||||
* normal Normal { vector [
|
||||
* 0.995171 -6.08102e-6 9.81541e-2,
|
||||
* 0.923880 -4.09802e-6 0.382683,
|
||||
* 0.707107 -9.38186e-7 0.707107]
|
||||
* }
|
||||
*
|
||||
* text_buffer contains the first line of this node :
|
||||
* "coord Coordinate { point ["
|
||||
*/
|
||||
void readCoordsList( FILE* file, char* text_buffer, std::vector< double >& aList,
|
||||
int* LineNum );
|
||||
};
|
||||
|
||||
|
||||
#endif // MODELPARSERS_H
|
||||
|
||||
@@ -1,922 +0,0 @@
|
||||
/* GIMP RGBA C-Source image dump (text_pcb.c) */
|
||||
|
||||
static const struct {
|
||||
unsigned int width;
|
||||
unsigned int height;
|
||||
unsigned int bytes_per_pixel; /* 2:RGB16, 3:RGB, 4:RGBA */
|
||||
unsigned char pixel_data[64 * 64 * 4 + 1];
|
||||
} text_pcb = {
|
||||
64, 64, 4,
|
||||
"\357\357\357\377\357\357\357\377\355\355\355\377\362\362\362\377\362\362"
|
||||
"\362\377\366\366\366\377\366\366\366\377\370\370\370\377\370\370\370\377"
|
||||
"\363\363\363\377\363\363\363\377\357\357\357\377\360\360\360\377\354\354"
|
||||
"\354\377\354\354\354\377\351\351\351\377\351\351\351\377\357\357\357\377"
|
||||
"\357\357\357\377\363\363\363\377\357\357\357\377\366\366\366\377\366\366"
|
||||
"\366\377\366\366\366\377\366\366\366\377\362\362\362\377\363\363\363\377"
|
||||
"\355\355\355\377\346\346\346\377\340\340\340\377\335\335\335\377\331\331"
|
||||
"\331\377\331\331\331\377\335\335\335\377\335\335\335\377\343\343\343\377"
|
||||
"\351\351\351\377\355\355\355\377\355\355\355\377\362\362\362\377\362\362"
|
||||
"\362\377\363\363\363\377\363\363\363\377\363\363\363\377\363\363\363\377"
|
||||
"\360\360\360\377\360\360\360\377\354\354\354\377\351\351\351\377\343\343"
|
||||
"\343\377\343\343\343\377\343\343\343\377\343\343\343\377\352\352\352\377"
|
||||
"\352\352\352\377\357\357\357\377\355\355\355\377\360\360\360\377\360\360"
|
||||
"\360\377\355\355\355\377\355\355\355\377\357\357\357\377\357\357\357\377"
|
||||
"\357\357\357\377\355\355\355\377\357\357\357\377\355\355\355\377\362\362"
|
||||
"\362\377\362\362\362\377\362\362\362\377\363\363\363\377\363\363\363\377"
|
||||
"\363\363\363\377\363\363\363\377\363\363\363\377\357\357\357\377\357\357"
|
||||
"\357\377\354\354\354\377\346\346\346\377\346\346\346\377\351\351\351\377"
|
||||
"\357\357\357\377\360\360\360\377\363\363\363\377\360\360\360\377\366\366"
|
||||
"\366\377\366\366\366\377\366\366\366\377\366\366\366\377\363\363\363\377"
|
||||
"\363\363\363\377\355\355\355\377\346\346\346\377\343\343\343\377\335\335"
|
||||
"\335\377\331\331\331\377\331\331\331\377\335\335\335\377\340\340\340\377"
|
||||
"\343\343\343\377\351\351\351\377\355\355\355\377\357\357\357\377\362\362"
|
||||
"\362\377\362\362\362\377\363\363\363\377\363\363\363\377\363\363\363\377"
|
||||
"\363\363\363\377\360\360\360\377\360\360\360\377\354\354\354\377\351\351"
|
||||
"\351\377\343\343\343\377\343\343\343\377\344\344\344\377\344\344\344\377"
|
||||
"\352\352\352\377\352\352\352\377\357\357\357\377\357\357\357\377\357\357"
|
||||
"\357\377\357\357\357\377\360\360\360\377\355\355\355\377\357\357\357\377"
|
||||
"\357\357\357\377\354\354\354\377\357\357\357\377\357\357\357\377\357\357"
|
||||
"\357\377\357\357\357\377\362\362\362\377\363\363\363\377\363\363\363\377"
|
||||
"\363\363\363\377\363\363\363\377\363\363\363\377\360\360\360\377\357\357"
|
||||
"\357\377\357\357\357\377\351\351\351\377\351\351\351\377\351\351\351\377"
|
||||
"\351\351\351\377\355\355\355\377\355\355\355\377\363\363\363\377\363\363"
|
||||
"\363\377\366\366\366\377\366\366\366\377\366\366\366\377\363\363\363\377"
|
||||
"\363\363\363\377\363\363\363\377\355\355\355\377\343\343\343\377\340\340"
|
||||
"\340\377\335\335\335\377\331\331\331\377\331\331\331\377\335\335\335\377"
|
||||
"\340\340\340\377\346\346\346\377\351\351\351\377\355\355\355\377\357\357"
|
||||
"\357\377\362\362\362\377\362\362\362\377\363\363\363\377\363\363\363\377"
|
||||
"\363\363\363\377\363\363\363\377\360\360\360\377\360\360\360\377\354\354"
|
||||
"\354\377\354\354\354\377\351\351\351\377\343\343\343\377\344\344\344\377"
|
||||
"\344\344\344\377\352\352\352\377\352\352\352\377\357\357\357\377\357\357"
|
||||
"\357\377\357\357\357\377\357\357\357\377\360\360\360\377\360\360\360\377"
|
||||
"\360\360\360\377\357\357\357\377\354\354\354\377\352\352\352\377\352\352"
|
||||
"\352\377\352\352\352\377\357\357\357\377\357\357\357\377\357\357\357\377"
|
||||
"\357\357\357\377\357\357\357\377\357\357\357\377\357\357\357\377\360\360"
|
||||
"\360\377\354\354\354\377\355\355\355\377\354\354\354\377\351\351\351\377"
|
||||
"\351\351\351\377\351\351\351\377\355\355\355\377\355\355\355\377\363\363"
|
||||
"\363\377\363\363\363\377\362\362\362\377\362\362\362\377\362\362\362\377"
|
||||
"\366\366\366\377\363\363\363\377\363\363\363\377\355\355\355\377\346\346"
|
||||
"\346\377\340\340\340\377\335\335\335\377\331\331\331\377\331\331\331\377"
|
||||
"\335\335\335\377\340\340\340\377\346\346\346\377\351\351\351\377\355\355"
|
||||
"\355\377\360\360\360\377\362\362\362\377\362\362\362\377\363\363\363\377"
|
||||
"\363\363\363\377\363\363\363\377\363\363\363\377\360\360\360\377\360\360"
|
||||
"\360\377\354\354\354\377\355\355\355\377\351\351\351\377\343\343\343\377"
|
||||
"\344\344\344\377\344\344\344\377\352\352\352\377\352\352\352\377\357\357"
|
||||
"\357\377\355\355\355\377\357\357\357\377\357\357\357\377\357\357\357\377"
|
||||
"\357\357\357\377\352\352\352\377\351\351\351\377\354\354\354\377\354\354"
|
||||
"\354\377\354\354\354\377\354\354\354\377\360\360\360\377\360\360\360\377"
|
||||
"\357\357\357\377\357\357\357\377\357\357\357\377\357\357\357\377\363\363"
|
||||
"\363\377\363\363\363\377\355\355\355\377\355\355\355\377\351\351\351\377"
|
||||
"\351\351\351\377\351\351\351\377\351\351\351\377\357\357\357\377\357\357"
|
||||
"\357\377\363\363\363\377\363\363\363\377\362\362\362\377\362\362\362\377"
|
||||
"\363\363\363\377\366\366\366\377\363\363\363\377\355\355\355\377\351\351"
|
||||
"\351\377\346\346\346\377\340\340\340\377\335\335\335\377\332\332\332\377"
|
||||
"\332\332\332\377\335\335\335\377\335\335\335\377\343\343\343\377\352\352"
|
||||
"\352\377\355\355\355\377\360\360\360\377\365\365\365\377\363\363\363\377"
|
||||
"\363\363\363\377\363\363\363\377\363\363\363\377\363\363\363\377\362\362"
|
||||
"\362\377\362\362\362\377\355\355\355\377\357\357\357\377\352\352\352\377"
|
||||
"\344\344\344\377\344\344\344\377\344\344\344\377\352\352\352\377\352\352"
|
||||
"\352\377\357\357\357\377\355\355\355\377\357\357\357\377\357\357\357\377"
|
||||
"\357\357\357\377\357\357\357\377\355\355\355\377\351\351\351\377\354\354"
|
||||
"\354\377\354\354\354\377\357\357\357\377\357\357\357\377\354\354\354\377"
|
||||
"\354\354\354\377\357\357\357\377\357\357\357\377\357\357\357\377\360\360"
|
||||
"\360\377\360\360\360\377\360\360\360\377\355\355\355\377\355\355\355\377"
|
||||
"\351\351\351\377\343\343\343\377\343\343\343\377\352\352\352\377\357\357"
|
||||
"\357\377\357\357\357\377\362\362\362\377\362\362\362\377\362\362\362\377"
|
||||
"\362\362\362\377\363\363\363\377\365\365\365\377\363\363\363\377\355\355"
|
||||
"\355\377\352\352\352\377\346\346\346\377\342\342\342\377\337\337\337\377"
|
||||
"\332\332\332\377\327\327\327\377\335\335\335\377\337\337\337\377\343\343"
|
||||
"\343\377\352\352\352\377\355\355\355\377\360\360\360\377\365\365\365\377"
|
||||
"\363\363\363\377\362\362\362\377\362\362\362\377\363\363\363\377\363\363"
|
||||
"\363\377\362\362\362\377\362\362\362\377\355\355\355\377\357\357\357\377"
|
||||
"\352\352\352\377\344\344\344\377\344\344\344\377\344\344\344\377\352\352"
|
||||
"\352\377\352\352\352\377\357\357\357\377\357\357\357\377\355\355\355\377"
|
||||
"\355\355\355\377\355\355\355\377\355\355\355\377\357\357\357\377\357\357"
|
||||
"\357\377\362\362\362\377\354\354\354\377\357\357\357\377\357\357\357\377"
|
||||
"\354\354\354\377\354\354\354\377\357\357\357\377\357\357\357\377\362\362"
|
||||
"\362\377\362\362\362\377\362\362\362\377\362\362\362\377\355\355\355\377"
|
||||
"\352\352\352\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344"
|
||||
"\344\377\352\352\352\377\355\355\355\377\362\362\362\377\362\362\362\377"
|
||||
"\362\362\362\377\363\363\363\377\365\365\365\377\365\365\365\377\360\360"
|
||||
"\360\377\355\355\355\377\352\352\352\377\347\347\347\377\342\342\342\377"
|
||||
"\335\335\335\377\327\327\327\377\327\327\327\377\335\335\335\377\337\337"
|
||||
"\337\377\344\344\344\377\346\346\346\377\352\352\352\377\360\360\360\377"
|
||||
"\365\365\365\377\365\365\365\377\365\365\365\377\363\363\363\377\365\365"
|
||||
"\365\377\363\363\363\377\362\362\362\377\362\362\362\377\355\355\355\377"
|
||||
"\357\357\357\377\352\352\352\377\344\344\344\377\344\344\344\377\344\344"
|
||||
"\344\377\352\352\352\377\352\352\352\377\357\357\357\377\357\357\357\377"
|
||||
"\355\355\355\377\355\355\355\377\355\355\355\377\355\355\355\377\357\357"
|
||||
"\357\377\357\357\357\377\362\362\362\377\354\354\354\377\354\354\354\377"
|
||||
"\354\354\354\377\357\357\357\377\357\357\357\377\360\360\360\377\360\360"
|
||||
"\360\377\362\362\362\377\362\362\362\377\362\362\362\377\357\357\357\377"
|
||||
"\355\355\355\377\352\352\352\377\344\344\344\377\344\344\344\377\337\337"
|
||||
"\337\377\344\344\344\377\352\352\352\377\355\355\355\377\362\362\362\377"
|
||||
"\362\362\362\377\363\363\363\377\365\365\365\377\365\365\365\377\365\365"
|
||||
"\365\377\360\360\360\377\360\360\360\377\354\354\354\377\347\347\347\377"
|
||||
"\342\342\342\377\335\335\335\377\327\327\327\377\327\327\327\377\335\335"
|
||||
"\335\377\337\337\337\377\344\344\344\377\347\347\347\377\352\352\352\377"
|
||||
"\360\360\360\377\365\365\365\377\365\365\365\377\365\365\365\377\363\363"
|
||||
"\363\377\363\363\363\377\362\362\362\377\362\362\362\377\362\362\362\377"
|
||||
"\355\355\355\377\355\355\355\377\352\352\352\377\344\344\344\377\344\344"
|
||||
"\344\377\344\344\344\377\352\352\352\377\352\352\352\377\357\357\357\377"
|
||||
"\357\357\357\377\352\352\352\377\352\352\352\377\355\355\355\377\355\355"
|
||||
"\355\377\357\357\357\377\357\357\357\377\357\357\357\377\354\354\354\377"
|
||||
"\354\354\354\377\354\354\354\377\357\357\357\377\357\357\357\377\360\360"
|
||||
"\360\377\362\362\362\377\362\362\362\377\362\362\362\377\357\357\357\377"
|
||||
"\357\357\357\377\352\352\352\377\352\352\352\377\344\344\344\377\344\344"
|
||||
"\344\377\337\337\337\377\337\337\337\377\344\344\344\377\352\352\352\377"
|
||||
"\357\357\357\377\362\362\362\377\365\365\365\377\365\365\365\377\363\363"
|
||||
"\363\377\363\363\363\377\360\360\360\377\352\352\352\377\347\347\347\377"
|
||||
"\344\344\344\377\337\337\337\377\335\335\335\377\331\331\331\377\331\331"
|
||||
"\331\377\335\335\335\377\337\337\337\377\344\344\344\377\347\347\347\377"
|
||||
"\354\354\354\377\360\360\360\377\363\363\363\377\363\363\363\377\365\365"
|
||||
"\365\377\365\365\365\377\363\363\363\377\362\362\362\377\362\362\362\377"
|
||||
"\362\362\362\377\355\355\355\377\352\352\352\377\344\344\344\377\344\344"
|
||||
"\344\377\344\344\344\377\344\344\344\377\352\352\352\377\352\352\352\377"
|
||||
"\357\357\357\377\357\357\357\377\352\352\352\377\352\352\352\377\355\355"
|
||||
"\355\377\355\355\355\377\357\357\357\377\357\357\357\377\357\357\357\377"
|
||||
"\355\355\355\377\355\355\355\377\355\355\355\377\355\355\355\377\354\354"
|
||||
"\354\377\354\354\354\377\355\355\355\377\355\355\355\377\355\355\355\377"
|
||||
"\355\355\355\377\355\355\355\377\352\352\352\377\352\352\352\377\344\344"
|
||||
"\344\377\342\342\342\377\337\337\337\377\337\337\337\377\344\344\344\377"
|
||||
"\354\354\354\377\360\360\360\377\360\360\360\377\360\360\360\377\360\360"
|
||||
"\360\377\360\360\360\377\360\360\360\377\360\360\360\377\352\352\352\377"
|
||||
"\347\347\347\377\344\344\344\377\342\342\342\377\337\337\337\377\331\331"
|
||||
"\331\377\331\331\331\377\337\337\337\377\342\342\342\377\344\344\344\377"
|
||||
"\347\347\347\377\354\354\354\377\360\360\360\377\360\360\360\377\360\360"
|
||||
"\360\377\360\360\360\377\360\360\360\377\360\360\360\377\355\355\355\377"
|
||||
"\355\355\355\377\355\355\355\377\355\355\355\377\347\347\347\377\347\347"
|
||||
"\347\377\347\347\347\377\347\347\347\377\347\347\347\377\354\354\354\377"
|
||||
"\354\354\354\377\354\354\354\377\362\362\362\377\357\357\357\377\357\357"
|
||||
"\357\377\357\357\357\377\357\357\357\377\357\357\357\377\355\355\355\377"
|
||||
"\355\355\355\377\355\355\355\377\355\355\355\377\355\355\355\377\355\355"
|
||||
"\355\377\355\355\355\377\355\355\355\377\357\357\357\377\357\357\357\377"
|
||||
"\357\357\357\377\355\355\355\377\352\352\352\377\352\352\352\377\344\344"
|
||||
"\344\377\342\342\342\377\342\342\342\377\342\342\342\377\342\342\342\377"
|
||||
"\347\347\347\377\354\354\354\377\355\355\355\377\360\360\360\377\363\363"
|
||||
"\363\377\363\363\363\377\360\360\360\377\360\360\360\377\352\352\352\377"
|
||||
"\352\352\352\377\344\344\344\377\344\344\344\377\342\342\342\377\337\337"
|
||||
"\337\377\331\331\331\377\331\331\331\377\337\337\337\377\342\342\342\377"
|
||||
"\347\347\347\377\344\344\344\377\352\352\352\377\352\352\352\377\355\355"
|
||||
"\355\377\360\360\360\377\363\363\363\377\363\363\363\377\363\363\363\377"
|
||||
"\363\363\363\377\355\355\355\377\352\352\352\377\347\347\347\377\344\344"
|
||||
"\344\377\347\347\347\377\347\347\347\377\351\351\351\377\351\351\351\377"
|
||||
"\351\351\351\377\354\354\354\377\355\355\355\377\354\354\354\377\357\357"
|
||||
"\357\377\357\357\357\377\357\357\357\377\357\357\357\377\357\357\357\377"
|
||||
"\357\357\357\377\357\357\357\377\351\351\351\377\351\351\351\377\351\351"
|
||||
"\351\377\351\351\351\377\351\351\351\377\352\352\352\377\352\352\352\377"
|
||||
"\352\352\352\377\352\352\352\377\352\352\352\377\352\352\352\377\344\344"
|
||||
"\344\377\344\344\344\377\342\342\342\377\342\342\342\377\342\342\342\377"
|
||||
"\343\343\343\377\343\343\343\377\351\351\351\377\351\351\351\377\355\355"
|
||||
"\355\377\355\355\355\377\355\355\355\377\360\360\360\377\355\355\355\377"
|
||||
"\354\354\354\377\352\352\352\377\344\344\344\377\347\347\347\377\342\342"
|
||||
"\342\377\334\334\334\377\331\331\331\377\331\331\331\377\334\334\334\377"
|
||||
"\342\342\342\377\347\347\347\377\344\344\344\377\352\352\352\377\354\354"
|
||||
"\354\377\355\355\355\377\355\355\355\377\355\355\355\377\355\355\355\377"
|
||||
"\355\355\355\377\355\355\355\377\355\355\355\377\351\351\351\377\351\351"
|
||||
"\351\377\344\344\344\377\343\343\343\377\343\343\343\377\343\343\343\377"
|
||||
"\343\343\343\377\346\346\346\377\351\351\351\377\351\351\351\377\355\355"
|
||||
"\355\377\354\354\354\377\352\352\352\377\352\352\352\377\352\352\352\377"
|
||||
"\352\352\352\377\352\352\352\377\352\352\352\377\351\351\351\377\352\352"
|
||||
"\352\377\352\352\352\377\352\352\352\377\352\352\352\377\352\352\352\377"
|
||||
"\352\352\352\377\352\352\352\377\352\352\352\377\352\352\352\377\347\347"
|
||||
"\347\377\344\344\344\377\344\344\344\377\342\342\342\377\342\342\342\377"
|
||||
"\343\343\343\377\343\343\343\377\343\343\343\377\346\346\346\377\346\346"
|
||||
"\346\377\351\351\351\377\351\351\351\377\352\352\352\377\352\352\352\377"
|
||||
"\354\354\354\377\352\352\352\377\347\347\347\377\344\344\344\377\342\342"
|
||||
"\342\377\334\334\334\377\331\331\331\377\331\331\331\377\331\331\331\377"
|
||||
"\331\331\331\377\334\334\334\377\342\342\342\377\344\344\344\377\347\347"
|
||||
"\347\377\352\352\352\377\354\354\354\377\352\352\352\377\351\351\351\377"
|
||||
"\351\351\351\377\351\351\351\377\351\351\351\377\351\351\351\377\351\351"
|
||||
"\351\377\346\346\346\377\346\346\346\377\343\343\343\377\343\343\343\377"
|
||||
"\343\343\343\377\343\343\343\377\346\346\346\377\346\346\346\377\351\351"
|
||||
"\351\377\351\351\351\377\347\347\347\377\347\347\347\377\344\344\344\377"
|
||||
"\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344"
|
||||
"\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377"
|
||||
"\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\347\347"
|
||||
"\347\377\344\344\344\377\343\343\343\377\343\343\343\377\340\340\340\377"
|
||||
"\340\340\340\377\335\335\335\377\335\335\335\377\340\340\340\377\340\340"
|
||||
"\340\377\343\343\343\377\343\343\343\377\343\343\343\377\346\346\346\377"
|
||||
"\346\346\346\377\347\347\347\377\347\347\347\377\351\351\351\377\344\344"
|
||||
"\344\377\342\342\342\377\334\334\334\377\331\331\331\377\325\325\325\377"
|
||||
"\325\325\325\377\331\331\331\377\334\334\334\377\342\342\342\377\344\344"
|
||||
"\344\377\351\351\351\377\347\347\347\377\347\347\347\377\346\346\346\377"
|
||||
"\346\346\346\377\343\343\343\377\343\343\343\377\343\343\343\377\343\343"
|
||||
"\343\377\343\343\343\377\343\343\343\377\343\343\343\377\340\340\340\377"
|
||||
"\340\340\340\377\340\340\340\377\340\340\340\377\343\343\343\377\343\343"
|
||||
"\343\377\343\343\343\377\343\343\343\377\343\343\343\377\342\342\342\377"
|
||||
"\337\337\337\377\337\337\337\377\337\337\337\377\337\337\337\377\337\337"
|
||||
"\337\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377"
|
||||
"\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344"
|
||||
"\344\377\344\344\344\377\346\346\346\377\343\343\343\377\343\343\343\377"
|
||||
"\340\340\340\377\335\335\335\377\335\335\335\377\335\335\335\377\340\340"
|
||||
"\340\377\340\340\340\377\340\340\340\377\343\343\343\377\351\351\351\377"
|
||||
"\346\346\346\377\346\346\346\377\352\352\352\377\347\347\347\377\347\347"
|
||||
"\347\377\342\342\342\377\337\337\337\377\331\331\331\377\334\334\334\377"
|
||||
"\326\326\326\377\326\326\326\377\334\334\334\377\331\331\331\377\337\337"
|
||||
"\337\377\342\342\342\377\347\347\347\377\347\347\347\377\352\352\352\377"
|
||||
"\346\346\346\377\346\346\346\377\343\343\343\377\343\343\343\377\343\343"
|
||||
"\343\377\343\343\343\377\346\346\346\377\343\343\343\377\343\343\343\377"
|
||||
"\340\340\340\377\335\335\335\377\335\335\335\377\340\340\340\377\343\343"
|
||||
"\343\377\343\343\343\377\351\351\351\377\343\343\343\377\343\343\343\377"
|
||||
"\343\343\343\377\337\337\337\377\337\337\337\377\337\337\337\377\337\337"
|
||||
"\337\377\337\337\337\377\344\344\344\377\344\344\344\377\344\344\344\377"
|
||||
"\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344"
|
||||
"\344\377\344\344\344\377\344\344\344\377\346\346\346\377\343\343\343\377"
|
||||
"\343\343\343\377\340\340\340\377\335\335\335\377\335\335\335\377\335\335"
|
||||
"\335\377\340\340\340\377\340\340\340\377\340\340\340\377\346\346\346\377"
|
||||
"\351\351\351\377\346\346\346\377\352\352\352\377\352\352\352\377\347\347"
|
||||
"\347\377\347\347\347\377\342\342\342\377\337\337\337\377\334\334\334\377"
|
||||
"\335\335\335\377\327\327\327\377\327\327\327\377\335\335\335\377\334\334"
|
||||
"\334\377\337\337\337\377\342\342\342\377\347\347\347\377\344\344\344\377"
|
||||
"\352\352\352\377\351\351\351\377\346\346\346\377\346\346\346\377\343\343"
|
||||
"\343\377\343\343\343\377\343\343\343\377\343\343\343\377\340\340\340\377"
|
||||
"\340\340\340\377\340\340\340\377\335\335\335\377\335\335\335\377\340\340"
|
||||
"\340\377\343\343\343\377\343\343\343\377\351\351\351\377\351\351\351\377"
|
||||
"\351\351\351\377\351\351\351\377\344\344\344\377\344\344\344\377\344\344"
|
||||
"\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377"
|
||||
"\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344"
|
||||
"\344\377\344\344\344\377\344\344\344\377\347\347\347\377\346\346\346\377"
|
||||
"\343\343\343\377\343\343\343\377\340\340\340\377\340\340\340\377\335\335"
|
||||
"\335\377\335\335\335\377\340\340\340\377\340\340\340\377\343\343\343\377"
|
||||
"\346\346\346\377\346\346\346\377\346\346\346\377\347\347\347\377\352\352"
|
||||
"\352\377\347\347\347\377\347\347\347\377\342\342\342\377\337\337\337\377"
|
||||
"\334\334\334\377\335\335\335\377\327\327\327\377\327\327\327\377\335\335"
|
||||
"\335\377\334\334\334\377\337\337\337\377\342\342\342\377\347\347\347\377"
|
||||
"\347\347\347\377\352\352\352\377\346\346\346\377\346\346\346\377\346\346"
|
||||
"\346\377\346\346\346\377\343\343\343\377\343\343\343\377\343\343\343\377"
|
||||
"\340\340\340\377\340\340\340\377\340\340\340\377\340\340\340\377\340\340"
|
||||
"\340\377\340\340\340\377\343\343\343\377\343\343\343\377\351\351\351\377"
|
||||
"\351\351\351\377\351\351\351\377\347\347\347\377\344\344\344\377\344\344"
|
||||
"\344\377\344\344\344\377\344\344\344\377\344\344\344\377\352\352\352\377"
|
||||
"\352\352\352\377\352\352\352\377\352\352\352\377\352\352\352\377\352\352"
|
||||
"\352\377\352\352\352\377\352\352\352\377\352\352\352\377\354\354\354\377"
|
||||
"\351\351\351\377\346\346\346\377\346\346\346\377\343\343\343\377\343\343"
|
||||
"\343\377\343\343\343\377\343\343\343\377\343\343\343\377\346\346\346\377"
|
||||
"\346\346\346\377\352\352\352\377\352\352\352\377\352\352\352\377\354\354"
|
||||
"\354\377\352\352\352\377\347\347\347\377\347\347\347\377\342\342\342\377"
|
||||
"\340\340\340\377\334\334\334\377\335\335\335\377\327\327\327\377\327\327"
|
||||
"\327\377\335\335\335\377\335\335\335\377\340\340\340\377\342\342\342\377"
|
||||
"\347\347\347\377\347\347\347\377\352\352\352\377\354\354\354\377\352\352"
|
||||
"\352\377\352\352\352\377\352\352\352\377\351\351\351\377\351\351\351\377"
|
||||
"\346\346\346\377\346\346\346\377\346\346\346\377\343\343\343\377\343\343"
|
||||
"\343\377\340\340\340\377\343\343\343\377\346\346\346\377\351\351\351\377"
|
||||
"\351\351\351\377\355\355\355\377\355\355\355\377\355\355\355\377\352\352"
|
||||
"\352\377\352\352\352\377\352\352\352\377\352\352\352\377\352\352\352\377"
|
||||
"\352\352\352\377\352\352\352\377\355\355\355\377\355\355\355\377\355\355"
|
||||
"\355\377\355\355\355\377\355\355\355\377\355\355\355\377\352\352\352\377"
|
||||
"\354\354\354\377\351\351\351\377\351\351\351\377\351\351\351\377\343\343"
|
||||
"\343\377\343\343\343\377\343\343\343\377\343\343\343\377\343\343\343\377"
|
||||
"\351\351\351\377\352\352\352\377\352\352\352\377\352\352\352\377\354\354"
|
||||
"\354\377\354\354\354\377\354\354\354\377\351\351\351\377\351\351\351\377"
|
||||
"\344\344\344\377\340\340\340\377\335\335\335\377\335\335\335\377\327\327"
|
||||
"\327\377\327\327\327\377\335\335\335\377\335\335\335\377\340\340\340\377"
|
||||
"\344\344\344\377\351\351\351\377\351\351\351\377\352\352\352\377\354\354"
|
||||
"\354\377\354\354\354\377\352\352\352\377\352\352\352\377\351\351\351\377"
|
||||
"\351\351\351\377\351\351\351\377\351\351\351\377\351\351\351\377\343\343"
|
||||
"\343\377\343\343\343\377\340\340\340\377\343\343\343\377\351\351\351\377"
|
||||
"\355\355\355\377\355\355\355\377\355\355\355\377\355\355\355\377\355\355"
|
||||
"\355\377\352\352\352\377\352\352\352\377\352\352\352\377\352\352\352\377"
|
||||
"\352\352\352\377\357\357\357\377\357\357\357\377\357\357\357\377\362\362"
|
||||
"\362\377\362\362\362\377\362\362\362\377\362\362\362\377\357\357\357\377"
|
||||
"\357\357\357\377\360\360\360\377\355\355\355\377\351\351\351\377\351\351"
|
||||
"\351\377\343\343\343\377\346\346\346\377\346\346\346\377\343\343\343\377"
|
||||
"\351\351\351\377\355\355\355\377\360\360\360\377\360\360\360\377\362\362"
|
||||
"\362\377\362\362\362\377\362\362\362\377\357\357\357\377\354\354\354\377"
|
||||
"\351\351\351\377\346\346\346\377\343\343\343\377\335\335\335\377\335\335"
|
||||
"\335\377\327\327\327\377\327\327\327\377\335\335\335\377\335\335\335\377"
|
||||
"\343\343\343\377\346\346\346\377\351\351\351\377\354\354\354\377\357\357"
|
||||
"\357\377\362\362\362\377\362\362\362\377\362\362\362\377\360\360\360\377"
|
||||
"\355\355\355\377\355\355\355\377\355\355\355\377\351\351\351\377\351\351"
|
||||
"\351\377\343\343\343\377\346\346\346\377\346\346\346\377\346\346\346\377"
|
||||
"\351\351\351\377\355\355\355\377\363\363\363\377\363\363\363\377\363\363"
|
||||
"\363\377\363\363\363\377\357\357\357\377\357\357\357\377\357\357\357\377"
|
||||
"\357\357\357\377\357\357\357\377\357\357\357\377\357\357\357\377\362\362"
|
||||
"\362\377\362\362\362\377\362\362\362\377\362\362\362\377\362\362\362\377"
|
||||
"\363\363\363\377\362\362\362\377\363\363\363\377\360\360\360\377\355\355"
|
||||
"\355\377\351\351\351\377\343\343\343\377\343\343\343\377\343\343\343\377"
|
||||
"\343\343\343\377\351\351\351\377\360\360\360\377\360\360\360\377\360\360"
|
||||
"\360\377\362\362\362\377\362\362\362\377\362\362\362\377\363\363\363\377"
|
||||
"\357\357\357\377\351\351\351\377\346\346\346\377\343\343\343\377\335\335"
|
||||
"\335\377\335\335\335\377\327\327\327\377\327\327\327\377\335\335\335\377"
|
||||
"\335\335\335\377\343\343\343\377\346\346\346\377\351\351\351\377\357\357"
|
||||
"\357\377\363\363\363\377\362\362\362\377\362\362\362\377\362\362\362\377"
|
||||
"\360\360\360\377\360\360\360\377\355\355\355\377\355\355\355\377\351\351"
|
||||
"\351\377\351\351\351\377\343\343\343\377\343\343\343\377\346\346\346\377"
|
||||
"\351\351\351\377\355\355\355\377\360\360\360\377\363\363\363\377\363\363"
|
||||
"\363\377\363\363\363\377\363\363\363\377\357\357\357\377\357\357\357\377"
|
||||
"\357\357\357\377\357\357\357\377\357\357\357\377\362\362\362\377\362\362"
|
||||
"\362\377\362\362\362\377\357\357\357\377\357\357\357\377\357\357\357\377"
|
||||
"\357\357\357\377\363\363\363\377\363\363\363\377\363\363\363\377\363\363"
|
||||
"\363\377\355\355\355\377\351\351\351\377\351\351\351\377\346\346\346\377"
|
||||
"\346\346\346\377\351\351\351\377\351\351\351\377\360\360\360\377\363\363"
|
||||
"\363\377\363\363\363\377\365\365\365\377\365\365\365\377\363\363\363\377"
|
||||
"\363\363\363\377\357\357\357\377\354\354\354\377\347\347\347\377\343\343"
|
||||
"\343\377\335\335\335\377\335\335\335\377\327\327\327\377\327\327\327\377"
|
||||
"\335\335\335\377\335\335\335\377\343\343\343\377\347\347\347\377\351\351"
|
||||
"\351\377\357\357\357\377\363\363\363\377\363\363\363\377\365\365\365\377"
|
||||
"\365\365\365\377\365\365\365\377\363\363\363\377\360\360\360\377\355\355"
|
||||
"\355\377\351\351\351\377\351\351\351\377\351\351\351\377\346\346\346\377"
|
||||
"\351\351\351\377\351\351\351\377\355\355\355\377\360\360\360\377\365\365"
|
||||
"\365\377\365\365\365\377\365\365\365\377\365\365\365\377\363\363\363\377"
|
||||
"\362\362\362\377\362\362\362\377\362\362\362\377\362\362\362\377\362\362"
|
||||
"\362\377\362\362\362\377\362\362\362\377\357\357\357\377\357\357\357\377"
|
||||
"\357\357\357\377\362\362\362\377\363\363\363\377\363\363\363\377\363\363"
|
||||
"\363\377\363\363\363\377\355\355\355\377\355\355\355\377\351\351\351\377"
|
||||
"\351\351\351\377\351\351\351\377\351\351\351\377\360\360\360\377\360\360"
|
||||
"\360\377\363\363\363\377\363\363\363\377\365\365\365\377\365\365\365\377"
|
||||
"\363\363\363\377\363\363\363\377\357\357\357\377\355\355\355\377\347\347"
|
||||
"\347\377\343\343\343\377\335\335\335\377\335\335\335\377\327\327\327\377"
|
||||
"\327\327\327\377\335\335\335\377\335\335\335\377\343\343\343\377\347\347"
|
||||
"\347\377\351\351\351\377\357\357\357\377\363\363\363\377\363\363\363\377"
|
||||
"\365\365\365\377\365\365\365\377\365\365\365\377\363\363\363\377\363\363"
|
||||
"\363\377\360\360\360\377\355\355\355\377\355\355\355\377\351\351\351\377"
|
||||
"\351\351\351\377\351\351\351\377\351\351\351\377\355\355\355\377\360\360"
|
||||
"\360\377\365\365\365\377\365\365\365\377\365\365\365\377\365\365\365\377"
|
||||
"\363\363\363\377\362\362\362\377\362\362\362\377\362\362\362\377\362\362"
|
||||
"\362\377\362\362\362\377\362\362\362\377\362\362\362\377\362\362\362\377"
|
||||
"\362\362\362\377\363\363\363\377\365\365\365\377\365\365\365\377\365\365"
|
||||
"\365\377\363\363\363\377\363\363\363\377\355\355\355\377\355\355\355\377"
|
||||
"\351\351\351\377\351\351\351\377\351\351\351\377\352\352\352\377\360\360"
|
||||
"\360\377\360\360\360\377\363\363\363\377\365\365\365\377\365\365\365\377"
|
||||
"\370\370\370\377\363\363\363\377\363\363\363\377\360\360\360\377\355\355"
|
||||
"\355\377\347\347\347\377\343\343\343\377\335\335\335\377\335\335\335\377"
|
||||
"\327\327\327\377\327\327\327\377\335\335\335\377\335\335\335\377\343\343"
|
||||
"\343\377\347\347\347\377\354\354\354\377\357\357\357\377\363\363\363\377"
|
||||
"\363\363\363\377\362\362\362\377\362\362\362\377\362\362\362\377\363\363"
|
||||
"\363\377\363\363\363\377\360\360\360\377\360\360\360\377\360\360\360\377"
|
||||
"\352\352\352\377\351\351\351\377\351\351\351\377\351\351\351\377\355\355"
|
||||
"\355\377\360\360\360\377\365\365\365\377\365\365\365\377\365\365\365\377"
|
||||
"\365\365\365\377\365\365\365\377\363\363\363\377\362\362\362\377\362\362"
|
||||
"\362\377\362\362\362\377\363\363\363\377\363\363\363\377\363\363\363\377"
|
||||
"\363\363\363\377\365\365\365\377\365\365\365\377\365\365\365\377\365\365"
|
||||
"\365\377\365\365\365\377\363\363\363\377\363\363\363\377\355\355\355\377"
|
||||
"\355\355\355\377\351\351\351\377\352\352\352\377\352\352\352\377\352\352"
|
||||
"\352\377\360\360\360\377\360\360\360\377\365\365\365\377\365\365\365\377"
|
||||
"\365\365\365\377\370\370\370\377\363\363\363\377\357\357\357\377\352\352"
|
||||
"\352\377\355\355\355\377\347\347\347\377\343\343\343\377\335\335\335\377"
|
||||
"\335\335\335\377\327\327\327\377\327\327\327\377\335\335\335\377\335\335"
|
||||
"\335\377\343\343\343\377\347\347\347\377\355\355\355\377\354\354\354\377"
|
||||
"\357\357\357\377\363\363\363\377\363\363\363\377\362\362\362\377\362\362"
|
||||
"\362\377\363\363\363\377\363\363\363\377\360\360\360\377\360\360\360\377"
|
||||
"\352\352\352\377\352\352\352\377\352\352\352\377\352\352\352\377\351\351"
|
||||
"\351\377\351\351\351\377\355\355\355\377\363\363\363\377\365\365\365\377"
|
||||
"\365\365\365\377\365\365\365\377\365\365\365\377\365\365\365\377\363\363"
|
||||
"\363\377\363\363\363\377\363\363\363\377\360\360\360\377\360\360\360\377"
|
||||
"\360\360\360\377\360\360\360\377\360\360\360\377\360\360\360\377\360\360"
|
||||
"\360\377\360\360\360\377\360\360\360\377\360\360\360\377\360\360\360\377"
|
||||
"\355\355\355\377\355\355\355\377\352\352\352\377\351\351\351\377\351\351"
|
||||
"\351\377\352\352\352\377\362\362\362\377\362\362\362\377\362\362\362\377"
|
||||
"\363\363\363\377\363\363\363\377\363\363\363\377\363\363\363\377\357\357"
|
||||
"\357\377\355\355\355\377\355\355\355\377\347\347\347\377\343\343\343\377"
|
||||
"\335\335\335\377\337\337\337\377\331\331\331\377\331\331\331\377\337\337"
|
||||
"\337\377\335\335\335\377\343\343\343\377\347\347\347\377\355\355\355\377"
|
||||
"\352\352\352\377\357\357\357\377\357\357\357\377\357\357\357\377\354\354"
|
||||
"\354\377\354\354\354\377\362\362\362\377\360\360\360\377\360\360\360\377"
|
||||
"\352\352\352\377\351\351\351\377\346\346\346\377\346\346\346\377\346\346"
|
||||
"\346\377\346\346\346\377\351\351\351\377\355\355\355\377\355\355\355\377"
|
||||
"\360\360\360\377\360\360\360\377\360\360\360\377\360\360\360\377\360\360"
|
||||
"\360\377\360\360\360\377\360\360\360\377\360\360\360\377\355\355\355\377"
|
||||
"\355\355\355\377\355\355\355\377\355\355\355\377\355\355\355\377\355\355"
|
||||
"\355\377\355\355\355\377\355\355\355\377\355\355\355\377\355\355\355\377"
|
||||
"\355\355\355\377\360\360\360\377\352\352\352\377\351\351\351\377\351\351"
|
||||
"\351\377\352\352\352\377\354\354\354\377\354\354\354\377\354\354\354\377"
|
||||
"\354\354\354\377\357\357\357\377\357\357\357\377\357\357\357\377\357\357"
|
||||
"\357\377\355\355\355\377\355\355\355\377\352\352\352\377\346\346\346\377"
|
||||
"\335\335\335\377\332\332\332\377\331\331\331\377\331\331\331\377\331\331"
|
||||
"\331\377\337\337\337\377\335\335\335\377\343\343\343\377\346\346\346\377"
|
||||
"\352\352\352\377\352\352\352\377\354\354\354\377\357\357\357\377\357\357"
|
||||
"\357\377\357\357\357\377\357\357\357\377\354\354\354\377\354\354\354\377"
|
||||
"\354\354\354\377\354\354\354\377\351\351\351\377\346\346\346\377\346\346"
|
||||
"\346\377\346\346\346\377\346\346\346\377\351\351\351\377\354\354\354\377"
|
||||
"\352\352\352\377\360\360\360\377\360\360\360\377\355\355\355\377\355\355"
|
||||
"\355\377\355\355\355\377\355\355\355\377\355\355\355\377\355\355\355\377"
|
||||
"\351\351\351\377\351\351\351\377\351\351\351\377\351\351\351\377\351\351"
|
||||
"\351\377\351\351\351\377\351\351\351\377\351\351\351\377\351\351\351\377"
|
||||
"\351\351\351\377\352\352\352\377\352\352\352\377\352\352\352\377\347\347"
|
||||
"\347\377\344\344\344\377\344\344\344\377\347\347\347\377\347\347\347\377"
|
||||
"\347\347\347\377\351\351\351\377\351\351\351\377\351\351\351\377\351\351"
|
||||
"\351\377\351\351\351\377\352\352\352\377\352\352\352\377\347\347\347\377"
|
||||
"\343\343\343\377\335\335\335\377\327\327\327\377\331\331\331\377\331\331"
|
||||
"\331\377\331\331\331\377\337\337\337\377\335\335\335\377\343\343\343\377"
|
||||
"\346\346\346\377\352\352\352\377\351\351\351\377\347\347\347\377\351\351"
|
||||
"\351\377\351\351\351\377\351\351\351\377\351\351\351\377\347\347\347\377"
|
||||
"\347\347\347\377\347\347\347\377\347\347\347\377\344\344\344\377\344\344"
|
||||
"\344\377\342\342\342\377\342\342\342\377\344\344\344\377\344\344\344\377"
|
||||
"\347\347\347\377\347\347\347\377\354\354\354\377\352\352\352\377\352\352"
|
||||
"\352\377\351\351\351\377\351\351\351\377\351\351\351\377\351\351\351\377"
|
||||
"\351\351\351\377\343\343\343\377\343\343\343\377\343\343\343\377\343\343"
|
||||
"\343\377\343\343\343\377\343\343\343\377\343\343\343\377\343\343\343\377"
|
||||
"\343\343\343\377\346\346\346\377\346\346\346\377\346\346\346\377\347\347"
|
||||
"\347\377\347\347\347\377\344\344\344\377\344\344\344\377\344\344\344\377"
|
||||
"\347\347\347\377\347\347\347\377\347\347\347\377\347\347\347\377\347\347"
|
||||
"\347\377\347\347\347\377\351\351\351\377\346\346\346\377\346\346\346\377"
|
||||
"\343\343\343\377\340\340\340\377\335\335\335\377\327\327\327\377\331\331"
|
||||
"\331\377\331\331\331\377\331\331\331\377\334\334\334\377\335\335\335\377"
|
||||
"\335\335\335\377\340\340\340\377\346\346\346\377\351\351\351\377\347\347"
|
||||
"\347\377\347\347\347\377\347\347\347\377\347\347\347\377\347\347\347\377"
|
||||
"\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\337\337"
|
||||
"\337\377\337\337\337\377\337\337\337\377\337\337\337\377\344\344\344\377"
|
||||
"\344\344\344\377\344\344\344\377\344\344\344\377\347\347\347\377\347\347"
|
||||
"\347\377\346\346\346\377\346\346\346\377\343\343\343\377\343\343\343\377"
|
||||
"\343\343\343\377\343\343\343\377\335\335\335\377\335\335\335\377\335\335"
|
||||
"\335\377\335\335\335\377\335\335\335\377\335\335\335\377\340\340\340\377"
|
||||
"\340\340\340\377\340\340\340\377\342\342\342\377\342\342\342\377\342\342"
|
||||
"\342\377\342\342\342\377\342\342\342\377\337\337\337\377\337\337\337\377"
|
||||
"\337\337\337\377\342\342\342\377\342\342\342\377\342\342\342\377\342\342"
|
||||
"\342\377\342\342\342\377\342\342\342\377\346\346\346\377\340\340\340\377"
|
||||
"\340\340\340\377\335\335\335\377\335\335\335\377\335\335\335\377\327\327"
|
||||
"\327\377\331\331\331\377\337\337\337\377\337\337\337\377\331\331\331\377"
|
||||
"\327\327\327\377\335\335\335\377\340\340\340\377\346\346\346\377\343\343"
|
||||
"\343\377\342\342\342\377\342\342\342\377\342\342\342\377\342\342\342\377"
|
||||
"\342\342\342\377\337\337\337\377\337\337\337\377\337\337\337\377\337\337"
|
||||
"\337\377\335\335\335\377\332\332\332\377\332\332\332\377\335\335\335\377"
|
||||
"\337\337\337\377\337\337\337\377\337\337\337\377\337\337\337\377\342\342"
|
||||
"\342\377\342\342\342\377\342\342\342\377\340\340\340\377\340\340\340\377"
|
||||
"\335\335\335\377\335\335\335\377\335\335\335\377\334\334\334\377\334\334"
|
||||
"\334\377\334\334\334\377\334\334\334\377\335\335\335\377\335\335\335\377"
|
||||
"\337\337\337\377\337\337\337\377\337\337\337\377\337\337\337\377\337\337"
|
||||
"\337\377\337\337\337\377\337\337\337\377\337\337\337\377\337\337\337\377"
|
||||
"\337\337\337\377\342\342\342\377\342\342\342\377\337\337\337\377\337\337"
|
||||
"\337\377\337\337\337\377\337\337\337\377\337\337\337\377\340\340\340\377"
|
||||
"\335\335\335\377\335\335\335\377\335\335\335\377\335\335\335\377\335\335"
|
||||
"\335\377\327\327\327\377\331\331\331\377\337\337\337\377\335\335\335\377"
|
||||
"\327\327\327\377\327\327\327\377\335\335\335\377\335\335\335\377\343\343"
|
||||
"\343\377\337\337\337\377\342\342\342\377\342\342\342\377\342\342\342\377"
|
||||
"\342\342\342\377\337\337\337\377\337\337\337\377\335\335\335\377\335\335"
|
||||
"\335\377\335\335\335\377\332\332\332\377\332\332\332\377\332\332\332\377"
|
||||
"\335\335\335\377\335\335\335\377\335\335\335\377\335\335\335\377\337\337"
|
||||
"\337\377\337\337\337\377\337\337\337\377\337\337\337\377\335\335\335\377"
|
||||
"\335\335\335\377\334\334\334\377\334\334\334\377\334\334\334\377\331\331"
|
||||
"\331\377\331\331\331\377\331\331\331\377\331\331\331\377\331\331\331\377"
|
||||
"\331\331\331\377\332\332\332\377\332\332\332\377\332\332\332\377\332\332"
|
||||
"\332\377\332\332\332\377\332\332\332\377\332\332\332\377\332\332\332\377"
|
||||
"\332\332\332\377\332\332\332\377\334\334\334\377\334\334\334\377\331\331"
|
||||
"\331\377\331\331\331\377\331\331\331\377\331\331\331\377\331\331\331\377"
|
||||
"\335\335\335\377\335\335\335\377\327\327\327\377\327\327\327\377\327\327"
|
||||
"\327\377\327\327\327\377\327\327\327\377\327\327\327\377\327\327\327\377"
|
||||
"\327\327\327\377\332\332\332\377\335\335\335\377\335\335\335\377\335\335"
|
||||
"\335\377\340\340\340\377\334\334\334\377\334\334\334\377\334\334\334\377"
|
||||
"\334\334\334\377\332\332\332\377\332\332\332\377\332\332\332\377\332\332"
|
||||
"\332\377\332\332\332\377\327\327\327\377\332\332\332\377\332\332\332\377"
|
||||
"\327\327\327\377\327\327\327\377\327\327\327\377\332\332\332\377\332\332"
|
||||
"\332\377\332\332\332\377\332\332\332\377\332\332\332\377\332\332\332\377"
|
||||
"\331\331\331\377\331\331\331\377\331\331\331\377\326\326\326\377\326\326"
|
||||
"\326\377\326\326\326\377\326\326\326\377\326\326\326\377\331\331\331\377"
|
||||
"\331\331\331\377\331\331\331\377\332\332\332\377\332\332\332\377\332\332"
|
||||
"\332\377\332\332\332\377\332\332\332\377\332\332\332\377\332\332\332\377"
|
||||
"\332\332\332\377\332\332\332\377\332\332\332\377\334\334\334\377\331\331"
|
||||
"\331\377\331\331\331\377\331\331\331\377\331\331\331\377\331\331\331\377"
|
||||
"\331\331\331\377\335\335\335\377\335\335\335\377\327\327\327\377\327\327"
|
||||
"\327\377\327\327\327\377\327\327\327\377\327\327\327\377\327\327\327\377"
|
||||
"\327\327\327\377\327\327\327\377\335\335\335\377\335\335\335\377\335\335"
|
||||
"\335\377\335\335\335\377\334\334\334\377\334\334\334\377\334\334\334\377"
|
||||
"\334\334\334\377\332\332\332\377\332\332\332\377\332\332\332\377\332\332"
|
||||
"\332\377\332\332\332\377\332\332\332\377\332\332\332\377\332\332\332\377"
|
||||
"\332\332\332\377\327\327\327\377\327\327\327\377\332\332\332\377\332\332"
|
||||
"\332\377\332\332\332\377\332\332\332\377\332\332\332\377\332\332\332\377"
|
||||
"\332\332\332\377\331\331\331\377\331\331\331\377\326\326\326\377\326\326"
|
||||
"\326\377\326\326\326\377\334\334\334\377\334\334\334\377\334\334\334\377"
|
||||
"\334\334\334\377\335\335\335\377\335\335\335\377\335\335\335\377\335\335"
|
||||
"\335\377\335\335\335\377\337\337\337\377\337\337\337\377\337\337\337\377"
|
||||
"\337\337\337\377\337\337\337\377\337\337\337\377\335\335\335\377\332\332"
|
||||
"\332\377\334\334\334\377\337\337\337\377\337\337\337\377\337\337\337\377"
|
||||
"\337\337\337\377\337\337\337\377\335\335\335\377\335\335\335\377\335\335"
|
||||
"\335\377\335\335\335\377\335\335\335\377\335\335\335\377\335\335\335\377"
|
||||
"\332\332\332\377\327\327\327\377\335\335\335\377\335\335\335\377\335\335"
|
||||
"\335\377\340\340\340\377\342\342\342\377\342\342\342\377\342\342\342\377"
|
||||
"\342\342\342\377\337\337\337\377\337\337\337\377\337\337\337\377\335\335"
|
||||
"\335\377\335\335\335\377\335\335\335\377\335\335\335\377\335\335\335\377"
|
||||
"\335\335\335\377\335\335\335\377\332\332\332\377\332\332\332\377\335\335"
|
||||
"\335\377\335\335\335\377\335\335\335\377\335\335\335\377\335\335\335\377"
|
||||
"\335\335\335\377\335\335\335\377\335\335\335\377\334\334\334\377\334\334"
|
||||
"\334\377\334\334\334\377\334\334\334\377\335\335\335\377\335\335\335\377"
|
||||
"\335\335\335\377\335\335\335\377\340\340\340\377\340\340\340\377\340\340"
|
||||
"\340\377\343\343\343\377\343\343\343\377\343\343\343\377\340\340\340\377"
|
||||
"\340\340\340\377\337\337\337\377\337\337\337\377\337\337\337\377\337\337"
|
||||
"\337\377\332\332\332\377\334\334\334\377\342\342\342\377\342\342\342\377"
|
||||
"\342\342\342\377\342\342\342\377\342\342\342\377\342\342\342\377\335\335"
|
||||
"\335\377\340\340\340\377\340\340\340\377\340\340\340\377\335\335\335\377"
|
||||
"\335\335\335\377\335\335\335\377\335\335\335\377\335\335\335\377\335\335"
|
||||
"\335\377\334\334\334\377\337\337\337\377\342\342\342\377\342\342\342\377"
|
||||
"\347\347\347\377\344\344\344\377\344\344\344\377\344\344\344\377\343\343"
|
||||
"\343\377\340\340\340\377\340\340\340\377\340\340\340\377\335\335\335\377"
|
||||
"\335\335\335\377\335\335\335\377\335\335\335\377\334\334\334\377\334\334"
|
||||
"\334\377\335\335\335\377\335\335\335\377\335\335\335\377\335\335\335\377"
|
||||
"\335\335\335\377\335\335\335\377\335\335\335\377\335\335\335\377\335\335"
|
||||
"\335\377\335\335\335\377\335\335\335\377\335\335\335\377\343\343\343\377"
|
||||
"\343\343\343\377\343\343\343\377\343\343\343\377\346\346\346\377\346\346"
|
||||
"\346\377\346\346\346\377\346\346\346\377\346\346\346\377\346\346\346\377"
|
||||
"\343\343\343\377\346\346\346\377\343\343\343\377\344\344\344\377\344\344"
|
||||
"\344\377\342\342\342\377\337\337\337\377\337\337\337\377\344\344\344\377"
|
||||
"\344\344\344\377\347\347\347\377\347\347\347\377\347\347\347\377\347\347"
|
||||
"\347\377\342\342\342\377\342\342\342\377\342\342\342\377\346\346\346\377"
|
||||
"\343\343\343\377\335\335\335\377\335\335\335\377\335\335\335\377\331\331"
|
||||
"\331\377\337\337\337\377\337\337\337\377\342\342\342\377\344\344\344\377"
|
||||
"\344\344\344\377\352\352\352\377\351\351\351\377\351\351\351\377\351\351"
|
||||
"\351\377\346\346\346\377\346\346\346\377\346\346\346\377\346\346\346\377"
|
||||
"\343\343\343\377\343\343\343\377\343\343\343\377\343\343\343\377\340\340"
|
||||
"\340\377\340\340\340\377\343\343\343\377\343\343\343\377\343\343\343\377"
|
||||
"\343\343\343\377\343\343\343\377\343\343\343\377\343\343\343\377\343\343"
|
||||
"\343\377\343\343\343\377\343\343\343\377\343\343\343\377\343\343\343\377"
|
||||
"\351\351\351\377\351\351\351\377\351\351\351\377\351\351\351\377\351\351"
|
||||
"\351\377\351\351\351\377\355\355\355\377\355\355\355\377\355\355\355\377"
|
||||
"\355\355\355\377\351\351\351\377\352\352\352\377\346\346\346\377\346\346"
|
||||
"\346\377\343\343\343\377\344\344\344\377\344\344\344\377\344\344\344\377"
|
||||
"\344\344\344\377\344\344\344\377\347\347\347\377\351\351\351\377\351\351"
|
||||
"\351\377\351\351\351\377\347\347\347\377\347\347\347\377\344\344\344\377"
|
||||
"\344\344\344\377\343\343\343\377\335\335\335\377\334\334\334\377\331\331"
|
||||
"\331\377\334\334\334\377\342\342\342\377\342\342\342\377\344\344\344\377"
|
||||
"\347\347\347\377\352\352\352\377\355\355\355\377\360\360\360\377\355\355"
|
||||
"\355\377\360\360\360\377\360\360\360\377\360\360\360\377\360\360\360\377"
|
||||
"\360\360\360\377\355\355\355\377\355\355\355\377\351\351\351\377\351\351"
|
||||
"\351\377\343\343\343\377\343\343\343\377\351\351\351\377\351\351\351\377"
|
||||
"\355\355\355\377\355\355\355\377\355\355\355\377\355\355\355\377\351\351"
|
||||
"\351\377\351\351\351\377\351\351\351\377\351\351\351\377\343\343\343\377"
|
||||
"\343\343\343\377\354\354\354\377\354\354\354\377\354\354\354\377\355\355"
|
||||
"\355\377\355\355\355\377\355\355\355\377\363\363\363\377\363\363\363\377"
|
||||
"\363\363\363\377\363\363\363\377\355\355\355\377\355\355\355\377\351\351"
|
||||
"\351\377\346\346\346\377\346\346\346\377\346\346\346\377\346\346\346\377"
|
||||
"\351\351\351\377\351\351\351\377\351\351\351\377\352\352\352\377\354\354"
|
||||
"\354\377\354\354\354\377\357\357\357\377\354\354\354\377\354\354\354\377"
|
||||
"\351\351\351\377\344\344\344\377\342\342\342\377\337\337\337\377\337\337"
|
||||
"\337\377\337\337\337\377\334\334\334\377\342\342\342\377\342\342\342\377"
|
||||
"\344\344\344\377\352\352\352\377\355\355\355\377\362\362\362\377\363\363"
|
||||
"\363\377\365\365\365\377\365\365\365\377\365\365\365\377\362\362\362\377"
|
||||
"\362\362\362\377\362\362\362\377\357\357\357\377\357\357\357\377\352\352"
|
||||
"\352\377\352\352\352\377\344\344\344\377\344\344\344\377\352\352\352\377"
|
||||
"\354\354\354\377\363\363\363\377\363\363\363\377\363\363\363\377\363\363"
|
||||
"\363\377\355\355\355\377\355\355\355\377\354\354\354\377\354\354\354\377"
|
||||
"\347\347\347\377\347\347\347\377\355\355\355\377\355\355\355\377\355\355"
|
||||
"\355\377\355\355\355\377\360\360\360\377\360\360\360\377\363\363\363\377"
|
||||
"\363\363\363\377\363\363\363\377\363\363\363\377\363\363\363\377\360\360"
|
||||
"\360\377\355\355\355\377\351\351\351\377\343\343\343\377\343\343\343\377"
|
||||
"\343\343\343\377\351\351\351\377\352\352\352\377\352\352\352\377\360\360"
|
||||
"\360\377\362\362\362\377\362\362\362\377\362\362\362\377\357\357\357\377"
|
||||
"\354\354\354\377\354\354\354\377\347\347\347\377\347\347\347\377\342\342"
|
||||
"\342\377\337\337\337\377\334\334\334\377\334\334\334\377\337\337\337\377"
|
||||
"\344\344\344\377\351\351\351\377\355\355\355\377\360\360\360\377\365\365"
|
||||
"\365\377\366\366\366\377\371\371\371\377\370\370\370\377\366\366\366\377"
|
||||
"\366\366\366\377\362\362\362\377\362\362\362\377\362\362\362\377\362\362"
|
||||
"\362\377\355\355\355\377\355\355\355\377\352\352\352\377\352\352\352\377"
|
||||
"\355\355\355\377\357\357\357\377\357\357\357\377\357\357\357\377\357\357"
|
||||
"\357\377\357\357\357\377\355\355\355\377\355\355\355\377\355\355\355\377"
|
||||
"\355\355\355\377\355\355\355\377\355\355\355\377\362\362\362\377\362\362"
|
||||
"\362\377\362\362\362\377\362\362\362\377\362\362\362\377\362\362\362\377"
|
||||
"\362\362\362\377\363\363\363\377\363\363\363\377\363\363\363\377\363\363"
|
||||
"\363\377\360\360\360\377\355\355\355\377\351\351\351\377\351\351\351\377"
|
||||
"\343\343\343\377\343\343\343\377\351\351\351\377\354\354\354\377\355\355"
|
||||
"\355\377\362\362\362\377\363\363\363\377\363\363\363\377\363\363\363\377"
|
||||
"\362\362\362\377\357\357\357\377\352\352\352\377\347\347\347\377\344\344"
|
||||
"\344\377\337\337\337\377\337\337\337\377\332\332\332\377\337\337\337\377"
|
||||
"\337\337\337\377\343\343\343\377\351\351\351\377\355\355\355\377\363\363"
|
||||
"\363\377\366\366\366\377\366\366\366\377\371\371\371\377\373\373\373\377"
|
||||
"\373\373\373\377\371\371\371\377\365\365\365\377\365\365\365\377\365\365"
|
||||
"\365\377\365\365\365\377\360\360\360\377\360\360\360\377\355\355\355\377"
|
||||
"\357\357\357\377\357\357\357\377\362\362\362\377\362\362\362\377\363\363"
|
||||
"\363\377\363\363\363\377\362\362\362\377\362\362\362\377\362\362\362\377"
|
||||
"\362\362\362\377\362\362\362\377\362\362\362\377\362\362\362\377\362\362"
|
||||
"\362\377\362\362\362\377\362\362\362\377\362\362\362\377\362\362\362\377"
|
||||
"\362\362\362\377\362\362\362\377\363\363\363\377\363\363\363\377\362\362"
|
||||
"\362\377\362\362\362\377\355\355\355\377\355\355\355\377\351\351\351\377"
|
||||
"\351\351\351\377\343\343\343\377\343\343\343\377\351\351\351\377\355\355"
|
||||
"\355\377\360\360\360\377\363\363\363\377\363\363\363\377\363\363\363\377"
|
||||
"\363\363\363\377\362\362\362\377\360\360\360\377\355\355\355\377\354\354"
|
||||
"\354\377\347\347\347\377\342\342\342\377\337\337\337\377\335\335\335\377"
|
||||
"\337\337\337\377\340\340\340\377\343\343\343\377\346\346\346\377\355\355"
|
||||
"\355\377\365\365\365\377\370\370\370\377\371\371\371\377\373\373\373\377"
|
||||
"\373\373\373\377\373\373\373\377\371\371\371\377\366\366\366\377\366\366"
|
||||
"\366\377\366\366\366\377\365\365\365\377\365\365\365\377\360\360\360\377"
|
||||
"\360\360\360\377\355\355\355\377\355\355\355\377\360\360\360\377\363\363"
|
||||
"\363\377\363\363\363\377\363\363\363\377\362\362\362\377\362\362\362\377"
|
||||
"\362\362\362\377\362\362\362\377\357\357\357\377\362\362\362\377\362\362"
|
||||
"\362\377\363\363\363\377\363\363\363\377\363\363\363\377\363\363\363\377"
|
||||
"\363\363\363\377\362\362\362\377\362\362\362\377\362\362\362\377\362\362"
|
||||
"\362\377\362\362\362\377\362\362\362\377\355\355\355\377\352\352\352\377"
|
||||
"\347\347\347\377\347\347\347\377\343\343\343\377\351\351\351\377\351\351"
|
||||
"\351\377\355\355\355\377\363\363\363\377\363\363\363\377\363\363\363\377"
|
||||
"\363\363\363\377\363\363\363\377\363\363\363\377\360\360\360\377\360\360"
|
||||
"\360\377\352\352\352\377\346\346\346\377\342\342\342\377\337\337\337\377"
|
||||
"\335\335\335\377\335\335\335\377\340\340\340\377\340\340\340\377\351\351"
|
||||
"\351\377\360\360\360\377\363\363\363\377\366\366\366\377\373\373\373\377"
|
||||
"\373\373\373\377\371\371\371\377\371\371\371\377\373\373\373\377\373\373"
|
||||
"\373\377\370\370\370\377\370\370\370\377\363\363\363\377\363\363\363\377"
|
||||
"\357\357\357\377\357\357\357\377\357\357\357\377\357\357\357\377\363\363"
|
||||
"\363\377\363\363\363\377\363\363\363\377\363\363\363\377\365\365\365\377"
|
||||
"\365\365\365\377\363\363\363\377\363\363\363\377\360\360\360\377\360\360"
|
||||
"\360\377\363\363\363\377\360\360\360\377\360\360\360\377\360\360\360\377"
|
||||
"\360\360\360\377\363\363\363\377\362\362\362\377\362\362\362\377\362\362"
|
||||
"\362\377\362\362\362\377\362\362\362\377\362\362\362\377\355\355\355\377"
|
||||
"\352\352\352\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344"
|
||||
"\344\377\352\352\352\377\354\354\354\377\363\363\363\377\363\363\363\377"
|
||||
"\363\363\363\377\363\363\363\377\363\363\363\377\363\363\363\377\360\360"
|
||||
"\360\377\355\355\355\377\351\351\351\377\346\346\346\377\343\343\343\377"
|
||||
"\335\335\335\377\335\335\335\377\334\334\334\377\340\340\340\377\343\343"
|
||||
"\343\377\351\351\351\377\357\357\357\377\362\362\362\377\366\366\366\377"
|
||||
"\373\373\373\377\371\371\371\377\371\371\371\377\370\370\370\377\373\373"
|
||||
"\373\377\373\373\373\377\370\370\370\377\370\370\370\377\363\363\363\377"
|
||||
"\363\363\363\377\357\357\357\377\357\357\357\377\357\357\357\377\357\357"
|
||||
"\357\377\360\360\360\377\363\363\363\377\362\362\362\377\362\362\362\377"
|
||||
"\363\363\363\377\363\363\363\377\360\360\360\377\360\360\360\377\357\357"
|
||||
"\357\377\357\357\357\377\360\360\360\377\360\360\360\377\360\360\360\377"
|
||||
"\360\360\360\377\357\357\357\377\360\360\360\377\363\363\363\377\363\363"
|
||||
"\363\377\363\363\363\377\363\363\363\377\362\362\362\377\362\362\362\377"
|
||||
"\355\355\355\377\352\352\352\377\344\344\344\377\344\344\344\377\344\344"
|
||||
"\344\377\344\344\344\377\352\352\352\377\352\352\352\377\357\357\357\377"
|
||||
"\355\355\355\377\365\365\365\377\365\365\365\377\365\365\365\377\365\365"
|
||||
"\365\377\363\363\363\377\355\355\355\377\351\351\351\377\346\346\346\377"
|
||||
"\340\340\340\377\340\340\340\377\334\334\334\377\334\334\334\377\340\340"
|
||||
"\340\377\343\343\343\377\347\347\347\377\355\355\355\377\362\362\362\377"
|
||||
"\366\366\366\377\371\371\371\377\371\371\371\377\366\366\366\377\365\365"
|
||||
"\365\377\365\365\365\377\365\365\365\377\366\366\366\377\366\366\366\377"
|
||||
"\362\362\362\377\362\362\362\377\355\355\355\377\357\357\357\377\360\360"
|
||||
"\360\377\360\360\360\377\357\357\357\377\357\357\357\377\363\363\363\377"
|
||||
"\363\363\363\377\363\363\363\377\363\363\363\377\360\360\360\377\360\360"
|
||||
"\360\377\357\357\357\377\357\357\357\377\360\360\360\377\360\360\360\377"
|
||||
"\360\360\360\377\360\360\360\377\357\357\357\377\357\357\357\377\360\360"
|
||||
"\360\377\360\360\360\377\360\360\360\377\360\360\360\377\355\355\355\377"
|
||||
"\360\360\360\377\354\354\354\377\352\352\352\377\344\344\344\377\344\344"
|
||||
"\344\377\344\344\344\377\344\344\344\377\352\352\352\377\355\355\355\377"
|
||||
"\357\357\357\377\360\360\360\377\362\362\362\377\362\362\362\377\363\363"
|
||||
"\363\377\365\365\365\377\363\363\363\377\363\363\363\377\355\355\355\377"
|
||||
"\346\346\346\377\340\340\340\377\340\340\340\377\334\334\334\377\334\334"
|
||||
"\334\377\340\340\340\377\343\343\343\377\347\347\347\377\355\355\355\377"
|
||||
"\362\362\362\377\366\366\366\377\371\371\371\377\371\371\371\377\365\365"
|
||||
"\365\377\365\365\365\377\365\365\365\377\365\365\365\377\366\366\366\377"
|
||||
"\366\366\366\377\362\362\362\377\362\362\362\377\355\355\355\377\357\357"
|
||||
"\357\377\357\357\357\377\360\360\360\377\357\357\357\377\357\357\357\377"
|
||||
"\363\363\363\377\363\363\363\377\363\363\363\377\363\363\363\377\360\360"
|
||||
"\360\377\360\360\360\377\357\357\357\377\357\357\357\377\360\360\360\377"
|
||||
"\357\357\357\377\357\357\357\377\357\357\357\377\357\357\357\377\357\357"
|
||||
"\357\377\360\360\360\377\360\360\360\377\360\360\360\377\360\360\360\377"
|
||||
"\354\354\354\377\357\357\357\377\351\351\351\377\351\351\351\377\343\343"
|
||||
"\343\377\343\343\343\377\344\344\344\377\344\344\344\377\352\352\352\377"
|
||||
"\355\355\355\377\362\362\362\377\362\362\362\377\357\357\357\377\357\357"
|
||||
"\357\377\363\363\363\377\363\363\363\377\362\362\362\377\363\363\363\377"
|
||||
"\355\355\355\377\346\346\346\377\340\340\340\377\340\340\340\377\335\335"
|
||||
"\335\377\335\335\335\377\340\340\340\377\342\342\342\377\344\344\344\377"
|
||||
"\355\355\355\377\362\362\362\377\366\366\366\377\363\363\363\377\365\365"
|
||||
"\365\377\370\370\370\377\370\370\370\377\366\366\366\377\366\366\366\377"
|
||||
"\363\363\363\377\363\363\363\377\362\362\362\377\362\362\362\377\355\355"
|
||||
"\355\377\355\355\355\377\352\352\352\377\352\352\352\377\360\360\360\377"
|
||||
"\360\360\360\377\363\363\363\377\363\363\363\377\360\360\360\377\360\360"
|
||||
"\360\377\360\360\360\377\360\360\360\377\354\354\354\377\354\354\354\377"
|
||||
"\357\357\357\377\357\357\357\377\357\357\357\377\357\357\357\377\354\354"
|
||||
"\354\377\357\357\357\377\360\360\360\377\360\360\360\377\360\360\360\377"
|
||||
"\360\360\360\377\357\357\357\377\357\357\357\377\351\351\351\377\351\351"
|
||||
"\351\377\343\343\343\377\343\343\343\377\343\343\343\377\343\343\343\377"
|
||||
"\351\351\351\377\354\354\354\377\360\360\360\377\362\362\362\377\357\357"
|
||||
"\357\377\362\362\362\377\363\363\363\377\363\363\363\377\357\357\357\377"
|
||||
"\357\357\357\377\354\354\354\377\351\351\351\377\343\343\343\377\340\340"
|
||||
"\340\377\335\335\335\377\335\335\335\377\337\337\337\377\337\337\337\377"
|
||||
"\344\344\344\377\355\355\355\377\362\362\362\377\363\363\363\377\363\363"
|
||||
"\363\377\363\363\363\377\370\370\370\377\370\370\370\377\366\366\366\377"
|
||||
"\366\366\366\377\363\363\363\377\362\362\362\377\357\357\357\377\357\357"
|
||||
"\357\377\355\355\355\377\355\355\355\377\355\355\355\377\352\352\352\377"
|
||||
"\357\357\357\377\360\360\360\377\363\363\363\377\363\363\363\377\360\360"
|
||||
"\360\377\357\357\357\377\357\357\357\377\357\357\357\377\354\354\354\377"
|
||||
"\354\354\354\377\357\357\357\377\355\355\355\377\355\355\355\377\355\355"
|
||||
"\355\377\355\355\355\377\357\357\357\377\354\354\354\377\354\354\354\377"
|
||||
"\354\354\354\377\354\354\354\377\357\357\357\377\357\357\357\377\351\351"
|
||||
"\351\377\346\346\346\377\343\343\343\377\343\343\343\377\343\343\343\377"
|
||||
"\343\343\343\377\351\351\351\377\354\354\354\377\355\355\355\377\360\360"
|
||||
"\360\377\362\362\362\377\362\362\362\377\362\362\362\377\362\362\362\377"
|
||||
"\357\357\357\377\357\357\357\377\352\352\352\377\347\347\347\377\343\343"
|
||||
"\343\377\343\343\343\377\335\335\335\377\335\335\335\377\337\337\337\377"
|
||||
"\337\337\337\377\344\344\344\377\355\355\355\377\362\362\362\377\360\360"
|
||||
"\360\377\360\360\360\377\363\363\363\377\363\363\363\377\363\363\363\377"
|
||||
"\362\362\362\377\362\362\362\377\362\362\362\377\357\357\357\377\355\355"
|
||||
"\355\377\352\352\352\377\352\352\352\377\352\352\352\377\352\352\352\377"
|
||||
"\352\352\352\377\355\355\355\377\357\357\357\377\357\357\357\377\357\357"
|
||||
"\357\377\357\357\357\377\355\355\355\377\352\352\352\377\352\352\352\377"
|
||||
"\355\355\355\377\355\355\355\377\355\355\355\377\355\355\355\377\355\355"
|
||||
"\355\377\355\355\355\377\355\355\355\377\355\355\355\377\352\352\352\377"
|
||||
"\352\352\352\377\352\352\352\377\354\354\354\377\357\357\357\377\357\357"
|
||||
"\357\377\351\351\351\377\346\346\346\377\340\340\340\377\340\340\340\377"
|
||||
"\340\340\340\377\343\343\343\377\351\351\351\377\351\351\351\377\355\355"
|
||||
"\355\377\355\355\355\377\360\360\360\377\360\360\360\377\362\362\362\377"
|
||||
"\362\362\362\377\357\357\357\377\357\357\357\377\352\352\352\377\344\344"
|
||||
"\344\377\342\342\342\377\342\342\342\377\334\334\334\377\334\334\334\377"
|
||||
"\337\337\337\377\337\337\337\377\344\344\344\377\352\352\352\377\357\357"
|
||||
"\357\377\360\360\360\377\360\360\360\377\360\360\360\377\360\360\360\377"
|
||||
"\360\360\360\377\357\357\357\377\357\357\357\377\357\357\357\377\357\357"
|
||||
"\357\377\355\355\355\377\352\352\352\377\352\352\352\377\352\352\352\377"
|
||||
"\352\352\352\377\352\352\352\377\352\352\352\377\357\357\357\377\357\357"
|
||||
"\357\377\357\357\357\377\355\355\355\377\355\355\355\377\355\355\355\377"
|
||||
"\355\355\355\377\355\355\355\377\355\355\355\377\355\355\355\377\344\344"
|
||||
"\344\377\344\344\344\377\344\344\344\377\344\344\344\377\347\347\347\377"
|
||||
"\352\352\352\377\347\347\347\377\347\347\347\377\347\347\347\377\347\347"
|
||||
"\347\377\352\352\352\377\347\347\347\377\346\346\346\377\340\340\340\377"
|
||||
"\340\340\340\377\340\340\340\377\340\340\340\377\346\346\346\377\346\346"
|
||||
"\346\377\354\354\354\377\354\354\354\377\355\355\355\377\355\355\355\377"
|
||||
"\355\355\355\377\355\355\355\377\355\355\355\377\357\357\357\377\352\352"
|
||||
"\352\377\344\344\344\377\342\342\342\377\342\342\342\377\334\334\334\377"
|
||||
"\334\334\334\377\337\337\337\377\337\337\337\377\344\344\344\377\352\352"
|
||||
"\352\377\357\357\357\377\355\355\355\377\360\360\360\377\354\354\354\377"
|
||||
"\354\354\354\377\354\354\354\377\352\352\352\377\352\352\352\377\352\352"
|
||||
"\352\377\352\352\352\377\352\352\352\377\344\344\344\377\344\344\344\377"
|
||||
"\346\346\346\377\346\346\346\377\346\346\346\377\346\346\346\377\351\351"
|
||||
"\351\377\351\351\351\377\351\351\351\377\347\347\347\377\347\347\347\377"
|
||||
"\347\347\347\377\347\347\347\377\347\347\347\377\347\347\347\377\347\347"
|
||||
"\347\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377"
|
||||
"\347\347\347\377\352\352\352\377\347\347\347\377\347\347\347\377\347\347"
|
||||
"\347\377\347\347\347\377\347\347\347\377\344\344\344\377\344\344\344\377"
|
||||
"\337\337\337\377\332\332\332\377\332\332\332\377\337\337\337\377\346\346"
|
||||
"\346\377\346\346\346\377\351\351\351\377\351\351\351\377\354\354\354\377"
|
||||
"\351\351\351\377\354\354\354\377\355\355\355\377\354\354\354\377\357\357"
|
||||
"\357\377\352\352\352\377\344\344\344\377\342\342\342\377\342\342\342\377"
|
||||
"\334\334\334\377\334\334\334\377\335\335\335\377\335\335\335\377\342\342"
|
||||
"\342\377\344\344\344\377\352\352\352\377\354\354\354\377\360\360\360\377"
|
||||
"\357\357\357\377\354\354\354\377\354\354\354\377\354\354\354\377\355\355"
|
||||
"\355\377\352\352\352\377\352\352\352\377\347\347\347\377\344\344\344\377"
|
||||
"\340\340\340\377\340\340\340\377\340\340\340\377\340\340\340\377\346\346"
|
||||
"\346\377\346\346\346\377\354\354\354\377\354\354\354\377\347\347\347\377"
|
||||
"\347\347\347\377\347\347\347\377\347\347\347\377\347\347\347\377\347\347"
|
||||
"\347\377\347\347\347\377\347\347\347\377\347\347\347\377\347\347\347\377"
|
||||
"\347\347\347\377\347\347\347\377\352\352\352\377\352\352\352\377\355\355"
|
||||
"\355\377\355\355\355\377\352\352\352\377\352\352\352\377\344\344\344\377"
|
||||
"\344\344\344\377\342\342\342\377\337\337\337\377\337\337\337\377\342\342"
|
||||
"\342\377\344\344\344\377\344\344\344\377\352\352\352\377\354\354\354\377"
|
||||
"\357\357\357\377\357\357\357\377\357\357\357\377\360\360\360\377\360\360"
|
||||
"\360\377\355\355\355\377\352\352\352\377\344\344\344\377\342\342\342\377"
|
||||
"\342\342\342\377\334\334\334\377\332\332\332\377\335\335\335\377\335\335"
|
||||
"\335\377\342\342\342\377\344\344\344\377\352\352\352\377\354\354\354\377"
|
||||
"\360\360\360\377\357\357\357\377\354\354\354\377\354\354\354\377\354\354"
|
||||
"\354\377\355\355\355\377\352\352\352\377\352\352\352\377\344\344\344\377"
|
||||
"\344\344\344\377\340\340\340\377\340\340\340\377\340\340\340\377\340\340"
|
||||
"\340\377\346\346\346\377\346\346\346\377\354\354\354\377\351\351\351\377"
|
||||
"\354\354\354\377\352\352\352\377\352\352\352\377\352\352\352\377\352\352"
|
||||
"\352\377\352\352\352\377\352\352\352\377\346\346\346\377\346\346\346\377"
|
||||
"\346\346\346\377\347\347\347\377\347\347\347\377\347\347\347\377\352\352"
|
||||
"\352\377\352\352\352\377\352\352\352\377\355\355\355\377\352\352\352\377"
|
||||
"\352\352\352\377\347\347\347\377\347\347\347\377\344\344\344\377\344\344"
|
||||
"\344\377\347\347\347\377\347\347\347\377\352\352\352\377\352\352\352\377"
|
||||
"\355\355\355\377\357\357\357\377\357\357\357\377\357\357\357\377\360\360"
|
||||
"\360\377\360\360\360\377\360\360\360\377\355\355\355\377\344\344\344\377"
|
||||
"\337\337\337\377\337\337\337\377\332\332\332\377\332\332\332\377\337\337"
|
||||
"\337\377\337\337\337\377\344\344\344\377\352\352\352\377\357\357\357\377"
|
||||
"\355\355\355\377\360\360\360\377\354\354\354\377\354\354\354\377\354\354"
|
||||
"\354\377\354\354\354\377\354\354\354\377\352\352\352\377\352\352\352\377"
|
||||
"\351\351\351\377\351\351\351\377\346\346\346\377\340\340\340\377\340\340"
|
||||
"\340\377\340\340\340\377\346\346\346\377\351\351\351\377\351\351\351\377"
|
||||
"\351\351\351\377\354\354\354\377\352\352\352\377\352\352\352\377\352\352"
|
||||
"\352\377\352\352\352\377\352\352\352\377\352\352\352\377\354\354\354\377"
|
||||
"\354\354\354\377\354\354\354\377\354\354\354\377\354\354\354\377\354\354"
|
||||
"\354\377\357\357\357\377\357\357\357\377\360\360\360\377\362\362\362\377"
|
||||
"\357\357\357\377\357\357\357\377\355\355\355\377\355\355\355\377\352\352"
|
||||
"\352\377\352\352\352\377\355\355\355\377\355\355\355\377\357\357\357\377"
|
||||
"\357\357\357\377\362\362\362\377\362\362\362\377\363\363\363\377\363\363"
|
||||
"\363\377\365\365\365\377\365\365\365\377\360\360\360\377\354\354\354\377"
|
||||
"\344\344\344\377\337\337\337\377\337\337\337\377\332\332\332\377\332\332"
|
||||
"\332\377\337\337\337\377\337\337\337\377\344\344\344\377\352\352\352\377"
|
||||
"\357\357\357\377\360\360\360\377\363\363\363\377\360\360\360\377\360\360"
|
||||
"\360\377\360\360\360\377\360\360\360\377\360\360\360\377\357\357\357\377"
|
||||
"\357\357\357\377\354\354\354\377\354\354\354\377\346\346\346\377\346\346"
|
||||
"\346\377\343\343\343\377\346\346\346\377\346\346\346\377\354\354\354\377"
|
||||
"\357\357\357\377\357\357\357\377\357\357\357\377\355\355\355\377\357\357"
|
||||
"\357\377\357\357\357\377\357\357\357\377\357\357\357\377\357\357\357\377"
|
||||
"\357\357\357\377\357\357\357\377\357\357\357\377\357\357\357\377\360\360"
|
||||
"\360\377\360\360\360\377\360\360\360\377\360\360\360\377\360\360\360\377"
|
||||
"\360\360\360\377\357\357\357\377\357\357\357\377\352\352\352\377\355\355"
|
||||
"\355\377\352\352\352\377\352\352\352\377\355\355\355\377\362\362\362\377"
|
||||
"\362\362\362\377\362\362\362\377\363\363\363\377\363\363\363\377\363\363"
|
||||
"\363\377\365\365\365\377\365\365\365\377\365\365\365\377\363\363\363\377"
|
||||
"\355\355\355\377\352\352\352\377\344\344\344\377\337\337\337\377\332\332"
|
||||
"\332\377\332\332\332\377\337\337\337\377\337\337\337\377\344\344\344\377"
|
||||
"\355\355\355\377\362\362\362\377\360\360\360\377\363\363\363\377\360\360"
|
||||
"\360\377\360\360\360\377\360\360\360\377\360\360\360\377\360\360\360\377"
|
||||
"\357\357\357\377\357\357\357\377\354\354\354\377\354\354\354\377\346\346"
|
||||
"\346\377\346\346\346\377\346\346\346\377\346\346\346\377\354\354\354\377"
|
||||
"\354\354\354\377\357\357\357\377\357\357\357\377\357\357\357\377\355\355"
|
||||
"\355\377\357\357\357\377\355\355\355\377\357\357\357\377\362\362\362\377"
|
||||
"\362\362\362\377\363\363\363\377\363\363\363\377\363\363\363\377\363\363"
|
||||
"\363\377\365\365\365\377\365\365\365\377\365\365\365\377\365\365\365\377"
|
||||
"\365\365\365\377\365\365\365\377\363\363\363\377\360\360\360\377\357\357"
|
||||
"\357\377\354\354\354\377\354\354\354\377\354\354\354\377\351\351\351\377"
|
||||
"\362\362\362\377\363\363\363\377\366\366\366\377\370\370\370\377\370\370"
|
||||
"\370\377\370\370\370\377\370\370\370\377\370\370\370\377\365\365\365\377"
|
||||
"\363\363\363\377\355\355\355\377\352\352\352\377\344\344\344\377\337\337"
|
||||
"\337\377\332\332\332\377\332\332\332\377\337\337\337\377\337\337\337\377"
|
||||
"\344\344\344\377\355\355\355\377\362\362\362\377\360\360\360\377\365\365"
|
||||
"\365\377\363\363\363\377\363\363\363\377\363\363\363\377\362\362\362\377"
|
||||
"\362\362\362\377\360\360\360\377\360\360\360\377\354\354\354\377\354\354"
|
||||
"\354\377\346\346\346\377\346\346\346\377\346\346\346\377\346\346\346\377"
|
||||
"\354\354\354\377\354\354\354\377\360\360\360\377\360\360\360\377\363\363"
|
||||
"\363\377\357\357\357\377\362\362\362\377\362\362\362\377\362\362\362\377"
|
||||
"\362\362\362\377\366\366\366\377\360\360\360\377\360\360\360\377\360\360"
|
||||
"\360\377\363\363\363\377\365\365\365\377\365\365\365\377\365\365\365\377"
|
||||
"\365\365\365\377\365\365\365\377\365\365\365\377\365\365\365\377\360\360"
|
||||
"\360\377\360\360\360\377\357\357\357\377\354\354\354\377\351\351\351\377"
|
||||
"\351\351\351\377\357\357\357\377\362\362\362\377\370\370\370\377\370\370"
|
||||
"\370\377\370\370\370\377\370\370\370\377\370\370\370\377\370\370\370\377"
|
||||
"\365\365\365\377\365\365\365\377\360\360\360\377\352\352\352\377\344\344"
|
||||
"\344\377\337\337\337\377\332\332\332\377\332\332\332\377\337\337\337\377"
|
||||
"\337\337\337\377\344\344\344\377\355\355\355\377\362\362\362\377\360\360"
|
||||
"\360\377\365\365\365\377\363\363\363\377\363\363\363\377\363\363\363\377"
|
||||
"\362\362\362\377\362\362\362\377\360\360\360\377\360\360\360\377\354\354"
|
||||
"\354\377\354\354\354\377\346\346\346\377\346\346\346\377\346\346\346\377"
|
||||
"\346\346\346\377\354\354\354\377\354\354\354\377\360\360\360\377\360\360"
|
||||
"\360\377\362\362\362\377\355\355\355\377\362\362\362\377\362\362\362\377"
|
||||
"\362\362\362\377\366\366\366\377\366\366\366\377\363\363\363\377\365\365"
|
||||
"\365\377\365\365\365\377\365\365\365\377\365\365\365\377\371\371\371\377"
|
||||
"\371\371\371\377\371\371\371\377\371\371\371\377\365\365\365\377\365\365"
|
||||
"\365\377\360\360\360\377\363\363\363\377\357\357\357\377\357\357\357\377"
|
||||
"\354\354\354\377\357\357\357\377\357\357\357\377\360\360\360\377\365\365"
|
||||
"\365\377\370\370\370\377\376\376\376\377\376\376\376\377\370\370\370\377"
|
||||
"\370\370\370\377\365\365\365\377\363\363\363\377\360\360\360\377\352\352"
|
||||
"\352\377\344\344\344\377\337\337\337\377\332\332\332\377\332\332\332\377"
|
||||
"\337\337\337\377\337\337\337\377\344\344\344\377\355\355\355\377\362\362"
|
||||
"\362\377\362\362\362\377\365\365\365\377\363\363\363\377\363\363\363\377"
|
||||
"\363\363\363\377\357\357\357\377\357\357\357\377\360\360\360\377\360\360"
|
||||
"\360\377\354\354\354\377\354\354\354\377\346\346\346\377\346\346\346\377"
|
||||
"\346\346\346\377\346\346\346\377\354\354\354\377\354\354\354\377\360\360"
|
||||
"\360\377\360\360\360\377\357\357\357\377\355\355\355\377\362\362\362\377"
|
||||
"\362\362\362\377\362\362\362\377\362\362\362\377\366\366\366\377\362\362"
|
||||
"\362\377\363\363\363\377\363\363\363\377\363\363\363\377\370\370\370\377"
|
||||
"\370\370\370\377\370\370\370\377\370\370\370\377\371\371\371\377\365\365"
|
||||
"\365\377\365\365\365\377\360\360\360\377\363\363\363\377\357\357\357\377"
|
||||
"\357\357\357\377\357\357\357\377\357\357\357\377\360\360\360\377\360\360"
|
||||
"\360\377\365\365\365\377\366\366\366\377\376\376\376\377\376\376\376\377"
|
||||
"\370\370\370\377\370\370\370\377\365\365\365\377\360\360\360\377\355\355"
|
||||
"\355\377\343\343\343\377\337\337\337\377\337\337\337\377\332\332\332\377"
|
||||
"\332\332\332\377\337\337\337\377\337\337\337\377\344\344\344\377\355\355"
|
||||
"\355\377\362\362\362\377\362\362\362\377\365\365\365\377\363\363\363\377"
|
||||
"\363\363\363\377\363\363\363\377\357\357\357\377\357\357\357\377\360\360"
|
||||
"\360\377\360\360\360\377\354\354\354\377\354\354\354\377\346\346\346\377"
|
||||
"\346\346\346\377\346\346\346\377\346\346\346\377\354\354\354\377\354\354"
|
||||
"\354\377\360\360\360\377\360\360\360\377\357\357\357\377\357\357\357\377"
|
||||
"\362\362\362\377\362\362\362\377\362\362\362\377\362\362\362\377\366\366"
|
||||
"\366\377\357\357\357\377\363\363\363\377\363\363\363\377\363\363\363\377"
|
||||
"\370\370\370\377\370\370\370\377\370\370\370\377\370\370\370\377\370\370"
|
||||
"\370\377\363\363\363\377\363\363\363\377\360\360\360\377\360\360\360\377"
|
||||
"\357\357\357\377\354\354\354\377\354\354\354\377\357\357\357\377\360\360"
|
||||
"\360\377\360\360\360\377\365\365\365\377\365\365\365\377\376\376\376\377"
|
||||
"\370\370\370\377\370\370\370\377\370\370\370\377\365\365\365\377\360\360"
|
||||
"\360\377\355\355\355\377\343\343\343\377\337\337\337\377\335\335\335\377"
|
||||
"\332\332\332\377\332\332\332\377\335\335\335\377\337\337\337\377\344\344"
|
||||
"\344\377\355\355\355\377\362\362\362\377\362\362\362\377\363\363\363\377"
|
||||
"\363\363\363\377\363\363\363\377\360\360\360\377\360\360\360\377\360\360"
|
||||
"\360\377\354\354\354\377\357\357\357\377\354\354\354\377\354\354\354\377"
|
||||
"\346\346\346\377\346\346\346\377\346\346\346\377\346\346\346\377\354\354"
|
||||
"\354\377\354\354\354\377\357\357\357\377\357\357\357\377\357\357\357\377"
|
||||
"\357\357\357\377\355\355\355\377\355\355\355\377\362\362\362\377\362\362"
|
||||
"\362\377\366\366\366\377\355\355\355\377\360\360\360\377\362\362\362\377"
|
||||
"\362\362\362\377\362\362\362\377\366\366\366\377\370\370\370\377\370\370"
|
||||
"\370\377\370\370\370\377\363\363\363\377\363\363\363\377\360\360\360\377"
|
||||
"\357\357\357\377\354\354\354\377\354\354\354\377\354\354\354\377\354\354"
|
||||
"\354\377\357\357\357\377\360\360\360\377\365\365\365\377\365\365\365\377"
|
||||
"\371\371\371\377\370\370\370\377\370\370\370\377\366\366\366\377\362\362"
|
||||
"\362\377\360\360\360\377\355\355\355\377\343\343\343\377\337\337\337\377"
|
||||
"\335\335\335\377\332\332\332\377\332\332\332\377\335\335\335\377\335\335"
|
||||
"\335\377\342\342\342\377\352\352\352\377\357\357\357\377\362\362\362\377"
|
||||
"\363\363\363\377\360\360\360\377\360\360\360\377\360\360\360\377\360\360"
|
||||
"\360\377\360\360\360\377\354\354\354\377\357\357\357\377\354\354\354\377"
|
||||
"\354\354\354\377\346\346\346\377\346\346\346\377\346\346\346\377\346\346"
|
||||
"\346\377\354\354\354\377\354\354\354\377\357\357\357\377\357\357\357\377"
|
||||
"\357\357\357\377\357\357\357\377\355\355\355\377\355\355\355\377\362\362"
|
||||
"\362\377\362\362\362\377\363\363\363\377\352\352\352\377\355\355\355\377"
|
||||
"\355\355\355\377\362\362\362\377\362\362\362\377\362\362\362\377\362\362"
|
||||
"\362\377\363\363\363\377\363\363\363\377\363\363\363\377\363\363\363\377"
|
||||
"\357\357\357\377\357\357\357\377\351\351\351\377\351\351\351\377\346\346"
|
||||
"\346\377\351\351\351\377\357\357\357\377\360\360\360\377\365\365\365\377"
|
||||
"\365\365\365\377\365\365\365\377\370\370\370\377\363\363\363\377\363\363"
|
||||
"\363\377\362\362\362\377\360\360\360\377\355\355\355\377\343\343\343\377"
|
||||
"\337\337\337\377\335\335\335\377\327\327\327\377\327\327\327\377\335\335"
|
||||
"\335\377\335\335\335\377\342\342\342\377\352\352\352\377\357\357\357\377"
|
||||
"\357\357\357\377\363\363\363\377\360\360\360\377\360\360\360\377\360\360"
|
||||
"\360\377\357\357\357\377\357\357\357\377\357\357\357\377\357\357\357\377"
|
||||
"\351\351\351\377\351\351\351\377\346\346\346\377\340\340\340\377\340\340"
|
||||
"\340\377\346\346\346\377\351\351\351\377\351\351\351\377\357\357\357\377"
|
||||
"\354\354\354\377\352\352\352\377\352\352\352\377\355\355\355\377\355\355"
|
||||
"\355\377\362\362\362\377\362\362\362\377\360\360\360\377\355\355\355\377"
|
||||
"\352\352\352\377\355\355\355\377\360\360\360\377\362\362\362\377\362\362"
|
||||
"\362\377\362\362\362\377\363\363\363\377\363\363\363\377\363\363\363\377"
|
||||
"\362\362\362\377\354\354\354\377\354\354\354\377\351\351\351\377\351\351"
|
||||
"\351\377\346\346\346\377\346\346\346\377\354\354\354\377\357\357\357\377"
|
||||
"\363\363\363\377\365\365\365\377\365\365\365\377\363\363\363\377\362\362"
|
||||
"\362\377\362\362\362\377\355\355\355\377\357\357\357\377\354\354\354\377"
|
||||
"\343\343\343\377\335\335\335\377\335\335\335\377\327\327\327\377\327\327"
|
||||
"\327\377\335\335\335\377\335\335\335\377\342\342\342\377\352\352\352\377"
|
||||
"\357\357\357\377\357\357\357\377\363\363\363\377\360\360\360\377\360\360"
|
||||
"\360\377\360\360\360\377\357\357\357\377\357\357\357\377\357\357\357\377"
|
||||
"\357\357\357\377\351\351\351\377\346\346\346\377\340\340\340\377\340\340"
|
||||
"\340\377\340\340\340\377\340\340\340\377\346\346\346\377\351\351\351\377"
|
||||
"\357\357\357\377\357\357\357\377\352\352\352\377\352\352\352\377\354\354"
|
||||
"\354\377\357\357\357\377\357\357\357\377\360\360\360\377\360\360\360\377"
|
||||
"\352\352\352\377\355\355\355\377\355\355\355\377\355\355\355\377\355\355"
|
||||
"\355\377\357\357\357\377\355\355\355\377\357\357\357\377\362\362\362\377"
|
||||
"\357\357\357\377\362\362\362\377\354\354\354\377\354\354\354\377\346\346"
|
||||
"\346\377\346\346\346\377\344\344\344\377\344\344\344\377\354\354\354\377"
|
||||
"\357\357\357\377\363\363\363\377\360\360\360\377\360\360\360\377\363\363"
|
||||
"\363\377\362\362\362\377\362\362\362\377\355\355\355\377\357\357\357\377"
|
||||
"\354\354\354\377\340\340\340\377\335\335\335\377\335\335\335\377\327\327"
|
||||
"\327\377\327\327\327\377\335\335\335\377\335\335\335\377\342\342\342\377"
|
||||
"\352\352\352\377\357\357\357\377\357\357\357\377\363\363\363\377\357\357"
|
||||
"\357\377\357\357\357\377\357\357\357\377\360\360\360\377\360\360\360\377"
|
||||
"\357\357\357\377\357\357\357\377\351\351\351\377\346\346\346\377\340\340"
|
||||
"\340\377\340\340\340\377\340\340\340\377\340\340\340\377\346\346\346\377"
|
||||
"\351\351\351\377\357\357\357\377\354\354\354\377\355\355\355\377\355\355"
|
||||
"\355\377\354\354\354\377\354\354\354\377\355\355\355\377\352\352\352\377"
|
||||
"\352\352\352\377",
|
||||
};
|
||||
|
||||
@@ -1,922 +0,0 @@
|
||||
/* GIMP RGBA C-Source image dump (text_silk.c) */
|
||||
|
||||
static const struct {
|
||||
unsigned int width;
|
||||
unsigned int height;
|
||||
unsigned int bytes_per_pixel; /* 2:RGB16, 3:RGB, 4:RGBA */
|
||||
unsigned char pixel_data[64 * 64 * 4 + 1];
|
||||
} text_silk = {
|
||||
64, 64, 4,
|
||||
"\377\377\377\366\377\377\377\372\377\377\377\375\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\376\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\376\377\377\377\377\377\377\377\374\377\377"
|
||||
"\377\366\377\377\377\365\377\377\377\364\377\377\377\366\377\377\377\370"
|
||||
"\377\377\377\365\377\377\377\362\377\377\377\364\377\377\377\366\377\377"
|
||||
"\377\370\377\377\377\372\377\377\377\363\377\377\377\354\377\377\377\350"
|
||||
"\377\377\377\351\377\377\377\352\377\377\377\354\377\377\377\356\377\377"
|
||||
"\377\361\377\377\377\366\377\377\377\372\377\377\377\375\377\377\377\375"
|
||||
"\377\377\377\373\377\377\377\365\377\377\377\366\377\377\377\371\377\377"
|
||||
"\377\372\377\377\377\374\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\375\377\377\377\366\377\377"
|
||||
"\377\357\377\377\377\350\377\377\377\346\377\377\377\342\377\377\377\335"
|
||||
"\377\377\377\346\377\377\377\351\377\377\377\351\377\377\377\357\377\377"
|
||||
"\377\357\377\377\377\363\377\377\377\363\377\377\377\361\377\377\377\361"
|
||||
"\377\377\377\362\377\377\377\357\377\377\377\365\377\377\377\372\377\377"
|
||||
"\377\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\375\377\377\377\377\377\377"
|
||||
"\377\375\377\377\377\370\377\377\377\365\377\377\377\364\377\377\377\367"
|
||||
"\377\377\377\370\377\377\377\363\377\377\377\357\377\377\377\356\377\377"
|
||||
"\377\360\377\377\377\364\377\377\377\370\377\377\377\365\377\377\377\355"
|
||||
"\377\377\377\350\377\377\377\347\377\377\377\344\377\377\377\344\377\377"
|
||||
"\377\352\377\377\377\357\377\377\377\362\377\377\377\370\377\377\377\374"
|
||||
"\377\377\377\372\377\377\377\366\377\377\377\362\377\377\377\363\377\377"
|
||||
"\377\363\377\377\377\363\377\377\377\365\377\377\377\371\377\377\377\375"
|
||||
"\377\377\377\375\377\377\377\376\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\373\377\377\377\363\377\377\377\352\377\377\377\347\377\377\377\346"
|
||||
"\377\377\377\342\377\377\377\345\377\377\377\344\377\377\377\340\377\377"
|
||||
"\377\344\377\377\377\351\377\377\377\355\377\377\377\356\377\377\377\357"
|
||||
"\377\377\377\354\377\377\377\354\377\377\377\356\377\377\377\364\377\377"
|
||||
"\377\371\377\377\377\375\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\376\377\377\377\374\377\377\377\373\377\377\377\372"
|
||||
"\377\377\377\374\377\377\377\372\377\377\377\362\377\377\377\360\377\377"
|
||||
"\377\356\377\377\377\357\377\377\377\366\377\377\377\367\377\377\377\361"
|
||||
"\377\377\377\351\377\377\377\346\377\377\377\350\377\377\377\344\377\377"
|
||||
"\377\340\377\377\377\347\377\377\377\360\377\377\377\361\377\377\377\365"
|
||||
"\377\377\377\370\377\377\377\365\377\377\377\362\377\377\377\356\377\377"
|
||||
"\377\355\377\377\377\355\377\377\377\354\377\377\377\356\377\377\377\360"
|
||||
"\377\377\377\364\377\377\377\370\377\377\377\372\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\372\377\377\377\364\377\377\377\352\377\377\377\342"
|
||||
"\377\377\377\342\377\377\377\340\377\377\377\342\377\377\377\342\377\377"
|
||||
"\377\333\377\377\377\327\377\377\377\336\377\377\377\345\377\377\377\352"
|
||||
"\377\377\377\357\377\377\377\355\377\377\377\354\377\377\377\357\377\377"
|
||||
"\377\364\377\377\377\371\377\377\377\374\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\376\377\377\377\372\377\377\377\366\377\377"
|
||||
"\377\363\377\377\377\362\377\377\377\365\377\377\377\370\377\377\377\365"
|
||||
"\377\377\377\357\377\377\377\352\377\377\377\351\377\377\377\355\377\377"
|
||||
"\377\351\377\377\377\343\377\377\377\347\377\377\377\360\377\377\377\364"
|
||||
"\377\377\377\366\377\377\377\365\377\377\377\363\377\377\377\360\377\377"
|
||||
"\377\351\377\377\377\346\377\377\377\352\377\377\377\353\377\377\377\347"
|
||||
"\377\377\377\352\377\377\377\361\377\377\377\365\377\377\377\370\377\377"
|
||||
"\377\376\377\377\377\376\377\377\377\366\377\377\377\361\377\377\377\353"
|
||||
"\377\377\377\336\377\377\377\332\377\377\377\334\377\377\377\335\377\377"
|
||||
"\377\336\377\377\377\327\377\377\377\316\377\377\377\322\377\377\377\333"
|
||||
"\377\377\377\344\377\377\377\357\377\377\377\357\377\377\377\357\377\377"
|
||||
"\377\361\377\377\377\364\377\377\377\372\377\377\377\375\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\376\377\377\377\366\377\377"
|
||||
"\377\365\377\377\377\365\377\377\377\370\377\377\377\374\377\377\377\374"
|
||||
"\377\377\377\366\377\377\377\360\377\377\377\353\377\377\377\353\377\377"
|
||||
"\377\361\377\377\377\356\377\377\377\353\377\377\377\357\377\377\377\365"
|
||||
"\377\377\377\371\377\377\377\371\377\377\377\367\377\377\377\361\377\377"
|
||||
"\377\354\377\377\377\351\377\377\377\351\377\377\377\352\377\377\377\350"
|
||||
"\377\377\377\343\377\377\377\354\377\377\377\366\377\377\377\373\377\377"
|
||||
"\377\374\377\377\377\375\377\377\377\374\377\377\377\363\377\377\377\351"
|
||||
"\377\377\377\342\377\377\377\332\377\377\377\333\377\377\377\340\377\377"
|
||||
"\377\341\377\377\377\340\377\377\377\326\377\377\377\312\377\377\377\317"
|
||||
"\377\377\377\327\377\377\377\343\377\377\377\357\377\377\377\360\377\377"
|
||||
"\377\361\377\377\377\357\377\377\377\364\377\377\377\372\377\377\377\376"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\372\377\377\377\371\377\377\377\372\377\377\377\374\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\371\377\377\377\357\377\377\377\355\377\377"
|
||||
"\377\360\377\377\377\365\377\377\377\365\377\377\377\362\377\377\377\365"
|
||||
"\377\377\377\372\377\377\377\374\377\377\377\372\377\377\377\366\377\377"
|
||||
"\377\361\377\377\377\360\377\377\377\356\377\377\377\356\377\377\377\353"
|
||||
"\377\377\377\347\377\377\377\347\377\377\377\361\377\377\377\372\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\373\377\377\377\365\377\377\377\355"
|
||||
"\377\377\377\345\377\377\377\335\377\377\377\333\377\377\377\337\377\377"
|
||||
"\377\344\377\377\377\347\377\377\377\343\377\377\377\330\377\377\377\317"
|
||||
"\377\377\377\317\377\377\377\322\377\377\377\337\377\377\377\352\377\377"
|
||||
"\377\354\377\377\377\356\377\377\377\364\377\377\377\367\377\377\377\372"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\376\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\376\377\377\377\376\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\375\377\377\377\373\377\377\377\370\377\377\377\363\377\377"
|
||||
"\377\361\377\377\377\363\377\377\377\366\377\377\377\367\377\377\377\365"
|
||||
"\377\377\377\371\377\377\377\373\377\377\377\371\377\377\377\370\377\377"
|
||||
"\377\364\377\377\377\360\377\377\377\361\377\377\377\357\377\377\377\356"
|
||||
"\377\377\377\357\377\377\377\357\377\377\377\361\377\377\377\366\377\377"
|
||||
"\377\372\377\377\377\375\377\377\377\377\377\377\377\370\377\377\377\361"
|
||||
"\377\377\377\355\377\377\377\351\377\377\377\342\377\377\377\337\377\377"
|
||||
"\377\340\377\377\377\345\377\377\377\350\377\377\377\343\377\377\377\334"
|
||||
"\377\377\377\325\377\377\377\320\377\377\377\316\377\377\377\335\377\377"
|
||||
"\377\351\377\377\377\356\377\377\377\361\377\377\377\370\377\377\377\372"
|
||||
"\377\377\377\375\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\376\377\377\377\375\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\372\377\377\377\365\377\377\377\363\377\377"
|
||||
"\377\365\377\377\377\363\377\377\377\363\377\377\377\366\377\377\377\366"
|
||||
"\377\377\377\370\377\377\377\374\377\377\377\372\377\377\377\364\377\377"
|
||||
"\377\361\377\377\377\357\377\377\377\354\377\377\377\356\377\377\377\353"
|
||||
"\377\377\377\355\377\377\377\362\377\377\377\367\377\377\377\373\377\377"
|
||||
"\377\375\377\377\377\374\377\377\377\374\377\377\377\375\377\377\377\371"
|
||||
"\377\377\377\363\377\377\377\356\377\377\377\350\377\377\377\343\377\377"
|
||||
"\377\342\377\377\377\344\377\377\377\350\377\377\377\350\377\377\377\346"
|
||||
"\377\377\377\340\377\377\377\333\377\377\377\330\377\377\377\331\377\377"
|
||||
"\377\342\377\377\377\354\377\377\377\362\377\377\377\367\377\377\377\366"
|
||||
"\377\377\377\366\377\377\377\373\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\376\377\377\377\372\377\377\377\374"
|
||||
"\377\377\377\375\377\377\377\373\377\377\377\370\377\377\377\364\377\377"
|
||||
"\377\361\377\377\377\365\377\377\377\365\377\377\377\365\377\377\377\367"
|
||||
"\377\377\377\365\377\377\377\370\377\377\377\373\377\377\377\372\377\377"
|
||||
"\377\366\377\377\377\357\377\377\377\351\377\377\377\351\377\377\377\354"
|
||||
"\377\377\377\352\377\377\377\360\377\377\377\363\377\377\377\370\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\370\377\377\377\363\377\377\377\356\377\377\377\350\377\377"
|
||||
"\377\344\377\377\377\342\377\377\377\343\377\377\377\352\377\377\377\354"
|
||||
"\377\377\377\352\377\377\377\343\377\377\377\340\377\377\377\335\377\377"
|
||||
"\377\340\377\377\377\346\377\377\377\356\377\377\377\362\377\377\377\367"
|
||||
"\377\377\377\363\377\377\377\361\377\377\377\367\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\374\377\377\377\370\377\377\377\366"
|
||||
"\377\377\377\372\377\377\377\372\377\377\377\367\377\377\377\367\377\377"
|
||||
"\377\366\377\377\377\365\377\377\377\366\377\377\377\362\377\377\377\361"
|
||||
"\377\377\377\364\377\377\377\364\377\377\377\370\377\377\377\372\377\377"
|
||||
"\377\374\377\377\377\373\377\377\377\363\377\377\377\355\377\377\377\353"
|
||||
"\377\377\377\352\377\377\377\354\377\377\377\364\377\377\377\367\377\377"
|
||||
"\377\374\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\372\377\377\377\362\377\377\377\356\377\377"
|
||||
"\377\350\377\377\377\346\377\377\377\342\377\377\377\342\377\377\377\353"
|
||||
"\377\377\377\361\377\377\377\356\377\377\377\353\377\377\377\346\377\377"
|
||||
"\377\337\377\377\377\341\377\377\377\351\377\377\377\361\377\377\377\362"
|
||||
"\377\377\377\364\377\377\377\361\377\377\377\360\377\377\377\370\377\377"
|
||||
"\377\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\375\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\375\377\377\377\372"
|
||||
"\377\377\377\365\377\377\377\364\377\377\377\365\377\377\377\364\377\377"
|
||||
"\377\364\377\377\377\364\377\377\377\364\377\377\377\361\377\377\377\352"
|
||||
"\377\377\377\354\377\377\377\357\377\377\377\362\377\377\377\372\377\377"
|
||||
"\377\376\377\377\377\375\377\377\377\373\377\377\377\365\377\377\377\361"
|
||||
"\377\377\377\363\377\377\377\362\377\377\377\363\377\377\377\370\377\377"
|
||||
"\377\373\377\377\377\376\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\375\377\377\377\363\377\377"
|
||||
"\377\353\377\377\377\346\377\377\377\346\377\377\377\347\377\377\377\352"
|
||||
"\377\377\377\356\377\377\377\361\377\377\377\356\377\377\377\357\377\377"
|
||||
"\377\354\377\377\377\350\377\377\377\350\377\377\377\360\377\377\377\366"
|
||||
"\377\377\377\363\377\377\377\362\377\377\377\361\377\377\377\364\377\377"
|
||||
"\377\374\377\377\377\376\377\377\377\376\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\375\377\377\377\374\377\377"
|
||||
"\377\377\377\377\377\375\377\377\377\374\377\377\377\375\377\377\377\376"
|
||||
"\377\377\377\374\377\377\377\366\377\377\377\361\377\377\377\363\377\377"
|
||||
"\377\366\377\377\377\365\377\377\377\363\377\377\377\361\377\377\377\355"
|
||||
"\377\377\377\344\377\377\377\351\377\377\377\355\377\377\377\360\377\377"
|
||||
"\377\372\377\377\377\377\377\377\377\377\377\377\377\372\377\377\377\366"
|
||||
"\377\377\377\367\377\377\377\370\377\377\377\371\377\377\377\371\377\377"
|
||||
"\377\373\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\377\377"
|
||||
"\377\366\377\377\377\357\377\377\377\351\377\377\377\350\377\377\377\354"
|
||||
"\377\377\377\360\377\377\377\361\377\377\377\363\377\377\377\357\377\377"
|
||||
"\377\361\377\377\377\357\377\377\377\355\377\377\377\360\377\377\377\363"
|
||||
"\377\377\377\365\377\377\377\365\377\377\377\364\377\377\377\370\377\377"
|
||||
"\377\370\377\377\377\375\377\377\377\375\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\375\377\377"
|
||||
"\377\372\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\377"
|
||||
"\377\377\377\376\377\377\377\372\377\377\377\365\377\377\377\362\377\377"
|
||||
"\377\361\377\377\377\363\377\377\377\365\377\377\377\367\377\377\377\363"
|
||||
"\377\377\377\353\377\377\377\341\377\377\377\345\377\377\377\356\377\377"
|
||||
"\377\365\377\377\377\372\377\377\377\377\377\377\377\377\377\377\377\374"
|
||||
"\377\377\377\367\377\377\377\371\377\377\377\372\377\377\377\375\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\375\377\377\377\370\377\377\377\363\377\377\377\357\377\377\377\356"
|
||||
"\377\377\377\357\377\377\377\357\377\377\377\360\377\377\377\362\377\377"
|
||||
"\377\357\377\377\377\361\377\377\377\356\377\377\377\355\377\377\377\365"
|
||||
"\377\377\377\367\377\377\377\366\377\377\377\372\377\377\377\373\377\377"
|
||||
"\377\376\377\377\377\374\377\377\377\376\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\374\377\377\377\371\377\377\377\375\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\374\377\377\377\370\377\377\377\364\377\377"
|
||||
"\377\361\377\377\377\356\377\377\377\355\377\377\377\362\377\377\377\365"
|
||||
"\377\377\377\357\377\377\377\353\377\377\377\344\377\377\377\344\377\377"
|
||||
"\377\353\377\377\377\365\377\377\377\374\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\370\377\377\377\367\377\377\377\371\377\377"
|
||||
"\377\374\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\372\377\377"
|
||||
"\377\372\377\377\377\371\377\377\377\370\377\377\377\364\377\377\377\362"
|
||||
"\377\377\377\361\377\377\377\357\377\377\377\356\377\377\377\354\377\377"
|
||||
"\377\357\377\377\377\357\377\377\377\361\377\377\377\361\377\377\377\361"
|
||||
"\377\377\377\366\377\377\377\373\377\377\377\376\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\375\377\377\377\374\377\377\377\376\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\376\377\377\377\376\377\377\377\374\377\377\377\376\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\372\377\377\377\370\377\377\377\367\377\377"
|
||||
"\377\365\377\377\377\362\377\377\377\356\377\377\377\355\377\377\377\356"
|
||||
"\377\377\377\355\377\377\377\350\377\377\377\352\377\377\377\355\377\377"
|
||||
"\377\354\377\377\377\355\377\377\377\363\377\377\377\374\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\372\377\377\377\371\377\377"
|
||||
"\377\372\377\377\377\374\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\375\377\377\377\374\377\377"
|
||||
"\377\364\377\377\377\361\377\377\377\362\377\377\377\365\377\377\377\366"
|
||||
"\377\377\377\364\377\377\377\361\377\377\377\356\377\377\377\355\377\377"
|
||||
"\377\353\377\377\377\361\377\377\377\360\377\377\377\356\377\377\377\362"
|
||||
"\377\377\377\363\377\377\377\367\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\372\377\377\377\365\377\377\377\372"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\376\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\376\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\372\377\377\377\365\377\377\377\366\377\377"
|
||||
"\377\366\377\377\377\364\377\377\377\363\377\377\377\361\377\377\377\360"
|
||||
"\377\377\377\357\377\377\377\351\377\377\377\350\377\377\377\354\377\377"
|
||||
"\377\361\377\377\377\364\377\377\377\364\377\377\377\364\377\377\377\371"
|
||||
"\377\377\377\373\377\377\377\373\377\377\377\373\377\377\377\370\377\377"
|
||||
"\377\371\377\377\377\374\377\377\377\375\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\373\377\377"
|
||||
"\377\370\377\377\377\362\377\377\377\356\377\377\377\356\377\377\377\361"
|
||||
"\377\377\377\365\377\377\377\364\377\377\377\361\377\377\377\360\377\377"
|
||||
"\377\360\377\377\377\361\377\377\377\365\377\377\377\361\377\377\377\353"
|
||||
"\377\377\377\357\377\377\377\365\377\377\377\372\377\377\377\376\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\376\377\377\377\366\377\377\377\357"
|
||||
"\377\377\377\365\377\377\377\372\377\377\377\373\377\377\377\373\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\376\377\377\377\374\377\377\377\367\377\377\377\363\377\377"
|
||||
"\377\366\377\377\377\366\377\377\377\364\377\377\377\367\377\377\377\365"
|
||||
"\377\377\377\362\377\377\377\363\377\377\377\353\377\377\377\353\377\377"
|
||||
"\377\355\377\377\377\362\377\377\377\366\377\377\377\365\377\377\377\363"
|
||||
"\377\377\377\363\377\377\377\365\377\377\377\363\377\377\377\366\377\377"
|
||||
"\377\363\377\377\377\362\377\377\377\370\377\377\377\372\377\377\377\372"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\376\377\377\377\375\377\377"
|
||||
"\377\374\377\377\377\367\377\377\377\363\377\377\377\357\377\377\377\355"
|
||||
"\377\377\377\362\377\377\377\366\377\377\377\367\377\377\377\364\377\377"
|
||||
"\377\362\377\377\377\357\377\377\377\360\377\377\377\361\377\377\377\356"
|
||||
"\377\377\377\347\377\377\377\350\377\377\377\357\377\377\377\366\377\377"
|
||||
"\377\370\377\377\377\370\377\377\377\372\377\377\377\373\377\377\377\357"
|
||||
"\377\377\377\351\377\377\377\356\377\377\377\364\377\377\377\370\377\377"
|
||||
"\377\373\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\375\377\377\377\374\377\377\377\370\377\377"
|
||||
"\377\365\377\377\377\364\377\377\377\362\377\377\377\362\377\377\377\365"
|
||||
"\377\377\377\364\377\377\377\365\377\377\377\365\377\377\377\356\377\377"
|
||||
"\377\353\377\377\377\356\377\377\377\364\377\377\377\366\377\377\377\365"
|
||||
"\377\377\377\363\377\377\377\357\377\377\377\355\377\377\377\354\377\377"
|
||||
"\377\353\377\377\377\352\377\377\377\353\377\377\377\362\377\377\377\370"
|
||||
"\377\377\377\373\377\377\377\376\377\377\377\376\377\377\377\372\377\377"
|
||||
"\377\374\377\377\377\375\377\377\377\372\377\377\377\366\377\377\377\362"
|
||||
"\377\377\377\361\377\377\377\366\377\377\377\372\377\377\377\367\377\377"
|
||||
"\377\364\377\377\377\357\377\377\377\352\377\377\377\355\377\377\377\352"
|
||||
"\377\377\377\346\377\377\377\343\377\377\377\344\377\377\377\351\377\377"
|
||||
"\377\355\377\377\377\355\377\377\377\356\377\377\377\362\377\377\377\364"
|
||||
"\377\377\377\353\377\377\377\344\377\377\377\346\377\377\377\352\377\377"
|
||||
"\377\357\377\377\377\371\377\377\377\376\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\374\377\377\377\372\377\377"
|
||||
"\377\370\377\377\377\365\377\377\377\362\377\377\377\357\377\377\377\355"
|
||||
"\377\377\377\355\377\377\377\354\377\377\377\362\377\377\377\365\377\377"
|
||||
"\377\362\377\377\377\356\377\377\377\357\377\377\377\364\377\377\377\363"
|
||||
"\377\377\377\362\377\377\377\362\377\377\377\356\377\377\377\356\377\377"
|
||||
"\377\355\377\377\377\351\377\377\377\351\377\377\377\353\377\377\377\357"
|
||||
"\377\377\377\370\377\377\377\373\377\377\377\374\377\377\377\375\377\377"
|
||||
"\377\370\377\377\377\370\377\377\377\372\377\377\377\372\377\377\377\371"
|
||||
"\377\377\377\367\377\377\377\366\377\377\377\370\377\377\377\370\377\377"
|
||||
"\377\361\377\377\377\356\377\377\377\350\377\377\377\346\377\377\377\353"
|
||||
"\377\377\377\347\377\377\377\337\377\377\377\342\377\377\377\346\377\377"
|
||||
"\377\347\377\377\377\350\377\377\377\350\377\377\377\350\377\377\377\355"
|
||||
"\377\377\377\361\377\377\377\351\377\377\377\340\377\377\377\340\377\377"
|
||||
"\377\343\377\377\377\353\377\377\377\367\377\377\377\374\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\376\377\377\377\372\377\377\377\371\377\377"
|
||||
"\377\370\377\377\377\372\377\377\377\372\377\377\377\363\377\377\377\356"
|
||||
"\377\377\377\350\377\377\377\346\377\377\377\344\377\377\377\353\377\377"
|
||||
"\377\363\377\377\377\363\377\377\377\356\377\377\377\355\377\377\377\361"
|
||||
"\377\377\377\360\377\377\377\361\377\377\377\361\377\377\377\357\377\377"
|
||||
"\377\360\377\377\377\361\377\377\377\360\377\377\377\355\377\377\377\353"
|
||||
"\377\377\377\360\377\377\377\367\377\377\377\371\377\377\377\371\377\377"
|
||||
"\377\370\377\377\377\365\377\377\377\366\377\377\377\370\377\377\377\372"
|
||||
"\377\377\377\370\377\377\377\367\377\377\377\371\377\377\377\370\377\377"
|
||||
"\377\365\377\377\377\355\377\377\377\344\377\377\377\337\377\377\377\341"
|
||||
"\377\377\377\344\377\377\377\342\377\377\377\340\377\377\377\340\377\377"
|
||||
"\377\342\377\377\377\342\377\377\377\346\377\377\377\347\377\377\377\346"
|
||||
"\377\377\377\351\377\377\377\354\377\377\377\342\377\377\377\334\377\377"
|
||||
"\377\337\377\377\377\344\377\377\377\360\377\377\377\370\377\377\377\371"
|
||||
"\377\377\377\372\377\377\377\372\377\377\377\365\377\377\377\367\377\377"
|
||||
"\377\370\377\377\377\371\377\377\377\375\377\377\377\374\377\377\377\365"
|
||||
"\377\377\377\356\377\377\377\344\377\377\377\334\377\377\377\332\377\377"
|
||||
"\377\342\377\377\377\354\377\377\377\354\377\377\377\350\377\377\377\350"
|
||||
"\377\377\377\354\377\377\377\354\377\377\377\357\377\377\377\361\377\377"
|
||||
"\377\361\377\377\377\363\377\377\377\363\377\377\377\362\377\377\377\360"
|
||||
"\377\377\377\355\377\377\377\355\377\377\377\360\377\377\377\363\377\377"
|
||||
"\377\365\377\377\377\363\377\377\377\365\377\377\377\367\377\377\377\367"
|
||||
"\377\377\377\372\377\377\377\370\377\377\377\365\377\377\377\366\377\377"
|
||||
"\377\363\377\377\377\357\377\377\377\350\377\377\377\335\377\377\377\326"
|
||||
"\377\377\377\332\377\377\377\333\377\377\377\332\377\377\377\336\377\377"
|
||||
"\377\333\377\377\377\340\377\377\377\347\377\377\377\352\377\377\377\347"
|
||||
"\377\377\377\346\377\377\377\347\377\377\377\346\377\377\377\340\377\377"
|
||||
"\377\336\377\377\377\337\377\377\377\350\377\377\377\363\377\377\377\371"
|
||||
"\377\377\377\367\377\377\377\365\377\377\377\364\377\377\377\363\377\377"
|
||||
"\377\366\377\377\377\366\377\377\377\367\377\377\377\373\377\377\377\373"
|
||||
"\377\377\377\365\377\377\377\362\377\377\377\346\377\377\377\325\377\377"
|
||||
"\377\322\377\377\377\332\377\377\377\346\377\377\377\347\377\377\377\345"
|
||||
"\377\377\377\346\377\377\377\346\377\377\377\347\377\377\377\352\377\377"
|
||||
"\377\353\377\377\377\360\377\377\377\365\377\377\377\365\377\377\377\365"
|
||||
"\377\377\377\362\377\377\377\360\377\377\377\357\377\377\377\353\377\377"
|
||||
"\377\357\377\377\377\364\377\377\377\366\377\377\377\371\377\377\377\371"
|
||||
"\377\377\377\370\377\377\377\372\377\377\377\371\377\377\377\362\377\377"
|
||||
"\377\362\377\377\377\357\377\377\377\351\377\377\377\344\377\377\377\330"
|
||||
"\377\377\377\316\377\377\377\322\377\377\377\327\377\377\377\327\377\377"
|
||||
"\377\326\377\377\377\325\377\377\377\335\377\377\377\350\377\377\377\354"
|
||||
"\377\377\377\352\377\377\377\350\377\377\377\344\377\377\377\343\377\377"
|
||||
"\377\340\377\377\377\344\377\377\377\346\377\377\377\356\377\377\377\366"
|
||||
"\377\377\377\371\377\377\377\365\377\377\377\362\377\377\377\362\377\377"
|
||||
"\377\363\377\377\377\364\377\377\377\364\377\377\377\365\377\377\377\370"
|
||||
"\377\377\377\371\377\377\377\363\377\377\377\362\377\377\377\353\377\377"
|
||||
"\377\336\377\377\377\325\377\377\377\330\377\377\377\343\377\377\377\344"
|
||||
"\377\377\377\343\377\377\377\343\377\377\377\341\377\377\377\347\377\377"
|
||||
"\377\354\377\377\377\356\377\377\377\363\377\377\377\366\377\377\377\367"
|
||||
"\377\377\377\371\377\377\377\365\377\377\377\361\377\377\377\363\377\377"
|
||||
"\377\355\377\377\377\356\377\377\377\364\377\377\377\372\377\377\377\374"
|
||||
"\377\377\377\374\377\377\377\374\377\377\377\373\377\377\377\370\377\377"
|
||||
"\377\363\377\377\377\364\377\377\377\360\377\377\377\350\377\377\377\340"
|
||||
"\377\377\377\317\377\377\377\306\377\377\377\322\377\377\377\327\377\377"
|
||||
"\377\325\377\377\377\324\377\377\377\326\377\377\377\334\377\377\377\344"
|
||||
"\377\377\377\351\377\377\377\353\377\377\377\354\377\377\377\352\377\377"
|
||||
"\377\344\377\377\377\347\377\377\377\351\377\377\377\354\377\377\377\360"
|
||||
"\377\377\377\370\377\377\377\372\377\377\377\366\377\377\377\363\377\377"
|
||||
"\377\361\377\377\377\364\377\377\377\370\377\377\377\370\377\377\377\371"
|
||||
"\377\377\377\370\377\377\377\364\377\377\377\361\377\377\377\362\377\377"
|
||||
"\377\355\377\377\377\344\377\377\377\333\377\377\377\327\377\377\377\335"
|
||||
"\377\377\377\341\377\377\377\342\377\377\377\342\377\377\377\343\377\377"
|
||||
"\377\352\377\377\377\360\377\377\377\364\377\377\377\366\377\377\377\370"
|
||||
"\377\377\377\372\377\377\377\372\377\377\377\365\377\377\377\365\377\377"
|
||||
"\377\365\377\377\377\356\377\377\377\355\377\377\377\363\377\377\377\372"
|
||||
"\377\377\377\374\377\377\377\375\377\377\377\377\377\377\377\375\377\377"
|
||||
"\377\373\377\377\377\367\377\377\377\365\377\377\377\361\377\377\377\346"
|
||||
"\377\377\377\327\377\377\377\310\377\377\377\302\377\377\377\316\377\377"
|
||||
"\377\326\377\377\377\325\377\377\377\332\377\377\377\341\377\377\377\342"
|
||||
"\377\377\377\344\377\377\377\351\377\377\377\354\377\377\377\361\377\377"
|
||||
"\377\361\377\377\377\353\377\377\377\357\377\377\377\356\377\377\377\356"
|
||||
"\377\377\377\356\377\377\377\365\377\377\377\367\377\377\377\364\377\377"
|
||||
"\377\364\377\377\377\364\377\377\377\366\377\377\377\373\377\377\377\372"
|
||||
"\377\377\377\372\377\377\377\372\377\377\377\364\377\377\377\357\377\377"
|
||||
"\377\356\377\377\377\347\377\377\377\335\377\377\377\333\377\377\377\325"
|
||||
"\377\377\377\333\377\377\377\344\377\377\377\351\377\377\377\350\377\377"
|
||||
"\377\351\377\377\377\355\377\377\377\362\377\377\377\365\377\377\377\367"
|
||||
"\377\377\377\372\377\377\377\372\377\377\377\367\377\377\377\361\377\377"
|
||||
"\377\365\377\377\377\366\377\377\377\362\377\377\377\356\377\377\377\363"
|
||||
"\377\377\377\372\377\377\377\371\377\377\377\372\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\376\377\377\377\371\377\377\377\364"
|
||||
"\377\377\377\347\377\377\377\322\377\377\377\307\377\377\377\303\377\377"
|
||||
"\377\312\377\377\377\331\377\377\377\333\377\377\377\340\377\377\377\345"
|
||||
"\377\377\377\347\377\377\377\350\377\377\377\353\377\377\377\357\377\377"
|
||||
"\377\363\377\377\377\365\377\377\377\361\377\377\377\366\377\377\377\364"
|
||||
"\377\377\377\363\377\377\377\364\377\377\377\367\377\377\377\370\377\377"
|
||||
"\377\365\377\377\377\365\377\377\377\365\377\377\377\367\377\377\377\374"
|
||||
"\377\377\377\373\377\377\377\374\377\377\377\374\377\377\377\366\377\377"
|
||||
"\377\355\377\377\377\350\377\377\377\337\377\377\377\327\377\377\377\324"
|
||||
"\377\377\377\317\377\377\377\333\377\377\377\347\377\377\377\351\377\377"
|
||||
"\377\351\377\377\377\356\377\377\377\364\377\377\377\366\377\377\377\370"
|
||||
"\377\377\377\372\377\377\377\372\377\377\377\370\377\377\377\366\377\377"
|
||||
"\377\364\377\377\377\365\377\377\377\367\377\377\377\366\377\377\377\361"
|
||||
"\377\377\377\361\377\377\377\366\377\377\377\367\377\377\377\370\377\377"
|
||||
"\377\373\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\373"
|
||||
"\377\377\377\362\377\377\377\350\377\377\377\333\377\377\377\317\377\377"
|
||||
"\377\307\377\377\377\305\377\377\377\322\377\377\377\335\377\377\377\343"
|
||||
"\377\377\377\351\377\377\377\354\377\377\377\354\377\377\377\356\377\377"
|
||||
"\377\363\377\377\377\367\377\377\377\372\377\377\377\372\377\377\377\374"
|
||||
"\377\377\377\371\377\377\377\370\377\377\377\371\377\377\377\371\377\377"
|
||||
"\377\372\377\377\377\371\377\377\377\367\377\377\377\365\377\377\377\366"
|
||||
"\377\377\377\372\377\377\377\373\377\377\377\376\377\377\377\376\377\377"
|
||||
"\377\364\377\377\377\355\377\377\377\347\377\377\377\337\377\377\377\335"
|
||||
"\377\377\377\331\377\377\377\324\377\377\377\334\377\377\377\343\377\377"
|
||||
"\377\346\377\377\377\354\377\377\377\360\377\377\377\364\377\377\377\366"
|
||||
"\377\377\377\370\377\377\377\373\377\377\377\370\377\377\377\364\377\377"
|
||||
"\377\365\377\377\377\367\377\377\377\365\377\377\377\366\377\377\377\365"
|
||||
"\377\377\377\362\377\377\377\361\377\377\377\360\377\377\377\361\377\377"
|
||||
"\377\366\377\377\377\373\377\377\377\377\377\377\377\377\377\377\377\373"
|
||||
"\377\377\377\364\377\377\377\353\377\377\377\350\377\377\377\342\377\377"
|
||||
"\377\325\377\377\377\320\377\377\377\314\377\377\377\315\377\377\377\332"
|
||||
"\377\377\377\342\377\377\377\352\377\377\377\362\377\377\377\363\377\377"
|
||||
"\377\362\377\377\377\365\377\377\377\370\377\377\377\372\377\377\377\376"
|
||||
"\377\377\377\372\377\377\377\372\377\377\377\367\377\377\377\371\377\377"
|
||||
"\377\374\377\377\377\373\377\377\377\373\377\377\377\372\377\377\377\366"
|
||||
"\377\377\377\367\377\377\377\370\377\377\377\367\377\377\377\373\377\377"
|
||||
"\377\373\377\377\377\365\377\377\377\354\377\377\377\347\377\377\377\345"
|
||||
"\377\377\377\343\377\377\377\336\377\377\377\336\377\377\377\342\377\377"
|
||||
"\377\344\377\377\377\353\377\377\377\361\377\377\377\361\377\377\377\361"
|
||||
"\377\377\377\364\377\377\377\366\377\377\377\366\377\377\377\364\377\377"
|
||||
"\377\364\377\377\377\366\377\377\377\370\377\377\377\367\377\377\377\366"
|
||||
"\377\377\377\365\377\377\377\365\377\377\377\365\377\377\377\362\377\377"
|
||||
"\377\356\377\377\377\363\377\377\377\374\377\377\377\374\377\377\377\372"
|
||||
"\377\377\377\364\377\377\377\353\377\377\377\347\377\377\377\354\377\377"
|
||||
"\377\351\377\377\377\341\377\377\377\337\377\377\377\332\377\377\377\324"
|
||||
"\377\377\377\327\377\377\377\340\377\377\377\351\377\377\377\363\377\377"
|
||||
"\377\371\377\377\377\370\377\377\377\367\377\377\377\366\377\377\377\366"
|
||||
"\377\377\377\371\377\377\377\372\377\377\377\374\377\377\377\367\377\377"
|
||||
"\377\370\377\377\377\373\377\377\377\374\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\374\377\377\377\373\377\377\377\367\377\377\377\363\377\377"
|
||||
"\377\366\377\377\377\365\377\377\377\360\377\377\377\347\377\377\377\344"
|
||||
"\377\377\377\350\377\377\377\344\377\377\377\336\377\377\377\340\377\377"
|
||||
"\377\347\377\377\377\350\377\377\377\357\377\377\377\362\377\377\377\363"
|
||||
"\377\377\377\365\377\377\377\362\377\377\377\361\377\377\377\361\377\377"
|
||||
"\377\362\377\377\377\365\377\377\377\367\377\377\377\367\377\377\377\370"
|
||||
"\377\377\377\367\377\377\377\370\377\377\377\367\377\377\377\365\377\377"
|
||||
"\377\367\377\377\377\365\377\377\377\363\377\377\377\370\377\377\377\367"
|
||||
"\377\377\377\365\377\377\377\361\377\377\377\351\377\377\377\347\377\377"
|
||||
"\377\353\377\377\377\355\377\377\377\354\377\377\377\355\377\377\377\347"
|
||||
"\377\377\377\343\377\377\377\344\377\377\377\350\377\377\377\355\377\377"
|
||||
"\377\364\377\377\377\372\377\377\377\372\377\377\377\371\377\377\377\370"
|
||||
"\377\377\377\370\377\377\377\367\377\377\377\372\377\377\377\370\377\377"
|
||||
"\377\364\377\377\377\362\377\377\377\370\377\377\377\374\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\376\377\377\377\370\377\377\377\363\377\377"
|
||||
"\377\363\377\377\377\366\377\377\377\363\377\377\377\353\377\377\377\345"
|
||||
"\377\377\377\342\377\377\377\346\377\377\377\350\377\377\377\345\377\377"
|
||||
"\377\344\377\377\377\350\377\377\377\352\377\377\377\361\377\377\377\364"
|
||||
"\377\377\377\364\377\377\377\365\377\377\377\357\377\377\377\351\377\377"
|
||||
"\377\355\377\377\377\364\377\377\377\367\377\377\377\366\377\377\377\367"
|
||||
"\377\377\377\371\377\377\377\370\377\377\377\371\377\377\377\370\377\377"
|
||||
"\377\366\377\377\377\371\377\377\377\372\377\377\377\365\377\377\377\365"
|
||||
"\377\377\377\364\377\377\377\357\377\377\377\356\377\377\377\353\377\377"
|
||||
"\377\347\377\377\377\352\377\377\377\360\377\377\377\364\377\377\377\365"
|
||||
"\377\377\377\363\377\377\377\363\377\377\377\360\377\377\377\357\377\377"
|
||||
"\377\362\377\377\377\371\377\377\377\374\377\377\377\374\377\377\377\374"
|
||||
"\377\377\377\372\377\377\377\371\377\377\377\371\377\377\377\370\377\377"
|
||||
"\377\361\377\377\377\356\377\377\377\354\377\377\377\365\377\377\377\372"
|
||||
"\377\377\377\374\377\377\377\377\377\377\377\371\377\377\377\361\377\377"
|
||||
"\377\361\377\377\377\361\377\377\377\362\377\377\377\364\377\377\377\363"
|
||||
"\377\377\377\355\377\377\377\350\377\377\377\346\377\377\377\350\377\377"
|
||||
"\377\355\377\377\377\355\377\377\377\355\377\377\377\356\377\377\377\361"
|
||||
"\377\377\377\360\377\377\377\355\377\377\377\353\377\377\377\351\377\377"
|
||||
"\377\345\377\377\377\347\377\377\377\357\377\377\377\365\377\377\377\367"
|
||||
"\377\377\377\366\377\377\377\371\377\377\377\371\377\377\377\374\377\377"
|
||||
"\377\376\377\377\377\373\377\377\377\373\377\377\377\373\377\377\377\371"
|
||||
"\377\377\377\372\377\377\377\370\377\377\377\361\377\377\377\356\377\377"
|
||||
"\377\353\377\377\377\353\377\377\377\361\377\377\377\365\377\377\377\370"
|
||||
"\377\377\377\371\377\377\377\372\377\377\377\374\377\377\377\367\377\377"
|
||||
"\377\363\377\377\377\365\377\377\377\373\377\377\377\373\377\377\377\375"
|
||||
"\377\377\377\375\377\377\377\374\377\377\377\374\377\377\377\374\377\377"
|
||||
"\377\370\377\377\377\355\377\377\377\347\377\377\377\352\377\377\377\363"
|
||||
"\377\377\377\365\377\377\377\371\377\377\377\372\377\377\377\363\377\377"
|
||||
"\377\355\377\377\377\357\377\377\377\361\377\377\377\362\377\377\377\370"
|
||||
"\377\377\377\375\377\377\377\366\377\377\377\356\377\377\377\351\377\377"
|
||||
"\377\347\377\377\377\356\377\377\377\361\377\377\377\356\377\377\377\355"
|
||||
"\377\377\377\354\377\377\377\352\377\377\377\351\377\377\377\343\377\377"
|
||||
"\377\342\377\377\377\342\377\377\377\345\377\377\377\354\377\377\377\364"
|
||||
"\377\377\377\367\377\377\377\366\377\377\377\370\377\377\377\372\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\375"
|
||||
"\377\377\377\375\377\377\377\377\377\377\377\374\377\377\377\366\377\377"
|
||||
"\377\360\377\377\377\355\377\377\377\360\377\377\377\365\377\377\377\367"
|
||||
"\377\377\377\372\377\377\377\374\377\377\377\375\377\377\377\375\377\377"
|
||||
"\377\374\377\377\377\372\377\377\377\371\377\377\377\371\377\377\377\373"
|
||||
"\377\377\377\375\377\377\377\374\377\377\377\375\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\366\377\377\377\353\377\377\377\346\377\377\377\351"
|
||||
"\377\377\377\357\377\377\377\361\377\377\377\367\377\377\377\370\377\377"
|
||||
"\377\363\377\377\377\356\377\377\377\357\377\377\377\365\377\377\377\367"
|
||||
"\377\377\377\374\377\377\377\377\377\377\377\374\377\377\377\366\377\377"
|
||||
"\377\361\377\377\377\356\377\377\377\361\377\377\377\360\377\377\377\352"
|
||||
"\377\377\377\353\377\377\377\352\377\377\377\352\377\377\377\354\377\377"
|
||||
"\377\343\377\377\377\337\377\377\377\337\377\377\377\346\377\377\377\356"
|
||||
"\377\377\377\364\377\377\377\366\377\377\377\367\377\377\377\371\377\377"
|
||||
"\377\372\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\377\377"
|
||||
"\377\366\377\377\377\363\377\377\377\364\377\377\377\365\377\377\377\366"
|
||||
"\377\377\377\370\377\377\377\375\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\372\377\377\377\366"
|
||||
"\377\377\377\371\377\377\377\375\377\377\377\374\377\377\377\373\377\377"
|
||||
"\377\375\377\377\377\375\377\377\377\361\377\377\377\345\377\377\377\343"
|
||||
"\377\377\377\350\377\377\377\355\377\377\377\357\377\377\377\363\377\377"
|
||||
"\377\366\377\377\377\366\377\377\377\363\377\377\377\364\377\377\377\366"
|
||||
"\377\377\377\370\377\377\377\374\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\375\377\377\377\370\377\377\377\365\377\377\377\365\377\377\377\360"
|
||||
"\377\377\377\354\377\377\377\356\377\377\377\356\377\377\377\354\377\377"
|
||||
"\377\354\377\377\377\347\377\377\377\340\377\377\377\337\377\377\377\347"
|
||||
"\377\377\377\354\377\377\377\361\377\377\377\362\377\377\377\361\377\377"
|
||||
"\377\365\377\377\377\372\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\370\377\377\377\367\377\377\377\367\377\377\377\366"
|
||||
"\377\377\377\371\377\377\377\374\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\374"
|
||||
"\377\377\377\367\377\377\377\365\377\377\377\371\377\377\377\373\377\377"
|
||||
"\377\372\377\377\377\372\377\377\377\370\377\377\377\356\377\377\377\340"
|
||||
"\377\377\377\340\377\377\377\344\377\377\377\350\377\377\377\355\377\377"
|
||||
"\377\360\377\377\377\361\377\377\377\363\377\377\377\364\377\377\377\365"
|
||||
"\377\377\377\370\377\377\377\372\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\375\377\377\377\370\377\377\377\367\377\377\377\366"
|
||||
"\377\377\377\361\377\377\377\354\377\377\377\354\377\377\377\356\377\377"
|
||||
"\377\353\377\377\377\347\377\377\377\346\377\377\377\342\377\377\377\345"
|
||||
"\377\377\377\352\377\377\377\351\377\377\377\354\377\377\377\355\377\377"
|
||||
"\377\354\377\377\377\364\377\377\377\374\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\374\377\377\377\374\377\377\377\367"
|
||||
"\377\377\377\365\377\377\377\371\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\375\377\377\377\372\377\377\377\366\377\377\377\365\377\377"
|
||||
"\377\366\377\377\377\370\377\377\377\367\377\377\377\365\377\377\377\356"
|
||||
"\377\377\377\340\377\377\377\335\377\377\377\340\377\377\377\340\377\377"
|
||||
"\377\346\377\377\377\352\377\377\377\350\377\377\377\354\377\377\377\361"
|
||||
"\377\377\377\364\377\377\377\372\377\377\377\375\377\377\377\376\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\374\377\377\377\372"
|
||||
"\377\377\377\372\377\377\377\363\377\377\377\353\377\377\377\354\377\377"
|
||||
"\377\357\377\377\377\352\377\377\377\346\377\377\377\346\377\377\377\345"
|
||||
"\377\377\377\346\377\377\377\347\377\377\377\351\377\377\377\351\377\377"
|
||||
"\377\347\377\377\377\351\377\377\377\363\377\377\377\372\377\377\377\374"
|
||||
"\377\377\377\372\377\377\377\372\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\373\377\377\377\370\377\377\377\371\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\375\377\377\377\372\377\377\377\370\377\377\377\366\377\377"
|
||||
"\377\363\377\377\377\364\377\377\377\366\377\377\377\367\377\377\377\364"
|
||||
"\377\377\377\355\377\377\377\341\377\377\377\334\377\377\377\335\377\377"
|
||||
"\377\333\377\377\377\336\377\377\377\337\377\377\377\335\377\377\377\346"
|
||||
"\377\377\377\360\377\377\377\366\377\377\377\373\377\377\377\374\377\377"
|
||||
"\377\374\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\376\377\377\377\364\377\377\377\353\377\377"
|
||||
"\377\355\377\377\377\360\377\377\377\351\377\377\377\347\377\377\377\350"
|
||||
"\377\377\377\351\377\377\377\350\377\377\377\344\377\377\377\347\377\377"
|
||||
"\377\352\377\377\377\350\377\377\377\350\377\377\377\354\377\377\377\360"
|
||||
"\377\377\377\361\377\377\377\356\377\377\377\364\377\377\377\374\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\375\377\377\377\375\377\377\377\375\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\374\377\377\377\372\377\377\377\371\377\377\377\366\377\377"
|
||||
"\377\362\377\377\377\363\377\377\377\365\377\377\377\370\377\377\377\370"
|
||||
"\377\377\377\363\377\377\377\354\377\377\377\343\377\377\377\335\377\377"
|
||||
"\377\332\377\377\377\330\377\377\377\327\377\377\377\327\377\377\377\332"
|
||||
"\377\377\377\344\377\377\377\355\377\377\377\367\377\377\377\373\377\377"
|
||||
"\377\371\377\377\377\373\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\376\377\377\377\371\377\377\377\360\377\377"
|
||||
"\377\350\377\377\377\347\377\377\377\353\377\377\377\347\377\377\377\345"
|
||||
"\377\377\377\352\377\377\377\356\377\377\377\357\377\377\377\353\377\377"
|
||||
"\377\350\377\377\377\353\377\377\377\353\377\377\377\346\377\377\377\345"
|
||||
"\377\377\377\350\377\377\377\352\377\377\377\351\377\377\377\357\377\377"
|
||||
"\377\364\377\377\377\374\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\376\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\376\377\377\377\374"
|
||||
"\377\377\377\374\377\377\377\373\377\377\377\371\377\377\377\365\377\377"
|
||||
"\377\361\377\377\377\355\377\377\377\362\377\377\377\365\377\377\377\366"
|
||||
"\377\377\377\367\377\377\377\364\377\377\377\354\377\377\377\343\377\377"
|
||||
"\377\332\377\377\377\325\377\377\377\326\377\377\377\325\377\377\377\325"
|
||||
"\377\377\377\333\377\377\377\342\377\377\377\350\377\377\377\366\377\377"
|
||||
"\377\374\377\377\377\372\377\377\377\372\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\372\377\377\377\366\377\377\377\357\377\377"
|
||||
"\377\354\377\377\377\352\377\377\377\350\377\377\377\352\377\377\377\350"
|
||||
"\377\377\377\350\377\377\377\361\377\377\377\365\377\377\377\364\377\377"
|
||||
"\377\364\377\377\377\355\377\377\377\352\377\377\377\350\377\377\377\345"
|
||||
"\377\377\377\344\377\377\377\344\377\377\377\345\377\377\377\346\377\377"
|
||||
"\377\350\377\377\377\354\377\377\377\370\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\375\377\377\377\375\377\377\377\377\377\377\377\377\377\377\377\375"
|
||||
"\377\377\377\372\377\377\377\371\377\377\377\370\377\377\377\367\377\377"
|
||||
"\377\363\377\377\377\356\377\377\377\354\377\377\377\360\377\377\377\357"
|
||||
"\377\377\377\357\377\377\377\362\377\377\377\363\377\377\377\344\377\377"
|
||||
"\377\333\377\377\377\330\377\377\377\330\377\377\377\325\377\377\377\327"
|
||||
"\377\377\377\335\377\377\377\337\377\377\377\346\377\377\377\356\377\377"
|
||||
"\377\366\377\377\377\374\377\377\377\372\377\377\377\367\377\377\377\372"
|
||||
"\377\377\377\375\377\377\377\372\377\377\377\363\377\377\377\352\377\377"
|
||||
"\377\350\377\377\377\353\377\377\377\353\377\377\377\352\377\377\377\354"
|
||||
"\377\377\377\354\377\377\377\360\377\377\377\370\377\377\377\372\377\377"
|
||||
"\377\372\377\377\377\367\377\377\377\360\377\377\377\355\377\377\377\347"
|
||||
"\377\377\377\342\377\377\377\341\377\377\377\340\377\377\377\340\377\377"
|
||||
"\377\335\377\377\377\336\377\377\377\344\377\377\377\361\377\377\377\374"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\374\377\377"
|
||||
"\377\372\377\377\377\372\377\377\377\372\377\377\377\374\377\377\377\377"
|
||||
"\377\377\377\374\377\377\377\366\377\377\377\365\377\377\377\366\377\377"
|
||||
"\377\367\377\377\377\363\377\377\377\356\377\377\377\355\377\377\377\352"
|
||||
"\377\377\377\347\377\377\377\351\377\377\377\352\377\377\377\352\377\377"
|
||||
"\377\341\377\377\377\325\377\377\377\325\377\377\377\333\377\377\377\327"
|
||||
"\377\377\377\325\377\377\377\335\377\377\377\345\377\377\377\360\377\377"
|
||||
"\377\370\377\377\377\374\377\377\377\375\377\377\377\370\377\377\377\364"
|
||||
"\377\377\377\366\377\377\377\365\377\377\377\363\377\377\377\360\377\377"
|
||||
"\377\346\377\377\377\345\377\377\377\347\377\377\377\352\377\377\377\354"
|
||||
"\377\377\377\355\377\377\377\357\377\377\377\365\377\377\377\373\377\377"
|
||||
"\377\373\377\377\377\375\377\377\377\370\377\377\377\362\377\377\377\362"
|
||||
"\377\377\377\354\377\377\377\342\377\377\377\340\377\377\377\332\377\377"
|
||||
"\377\325\377\377\377\325\377\377\377\330\377\377\377\337\377\377\377\352"
|
||||
"\377\377\377\365\377\377\377\375\377\377\377\377\377\377\377\376\377\377"
|
||||
"\377\372\377\377\377\367\377\377\377\367\377\377\377\365\377\377\377\366"
|
||||
"\377\377\377\370\377\377\377\370\377\377\377\362\377\377\377\360\377\377"
|
||||
"\377\362\377\377\377\363\377\377\377\355\377\377\377\347\377\377\377\347"
|
||||
"\377\377\377\344\377\377\377\347\377\377\377\352\377\377\377\350\377\377"
|
||||
"\377\346\377\377\377\343\377\377\377\332\377\377\377\323\377\377\377\325"
|
||||
"\377\377\377\327\377\377\377\332\377\377\377\340\377\377\377\354\377\377"
|
||||
"\377\371\377\377\377\375\377\377\377\377\377\377\377\376\377\377\377\370"
|
||||
"\377\377\377\364\377\377\377\363\377\377\377\360\377\377\377\356\377\377"
|
||||
"\377\352\377\377\377\345\377\377\377\350\377\377\377\350\377\377\377\354"
|
||||
"\377\377\377\357\377\377\377\360\377\377\377\360\377\377\377\366\377\377"
|
||||
"\377\374\377\377\377\376\377\377\377\377\377\377\377\370\377\377\377\365"
|
||||
"\377\377\377\365\377\377\377\362\377\377\377\355\377\377\377\343\377\377"
|
||||
"\377\321\377\377\377\307\377\377\377\314\377\377\377\325\377\377\377\332"
|
||||
"\377\377\377\343\377\377\377\356\377\377\377\370\377\377\377\375\377\377"
|
||||
"\377\375\377\377\377\371\377\377\377\364\377\377\377\362\377\377\377\360"
|
||||
"\377\377\377\362\377\377\377\363\377\377\377\362\377\377\377\357\377\377"
|
||||
"\377\354\377\377\377\351\377\377\377\352\377\377\377\347\377\377\377\340"
|
||||
"\377\377\377\337\377\377\377\343\377\377\377\350\377\377\377\345\377\377"
|
||||
"\377\343\377\377\377\344\377\377\377\337\377\377\377\337\377\377\377\333"
|
||||
"\377\377\377\327\377\377\377\333\377\377\377\344\377\377\377\350\377\377"
|
||||
"\377\361\377\377\377\372\377\377\377\374\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\371\377\377\377\365\377\377\377\361\377\377\377\353\377\377"
|
||||
"\377\353\377\377\377\347\377\377\377\347\377\377\377\355\377\377\377\353"
|
||||
"\377\377\377\353\377\377\377\354\377\377\377\355\377\377\377\357\377\377"
|
||||
"\377\365\377\377\377\372\377\377\377\376\377\377\377\376\377\377\377\370"
|
||||
"\377\377\377\370\377\377\377\367\377\377\377\367\377\377\377\365\377\377"
|
||||
"\377\346\377\377\377\321\377\377\377\312\377\377\377\311\377\377\377\312"
|
||||
"\377\377\377\325\377\377\377\340\377\377\377\353\377\377\377\366\377\377"
|
||||
"\377\371\377\377\377\370\377\377\377\366\377\377\377\363\377\377\377\363"
|
||||
"\377\377\377\362\377\377\377\362\377\377\377\355\377\377\377\350\377\377"
|
||||
"\377\347\377\377\377\350\377\377\377\345\377\377\377\341\377\377\377\334"
|
||||
"\377\377\377\333\377\377\377\333\377\377\377\336\377\377\377\337\377\377"
|
||||
"\377\332\377\377\377\337\377\377\377\340\377\377\377\336\377\377\377\343"
|
||||
"\377\377\377\347\377\377\377\341\377\377\377\340\377\377\377\350\377\377"
|
||||
"\377\355\377\377\377\366\377\377\377\372\377\377\377\375\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\372\377\377\377\367\377\377\377\361\377\377"
|
||||
"\377\355\377\377\377\354\377\377\377\350\377\377\377\350\377\377\377\355"
|
||||
"\377\377\377\353\377\377\377\351\377\377\377\351\377\377\377\351\377\377"
|
||||
"\377\356\377\377\377\362\377\377\377\371\377\377\377\376\377\377\377\375"
|
||||
"\377\377\377\367\377\377\377\370\377\377\377\371\377\377\377\372\377\377"
|
||||
"\377\367\377\377\377\353\377\377\377\334\377\377\377\325\377\377\377\317"
|
||||
"\377\377\377\314\377\377\377\325\377\377\377\337\377\377\377\352\377\377"
|
||||
"\377\363\377\377\377\367\377\377\377\365\377\377\377\365\377\377\377\366"
|
||||
"\377\377\377\365\377\377\377\362\377\377\377\356\377\377\377\351\377\377"
|
||||
"\377\344\377\377\377\343\377\377\377\346\377\377\377\346\377\377\377\334"
|
||||
"\377\377\377\325\377\377\377\331\377\377\377\332\377\377\377\332\377\377"
|
||||
"\377\330\377\377\377\322\377\377\377\330\377\377\377\335\377\377\377\336"
|
||||
"\377\377\377\341\377\377\377\347\377\377\377\346\377\377\377\351\377\377"
|
||||
"\377\357\377\377\377\365\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\371\377\377\377\366\377\377"
|
||||
"\377\357\377\377\377\355\377\377\377\353\377\377\377\351\377\377\377\353"
|
||||
"\377\377\377\355\377\377\377\353\377\377\377\351\377\377\377\353\377\377"
|
||||
"\377\352\377\377\377\360\377\377\377\363\377\377\377\370\377\377\377\377"
|
||||
"\377\377\377\374\377\377\377\366\377\377\377\367\377\377\377\370\377\377"
|
||||
"\377\371\377\377\377\370\377\377\377\363\377\377\377\351\377\377\377\341"
|
||||
"\377\377\377\332\377\377\377\324\377\377\377\330\377\377\377\337\377\377"
|
||||
"\377\353\377\377\377\363\377\377\377\367\377\377\377\364\377\377\377\361"
|
||||
"\377\377\377\361\377\377\377\361\377\377\377\356\377\377\377\350\377\377"
|
||||
"\377\346\377\377\377\346\377\377\377\347\377\377\377\347\377\377\377\347"
|
||||
"\377\377\377\340\377\377\377\337\377\377\377\342\377\377\377\337\377\377"
|
||||
"\377\337\377\377\377\334\377\377\377\324\377\377\377\327\377\377\377\337"
|
||||
"\377\377\377\344\377\377\377\344\377\377\377\350\377\377\377\353\377\377"
|
||||
"\377\357\377\377\377\364\377\377\377\372\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\373\377\377"
|
||||
"\377\370\377\377\377\362\377\377\377\356\377\377\377\352\377\377\377\353"
|
||||
"\377\377\377\357\377\377\377\361\377\377\377\361\377\377\377\355\377\377"
|
||||
"\377\360\377\377\377\362\377\377\377\367\377\377\377\371\377\377\377\371"
|
||||
"\377\377\377\371\377\377\377\370\377\377\377\366\377\377\377\370\377\377"
|
||||
"\377\370\377\377\377\370\377\377\377\371\377\377\377\371\377\377\377\362"
|
||||
"\377\377\377\354\377\377\377\343\377\377\377\327\377\377\377\331\377\377"
|
||||
"\377\337\377\377\377\354\377\377\377\364\377\377\377\365\377\377\377\362"
|
||||
"\377\377\377\360\377\377\377\354\377\377\377\356\377\377\377\355\377\377"
|
||||
"\377\350\377\377\377\344\377\377\377\350\377\377\377\353\377\377\377\350"
|
||||
"\377\377\377\350\377\377\377\351\377\377\377\347\377\377\377\347\377\377"
|
||||
"\377\345\377\377\377\340\377\377\377\337\377\377\377\334\377\377\377\334"
|
||||
"\377\377\377\342\377\377\377\352\377\377\377\353\377\377\377\361\377\377"
|
||||
"\377\364\377\377\377\364\377\377\377\370\377\377\377\372\377\377\377\376"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\375\377\377\377\370\377\377\377\364\377\377\377\360\377\377\377\356"
|
||||
"\377\377\377\356\377\377\377\361\377\377\377\365\377\377\377\370\377\377"
|
||||
"\377\364\377\377\377\370\377\377\377\371\377\377\377\373\377\377\377\377"
|
||||
"\377\377\377\373\377\377\377\365\377\377\377\365\377\377\377\365\377\377"
|
||||
"\377\365\377\377\377\370\377\377\377\374\377\377\377\373\377\377\377\371"
|
||||
"\377\377\377\364\377\377\377\356\377\377\377\352\377\377\377\343\377\377"
|
||||
"\377\337\377\377\377\337\377\377\377\347\377\377\377\353\377\377\377\356"
|
||||
"\377\377\377\360\377\377\377\362\377\377\377\361\377\377\377\356\377\377"
|
||||
"\377\354\377\377\377\352\377\377\377\352\377\377\377\353\377\377\377\355"
|
||||
"\377\377\377\352\377\377\377\357\377\377\377\362\377\377\377\355\377\377"
|
||||
"\377\352\377\377\377\351\377\377\377\344\377\377\377\346\377\377\377\347"
|
||||
"\377\377\377\345\377\377\377\350\377\377\377\361\377\377\377\360\377\377"
|
||||
"\377\365\377\377\377\370\377\377\377\371\377\377\377\373\377\377\377\372"
|
||||
"\377\377\377\374\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\373\377\377\377\370\377\377\377\365\377\377\377\364"
|
||||
"\377\377\377\363\377\377\377\362\377\377\377\363\377\377\377\370\377\377"
|
||||
"\377\374\377\377\377\375\377\377\377\377\377\377\377\375\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\375\377\377\377\370\377\377\377\370\377\377"
|
||||
"\377\366\377\377\377\363\377\377\377\370\377\377\377\375\377\377\377\372"
|
||||
"\377\377\377\365\377\377\377\361\377\377\377\352\377\377\377\352\377\377"
|
||||
"\377\350\377\377\377\340\377\377\377\336\377\377\377\342\377\377\377\343"
|
||||
"\377\377\377\353\377\377\377\360\377\377\377\362\377\377\377\364\377\377"
|
||||
"\377\364\377\377\377\361\377\377\377\356\377\377\377\357\377\377\377\361"
|
||||
"\377\377\377\356\377\377\377\354\377\377\377\364\377\377\377\370\377\377"
|
||||
"\377\362\377\377\377\357\377\377\377\356\377\377\377\353\377\377\377\354"
|
||||
"\377\377\377\356\377\377\377\362\377\377\377\363\377\377\377\366\377\377"
|
||||
"\377\362\377\377\377\367\377\377\377\367\377\377\377\367\377\377\377\371"
|
||||
"\377\377\377\367\377\377\377\371\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\376\377\377\377\372\377\377\377\370\377\377\377\371"
|
||||
"\377\377\377\370\377\377\377\366\377\377\377\367\377\377\377\370\377\377"
|
||||
"\377\374\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\375"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\374\377\377"
|
||||
"\377\371\377\377\377\367\377\377\377\363\377\377\377\363\377\377\377\366"
|
||||
"\377\377\377\363\377\377\377\361\377\377\377\356\377\377\377\346\377\377"
|
||||
"\377\345\377\377\377\344\377\377\377\334\377\377\377\334\377\377\377\342"
|
||||
"\377\377\377\347\377\377\377\361\377\377\377\365\377\377\377\366\377\377"
|
||||
"\377\373\377\377\377\373\377\377\377\366\377\377\377\361\377\377\377\364"
|
||||
"\377\377\377\370\377\377\377\364\377\377\377\357\377\377\377\365\377\377"
|
||||
"\377\372\377\377\377\365\377\377\377\361\377\377\377\362\377\377\377\363"
|
||||
"\377\377\377\364\377\377\377\362\377\377\377\365\377\377\377\370\377\377"
|
||||
"\377\374\377\377\377\371\377\377\377\374\377\377\377\375\377\377\377\372"
|
||||
"\377\377\377\371\377\377\377\373\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\376\377\377\377\372\377\377\377\371"
|
||||
"\377\377\377\374\377\377\377\372\377\377\377\367\377\377\377\371\377\377"
|
||||
"\377\375\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\375\377\377\377\370\377\377\377\364\377\377\377\361"
|
||||
"\377\377\377\356\377\377\377\355\377\377\377\355\377\377\377\350\377\377"
|
||||
"\377\342\377\377\377\342\377\377\377\337\377\377\377\331\377\377\377\331"
|
||||
"\377\377\377\342\377\377\377\353\377\377\377\365\377\377\377\371\377\377"
|
||||
"\377\374\377\377\377\377\377\377\377\373\377\377\377\365\377\377\377\364"
|
||||
"\377\377\377\370\377\377\377\372\377\377\377\373\377\377\377\370\377\377"
|
||||
"\377\370\377\377\377\372\377\377\377\371\377\377\377\371\377\377\377\371"
|
||||
"\377\377\377\374\377\377\377\377\377\377\377\372\377\377\377\370\377\377"
|
||||
"\377\374\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\375\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\374"
|
||||
"\377\377\377\371\377\377\377\372\377\377\377\373\377\377\377\370\377\377"
|
||||
"\377\370\377\377\377\372\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\372\377\377\377\365"
|
||||
"\377\377\377\365\377\377\377\361\377\377\377\354\377\377\377\350\377\377"
|
||||
"\377\342\377\377\377\337\377\377\377\343\377\377\377\335\377\377\377\330"
|
||||
"\377\377\377\330\377\377\377\340\377\377\377\353\377\377\377\365\377\377"
|
||||
"\377\373\377\377\377\373\377\377\377\373\377\377\377\372\377\377\377\370"
|
||||
"\377\377\377\371\377\377\377\374\377\377\377\374\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\376\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\373\377\377\377\371\377\377\377\366\377\377"
|
||||
"\377\366\377\377\377\365\377\377\377\367\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\373"
|
||||
"\377\377\377\371\377\377\377\370\377\377\377\365\377\377\377\355\377\377"
|
||||
"\377\347\377\377\377\347\377\377\377\347\377\377\377\350\377\377\377\346"
|
||||
"\377\377\377\341\377\377\377\336\377\377\377\345\377\377\377\357\377\377"
|
||||
"\377\367\377\377\377\371\377\377\377\371\377\377\377\371\377\377\377\370"
|
||||
"\377\377\377\372\377\377\377\375\377\377\377\376\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\374\377\377\377\371\377\377"
|
||||
"\377\362\377\377\377\362\377\377\377\361\377\377\377\365\377\377\377\376"
|
||||
"\377\377\377\377\377\377\377\375\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\376\377\377\377\374\377\377\377\374\377\377\377\370\377\377"
|
||||
"\377\364\377\377\377\361\377\377\377\362\377\377\377\361\377\377\377\356"
|
||||
"\377\377\377\355\377\377\377\352\377\377\377\346\377\377\377\350\377\377"
|
||||
"\377\360\377\377\377\366\377\377\377\367\377\377\377\366\377\377\377\370"
|
||||
"\377\377\377\372\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\372\377\377"
|
||||
"\377\367\377\377\377\362\377\377\377\361\377\377\377\361\377\377\377\361"
|
||||
"\377\377\377\366\377\377\377\371\377\377\377\373\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\375\377\377\377\375\377\377"
|
||||
"\377\374\377\377\377\374\377\377\377\373\377\377\377\373\377\377\377\372"
|
||||
"\377\377\377\367\377\377\377\363\377\377\377\362\377\377\377\362\377\377"
|
||||
"\377\363\377\377\377\364\377\377\377\367\377\377\377\371\377\377\377\367"
|
||||
"\377\377\377\372\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\372\377\377\377\372\377\377\377\365\377\377\377\360\377\377\377\362"
|
||||
"\377\377\377\361\377\377\377\361\377\377\377\366\377\377\377\370\377\377"
|
||||
"\377\372\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\376\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\375\377\377\377\372\377\377\377\367\377\377"
|
||||
"\377\370\377\377\377\372\377\377\377\373\377\377\377\372\377\377\377\372"
|
||||
"\377\377\377\372\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\372\377\377\377\363"
|
||||
"\377\377\377\362\377\377\377\363\377\377\377\364\377\377\377\367\377\377"
|
||||
"\377\363\377\377\377\361\377\377\377\372\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\376\377\377\377\374\377\377"
|
||||
"\377\372\377\377\377\372\377\377\377\375\377\377\377\377\377\377\377\375"
|
||||
"\377\377\377\373\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\375\377\377\377\376"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\371\377\377\377\364\377\377\377\367\377\377\377\366\377\377"
|
||||
"\377\362\377\377\377\360\377\377\377\361\377\377\377\367\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\375\377\377\377\375\377\377\377\376\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\374\377\377\377\374\377\377\377\374\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\376\377\377\377\376"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\375\377\377\377\372\377\377\377\372\377\377"
|
||||
"\377\364\377\377\377\355\377\377\377\355\377\377\377\363\377\377\377\372"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\375\377\377"
|
||||
"\377\374\377\377\377\374\377\377\377\373\377\377\377\372\377\377\377\374"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\375\377\377\377\375\377\377\377\376\377\377\377\376"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\375\377\377"
|
||||
"\377\367\377\377\377\363\377\377\377\361\377\377\377\360\377\377\377\365"
|
||||
"\377\377\377\372\377\377\377\377\377\377\377\377\377\377\377\376\377\377"
|
||||
"\377\371\377\377\377\366\377\377\377\367\377\377\377\364\377\377\377\364"
|
||||
"\377\377\377\371\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\376\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\375\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\373\377\377\377\361\377\377\377\361\377\377\377\365\377\377\377\366"
|
||||
"\377\377\377\370\377\377\377\372\377\377\377\373\377\377\377\375\377\377"
|
||||
"\377\374\377\377\377\372\377\377\377\370\377\377\377\366\377\377\377\364"
|
||||
"\377\377\377\364\377\377\377\366\377\377\377\375\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\374\377\377"
|
||||
"\377\370\377\377\377\376\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\371\377\377\377\364\377\377\377\362\377\377\377\366"
|
||||
"\377\377\377\370\377\377\377\370\377\377\377\370\377\377\377\371\377\377"
|
||||
"\377\372\377\377\377\371\377\377\377\371\377\377\377\366\377\377\377\364"
|
||||
"\377\377\377\364\377\377\377\366\377\377\377\370\377\377\377\373\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\375\377\377\377\373\377\377"
|
||||
"\377\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\376\377\377\377\374\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\374\377\377"
|
||||
"\377\372\377\377\377\373\377\377\377\377\377\377\377\377\377\377\377\376"
|
||||
"\377\377\377\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\373\377\377\377\367\377\377\377\366\377\377\377\370"
|
||||
"\377\377\377\373\377\377\377\372\377\377\377\365\377\377\377\364\377\377"
|
||||
"\377\364\377\377\377\370\377\377\377\371\377\377\377\371\377\377\377\370"
|
||||
"\377\377\377\366\377\377\377\363\377\377\377\366\377\377\377\373\377\377"
|
||||
"\377\375\377\377\377\375\377\377\377\376\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\367\377\377\377\361\377\377"
|
||||
"\377\362\377\377\377\366\377\377\377\366\377\377\377\372\377\377\377\376"
|
||||
"\377\377\377\375\377\377\377\374\377\377\377\375\377\377\377\375\377\377"
|
||||
"\377\374\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\372\377\377\377\375\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\374\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\375\377\377\377\372\377\377\377\366\377\377\377\367"
|
||||
"\377\377\377\371\377\377\377\373\377\377\377\374\377\377\377\371\377\377"
|
||||
"\377\364\377\377\377\361\377\377\377\362\377\377\377\361\377\377\377\363"
|
||||
"\377\377\377\367\377\377\377\370\377\377\377\365\377\377\377\365\377\377"
|
||||
"\377\372\377\377\377\376\377\377\377\375\377\377\377\374\377\377\377\374"
|
||||
"\377\377\377\375\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\370\377\377\377\356\377\377"
|
||||
"\377\353\377\377\377\351\377\377\377\347\377\377\377\351\377\377\377\362"
|
||||
"\377\377\377\372\377\377\377\370\377\377\377\364\377\377\377\370\377\377"
|
||||
"\377\375\377\377\377\372\377\377\377\372\377\377\377\376\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\376\377\377\377\375\377\377"
|
||||
"\377\372\377\377\377\370\377\377\377\370\377\377\377\372\377\377\377\370"
|
||||
"\377\377\377\365\377\377\377\366\377\377\377\370\377\377\377\374\377\377"
|
||||
"\377\374\377\377\377\371\377\377\377\363\377\377\377\356\377\377\377\351"
|
||||
"\377\377\377\354\377\377\377\360\377\377\377\362\377\377\377\363\377\377"
|
||||
"\377\364\377\377\377\371\377\377\377\374\377\377\377\374\377\377\377\373"
|
||||
"\377\377\377\372\377\377\377\371\377\377\377\376\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\364\377\377"
|
||||
"\377\353\377\377\377\347\377\377\377\343\377\377\377\335\377\377\377\336"
|
||||
"\377\377\377\351\377\377\377\361\377\377\377\361\377\377\377\361\377\377"
|
||||
"\377\363\377\377\377\370\377\377\377\370\377\377\377\366\377\377\377\367"
|
||||
"\377\377\377\374",
|
||||
};
|
||||
|
||||
@@ -1,206 +0,0 @@
|
||||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2014 Mario Luzeiro <mrluzeiro@gmail.com>
|
||||
* Copyright (C) 1992-2014 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* 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 General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, you may find one here:
|
||||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
* or you may search the http://www.gnu.org website for the version 2 license,
|
||||
* or you may write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file vrml_aux.cpp
|
||||
*/
|
||||
|
||||
#include "vrml_aux.h"
|
||||
|
||||
char SkipGetChar ( FILE* File )
|
||||
{
|
||||
char c;
|
||||
bool re_parse;
|
||||
|
||||
if( (c = fgetc( File )) == EOF )
|
||||
{
|
||||
//DBG( printf( "EOF\n" ) );
|
||||
return EOF;
|
||||
}
|
||||
|
||||
//DBG( printf( "c %c 0x%02X\n", c, c ) );
|
||||
|
||||
do
|
||||
{
|
||||
re_parse = false;
|
||||
|
||||
if ((c == ' ') || (c == '\t') || (c == '{') || (c == '['))
|
||||
{
|
||||
//DBG( printf( "Skipping space \\t or { or [\n" ) );
|
||||
do
|
||||
{
|
||||
if( (c = fgetc( File )) == EOF )
|
||||
{
|
||||
//DBG( printf( "EOF\n" ) );
|
||||
|
||||
return EOF;
|
||||
}
|
||||
}
|
||||
while((c == ' ') || (c == '\t') || (c == '{') || (c == '['));
|
||||
}
|
||||
|
||||
if ((c == '#') || (c == '\n') || (c == '\r') || (c == 0) || (c == ','))
|
||||
{
|
||||
if (c == '#')
|
||||
{
|
||||
//DBG( printf( "Skipping # \\n or \\r or 0, 0x%02X\n", c ) );
|
||||
do
|
||||
{
|
||||
if( (c = fgetc( File )) == EOF )
|
||||
{
|
||||
//DBG( printf( "EOF\n" ) );
|
||||
return EOF;
|
||||
}
|
||||
}
|
||||
while((c != '\n') && (c != '\r') && (c != 0) && (c != ','));
|
||||
}
|
||||
else
|
||||
{
|
||||
if( (c = fgetc( File )) == EOF )
|
||||
{
|
||||
//DBG( printf( "EOF\n" ) );
|
||||
return EOF;
|
||||
}
|
||||
}
|
||||
|
||||
re_parse = true;
|
||||
}
|
||||
}while(re_parse == true);
|
||||
|
||||
return c;
|
||||
}
|
||||
|
||||
|
||||
char* GetNextTag( FILE* File, char* tag )
|
||||
{
|
||||
|
||||
char c = SkipGetChar( File );
|
||||
|
||||
if (c == EOF)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
tag[0] = c;
|
||||
tag[1] = 0;
|
||||
//DBG( printf( "tag[0] %c\n", tag[0] ) );
|
||||
if( (c != '}') && (c != ']') )
|
||||
{
|
||||
char *dst = &tag[1];
|
||||
while (fscanf( File, "%c", dst))
|
||||
{
|
||||
if( (*dst == ' ') || (*dst == '[') || (*dst == '{') || (*dst == '\t') || (*dst == '\n')|| (*dst == '\r') )
|
||||
{
|
||||
*dst = 0;
|
||||
break;
|
||||
}
|
||||
dst++;
|
||||
}
|
||||
|
||||
|
||||
//DBG( printf( "tag %s\n", tag ) );
|
||||
c = SkipGetChar( File );
|
||||
|
||||
if (c != EOF)
|
||||
{
|
||||
// Puts again the read char in the buffer
|
||||
ungetc( c, File );
|
||||
}
|
||||
}
|
||||
|
||||
return tag;
|
||||
}
|
||||
|
||||
|
||||
int read_NotImplemented( FILE* File, char closeChar)
|
||||
{
|
||||
char c;
|
||||
//DBG( printf( "look for %c\n", closeChar) );
|
||||
while( (c = fgetc( File )) != EOF )
|
||||
{
|
||||
if( c == '{' )
|
||||
{
|
||||
//DBG( printf( "{\n") );
|
||||
read_NotImplemented( File, '}' );
|
||||
} else if( c == '[' )
|
||||
{
|
||||
//DBG( printf( "[\n") );
|
||||
read_NotImplemented( File, ']' );
|
||||
} else if( c == closeChar )
|
||||
{
|
||||
//DBG( printf( "%c\n", closeChar) );
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
DBG( printf( " NotImplemented failed\n" ) );
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
int parseVertexList( FILE* File, std::vector< glm::vec3 > &dst_vector)
|
||||
{
|
||||
//DBG( printf( " parseVertexList\n" ) );
|
||||
|
||||
dst_vector.clear();
|
||||
|
||||
glm::vec3 vertex;
|
||||
while( parseVertex ( File, vertex ) == 3 )
|
||||
{
|
||||
dst_vector.push_back( vertex );
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int parseVertex( FILE* File, glm::vec3 &dst_vertex )
|
||||
{
|
||||
float a,b,c;
|
||||
int ret = fscanf( File, "%e %e %e", &a, &b, &c );
|
||||
|
||||
dst_vertex.x = a;
|
||||
dst_vertex.y = b;
|
||||
dst_vertex.z = c;
|
||||
|
||||
char s = SkipGetChar( File );
|
||||
|
||||
if (s != EOF)
|
||||
{
|
||||
// Puts again the read char in the buffer
|
||||
ungetc( s, File );
|
||||
}
|
||||
//DBG( printf( "ret%d(%.9f,%.9f,%.9f)", ret, a,b,c) );
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
int parseFloat( FILE* File, float *dst_float )
|
||||
{
|
||||
float value;
|
||||
int ret = fscanf( File, "%e", &value );
|
||||
*dst_float = value;
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -1,58 +0,0 @@
|
||||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2014 Mario Luzeiro <mrluzeiro@gmail.com>
|
||||
* Copyright (C) 1992-2014 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* 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 General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, you may find one here:
|
||||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
* or you may search the http://www.gnu.org website for the version 2 license,
|
||||
* or you may write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file vrml_aux.h
|
||||
*/
|
||||
|
||||
#ifndef _VRML_AUX_H
|
||||
#define _VRML_AUX_H
|
||||
|
||||
#include <fctsys.h>
|
||||
#include <common.h>
|
||||
#include <macros.h>
|
||||
#include <base_struct.h>
|
||||
#include <gal/opengl/glm/glm.hpp>
|
||||
#include <vector>
|
||||
#include <kicad_string.h>
|
||||
#include <info3d_visu.h>
|
||||
#ifdef __WXMAC__
|
||||
# ifdef __DARWIN__
|
||||
# include <OpenGL/glu.h>
|
||||
# else
|
||||
# include <glu.h>
|
||||
# endif
|
||||
#else
|
||||
# include <GL/glu.h>
|
||||
#endif
|
||||
#include <wx/glcanvas.h>
|
||||
|
||||
int read_NotImplemented( FILE* File, char closeChar);
|
||||
char SkipGetChar ( FILE* File );
|
||||
int parseVertexList( FILE* File, std::vector< glm::vec3 > &dst_vector);
|
||||
int parseVertex( FILE* File, glm::vec3 &dst_vertex );
|
||||
int parseFloat( FILE* File, float *dst_float );
|
||||
char* GetNextTag( FILE* File, char* tag );
|
||||
|
||||
#endif
|
||||
@@ -1,444 +0,0 @@
|
||||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2014 Mario Luzeiro <mrluzeiro@gmail.com>
|
||||
* Copyright (C) 1992-2014 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* 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 General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, you may find one here:
|
||||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
* or you may search the http://www.gnu.org website for the version 2 license,
|
||||
* or you may write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file vrml_v1_modelparser.cpp
|
||||
*/
|
||||
|
||||
#include <fctsys.h>
|
||||
#include <vector>
|
||||
#include <macros.h>
|
||||
#include <kicad_string.h>
|
||||
#include <info3d_visu.h>
|
||||
|
||||
#include "3d_struct.h"
|
||||
#include "modelparsers.h"
|
||||
#include "vrml_aux.h"
|
||||
|
||||
VRML1_MODEL_PARSER::VRML1_MODEL_PARSER( S3D_MASTER* aMaster ) :
|
||||
S3D_MODEL_PARSER( aMaster )
|
||||
{
|
||||
m_model = NULL;
|
||||
m_file = NULL;
|
||||
}
|
||||
|
||||
|
||||
VRML1_MODEL_PARSER::~VRML1_MODEL_PARSER()
|
||||
{
|
||||
for( unsigned int idx = 0; idx < childs.size(); idx++ )
|
||||
{
|
||||
delete childs[idx];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void VRML1_MODEL_PARSER::Load( const wxString aFilename )
|
||||
{
|
||||
char text[128];
|
||||
|
||||
//DBG( printf( "Load %s\n", static_cast<const char*>(aFilename.mb_str()) ) );
|
||||
m_file = wxFopen( aFilename, wxT( "rt" ) );
|
||||
|
||||
if( m_file == NULL )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
glShadeModel( GL_SMOOTH );
|
||||
glEnable( GL_NORMALIZE );
|
||||
|
||||
float vrmlunits_to_3Dunits = g_Parm_3D_Visu.m_BiuTo3Dunits * UNITS3D_TO_UNITSPCB;
|
||||
glScalef( vrmlunits_to_3Dunits, vrmlunits_to_3Dunits, vrmlunits_to_3Dunits );
|
||||
|
||||
glm::vec3 matScale( GetMaster()->m_MatScale.x, GetMaster()->m_MatScale.y, GetMaster()->m_MatScale.z );
|
||||
glm::vec3 matRot( GetMaster()->m_MatRotation.x, GetMaster()->m_MatRotation.y, GetMaster()->m_MatRotation.z );
|
||||
glm::vec3 matPos( GetMaster()->m_MatPosition.x, GetMaster()->m_MatPosition.y, GetMaster()->m_MatPosition.z );
|
||||
|
||||
|
||||
#define SCALE_3D_CONV ((IU_PER_MILS * 1000.0f) / UNITS3D_TO_UNITSPCB)
|
||||
|
||||
//glPushMatrix();
|
||||
glTranslatef( matPos.x * SCALE_3D_CONV, matPos.y * SCALE_3D_CONV, matPos.z * SCALE_3D_CONV );
|
||||
|
||||
glRotatef(-matRot.z, 0.0f, 0.0f, 1.0f );
|
||||
glRotatef(-matRot.y, 0.0f, 1.0f, 0.0f );
|
||||
glRotatef(-matRot.x, 1.0f, 0.0f, 0.0f );
|
||||
|
||||
glScalef( matScale.x, matScale.y, matScale.z );
|
||||
|
||||
// Switch the locale to standard C (needed to print floating point numbers like 1.3)
|
||||
SetLocaleTo_C_standard();
|
||||
|
||||
childs.clear();
|
||||
|
||||
while( GetNextTag( m_file, text ) )
|
||||
{
|
||||
|
||||
if ( ( text == NULL ) || ( *text == '}' ) || ( *text == ']' ) )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if( strcmp( text, "Separator" ) == 0 )
|
||||
{
|
||||
m_model = new S3D_MESH();
|
||||
|
||||
childs.push_back( m_model );
|
||||
|
||||
read_separator();
|
||||
}
|
||||
}
|
||||
|
||||
fclose( m_file );
|
||||
SetLocaleTo_Default(); // revert to the current locale
|
||||
|
||||
|
||||
//DBG( printf( "chils size:%lu\n", childs.size() ) );
|
||||
|
||||
if( GetMaster()->IsOpenGlAllowed() )
|
||||
{
|
||||
for( unsigned int idx = 0; idx < childs.size(); idx++ )
|
||||
{
|
||||
childs[idx]->openGL_RenderAllChilds();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int VRML1_MODEL_PARSER::read_separator()
|
||||
{
|
||||
char text[128];
|
||||
|
||||
//DBG( printf( "Separator\n" ) );
|
||||
|
||||
while( GetNextTag( m_file, text) )
|
||||
{
|
||||
|
||||
if( strcmp( text, "Material" ) == 0 )
|
||||
{
|
||||
readMaterial( );
|
||||
} else if( strcmp( text, "Coordinate3" ) == 0 )
|
||||
{
|
||||
readCoordinate3();
|
||||
} else if( strcmp( text, "IndexedFaceSet" ) == 0 )
|
||||
{
|
||||
readIndexedFaceSet();
|
||||
} else if( strcmp( text, "Separator" ) == 0 )
|
||||
{
|
||||
S3D_MESH *parent = m_model;
|
||||
|
||||
S3D_MESH *new_mesh_model = new S3D_MESH();
|
||||
|
||||
m_model->childs.push_back( new_mesh_model );
|
||||
|
||||
m_model = new_mesh_model;
|
||||
|
||||
// recursive
|
||||
read_separator();
|
||||
|
||||
m_model = parent;
|
||||
}else if ( ( *text != '}' ) )
|
||||
{
|
||||
//DBG( printf( "read_NotImplemented %s\n", text ) );
|
||||
read_NotImplemented( m_file, '}');
|
||||
} else
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int VRML1_MODEL_PARSER::readMaterial()
|
||||
{
|
||||
char text[128];
|
||||
S3D_MATERIAL* material = NULL;
|
||||
|
||||
//DBG( printf( " readMaterial\n" ) );
|
||||
|
||||
wxString mat_name;
|
||||
|
||||
material = new S3D_MATERIAL( GetMaster(), mat_name );
|
||||
|
||||
GetMaster()->Insert( material );
|
||||
|
||||
m_model->m_Materials = material;
|
||||
|
||||
while( GetNextTag( m_file, text ) )
|
||||
{
|
||||
if ( ( text == NULL ) || ( *text == ']' ) )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( ( *text == '}' ) )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
if( strcmp( text, "ambientColor" ) == 0 )
|
||||
{
|
||||
readMaterial_ambientColor();
|
||||
} else if( strcmp( text, "diffuseColor" ) == 0 )
|
||||
{
|
||||
readMaterial_diffuseColor( );
|
||||
} else if( strcmp( text, "emissiveColor" ) == 0 )
|
||||
{
|
||||
readMaterial_emissiveColor( );
|
||||
}else if( strcmp( text, "specularColor" ) == 0 )
|
||||
{
|
||||
readMaterial_specularColor( );
|
||||
}else if( strcmp( text, "shininess" ) == 0 )
|
||||
{
|
||||
readMaterial_shininess( );
|
||||
}else if( strcmp( text, "transparency" ) == 0 )
|
||||
{
|
||||
readMaterial_transparency( );
|
||||
}
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
int VRML1_MODEL_PARSER::readCoordinate3( )
|
||||
{
|
||||
char text[128];
|
||||
|
||||
//DBG( printf( " readCoordinate3\n" ) );
|
||||
|
||||
while( GetNextTag( m_file, text ) )
|
||||
{
|
||||
if ( ( text == NULL ) || ( *text == ']' ) )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( ( *text == '}' ) )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
if( strcmp( text, "point" ) == 0 )
|
||||
{
|
||||
readCoordinate3_point( );
|
||||
}
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
int VRML1_MODEL_PARSER::readIndexedFaceSet( )
|
||||
{
|
||||
char text[128];
|
||||
|
||||
//DBG( printf( " readIndexedFaceSet\n" ) );
|
||||
|
||||
while( GetNextTag( m_file, text ) )
|
||||
{
|
||||
if ( ( text == NULL ) || ( *text == ']' ) )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( ( *text == '}' ) )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
if( strcmp( text, "coordIndex" ) == 0 )
|
||||
{
|
||||
readIndexedFaceSet_coordIndex( );
|
||||
} else if( strcmp( text, "materialIndex" ) == 0 )
|
||||
{
|
||||
readIndexedFaceSet_materialIndex( );
|
||||
}
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
int VRML1_MODEL_PARSER::readMaterial_ambientColor( )
|
||||
{
|
||||
//DBG( printf( " readMaterial_ambientColor\n" ) );
|
||||
|
||||
return parseVertexList( m_file, m_model->m_Materials->m_AmbientColor);
|
||||
}
|
||||
|
||||
|
||||
int VRML1_MODEL_PARSER::readMaterial_diffuseColor( )
|
||||
{
|
||||
//DBG( printf( " readMaterial_diffuseColor\n" ) );
|
||||
|
||||
return parseVertexList( m_file, m_model->m_Materials->m_DiffuseColor);
|
||||
}
|
||||
|
||||
|
||||
int VRML1_MODEL_PARSER::readMaterial_emissiveColor( )
|
||||
{
|
||||
//DBG( printf( " readMaterial_emissiveColor\n" ) );
|
||||
|
||||
int ret = parseVertexList( m_file, m_model->m_Materials->m_EmissiveColor);
|
||||
|
||||
if( GetMaster()->m_use_modelfile_emissiveColor == false)
|
||||
{
|
||||
m_model->m_Materials->m_EmissiveColor.clear();
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
int VRML1_MODEL_PARSER::readMaterial_specularColor()
|
||||
{
|
||||
//DBG( printf( " readMaterial_specularColor\n" ) );
|
||||
|
||||
int ret = parseVertexList( m_file, m_model->m_Materials->m_SpecularColor );
|
||||
|
||||
if( GetMaster()->m_use_modelfile_specularColor == false)
|
||||
{
|
||||
m_model->m_Materials->m_SpecularColor.clear();
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
int VRML1_MODEL_PARSER::readMaterial_shininess( )
|
||||
{
|
||||
//DBG( printf( " readMaterial_shininess\n" ) );
|
||||
|
||||
m_model->m_Materials->m_Shininess.clear();
|
||||
|
||||
float shininess_value;
|
||||
while( fscanf( m_file, "%f,", &shininess_value ) )
|
||||
{
|
||||
// VRML value is normalized and openGL expects a value 0 - 128
|
||||
shininess_value = shininess_value * 128.0f;
|
||||
m_model->m_Materials->m_Shininess.push_back( shininess_value );
|
||||
}
|
||||
|
||||
if( GetMaster()->m_use_modelfile_shininess == false )
|
||||
{
|
||||
m_model->m_Materials->m_Shininess.clear();
|
||||
}
|
||||
|
||||
//DBG( printf( " m_Shininess.size: %ld\n", m_model->m_Materials->m_Shininess.size() ) );
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int VRML1_MODEL_PARSER::readMaterial_transparency()
|
||||
{
|
||||
//DBG( printf( " readMaterial_transparency\n" ) );
|
||||
|
||||
m_model->m_Materials->m_Transparency.clear();
|
||||
|
||||
float tmp;
|
||||
while( fscanf (m_file, "%f,", &tmp) )
|
||||
{
|
||||
m_model->m_Materials->m_Transparency.push_back( tmp );
|
||||
}
|
||||
|
||||
if( GetMaster()->m_use_modelfile_transparency == false )
|
||||
{
|
||||
m_model->m_Materials->m_Transparency.clear();
|
||||
}
|
||||
|
||||
//DBG( printf( " m_Transparency.size: %ld\n", m_model->m_Materials->m_Transparency.size() ) );
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int VRML1_MODEL_PARSER::readCoordinate3_point()
|
||||
{
|
||||
//DBG( printf( " readCoordinate3_point\n" ) );
|
||||
|
||||
if( parseVertexList( m_file, m_model->m_Point ) == 0 )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
int VRML1_MODEL_PARSER::readIndexedFaceSet_coordIndex()
|
||||
{
|
||||
//DBG( printf( " readIndexedFaceSet_coordIndex\n" ) );
|
||||
|
||||
m_model->m_CoordIndex.clear();
|
||||
|
||||
glm::ivec3 coord;
|
||||
|
||||
int dummy; // should be -1
|
||||
while( fscanf( m_file, "%d,%d,%d,%d,", &coord[0], &coord[1], &coord[2], &dummy ) )
|
||||
{
|
||||
std::vector<int> coord_list;
|
||||
|
||||
coord_list.resize( 3 );
|
||||
coord_list[0] = coord[0];
|
||||
coord_list[1] = coord[1];
|
||||
coord_list[2] = coord[2];
|
||||
|
||||
if( (coord[0] == coord[1]) ||
|
||||
(coord[0] == coord[2]) ||
|
||||
(coord[2] == coord[1]) )
|
||||
{
|
||||
//DBG( printf( " invalid coordIndex at index %lu (%d, %d, %d, %d)\n", m_model->m_CoordIndex.size()+1,coord[0], coord[1], coord[2], dummy ) );
|
||||
}
|
||||
|
||||
if (dummy != -1)
|
||||
{
|
||||
//DBG( printf( " Error at index %lu, -1 Expected, got %d\n", m_model->m_CoordIndex.size()+1, dummy ) );
|
||||
}
|
||||
m_model->m_CoordIndex.push_back( coord_list );
|
||||
}
|
||||
|
||||
//DBG( printf( " m_CoordIndex.size: %ld\n", m_model->m_CoordIndex.size() ) );
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int VRML1_MODEL_PARSER::readIndexedFaceSet_materialIndex()
|
||||
{
|
||||
//DBG( printf( " readIndexedFaceSet_materialIndex\n" ) );
|
||||
|
||||
m_model->m_MaterialIndex.clear();
|
||||
|
||||
int index;
|
||||
while( fscanf( m_file, "%d,", &index ) )
|
||||
{
|
||||
m_model->m_MaterialIndex.push_back( index );
|
||||
}
|
||||
|
||||
//DBG( printf( " m_MaterialIndex.size: %ld\n", m_model->m_MaterialIndex.size() ) );
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -1,766 +0,0 @@
|
||||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2014 Mario Luzeiro <mrluzeiro@gmail.com>
|
||||
* Copyright (C) 2013 Tuomas Vaherkoski <tuomasvaherkoski@gmail.com>
|
||||
* Copyright (C) 2012 Jean-Pierre Charras, jp.charras@wanadoo.fr
|
||||
* Copyright (C) 2011 Wayne Stambaugh <stambaughw@verizon.net>
|
||||
* Copyright (C) 1992-2014 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* 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 General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, you may find one here:
|
||||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
* or you may search the http://www.gnu.org website for the version 2 license,
|
||||
* or you may write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file vrml_v2_modelparser.cpp
|
||||
*/
|
||||
|
||||
#include <fctsys.h>
|
||||
#include <vector>
|
||||
#include <macros.h>
|
||||
#include <kicad_string.h>
|
||||
#include <info3d_visu.h>
|
||||
|
||||
#include "3d_struct.h"
|
||||
#include "modelparsers.h"
|
||||
#include "vrml_aux.h"
|
||||
|
||||
VRML2_MODEL_PARSER::VRML2_MODEL_PARSER( S3D_MASTER* aMaster ) :
|
||||
S3D_MODEL_PARSER( aMaster )
|
||||
{
|
||||
m_model = NULL;
|
||||
}
|
||||
|
||||
|
||||
VRML2_MODEL_PARSER::~VRML2_MODEL_PARSER()
|
||||
{
|
||||
for(unsigned int idx = 0; idx < childs.size(); idx++)
|
||||
{
|
||||
delete childs[idx];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void VRML2_MODEL_PARSER::Load( const wxString aFilename )
|
||||
{
|
||||
char text[128];
|
||||
|
||||
//DBG( printf( "Load %s\n", static_cast<const char*>(aFilename.mb_str()) ) );
|
||||
m_file = wxFopen( aFilename, wxT( "rt" ) );
|
||||
|
||||
if( m_file == NULL )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
glShadeModel(GL_SMOOTH);
|
||||
glEnable(GL_NORMALIZE);
|
||||
|
||||
float vrmlunits_to_3Dunits = g_Parm_3D_Visu.m_BiuTo3Dunits * UNITS3D_TO_UNITSPCB;
|
||||
glScalef( vrmlunits_to_3Dunits, vrmlunits_to_3Dunits, vrmlunits_to_3Dunits );
|
||||
|
||||
glm::vec3 matScale( GetMaster()->m_MatScale.x, GetMaster()->m_MatScale.y, GetMaster()->m_MatScale.z );
|
||||
glm::vec3 matRot( GetMaster()->m_MatRotation.x, GetMaster()->m_MatRotation.y, GetMaster()->m_MatRotation.z );
|
||||
glm::vec3 matPos( GetMaster()->m_MatPosition.x, GetMaster()->m_MatPosition.y, GetMaster()->m_MatPosition.z );
|
||||
|
||||
|
||||
#define SCALE_3D_CONV ((IU_PER_MILS * 1000.0f) / UNITS3D_TO_UNITSPCB)
|
||||
|
||||
glTranslatef( matPos.x * SCALE_3D_CONV, matPos.y * SCALE_3D_CONV, matPos.z * SCALE_3D_CONV );
|
||||
|
||||
glRotatef(-matRot.z, 0.0f, 0.0f, 1.0f );
|
||||
glRotatef(-matRot.y, 0.0f, 1.0f, 0.0f );
|
||||
glRotatef(-matRot.x, 1.0f, 0.0f, 0.0f );
|
||||
|
||||
glScalef( matScale.x, matScale.y, matScale.z );
|
||||
|
||||
// Switch the locale to standard C (needed to print floating point numbers like 1.3)
|
||||
SetLocaleTo_C_standard();
|
||||
|
||||
childs.clear();
|
||||
|
||||
while( GetNextTag( m_file, text ) )
|
||||
{
|
||||
|
||||
if( ( text == NULL ) || ( *text == '}' ) || ( *text == ']' ) )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if( strcmp( text, "Transform" ) == 0 )
|
||||
{
|
||||
m_model = new S3D_MESH();
|
||||
|
||||
childs.push_back( m_model );
|
||||
|
||||
read_Transform();
|
||||
|
||||
} else if( strcmp( text, "DEF" ) == 0 )
|
||||
{
|
||||
m_model = new S3D_MESH();
|
||||
|
||||
childs.push_back( m_model );
|
||||
|
||||
read_DEF();
|
||||
}
|
||||
}
|
||||
|
||||
fclose( m_file );
|
||||
SetLocaleTo_Default(); // revert to the current locale
|
||||
|
||||
|
||||
//DBG( printf( "chils size:%lu\n", childs.size() ) );
|
||||
|
||||
if( GetMaster()->IsOpenGlAllowed() )
|
||||
{
|
||||
for( unsigned int idx = 0; idx < childs.size(); idx++ )
|
||||
{
|
||||
childs[idx]->openGL_RenderAllChilds();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int VRML2_MODEL_PARSER::read_Transform()
|
||||
{
|
||||
char text[128];
|
||||
|
||||
//DBG( printf( "Transform\n" ) );
|
||||
|
||||
while( GetNextTag( m_file, text ) )
|
||||
{
|
||||
if ( ( text == NULL ) || ( *text == ']' ) )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if ( ( *text == '}' ) )
|
||||
{
|
||||
//DBG( printf( " } Exit Transform\n" ) );
|
||||
break;
|
||||
}
|
||||
if( strcmp( text, "translation" ) == 0 )
|
||||
{
|
||||
parseVertex( m_file, m_model->m_translation );
|
||||
} else if( strcmp( text, "rotation" ) == 0 )
|
||||
{
|
||||
fscanf( m_file, "%f %f %f %f", &m_model->m_rotation[0], &m_model->m_rotation[1], &m_model->m_rotation[2], &m_model->m_rotation[3]);
|
||||
m_model->m_rotation[3] = m_model->m_rotation[3] * 180.0f / 3.14f; // !TODO: use constants or functions
|
||||
} else if( strcmp( text, "scale" ) == 0 )
|
||||
{
|
||||
parseVertex( m_file, m_model->m_scale );
|
||||
} else if( strcmp( text, "scaleOrientation" ) == 0 )
|
||||
{
|
||||
fscanf( m_file, "%f %f %f %f", &m_model->m_scaleOrientation[0], &m_model->m_scaleOrientation[1], &m_model->m_scaleOrientation[2], &m_model->m_scaleOrientation[3]);
|
||||
} else if( strcmp( text, "center" ) == 0 )
|
||||
{
|
||||
parseVertex( m_file, m_model->m_center );
|
||||
} else if( strcmp( text, "children" ) == 0 )
|
||||
{
|
||||
// skip
|
||||
} else if( strcmp( text, "Switch" ) == 0 )
|
||||
{
|
||||
// skip
|
||||
} else if( strcmp( text, "whichChoice" ) == 0 )
|
||||
{
|
||||
int dummy;
|
||||
fscanf( m_file, "%d", &dummy );
|
||||
} else if( strcmp( text, "choice" ) == 0 )
|
||||
{
|
||||
// skip
|
||||
} else if( strcmp( text, "Group" ) == 0 )
|
||||
{
|
||||
// skip
|
||||
} else if( strcmp( text, "Shape" ) == 0 )
|
||||
{
|
||||
S3D_MESH *parent = m_model;
|
||||
|
||||
S3D_MESH *new_mesh_model = new S3D_MESH();
|
||||
|
||||
m_model->childs.push_back( new_mesh_model );
|
||||
|
||||
m_model = new_mesh_model;
|
||||
|
||||
read_Shape();
|
||||
|
||||
m_model = parent;
|
||||
|
||||
} else if( strcmp( text, "DEF" ) == 0 )
|
||||
{
|
||||
read_DEF();
|
||||
} else
|
||||
{
|
||||
DBG( printf( " %s NotImplemented\n", text ) );
|
||||
read_NotImplemented( m_file, '}' );
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int VRML2_MODEL_PARSER::read_DEF()
|
||||
{
|
||||
char text[128];
|
||||
|
||||
GetNextTag( m_file, text);
|
||||
//DBG( printf( "DEF %s ", text ) );
|
||||
|
||||
while( GetNextTag( m_file, text ) )
|
||||
{
|
||||
if( ( text == NULL ) || ( *text == ']' ) )
|
||||
{
|
||||
//DBG( printf( " skiping %c\n", *text) );
|
||||
continue;
|
||||
}
|
||||
|
||||
if( ( *text == '}' ) )
|
||||
{
|
||||
//DBG( printf( " } Exit DEF\n") );
|
||||
return 0;
|
||||
}
|
||||
|
||||
if( strcmp( text, "Transform" ) == 0 )
|
||||
{
|
||||
return read_Transform ();
|
||||
} else if( strcmp( text, "children" ) == 0 )
|
||||
{
|
||||
// skip
|
||||
} else if( strcmp( text, "Switch" ) == 0 )
|
||||
{
|
||||
// skip
|
||||
} else if( strcmp( text, "whichChoice" ) == 0 )
|
||||
{
|
||||
// skip
|
||||
} else if( strcmp( text, "choice" ) == 0 )
|
||||
{
|
||||
// skip
|
||||
}else if( strcmp( text, "Shape" ) == 0 )
|
||||
{
|
||||
S3D_MESH *parent = m_model;
|
||||
|
||||
S3D_MESH *new_mesh_model = new S3D_MESH();
|
||||
|
||||
m_model->childs.push_back( new_mesh_model );
|
||||
|
||||
m_model = new_mesh_model;
|
||||
|
||||
read_Shape();
|
||||
|
||||
m_model = parent;
|
||||
}
|
||||
}
|
||||
|
||||
DBG( printf( " DEF failed\n" ) );
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
int VRML2_MODEL_PARSER::read_Shape()
|
||||
{
|
||||
char text[128];
|
||||
|
||||
//DBG( printf( " Shape\n") );
|
||||
|
||||
while( GetNextTag( m_file, text ) )
|
||||
{
|
||||
if ( ( text == NULL ) || ( *text == ']' ) )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( ( *text == '}' ) )
|
||||
{
|
||||
//DBG( printf( " } Exit Shape\n") );
|
||||
return 0;
|
||||
}
|
||||
|
||||
if( strcmp( text, "appearance" ) == 0 )
|
||||
{
|
||||
//skip
|
||||
} else if( strcmp( text, "Appearance" ) == 0 )
|
||||
{
|
||||
read_Appearance();
|
||||
} else if( strcmp( text, "geometry" ) == 0 )
|
||||
{
|
||||
//skip
|
||||
} else if( strcmp( text, "IndexedFaceSet" ) == 0 )
|
||||
{
|
||||
read_IndexedFaceSet();
|
||||
} else
|
||||
{
|
||||
DBG( printf( " %s NotImplemented\n", text ) );
|
||||
read_NotImplemented( m_file, '}' );
|
||||
}
|
||||
}
|
||||
|
||||
DBG( printf( " Shape failed\n") );
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
int VRML2_MODEL_PARSER::read_Appearance()
|
||||
{
|
||||
char text[128];
|
||||
|
||||
//DBG( printf( " Appearance\n") );
|
||||
|
||||
while( GetNextTag( m_file, text ) )
|
||||
{
|
||||
if ( ( text == NULL ) || ( *text == ']' ) )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( ( *text == '}' ) )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
if( strcmp( text, "material" ) == 0 )
|
||||
{
|
||||
read_material();
|
||||
}
|
||||
}
|
||||
|
||||
DBG( printf( " Appearance failed\n") );
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
int VRML2_MODEL_PARSER::read_material()
|
||||
{
|
||||
S3D_MATERIAL* material = NULL;
|
||||
char text[128];
|
||||
|
||||
//DBG( printf( " material ") );
|
||||
|
||||
if( GetNextTag( m_file, text ) )
|
||||
{
|
||||
if( strcmp( text, "Material" ) == 0 )
|
||||
{
|
||||
wxString mat_name;
|
||||
material = new S3D_MATERIAL( GetMaster(), mat_name );
|
||||
|
||||
GetMaster()->Insert( material );
|
||||
|
||||
m_model->m_Materials = material;
|
||||
|
||||
if( strcmp( text, "Material" ) == 0 )
|
||||
{
|
||||
return read_Material();
|
||||
}
|
||||
} else if( strcmp( text, "DEF" ) == 0 )
|
||||
{
|
||||
//DBG( printf( "DEF") );
|
||||
|
||||
if( GetNextTag( m_file, text ) )
|
||||
{
|
||||
//DBG( printf( "%s", text ) );
|
||||
|
||||
wxString mat_name;
|
||||
mat_name = FROM_UTF8( text );
|
||||
|
||||
material = new S3D_MATERIAL( GetMaster(), mat_name );
|
||||
|
||||
GetMaster()->Insert( material );
|
||||
|
||||
m_model->m_Materials = material;
|
||||
|
||||
if( GetNextTag( m_file, text ) )
|
||||
{
|
||||
if( strcmp( text, "Material" ) == 0 )
|
||||
{
|
||||
return read_Material();
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if( strcmp( text, "USE" ) == 0 )
|
||||
{
|
||||
//DBG( printf( "USE") );
|
||||
|
||||
if( GetNextTag( m_file, text ) )
|
||||
{
|
||||
//DBG( printf( "%s\n", text ) );
|
||||
|
||||
wxString mat_name;
|
||||
mat_name = FROM_UTF8( text );
|
||||
|
||||
for( material = GetMaster()->m_Materials; material; material = material->Next() )
|
||||
{
|
||||
if( material->m_Name == mat_name )
|
||||
{
|
||||
m_model->m_Materials = material;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
DBG( printf( " read_material error: material not found\n" ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
DBG( printf( " failed material\n") );
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
int VRML2_MODEL_PARSER::read_Material()
|
||||
{
|
||||
char text[128];
|
||||
glm::vec3 vertex;
|
||||
|
||||
//DBG( printf( " Material\n") );
|
||||
|
||||
while( GetNextTag( m_file, text ) )
|
||||
{
|
||||
if ( ( text == NULL ) || ( *text == ']' ) )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( ( *text == '}' ) )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
if( strcmp( text, "diffuseColor" ) == 0 )
|
||||
{
|
||||
//DBG( printf( " diffuseColor") );
|
||||
parseVertex ( m_file, vertex);
|
||||
//DBG( printf( "\n") );
|
||||
m_model->m_Materials->m_DiffuseColor.push_back( vertex );
|
||||
} else if( strcmp( text, "emissiveColor" ) == 0 )
|
||||
{
|
||||
//DBG( printf( " emissiveColor") );
|
||||
parseVertex ( m_file, vertex);
|
||||
//DBG( printf( "\n") );
|
||||
if( GetMaster()->m_use_modelfile_emissiveColor == true )
|
||||
{
|
||||
m_model->m_Materials->m_EmissiveColor.push_back( vertex );
|
||||
}
|
||||
} else if( strcmp( text, "specularColor" ) == 0 )
|
||||
{
|
||||
//DBG( printf( " specularColor") );
|
||||
parseVertex ( m_file, vertex);
|
||||
//DBG( printf( "\n") );
|
||||
if( GetMaster()->m_use_modelfile_specularColor == true )
|
||||
{
|
||||
m_model->m_Materials->m_SpecularColor.push_back( vertex );
|
||||
}
|
||||
} else if( strcmp( text, "ambientIntensity" ) == 0 )
|
||||
{
|
||||
float ambientIntensity;
|
||||
parseFloat( m_file, &ambientIntensity );
|
||||
//DBG( printf( " ambientIntensity %f\n", ambientIntensity) );
|
||||
if( GetMaster()->m_use_modelfile_ambientIntensity == true )
|
||||
{
|
||||
m_model->m_Materials->m_AmbientColor.push_back( glm::vec3( ambientIntensity, ambientIntensity, ambientIntensity ) );
|
||||
}
|
||||
} else if( strcmp( text, "transparency" ) == 0 )
|
||||
{
|
||||
float transparency;
|
||||
parseFloat( m_file, &transparency );
|
||||
//DBG( printf( " transparency %f\n", transparency) );
|
||||
if( GetMaster()->m_use_modelfile_transparency == true )
|
||||
{
|
||||
m_model->m_Materials->m_Transparency.push_back( transparency );
|
||||
}
|
||||
} else if( strcmp( text, "shininess" ) == 0 )
|
||||
{
|
||||
float shininess;
|
||||
parseFloat( m_file, &shininess );
|
||||
//DBG( printf( " shininess %f\n", shininess) );
|
||||
// VRML value is normalized and openGL expects a value 0 - 128
|
||||
if( GetMaster()->m_use_modelfile_shininess == true )
|
||||
{
|
||||
shininess = shininess * 128.0f;
|
||||
m_model->m_Materials->m_Shininess.push_back( shininess );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
DBG( printf( " Material failed\n") );
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
int VRML2_MODEL_PARSER::read_IndexedFaceSet()
|
||||
{
|
||||
char text[128];
|
||||
|
||||
//DBG( printf( " IndexedFaceSet\n") );
|
||||
|
||||
m_normalPerVertex = false;
|
||||
colorPerVertex = false;
|
||||
|
||||
while( GetNextTag( m_file, text ) )
|
||||
{
|
||||
if ( ( text == NULL ) || ( *text == ']' ) )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( ( *text == '}' ) )
|
||||
{
|
||||
//DBG( printf( " } Exit IndexedFaceSet\n") );
|
||||
return 0;
|
||||
}
|
||||
|
||||
if( strcmp( text, "normalPerVertex" ) == 0 )
|
||||
{
|
||||
if( GetNextTag( m_file, text ) )
|
||||
{
|
||||
if( strcmp( text, "TRUE" ) == 0 )
|
||||
{
|
||||
//DBG( printf( " m_normalPerVertex TRUE\n") );
|
||||
m_normalPerVertex = true;
|
||||
}
|
||||
}
|
||||
} else if( strcmp( text, "colorPerVertex" ) == 0 )
|
||||
{
|
||||
GetNextTag( m_file, text );
|
||||
if( strcmp( text, "TRUE" ) )
|
||||
{
|
||||
//DBG( printf( " colorPerVertex = true\n") );
|
||||
colorPerVertex = true;
|
||||
} else
|
||||
{
|
||||
colorPerVertex = false;
|
||||
}
|
||||
|
||||
} else if( strcmp( text, "Coordinate" ) == 0 )
|
||||
{
|
||||
read_Coordinate();
|
||||
} else if( strcmp( text, "Normal" ) == 0 )
|
||||
{
|
||||
read_Normal();
|
||||
} else if( strcmp( text, "normalIndex" ) == 0 )
|
||||
{
|
||||
read_NormalIndex();
|
||||
} else if( strcmp( text, "Color" ) == 0 )
|
||||
{
|
||||
read_Color();
|
||||
} else if( strcmp( text, "coordIndex" ) == 0 )
|
||||
{
|
||||
read_coordIndex();
|
||||
} else if( strcmp( text, "colorIndex" ) == 0 )
|
||||
{
|
||||
read_colorIndex();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
DBG( printf( " IndexedFaceSet failed %s\n", text) );
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
int VRML2_MODEL_PARSER::read_colorIndex()
|
||||
{
|
||||
//DBG( printf( " read_colorIndex\n" ) );
|
||||
|
||||
m_model->m_MaterialIndex.clear();
|
||||
|
||||
if( colorPerVertex == true )
|
||||
{
|
||||
int index;
|
||||
int first_index;
|
||||
while( fscanf( m_file, "%d, ", &index ) )
|
||||
{
|
||||
if( index == -1 )
|
||||
{
|
||||
// it only implemented color per face, so it will store as the first in the list
|
||||
m_model->m_MaterialIndex.push_back( first_index );
|
||||
} else
|
||||
{
|
||||
first_index = index;
|
||||
}
|
||||
}
|
||||
} else
|
||||
{
|
||||
int index;
|
||||
while( fscanf( m_file, "%d,", &index ) )
|
||||
{
|
||||
m_model->m_MaterialIndex.push_back( index );
|
||||
}
|
||||
}
|
||||
|
||||
//DBG( printf( " m_MaterialIndex.size: %ld\n", m_model->m_MaterialIndex.size() ) );
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int VRML2_MODEL_PARSER::read_NormalIndex()
|
||||
{
|
||||
//DBG( printf( " read_NormalIndex\n" ) );
|
||||
|
||||
m_model->m_NormalIndex.clear();
|
||||
|
||||
glm::ivec3 coord;
|
||||
|
||||
int dummy; // should be -1
|
||||
|
||||
std::vector<int> coord_list;
|
||||
coord_list.clear();
|
||||
while( fscanf (m_file, "%d, ", &dummy ) == 1 )
|
||||
{
|
||||
if( dummy == -1 )
|
||||
{
|
||||
m_model->m_NormalIndex.push_back( coord_list );
|
||||
//DBG( printf( " size: %lu ", coord_list.size()) );
|
||||
coord_list.clear();
|
||||
} else
|
||||
{
|
||||
coord_list.push_back( dummy );
|
||||
//DBG( printf( "%d ", dummy) );
|
||||
}
|
||||
}
|
||||
|
||||
//DBG( printf( " m_NormalIndex.size: %ld\n", m_model->m_NormalIndex.size() ) );
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int VRML2_MODEL_PARSER::read_coordIndex()
|
||||
{
|
||||
//DBG( printf( " read_coordIndex\n" ) );
|
||||
|
||||
m_model->m_CoordIndex.clear();
|
||||
|
||||
glm::ivec3 coord;
|
||||
|
||||
int dummy; // should be -1
|
||||
|
||||
std::vector<int> coord_list;
|
||||
coord_list.clear();
|
||||
while( fscanf (m_file, "%d, ", &dummy ) == 1 )
|
||||
{
|
||||
if( dummy == -1 )
|
||||
{
|
||||
m_model->m_CoordIndex.push_back( coord_list );
|
||||
//DBG( printf( " size: %lu ", coord_list.size()) );
|
||||
coord_list.clear();
|
||||
} else
|
||||
{
|
||||
coord_list.push_back( dummy );
|
||||
//DBG( printf( "%d ", dummy) );
|
||||
}
|
||||
}
|
||||
|
||||
//DBG( printf( " m_CoordIndex.size: %ld\n", m_model->m_CoordIndex.size() ) );
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int VRML2_MODEL_PARSER::read_Color()
|
||||
{
|
||||
char text[128];
|
||||
|
||||
//DBG( printf( " read_Color\n") );
|
||||
|
||||
while( GetNextTag( m_file, text ) )
|
||||
{
|
||||
if ( ( text == NULL ) || ( *text == ']' ) )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( ( *text == '}' ) )
|
||||
{
|
||||
//DBG( printf( " m_DiffuseColor.size: %ld\n", m_model->m_Materials->m_DiffuseColor.size() ) );
|
||||
return 0;
|
||||
}
|
||||
|
||||
if( strcmp( text, "color" ) == 0 )
|
||||
{
|
||||
parseVertexList( m_file, m_model->m_Materials->m_DiffuseColor );
|
||||
}
|
||||
}
|
||||
|
||||
//DBG( printf( " read_Color failed\n") );
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
int VRML2_MODEL_PARSER::read_Normal()
|
||||
{
|
||||
char text[128];
|
||||
|
||||
//DBG( printf( " Normal\n") );
|
||||
|
||||
while( GetNextTag( m_file, text ) )
|
||||
{
|
||||
if ( ( text == NULL ) || ( *text == ']' ) )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( ( *text == '}' ) )
|
||||
{
|
||||
//DBG( printf( " m_PerFaceNormalsNormalized.size: %lu\n", m_model->m_PerFaceNormalsNormalized.size() ) );
|
||||
return 0;
|
||||
}
|
||||
|
||||
if( strcmp( text, "vector" ) == 0 )
|
||||
{
|
||||
if(m_normalPerVertex == false )
|
||||
{
|
||||
parseVertexList( m_file, m_model->m_PerFaceNormalsNormalized );
|
||||
} else
|
||||
{
|
||||
parseVertexList( m_file, m_model->m_PerVertexNormalsNormalized );
|
||||
|
||||
//DBG( printf( " m_PerVertexNormalsNormalized.size: %lu\n", m_model->m_PerVertexNormalsNormalized.size() ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
int VRML2_MODEL_PARSER::read_Coordinate()
|
||||
{
|
||||
char text[128];
|
||||
|
||||
//DBG( printf( " Coordinate\n") );
|
||||
|
||||
while( GetNextTag( m_file, text ) )
|
||||
{
|
||||
if ( ( text == NULL ) || ( *text == ']' ) )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( ( *text == '}' ) )
|
||||
{
|
||||
//DBG( printf( " m_Point.size: %lu\n", m_model->m_Point.size() ) );
|
||||
return 0;
|
||||
}
|
||||
|
||||
if( strcmp( text, "point" ) == 0 )
|
||||
{
|
||||
parseVertexList( m_file, m_model->m_Point);
|
||||
}
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
+485
-40
@@ -4,7 +4,7 @@
|
||||
* Copyright (C) 2013 Tuomas Vaherkoski <tuomasvaherkoski@gmail.com>
|
||||
* Copyright (C) 2012 Jean-Pierre Charras, jp.charras@wanadoo.fr
|
||||
* Copyright (C) 2011 Wayne Stambaugh <stambaughw@verizon.net>
|
||||
* Copyright (C) 1992-2014 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
* Copyright (C) 1992-2011 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
@@ -37,34 +37,23 @@
|
||||
#include "3d_struct.h"
|
||||
#include "modelparsers.h"
|
||||
|
||||
// separator chars
|
||||
static const char* sep_chars = " \t\n\r";
|
||||
|
||||
VRML_MODEL_PARSER::VRML_MODEL_PARSER( S3D_MASTER* aMaster ) :
|
||||
S3D_MODEL_PARSER( aMaster )
|
||||
{
|
||||
vrml1_parser = new VRML1_MODEL_PARSER( aMaster );
|
||||
vrml2_parser = new VRML2_MODEL_PARSER( aMaster );
|
||||
}
|
||||
{}
|
||||
|
||||
|
||||
VRML_MODEL_PARSER::~VRML_MODEL_PARSER()
|
||||
{
|
||||
if( vrml1_parser )
|
||||
{
|
||||
delete vrml1_parser;
|
||||
}
|
||||
if( vrml2_parser )
|
||||
{
|
||||
delete vrml2_parser;
|
||||
}
|
||||
}
|
||||
{}
|
||||
|
||||
|
||||
void VRML_MODEL_PARSER::Load( const wxString aFilename )
|
||||
{
|
||||
char line[12];
|
||||
char line[1024], * text;
|
||||
FILE* file;
|
||||
|
||||
//DBG( printf( "Load %s", static_cast<const char*>(aFilename.mb_str()) ) );
|
||||
int LineNum = 0;
|
||||
|
||||
file = wxFopen( aFilename, wxT( "rt" ) );
|
||||
|
||||
@@ -73,29 +62,485 @@ void VRML_MODEL_PARSER::Load( const wxString aFilename )
|
||||
return;
|
||||
}
|
||||
|
||||
if( fgets( line, 11, file ) == NULL )
|
||||
// Switch the locale to standard C (needed to print floating point numbers like 1.3)
|
||||
SetLocaleTo_C_standard();
|
||||
|
||||
while( GetLine( file, line, &LineNum, 512 ) )
|
||||
{
|
||||
fclose( file );
|
||||
|
||||
return;
|
||||
text = strtok( line, sep_chars );
|
||||
|
||||
if( stricmp( text, "DEF" ) == 0 || stricmp( text, "Group" ) == 0 )
|
||||
{
|
||||
while( GetLine( file, line, &LineNum, 512 ) )
|
||||
{
|
||||
text = strtok( line, sep_chars );
|
||||
|
||||
if( text == NULL )
|
||||
continue;
|
||||
|
||||
if( *text == '}' )
|
||||
break;
|
||||
|
||||
if( stricmp( text, "children" ) == 0 )
|
||||
{
|
||||
readChildren( file, &LineNum );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fclose( file );
|
||||
|
||||
|
||||
if( stricmp( line, "#VRML V2.0" ) == 0)
|
||||
{
|
||||
//DBG( printf( "About to parser a #VRML V2.0 file\n" ) );
|
||||
vrml2_parser->Load( aFilename );
|
||||
|
||||
return;
|
||||
}
|
||||
else if( stricmp( line, "#VRML V1.0" ) == 0)
|
||||
{
|
||||
//DBG( printf( "About to parser a #VRML V1.0 file\n" ) );
|
||||
vrml1_parser->Load( aFilename );
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
DBG( printf( "Unknown VRML file format: %s\n", line ) );
|
||||
SetLocaleTo_Default(); // revert to the current locale
|
||||
}
|
||||
|
||||
|
||||
int VRML_MODEL_PARSER::readMaterial( FILE* file, int* LineNum )
|
||||
{
|
||||
char line[512], * text, * command;
|
||||
wxString mat_name;
|
||||
S3D_MATERIAL* material = NULL;
|
||||
|
||||
command = strtok( NULL, sep_chars );
|
||||
text = strtok( NULL, sep_chars );
|
||||
mat_name = FROM_UTF8( text );
|
||||
|
||||
if( stricmp( command, "USE" ) == 0 )
|
||||
{
|
||||
for( material = GetMaster()->m_Materials; material; material = material->Next() )
|
||||
{
|
||||
if( material->m_Name == mat_name )
|
||||
{
|
||||
material->SetMaterial();
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
DBG( printf( "ReadMaterial error: material not found\n" ) );
|
||||
return 0;
|
||||
}
|
||||
|
||||
if( stricmp( command, "DEF" ) == 0 || stricmp( command, "Material") == 0)
|
||||
{
|
||||
material = new S3D_MATERIAL( GetMaster(), mat_name );
|
||||
|
||||
GetMaster()->Insert( material );
|
||||
|
||||
while( GetLine( file, line, LineNum, 512 ) )
|
||||
{
|
||||
text = strtok( line, sep_chars );
|
||||
|
||||
if( text == NULL )
|
||||
continue;
|
||||
|
||||
if( text[0] == '}' )
|
||||
{
|
||||
material->SetMaterial();
|
||||
return 0;
|
||||
}
|
||||
|
||||
if( stricmp( text, "diffuseColor" ) == 0 )
|
||||
{
|
||||
text = strtok( NULL, sep_chars );
|
||||
material->m_DiffuseColor.x = atof( text );
|
||||
text = strtok( NULL, sep_chars );
|
||||
material->m_DiffuseColor.y = atof( text );
|
||||
text = strtok( NULL, sep_chars );
|
||||
material->m_DiffuseColor.z = atof( text );
|
||||
}
|
||||
else if( stricmp( text, "emissiveColor" ) == 0 )
|
||||
{
|
||||
text = strtok( NULL, sep_chars );
|
||||
material->m_EmissiveColor.x = atof( text );
|
||||
text = strtok( NULL, sep_chars );
|
||||
material->m_EmissiveColor.y = atof( text );
|
||||
text = strtok( NULL, sep_chars );
|
||||
material->m_EmissiveColor.z = atof( text );
|
||||
}
|
||||
else if( strnicmp( text, "specularColor", 13 ) == 0 )
|
||||
{
|
||||
text = strtok( NULL, sep_chars );
|
||||
material->m_SpecularColor.x = atof( text );
|
||||
text = strtok( NULL, sep_chars );
|
||||
material->m_SpecularColor.y = atof( text );
|
||||
text = strtok( NULL, sep_chars );
|
||||
material->m_SpecularColor.z = atof( text );
|
||||
}
|
||||
else if( strnicmp( text, "ambientIntensity", 16 ) == 0 )
|
||||
{
|
||||
text = strtok( NULL, sep_chars );
|
||||
material->m_AmbientIntensity = atof( text );
|
||||
}
|
||||
else if( strnicmp( text, "transparency", 12 ) == 0 )
|
||||
{
|
||||
text = strtok( NULL, sep_chars );
|
||||
material->m_Transparency = atof( text );
|
||||
}
|
||||
else if( strnicmp( text, "shininess", 9 ) == 0 )
|
||||
{
|
||||
text = strtok( NULL, sep_chars );
|
||||
material->m_Shininess = atof( text );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
int VRML_MODEL_PARSER::readChildren( FILE* file, int* LineNum )
|
||||
{
|
||||
char line[1024], * text;
|
||||
|
||||
while( GetLine( file, line, LineNum, 512 ) )
|
||||
{
|
||||
text = strtok( line, sep_chars );
|
||||
|
||||
if( *text == ']' )
|
||||
return 0;
|
||||
|
||||
if( *text == ',' )
|
||||
continue;
|
||||
|
||||
if( stricmp( text, "Shape" ) == 0 )
|
||||
{
|
||||
readShape( file, LineNum );
|
||||
}
|
||||
else
|
||||
{
|
||||
DBG( printf( "ReadChildren error line %d <%s> \n", *LineNum, text ) );
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
int VRML_MODEL_PARSER::readShape( FILE* file, int* LineNum )
|
||||
{
|
||||
char line[1024], * text;
|
||||
int err = 1;
|
||||
|
||||
while( GetLine( file, line, LineNum, 512 ) )
|
||||
{
|
||||
text = strtok( line, sep_chars );
|
||||
|
||||
if( *text == '}' )
|
||||
{
|
||||
err = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
if( stricmp( text, "appearance" ) == 0 )
|
||||
{
|
||||
readAppearance( file, LineNum );
|
||||
}
|
||||
else if( stricmp( text, "geometry" ) == 0 )
|
||||
{
|
||||
readGeometry( file, LineNum );
|
||||
}
|
||||
else
|
||||
{
|
||||
DBG( printf( "ReadShape error line %d <%s> \n", *LineNum, text ) );
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
|
||||
int VRML_MODEL_PARSER::readAppearance( FILE* file, int* LineNum )
|
||||
{
|
||||
char line[1024], * text;
|
||||
int err = 1;
|
||||
|
||||
while( GetLine( file, line, LineNum, 512 ) )
|
||||
{
|
||||
text = strtok( line, sep_chars );
|
||||
|
||||
if( *text == '}' )
|
||||
{
|
||||
err = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
if( stricmp( text, "material" ) == 0 )
|
||||
{
|
||||
readMaterial( file, LineNum );
|
||||
}
|
||||
else
|
||||
{
|
||||
DBG( printf( "ReadAppearance error line %d <%s> \n", *LineNum, text ) );
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
|
||||
#define BUFSIZE 2000
|
||||
|
||||
void VRML_MODEL_PARSER::readCoordsList( FILE* file, char* text_buffer,
|
||||
std::vector< double >& aList, int* LineNum )
|
||||
{
|
||||
unsigned int ii = 0, jj = 0;
|
||||
char* text;
|
||||
bool HasData = false;
|
||||
bool StartData = false;
|
||||
bool EndNode = false;
|
||||
char string_num[512];
|
||||
|
||||
text = text_buffer;
|
||||
|
||||
while( !EndNode )
|
||||
{
|
||||
if( *text == 0 ) // Needs data !
|
||||
{
|
||||
text = text_buffer;
|
||||
GetLine( file, text_buffer, LineNum, 512 );
|
||||
}
|
||||
|
||||
while( !EndNode && *text )
|
||||
{
|
||||
switch( *text )
|
||||
{
|
||||
case '[':
|
||||
StartData = true;
|
||||
jj = 0;
|
||||
string_num[jj] = 0;
|
||||
break;
|
||||
|
||||
case '}':
|
||||
EndNode = true;
|
||||
break;
|
||||
|
||||
case ']':
|
||||
case '\t':
|
||||
case ' ':
|
||||
case ',':
|
||||
jj = 0;
|
||||
|
||||
if( !StartData || !HasData )
|
||||
break;
|
||||
|
||||
aList.push_back( atof( string_num ) );
|
||||
string_num[jj] = 0;
|
||||
ii++;
|
||||
|
||||
HasData = false;
|
||||
|
||||
if( *text == ']' )
|
||||
{
|
||||
StartData = false;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
if( !StartData )
|
||||
break;
|
||||
|
||||
if( jj >= sizeof( string_num ) )
|
||||
break;
|
||||
|
||||
string_num[jj] = *text;
|
||||
jj++;
|
||||
string_num[jj] = 0;
|
||||
HasData = true;
|
||||
break;
|
||||
}
|
||||
|
||||
text++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int VRML_MODEL_PARSER::readGeometry( FILE* file, int* LineNum )
|
||||
{
|
||||
char line[1024], buffer[1024], * text;
|
||||
int err = 1;
|
||||
std::vector< double > points;
|
||||
std::vector< double > list;
|
||||
double vrmlunits_to_3Dunits = g_Parm_3D_Visu.m_BiuTo3Dunits * UNITS3D_TO_UNITSPCB;
|
||||
|
||||
while( GetLine( file, line, LineNum, 512 ) )
|
||||
{
|
||||
strcpy( buffer, line );
|
||||
text = strtok( buffer, sep_chars );
|
||||
|
||||
if( *text == '}' )
|
||||
{
|
||||
err = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
if( stricmp( text, "normalPerVertex" ) == 0 )
|
||||
{
|
||||
text = strtok( NULL, " ,\t\n\r" );
|
||||
|
||||
if( stricmp( text, "true" ) == 0 )
|
||||
{
|
||||
}
|
||||
else
|
||||
{
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
if( stricmp( text, "colorPerVertex" ) == 0 )
|
||||
{
|
||||
text = strtok( NULL, " ,\t\n\r" );
|
||||
|
||||
if( stricmp( text, "true" ) == 0 )
|
||||
{
|
||||
}
|
||||
else
|
||||
{
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
if( stricmp( text, "normal" ) == 0 )
|
||||
{
|
||||
readCoordsList( file, line, list, LineNum );
|
||||
list.clear();
|
||||
continue;
|
||||
}
|
||||
|
||||
if( stricmp( text, "normalIndex" ) == 0 )
|
||||
{
|
||||
while( GetLine( file, line, LineNum, 512 ) )
|
||||
{
|
||||
text = strtok( line, " ,\t\n\r" );
|
||||
|
||||
while( text )
|
||||
{
|
||||
if( *text == ']' )
|
||||
break;
|
||||
|
||||
text = strtok( NULL, " ,\t\n\r" );
|
||||
}
|
||||
|
||||
if( text && (*text == ']') )
|
||||
break;
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
if( stricmp( text, "color" ) == 0 )
|
||||
{
|
||||
readCoordsList( file, line, list, LineNum );
|
||||
list.clear();
|
||||
continue;
|
||||
}
|
||||
|
||||
if( stricmp( text, "solid" ) == 0 )
|
||||
{
|
||||
// ignore solid
|
||||
continue;
|
||||
}
|
||||
|
||||
if( stricmp( text, "colorIndex" ) == 0 )
|
||||
{
|
||||
while( GetLine( file, line, LineNum, 512 ) )
|
||||
{
|
||||
text = strtok( line, " ,\t\n\r" );
|
||||
|
||||
while( text )
|
||||
{
|
||||
if( *text == ']' )
|
||||
break;
|
||||
|
||||
text = strtok( NULL, " ,\t\n\r" );
|
||||
}
|
||||
|
||||
if( text && (*text == ']') )
|
||||
break;
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
if( stricmp( text, "coord" ) == 0 )
|
||||
{
|
||||
readCoordsList( file, line, points, LineNum );
|
||||
}
|
||||
else if( stricmp( text, "coordIndex" ) == 0 )
|
||||
{
|
||||
if( points.size() < 3 || points.size() % 3 != 0 )
|
||||
{
|
||||
wxLogError( wxT( "3D geometry read error <%s> at line %d." ),
|
||||
GetChars( FROM_UTF8( text ) ), *LineNum );
|
||||
err = 1;
|
||||
break;
|
||||
}
|
||||
|
||||
std::vector< int > coordIndex;
|
||||
std::vector< S3D_VERTEX > vertices;
|
||||
|
||||
while( GetLine( file, line, LineNum, 512 ) )
|
||||
{
|
||||
int jj;
|
||||
text = strtok( line, " ,\t\n\r" );
|
||||
|
||||
while( text )
|
||||
{
|
||||
if( *text == ']' )
|
||||
break;
|
||||
|
||||
jj = atoi( text );
|
||||
|
||||
if( jj < 0 )
|
||||
{
|
||||
for( jj = 0; jj < (int) coordIndex.size(); jj++ )
|
||||
{
|
||||
int kk = coordIndex[jj] * 3;
|
||||
|
||||
if( (kk < 0) || ((kk + 3) > (int)points.size()) )
|
||||
{
|
||||
wxLogError( wxT( "3D geometry index read error <%s> at line %d." ),
|
||||
GetChars( FROM_UTF8( text ) ), *LineNum );
|
||||
err = 1;
|
||||
break;
|
||||
}
|
||||
|
||||
S3D_VERTEX vertex;
|
||||
vertex.x = points[kk];
|
||||
vertex.y = points[kk + 1];
|
||||
vertex.z = points[kk + 2];
|
||||
vertices.push_back( vertex );
|
||||
}
|
||||
|
||||
GetMaster()->Set_Object_Coords( vertices );
|
||||
Set_Object_Data( vertices, vrmlunits_to_3Dunits );
|
||||
vertices.clear();
|
||||
coordIndex.clear();
|
||||
}
|
||||
else
|
||||
{
|
||||
coordIndex.push_back( jj );
|
||||
}
|
||||
|
||||
text = strtok( NULL, " ,\t\n\r" );
|
||||
}
|
||||
|
||||
if( text && (*text == ']') )
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
wxLogError( wxT( "3D geometry read error <%s> at line %d." ),
|
||||
GetChars( FROM_UTF8( text ) ), *LineNum );
|
||||
err = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
+76
-194
@@ -36,10 +36,8 @@
|
||||
#include <queue>
|
||||
#include <vector>
|
||||
|
||||
#include <3d_struct.h>
|
||||
#include <modelparsers.h>
|
||||
#include <xnode.h>
|
||||
|
||||
#include "3d_struct.h"
|
||||
#include "modelparsers.h"
|
||||
|
||||
X3D_MODEL_PARSER::X3D_MODEL_PARSER( S3D_MASTER* aMaster ) :
|
||||
S3D_MODEL_PARSER( aMaster )
|
||||
@@ -56,46 +54,16 @@ void X3D_MODEL_PARSER::Load( const wxString aFilename )
|
||||
|
||||
if( !doc.Load( aFilename ) )
|
||||
{
|
||||
wxLogError( wxT( "Error while parsing file '%s'" ), GetChars( aFilename ) );
|
||||
wxLogError( wxT( "Error while parsing file <%s>" ), GetChars( aFilename ) );
|
||||
return;
|
||||
}
|
||||
|
||||
if( doc.GetRoot()->GetName() != wxT( "X3D" ) )
|
||||
{
|
||||
wxLogError( wxT( "Filetype is not X3D '%s'" ), GetChars( aFilename ) );
|
||||
wxLogError( wxT( "Filetype is not X3D <%s>" ), GetChars( aFilename ) );
|
||||
return;
|
||||
}
|
||||
|
||||
glShadeModel(GL_SMOOTH);
|
||||
glEnable(GL_NORMALIZE);
|
||||
|
||||
float vrmlunits_to_3Dunits = g_Parm_3D_Visu.m_BiuTo3Dunits * UNITS3D_TO_UNITSPCB;
|
||||
glScalef( vrmlunits_to_3Dunits, vrmlunits_to_3Dunits, vrmlunits_to_3Dunits );
|
||||
|
||||
glm::vec3 matScale( GetMaster()->m_MatScale.x, GetMaster()->m_MatScale.y,
|
||||
GetMaster()->m_MatScale.z );
|
||||
glm::vec3 matRot( GetMaster()->m_MatRotation.x, GetMaster()->m_MatRotation.y,
|
||||
GetMaster()->m_MatRotation.z );
|
||||
glm::vec3 matPos( GetMaster()->m_MatPosition.x, GetMaster()->m_MatPosition.y,
|
||||
GetMaster()->m_MatPosition.z );
|
||||
|
||||
|
||||
#define SCALE_3D_CONV ((IU_PER_MILS * 1000.0f) / UNITS3D_TO_UNITSPCB)
|
||||
|
||||
|
||||
glTranslatef( matPos.x * SCALE_3D_CONV, matPos.y * SCALE_3D_CONV, matPos.z * SCALE_3D_CONV );
|
||||
|
||||
glRotatef(-matRot.z, 0.0f, 0.0f, 1.0f );
|
||||
glRotatef(-matRot.y, 0.0f, 1.0f, 0.0f );
|
||||
glRotatef(-matRot.x, 1.0f, 0.0f, 0.0f );
|
||||
|
||||
glScalef( matScale.x, matScale.y, matScale.z );
|
||||
|
||||
// Switch the locale to standard C (needed to print floating point numbers)
|
||||
LOCALE_IO toggle;
|
||||
|
||||
childs.clear();
|
||||
|
||||
// Shapes are inside of Transform nodes
|
||||
// Transform node contains information about
|
||||
// transition, scale and rotation of the shape
|
||||
@@ -106,49 +74,35 @@ void X3D_MODEL_PARSER::Load( const wxString aFilename )
|
||||
node_it != transforms.end();
|
||||
node_it++ )
|
||||
{
|
||||
m_model = new S3D_MESH();
|
||||
childs.push_back( m_model );
|
||||
|
||||
readTransform( *node_it );
|
||||
}
|
||||
|
||||
//DBG( printf( "chils size:%lu\n", childs.size() ) );
|
||||
|
||||
if( GetMaster()->IsOpenGlAllowed() )
|
||||
{
|
||||
for( unsigned int idx = 0; idx < childs.size(); idx++ )
|
||||
{
|
||||
childs[idx]->openGL_RenderAllChilds();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
wxString X3D_MODEL_PARSER::VRML2_representation()
|
||||
wxString X3D_MODEL_PARSER::VRML_representation()
|
||||
{
|
||||
wxString output;
|
||||
|
||||
for( unsigned i = 0; i < vrml_points.size(); i++ )
|
||||
{
|
||||
output +=
|
||||
wxT( "Shape {\n"
|
||||
" appearance Appearance {\n"
|
||||
" material Material {\n" ) +
|
||||
vrml_materials[i] +
|
||||
wxT( " }\n"
|
||||
" }\n"
|
||||
" geometry IndexedFaceSet {\n"
|
||||
" solid TRUE\n"
|
||||
" coord Coordinate {\n"
|
||||
" point [\n") +
|
||||
vrml_points[i] +
|
||||
wxT( " ]\n"
|
||||
" }\n"
|
||||
" coordIndex [\n" ) +
|
||||
vrml_coord_indexes[i] +
|
||||
wxT( " ]\n"
|
||||
" }\n"
|
||||
"},\n" );
|
||||
output += wxT( "Shape {\n"
|
||||
" appearance Appearance {\n"
|
||||
" material Material {\n" ) +
|
||||
vrml_materials[i] +
|
||||
wxT( " }\n"
|
||||
" }\n"
|
||||
" geometry IndexedFaceSet {\n"
|
||||
" solid TRUE\n"
|
||||
" coord Coordinate {\n"
|
||||
" point [\n") +
|
||||
vrml_points[i] +
|
||||
wxT( " ]\n"
|
||||
" }\n"
|
||||
" coordIndex [\n" ) +
|
||||
vrml_coord_indexes[i] +
|
||||
wxT( " ]\n"
|
||||
" }\n"
|
||||
"},\n" );
|
||||
}
|
||||
|
||||
return output;
|
||||
@@ -161,7 +115,6 @@ void X3D_MODEL_PARSER::GetChildsByName( wxXmlNode* aParent,
|
||||
{
|
||||
// Breadth-first search (BFS)
|
||||
std::queue< wxXmlNode* > found;
|
||||
|
||||
found.push( aParent );
|
||||
|
||||
while( !found.empty() )
|
||||
@@ -187,7 +140,7 @@ void X3D_MODEL_PARSER::GetChildsByName( wxXmlNode* aParent,
|
||||
|
||||
void X3D_MODEL_PARSER::GetNodeProperties( wxXmlNode* aNode, PROPERTY_MAP& aProps )
|
||||
{
|
||||
wxXmlAttribute* prop;
|
||||
wxXmlProperty *prop;
|
||||
|
||||
for( prop = aNode->GetAttributes();
|
||||
prop != NULL;
|
||||
@@ -214,7 +167,6 @@ void X3D_MODEL_PARSER::readTransform( wxXmlNode* aTransformNode )
|
||||
childnodes.clear();
|
||||
|
||||
PROPERTY_MAP properties;
|
||||
|
||||
GetNodeProperties( aTransformNode, properties );
|
||||
GetChildsByName( aTransformNode, wxT("IndexedFaceSet"), childnodes );
|
||||
|
||||
@@ -231,8 +183,6 @@ void X3D_MODEL_PARSER::readTransform( wxXmlNode* aTransformNode )
|
||||
|
||||
void X3D_MODEL_PARSER::readMaterial( wxXmlNode* aMatNode )
|
||||
{
|
||||
glm::vec3 color;
|
||||
|
||||
PROPERTY_MAP properties;
|
||||
GetNodeProperties( aMatNode, properties );
|
||||
|
||||
@@ -244,42 +194,30 @@ void X3D_MODEL_PARSER::readMaterial( wxXmlNode* aMatNode )
|
||||
S3D_MATERIAL* material = new S3D_MATERIAL( GetMaster(), properties[ wxT( "DEF" ) ] );
|
||||
GetMaster()->Insert( material );
|
||||
|
||||
m_model->m_Materials = material;
|
||||
|
||||
if( !parseDoubleTriplet( properties[ wxT( "diffuseColor" ) ],
|
||||
color ) )
|
||||
material->m_DiffuseColor ) )
|
||||
{
|
||||
DBG( printf("diffuseColor parsing error") );
|
||||
}
|
||||
else
|
||||
{
|
||||
m_model->m_Materials->m_DiffuseColor.push_back( color );
|
||||
}
|
||||
|
||||
if( !parseDoubleTriplet( properties[ wxT( "specularColor" ) ], color ) )
|
||||
if( !parseDoubleTriplet( properties[ wxT( "specularColor" ) ],
|
||||
material->m_SpecularColor ) )
|
||||
{
|
||||
DBG( printf("specularColor parsing error") );
|
||||
}
|
||||
else
|
||||
{
|
||||
m_model->m_Materials->m_SpecularColor.push_back( color );
|
||||
}
|
||||
|
||||
if( !parseDoubleTriplet( properties[ wxT( "emissiveColor" ) ], color ) )
|
||||
if( !parseDoubleTriplet( properties[ wxT( "emissiveColor" ) ],
|
||||
material->m_EmissiveColor ) )
|
||||
{
|
||||
DBG( printf("emissiveColor parsing error") );
|
||||
}
|
||||
else
|
||||
{
|
||||
m_model->m_Materials->m_EmissiveColor.push_back( color );
|
||||
}
|
||||
|
||||
wxStringTokenizer values;
|
||||
values.SetString( properties[ wxT( "ambientIntensity" ) ] );
|
||||
|
||||
if( values.GetNextToken().ToDouble( &amb ) )
|
||||
{
|
||||
m_model->m_Materials->m_AmbientColor.push_back( glm::vec3( amb, amb, amb ) );
|
||||
material->m_AmbientIntensity = amb;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -290,9 +228,7 @@ void X3D_MODEL_PARSER::readMaterial( wxXmlNode* aMatNode )
|
||||
|
||||
if( values.GetNextToken().ToDouble( &shine ) )
|
||||
{
|
||||
// VRML value is normalized and openGL expects a value 0 - 128
|
||||
shine = shine * 128.0f;
|
||||
m_model->m_Materials->m_Shininess.push_back( shine );
|
||||
material->m_Shininess = shine;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -303,18 +239,20 @@ void X3D_MODEL_PARSER::readMaterial( wxXmlNode* aMatNode )
|
||||
|
||||
if( values.GetNextToken().ToDouble( &transp ) )
|
||||
{
|
||||
m_model->m_Materials->m_Transparency.push_back( transp );
|
||||
material->m_Transparency = transp;
|
||||
}
|
||||
else
|
||||
{
|
||||
DBG( printf( "trans error") );
|
||||
}
|
||||
|
||||
material->SetMaterial();
|
||||
|
||||
// VRML
|
||||
wxString vrml_material;
|
||||
PROPERTY_MAP::const_iterator p = ++properties.begin(); // skip DEF
|
||||
|
||||
for( ; p != properties.end(); p++ )
|
||||
for(;p != properties.end();p++)
|
||||
{
|
||||
vrml_material.Append( p->first + wxT( " " ) + p->second + wxT( "\n" ) );
|
||||
}
|
||||
@@ -332,36 +270,35 @@ void X3D_MODEL_PARSER::readMaterial( wxXmlNode* aMatNode )
|
||||
{
|
||||
if( material->m_Name == mat_name )
|
||||
{
|
||||
wxString vrml_material;
|
||||
|
||||
wxString vrml_material;
|
||||
vrml_material.Append( wxString::Format( wxT( "specularColor %f %f %f\n" ),
|
||||
material->m_SpecularColor[0].x,
|
||||
material->m_SpecularColor[0].y,
|
||||
material->m_SpecularColor[0].z ) );
|
||||
material->m_SpecularColor.x,
|
||||
material->m_SpecularColor.y,
|
||||
material->m_SpecularColor.z ) );
|
||||
|
||||
vrml_material.Append( wxString::Format( wxT( "diffuseColor %f %f %f\n" ),
|
||||
material->m_DiffuseColor[0].x,
|
||||
material->m_DiffuseColor[0].y,
|
||||
material->m_DiffuseColor[0].z ) );
|
||||
material->m_DiffuseColor.x,
|
||||
material->m_DiffuseColor.y,
|
||||
material->m_DiffuseColor.z ) );
|
||||
|
||||
vrml_material.Append( wxString::Format( wxT( "emissiveColor %f %f %f\n" ),
|
||||
material->m_EmissiveColor[0].x,
|
||||
material->m_EmissiveColor[0].y,
|
||||
material->m_EmissiveColor[0].z ) );
|
||||
material->m_EmissiveColor.x,
|
||||
material->m_EmissiveColor.y,
|
||||
material->m_EmissiveColor.z ) );
|
||||
|
||||
vrml_material.Append( wxString::Format( wxT( "ambientIntensity %f\n"),
|
||||
material->m_AmbientColor[0].x ) );
|
||||
material->m_AmbientIntensity ) );
|
||||
|
||||
vrml_material.Append( wxString::Format( wxT( "shininess %f\n"),
|
||||
material->m_Shininess[0] ) );
|
||||
material->m_Shininess ) );
|
||||
|
||||
vrml_material.Append( wxString::Format( wxT( "transparency %f\n"),
|
||||
material->m_Transparency[0] ) );
|
||||
material->m_Transparency ) );
|
||||
|
||||
vrml_materials.push_back( vrml_material );
|
||||
|
||||
m_model->m_Materials = material;
|
||||
|
||||
material->SetMaterial();
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -376,17 +313,9 @@ bool X3D_MODEL_PARSER::parseDoubleTriplet( const wxString& aData,
|
||||
{
|
||||
wxStringTokenizer tokens(aData);
|
||||
|
||||
double x,y,z;
|
||||
|
||||
bool ret = tokens.GetNextToken().ToDouble( &x ) &&
|
||||
tokens.GetNextToken().ToDouble( &y ) &&
|
||||
tokens.GetNextToken().ToDouble( &z );
|
||||
|
||||
aResult.x = x;
|
||||
aResult.y = y;
|
||||
aResult.z = z;
|
||||
|
||||
return ret;
|
||||
return tokens.GetNextToken().ToDouble( &aResult.x ) &&
|
||||
tokens.GetNextToken().ToDouble( &aResult.y ) &&
|
||||
tokens.GetNextToken().ToDouble( &aResult.z );
|
||||
}
|
||||
|
||||
|
||||
@@ -439,20 +368,16 @@ void X3D_MODEL_PARSER::readIndexedFaceSet( wxXmlNode* aFaceNode,
|
||||
double angle = 0.0;
|
||||
wxStringTokenizer tokens(aTransformProps[ wxT( "rotation" ) ]);
|
||||
|
||||
double x,y,z;
|
||||
if( !(tokens.GetNextToken().ToDouble( &x ) &&
|
||||
tokens.GetNextToken().ToDouble( &y ) &&
|
||||
tokens.GetNextToken().ToDouble( &z ) &&
|
||||
if( !(tokens.GetNextToken().ToDouble( &rotation.x ) &&
|
||||
tokens.GetNextToken().ToDouble( &rotation.y ) &&
|
||||
tokens.GetNextToken().ToDouble( &rotation.z ) &&
|
||||
tokens.GetNextToken().ToDouble( &angle ) ) )
|
||||
{
|
||||
DBG( printf("rotation read error") );
|
||||
}
|
||||
else
|
||||
{
|
||||
rotation.x = x;
|
||||
rotation.y = y;
|
||||
rotation.z = z;
|
||||
}
|
||||
|
||||
double vrmlunits_to_3Dunits = g_Parm_3D_Visu.m_BiuTo3Dunits *
|
||||
UNITS3D_TO_UNITSPCB;
|
||||
|
||||
/* Step 2: Read all coordinate points
|
||||
* ---------------------------- */
|
||||
@@ -509,7 +434,7 @@ void X3D_MODEL_PARSER::readIndexedFaceSet( wxXmlNode* aFaceNode,
|
||||
point.y += translation.y;
|
||||
point.z += translation.z;
|
||||
|
||||
m_model->m_Point.push_back( point );
|
||||
triplets.push_back(point);
|
||||
|
||||
// VRML
|
||||
vrml_pointlist.Append( wxString::Format( wxT( "%f %f %f\n" ), point.x, point.y, point.z ) );
|
||||
@@ -517,75 +442,21 @@ void X3D_MODEL_PARSER::readIndexedFaceSet( wxXmlNode* aFaceNode,
|
||||
|
||||
vrml_points.push_back( vrml_pointlist );
|
||||
|
||||
|
||||
/* Step 3: Read all color points
|
||||
* ---------------------------- */
|
||||
std::vector< double > color_points;
|
||||
NODE_LIST color;
|
||||
GetChildsByName( aFaceNode, wxT( "Color" ), color);
|
||||
|
||||
// Some models lack color information, need to handle this safely
|
||||
if( !color.empty() )
|
||||
{
|
||||
PROPERTY_MAP color_properties;
|
||||
// IndexedFaceSet has one Coordinate child node
|
||||
GetNodeProperties( color[0], color_properties );
|
||||
|
||||
// Save points to vector as doubles
|
||||
wxStringTokenizer colorpoint_tokens( color_properties[ wxT("color") ] );
|
||||
double color_point = 0.0;
|
||||
|
||||
while( colorpoint_tokens.HasMoreTokens() )
|
||||
{
|
||||
if( colorpoint_tokens.GetNextToken().ToDouble( &color_point ) )
|
||||
{
|
||||
color_points.push_back( color_point );
|
||||
}
|
||||
else
|
||||
{
|
||||
wxLogError( wxT( "Error converting to double" ) );
|
||||
}
|
||||
}
|
||||
|
||||
if( color_points.size() % 3 != 0 )
|
||||
{
|
||||
DBG( printf( "Number of points is incorrect" ) );
|
||||
return;
|
||||
}
|
||||
|
||||
/* Create 3D face color from 3 color points
|
||||
*/
|
||||
m_model->m_Materials->m_DiffuseColor.clear();
|
||||
for( unsigned id = 0; id < color_points.size() / 3; id++ )
|
||||
{
|
||||
m_model->m_MaterialIndex.push_back( id );
|
||||
|
||||
int color_triplet_indx = id * 3;
|
||||
glm::vec3 colorface( color_points[ color_triplet_indx + 0 ],
|
||||
color_points[ color_triplet_indx + 1 ],
|
||||
color_points[ color_triplet_indx + 2 ] );
|
||||
|
||||
m_model->m_Materials->m_DiffuseColor.push_back( colorface );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* -- Read coordinate indexes -- */
|
||||
PROPERTY_MAP faceset_properties;
|
||||
GetNodeProperties( aFaceNode, faceset_properties );
|
||||
|
||||
std::vector< S3D_VERTEX > vertices;
|
||||
std::vector< int > coordIndex;
|
||||
|
||||
wxString coordIndex_str = faceset_properties[ wxT( "coordIndex" ) ];
|
||||
wxStringTokenizer index_tokens( coordIndex_str );
|
||||
|
||||
wxString vrml_coord_indx_list;
|
||||
|
||||
std::vector<int> coord_list;
|
||||
coord_list.clear();
|
||||
|
||||
while( index_tokens.HasMoreTokens() )
|
||||
{
|
||||
long index = 0;
|
||||
|
||||
index_tokens.GetNextToken().ToLong( &index );
|
||||
|
||||
// -1 marks the end of polygon
|
||||
@@ -593,14 +464,25 @@ void X3D_MODEL_PARSER::readIndexedFaceSet( wxXmlNode* aFaceNode,
|
||||
{
|
||||
/* Step 4: Apply geometry to Master object
|
||||
* --------------------------------------- */
|
||||
m_model->m_CoordIndex.push_back( coord_list );
|
||||
std::vector<int>::const_iterator id;
|
||||
|
||||
coord_list.clear();
|
||||
for( id = coordIndex.begin();
|
||||
id != coordIndex.end();
|
||||
id++ )
|
||||
{
|
||||
vertices.push_back( triplets.at( *id ) );
|
||||
}
|
||||
|
||||
GetMaster()->Set_Object_Coords( vertices );
|
||||
Set_Object_Data( vertices, vrmlunits_to_3Dunits );
|
||||
|
||||
vertices.clear();
|
||||
coordIndex.clear();
|
||||
vrml_coord_indx_list.Append( wxT( "-1\n" ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
coord_list.push_back( index );
|
||||
coordIndex.push_back( index );
|
||||
vrml_coord_indx_list.Append( wxString::Format( wxT( "%u " ), index ) );
|
||||
}
|
||||
}
|
||||
|
||||
+111
-398
@@ -1,12 +1,3 @@
|
||||
|
||||
# Default to CMAKE_BUILD_TYPE = Release unless overridden on command line
|
||||
# http://www.cmake.org/pipermail/cmake/2008-September/023808.html
|
||||
if( DEFINED CMAKE_BUILD_TYPE )
|
||||
set( CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "Set to either \"Release\" or \"Debug\"" )
|
||||
else()
|
||||
set( CMAKE_BUILD_TYPE Release CACHE STRING "Set to either \"Release\" or \"Debug\"" )
|
||||
endif()
|
||||
|
||||
project( kicad )
|
||||
|
||||
cmake_minimum_required( VERSION 2.8.4 FATAL_ERROR )
|
||||
@@ -23,22 +14,12 @@ set( CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/CMakeModules )
|
||||
# reports.
|
||||
#
|
||||
|
||||
#option( USE_KIWAY_DLLS "Build the major modules as KIFACE DLLs or DSOs, will soon be the norm." ON )
|
||||
set( USE_KIWAY_DLLS true ) # this is now mandatory, the code is the same anyways, the old code is gone.
|
||||
# Russian GOST patch
|
||||
option( wxUSE_UNICODE "enable/disable building unicode ( default OFF)" )
|
||||
option( KICAD_GOST "enable/disable building using GOST notation for multiple gates per package ( default OFF)" )
|
||||
|
||||
|
||||
# The desire is to migrate designs *away from* case independence, and to create designs which use
|
||||
# literally (case specific) interpreted component names. But for backwards compatibility,
|
||||
# you may turn OFF this option if you really must. (Remember that with KiCad using text
|
||||
# data files, typically you would be better off simply doctoring those files into
|
||||
# a case literal state with a text editor and move forward into the brave new
|
||||
# world of case specificity. Also, BOM generators may not work properly when you
|
||||
# have this option turned OFF, the xml export's referential integrity is broken
|
||||
# on library part name. Hence the default is ON now, as of 29-Jan-2014.
|
||||
option( KICAD_KEEPCASE
|
||||
"ON= case specific string matching on component names, OFF= match names as if they were spelt using uppercase."
|
||||
ON
|
||||
)
|
||||
#for those who bored with uppercase
|
||||
option( KICAD_KEEPCASE "turn-off automatic component name conversion to uppercase if selected" )
|
||||
|
||||
option( USE_WX_GRAPHICS_CONTEXT
|
||||
"Use wxGraphicsContext for rendering ( default OFF). Warning, this is experimental" )
|
||||
@@ -46,6 +27,11 @@ option( USE_WX_GRAPHICS_CONTEXT
|
||||
option( USE_WX_OVERLAY
|
||||
"Use wxOverlay: Always ON for MAC ( default OFF). Warning, this is experimental" )
|
||||
|
||||
#One of these 2 option *must* be set to ON:
|
||||
option( KICAD_STABLE_VERSION
|
||||
"set this option to ON to build the stable version of KICAD. mainly used to set version ID (default OFF)"
|
||||
)
|
||||
|
||||
option( KICAD_SCRIPTING
|
||||
"set this option ON to build the scripting support inside kicad binaries"
|
||||
)
|
||||
@@ -57,36 +43,25 @@ option( KICAD_SCRIPTING_MODULES
|
||||
option( KICAD_SCRIPTING_WXPYTHON
|
||||
"set this option ON to build wxpython implementation for wx interface building in python and py.shell"
|
||||
)
|
||||
|
||||
option( KICAD_BUILD_STATIC
|
||||
"Builds Kicad and all libraries static"
|
||||
)
|
||||
|
||||
option( KICAD_BUILD_DYNAMIC
|
||||
"Builds Kicad and all libraries dynamic (required for wxPython)"
|
||||
)
|
||||
|
||||
|
||||
# WARNING: KiCad developers strongly advise you to build Boost with supplied patches,
|
||||
# as it is known to work with KiCad. Other versions may contain bugs that may result
|
||||
# in KiCad errors.
|
||||
option( KICAD_SKIP_BOOST
|
||||
"Skip building downloaded Boost library components, use Boost from your system."
|
||||
)
|
||||
mark_as_advanced( KICAD_SKIP_BOOST ) # Normal builders should build Boost.
|
||||
|
||||
|
||||
|
||||
# when option KICAD_SCRIPTING OR KICAD_SCRIPTING_MODULES is enabled:
|
||||
# PYTHON_EXECUTABLE can be defined when invoking cmake
|
||||
# ( use -DPYTHON_EXECUTABLE=<python path>/python.exe or python2 )
|
||||
# when not defined by user, the default is python.exe under Windows and python2 for others
|
||||
# python binary file should be is exec path.
|
||||
|
||||
option( BUILD_GITHUB_PLUGIN "Build the GITHUB_PLUGIN for pcbnew." ON )
|
||||
|
||||
# This can be set to a custom name to brag about a particular branch in the "About" dialog:
|
||||
set( KICAD_REPO_NAME "product" CACHE STRING "Name of the tree from which this build came." )
|
||||
option( USE_FP_LIB_TABLE "Use the new footprint library table implementation. ( default OFF)" )
|
||||
|
||||
#option( BUILD_GITHUB_PLUGIN "Build the GITHUB_PLUGIN for pcbnew." OFF )
|
||||
|
||||
|
||||
#Set version option (stable or testing)
|
||||
|
||||
if( KICAD_STABLE_VERSION)
|
||||
add_definitions( -DKICAD_STABLE_VERSION )
|
||||
message( STATUS "Building stable version of KiCad" )
|
||||
endif()
|
||||
|
||||
# All CMake downloads go here. Suggested is up in the source tree, not in the build dir where they
|
||||
# would have to be downloaded over and over again. The default is to choose a directory that is
|
||||
@@ -95,155 +70,95 @@ set( KICAD_REPO_NAME "product" CACHE STRING "Name of the tree from which this bu
|
||||
set( DOWNLOAD_DIR ${PROJECT_SOURCE_DIR}/.downloads-by-cmake
|
||||
CACHE PATH "Location of KiCad downloads, suggested is a dir common to all builds, i.e. global." )
|
||||
|
||||
#Add option to add user directories for linker, if any
|
||||
LINK_DIRECTORIES( ${LINK_DIRECTORIES_PATH} )
|
||||
|
||||
if( UNIX )
|
||||
set( KICAD_USER_CONFIG_DIR $ENV{HOME} CACHE PATH "Location of user specific KiCad config files" )
|
||||
elseif( MINGW )
|
||||
set( KICAD_USER_CONFIG_DIR $ENV{%APPDATA%} CACHE PATH "Location of user specific KiCad config files" )
|
||||
endif()
|
||||
mark_as_advanced( KICAD_USER_CONFIG_DIR )
|
||||
|
||||
|
||||
#================================================
|
||||
# Set flags for GCC, or treat llvm as GCC
|
||||
# Set flags for GCC.
|
||||
#================================================
|
||||
|
||||
if( CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
|
||||
if( CMAKE_COMPILER_IS_GNUCXX )
|
||||
|
||||
set( KICAD_GCC_RELEASE_BUILD_FLAGS "-O2" )
|
||||
set( KICAD_GCC_RELEASE_DEBUG_FLAGS "" )
|
||||
|
||||
execute_process( COMMAND ${CMAKE_C_COMPILER} -dumpversion
|
||||
OUTPUT_VARIABLE GCC_VERSION
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE )
|
||||
|
||||
if( CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
|
||||
set( TO_LINKER -XLinker )
|
||||
else()
|
||||
set( TO_LINKER -Wl )
|
||||
endif()
|
||||
|
||||
# Establish -Wall early, so specialized relaxations of this may come
|
||||
# subsequently on the command line, such as in pcbnew/github/CMakeLists.txt
|
||||
set( CMAKE_C_FLAGS "-Wall ${CMAKE_C_FLAGS}" )
|
||||
set( CMAKE_CXX_FLAGS "-Wall ${CMAKE_CXX_FLAGS}" )
|
||||
|
||||
# The optimization level is -O1 instead of the usual -O2 level because
|
||||
# boost::polygon has a function (inflate polygon) broken by the -O2 level
|
||||
# with GCC 4.7.0 to 4.7.2 (works fine with with GCC 4.6 and 4.7.3).
|
||||
# Added -Wno-narrowing on 10/7/12 to prevent a huge number of warnings when
|
||||
# compiling with GCC 4.7. This appears to be caused by and int to unsigned
|
||||
# conversion in the Boost polygon library. At some point in the future when
|
||||
# Boost is updated to the next version, -Wno-narrowing should be removed to
|
||||
# see if the problem has been resolved. Wayne.
|
||||
#
|
||||
# Also note the optimization level is -O1 instead of the usual -O2 level
|
||||
# because boost::polygon has a function ( inflate polygon) broken by
|
||||
# the -O2 level with GCC 4.7 (works fine with with GCC 4.6).
|
||||
# This lower optimization level does not have a significant change on the speed.
|
||||
# See also:
|
||||
# https://bugs.launchpad.net/kicad/+bug/1056926
|
||||
# https://svn.boost.org/trac/boost/ticket/7983
|
||||
if( GCC_VERSION VERSION_EQUAL 4.7.0 OR ( GCC_VERSION VERSION_GREATER 4.7.0 AND GCC_VERSION VERSION_LESS 4.7.3 ) )
|
||||
set( CMAKE_C_FLAGS_RELEASE "-O1" )
|
||||
set( CMAKE_CXX_FLAGS_RELEASE "-O1" )
|
||||
#
|
||||
# As newer versions of GCC and/or Boost are released, this code needs reviewed to
|
||||
# determine if the problems above have been fixed either in Boost or GCC.
|
||||
if( GCC_VERSION VERSION_GREATER 4.7 OR GCC_VERSION VERSION_EQUAL 4.7 )
|
||||
set( KICAD_GCC_RELEASE_BUILD_FLAGS "-Wno-narrowing -O1" )
|
||||
set( KICAD_GCC_DEBUG_BUILD_FLAGS "-Wno-narrowing" )
|
||||
endif()
|
||||
|
||||
if( CMAKE_BUILD_TYPE STREQUAL Debug )
|
||||
message( STATUS
|
||||
"Setting GCC version ${GCC_VERSION} build flags \"${KICAD_GCC_DEBUG_BUILD_FLAGS}\"" )
|
||||
else()
|
||||
set( CMAKE_C_FLAGS_RELEASE "-O2" )
|
||||
set( CMAKE_CXX_FLAGS_RELEASE "-O2" )
|
||||
endif()
|
||||
|
||||
set( CMAKE_C_FLAGS_DEBUG "-g3 -ggdb3 -DDEBUG" )
|
||||
set( CMAKE_CXX_FLAGS_DEBUG "-g3 -ggdb3 -DDEBUG -Wno-deprecated-declarations" )
|
||||
|
||||
set( CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -DNDEBUG" )
|
||||
set( CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DNDEBUG" )
|
||||
|
||||
if( GXX_HAS_VISIBILITY_FLAG AND NOT APPLE )
|
||||
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden" )
|
||||
endif()
|
||||
|
||||
if( GXX_HAS_VISIBILITY_INLINES_FLAG AND NOT APPLE )
|
||||
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility-inlines-hidden" )
|
||||
endif()
|
||||
|
||||
find_package( OpenMP QUIET )
|
||||
|
||||
if( OPENMP_FOUND )
|
||||
set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}" )
|
||||
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}" )
|
||||
add_definitions( -DUSE_OPENMP )
|
||||
|
||||
# MinGW does not include the OpenMP link library and FindOpenMP.cmake does not
|
||||
# set it either. Not sure this is the most elegant solution but it works.
|
||||
if( MINGW )
|
||||
set( OPENMP_LIBRARIES gomp )
|
||||
endif()
|
||||
message( STATUS
|
||||
"Setting GCC version ${GCC_VERSION} build flags \"${KICAD_GCC_RELEASE_BUILD_FLAGS}\"" )
|
||||
endif()
|
||||
|
||||
if( MINGW )
|
||||
set( CMAKE_EXE_LINKER_FLAGS_RELEASE "-s" )
|
||||
# According to some sources, under Windows -fPIC option is not needed:
|
||||
# http://mingw.5.n7.nabble.com/Option-fPIC-not-supported-td18480.html
|
||||
|
||||
# _UNICODE definition seems needed under mingw/gcc 4.8
|
||||
# (Kicad uses unicode, and on Windows, wxWidgets >= 2.9.4 is mandatory
|
||||
# and uses unicode)
|
||||
if( GCC_VERSION VERSION_EQUAL 4.8.0 OR GCC_VERSION VERSION_GREATER 4.8.0 )
|
||||
add_definitions(-D_UNICODE)
|
||||
endif()
|
||||
# Set default flags for Release build.
|
||||
set( CMAKE_C_FLAGS_RELEASE "-Wall ${KICAD_GCC_RELEASE_BUILD_FLAGS} -DNDEBUG" )
|
||||
set( CMAKE_CXX_FLAGS_RELEASE "-Wall ${KICAD_GCC_RELEASE_BUILD_FLAGS} -DNDEBUG" )
|
||||
set( CMAKE_EXE_LINKER_FLAGS_RELEASE "-s -static-libgcc -static-libstdc++" )
|
||||
|
||||
# Since version 2.8.5, Cmake uses a response file (.rsp) to
|
||||
# pass the list of include paths to gcc
|
||||
# unfortunately, under mingw32+msys, at least with gcc 4.8 and previous,
|
||||
# this file is not expanded and include paths defined in this file are not taken in account
|
||||
# this is the case of wxWidgets includes
|
||||
# Disable this response file for includes ( See Windows-GNU.cmake module )
|
||||
if( WIN32 AND MSYS AND NOT CMAKE_CROSSCOMPILING )
|
||||
# fixme: it is needed only with MSYS+MINGW32? or always under MINGW
|
||||
if( ${CMAKE_SIZEOF_VOID_P} MATCHES 4 )
|
||||
set( CMAKE_CXX_USE_RESPONSE_FILE_FOR_INCLUDES 0 )
|
||||
endif()
|
||||
endif()
|
||||
# Set default flags for Debug build.
|
||||
set( CMAKE_C_FLAGS_DEBUG "-Wall ${KICAD_GCC_DEBUG_BUILD_FLAGS} -g3 -ggdb3 -DDEBUG" )
|
||||
set( CMAKE_CXX_FLAGS_DEBUG "-Wall ${KICAD_GCC_DEBUG_BUILD_FLAGS} -g3 -ggdb3 -DDEBUG" )
|
||||
set( CMAKE_MODULE_LINKER_FLAGS "-static-libgcc -static-libstdc++") # SWIG macros on Windows
|
||||
|
||||
else()
|
||||
# We build DLL/DSOs from static libraries, so create position independent
|
||||
# code for all cases, since we do not have DLL/DSO specific static
|
||||
# libraries. Subdirectories via add_subdirectores() reference this
|
||||
# variable, and it is either set or empty, empty for Windows.
|
||||
set( PIC_FLAG -fPIC )
|
||||
# We build DLL/DSOs from static libraries, so create position independent code
|
||||
# for all cases, since we do not have DLL/DSO specific static libraries.
|
||||
# This flag could be localized to any object file going into a DLL/DSO in the future.
|
||||
set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC" )
|
||||
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC" )
|
||||
|
||||
set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${PIC_FLAG}" )
|
||||
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${PIC_FLAG}" )
|
||||
# Thou shalt not link vaporware and tell us it's a valid DSO:
|
||||
set( CMAKE_SHARED_LINKER_FLAGS "-Wl,--no-undefined" )
|
||||
set( CMAKE_MODULE_LINKER_FLAGS "-Wl,--no-undefined" ) # needed by SWIG macros on linux
|
||||
|
||||
if( NOT APPLE )
|
||||
# Thou shalt not link vaporware and tell us it's a valid DSO (apple ld doesn't support it)
|
||||
set( CMAKE_SHARED_LINKER_FLAGS "${TO_LINKER},--no-undefined" )
|
||||
set( CMAKE_MODULE_LINKER_FLAGS "${TO_LINKER},--no-undefined" )
|
||||
|
||||
set( CMAKE_EXE_LINKER_FLAGS_RELEASE "-s" )
|
||||
|
||||
# Defeat ELF's ability to use the GOT to replace locally implemented functions
|
||||
# with ones from another module.
|
||||
# https://bugs.launchpad.net/kicad/+bug/1322354
|
||||
set( CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${TO_LINKER},-Bsymbolic" )
|
||||
set( CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${TO_LINKER},-Bsymbolic" )
|
||||
endif()
|
||||
# Set default flags for Release build.
|
||||
set( CMAKE_C_FLAGS_RELEASE "${KICAD_GCC_RELEASE_BUILD_FLAGS} -Wall -DNDEBUG" )
|
||||
set( CMAKE_CXX_FLAGS_RELEASE "${KICAD_GCC_RELEASE_BUILD_FLAGS} -Wall -DNDEBUG" )
|
||||
set( CMAKE_EXE_LINKER_FLAGS_RELEASE "-s" )
|
||||
|
||||
# Set default flags for Debug build.
|
||||
set( CMAKE_C_FLAGS_DEBUG "${KICAD_GCC_DEBUG_BUILD_FLAGS} -Wall -g3 -ggdb3 -DDEBUG" )
|
||||
set( CMAKE_CXX_FLAGS_DEBUG "${KICAD_GCC_DEBUG_BUILD_FLAGS} -Wall -g3 -ggdb3 -DDEBUG" )
|
||||
endif()
|
||||
|
||||
# quiet GCC while in boost
|
||||
# quiet GCC 4.8.1 while in boost
|
||||
if( GCC_VERSION VERSION_GREATER 4.8 OR GCC_VERSION VERSION_EQUAL 4.8 )
|
||||
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-local-typedefs" )
|
||||
endif()
|
||||
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-strict-aliasing" )
|
||||
|
||||
if( APPLE )
|
||||
endif( CMAKE_COMPILER_IS_GNUCXX )
|
||||
|
||||
set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D__ASSERTMACROS__ -mmacosx-version-min=10.5" )
|
||||
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D__ASSERTMACROS__ -mmacosx-version-min=10.5" )
|
||||
if( wxUSE_UNICODE )
|
||||
add_definitions( -DwxUSE_UNICODE )
|
||||
endif()
|
||||
|
||||
# Allows .dylib relocation in the future - needed by fixbundle
|
||||
set( CMAKE_LD_FLAGS "${CMAKE_LD_FLAGS} -headerpad_max_install_names")
|
||||
|
||||
if( NOT CMAKE_CXX_COMPILER )
|
||||
EXEC_PROGRAM( wx-config ARGS --cc OUTPUT_VARIABLE CMAKE_C_COMPILER )
|
||||
endif()
|
||||
|
||||
if( NOT CMAKE_CXX_COMPILER )
|
||||
EXEC_PROGRAM( wx-config ARGS --cxx OUTPUT_VARIABLE CMAKE_CXX_COMPILER )
|
||||
endif()
|
||||
|
||||
endif()
|
||||
|
||||
endif( CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
|
||||
if( KICAD_GOST )
|
||||
add_definitions( -DKICAD_GOST )
|
||||
endif()
|
||||
|
||||
if( KICAD_KEEPCASE )
|
||||
add_definitions( -DKICAD_KEEPCASE )
|
||||
@@ -269,8 +184,6 @@ if( USE_WX_GRAPHICS_CONTEXT )
|
||||
add_definitions( -DUSE_WX_GRAPHICS_CONTEXT )
|
||||
endif()
|
||||
|
||||
|
||||
|
||||
# Allow user to override the default settings for adding images to menu items. By default
|
||||
# images in menu items are enabled on all platforms except OSX. This can be over ridden by
|
||||
# defining -DUSE_IMAGES_IN_MENUS=ON/OFF to force the preferred behavior.
|
||||
@@ -284,25 +197,6 @@ else()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
|
||||
# KIFACE_SUFFIX is the file extension used for top level program modules which
|
||||
# implement the KIFACE interface. A valid suffix starts with a period '.'.
|
||||
|
||||
if( false )
|
||||
# This is the eventual situation near milestone C) of modular-kicad blueprint.
|
||||
# Until then we use .kiface extension so we don't collide with python DSO.
|
||||
set( KIFACE_SUFFIX ${CMAKE_SHARED_MODULE_SUFFIX} )
|
||||
else()
|
||||
# Temporary situation until we can dovetail the python DSO into the kiface DSO.
|
||||
set( KIFACE_SUFFIX ".kiface" )
|
||||
endif()
|
||||
|
||||
# KIFACE_PREFIX is a basename prefix used for top level program modules which
|
||||
# implement the KIFACE.
|
||||
set( KIFACE_PREFIX "_" )
|
||||
#message( STATUS "KIFACE_SUFFIX:${KIFACE_SUFFIX} KIFACE_PREFIX:${KIFACE_PREFIX}" )
|
||||
|
||||
|
||||
#================================================
|
||||
# Locations for install targets.
|
||||
set( KICAD_BIN bin
|
||||
@@ -354,8 +248,8 @@ include( ExternalProject )
|
||||
#================================================
|
||||
include( CheckFindPackageResult )
|
||||
|
||||
# Turn on wxWidgets compatibility mode for some classes
|
||||
add_definitions( -DWX_COMPATIBILITY )
|
||||
# Turn on wxWidgets compatibility mode for some classes
|
||||
add_definitions(-DWX_COMPATIBILITY)
|
||||
|
||||
#######################
|
||||
# Find OpenGL library #
|
||||
@@ -363,135 +257,22 @@ add_definitions( -DWX_COMPATIBILITY )
|
||||
find_package( OpenGL QUIET )
|
||||
check_find_package_result( OPENGL_FOUND "OpenGL" )
|
||||
|
||||
# Dick 5-Feb-2014:
|
||||
# Marco: We cannot use both ExternalProject_Add() add and find_package()
|
||||
# in the same CMake tree and have them both reference the same package:
|
||||
# http://stackoverflow.com/questions/6351609/cmake-linking-to-library-downloaded-from-externalproject-add
|
||||
# https://www.mail-archive.com/cmake@cmake.org/msg47501.html
|
||||
|
||||
# Handle target used to specify if a target needs wx-widgets or other libraries
|
||||
# Always defined, empty if no libraries are to be built
|
||||
add_custom_target( lib-dependencies )
|
||||
|
||||
if( KICAD_BUILD_STATIC OR KICAD_BUILD_DYNAMIC )
|
||||
|
||||
# This should be built in all cases, if swig exec is not avaiable
|
||||
# will be impossible also enable SCRIPTING being for PCBNEW required immediately
|
||||
|
||||
include( download_pcre )
|
||||
include( download_swig )
|
||||
|
||||
|
||||
#set(CMAKE_FIND_LIBRARY_SUFFIXES ".a;.so;.dylib;.dll")
|
||||
|
||||
if( KICAD_BUILD_STATIC AND KICAD_BUILD_DYNAMIC )
|
||||
message(FATAL_ERROR "You can't build STATIC and DYNAMIC together")
|
||||
endif()
|
||||
|
||||
if( KICAD_BUILD_STATIC )
|
||||
message(STATUS "KICAD_BUILD_STATIC set")
|
||||
if( KICAD_SCRIPTING OR KICAD_SCRIPTING_WXPYTHON OR KICAD_SCRIPTING_MODULES )
|
||||
message(FATAL_ERROR "KICAD_SCRIPTING* is not supported with KICAD_BUILD_STATIC, please select KICAD_BUILD_DYNAMIC" )
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if( KICAD_BUILD_DYNAMIC )
|
||||
message(STATUS "KICAD_BUILD_DYNAMIC set")
|
||||
endif()
|
||||
|
||||
|
||||
if( KICAD_SCRIPTING OR KICAD_SCRIPTING_WXPYTHON OR KICAD_SCRIPTING_MODULES )
|
||||
|
||||
message(STATUS "Scripting ENABLED")
|
||||
include( download_wxpython )
|
||||
|
||||
set( SWIG_EXECUTABLE ${SWIG_ROOT}/bin/swig )
|
||||
set( SWIG_INCLUDE ${SWIG_ROOT}/include )
|
||||
set( PYTHON_DEST ${LIBWXPYTHON_ROOT}/wxPython/lib/python2.6/site-packages )
|
||||
|
||||
if( NOT EXISTS ${SWIG_EXECUTABLE} )
|
||||
set(KICAD_SCRIPTING CACHE OFF FORCE "Disabling KICAD_SCRIPTING")
|
||||
message( STATUS "KICAD_SCRIPTING Enabled but SWIG not found, please disable and before reenabling execute: make swig")
|
||||
message( FATAL_ERROR "Missing SWIG!")
|
||||
endif()
|
||||
message(STATUS "SWIG_EXECUTABLE: ${SWIG_EXECUTABLE}")
|
||||
|
||||
set( PYTHON_DEST ${LIBWXPYTHON_ROOT}/wxPython/lib/python2.6/site-packages )
|
||||
|
||||
set(wxWidgets_BIN_DIR ${LIBWXPYTHON_ROOT}/bin/wxrc )
|
||||
set(wxWidgets_CONFIG_EXECUTABLE ${LIBWXPYTHON_ROOT}/bin/wx-config )
|
||||
set(wxWidgets_INCLUDE_DIRS ${LIBWXPYTHON_ROOT}/include/wx-3.0 )
|
||||
set(wxWidgets_LIBRARY_DIRS ${LIBWXPYTHON_ROOT}/lib )
|
||||
|
||||
add_dependencies( lib-dependencies libwxpython )
|
||||
add_dependencies( lib-dependencies swig )
|
||||
|
||||
else()
|
||||
include( download_wxwidgets )
|
||||
add_dependencies( lib-dependencies libwx )
|
||||
endif()
|
||||
|
||||
include( download_libpng )
|
||||
|
||||
include( download_pkgconfig )
|
||||
set( PKG_CONFIG_EXECUTABLE "${PKGCONFIG_ROOT}/bin/pkg-config" )
|
||||
include( download_glew )
|
||||
set( GLEW_GLEW_LIBRARY "${GLEW_ROOT}/lib/libGLEW.a" )
|
||||
set( GLEW_INCLUDE_DIR "${GLEW_ROOT}/include" )
|
||||
include( download_pixman )
|
||||
set( PIXMAN_LIBRARY "${PIXMAN_ROOT}/lib/libpixman-1.a" )
|
||||
include( download_cairo )
|
||||
set( CAIRO_INCLUDE_DIR "${CAIRO_ROOT}/include/cairo" )
|
||||
set( CAIRO_LIBRARY "${CAIRO_ROOT}/lib/libcairo.a" )
|
||||
|
||||
add_dependencies( lib-dependencies boost )
|
||||
add_dependencies( lib-dependencies cairo )
|
||||
add_dependencies( lib-dependencies libpng )
|
||||
add_dependencies( lib-dependencies pixman )
|
||||
add_dependencies( lib-dependencies pkgconfig )
|
||||
|
||||
if( KICAD_BUILD_DYNAMIC AND APPLE )
|
||||
add_custom_target( osx_fix_bundles ALL DEPENDS cvpcb eeschema gerbview kicad pcbnew bitmap2component pcb_calculator pl_editor)
|
||||
add_custom_command(TARGET osx_fix_bundles POST_BUILD COMMAND ${PROJECT_SOURCE_DIR}/scripts/osx_fixbundle.sh ${PROJECT_SOURCE_DIR} COMMENT "Migrating dylibs to bundles")
|
||||
endif()
|
||||
|
||||
endif( KICAD_BUILD_STATIC OR KICAD_BUILD_DYNAMIC)
|
||||
|
||||
#####################
|
||||
# Find GLEW library #
|
||||
#####################
|
||||
if( NOT GLEW_FOUND )
|
||||
find_package( GLEW )
|
||||
check_find_package_result( GLEW_FOUND "GLEW" )
|
||||
endif()
|
||||
find_package(GLEW)
|
||||
check_find_package_result(GLEW_FOUND "GLEW")
|
||||
|
||||
######################
|
||||
# Find Cairo library #
|
||||
######################
|
||||
if( NOT CAIRO_FOUND )
|
||||
find_package( Cairo 1.8.1 QUIET )
|
||||
check_find_package_result( CAIRO_FOUND "Cairo" )
|
||||
endif()
|
||||
find_package(Cairo 1.8.1 QUIET)
|
||||
check_find_package_result(CAIRO_FOUND "Cairo")
|
||||
|
||||
# Download boost and possibly build parts of it
|
||||
#################################################
|
||||
if( KICAD_SKIP_BOOST )
|
||||
find_package( Boost 1.54.0 REQUIRED COMPONENTS context date_time filesystem iostreams locale
|
||||
program_options regex system thread )
|
||||
include( download_boost )
|
||||
|
||||
if( NOT Boost_FOUND )
|
||||
message( FATAL_ERROR "Boost 1.54+ libraries are required." )
|
||||
endif()
|
||||
|
||||
add_custom_target( boost ) # it is required to meet some further dependencies
|
||||
|
||||
message( WARNING "
|
||||
WARNING: You decided to skip building boost library.
|
||||
KiCad developers strongly advise you to build the bundled boost library, as it is known to work with KiCad.
|
||||
Other versions may contain bugs that may result in KiCad errors." )
|
||||
else()
|
||||
include( download_boost )
|
||||
endif()
|
||||
|
||||
##########################
|
||||
# Find wxWidgets library #
|
||||
@@ -500,20 +281,14 @@ endif()
|
||||
# application. You can figure out what libraries you need here;
|
||||
# http://www.wxwidgets.org/manuals/2.8/wx_librarieslist.html
|
||||
|
||||
# See line 41 of CMakeModules/FindwxWidgets.cmake
|
||||
set( wxWidgets_CONFIG_OPTIONS --static=no )
|
||||
|
||||
# On Apple only wxwidgets 2.9 or higher doesn't need to find aui part of base
|
||||
# Seems no more needed on wx-3
|
||||
if( APPLE AND ( KICAD_SCRIPTING OR KICAD_SCRIPTING_MODULES OR KICAD_SCRIPTING_WXPYTHON) )
|
||||
if( APPLE )
|
||||
find_package( wxWidgets COMPONENTS gl adv html core net base xml QUIET )
|
||||
else()
|
||||
else( APPLE )
|
||||
find_package( wxWidgets COMPONENTS gl aui adv html core net base xml QUIET )
|
||||
endif()
|
||||
endif( APPLE )
|
||||
check_find_package_result( wxWidgets_FOUND "wxWidgets" )
|
||||
|
||||
if( NOT (KICAD_BUILD_STATIC OR KICAD_BUILD_DYNAMIC) )
|
||||
check_find_package_result( wxWidgets_FOUND "wxWidgets" )
|
||||
endif()
|
||||
|
||||
# Include wxWidgets macros.
|
||||
include( ${wxWidgets_USE_FILE} )
|
||||
@@ -554,25 +329,10 @@ set( INC_AFTER
|
||||
|
||||
# Find Python and other scripting resources
|
||||
if( KICAD_SCRIPTING OR KICAD_SCRIPTING_MODULES )
|
||||
|
||||
if( APPLE )
|
||||
set( PYTHON_LIBRARY /System/Library/Frameworks/Python.framework/Versions/2.6/Python )
|
||||
set( PYTHON_INCLUDE_DIR /System/Library/Frameworks/Python.framework/Versions//2.6/include/python2.6 )
|
||||
set( PythonInterp_FIND_VERSION 2.6 )
|
||||
set( PythonLibs_FIND_VERSION 2.6 )
|
||||
endif()
|
||||
|
||||
# force a python version < 3.0
|
||||
set( PythonInterp_FIND_VERSION 2.6)
|
||||
set( PythonLibs_FIND_VERSION 2.6 )
|
||||
|
||||
set( PythonInterp_FIND_VERSION )
|
||||
find_package( PythonInterp )
|
||||
|
||||
check_find_package_result( PYTHONINTERP_FOUND "Python Interpreter" )
|
||||
|
||||
if( NOT PYTHON_VERSION_MAJOR EQUAL 2 )
|
||||
message( FATAL_ERROR "Python 2.x is required." )
|
||||
endif()
|
||||
# Get the correct Python site package install path from the Python interpreter found by
|
||||
# FindPythonInterp unless the user specifically defined a custom path.
|
||||
if( NOT PYTHON_SITE_PACKAGE_PATH )
|
||||
@@ -590,7 +350,7 @@ if( KICAD_SCRIPTING OR KICAD_SCRIPTING_MODULES )
|
||||
mark_as_advanced( PYTHON_DEST )
|
||||
message( STATUS "Python module install path: ${PYTHON_DEST}" )
|
||||
|
||||
find_package( PythonLibs 2.6 )
|
||||
find_package( PythonLibs )
|
||||
|
||||
#message( STATUS "PYTHON_INCLUDE_DIRS:${PYTHON_INCLUDE_DIRS}" )
|
||||
|
||||
@@ -632,18 +392,14 @@ add_subdirectory( 3d-viewer )
|
||||
add_subdirectory( cvpcb )
|
||||
add_subdirectory( eeschema )
|
||||
add_subdirectory( gerbview )
|
||||
add_subdirectory( lib_dxf )
|
||||
add_subdirectory( kicad )
|
||||
add_subdirectory( pcbnew )
|
||||
add_subdirectory( polygon )
|
||||
add_subdirectory( pagelayout_editor )
|
||||
add_subdirectory( potrace )
|
||||
add_subdirectory( bitmap2component )
|
||||
add_subdirectory( pcb_calculator )
|
||||
add_subdirectory( kicad ) # should follow pcbnew, eeschema
|
||||
add_subdirectory( tools )
|
||||
add_subdirectory( utils )
|
||||
add_subdirectory( qa )
|
||||
|
||||
#add_subdirectory( new )
|
||||
|
||||
|
||||
@@ -659,25 +415,8 @@ add_dependencies( 3d-viewer boost )
|
||||
add_dependencies( pcad2kicadpcb boost )
|
||||
add_dependencies( polygon boost )
|
||||
add_dependencies( pl_editor boost )
|
||||
add_dependencies( pnsrouter boost )
|
||||
|
||||
|
||||
if ( KICAD_BUILD_STATIC OR KICAD_BUILD_DYNAMIC )
|
||||
add_dependencies( pcbnew lib-dependencies )
|
||||
add_dependencies( eeschema lib-dependencies )
|
||||
add_dependencies( cvpcb lib-dependencies )
|
||||
add_dependencies( common lib-dependencies )
|
||||
add_dependencies( gal lib-dependencies )
|
||||
add_dependencies( pcbcommon lib-dependencies )
|
||||
add_dependencies( 3d-viewer lib-dependencies )
|
||||
add_dependencies( pcad2kicadpcb lib-dependencies )
|
||||
add_dependencies( pl_editor lib-dependencies )
|
||||
add_dependencies( pnsrouter lib-dependencies )
|
||||
endif()
|
||||
|
||||
if ( KICAD_BUILD_DYNAMIC )
|
||||
endif()
|
||||
|
||||
#############
|
||||
# Resources #
|
||||
#############
|
||||
@@ -696,34 +435,26 @@ if( DOXYGEN_FOUND )
|
||||
DEPENDS Doxyfile
|
||||
COMMENT "building doxygen docs into directory Documentation/doxygen/html"
|
||||
)
|
||||
add_custom_target( dev-docs
|
||||
${CMAKE_COMMAND} -E remove_directory Documentation/development/doxygen
|
||||
COMMAND ${DOXYGEN_EXECUTABLE}
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/Documentation/development
|
||||
DEPENDS Doxyfile
|
||||
COMMENT "building developer's resource docs into directory Documentation/development/doxygen/html"
|
||||
)
|
||||
else()
|
||||
message( STATUS "WARNING: Doxygen not found - doxygen-docs (Source Docs) target not created" )
|
||||
endif()
|
||||
|
||||
|
||||
#================================================
|
||||
# "make uninstall" rules
|
||||
# make uninstall rules
|
||||
#================================================
|
||||
configure_file(
|
||||
"${CMAKE_MODULE_PATH}/cmake_uninstall.cmake.in"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
|
||||
IMMEDIATE @ONLY )
|
||||
"${CMAKE_MODULE_PATH}/cmake_uninstall.cmake.in"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
|
||||
IMMEDIATE @ONLY )
|
||||
|
||||
add_custom_target( uninstall
|
||||
"${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" )
|
||||
"${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" )
|
||||
|
||||
|
||||
#================================================
|
||||
# Installation
|
||||
# Installation parameters
|
||||
#================================================
|
||||
|
||||
install( FILES INSTALL.txt
|
||||
DESTINATION ${KICAD_DOCS}
|
||||
COMPONENT resources )
|
||||
@@ -737,63 +468,45 @@ install( FILES resources/freeroute.jnlp
|
||||
###
|
||||
if( UNIX )
|
||||
install( DIRECTORY scripts
|
||||
DESTINATION ${KICAD_DOCS}
|
||||
COMPONENT resources
|
||||
)
|
||||
DESTINATION ${KICAD_DOCS}
|
||||
COMPONENT resources
|
||||
PATTERN ".svn" EXCLUDE )
|
||||
endif()
|
||||
|
||||
###
|
||||
# FreeDesktop .desktop and MIME resources
|
||||
###
|
||||
if( UNIX )
|
||||
|
||||
# Set paths
|
||||
set( UNIX_MIME_DIR resources/linux/mime )
|
||||
set( UNIX_MIMELNK_FILES ${UNIX_MIME_DIR}/mimelnk )
|
||||
set( UNIX_MIME_FILES ${UNIX_MIME_DIR}/mime )
|
||||
set( UNIX_ICON_FILES ${UNIX_MIME_DIR}/icons )
|
||||
set( UNIX_ICONS_FILES ${UNIX_MIME_DIR}/icons )
|
||||
set( UNIX_APPLICATIONS_FILES ${UNIX_MIME_DIR}/applications )
|
||||
|
||||
# Install Mimelnk directory
|
||||
install( DIRECTORY ${UNIX_MIMELNK_FILES}
|
||||
DESTINATION ${CMAKE_INSTALL_PREFIX}/share
|
||||
COMPONENT resources
|
||||
)
|
||||
PATTERN ".svn" EXCLUDE )
|
||||
|
||||
# Install Mime directory
|
||||
install( DIRECTORY ${UNIX_ICON_FILES}
|
||||
install( DIRECTORY ${UNIX_ICONS_FILES}
|
||||
DESTINATION ${CMAKE_INSTALL_PREFIX}/share
|
||||
COMPONENT resources
|
||||
)
|
||||
PATTERN ".svn" EXCLUDE )
|
||||
|
||||
# Install Icons
|
||||
install( DIRECTORY ${UNIX_MIME_FILES}
|
||||
DESTINATION ${CMAKE_INSTALL_PREFIX}/share
|
||||
COMPONENT resources
|
||||
)
|
||||
PATTERN ".svn" EXCLUDE )
|
||||
|
||||
# Install Applications directory (.desktop files)
|
||||
install( DIRECTORY ${UNIX_APPLICATIONS_FILES}
|
||||
DESTINATION ${CMAKE_INSTALL_PREFIX}/share
|
||||
COMPONENT resources
|
||||
)
|
||||
PATTERN ".svn" EXCLUDE )
|
||||
endif()
|
||||
|
||||
#include( CTest )
|
||||
|
||||
|
||||
if( UNIX AND NOT APPLE )
|
||||
|
||||
# Create a *.deb file:
|
||||
set( CPACK_GENERATOR "DEB" )
|
||||
set( CPACK_DEBIAN_PACKAGE_MAINTAINER "http://launchpad.net/kicad" )
|
||||
|
||||
set( CPACK_PACKAGE_VERSION_MAJOR 1 )
|
||||
set( CPACK_PACKAGE_VERSION_MINOR 0 )
|
||||
set( CPACK_PACKAGE_VERSION_PATCH 0 )
|
||||
#set( CPACK_PACKAGE_CONTACT Firstname Lastname <email@company.com> )
|
||||
set( CPACK_PACKAGE_DESCRIPTION_SUMMARY "KiCad built by CMake build system." )
|
||||
|
||||
include( CPack )
|
||||
|
||||
endif()
|
||||
include( CTest )
|
||||
|
||||
@@ -30,15 +30,8 @@ macro( create_bzr_version_header )
|
||||
set( _Bazaar_SAVED_LC_ALL "$ENV{LC_ALL}" )
|
||||
set( ENV{LC_ALL} C )
|
||||
|
||||
# Get the tree revison
|
||||
execute_process( COMMAND
|
||||
${Bazaar_EXECUTABLE} revno --tree ${PROJECT_SOURCE_DIR}
|
||||
OUTPUT_VARIABLE _bazaar_TREE_DATE
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
|
||||
# Get more info about that revision
|
||||
execute_process( COMMAND
|
||||
${Bazaar_EXECUTABLE} log -r${_bazaar_TREE_DATE} ${PROJECT_SOURCE_DIR}
|
||||
${Bazaar_EXECUTABLE} log -r-1 ${PROJECT_SOURCE_DIR}
|
||||
OUTPUT_VARIABLE _bazaar_LAST_CHANGE_LOG
|
||||
ERROR_VARIABLE _bazaar_log_error
|
||||
RESULT_VARIABLE _bazaar_log_result
|
||||
@@ -63,7 +56,11 @@ macro( create_bzr_version_header )
|
||||
if( Kicad_REPO_LAST_CHANGED_DATE )
|
||||
string( REGEX REPLACE "^([0-9]+)\\-([0-9]+)\\-([0-9]+)" "\\1-\\2-\\3"
|
||||
_kicad_bzr_date ${Kicad_REPO_LAST_CHANGED_DATE} )
|
||||
set( KICAD_BUILD_VERSION "(${_kicad_bzr_date} BZR ${Kicad_REPO_REVISION})" )
|
||||
if( KICAD_GOST )
|
||||
set( KICAD_BUILD_VERSION "(${_kicad_bzr_date} BZR ${Kicad_REPO_REVISION} GOST)" )
|
||||
else( KICAD_GOST )
|
||||
set( KICAD_BUILD_VERSION "(${_kicad_bzr_date} BZR ${Kicad_REPO_REVISION})" )
|
||||
endif( KICAD_GOST )
|
||||
|
||||
# Definition to conditionally use date and revision returned from the
|
||||
# Bazaar log command instead of hand coded date and revision in
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# Copyright (c) 2009 Boudewijn Rempt <boud@valdyas.org>
|
||||
#
|
||||
# Redistribution and use is allowed according to the terms of the BSD license.
|
||||
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
|
||||
#
|
||||
# Copyright (c) 2009 Boudewijn Rempt <boud@valdyas.org>
|
||||
#
|
||||
# Redistribution and use is allowed according to the terms of the BSD license.
|
||||
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
|
||||
#
|
||||
# - try to find glew library and include files
|
||||
# GLEW_INCLUDE_DIR, where to find GL/glew.h, etc.
|
||||
# GLEW_LIBRARIES, the libraries to link against
|
||||
@@ -24,7 +24,7 @@ IF (WIN32)
|
||||
|
||||
|
||||
ELSE(CYGWIN)
|
||||
|
||||
|
||||
FIND_PATH( GLEW_INCLUDE_DIR GL/glew.h
|
||||
$ENV{GLEW_ROOT_PATH}/include
|
||||
)
|
||||
@@ -67,8 +67,6 @@ ELSE (WIN32)
|
||||
FIND_LIBRARY( GLEW_GLEW_LIBRARY GLEW
|
||||
/usr/openwin/lib
|
||||
/usr/X11R6/lib
|
||||
/usr/lib
|
||||
/usr/lib/x86_64-linux-gnu
|
||||
)
|
||||
|
||||
ENDIF (APPLE)
|
||||
|
||||
@@ -144,10 +144,12 @@
|
||||
# Helper macro to control the debugging output globally. There are
|
||||
# two versions for controlling how verbose your output should be.
|
||||
MACRO(DBG_MSG _MSG)
|
||||
# MESSAGE(WARNING "${_MSG}")
|
||||
# MESSAGE(STATUS
|
||||
# "${CMAKE_CURRENT_LIST_FILE}(${CMAKE_CURRENT_LIST_LINE}): ${_MSG}")
|
||||
ENDMACRO(DBG_MSG)
|
||||
MACRO(DBG_MSG_V _MSG)
|
||||
# MESSAGE(WARNING "${_MSG}")
|
||||
# MESSAGE(STATUS
|
||||
# "${CMAKE_CURRENT_LIST_FILE}(${CMAKE_CURRENT_LIST_LINE}): ${_MSG}")
|
||||
ENDMACRO(DBG_MSG_V)
|
||||
|
||||
# Clear return values in case the module is loaded more than once.
|
||||
@@ -199,24 +201,18 @@ ENDIF(EXISTS "${wxWidgets_CURRENT_LIST_DIR}/UsewxWidgets.cmake")
|
||||
|
||||
#=====================================================================
|
||||
#=====================================================================
|
||||
|
||||
|
||||
IF(WIN32 AND NOT CYGWIN AND NOT MSYS AND NOT CMAKE_HOST_UNIX )
|
||||
DBG_MSG( "setting win32 style" )
|
||||
IF(WIN32 AND NOT CYGWIN AND NOT MSYS)
|
||||
SET(wxWidgets_FIND_STYLE "win32")
|
||||
ELSE()
|
||||
IF(CMAKE_HOST_UNIX OR MSYS)
|
||||
DBG_MSG( "unix style" )
|
||||
ELSE(WIN32 AND NOT CYGWIN AND NOT MSYS)
|
||||
IF(UNIX OR MSYS)
|
||||
SET(wxWidgets_FIND_STYLE "unix")
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
ENDIF(UNIX OR MSYS)
|
||||
ENDIF(WIN32 AND NOT CYGWIN AND NOT MSYS)
|
||||
|
||||
#=====================================================================
|
||||
# WIN32_FIND_STYLE
|
||||
#=====================================================================
|
||||
IF(wxWidgets_FIND_STYLE STREQUAL "win32")
|
||||
DBG_MSG("Using win32 path")
|
||||
|
||||
# Useful common wx libs needed by almost all components.
|
||||
SET(wxWidgets_COMMON_LIBRARIES png tiff jpeg zlib regex expat)
|
||||
|
||||
@@ -275,13 +271,9 @@ IF(wxWidgets_FIND_STYLE STREQUAL "win32")
|
||||
MARK_AS_ADVANCED(WX_${LIB}${_DBG})
|
||||
ENDFOREACH(LIB)
|
||||
|
||||
DBG_MSG( "WX_LIB_DIR:${WX_LIB_DIR}" )
|
||||
|
||||
# Find wxWidgets multilib base libraries.
|
||||
FIND_LIBRARY(WX_base${_DBG}
|
||||
NAMES
|
||||
wxbase31${_UCD}${_DBG}
|
||||
wxbase30${_UCD}${_DBG}
|
||||
wxbase29${_UCD}${_DBG}
|
||||
wxbase28${_UCD}${_DBG}
|
||||
wxbase27${_UCD}${_DBG}
|
||||
@@ -294,8 +286,6 @@ IF(wxWidgets_FIND_STYLE STREQUAL "win32")
|
||||
FOREACH(LIB net odbc xml)
|
||||
FIND_LIBRARY(WX_${LIB}${_DBG}
|
||||
NAMES
|
||||
wxbase31${_UCD}${_DBG}_${LIB}
|
||||
wxbase30${_UCD}${_DBG}_${LIB}
|
||||
wxbase29${_UCD}${_DBG}_${LIB}
|
||||
wxbase28${_UCD}${_DBG}_${LIB}
|
||||
wxbase27${_UCD}${_DBG}_${LIB}
|
||||
@@ -310,8 +300,6 @@ IF(wxWidgets_FIND_STYLE STREQUAL "win32")
|
||||
# Find wxWidgets monolithic library.
|
||||
FIND_LIBRARY(WX_mono${_DBG}
|
||||
NAMES
|
||||
wxmsw${_UNV}31${_UCD}${_DBG}
|
||||
wxmsw${_UNV}30${_UCD}${_DBG}
|
||||
wxmsw${_UNV}29${_UCD}${_DBG}
|
||||
wxmsw${_UNV}28${_UCD}${_DBG}
|
||||
wxmsw${_UNV}27${_UCD}${_DBG}
|
||||
@@ -327,8 +315,6 @@ IF(wxWidgets_FIND_STYLE STREQUAL "win32")
|
||||
stc ribbon propgrid)
|
||||
FIND_LIBRARY(WX_${LIB}${_DBG}
|
||||
NAMES
|
||||
wxmsw${_UNV}31${_UCD}${_DBG}_${LIB}
|
||||
wxmsw${_UNV}30${_UCD}${_DBG}_${LIB}
|
||||
wxmsw${_UNV}29${_UCD}${_DBG}_${LIB}
|
||||
wxmsw${_UNV}28${_UCD}${_DBG}_${LIB}
|
||||
wxmsw${_UNV}27${_UCD}${_DBG}_${LIB}
|
||||
@@ -442,9 +428,6 @@ IF(wxWidgets_FIND_STYLE STREQUAL "win32")
|
||||
D:/
|
||||
$ENV{ProgramFiles}
|
||||
PATH_SUFFIXES
|
||||
wxWidgets-3.1.0
|
||||
wxWidgets-3.0.0
|
||||
wxWidgets-2.9.5
|
||||
wxWidgets-2.9.4
|
||||
wxWidgets-2.9.3
|
||||
wxWidgets-2.9.2
|
||||
@@ -480,8 +463,6 @@ IF(wxWidgets_FIND_STYLE STREQUAL "win32")
|
||||
|
||||
# If wxWidgets_ROOT_DIR changed, clear lib dir.
|
||||
IF(NOT WX_ROOT_DIR STREQUAL wxWidgets_ROOT_DIR)
|
||||
DBG_MSG( "WX_ROOT_DIR != wxWidgets_ROOT_DIR" )
|
||||
|
||||
SET(WX_ROOT_DIR ${wxWidgets_ROOT_DIR}
|
||||
CACHE INTERNAL "wxWidgets_ROOT_DIR")
|
||||
SET(wxWidgets_LIB_DIR "wxWidgets_LIB_DIR-NOTFOUND"
|
||||
@@ -489,19 +470,15 @@ IF(wxWidgets_FIND_STYLE STREQUAL "win32")
|
||||
ENDIF(NOT WX_ROOT_DIR STREQUAL wxWidgets_ROOT_DIR)
|
||||
|
||||
IF(WX_ROOT_DIR)
|
||||
DBG_MSG( "WX_ROOT_DIR == wxWidgets_ROOT_DIR" )
|
||||
|
||||
# Select one default tree inside the already determined wx tree.
|
||||
# Prefer static/shared order usually consistent with build
|
||||
# settings.
|
||||
IF(MINGW)
|
||||
DBG_MSG( "MINGW" )
|
||||
SET(WX_LIB_DIR_PREFIX gcc)
|
||||
ELSE(MINGW)
|
||||
SET(WX_LIB_DIR_PREFIX vc)
|
||||
ENDIF(MINGW)
|
||||
IF(BUILD_SHARED_LIBS)
|
||||
DBG_MSG( "BUILD_SHARED_LIBS" )
|
||||
FIND_PATH(wxWidgets_LIB_DIR
|
||||
NAMES
|
||||
msw/wx/setup.h
|
||||
@@ -519,7 +496,6 @@ IF(wxWidgets_FIND_STYLE STREQUAL "win32")
|
||||
NO_DEFAULT_PATH
|
||||
)
|
||||
ELSE(BUILD_SHARED_LIBS)
|
||||
DBG_MSG( "!BUILD_SHARED_LIBS WX_LIB_DIR:${WX_LIB_DIR}" )
|
||||
FIND_PATH(wxWidgets_LIB_DIR
|
||||
NAMES
|
||||
msw/wx/setup.h
|
||||
@@ -637,11 +613,7 @@ IF(wxWidgets_FIND_STYLE STREQUAL "win32")
|
||||
# UNIX_FIND_STYLE
|
||||
#=====================================================================
|
||||
ELSE(wxWidgets_FIND_STYLE STREQUAL "win32")
|
||||
DBG_MSG("NOT win32 path")
|
||||
|
||||
IF(wxWidgets_FIND_STYLE STREQUAL "unix")
|
||||
DBG_MSG("unix find style")
|
||||
|
||||
#-----------------------------------------------------------------
|
||||
# UNIX: Helper MACROS
|
||||
#-----------------------------------------------------------------
|
||||
|
||||
@@ -55,17 +55,3 @@ function( make_lexer inputFile outHeaderFile outCppFile enum )
|
||||
|
||||
endfunction()
|
||||
|
||||
|
||||
# Is a macro instead of function so there's a higher probability that the
|
||||
# scope of CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA is global
|
||||
macro( add_conffiles )
|
||||
if( ${ARGC} STREQUAL "0" )
|
||||
# remove the file when user passes no arguments, which he should do exactly once at top
|
||||
file( REMOVE ${CMAKE_CURRENT_BINARY_DIR}/conffiles )
|
||||
else()
|
||||
foreach( filename ${ARGV} )
|
||||
file( APPEND ${CMAKE_CURRENT_BINARY_DIR}/conffiles "${filename}\n" )
|
||||
endforeach()
|
||||
set( CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA ${CMAKE_CURRENT_BINARY_DIR}/conffiles )
|
||||
endif()
|
||||
endmacro( add_conffiles )
|
||||
|
||||
@@ -36,21 +36,17 @@
|
||||
# Consider it a benchmark when writing your own feature tests.
|
||||
#
|
||||
|
||||
macro( perform_feature_checks )
|
||||
macro(perform_feature_checks)
|
||||
|
||||
include( CheckIncludeFile )
|
||||
#include( CheckFunctionExists )
|
||||
include( CheckLibraryExists )
|
||||
include( CheckSymbolExists )
|
||||
include( CheckIncludeFileCXX )
|
||||
include( CheckCXXSymbolExists )
|
||||
include( CheckCXXSourceCompiles )
|
||||
include( CheckCXXCompilerFlag )
|
||||
include(CheckIncludeFile)
|
||||
#include(CheckFunctionExists)
|
||||
include(CheckLibraryExists)
|
||||
include(CheckSymbolExists)
|
||||
include(CheckIncludeFileCXX)
|
||||
include(CheckCXXSymbolExists)
|
||||
include(CheckCXXSourceCompiles)
|
||||
|
||||
check_cxx_compiler_flag( -fvisibility=hidden GXX_HAS_VISIBILITY_FLAG )
|
||||
check_cxx_compiler_flag( -fvisibility-inlines-hidden GXX_HAS_VISIBILITY_INLINES_FLAG )
|
||||
|
||||
check_include_file( "malloc.h" HAVE_MALLOC_H )
|
||||
check_include_file("malloc.h" HAVE_MALLOC_H)
|
||||
|
||||
# FIXME: Visual C++ does not support the "not" keyword natively. It is
|
||||
# defined as a macro in <iso646.h>. There should be a cmake macro
|
||||
@@ -58,7 +54,7 @@ macro( perform_feature_checks )
|
||||
# then check for <iso646.h> and include it. Although it doesn't
|
||||
# appear to cause any problems with other compilers, that doesn't
|
||||
# mean won't fail somewhere down the line.
|
||||
check_include_file( "iso646.h" HAVE_ISO646_H )
|
||||
check_include_file("iso646.h" HAVE_ISO646_H)
|
||||
|
||||
# The STDINT header file test is required because MinGW under Windows
|
||||
# doesn't define HAVE_STDINT_H even though it does have it.
|
||||
@@ -66,52 +62,56 @@ macro( perform_feature_checks )
|
||||
# We need to add it to the global compiler definitions as config.h is not
|
||||
# included in pyport.h which is where the problem ocurrs without this
|
||||
# fix.
|
||||
check_include_file( "stdint.h" HAVE_STDINT_H )
|
||||
|
||||
check_include_file("stdint.h" HAVE_STDINT_H)
|
||||
|
||||
if( HAVE_STDINT_H )
|
||||
add_definitions( -DHAVE_STDINT_H )
|
||||
endif()
|
||||
|
||||
|
||||
# no place is this used, and "HAVE_STRINGS_H", if present in config.h then
|
||||
# conflicts with /usr/include/python2.6/Python.h. Please rename the macro if
|
||||
# re-introduce this.
|
||||
# check_include_file("strings.h" HAVE_STRINGS_H)
|
||||
|
||||
check_symbol_exists( strcasecmp "string.h" HAVE_STRCASECMP )
|
||||
check_symbol_exists( strcasecmp "strings.h" HAVE_STRCASECMP )
|
||||
check_symbol_exists( strncasecmp "string.h" HAVE_STRNCASECMP )
|
||||
check_symbol_exists( strncasecmp "strings.h" HAVE_STRNCASECMP )
|
||||
check_symbol_exists( strtok_r "string.h" HAVE_STRTOKR )
|
||||
check_symbol_exists(strcasecmp "string.h" HAVE_STRCASECMP)
|
||||
check_symbol_exists(strcasecmp "strings.h" HAVE_STRCASECMP)
|
||||
check_symbol_exists(strncasecmp "string.h" HAVE_STRNCASECMP)
|
||||
check_symbol_exists(strncasecmp "strings.h" HAVE_STRNCASECMP)
|
||||
|
||||
# Some platforms define malloc and free in malloc.h instead of stdlib.h.
|
||||
check_symbol_exists( malloc "stdlib.h" MALLOC_IN_STDLIB_H )
|
||||
check_symbol_exists(malloc "stdlib.h" MALLOC_IN_STDLIB_H)
|
||||
|
||||
# Use ISO C++ conformant names to disable Visual C++ warnings.
|
||||
check_symbol_exists(_stricmp "string.h" HAVE_ISO_STRICMP)
|
||||
check_symbol_exists(_strnicmp "string.h" HAVE_ISO_STRNICMP)
|
||||
check_symbol_exists(_snprintf "stdio.h" HAVE_ISO_SNPRINTF)
|
||||
|
||||
# Check for functions in math.h.
|
||||
check_include_file( "math.h" HAVE_MATH_H )
|
||||
check_include_file("math.h" HAVE_MATH_H)
|
||||
check_symbol_exists(_hypot "math.h" HAVE_ISO_HYPOT)
|
||||
|
||||
# Check for functions in C++ cmath.
|
||||
check_include_file_cxx( cmath HAVE_CXX_CMATH )
|
||||
check_cxx_symbol_exists( asinh cmath HAVE_CMATH_ASINH )
|
||||
check_cxx_symbol_exists( acosh cmath HAVE_CMATH_ACOSH )
|
||||
check_cxx_symbol_exists( atanh cmath HAVE_CMATH_ATANH )
|
||||
check_include_file_cxx(cmath HAVE_CXX_CMATH)
|
||||
check_cxx_symbol_exists(asinh cmath HAVE_CMATH_ASINH )
|
||||
check_cxx_symbol_exists(acosh cmath HAVE_CMATH_ACOSH )
|
||||
check_cxx_symbol_exists(atanh cmath HAVE_CMATH_ATANH )
|
||||
|
||||
# CMakes check_cxx_symbol_exists() doesn't work for templates so we must create a
|
||||
# small program to verify isinf() exists in cmath.
|
||||
check_cxx_source_compiles( "#include <cmath>\nint main(int argc, char** argv)\n{\n (void)argv;\n std::isinf(1.0); (void)argc;\n return 0;\n}\n" HAVE_CMATH_ISINF )
|
||||
check_cxx_source_compiles( "#include <cmath>\nusing namespace std;\nint main(int argc, char** argv)\n{\n (void)argv;\n isinf(1.0); (void)argc;\n return 0;\n}\n" HAVE_CMATH_ISINF )
|
||||
|
||||
#check_symbol_exists( clock_gettime "time.h" HAVE_CLOCK_GETTIME ) non-standard library, does not work
|
||||
check_library_exists( rt clock_gettime "" HAVE_CLOCK_GETTIME )
|
||||
#check_symbol_exists(clock_gettime "time.h" HAVE_CLOCK_GETTIME) non-standard library, does not work
|
||||
check_library_exists(rt clock_gettime "" HAVE_CLOCK_GETTIME)
|
||||
|
||||
# HAVE_GETTIMEOFDAY is already in use within 2.9 wxWidgets, so use HAVE_GETTIMEOFDAY_FUNC
|
||||
check_symbol_exists( gettimeofday "sys/time.h" HAVE_GETTIMEOFDAY_FUNC )
|
||||
check_symbol_exists(gettimeofday "sys/time.h" HAVE_GETTIMEOFDAY_FUNC)
|
||||
|
||||
# Check for Posix getc_unlocked() for improved performance over getc(). Fall back to
|
||||
# getc() on platforms where getc_unlocked() doesn't exist.
|
||||
check_symbol_exists( getc_unlocked "stdio.h" HAVE_FGETC_NOLOCK )
|
||||
check_symbol_exists(getc_unlocked "stdio.h" HAVE_FGETC_NOLOCK)
|
||||
|
||||
# Generate config.h.
|
||||
configure_file( ${PROJECT_SOURCE_DIR}/CMakeModules/config.h.cmake
|
||||
${CMAKE_BINARY_DIR}/config.h
|
||||
)
|
||||
configure_file(${PROJECT_SOURCE_DIR}/CMakeModules/config.h.cmake
|
||||
${CMAKE_BINARY_DIR}/config.h)
|
||||
|
||||
endmacro( perform_feature_checks )
|
||||
endmacro(perform_feature_checks)
|
||||
|
||||
@@ -24,8 +24,7 @@ file( WRITE ${outputFile} "// Do not edit this file, it is autogenerated by CMak
|
||||
#define SHADER_SRC_H
|
||||
|
||||
const unsigned int shaders_number = ${shadersNumber};
|
||||
const char* shaders_src[] =
|
||||
{\n" )
|
||||
const char *shaders_src[] = {\n" )
|
||||
|
||||
foreach( inputFile ${inputFiles} )
|
||||
# put the input file name into the output file
|
||||
|
||||
@@ -245,7 +245,7 @@ public:
|
||||
* Constructor ( const std::string&, const wxString& )
|
||||
* @param aSExpression is (utf8) text possibly from the clipboard that you want to parse.
|
||||
* @param aSource is a description of the origin of @a aSExpression, such as a filename.
|
||||
* If left empty, then _(\"clipboard\") is used.
|
||||
* If left empty, then _("clipboard") is used.
|
||||
*/
|
||||
${LEXERCLASS}( const std::string& aSExpression, const wxString& aSource = wxEmptyString ) :
|
||||
DSNLEXER( keywords, keyword_count, aSExpression, aSource )
|
||||
|
||||
@@ -8,13 +8,13 @@ string( REGEX REPLACE "\n" ";" files "${files}" )
|
||||
foreach( file ${files} )
|
||||
message( STATUS "Uninstalling \"$ENV{DESTDIR}${file}\"" )
|
||||
if( EXISTS "$ENV{DESTDIR}${file}" )
|
||||
exec_program(
|
||||
EXEC_PROGRAM(
|
||||
"@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\""
|
||||
OUTPUT_VARIABLE rm_out
|
||||
RETURN_VALUE rm_retval
|
||||
)
|
||||
if( NOT "${rm_retval}" STREQUAL "0" )
|
||||
message( STATUS "Problem when removing \"$ENV{DESTDIR}${file}\"" )
|
||||
if( NOT "${rm_retval}" STREQUAL 0 )
|
||||
message( FATAL_ERROR "Problem when removing \"$ENV{DESTDIR}${file}\"" )
|
||||
endif()
|
||||
else()
|
||||
message( STATUS "File \"$ENV{DESTDIR}${file}\" does not exist." )
|
||||
|
||||
+29
-16
@@ -7,11 +7,27 @@
|
||||
|
||||
#cmakedefine HAVE_STRNCASECMP
|
||||
|
||||
#cmakedefine HAVE_STRTOKR // spelled odly to differ from wx's similar test
|
||||
#cmakedefine HAVE_ISO_STRICMP
|
||||
|
||||
#cmakedefine HAVE_ISO_STRNICMP
|
||||
|
||||
#cmakedefine HAVE_ISO_SNPRINTF
|
||||
|
||||
#if defined( HAVE_ISO_SNPRINTF )
|
||||
#define snprintf _snprintf
|
||||
#endif
|
||||
|
||||
|
||||
// Handle platform differences in math.h
|
||||
#cmakedefine HAVE_MATH_H
|
||||
|
||||
#cmakedefine HAVE_ISO_HYPOT
|
||||
|
||||
#if defined( HAVE_ISO_HYPOT )
|
||||
#define hypot _hypot
|
||||
#endif
|
||||
|
||||
|
||||
// Handle platform differences in C++ cmath.
|
||||
#cmakedefine HAVE_CXX_CMATH
|
||||
|
||||
@@ -41,41 +57,38 @@
|
||||
|
||||
#if defined( HAVE_STRCASECMP )
|
||||
#define stricmp strcasecmp
|
||||
#elif defined( HAVE_ISO_STRICMP )
|
||||
#define stricmp _stricmp
|
||||
#endif
|
||||
|
||||
#if defined( HAVE_STRNCASECMP )
|
||||
#define strnicmp strncasecmp
|
||||
#elif defined( HAVE_ISO_STRNICMP )
|
||||
#define strnicmp _strnicmp
|
||||
#endif
|
||||
|
||||
// Use Posix getc_unlocked() instead of getc() when it's available.
|
||||
#cmakedefine HAVE_FGETC_NOLOCK
|
||||
|
||||
// Warning!!! Using wxGraphicContext for rendering is experimental.
|
||||
#cmakedefine USE_WX_GRAPHICS_CONTEXT 1
|
||||
#cmakedefine USE_WX_GRAPHICS_CONTEXT 1
|
||||
|
||||
#cmakedefine USE_IMAGES_IN_MENUS 1
|
||||
#cmakedefine USE_IMAGES_IN_MENUS 1
|
||||
|
||||
/// The legacy file format revision of the *.brd file created by this build
|
||||
#define LEGACY_BOARD_FILE_VERSION 2
|
||||
#define LEGACY_BOARD_FILE_VERSION 2
|
||||
|
||||
/// Definition to compile with Pcbnew footprint library table implementation.
|
||||
#cmakedefine USE_FP_LIB_TABLE
|
||||
|
||||
/// The install prefix defined in CMAKE_INSTALL_PREFIX.
|
||||
#define DEFAULT_INSTALL_PATH "@CMAKE_INSTALL_PREFIX@"
|
||||
#define DEFAULT_INSTALL_PATH "@CMAKE_INSTALL_PREFIX"
|
||||
|
||||
/// Default footprint library install path when installed with `make install`.
|
||||
#define DEFAULT_FP_LIB_PATH "@KICAD_FP_LIB_INSTALL_PATH@"
|
||||
#define DEFAULT_FP_LIB_PATH "@KICAD_FP_LIB_INSTALL_PATH@"
|
||||
|
||||
/// When defined, build the GITHUB_PLUGIN for pcbnew.
|
||||
#cmakedefine BUILD_GITHUB_PLUGIN
|
||||
|
||||
/// When defined, use KIWAY and KIFACE DSOs
|
||||
#cmakedefine USE_KIWAY_DLLS
|
||||
|
||||
/// A file extension with a leading '.' is a suffix, and this one is used on
|
||||
/// top level program modules which implement the KIFACE.
|
||||
#define KIFACE_SUFFIX wxT( "@KIFACE_SUFFIX@" )
|
||||
#define KIFACE_PREFIX wxT( "@KIFACE_PREFIX@" )
|
||||
|
||||
/// Name of repo from which this build came.
|
||||
#define KICAD_REPO_NAME "@KICAD_REPO_NAME@"
|
||||
|
||||
#endif // CONFIG_H_
|
||||
|
||||
@@ -1,65 +0,0 @@
|
||||
# This program source code file is part of KICAD, a free EDA CAD application.
|
||||
#
|
||||
# Copyright (C) 2013 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
|
||||
# Copyright (C) 2013 Kicad Developers, see AUTHORS.txt for contributors.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# 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 General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, you may find one here:
|
||||
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
# or you may search the http://www.gnu.org website for the version 2 license,
|
||||
# or you may write to the Free Software Foundation, Inc.,
|
||||
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
|
||||
|
||||
|
||||
# Download av_http and install into ${PREFIX}, typically in our KiCad source tree.
|
||||
# Assumes include( ExternalProject ) was done inline previous to this file
|
||||
# and that set( DOWNLOAD_DIR ... ) was set in a higher context.
|
||||
|
||||
#-----<configure>-------------------------------------------------------------------------------------
|
||||
|
||||
# soon cmake will have https support, switch to a true download then:
|
||||
#set( AVHTTP_RELEASE ??? )
|
||||
#set( AVHTTP_MD5 ???? ) # re-calc this on every RELEASE change
|
||||
|
||||
#-----</configure>-----------------------------------------------------------------------------------
|
||||
|
||||
|
||||
# Where the library is to be installed.
|
||||
set( PREFIX ${DOWNLOAD_DIR}/avhttp )
|
||||
|
||||
if( KICAD_SKIP_BOOST )
|
||||
set( AVHTTP_DEPEND "" )
|
||||
else()
|
||||
set( AVHTTP_DEPEND "boost" )
|
||||
endif()
|
||||
|
||||
|
||||
# Install the AVHTTP header only library ${PREFIX}
|
||||
ExternalProject_Add( avhttp
|
||||
PREFIX ${PREFIX}
|
||||
DOWNLOAD_DIR ${DOWNLOAD_DIR} # no true download yet
|
||||
|
||||
# grab it from a local zip file for now, cmake caller's source dir
|
||||
URL ${CMAKE_CURRENT_SOURCE_DIR}/avhttp-master.zip
|
||||
DEPENDS ${AVHTTP_DEPEND}
|
||||
|
||||
CONFIGURE_COMMAND ""
|
||||
|
||||
BUILD_COMMAND ""
|
||||
INSTALL_COMMAND ${CMAKE_COMMAND} -E copy_directory <SOURCE_DIR> <INSTALL_DIR>
|
||||
)
|
||||
|
||||
|
||||
set( AVHTTP_INCLUDE_DIR "${PREFIX}/include" CACHE FILEPATH "AVHTTP include directory" )
|
||||
mark_as_advanced( AVHTTP_INCLUDE_DIR )
|
||||
@@ -29,39 +29,36 @@
|
||||
|
||||
#-----<configure>----------------------------------------------------------------
|
||||
|
||||
set( BOOST_RELEASE 1.54.0 )
|
||||
set( BOOST_MD5 15cb8c0803064faef0c4ddf5bc5ca279 ) # re-calc this on every RELEASE change
|
||||
if( false )
|
||||
set( BOOST_RELEASE 1.53.0 )
|
||||
set( BOOST_MD5 a00d22605d5dbcfb4c9936a9b35bc4c2 ) # re-calc this on every RELEASE change
|
||||
else()
|
||||
set( BOOST_RELEASE 1.54.0 )
|
||||
set( BOOST_MD5 15cb8c0803064faef0c4ddf5bc5ca279 ) # re-calc this on every RELEASE change
|
||||
endif()
|
||||
|
||||
# The boost headers [and static libs if built] go here, at the top of KiCad
|
||||
# source tree in boost_root.
|
||||
set( BOOST_ROOT "${PROJECT_SOURCE_DIR}/boost_root" )
|
||||
|
||||
|
||||
# Space separated list which indicates the subset of boost libraries to compile.
|
||||
# Chosen libraries are based on AVHTTP requirements, and possibly
|
||||
# unit_test_framework for its own worth.
|
||||
# tool_manager.cpp -> coroutine -> context (_jump_fcontext) (on OSX)
|
||||
if( BUILD_GITHUB_PLUGIN )
|
||||
# Space separated list which indicates the subset of boost libraries to compile.
|
||||
set( BOOST_LIBS_BUILT
|
||||
#filesystem
|
||||
system
|
||||
#regex
|
||||
#program_options
|
||||
#date_time
|
||||
#thread
|
||||
#exception
|
||||
unit_test_framework
|
||||
)
|
||||
endif()
|
||||
|
||||
set( BOOST_LIBS_BUILT
|
||||
context
|
||||
#coroutine
|
||||
date_time
|
||||
#exception
|
||||
filesystem
|
||||
iostreams
|
||||
locale
|
||||
program_options
|
||||
regex
|
||||
#signals
|
||||
system
|
||||
thread
|
||||
#unit_test_framework
|
||||
)
|
||||
#-----</configure>---------------------------------------------------------------
|
||||
|
||||
if( NOT BZIP2_FOUND )
|
||||
find_package( BZip2 REQUIRED )
|
||||
endif()
|
||||
|
||||
|
||||
string( REGEX REPLACE "\\." "_" BOOST_VERS "${BOOST_RELEASE}" )
|
||||
set( PREFIX ${DOWNLOAD_DIR}/boost_${BOOST_VERS} )
|
||||
@@ -76,223 +73,96 @@ set( PREFIX ${DOWNLOAD_DIR}/boost_${BOOST_VERS} )
|
||||
set( headers_src "${PREFIX}/src/boost/boost" )
|
||||
|
||||
|
||||
# don't look at this:
|
||||
function( set_boost_lib_names libs output )
|
||||
foreach( lib ${libs} )
|
||||
set( fullpath_lib "${BOOST_ROOT}/lib/libboost_${lib}${CMAKE_STATIC_LIBRARY_SUFFIX}" )
|
||||
list( APPEND results ${fullpath_lib} )
|
||||
set( fullpath_lib, "${BOOST_ROOT}/lib/libboost_${lib}.a" )
|
||||
message( STATUS "fullpath_lib:${fullpath_lib}" )
|
||||
set( output ${output} ${fullpath_lib} )
|
||||
endforeach()
|
||||
# set the results into variable represented by output into caller's scope
|
||||
set( ${output} ${results} PARENT_SCOPE )
|
||||
endfunction()
|
||||
|
||||
|
||||
# (BTW "test" yields "unit_test_framework" when passed to bootstrap.sh ).
|
||||
#message( STATUS "BOOST_LIBS_BUILT:${BOOST_LIBS_BUILT}" )
|
||||
string( REPLACE "unit_test_framework" "test" boost_libs_list "${BOOST_LIBS_BUILT}" )
|
||||
#message( STATUS "REPLACE libs_csv:${boost_libs_list}" )
|
||||
if( BUILD_GITHUB_PLUGIN )
|
||||
|
||||
# Default Toolset
|
||||
set( BOOST_TOOLSET "toolset=gcc" )
|
||||
# (BTW "test" yields "unit_test_framework" when passed to bootstrap.{sh,bat} ).
|
||||
message( STATUS "BOOST_LIBS_BUILT:${BOOST_LIBS_BUILT}" )
|
||||
string( REPLACE "unit_test_framework" "test" libs_csv "${BOOST_LIBS_BUILT}" )
|
||||
message( STATUS "REPLACE libs_csv:${libs_csv}" )
|
||||
|
||||
if( KICAD_BUILD_STATIC OR APPLE )
|
||||
set( BOOST_LINKTYPE "link=static" )
|
||||
else()
|
||||
unset( BOOST_LINKTYPE )
|
||||
endif()
|
||||
string( REGEX REPLACE "\\;" "," libs_csv "${libs_csv}" )
|
||||
message( STATUS "libs_csv:${libs_csv}" )
|
||||
|
||||
|
||||
find_program(patch_bin NAMES patch patch.exe)
|
||||
|
||||
if( "${patch_bin}" STREQUAL "patch_bin-NOTFOUND" )
|
||||
set( PATCH_STR_CMD ${PATCH_STR_CMD} )
|
||||
else()
|
||||
set( PATCH_STR_CMD ${patch_bin} -p0 -i )
|
||||
endif()
|
||||
|
||||
|
||||
|
||||
if( MINGW AND NOT CMAKE_HOST_UNIX ) # building for MINGW on windows not UNIX
|
||||
if( MSYS )
|
||||
# The Boost system does not build properly on MSYS using bootstrap.sh. Running
|
||||
# bootstrap.bat with cmd.exe does. It's ugly but it works. At least for Boost
|
||||
# version 1.54.
|
||||
set( bootstrap cmd.exe /c "bootstrap.bat mingw" )
|
||||
if( MINGW )
|
||||
set( bootstrap "bootstart.bat mingw" )
|
||||
else()
|
||||
set( bootstrap ./bootstrap.bat mingw )
|
||||
set( bootstrap bootstrap.sh )
|
||||
endif()
|
||||
|
||||
foreach( lib ${boost_libs_list} )
|
||||
set( b2_libs ${b2_libs} --with-${lib} )
|
||||
endforeach()
|
||||
unset( BOOST_CFLAGS )
|
||||
ExternalProject_Add( boost
|
||||
PREFIX "${PREFIX}"
|
||||
DOWNLOAD_DIR "${DOWNLOAD_DIR}"
|
||||
URL http://downloads.sourceforge.net/project/boost/boost/${BOOST_RELEASE}/boost_${BOOST_VERS}.tar.bz2
|
||||
URL_MD5 ${BOOST_MD5}
|
||||
|
||||
else()
|
||||
string( REGEX REPLACE "\\;" "," libs_csv "${boost_libs_list}" )
|
||||
#message( STATUS "libs_csv:${libs_csv}" )
|
||||
# The patch command executes with the working directory set to <SOURCE_DIR>
|
||||
PATCH_COMMAND bzr patch -p0 "${PROJECT_SOURCE_DIR}/patches/boost.patch"
|
||||
|
||||
set( bootstrap ./bootstrap.sh --with-libraries=${libs_csv} )
|
||||
# pass to *both* C and C++ compilers
|
||||
set( BOOST_CFLAGS "cflags=${PIC_FLAG}" )
|
||||
set( BOOST_CXXFLAGS "cxxflags=${PIC_FLAG}" )
|
||||
set( BOOST_INCLUDE "${BOOST_ROOT}/include" )
|
||||
unset( b2_libs )
|
||||
endif()
|
||||
# [Mis-]use this step to erase all the boost headers and libraries before
|
||||
# replacing them below.
|
||||
UPDATE_COMMAND ${CMAKE_COMMAND} -E remove_directory "${BOOST_ROOT}"
|
||||
|
||||
BINARY_DIR "${PREFIX}/src/boost/"
|
||||
CONFIGURE_COMMAND ${bootstrap}
|
||||
--with-libraries=${libs_csv}
|
||||
|
||||
BUILD_COMMAND b2
|
||||
variant=release
|
||||
threading=multi
|
||||
toolset=gcc
|
||||
link=static
|
||||
--prefix=${BOOST_ROOT}
|
||||
install
|
||||
|
||||
INSTALL_COMMAND ""
|
||||
)
|
||||
|
||||
file( GLOB boost_libs "${BOOST_ROOT}/lib/*" )
|
||||
#message( STATUS BOOST_ROOT:${BOOST_ROOT} boost_libs:${boost_libs} )
|
||||
set( Boost_LIBRARIES ${boost_libs} CACHE FILEPATH "Boost libraries directory" )
|
||||
set( Boost_INCLUDE_DIR "${BOOST_ROOT}/include" CACHE FILEPATH "Boost include directory" )
|
||||
|
||||
|
||||
if( APPLE )
|
||||
# I set this to being compatible with wxWidgets
|
||||
# wxWidgets still using libstdc++ (gcc), meanwhile OSX
|
||||
# has switched to libc++ (llvm) by default
|
||||
set( BOOST_CXXFLAGS "cxxflags=-mmacosx-version-min=10.5 -fno-common" )
|
||||
set( BOOST_LINKFLAGS "linkflags=-mmacosx-version-min=10.5 -fno-common" )
|
||||
set( BOOST_TOOLSET "toolset=darwin" )
|
||||
else( BUILD_GITHUB_PLUGIN )
|
||||
|
||||
if( CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
|
||||
set(BOOST_CXXFLAGS "${BOOST_CXXFLAGS} -fno-lto" )
|
||||
set(BOOST_LINKFLAGS "${BOOST_LINKFLAGS} -fno-lto" )
|
||||
endif()
|
||||
|
||||
if( CMAKE_OSX_ARCHITECTURES )
|
||||
ExternalProject_Add( boost
|
||||
PREFIX "${PREFIX}"
|
||||
DOWNLOAD_DIR "${DOWNLOAD_DIR}"
|
||||
URL http://downloads.sourceforge.net/project/boost/boost/${BOOST_RELEASE}/boost_${BOOST_VERS}.tar.bz2
|
||||
URL_MD5 ${BOOST_MD5}
|
||||
|
||||
if( (CMAKE_OSX_ARCHITECTURES MATCHES "386" OR CMAKE_OSX_ARCHITECTURES MATCHES "ppc ") AND
|
||||
(CMAKE_OSX_ARCHITECTURES MATCHES "64"))
|
||||
message( "-- BOOST found 32/64 Address Model" )
|
||||
# The patch command executes with the working directory set to <SOURCE_DIR>
|
||||
PATCH_COMMAND bzr patch -p0 "${PROJECT_SOURCE_DIR}/patches/boost.patch"
|
||||
|
||||
set( BOOST_ADDRESSMODEL "address-model=32_64" )
|
||||
endif()
|
||||
# Dick 18-Aug-2013:
|
||||
# [mis-]use this UPDATE_COMMAND opportunity to remove the old place of boost headers.
|
||||
# Can eventually remove this step after headers are moved from <kicad_src>/include/boost
|
||||
# to <kicad_src>/boost_root/include/boost over the next several months.
|
||||
UPDATE_COMMAND ${CMAKE_COMMAND} -E remove_directory "${PROJECT_SOURCE_DIR}/include/boost"
|
||||
|
||||
if( (CMAKE_OSX_ARCHITECTURES MATCHES "x86_64" OR CMAKE_OSX_ARCHITECTURES MATCHES "386") AND
|
||||
(CMAKE_OSX_ARCHITECTURES MATCHES "ppc"))
|
||||
message("-- BOOST found ppc/x86 Architecture")
|
||||
CONFIGURE_COMMAND ""
|
||||
|
||||
set(BOOST_ARCHITECTURE "architecture=combined")
|
||||
elseif( (CMAKE_OSX_ARCHITECTURES MATCHES "x86_64" OR CMAKE_OSX_ARCHITECTURES MATCHES "386") )
|
||||
message("-- BOOST found x86 Architecture")
|
||||
# remove then re-copy into the include/boost directory during next two steps:
|
||||
BUILD_COMMAND ${CMAKE_COMMAND} -E remove_directory ${BOOST_ROOT}
|
||||
INSTALL_COMMAND ${CMAKE_COMMAND} -E copy_directory "${headers_src}" "${BOOST_ROOT}/include/boost"
|
||||
)
|
||||
|
||||
set(BOOST_ARCHITECTURE "architecture=x86")
|
||||
elseif( (CMAKE_OSX_ARCHITECTURES MATCHES "ppc64" OR CMAKE_OSX_ARCHITECTURES MATCHES "ppc") )
|
||||
message("-- BOOST found ppc Architecture")
|
||||
# Until my find_package() support is done for my boost.
|
||||
set( Boost_INCLUDE_DIR "${BOOST_ROOT}/include" CACHE FILEPATH "Boost include directory" )
|
||||
|
||||
set(BOOST_ARCHITECTURE "architecture=ppc")
|
||||
endif()
|
||||
|
||||
set( BOOST_CFLAGS "${BOOST_CFLAGS} -arch ${CMAKE_OSX_ARCHITECTURES}" )
|
||||
set( BOOST_CXXFLAGS "${BOOST_CXXFLAGS} -arch ${CMAKE_OSX_ARCHITECTURES}" )
|
||||
set( BOOST_LINKFLAGS "${BOOST_LINKFLAGS} -arch ${CMAKE_OSX_ARCHITECTURES}" )
|
||||
endif()
|
||||
endif()
|
||||
|
||||
ExternalProject_Add( boost
|
||||
PREFIX "${PREFIX}"
|
||||
|
||||
URL http://downloads.sourceforge.net/project/boost/boost/${BOOST_RELEASE}/boost_${BOOST_VERS}.tar.bz2
|
||||
DOWNLOAD_DIR "${DOWNLOAD_DIR}"
|
||||
TIMEOUT 1200 # 20 minutes
|
||||
URL_MD5 ${BOOST_MD5}
|
||||
# If download fails, then enable "LOG_DOWNLOAD ON" and try again.
|
||||
# Upon a second failure with logging enabled, then look at these logs:
|
||||
# <src>/.downloads-by-cmake$ less /tmp/product/.downloads-by-cmake/boost_1_54_0/src/boost-stamp/boost-download-out.log
|
||||
# <src>/.downloads-by-cmake$ less /tmp/product/.downloads-by-cmake/boost_1_54_0/src/boost-stamp/boost-download-err.log
|
||||
# If out.log does not show 100%, then try increasing TIMEOUT even more, or download the URL manually and put it
|
||||
# into <src>/.downloads-by-cmake/ dir.
|
||||
# LOG_DOWNLOAD ON
|
||||
|
||||
INSTALL_DIR "${BOOST_ROOT}"
|
||||
|
||||
# The patch command executes with the working directory set to <SOURCE_DIR>
|
||||
# Revert the branch to pristine before applying patch sets as bzr patch
|
||||
# fails when applying a patch to the branch twice and doesn't have a switch
|
||||
# to ignore previously applied patches
|
||||
PATCH_COMMAND bzr revert
|
||||
# bzr revert is insufficient to remove "added" files:
|
||||
COMMAND bzr clean-tree -q --force
|
||||
|
||||
COMMAND ${PATCH_STR_CMD} "${PROJECT_SOURCE_DIR}/patches/boost_minkowski.patch"
|
||||
COMMAND ${PATCH_STR_CMD} "${PROJECT_SOURCE_DIR}/patches/boost_cstdint.patch"
|
||||
|
||||
COMMAND ${PATCH_STR_CMD} "${PROJECT_SOURCE_DIR}/patches/boost_macosx_x86.patch" #https://svn.boost.org/trac/boost/ticket/8266
|
||||
# tell bzr about "added" files by last patch:
|
||||
COMMAND bzr add libs/context/src/asm/jump_i386_x86_64_sysv_macho_gas.S
|
||||
COMMAND bzr add libs/context/src/asm/make_i386_x86_64_sysv_macho_gas.S
|
||||
|
||||
COMMAND ${PATCH_STR_CMD} "${PROJECT_SOURCE_DIR}/patches/boost_macosx_x86_build.patch" #https://svn.boost.org/trac/boost/ticket/8266
|
||||
COMMAND ${PATCH_STR_CMD} "${PROJECT_SOURCE_DIR}/patches/boost_macosx_older_openssl.patch" #https://svn.boost.org/trac/boost/ticket/9273
|
||||
|
||||
COMMAND ${PATCH_STR_CMD} "${PROJECT_SOURCE_DIR}/patches/boost_mingw.patch" #https://svn.boost.org/trac/boost/ticket/7262
|
||||
# tell bzr about "added" files by last patch:
|
||||
COMMAND bzr add libs/context/src/asm/make_i386_ms_pe_gas.S
|
||||
COMMAND bzr add libs/context/src/asm/jump_i386_ms_pe_gas.S
|
||||
COMMAND bzr add libs/context/src/asm/make_x86_64_ms_pe_gas.S
|
||||
COMMAND bzr add libs/context/src/asm/jump_x86_64_ms_pe_gas.S
|
||||
|
||||
COMMAND ${PATCH_STR_CMD} "${PROJECT_SOURCE_DIR}/patches/patch_macosx_context_ppc_v2.patch" #https://svn.boost.org/trac/boost/ticket/8266
|
||||
COMMAND bzr add libs/context/build/Jamfile.v2
|
||||
COMMAND bzr add libs/context/build/architecture.jam
|
||||
COMMAND bzr add libs/context/src/asm/jump_combined_sysv_macho_gas.S
|
||||
COMMAND bzr add libs/context/src/asm/jump_ppc32_sysv_macho_gas.S
|
||||
COMMAND bzr add libs/context/src/asm/jump_ppc64_sysv_macho_gas.S
|
||||
COMMAND bzr add libs/context/src/asm/make_combined_sysv_macho_gas.S
|
||||
COMMAND bzr add libs/context/src/asm/make_ppc32_sysv_macho_gas.S
|
||||
COMMAND bzr add libs/context/src/asm/make_ppc64_sysv_macho_gas.S
|
||||
|
||||
# [Mis-]use this step to erase all the boost headers and libraries before
|
||||
# replacing them below.
|
||||
UPDATE_COMMAND ${CMAKE_COMMAND} -E remove_directory "${BOOST_ROOT}"
|
||||
|
||||
BINARY_DIR "${PREFIX}/src/boost/"
|
||||
CONFIGURE_COMMAND ${bootstrap}
|
||||
|
||||
BUILD_COMMAND ./b2
|
||||
variant=release
|
||||
threading=multi
|
||||
${BOOST_CFLAGS}
|
||||
${BOOST_TOOLSET}
|
||||
${BOOST_CXXFLAGS}
|
||||
${BOOST_LINKFLAGS}
|
||||
${BOOST_ADDRESSMODEL}
|
||||
${BOOST_ARCHITECTURE}
|
||||
${b2_libs}
|
||||
${BOOST_LINKTYPE}
|
||||
--prefix=<INSTALL_DIR>
|
||||
install
|
||||
|
||||
INSTALL_COMMAND ""
|
||||
)
|
||||
|
||||
if( MINGW )
|
||||
execute_process( COMMAND ${CMAKE_C_COMPILER} -dumpversion
|
||||
OUTPUT_VARIABLE GCC_VERSION
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE )
|
||||
|
||||
string( REGEX REPLACE "([0-9]+)\\.([0-9]+)\\.[0-9]+.*" "\\1\\2" BOOST_GCC_VERSION ${GCC_VERSION} )
|
||||
#message( STATUS "BOOST_GCC_VERSION: ${BOOST_GCC_VERSION}" )
|
||||
|
||||
string( REGEX REPLACE "([0-9]+)\\.([0-9]+)\\.([0-9])" "\\1_\\2" BOOST_LIB_VERSION ${BOOST_RELEASE} )
|
||||
#message( STATUS "BOOST_LIB_VERSION: ${BOOST_LIB_VERSION}" )
|
||||
|
||||
# adjust the names of the libraries to suit the build. There's no
|
||||
# symbolic links provided on the MinGW build to allow us to use
|
||||
# generic names for the libs
|
||||
foreach( lib ${BOOST_LIBS_BUILT} )
|
||||
set( mingw_boost_libs ${mingw_boost_libs} ${lib}-mgw${BOOST_GCC_VERSION}-mt-${BOOST_LIB_VERSION} )
|
||||
endforeach()
|
||||
|
||||
set( BOOST_LIBS_BUILT ${mingw_boost_libs} )
|
||||
set( BOOST_INCLUDE "${BOOST_ROOT}/include/boost-${BOOST_LIB_VERSION}" )
|
||||
unset( mingw_boost_libs )
|
||||
endif()
|
||||
|
||||
set( boost_libs "" )
|
||||
set_boost_lib_names( "${BOOST_LIBS_BUILT}" boost_libs )
|
||||
|
||||
set( Boost_LIBRARIES ${boost_libs} )
|
||||
set( Boost_INCLUDE_DIR "${BOOST_INCLUDE}" )
|
||||
|
||||
mark_as_advanced( Boost_LIBRARIES Boost_INCLUDE_DIR )
|
||||
|
||||
#message( STATUS "BOOST_ROOT:${BOOST_ROOT} BOOST_LIBRARIES:${BOOST_LIBRARIES}" )
|
||||
#message( STATUS "Boost_INCLUDE_DIR: ${Boost_INCLUDE_DIR}" )
|
||||
|
||||
endif( BUILD_GITHUB_PLUGIN )
|
||||
|
||||
|
||||
ExternalProject_Add_Step( boost bzr_commit_boost
|
||||
@@ -304,7 +174,7 @@ ExternalProject_Add_Step( boost bzr_commit_boost
|
||||
|
||||
ExternalProject_Add_Step( boost bzr_add_boost
|
||||
# add only the headers to the scratch repo, repo = "../.bzr" from ${headers_src}
|
||||
COMMAND bzr add -q ${PREFIX}/src/boost
|
||||
COMMAND bzr add -q ${headers_src}
|
||||
COMMENT "adding pristine boost files to 'boost scratch repo'"
|
||||
DEPENDERS bzr_commit_boost
|
||||
)
|
||||
|
||||
@@ -1,109 +0,0 @@
|
||||
# This program source code file is part of KICAD, a free EDA CAD application.
|
||||
#
|
||||
# Copyright (C) 2013 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
|
||||
# Copyright (C) 2013 Kicad Developers, see AUTHORS.txt for contributors.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# 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 General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, you may find one here:
|
||||
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
# or you may search the http://www.gnu.org website for the version 2 license,
|
||||
# or you may write to the Free Software Foundation, Inc.,
|
||||
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
|
||||
# Downloads and builds CAIRO
|
||||
|
||||
#-----<configure>----------------------------------------------------------------
|
||||
|
||||
set( CAIRO_RELEASE 1.12.0 )
|
||||
set( CAIRO_MD5 e6c85575ba7094f88b637bdfd835a751 ) # re-calc this on every RELEASE change
|
||||
|
||||
# The boost headers [and static libs if built] go here, at the top of KiCad
|
||||
# source tree in boost_root.
|
||||
set( CAIRO_ROOT "${PROJECT_SOURCE_DIR}/cairo_root" )
|
||||
|
||||
#-----</configure>---------------------------------------------------------------
|
||||
|
||||
if( NOT BZIP2_FOUND )
|
||||
find_package( BZip2 REQUIRED )
|
||||
endif()
|
||||
|
||||
set( PREFIX ${DOWNLOAD_DIR}/cairo )
|
||||
|
||||
if ( KICAD_BUILD_STATIC )
|
||||
set( CAIRO_BUILDTYPE --disable-shared )
|
||||
endif( KICAD_BUILD_STATIC )
|
||||
|
||||
|
||||
if (APPLE)
|
||||
|
||||
set( CAIRO_CFLAGS "CFLAGS=" )
|
||||
set( CAIRO_LDFLAGS "LDFLAGS=-framework CoreServices -framework Cocoa" )
|
||||
set( CAIRO_OPTS --enable-ft=no )
|
||||
|
||||
if( CMAKE_OSX_ARCHITECTURES )
|
||||
set( CAIRO_CFLAGS "${CAIRO_CFLAGS} -arch ${CMAKE_OSX_ARCHITECTURES}" )
|
||||
set( CAIRO_LDFLAGS "${CAIRO_LDFLAGS} -arch ${CMAKE_OSX_ARCHITECTURES}" )
|
||||
endif( CMAKE_OSX_ARCHITECTURES )
|
||||
|
||||
if( CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
|
||||
set(CAIRO_CFLAGS "${CAIRO_CFLAGS} -fno-lto" )
|
||||
endif()
|
||||
|
||||
if( CMAKE_OSX_SYSROOT )
|
||||
#set( CAIRO_CFLAGS "${CAIRO_CFLAGS} -isysroot ${CMAKE_OSX_SYSROOT}")
|
||||
set( CAIRO_LDFLAGS "${CAIRO_LDFLAGS} -isysroot ${CMAKE_OSX_SYSROOT}")
|
||||
endif( CMAKE_OSX_SYSROOT)
|
||||
|
||||
endif(APPLE)
|
||||
|
||||
# <SOURCE_DIR> = ${PREFIX}/src/glew
|
||||
# There is a Bazaar 'boost scratch repo' in <SOURCE_DIR>/boost and after committing pristine
|
||||
# download, the patch is applied. This lets you regenerate a new patch at any time
|
||||
# easily, simply by editing the working tree in <SOURCE_DIR> and doing "bzr diff" in there.
|
||||
|
||||
ExternalProject_Add( cairo
|
||||
PREFIX "${PREFIX}"
|
||||
DOWNLOAD_DIR "${DOWNLOAD_DIR}"
|
||||
URL http://cairographics.org/releases/cairo-${CAIRO_RELEASE}.tar.gz
|
||||
URL_MD5 ${CAIRO_MD5}
|
||||
STAMP_DIR "${PREFIX}"
|
||||
|
||||
DEPENDS pkgconfig pixman libpng
|
||||
|
||||
BUILD_IN_SOURCE 1
|
||||
#SOURCE_DIR "${PREFIX}"
|
||||
#PATCH_COMMAND ""
|
||||
UPDATE_COMMAND ${CMAKE_COMMAND} -E remove_directory "${CAIRO_ROOT}"
|
||||
|
||||
CONFIGURE_COMMAND ./configure --prefix=${CAIRO_ROOT} --enable-static ${CAIRO_BUILDTYPE}
|
||||
PKG_CONFIG=${PROJECT_SOURCE_DIR}/pkgconfig_root/bin/pkg-config
|
||||
PKG_CONFIG_PATH=${PROJECT_SOURCE_DIR}/pixman_root/lib/pkgconfig:${PROJECT_SOURCE_DIR}/libpng_root/lib/pkgconfig
|
||||
--enable-png=yes --enable-svg=yes
|
||||
--disable-silent-rules --disable-dependency-tracking
|
||||
${CAIRO_CFLAGS}
|
||||
${CAIRO_LDFLAGS}
|
||||
${CAIRO_OPTS}
|
||||
|
||||
#BINARY_DIR "${PREFIX}"
|
||||
|
||||
BUILD_COMMAND $(MAKE)
|
||||
|
||||
INSTALL_DIR "${CAIRO_ROOT}"
|
||||
INSTALL_COMMAND $(MAKE) install
|
||||
)
|
||||
|
||||
# match these with whatever FindCairo.cmake sets
|
||||
# Dick i'vent set it because /lib and /lib64 issue in non multiarch binaries OSs
|
||||
#set( CAIRO_FOUND true )
|
||||
set( CAIRO_INCLUDE_DIR ${CAIRO_ROOT}/include )
|
||||
set( CAIRO_LIBRARIES ${CAIRO_ROOT}/lib )
|
||||
@@ -1,89 +0,0 @@
|
||||
# This program source code file is part of KICAD, a free EDA CAD application.
|
||||
#
|
||||
# Copyright (C) 2013 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
|
||||
# Copyright (C) 2013 Kicad Developers, see AUTHORS.txt for contributors.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# 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 General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, you may find one here:
|
||||
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
# or you may search the http://www.gnu.org website for the version 2 license,
|
||||
# or you may write to the Free Software Foundation, Inc.,
|
||||
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
|
||||
# Downloads and builds GLEW
|
||||
|
||||
#-----<configure>----------------------------------------------------------------
|
||||
|
||||
set( GLEW_RELEASE 1.10.0 )
|
||||
set( GLEW_MD5 2f09e5e6cb1b9f3611bcac79bc9c2d5d ) # re-calc this on every RELEASE change
|
||||
|
||||
# The boost headers [and static libs if built] go here, at the top of KiCad
|
||||
# source tree in boost_root.
|
||||
set( GLEW_ROOT "${PROJECT_SOURCE_DIR}/glew_root" )
|
||||
|
||||
#-----</configure>---------------------------------------------------------------
|
||||
|
||||
if( NOT BZIP2_FOUND )
|
||||
find_package( BZip2 REQUIRED )
|
||||
endif()
|
||||
|
||||
set( PREFIX ${DOWNLOAD_DIR}/glew )
|
||||
|
||||
if (APPLE)
|
||||
if( CMAKE_OSX_ARCHITECTURES )
|
||||
set( GLEW_CFLAGS "CFLAGS.EXTRA=-arch ${CMAKE_OSX_ARCHITECTURES} -mmacosx-version-min=10.5" )
|
||||
set( GLEW_LDFLAGS "LDFLAGS.EXTRA=-arch ${CMAKE_OSX_ARCHITECTURES} -mmacosx-version-min=10.5" )
|
||||
set( GLEW_STRIP "STRIP=")
|
||||
endif( CMAKE_OSX_ARCHITECTURES )
|
||||
endif(APPLE)
|
||||
|
||||
# <SOURCE_DIR> = ${PREFIX}/src/glew
|
||||
# There is a Bazaar 'boost scratch repo' in <SOURCE_DIR>/boost and after committing pristine
|
||||
# download, the patch is applied. This lets you regenerate a new patch at any time
|
||||
# easily, simply by editing the working tree in <SOURCE_DIR> and doing "bzr diff" in there.
|
||||
|
||||
ExternalProject_Add( glew
|
||||
PREFIX "${PREFIX}"
|
||||
DOWNLOAD_DIR "${DOWNLOAD_DIR}"
|
||||
URL http://sourceforge.net/projects/glew/files/glew/1.10.0/glew-${GLEW_RELEASE}.tgz
|
||||
URL_MD5 ${GLEW_MD5}
|
||||
STAMP_DIR "${PREFIX}"
|
||||
|
||||
#SOURCE_DIR "${PREFIX}"
|
||||
BUILD_IN_SOURCE 1
|
||||
|
||||
UPDATE_COMMAND ${CMAKE_COMMAND} -E remove_directory "${GLEW_ROOT}"
|
||||
|
||||
#PATCH_COMMAND "true"
|
||||
CONFIGURE_COMMAND ""
|
||||
|
||||
#BINARY_DIR "${PREFIX}"
|
||||
|
||||
BUILD_COMMAND $(MAKE) ${GLEW_CFLAGS} ${GLEW_LDFLAGS} ${GLEW_STRIP}
|
||||
|
||||
INSTALL_DIR "${GLEW_ROOT}"
|
||||
INSTALL_COMMAND $(MAKE) GLEW_DEST="${GLEW_ROOT}" install
|
||||
)
|
||||
|
||||
#
|
||||
# Optional Steps
|
||||
#
|
||||
|
||||
if( APPLE )
|
||||
# On OSX is needed to run ranlib to make .a indexes for all platforms
|
||||
ExternalProject_Add_Step( glew glew_osx_ranlib
|
||||
COMMAND ranlib "${GLEW_ROOT}/lib/libGLEW.a"
|
||||
COMMENT "ranlib ${GLEW_ROOT}/lib/libGLEW.a - Needed on OSX only"
|
||||
DEPENDEES install
|
||||
)
|
||||
endif()
|
||||
@@ -1,76 +0,0 @@
|
||||
# This program source code file is part of KICAD, a free EDA CAD application.
|
||||
#
|
||||
# Copyright (C) 2013 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
|
||||
# Copyright (C) 2013 Kicad Developers, see AUTHORS.txt for contributors.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# 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 General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, you may find one here:
|
||||
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
# or you may search the http://www.gnu.org website for the version 2 license,
|
||||
# or you may write to the Free Software Foundation, Inc.,
|
||||
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
|
||||
# Downloads and builds LIBPNG
|
||||
|
||||
#-----<configure>----------------------------------------------------------------
|
||||
|
||||
set( LIBPNG_RELEASE 1.4.12 )
|
||||
set( LIBPNG_MD5 849b14d88e1240a1b9f2cb39dd39701e ) # re-calc this on every RELEASE change
|
||||
|
||||
# The boost headers [and static libs if built] go here, at the top of KiCad
|
||||
# source tree in boost_root.
|
||||
set( LIBPNG_ROOT "${PROJECT_SOURCE_DIR}/libpng_root" )
|
||||
|
||||
#-----</configure>---------------------------------------------------------------
|
||||
|
||||
find_package( BZip2 REQUIRED )
|
||||
|
||||
set( PREFIX ${DOWNLOAD_DIR}/libpng )
|
||||
|
||||
if (APPLE)
|
||||
if( CMAKE_OSX_ARCHITECTURES )
|
||||
SET( LIBPNG_CFLAGS "CFLAGS=-arch ${CMAKE_OSX_ARCHITECTURES}")
|
||||
endif( CMAKE_OSX_ARCHITECTURES )
|
||||
endif(APPLE)
|
||||
|
||||
if (KICAD_BUILD_STATIC)
|
||||
set(LIBPNG_OPTS --enable-static --disable-shared)
|
||||
else()
|
||||
set(LIBPNG_OPTS --enable-static --enable-shared)
|
||||
endif(KICAD_BUILD_STATIC)
|
||||
|
||||
# <SOURCE_DIR> = ${PREFIX}/src/glew
|
||||
# There is a Bazaar 'boost scratch repo' in <SOURCE_DIR>/boost and after committing pristine
|
||||
# download, the patch is applied. This lets you regenerate a new patch at any time
|
||||
# easily, simply by editing the working tree in <SOURCE_DIR> and doing "bzr diff" in there.
|
||||
|
||||
ExternalProject_Add( libpng
|
||||
PREFIX "${PREFIX}"
|
||||
DOWNLOAD_DIR "${DOWNLOAD_DIR}"
|
||||
URL http://sourceforge.net/projects/libpng/files/libpng14/${LIBPNG_RELEASE}/libpng-${LIBPNG_RELEASE}.tar.bz2
|
||||
URL_MD5 ${LIBPNG_MD5}
|
||||
STAMP_DIR "${PREFIX}"
|
||||
|
||||
#SOURCE_DIR "${PREFIX}"
|
||||
BUILD_IN_SOURCE 1
|
||||
|
||||
#PATCH_COMMAND "true"
|
||||
CONFIGURE_COMMAND ./configure --prefix=${LIBPNG_ROOT} ${LIBPNG_OPTS} ${LIBPNG_CFLAGS} --disable-dependency-tracking
|
||||
#BINARY_DIR "${PREFIX}"
|
||||
UPDATE_COMMAND ${CMAKE_COMMAND} -E remove_directory "${LIBPNG_ROOT}"
|
||||
|
||||
BUILD_COMMAND $(MAKE)
|
||||
|
||||
INSTALL_DIR "${LIBPNG_ROOT}"
|
||||
INSTALL_COMMAND $(MAKE) install
|
||||
)
|
||||
@@ -1,127 +0,0 @@
|
||||
# This program source code file is part of KICAD, a free EDA CAD application.
|
||||
#
|
||||
# Copyright (C) 2013 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
|
||||
# Copyright (C) 2013 Kicad Developers, see AUTHORS.txt for contributors.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# 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 General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, you may find one here:
|
||||
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
# or you may search the http://www.gnu.org website for the version 2 license,
|
||||
# or you may write to the Free Software Foundation, Inc.,
|
||||
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
|
||||
|
||||
|
||||
# Download OPENSSL and install into ${PREFIX}, typically in our KiCad source tree.
|
||||
# Assumes include( ExternalProject ) was done inline previous to this file
|
||||
# and that set( DOWNLOAD_DIR ... ) was set in a higher context.
|
||||
|
||||
#-----<configure>-------------------------------------------------------------------------------------
|
||||
|
||||
set( OPENSSL_RELEASE "1.0.1e" )
|
||||
set( OPENSSL_MD5 08bec482fe1c4795e819bfcfcb9647b9 ) # re-calc on every RELEASE change
|
||||
|
||||
#-----</configure>-----------------------------------------------------------------------------------
|
||||
|
||||
set( PREFIX ${DOWNLOAD_DIR}/openssl-${OPENSSL_RELEASE} )
|
||||
|
||||
# CMake barfs if we pass in an empty CMAKE_TOOLCHAIN_FILE, so we only set it up
|
||||
# if it has a non-empty value
|
||||
unset( TOOLCHAIN )
|
||||
if( CMAKE_TOOLCHAIN_FILE )
|
||||
set( TOOLCHAIN "-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}" )
|
||||
endif()
|
||||
|
||||
FIND_PROGRAM (patch_bin NAMES patch.exe patch)
|
||||
|
||||
if( "${patch_bin}" STREQUAL "patch_bin-NOTFOUND" )
|
||||
set( PATCH_STR_CMD bzr patch -p0 )
|
||||
else()
|
||||
set( PATCH_STR_CMD ${patch_bin} -p0 -i )
|
||||
endif()
|
||||
|
||||
ExternalProject_Add(
|
||||
openssl
|
||||
DOWNLOAD_DIR ${DOWNLOAD_DIR}
|
||||
PREFIX ${PREFIX}
|
||||
TIMEOUT 60
|
||||
URL http://launchpad.net/openssl-cmake/1.0.1e/1.0.1e-1/+download/openssl-cmake-1.0.1e-src.tar.gz
|
||||
URL_MD5 ${OPENSSL_MD5}
|
||||
|
||||
# mingw uses msvcrt.dll's printf() which cannot handle %zd, so having
|
||||
# BIO_snprintf() reference printf()'s formating attributes is a bug, since
|
||||
# BIO_snprintf() does its own formatting and is different from msvcrt's printf().
|
||||
|
||||
# This one would be easier if Windows folks could be asked to install "patch.exe"
|
||||
# PATCH_COMMAND patch -p0 < ${PROJECT_SOURCE_DIR}/patches/openssl-1.0.1e.patch
|
||||
|
||||
# This one requires the bzr commit below, since bzr patch only knows a working tree.
|
||||
|
||||
# Revert the branch to pristine before applying patch sets as bzr patch
|
||||
# fails when applying a patch to the branch twice and doesn't have a switch
|
||||
# to ignore previously applied patches
|
||||
PATCH_COMMAND bzr revert
|
||||
# PATCH_COMMAND continuation (any *_COMMAND here can be continued with COMMAND):
|
||||
COMMAND ${PATCH_STR_CMD} ${PROJECT_SOURCE_DIR}/patches/openssl-1.0.1e.patch
|
||||
|
||||
CONFIGURE_COMMAND
|
||||
${CMAKE_COMMAND}
|
||||
-G ${CMAKE_GENERATOR}
|
||||
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
|
||||
-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
|
||||
-DBUILD_SHARED_LIBS=ON
|
||||
${TOOLCHAIN}
|
||||
<SOURCE_DIR>
|
||||
|
||||
BUILD_IN_SOURCE 1
|
||||
BUILD_COMMAND ${CMAKE_MAKE_PROGRAM}
|
||||
INSTALL_COMMAND ${CMAKE_MAKE_PROGRAM} install
|
||||
)
|
||||
|
||||
# In order to use "bzr patch", we have to have a bzr working tree, this means a bzr repo
|
||||
# must be created and source committed to it. These extra steps do that.
|
||||
|
||||
set( target "openssl" )
|
||||
|
||||
ExternalProject_Add_Step( ${target} bzr_commit_${target}
|
||||
COMMAND bzr ci -q -m pristine <SOURCE_DIR>
|
||||
COMMENT "committing pristine ${target} files to '${target} scratch repo'"
|
||||
DEPENDERS patch
|
||||
)
|
||||
|
||||
ExternalProject_Add_Step( ${target} bzr_add_${target}
|
||||
COMMAND bzr add -q <SOURCE_DIR>
|
||||
COMMENT "adding pristine ${target} files to '${target} scratch repo'"
|
||||
DEPENDERS bzr_commit_${target}
|
||||
)
|
||||
|
||||
ExternalProject_Add_Step( ${target} bzr_init_${target}
|
||||
COMMAND bzr init -q <SOURCE_DIR>
|
||||
COMMENT "creating '${target} scratch repo' specifically for tracking ${target} patches"
|
||||
DEPENDERS bzr_add_${target}
|
||||
DEPENDEES download
|
||||
)
|
||||
|
||||
# The spelling of these is always taken from CMake Module's FindXYZ.cmake file:
|
||||
set( OPENSSL_INCLUDE_DIR
|
||||
${PREFIX}/include
|
||||
CACHE FILEPATH "OPENSSL include directory"
|
||||
)
|
||||
|
||||
set( OPENSSL_LIBRARIES
|
||||
${PREFIX}/lib/libssl${CMAKE_IMPORT_LIBRARY_SUFFIX}
|
||||
${PREFIX}/lib/libcrypto${CMAKE_IMPORT_LIBRARY_SUFFIX}
|
||||
CACHE STRING "OPENSSL libraries"
|
||||
)
|
||||
set( OPENSSL_FOUND true )
|
||||
|
||||
@@ -1,67 +0,0 @@
|
||||
# This program source code file is part of KICAD, a free EDA CAD application.
|
||||
#
|
||||
# Copyright (C) 2013 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
|
||||
# Copyright (C) 2013 Kicad Developers, see AUTHORS.txt for contributors.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# 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 General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, you may find one here:
|
||||
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
# or you may search the http://www.gnu.org website for the version 2 license,
|
||||
# or you may write to the Free Software Foundation, Inc.,
|
||||
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
|
||||
# Downloads and builds PCRE
|
||||
|
||||
#-----<configure>----------------------------------------------------------------
|
||||
|
||||
set( PCRE_RELEASE 8.34 )
|
||||
set( PCRE_MD5 eb34b2c9c727fd64940d6fd9a00995eb ) # re-calc this on every RELEASE change
|
||||
|
||||
set( PCRE_ROOT "${PROJECT_SOURCE_DIR}/pcre_root" )
|
||||
|
||||
#-----</configure>---------------------------------------------------------------
|
||||
|
||||
find_package( BZip2 REQUIRED )
|
||||
|
||||
set( PREFIX ${DOWNLOAD_DIR}/pcre )
|
||||
|
||||
if (APPLE)
|
||||
if( CMAKE_OSX_ARCHITECTURES )
|
||||
set( PCRE_CFLAGS "CFLAGS=-arch ${CMAKE_OSX_ARCHITECTURES} -mmacosx-version-min=10.5" )
|
||||
set( PCRE_CXXFLAGS "CXXFLAGS=-arch ${CMAKE_OSX_ARCHITECTURES} -mmacosx-version-min=10.5" )
|
||||
set( PCRE_LDFLAGS "LDFLAGS=-arch ${CMAKE_OSX_ARCHITECTURES} -mmacosx-version-min=10.5" )
|
||||
endif( CMAKE_OSX_ARCHITECTURES )
|
||||
endif(APPLE)
|
||||
|
||||
ExternalProject_Add( pcre
|
||||
PREFIX "${PREFIX}"
|
||||
DOWNLOAD_DIR "${DOWNLOAD_DIR}"
|
||||
URL http://sourceforge.net/projects/pcre/files/pcre/${PCRE_RELEASE}/pcre-${PCRE_RELEASE}.tar.gz
|
||||
URL_MD5 ${PCRE_MD5}
|
||||
STAMP_DIR "${PREFIX}"
|
||||
|
||||
#SOURCE_DIR "${PREFIX}"
|
||||
BUILD_IN_SOURCE 1
|
||||
|
||||
UPDATE_COMMAND ${CMAKE_COMMAND} -E remove_directory "${PCRE_ROOT}"
|
||||
|
||||
#PATCH_COMMAND "true"
|
||||
CONFIGURE_COMMAND ./configure --prefix=${PCRE_ROOT} ${PCRE_CFLAGS} ${PCRE_CXXFLAGS} ${PCRE_LDFLAGS} --disable-dependency-tracking
|
||||
|
||||
#BINARY_DIR "${PREFIX}"
|
||||
|
||||
BUILD_COMMAND $(MAKE)
|
||||
|
||||
INSTALL_DIR "${PCRE_ROOT}"
|
||||
INSTALL_COMMAND $(MAKE) install
|
||||
)
|
||||
@@ -1,83 +0,0 @@
|
||||
# This program source code file is part of KICAD, a free EDA CAD application.
|
||||
#
|
||||
# Copyright (C) 2013 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
|
||||
# Copyright (C) 2013 Kicad Developers, see AUTHORS.txt for contributors.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# 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 General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, you may find one here:
|
||||
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
# or you may search the http://www.gnu.org website for the version 2 license,
|
||||
# or you may write to the Free Software Foundation, Inc.,
|
||||
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
|
||||
# Downloads and builds PIXMAN
|
||||
|
||||
#-----<configure>----------------------------------------------------------------
|
||||
|
||||
set( PIXMAN_RELEASE 0.32.4 )
|
||||
set( PIXMAN_MD5 eba449138b972fbf4547a8c152fea162 ) # re-calc this on every RELEASE change
|
||||
|
||||
# The boost headers [and static libs if built] go here, at the top of KiCad
|
||||
# source tree in boost_root.
|
||||
set( PIXMAN_ROOT "${PROJECT_SOURCE_DIR}/pixman_root" )
|
||||
|
||||
#-----</configure>---------------------------------------------------------------
|
||||
|
||||
if( NOT BZIP2_FOUND )
|
||||
find_package( BZip2 REQUIRED )
|
||||
endif()
|
||||
|
||||
set( PREFIX ${DOWNLOAD_DIR}/pixman )
|
||||
|
||||
set(PIXMAN_CPPFLAGS "CFLAGS=")
|
||||
|
||||
if (APPLE)
|
||||
if( CMAKE_OSX_ARCHITECTURES )
|
||||
set(PIXMAN_CPPFLAGS "${PIXMAN_CPPFLAGS} -arch ${CMAKE_OSX_ARCHITECTURES} -fno-common -mmacosx-version-min=10.5")
|
||||
else()
|
||||
set(PIXMAN_CPPFLAGS "${PIXMAN_CPPFLAGS} -fno-common -mmacosx-version-min=10.5")
|
||||
endif( CMAKE_OSX_ARCHITECTURES )
|
||||
endif(APPLE)
|
||||
|
||||
if (KICAD_BUILD_STATIC)
|
||||
set(PIXMAN_OPTS --enable-static=yes --enable-shared=no)
|
||||
else()
|
||||
set(PIXMAN_OPTS --enable-static=yes --enable-shared=yes)
|
||||
endif(KICAD_BUILD_STATIC)
|
||||
|
||||
# <SOURCE_DIR> = ${PREFIX}/src/glew
|
||||
# There is a Bazaar 'boost scratch repo' in <SOURCE_DIR>/boost and after committing pristine
|
||||
# download, the patch is applied. This lets you regenerate a new patch at any time
|
||||
# easily, simply by editing the working tree in <SOURCE_DIR> and doing "bzr diff" in there.
|
||||
|
||||
ExternalProject_Add( pixman
|
||||
PREFIX "${PREFIX}"
|
||||
DOWNLOAD_DIR "${DOWNLOAD_DIR}"
|
||||
URL http://cairographics.org/releases/pixman-${PIXMAN_RELEASE}.tar.gz
|
||||
URL_MD5 ${PIXMAN_MD5}
|
||||
STAMP_DIR "${PREFIX}"
|
||||
|
||||
#SOURCE_DIR "${PREFIX}"
|
||||
BUILD_IN_SOURCE 1
|
||||
|
||||
UPDATE_COMMAND ${CMAKE_COMMAND} -E remove_directory "${PIXMAN_ROOT}"
|
||||
|
||||
#PATCH_COMMAND "true"
|
||||
CONFIGURE_COMMAND ./configure --prefix=${PIXMAN_ROOT} ${PIXMAN_OPTS} ${PIXMAN_CPPFLAGS} --disable-dependency-tracking
|
||||
#BINARY_DIR "${PREFIX}"
|
||||
|
||||
BUILD_COMMAND $(MAKE)
|
||||
|
||||
INSTALL_DIR "${PIXMAN_ROOT}"
|
||||
INSTALL_COMMAND $(MAKE) install
|
||||
)
|
||||
@@ -1,80 +0,0 @@
|
||||
# This program source code file is part of KICAD, a free EDA CAD application.
|
||||
#
|
||||
# Copyright (C) 2013 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
|
||||
# Copyright (C) 2013 Kicad Developers, see AUTHORS.txt for contributors.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# 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 General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, you may find one here:
|
||||
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
# or you may search the http://www.gnu.org website for the version 2 license,
|
||||
# or you may write to the Free Software Foundation, Inc.,
|
||||
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
|
||||
# Downloads and builds CAIRO
|
||||
|
||||
#-----<configure>----------------------------------------------------------------
|
||||
|
||||
set( PKGCONFIG_RELEASE 0.28 )
|
||||
set( PKGCONFIG_MD5 aa3c86e67551adc3ac865160e34a2a0d ) # re-calc this on every RELEASE change
|
||||
|
||||
# The boost headers [and static libs if built] go here, at the top of KiCad
|
||||
# source tree in boost_root.
|
||||
set( PKGCONFIG_ROOT "${PROJECT_SOURCE_DIR}/pkgconfig_root" )
|
||||
|
||||
#-----</configure>---------------------------------------------------------------
|
||||
|
||||
if( NOT BZIP2_FOUND )
|
||||
find_package( BZip2 REQUIRED )
|
||||
endif()
|
||||
|
||||
set( PREFIX ${DOWNLOAD_DIR}/pkgconfig )
|
||||
|
||||
if ( KICAD_BUILD_STATIC )
|
||||
set( PKGCONFIG_BUILDTYPE --enable-shared=no --enable-static=yes )
|
||||
else()
|
||||
set( PKGCONFIG_BUILDTYPE --enable-shared=yes --enable-static=yes )
|
||||
endif( KICAD_BUILD_STATIC )
|
||||
|
||||
# <SOURCE_DIR> = ${PREFIX}/src/glew
|
||||
# There is a Bazaar 'boost scratch repo' in <SOURCE_DIR>/boost and after committing pristine
|
||||
# download, the patch is applied. This lets you regenerate a new patch at any time
|
||||
# easily, simply by editing the working tree in <SOURCE_DIR> and doing "bzr diff" in there.
|
||||
|
||||
ExternalProject_Add( pkgconfig
|
||||
PREFIX "${PREFIX}"
|
||||
DOWNLOAD_DIR "${DOWNLOAD_DIR}"
|
||||
URL http://pkgconfig.freedesktop.org/releases/pkg-config-${PKGCONFIG_RELEASE}.tar.gz
|
||||
URL_MD5 ${PKGCONFIG_MD5}
|
||||
STAMP_DIR "${PREFIX}"
|
||||
|
||||
#SOURCE_DIR "${PREFIX}"
|
||||
BUILD_IN_SOURCE 1
|
||||
|
||||
#PATCH_COMMAND "true"
|
||||
CONFIGURE_COMMAND ./configure --prefix=${PKGCONFIG_ROOT} --with-internal-glib ${PKGCONFIG_BUILDTYPE} --disable-silent-rules
|
||||
#BINARY_DIR "${PREFIX}"
|
||||
|
||||
UPDATE_COMMAND ${CMAKE_COMMAND} -E remove_directory "${PKGCONFIG_ROOT}"
|
||||
|
||||
BUILD_COMMAND $(MAKE)
|
||||
|
||||
INSTALL_DIR "${PKGCONFIG_ROOT}"
|
||||
INSTALL_COMMAND $(MAKE) install
|
||||
)
|
||||
|
||||
ExternalProject_Add_Step( pkgconfig pkgconfig_cleanup
|
||||
COMMAND ${CMAKE_COMMAND} -E remove_directory "${PKGCONFIG_ROOT}"
|
||||
COMMENT "pkgconfig - cleanup destination before proceeding in install"
|
||||
DEPENDEES build
|
||||
)
|
||||
|
||||
@@ -1,79 +0,0 @@
|
||||
# This program source code file is part of KICAD, a free EDA CAD application.
|
||||
#
|
||||
# Copyright (C) 2013 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
|
||||
# Copyright (C) 2013 Kicad Developers, see AUTHORS.txt for contributors.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# 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 General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, you may find one here:
|
||||
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
# or you may search the http://www.gnu.org website for the version 2 license,
|
||||
# or you may write to the Free Software Foundation, Inc.,
|
||||
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
|
||||
# Downloads and builds SWIG
|
||||
|
||||
#-----<configure>----------------------------------------------------------------
|
||||
|
||||
set( SWIG_RELEASE 2.0.11 )
|
||||
set( SWIG_MD5 291ba57c0acd218da0b0916c280dcbae ) # re-calc this on every RELEASE change
|
||||
|
||||
# The boost headers [and static libs if built] go here, at the top of KiCad
|
||||
# source tree in boost_root.
|
||||
set( SWIG_ROOT "${PROJECT_SOURCE_DIR}/swig_root" )
|
||||
|
||||
#-----</configure>---------------------------------------------------------------
|
||||
|
||||
find_package( BZip2 REQUIRED )
|
||||
|
||||
set( PREFIX ${DOWNLOAD_DIR}/swig )
|
||||
|
||||
if (APPLE)
|
||||
if( CMAKE_OSX_ARCHITECTURES )
|
||||
set( SWIG_CFLAGS "CFLAGS=-arch ${CMAKE_OSX_ARCHITECTURES} -mmacosx-version-min=10.5" )
|
||||
set( SWIG_CXXFLAGS "CXXFLAGS=-arch ${CMAKE_OSX_ARCHITECTURES} -mmacosx-version-min=10.5" )
|
||||
set( SWIG_LDFLAGS "LDFLAGS=-arch ${CMAKE_OSX_ARCHITECTURES} -mmacosx-version-min=10.5" )
|
||||
endif( CMAKE_OSX_ARCHITECTURES )
|
||||
|
||||
set( SWIG_PYTHON "--with-python=/usr/bin/python2.6" )
|
||||
set( SWIG_OPTS --disable-dependency-tracking )
|
||||
endif(APPLE)
|
||||
|
||||
# <SOURCE_DIR> = ${PREFIX}/src/glew
|
||||
# There is a Bazaar 'boost scratch repo' in <SOURCE_DIR>/boost and after committing pristine
|
||||
# download, the patch is applied. This lets you regenerate a new patch at any time
|
||||
# easily, simply by editing the working tree in <SOURCE_DIR> and doing "bzr diff" in there.
|
||||
|
||||
ExternalProject_Add( swig
|
||||
PREFIX "${PREFIX}"
|
||||
DOWNLOAD_DIR "${DOWNLOAD_DIR}"
|
||||
URL http://sourceforge.net/projects/swig/files/swig/swig-${SWIG_RELEASE}/swig-${SWIG_RELEASE}.tar.gz
|
||||
URL_MD5 ${SWIG_MD5}
|
||||
STAMP_DIR "${PREFIX}"
|
||||
|
||||
DEPENDS pcre
|
||||
|
||||
#SOURCE_DIR "${PREFIX}"
|
||||
BUILD_IN_SOURCE 1
|
||||
|
||||
UPDATE_COMMAND ${CMAKE_COMMAND} -E remove_directory "${SWIG_ROOT}"
|
||||
|
||||
#PATCH_COMMAND "true"
|
||||
CONFIGURE_COMMAND ./configure --prefix=${SWIG_ROOT} --with-pcre-prefix=${PCRE_ROOT} ${SWIG_CFLAGS} ${SWIG_LDFLAGS} ${SWIG_CXXFLAGS} ${SWIG_PYTHON} ${SWIG_OPTS}
|
||||
|
||||
#BINARY_DIR "${PREFIX}"
|
||||
|
||||
BUILD_COMMAND $(MAKE)
|
||||
|
||||
INSTALL_DIR "${SWIG_ROOT}"
|
||||
INSTALL_COMMAND $(MAKE) install
|
||||
)
|
||||
@@ -1,121 +0,0 @@
|
||||
# This program source code file is part of KICAD, a free EDA CAD application.
|
||||
#
|
||||
# Copyright (C) 2013 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
|
||||
# Copyright (C) 2013 Kicad Developers, see AUTHORS.txt for contributors.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# 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 General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, you may find one here:
|
||||
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
# or you may search the http://www.gnu.org website for the version 2 license,
|
||||
# or you may write to the Free Software Foundation, Inc.,
|
||||
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
|
||||
# Downloads and builds LIBWXPYTHON
|
||||
|
||||
#-----<configure>----------------------------------------------------------------
|
||||
|
||||
set( LIBWXPYTHON_RELEASE 3.0.0.0 )
|
||||
set( LIBWXPYTHON_MD5 f5e32c7d85dc261ba777e113c3b7e365 ) # re-calc this on every RELEASE change
|
||||
|
||||
set( LIBWXPYTHON_ROOT "${PROJECT_SOURCE_DIR}/libwxpython_root" )
|
||||
|
||||
#-----</configure>---------------------------------------------------------------
|
||||
|
||||
find_package( BZip2 REQUIRED )
|
||||
|
||||
set( PREFIX ${DOWNLOAD_DIR}/libwxpython )
|
||||
set( LIBWXPYTHON_EXEC python )
|
||||
set( LIBWXPYTHON_OPTS --wxpy_installdir=${LIBWXPYTHON_ROOT}/wxPython )
|
||||
|
||||
if (APPLE)
|
||||
SET( LIBWXPYTHON_EXEC python2.6 )
|
||||
SET( LIBWXPYTHON_OPTS ${LIBWXPYTHON_OPTS} --osx_cocoa )
|
||||
#SET( LIBWXPYTHON_OPTS ${LIBWXPYTHON_OPTS} --mac_framework --mac_framework_prefix=${LIBWXPYTHON_ROOT}/wxPython )
|
||||
|
||||
if( CMAKE_OSX_ARCHITECTURES )
|
||||
STRING(REGEX REPLACE " -arch " "," LIBWXPYTHON_ARCHITECTURES ${CMAKE_OSX_ARCHITECTURES})
|
||||
SET( LIBWXPYTHON_OPTS ${LIBWXPYTHON_OPTS} --mac_arch=${LIBWXPYTHON_ARCHITECTURES})
|
||||
endif( CMAKE_OSX_ARCHITECTURES )
|
||||
|
||||
if( CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
|
||||
SET( LIBWXPYTHON_PRECMD export CFLAGS=-Qunused-arguments && )
|
||||
endif()
|
||||
endif(APPLE)
|
||||
|
||||
if ( KICAD_BUILD_STATIC )
|
||||
#message fail
|
||||
set( LIBWXPYTHON_BUILDTYPE "--disable-shared" )
|
||||
endif( KICAD_BUILD_STATIC )
|
||||
|
||||
# <SOURCE_DIR> = ${PREFIX}/src/libwx
|
||||
# There is a Bazaar 'boost scratch repo' in <SOURCE_DIR>/boost and after committing pristine
|
||||
# download, the patch is applied. This lets you regenerate a new patch at any time
|
||||
# easily, simply by editing the working tree in <SOURCE_DIR> and doing "bzr diff" in there.
|
||||
|
||||
ExternalProject_Add( libwxpython
|
||||
PREFIX "${PREFIX}"
|
||||
DOWNLOAD_DIR "${DOWNLOAD_DIR}"
|
||||
URL http://sourceforge.net/projects/wxpython/files/wxPython/${LIBWXPYTHON_RELEASE}/wxPython-src-${LIBWXPYTHON_RELEASE}.tar.bz2
|
||||
URL_MD5 ${LIBWXPYTHON_MD5}
|
||||
STAMP_DIR "${PREFIX}"
|
||||
|
||||
BUILD_IN_SOURCE 1
|
||||
|
||||
PATCH_COMMAND bzr revert
|
||||
COMMAND bzr patch -p0 "${PROJECT_SOURCE_DIR}/patches/wxpython-3.0.0_macosx.patch"
|
||||
COMMAND bzr patch -p0 "${PROJECT_SOURCE_DIR}/patches/wxpython-3.0.0_macosx_multiarch.patch" # http://trac.wxwidgets.org/ticket/15957
|
||||
|
||||
UPDATE_COMMAND ${CMAKE_COMMAND} -E remove_directory "${LIBWXPYTHON_ROOT}"
|
||||
COMMAND ${LIBWXPYTHON_EXEC} wxPython/build-wxpython.py --clean
|
||||
|
||||
CONFIGURE_COMMAND ${LIBWXPYTHON_PRECMD} ${LIBWXPYTHON_EXEC} wxPython/build-wxpython.py --prefix=${LIBWXPYTHON_ROOT} --unicode --install ${LIBWXPYTHON_OPTS}
|
||||
|
||||
#BINARY_DIR "${PREFIX}"
|
||||
|
||||
BUILD_COMMAND true
|
||||
|
||||
INSTALL_DIR "${LIBWXPYTHON_ROOT}"
|
||||
INSTALL_COMMAND true
|
||||
)
|
||||
|
||||
ExternalProject_Add_Step( libwxpython bzr_commit_libwxpython
|
||||
COMMAND bzr ci -q -m pristine <SOURCE_DIR>
|
||||
COMMENT "committing pristine libwxpython files to 'libwxpython scratch repo'"
|
||||
DEPENDERS patch
|
||||
)
|
||||
|
||||
|
||||
ExternalProject_Add_Step( libwxpython bzr_add_libwxpython
|
||||
COMMAND bzr add -q ${PREFIX}/src/libwxpython
|
||||
COMMENT "adding pristine libwxpython files to 'libwxpython scratch repo'"
|
||||
DEPENDERS bzr_commit_libwxpython
|
||||
)
|
||||
|
||||
|
||||
ExternalProject_Add_Step( libwxpython bzr_init_libwxpython
|
||||
COMMAND bzr init -q <SOURCE_DIR>
|
||||
COMMENT "creating 'libwxpython scratch repo' specifically for libwx to track libwx patches"
|
||||
DEPENDERS bzr_add_libwxpython
|
||||
DEPENDEES download
|
||||
)
|
||||
|
||||
######
|
||||
# Now is time to search what we have built
|
||||
######
|
||||
|
||||
ExternalProject_Add_Step( libwxpython libwxpython_recursive_message
|
||||
COMMAND cmake .
|
||||
COMMENT "*** RERUN CMAKE - wxWidgets built, now reissue a cmake to build Kicad"
|
||||
DEPENDEES install
|
||||
)
|
||||
|
||||
@@ -1,119 +0,0 @@
|
||||
# This program source code file is part of KICAD, a free EDA CAD application.
|
||||
#
|
||||
# Copyright (C) 2013 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
|
||||
# Copyright (C) 2013 Kicad Developers, see AUTHORS.txt for contributors.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# 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 General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, you may find one here:
|
||||
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
# or you may search the http://www.gnu.org website for the version 2 license,
|
||||
# or you may write to the Free Software Foundation, Inc.,
|
||||
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
|
||||
# Downloads and builds LIBWX
|
||||
|
||||
#-----<configure>----------------------------------------------------------------
|
||||
|
||||
set( LIBWX_RELEASE 3.0.0 )
|
||||
set( LIBWX_MD5 241998efc12205172ed24c18788ea2cd ) # re-calc this on every RELEASE change
|
||||
|
||||
# The boost headers [and static libs if built] go here, at the top of KiCad
|
||||
# source tree in boost_root.
|
||||
set( LIBWX_ROOT "${PROJECT_SOURCE_DIR}/libwx_root" )
|
||||
|
||||
#-----</configure>---------------------------------------------------------------
|
||||
|
||||
if( NOT BZIP2_FOUND )
|
||||
find_package( BZip2 REQUIRED )
|
||||
endif()
|
||||
|
||||
set( PREFIX ${DOWNLOAD_DIR}/libwx )
|
||||
|
||||
if (APPLE)
|
||||
if( CMAKE_OSX_ARCHITECTURES )
|
||||
STRING(REGEX REPLACE " -arch " "," LIBWX_ARCHITECTURES ${CMAKE_OSX_ARCHITECTURES})
|
||||
SET( LIBWX_ARCHITECTURES --enable-universal_binary=${LIBWX_ARCHITECTURES})
|
||||
endif( CMAKE_OSX_ARCHITECTURES )
|
||||
endif(APPLE)
|
||||
|
||||
if ( KICAD_BUILD_STATIC )
|
||||
set( LIBWX_BUILDTYPE "--disable-shared" )
|
||||
endif( KICAD_BUILD_STATIC )
|
||||
|
||||
# <SOURCE_DIR> = ${PREFIX}/src/libwx
|
||||
# There is a Bazaar 'boost scratch repo' in <SOURCE_DIR>/boost and after committing pristine
|
||||
# download, the patch is applied. This lets you regenerate a new patch at any time
|
||||
# easily, simply by editing the working tree in <SOURCE_DIR> and doing "bzr diff" in there.
|
||||
|
||||
ExternalProject_Add( libwx
|
||||
PREFIX "${PREFIX}"
|
||||
DOWNLOAD_DIR "${DOWNLOAD_DIR}"
|
||||
URL http://downloads.sourceforge.net/project/wxwindows/${LIBWX_RELEASE}/wxWidgets-${LIBWX_RELEASE}.tar.bz2
|
||||
URL_MD5 ${LIBWX_MD5}
|
||||
STAMP_DIR "${PREFIX}"
|
||||
|
||||
BUILD_IN_SOURCE 1
|
||||
|
||||
PATCH_COMMAND bzr revert
|
||||
COMMAND bzr patch -p0 "${PROJECT_SOURCE_DIR}/patches/wxwidgets-3.0.0_macosx.patch"
|
||||
COMMAND bzr patch -p0 "${PROJECT_SOURCE_DIR}/patches/wxwidgets-3.0.0_macosx_bug_15908.patch"
|
||||
|
||||
UPDATE_COMMAND ${CMAKE_COMMAND} -E remove_directory "${LIBWX_ROOT}"
|
||||
|
||||
CONFIGURE_COMMAND ./configure --prefix=${LIBWX_ROOT} -with-opengl --enable-aui --enable-debug_info -with-expat=builtin --with-regex=builtin --enable-utf8 ${LIBWX_ARCHITECTURES} ${LIBWX_BUILDTYPE}
|
||||
#BINARY_DIR "${PREFIX}"
|
||||
|
||||
BUILD_COMMAND $(MAKE) VERBOSE=1
|
||||
|
||||
INSTALL_DIR "${LIBWX_ROOT}"
|
||||
INSTALL_COMMAND make install
|
||||
)
|
||||
|
||||
#SET directories
|
||||
set(wxWidgets_BIN_DIR ${LIBWX_ROOT}/bin)
|
||||
set(wxWidgets_CONFIG_EXECUTABLE ${LIBWX_ROOT}/bin/wx-config)
|
||||
set(wxWidgets_INCLUDE_DIRS ${LIBWX_ROOT}/include)
|
||||
set(wxWidgets_LIBRARY_DIRS ${LIBWX_ROOT}/lib)
|
||||
|
||||
|
||||
ExternalProject_Add_Step( libwx bzr_commit_libwx
|
||||
COMMAND bzr ci -q -m pristine <SOURCE_DIR>
|
||||
COMMENT "committing pristine libwx files to 'libwx scratch repo'"
|
||||
DEPENDERS patch
|
||||
)
|
||||
|
||||
|
||||
ExternalProject_Add_Step( libwx bzr_add_libwx
|
||||
COMMAND bzr add -q ${PREFIX}/src/libwx
|
||||
COMMENT "adding pristine libwx files to 'libwx scratch repo'"
|
||||
DEPENDERS bzr_commit_libwx
|
||||
)
|
||||
|
||||
|
||||
ExternalProject_Add_Step( libwx bzr_init_libwx
|
||||
COMMAND bzr init -q <SOURCE_DIR>
|
||||
COMMENT "creating 'libwx scratch repo' specifically for libwx to track libwx patches"
|
||||
DEPENDERS bzr_add_libwx
|
||||
DEPENDEES download
|
||||
)
|
||||
|
||||
######
|
||||
# Now is time to search what we have built
|
||||
######
|
||||
|
||||
ExternalProject_Add_Step( libwx libwx_recursive_message
|
||||
COMMAND cmake .
|
||||
COMMENT "*** RERUN CMAKE - wxWidgets built, now reissue a cmake to build Kicad"
|
||||
DEPENDEES install
|
||||
)
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@@ -1,29 +0,0 @@
|
||||
|
||||
KIWAY Build Symbols, Definitions and Intentions
|
||||
|
||||
|
||||
COMPILING_DLL:
|
||||
|
||||
This is a signal to import_export.h, and when present, toggles the
|
||||
interpretation of the #defines in that file. Its purpose should not be
|
||||
extended beyond this.
|
||||
|
||||
|
||||
USE_KIWAY_DLLS:
|
||||
|
||||
Comes from CMake as a user configuration variable, settable in the Cmake
|
||||
user interface. It decides if KiCad will be built with the *.kiface program
|
||||
modules.
|
||||
|
||||
|
||||
BUILD_KIWAY_DLL:
|
||||
|
||||
Comes from CMake, but at the 2nd tier, not the top tier. By 2nd tier,
|
||||
something like pcbnew/CMakeLists.txt, not /CMakeLists.txt is meant. It is
|
||||
not a user configuration variable. Instead, the 2nd tier CMakeLists.txt file
|
||||
looks at the top level USE_KIWAY_DLLS and decides how the object files under
|
||||
the 2nd tier's control will be built. If it decides it wants to march in
|
||||
lockstep with USE_KIWAY_DLLS, then this local CMakeLists.txt file may pass a
|
||||
defined BUILD_KIWAY_DLL (singular) on the compiler command line to the
|
||||
pertinent set of compilation steps under its control.
|
||||
|
||||
@@ -31,22 +31,15 @@ KiCad from source.
|
||||
* bzr - Bazaar version control system
|
||||
* CMake - Cross-platform make
|
||||
* GLUT - The OpenGL Utility Library
|
||||
* GLEW
|
||||
* wxGTK or wxWidgets - The wxWidgets GUI toolkit with GTK+ bindings
|
||||
* libbz2 (dev)
|
||||
* libcairo (dev)
|
||||
|
||||
* Boost - Collection of portable C++ source libraries
|
||||
boost will be automagically downloaded, copied in kicad sources tree and patched,
|
||||
boost will be automagically downloaded and copied in kicad sources tree,
|
||||
the first time you compile kicad.
|
||||
|
||||
Useful, but not required:
|
||||
* Doxygen - Documentation system for several programming languages
|
||||
|
||||
Required to build Kicad with scripting (using python) support:
|
||||
Python
|
||||
Swig
|
||||
|
||||
KiCad uses the Bazaar version control system to track source code changes,
|
||||
and download the boost libraries needed by Kicad.
|
||||
Be sure you bzr install also includes bzrtools.
|
||||
@@ -67,43 +60,40 @@ Install or Build wxWidgets
|
||||
WARNING:
|
||||
see wxWidgets_patch_notes.txt for patches and issues in wxWidgets.
|
||||
|
||||
On Windows, download
|
||||
http://sourceforge.net/projects/wxwindows/files/3.0.0/wxWidgets-3.0.0.zip/download
|
||||
If on Windows, download
|
||||
http://sourceforge.net/projects/wxwindows/files/wxAll/2.9.3/wxWidgets-2.9.3.zip/download
|
||||
or a newer version.
|
||||
Do NOT use previous versions which all have annoying issues for KiCad.
|
||||
Start msys so you have a bash shell.
|
||||
Note also since 2.9 versions no need to build a "debug" version of the wxWidgets library,
|
||||
the release and the debug version are same.
|
||||
the release abd the debug version are same.
|
||||
|
||||
Unzip the wxWidgets zip file into the build directory. Change directories into
|
||||
there, and then:
|
||||
|
||||
mkdir Release
|
||||
cd Release
|
||||
../configure --with-opengl
|
||||
../configure --enable-unicode --enable-monolithic=no --disable-shared --with-opengl
|
||||
make
|
||||
|
||||
and under Linux, but not under Windows:
|
||||
sudo make install that install wxWidgets libs and headers in /usr/local/
|
||||
|
||||
|
||||
On linux, yo can also download wxWidgets 3.0 (recommandedd)
|
||||
or you can use your package manager to install the
|
||||
development versions of the wxWidgets packages which include the C++ headers.
|
||||
The recommended way is to build wxWidgets from source, and use wxWidgets 3.0
|
||||
or more recent (Older versions have a print function which does not work).
|
||||
Verify that wx-config is in your path by running it from a command prompt.
|
||||
Linux users then go to next step.
|
||||
If on linux, you can use your package manager to install the
|
||||
development versions of the wxWidgets packages which include the C++ headers. An
|
||||
alternative is to build static libaries from source. Verify that wx-config is in
|
||||
your path by running it from a command prompt. Linux users then go to next step.
|
||||
|
||||
Install CMake
|
||||
-------------
|
||||
On windows, download the installation binary for windows from cmake.org.
|
||||
If windows, download the installation binary for windows from cmake.org.
|
||||
Install that and choose to add cmake to your path during installation. You
|
||||
will have to restart your command shell for the new path to take effect.
|
||||
will have to restart and command shells for the new path to take effect.
|
||||
Verify that cmake is in your path by trying to run it from a command prompt.
|
||||
|
||||
|
||||
On linux, use your package manager to install cmake. You should get cmake 2.8.4
|
||||
If linux, use your package manager to install cmake. You should get cmake 2.6.4
|
||||
or later. If only an older one is available in your package repository, build
|
||||
cmake from source. Verify that cmake is in your path by trying to run it from a
|
||||
command prompt.
|
||||
@@ -116,50 +106,25 @@ To download files from Launchpad repository, you should install bazaar (bzr) th
|
||||
version control system like subversion, mercurial, git...
|
||||
|
||||
Launchpad repository handle 2 branches for KiCda sources:
|
||||
- a product branch (used by developers, which is most of time usable in production)
|
||||
- a stable branch (a copy of the testing branch,
|
||||
when the product branch is a stable state))
|
||||
Remarks:
|
||||
- The product branch is actively maintained
|
||||
- From the product branch, you can go back to any previous version, using bzr features
|
||||
- The stable branch is poorly or not maintained (and could be removed)
|
||||
- a testing branch (used by developers)
|
||||
- a stable branch (a copy of the testing branch, when this testing branch is near a stable state))
|
||||
|
||||
In order to have a working Kicad installtion, you need
|
||||
- sources to build binaries
|
||||
- libraries (they are not included in sources)
|
||||
- documentation and translations (they are not included in sources)
|
||||
|
||||
product branch:
|
||||
bzr branch lp:kicad kicad_src
|
||||
Testing branch:
|
||||
bzr branch lp:kicad kicad_testing
|
||||
|
||||
Stable branch:
|
||||
bzr branch lp:kicad/stable kicad_src
|
||||
bzr branch lp:kicad/stable kicad_stable
|
||||
|
||||
Components and Footprints libraries
|
||||
all (schematic libs, 3D shapes ...) but new footprints libraries (use Download zip tool)
|
||||
https://github.com/KiCad/kicad-library/
|
||||
|
||||
New footprints libraries (use Download zip tool for each lib you want)
|
||||
https://github.com/KiCad/ for footprint libs (*.pretty folders)
|
||||
|
||||
A mirror of github is available, using bzr:
|
||||
(schematic libs, 3D shapes ... all but new footprints libraries)
|
||||
bzr checkout lp:~kicad-product-committers/kicad/library
|
||||
|
||||
Old legacy libraries:
|
||||
bzr checkout lp:~dickelbeck/kicad/library-read-only
|
||||
|
||||
Note also Kicad is able to read on github.com/KiCad/ the *.pretty folders
|
||||
without download, using github plugin.
|
||||
(however the time to read them can be long)
|
||||
bzr branch lp:~kicad-lib-committers/kicad/library kicad_libraries
|
||||
|
||||
Documentation and translations:
|
||||
bzr branch lp:~kicad-developers/kicad/doc kicad_doc
|
||||
|
||||
Create Makefiles with CMake
|
||||
---------------------------
|
||||
On windows, go into your msys shell.
|
||||
Linux and windows users both then make two "out of source" build directories:
|
||||
If windows, go into your msys shell. Linux and windows users both then make
|
||||
two "out of source" build directories:
|
||||
cd <kicadSource>
|
||||
mkdir -p build/release
|
||||
mkdir build/debug (if you want a debug version of KiCad)
|
||||
@@ -168,10 +133,10 @@ Linux and windows users both then make two "out of source" build directories:
|
||||
On either cmake command line shown below, you can optionally include
|
||||
-DCMAKE_INSTALL_PREFIX=<finallInstallDir>
|
||||
|
||||
On windows, run the following command:
|
||||
cmake -G "MSYS Makefiles" -DCMAKE_BUILD_TYPE=Release -DwxWidgets_ROOT_DIR=<wxInstallDir> ../../
|
||||
If windows, run the following command:
|
||||
cmake -G "MSYS Makefiles" -DCMAKE_BUILD_TYPE=Release -DKICAD_TESTING_VERSION=ON -DwxWidgets_ROOT_DIR=<wxInstallDir> ../../
|
||||
|
||||
On linux, run instead the following command:
|
||||
If linux, run instead the following command:
|
||||
cmake -DCMAKE_BUILD_TYPE=Release ../../
|
||||
|
||||
Take a look at CMakeCache.txt, and in particular CMAKE_INSTALL_PREFIX, which
|
||||
@@ -201,16 +166,18 @@ On either cmake command line shown below, you can optionally include
|
||||
Although normally you do not install the Debug binaries, you can debug them
|
||||
where they were built.
|
||||
|
||||
On windows, run the following command:
|
||||
cmake -G "MSYS Makefiles" -DCMAKE_BUILD_TYPE=Debug -DwxWidgets_ROOT_DIR=<wxInstallDir> ../../
|
||||
If windows, run the following command:
|
||||
cmake -G "MSYS Makefiles" -DCMAKE_BUILD_TYPE=Debug -DKICAD_TESTING_VERSION=ON -DwxWidgets_ROOT_DIR=<wxInstallDir> ../../
|
||||
where <wxInstallDir> is <wxWidgets path>/Release
|
||||
|
||||
On linux, run instead the following command:
|
||||
If linux, run instead the following command:
|
||||
cmake -DCMAKE_BUILD_TYPE=Debug -DwxWidgets_USE_DEBUG=ON ../../
|
||||
|
||||
Make the Debug binaries:
|
||||
make
|
||||
|
||||
Note: that it is easy to build only a specific binary such as pcbnew alone:
|
||||
make pcbnew
|
||||
|
||||
See Documentation/compiling/build-config.txt for a list of all CMake options
|
||||
available when compiling KiCad.
|
||||
|
||||
See ./cmake_config.txt for customizing the KiCad build setting.
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
Bazaar
|
||||
======
|
||||
|
||||
------
|
||||
KiCad uses the Bazaar version control system to track source code changes,
|
||||
and download the boost libraries needed by Kicad.
|
||||
The easiest way to get a copy of the KiCad source is to use Bazaar.
|
||||
@@ -12,8 +11,7 @@ Be sure bzrtools is also installed.
|
||||
boost libraries will be downloaded the first time you build Kicad.
|
||||
|
||||
CMake
|
||||
=====
|
||||
|
||||
-----
|
||||
KiCad uses CMake to generate the build files specific for the target platform
|
||||
specified by the developer. This document attempts to define some of the more
|
||||
common CMake and KiCad build configuration settings. You can use CMake either
|
||||
@@ -25,8 +23,7 @@ http://www.cmake.org/cmake/help/documentation.html.
|
||||
|
||||
|
||||
Useful CMake Build Settings.
|
||||
============================
|
||||
|
||||
----------------------------
|
||||
This section defines some of the more common CMake build configuration setting
|
||||
used when configuring KiCad. These settings are valid for all projects that
|
||||
use CMake.
|
||||
@@ -42,18 +39,14 @@ switch on the command line. Please note, only a small subset of these project
|
||||
generators are supported. If you want to use Eclipse on Linux to build KiCad,
|
||||
you may be in for a lot of work.
|
||||
|
||||
|
||||
CMAKE_BUILD_TYPE (Release/Debug/RelWithDebInfo/MinSizeRel)
|
||||
----------------------------------------------------------
|
||||
Default: Release
|
||||
|
||||
When configuring the KiCad build for the command line you must specify build
|
||||
type. To create a debug build, set CMAKE_BUILD_TYPE to Debug. To create a
|
||||
release build, set CMAKE_BUILD_TYPE to Release. See the CMake documentation
|
||||
for other build types. For IDE project files, the build type can be selected
|
||||
by the IDE configuration manager.
|
||||
|
||||
|
||||
CMAKE_INSTALL_PATH (InstallPath)
|
||||
--------------------------------
|
||||
By default CMake will select the correct install path for your platform. If
|
||||
@@ -64,8 +57,7 @@ installed on your system.
|
||||
|
||||
|
||||
wxWidgets Library Configuration.
|
||||
================================
|
||||
|
||||
--------------------------------
|
||||
KiCad is built using the wxWidgets library. The following options allow you
|
||||
to specifically tailor the wxWidgets library configuration. For the complete
|
||||
list of wxWidgets setting see CMakeModules/FindwxWidgets.cmake in the KiCad
|
||||
@@ -77,147 +69,94 @@ CMake looks in the standard platform locations to find the default version of
|
||||
the wxWidgets library. If you wish to use a custom built wxWidgets library,
|
||||
set wxWidgets_ROOT_DIR to the correct path.
|
||||
|
||||
|
||||
wxWidgets_USE_DEBUG (ON/OFF)
|
||||
----------------------------
|
||||
Default: OFF
|
||||
|
||||
When creating a debug build of KiCad, it is often useful to link against the
|
||||
debug build of the wxWidgets. To use the debug build of wxWidgets, set
|
||||
wxWidgets_USE_DEBUG to ON.
|
||||
|
||||
|
||||
wxWidgets_USE_UNICODE (ON/OFF)
|
||||
------------------------------
|
||||
Default: ON (wxWidgets 2.9 or later), OFF (older versions)
|
||||
|
||||
If your platform supports Unicode and you wish to build KiCad with Unicode
|
||||
If you platform supports Unicode and you wish to build KiCad with Unicode
|
||||
support, set wxWidgets_USE_UNICODE to ON. Please note as of the 2.9 branch
|
||||
this option is not required.
|
||||
|
||||
|
||||
KiCad Specific Options
|
||||
======================
|
||||
|
||||
----------------------
|
||||
All of the configuration settings below are specific to the KiCad project.
|
||||
If for any reason you add or remove a build option to the KiCad CMake files,
|
||||
please update the list below.
|
||||
|
||||
KICAD_SKIP_BOOST (ON/OFF)
|
||||
--------------------------
|
||||
Default: OFF
|
||||
|
||||
Use the version of the Boost library installed on the system rather than
|
||||
building a local copy.
|
||||
|
||||
WARNING: The KiCad developers strongly advise you to build the bundled copy of
|
||||
the Boost library, as it is known to work with KiCad. Other versions may
|
||||
contain bugs that may result in KiCad errors.
|
||||
KICAD_STABLE_VERSION (ON/OFF)
|
||||
-----------------------------
|
||||
This option enables or disables the stable version string to be created and
|
||||
used when building KiCad. It is mutually exclusive with KICAD_TESTING_VERSION.
|
||||
|
||||
KICAD_TESTING_VERSION (ON/OFF)
|
||||
------------------------------
|
||||
This option enables or disables the testing version string to be created and
|
||||
used when building KiCad. It is mutually exclusive with KICAD_STABLE_VERSION.
|
||||
|
||||
USE_WX_GRAPHICS_CONTEXT (ON/OFF)
|
||||
--------------------------------
|
||||
Default: OFF
|
||||
|
||||
This option is *Experimental*. It enables advanced drawing library code using
|
||||
wxGraphicsContext and should only be used for testing purposes. Under Windows,
|
||||
a very recent version of mingw is needed. It also requires wxWidgets to be
|
||||
built with the --enable-graphics_ctx configuration switch.
|
||||
|
||||
This option is *Experimental* and used the advanced drawing library code
|
||||
using wxGraphicsContext and should only be used for testing purposes.
|
||||
Under Windows, a very recent version of mingw is needed. It also requires
|
||||
wxWidgets to be built with the --enable-graphics_ctx configuration switch.
|
||||
|
||||
USE_IMAGES_IN_MENUS (ON/OFF)
|
||||
----------------------------
|
||||
Default: OFF for OSX, ON for other platforms.
|
||||
|
||||
This option is used to enable or disable building KiCad with images in menu
|
||||
items. If this is not defined when CMake is used to create the build files,
|
||||
images will be included in menu items on all platforms except OSX.
|
||||
|
||||
|
||||
DOWNLOAD_DIR (PATH)
|
||||
KICAD_GOST (ON/OFF)
|
||||
-------------------
|
||||
Default: <source directory>/.downloads-by-cmake
|
||||
|
||||
Some external dependencies are automatically download and built when you
|
||||
compile KiCad. This option specifies which directory they are stored in. If you
|
||||
are building multiple copies of KiCad (e.g., to test different features or your
|
||||
own modifications), it is recommended you set this option to a global directory
|
||||
to avoid download and building the dependencies multiple times.
|
||||
|
||||
|
||||
KICAD_USER_CONFIG_DIR (PATH)
|
||||
----------------------------
|
||||
Default: Home directory (Unix-based systems), Application data directory (Windows)
|
||||
|
||||
This option specifies where to store user-specific configuration information.
|
||||
|
||||
This option is used to enable or disable the GOST notation for multiple gates
|
||||
per package in Eeschema. The default is OFF
|
||||
|
||||
KICAD_KEEPCASE (ON/OFF)
|
||||
-----------------------
|
||||
Default: ON
|
||||
|
||||
If this is OFF, component names are automatically converted to uppercase meaning
|
||||
they are case insensitive. If it is ON, component names are not changed and
|
||||
are therefore case sensitive.
|
||||
|
||||
This option enables or disables turning off the automatic component name
|
||||
conversion to uppercase. The default is OFF which means component names will
|
||||
be converted to upper case.
|
||||
|
||||
USE_WX_OVERLAY (ON/OFF)
|
||||
-----------------------
|
||||
Default: ON for OSX, OFF for other platforms.
|
||||
|
||||
This option enables or disables the use of wxOverlay for drawing operations.
|
||||
Warning, this is experimental!
|
||||
|
||||
This option enables or disables wxOverlay for drawing operation on OSX. It is
|
||||
OFF by default on all platforms except OSX. Warning, this is experimental!
|
||||
|
||||
KICAD_SCRIPTING (ON/OFF)
|
||||
------------------------
|
||||
Default: OFF
|
||||
|
||||
This option enables or disables building Python scripting support within KiCad.
|
||||
Currently only Pcbnew is supported. This option requires SWIG and Python to be
|
||||
installed on the system.
|
||||
|
||||
This option enables or disables building Python scripting support for KiCad.
|
||||
The default is OFF. Currently only Pcbnew is supported. This option requires
|
||||
that SWIG and Python are installed on the system.
|
||||
|
||||
KICAD_SCRIPTING_MODULES (ON/OFF)
|
||||
--------------------------------
|
||||
Default: OFF
|
||||
|
||||
This option enables or disables building KiCad Python modules that can be used
|
||||
externally by Python. Currently only Pcbnew is supported. This option
|
||||
requires SWIG and Python to be installed on the system.
|
||||
|
||||
This option enables or disables building the KiCad modules that can be used
|
||||
from scripting languages. The default is OFF. Currently only Pcbnew is
|
||||
supported. This option requires that SWIG and Python are installed on the
|
||||
system.
|
||||
|
||||
KICAD_SCRIPTING_WXPYTHON (ON/OFF)
|
||||
---------------------------------
|
||||
Default: OFF
|
||||
|
||||
This option enables or disables building wxPython support into the KiCad
|
||||
scripting support. Currently only Pcbnew is supported. This option requires
|
||||
SWIG, Python, and wxPython to be installed on the system.
|
||||
|
||||
This option enables or disables building wxPython support into KiCad for
|
||||
python and py.shell. The default is OFF. Currently only Pcbnew is
|
||||
supported. This option requires that SWIG, Python, and wxPython are
|
||||
installed on the system.
|
||||
|
||||
PYTHON_SITE_PACKAGE_PATH (PATH)
|
||||
-------------------------------
|
||||
Default: System site library path
|
||||
|
||||
When building KiCad with Python scripting enable, the Python site library path
|
||||
is used by default. If you want to install the KiCad Python extension in a
|
||||
different path, set this variable to the desired path.
|
||||
|
||||
|
||||
BUILD_GITHUB_PLUGIN (ON/OFF)
|
||||
----------------------------
|
||||
Default: OFF
|
||||
|
||||
This option enables or disables building KiCad with a pcbnew plugin for loading
|
||||
footprints from a GitHub repository.
|
||||
|
||||
|
||||
KICAD_REPO_NAME (STRING)
|
||||
------------------------
|
||||
Default: "product"
|
||||
|
||||
The name of the repository this copy of KiCad was compiled from. This is
|
||||
reported in the "About" dialog and is useful for people who are working with
|
||||
multiple copies of the code from different sources. The default value is
|
||||
"product", the name of the main development branch on Launchpad.
|
||||
USE_FP_LIB_TABLE (ON/OFF)
|
||||
-------------------------
|
||||
This option enable or disables building KiCad with the new footprint library
|
||||
table support. The default setting (OFF) builds KiCad with the legacy library
|
||||
path support. This option is experimental until the library table support is
|
||||
ready for release.
|
||||
|
||||
@@ -149,7 +149,8 @@ command line enter the following commands:
|
||||
To create a release build of KiCad, run the following command:
|
||||
#cd build
|
||||
#cmake -G "MSYS Makefiles" \ # Back slashes are not required
|
||||
-DCMAKE_BUILD_TYPE=Release ../../ \ # and are for formatting only.
|
||||
-DCMAKE_BUILD_TYPE=Release \ # and are for formatting only.
|
||||
-DKICAD_TESTING_VERSION=ON ../../
|
||||
|
||||
If the configuration fails, you have failed to install the required software
|
||||
on you system. The error message should give you a good indication of what is
|
||||
@@ -186,7 +187,8 @@ To create a debug version of KiCad, enter the following commands:
|
||||
|
||||
#cd <kicadSource>/build/debug
|
||||
#cmake -G "MSYS Makefiles" \
|
||||
-DCMAKE_BUILD_TYPE=Debug ../../
|
||||
-DCMAKE_BUILD_TYPE=Debug \
|
||||
-DKICAD_TESTING_VERSION=ON ../../
|
||||
#make
|
||||
|
||||
Generally speaking you do not install debug binaries. They can be debugged in
|
||||
@@ -207,7 +209,8 @@ compile the source as described above.
|
||||
#cmake -G "MSYS Makefiles" \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DKICAD_PYTHON_SCRIPTING=ON \
|
||||
-DKICAD_PYTHON_MODULES=ON ../../
|
||||
-DKICAD_PYTHON_MODULES=ON \
|
||||
-DKICAD_TESTING_VERSION=ON ../../
|
||||
|
||||
You only need to include the KICAD_PYTHON_MODULES option if you want to
|
||||
install the python modules that ship with KiCad. Also note that the wxPython
|
||||
|
||||
@@ -1,10 +1,8 @@
|
||||
Compiling KiCad on Apple Mac OS X
|
||||
=================================
|
||||
First written: 2010-01-31
|
||||
by: Jerry Jacobs <xor.gate.engineering[at]gmail[dot]com>
|
||||
Last edited by: Jerry Jacobs <xor.gate.engineering[at]gmail[dot]com>
|
||||
|
||||
Modified at: 2014-02-07
|
||||
by: Marco Serantoni <marco.serantoni[at]gmail[dot]com>
|
||||
|
||||
Snow Leopard
|
||||
------------
|
||||
@@ -13,51 +11,158 @@ Requirements
|
||||
* XCode Tools (http://developer.apple.com/tools/xcode)
|
||||
* bzr (bazaar)
|
||||
* CMake (http://www.cmake.org)
|
||||
* wxWidgets 2.9 (http://www.wxwidgets.org/downloads)
|
||||
* Doxygen (http://www.doxygen.nl)
|
||||
* ccache (http://www.macports.org)
|
||||
|
||||
The build of Kicad for OSX is now easier than before.
|
||||
The building system will download and compile the needed libraries for you
|
||||
patching them accordly to the needs.
|
||||
|
||||
Building Kicad with no support for Scripting
|
||||
Building wxWidgets 2.9 Universal
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
To check if your tools and libraries are installed check with file for architectures.
|
||||
|
||||
The building needs to know if you want a static binary or a dynamic one
|
||||
Just set ONE of those two options KICAD_BUILD_STATIC or KICAD_BUILD_DYNAMIC
|
||||
|
||||
If you set KICAD_BUILD_DYNAMIC the building system will build all and include
|
||||
the needed libraries for each executable in its bundle
|
||||
user@macosx$ file /Developer/SDKs/MacOSX10.5.sdk/usr/lib/libSystem.dylib
|
||||
|
||||
cmake -DKICAD_BUILD_DYNAMIC=ON .
|
||||
make
|
||||
/Developer/SDKs/MacOSX10.5.sdk/usr/lib/libSystem.dylib: Mach-O universal binary with 4 architectures
|
||||
/Developer/SDKs/MacOSX10.5.sdk/usr/lib/libSystem.dylib (for architecture ppc7400): Mach-O dynamically linked shared library stub ppc
|
||||
/Developer/SDKs/MacOSX10.5.sdk/usr/lib/libSystem.dylib (for architecture ppc64)Mach-O 64-bit dynamically linked shared library stub ppc64
|
||||
/Developer/SDKs/MacOSX10.5.sdk/usr/lib/libSystem.dylib (for architecture i386):Mach-O dynamically linked shared library stub i386
|
||||
/Developer/SDKs/MacOSX10.5.sdk/usr/lib/libSystem.dylib (for architecture x86_64): Mach-O 64-bit dynamically linked shared library stub x86_64
|
||||
|
||||
Building Kicad with support for Scripting
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Due some problems with some dependencies the build of this kind of binary is a bit
|
||||
more complex, you should initially set KICAD_BUILD_DYNAMIC
|
||||
then issue for example
|
||||
You need the architectures what you are compiling for !
|
||||
|
||||
cmake -DKICAD_BUILD_DYNAMIC=ON .
|
||||
make swig
|
||||
If you have problems that the 64bits library is not build you should add in
|
||||
the configure file:
|
||||
|
||||
After successfully building you can set your KICAD_SCRIPTING* options (for example):
|
||||
At time of writing (2009-01-16) this is on line 18381
|
||||
changing this: OSX_UNIV_OPTS="-arch ppc -arch i386"
|
||||
into this: OSX_UNIV_OPTS="-arch ppc -arch i386 -arch x86_64"
|
||||
|
||||
cmake -DKICAD_SCRIPTING=ON -DKICAD_SCRIPTING_WXPYTHON=ON -DKICAD_SCRIPTING_MODULES=ON .
|
||||
make
|
||||
Building a universal monolib wxWidgets 2.9 with the following parameters:
|
||||
./configure --enable-unicode=yes --enable-shared=no --enable-monolithic --with-opengl --with-expat=builtin --enable-universal_binary --enable-aui --enable-debug --with-osx_cocoa --with-macosx-sdk=/Developer/SDKs/MacOSX10.5.sdk/ --prefix=/opt/wxwidgets/<rev>
|
||||
|
||||
The system will build all accordling your choices and package all in the bundle
|
||||
I know bundles will be huge, but those will be autosufficient.
|
||||
<rev> Should be subsituded with the revision from SVN
|
||||
|
||||
Building Kicad for other processors or Universal binaries
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Then you should a message like this:
|
||||
|
||||
I wish remember you should set the processor like
|
||||
Configured wxWidgets 2.9.2 for `i686-apple-darwin10.4.0'
|
||||
|
||||
cmake -DCMAKE_OSX_ARCHITECTURES="x86_64"
|
||||
Which GUI toolkit should wxWidgets use? osx_cocoa
|
||||
Should wxWidgets be compiled into single library? yes
|
||||
Should wxWidgets be linked as a shared library? no
|
||||
Should wxWidgets support Unicode? yes (using UTF-8)
|
||||
What level of wxWidgets compatibility should be enabled?
|
||||
wxWidgets 2.6 no
|
||||
wxWidgets 2.8 yes
|
||||
Which libraries should wxWidgets use?
|
||||
STL no
|
||||
jpeg builtin
|
||||
png builtin
|
||||
regex builtin
|
||||
tiff builtin
|
||||
zlib sys
|
||||
expat builtin
|
||||
libmspack no
|
||||
sdl no
|
||||
|
||||
for other platforms
|
||||
|
||||
cmake -DCMAKE_OSX_ARCHITECTURES="x86_64 -arch i386"
|
||||
cmake -DCMAKE_OSX_ARCHITECTURES="x86_64 -arch i386 -arch ppc"
|
||||
If you don't need the debugging symbols then you can remove the --enable-debug parameter.
|
||||
|
||||
I know some you should prefer use ; as separator, this will be accomplished soon
|
||||
keeping support for both the syntaxes
|
||||
Compiling and installing:
|
||||
make
|
||||
sudo make install
|
||||
|
||||
|
||||
Move the old Mac OS X wxconfig and symlink it to the new compiled 2.9
|
||||
|
||||
sudo mv /usr/bin/wx-config /usr/bin/wx-config.osx
|
||||
sudo ln -s /opt/wxwidgets-svn/bin/wx-config /usr
|
||||
|
||||
Building KiCad
|
||||
~~~~~~~~~~~~~~
|
||||
Extract the sources or get them from subversion.
|
||||
|
||||
user@mac-osx$ cmake .
|
||||
|
||||
Regarding Kicad the only things i've changed are the Variables
|
||||
in the generated CMakeCache.txt
|
||||
|
||||
It depends on which CMake version you use:
|
||||
|
||||
//Flags used by the compiler during all build types.
|
||||
//This fixes also BOOST macro errors
|
||||
CMAKE_CXX_FLAGS:STRING=-D__ASSERTMACROS__
|
||||
|
||||
//Build architectures for OSX
|
||||
CMAKE_OSX_ARCHITECTURES:STRING=x86_64 -arch i386 -arch ppc -isysroot /Developer/SDKs/MacOSX10.5.sdk/ -mmacosx-version-min=10.5
|
||||
|
||||
//The product will be built against the headers and libraries located
|
||||
// inside the indicated SDK.
|
||||
CMAKE_OSX_SYSROOT:PATH=/Developer/SDKs/MacOSX10.5.sdk
|
||||
|
||||
//Minimum OS X version to target for deployment (at runtime); newer
|
||||
// APIs weak linked. Set to empty string for default value.
|
||||
CMAKE_OSX_DEPLOYMENT_TARGET:STRING=10.5
|
||||
|
||||
Or:
|
||||
|
||||
CMAKE_OSX_ARCHITECTURE = x86_64 -arch i386 -arch ppc -isysroot /Developer/SDKs/MacOSX10.5.sdk/ -mmacosx-version-min=10.5
|
||||
CMAKE_OSX_SYSROOT = /Developer/SDKs/MacOSX10.5.sdk
|
||||
CMAKE_CXX_FLAGS = -D__ASSERTMACROS__
|
||||
|
||||
|
||||
Then we invoke make:
|
||||
user@mac-osx$ make
|
||||
|
||||
It is also possible to give all the options on the commandline and not to edit the CMakeCache.txt. This is a oneliner for Leopard and up:
|
||||
|
||||
cmake ~/Repositories/testing -DKICAD_TESTING_VERSION=ON -DCMAKE_OSX_ARCHITECTURES="i386 -arch x86_64 -isysroot /Developer/SDKs/MacOSX10.6.sdk -mmacosx-version-min=10.6" -DCMAKE_CXX_FLAGS="-D__ASSERTMACROS__" -DCMAKE_OSX_SYSROOT="/Developer/SDKs/MacOSX10.6.sdk"
|
||||
|
||||
Optional compiler cache
|
||||
~~~~~~~~~~~~~~~~~~~~~~~
|
||||
If you (re)compile often, you would love to use cache. The best is to install it using macports and set the libexec symlink
|
||||
directory of ccache in your PATH variable.
|
||||
|
||||
Then start with a clean directory and invoke cmake, make sure that the C++ compiler points to /opt/local/libexec/ccache/g++
|
||||
|
||||
Further reading at http://trac.macports.org/wiki/howto/ccache
|
||||
|
||||
Known Problems
|
||||
~~~~~~~~~~~~~~
|
||||
In file included from
|
||||
/temp/kicad-sources/boost_1_38_0/boost/ptr_container/detail/reversible_ptr_container.hpp:22In
|
||||
file included from
|
||||
/temp/kicad-sources/boost_1_38_0/boost/ptr_container/detail/reversible_ptr_container.hpp:22,
|
||||
from
|
||||
/temp/kicad-sources/boost_1_38_0/boost/ptr_container/ptr_sequence_adapter.hpp:20,
|
||||
from
|
||||
/temp/kicad-sources/boost_1_38_0/boost/ptr_container/ptr_vector.hpp:20,
|
||||
from
|
||||
/temp/kicad-sources/kicad/include/board_item_struct.h:9,
|
||||
from /temp/kicad-sources/kicad/include/pcbstruct.h:10,
|
||||
from /temp/kicad-sources/kicad/3d-viewer/3d_viewer.h:29,
|
||||
from /temp/kicad-sources/kicad/3d-viewer/3d_aux.cpp:23:
|
||||
/temp/kicad-sources/boost_1_38_0/boost/ptr_container/detail/static_move_ptr.hpp:154:50:
|
||||
error: macro "check" passed 2 arguments, but takes just 1
|
||||
|
||||
CMAKE_CXX_FLAGS = -D__ASSERTMACROS__ fixes this :-)
|
||||
|
||||
|
||||
configure:18585: gcc -isysroot /Developer/SDKs/MacOSX10.5.sdk/ -mmacosx-version-min=10.5 -o conftest -arch i386 -arch x86_64 -arch ppc -arch i386 -arch x86_64 -arch ppc conftest.c >&5
|
||||
ld: warning: in /Developer/SDKs/MacOSX10.5.sdk//usr/lib/libSystem.dylib, missing required architecture ppc in file
|
||||
|
||||
Installing rosetta and xcode with all architectures fixes this "problem"
|
||||
|
||||
|
||||
ld: warning: in /Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks//QuickTime.framework/QuickTime, missing required architecture x86_64 in file
|
||||
|
||||
You get this error because the QuickTime 10.6 framework is not build with 64bit support. This not a real issue for KiCad because we don't use it anyway.
|
||||
|
||||
Undefined symbols:
|
||||
"TestForIntersectionOfStraightLineSegments(int, int, int, int, int, int, int, int, int*, int*, double*)", referenced from:
|
||||
clipLine(EDA_Rect*, int&, int&, int&, int&)in libcommon.a(gr_basic.cpp.o)
|
||||
|
||||
Make sure you marked the build type Release:
|
||||
|
||||
//Choose the type of build, options are: None(CMAKE_CXX_FLAGS or
|
||||
// CMAKE_C_FLAGS used) Debug Release RelWithDebInfo MinSizeRel.
|
||||
CMAKE_BUILD_TYPE:STRING=Release
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,761 +0,0 @@
|
||||
# Road Map # {#mainpage}
|
||||
|
||||
This document is the KiCad Developer's road map document. It is a living
|
||||
document that should be maintained as the project progresses. The goal of
|
||||
this document is to provide an overview for developers of where the project
|
||||
is headed to prevent resource conflicts and endless rehashing of previously
|
||||
discussed topics. It is broken into sections for each major component of
|
||||
the KiCad source code and documentation. It defines tasks that developers
|
||||
an use to contribute to the project and provides updated status information.
|
||||
Tasks should define clear objective and avoid vague generalizations so that
|
||||
a new developer can complete the task. It is not a place for developers to
|
||||
add their own personal wish list It should only be updated with approval
|
||||
of the project manager after discussion with the lead developers.
|
||||
|
||||
Each entry in the road map is made up of four sections. The goal should
|
||||
be a brief description of the what the road map entry will accomplish. The
|
||||
task section should be a list of deliverable items that are specific enough
|
||||
hat they can be documented as completed. The dependencies sections is a list
|
||||
of requirements that must be completed before work can begin on any of the
|
||||
tasks. The status section should include a list of completed tasks or marked
|
||||
as complete as when the goal is met.
|
||||
|
||||
[TOC]
|
||||
|
||||
# Project # {#project}
|
||||
This section defines the tasks for the project related goals that are not
|
||||
related to coding or documentation. It is a catch all for issues such as
|
||||
developer and user relations, dissemination of information on websites,
|
||||
policies, etc.
|
||||
|
||||
## Stable Release ## {#stable_release}
|
||||
**Goal:**
|
||||
|
||||
Provide a lightweight stable release mechanism that is robust enough to meet
|
||||
the requirements of Linux packagers and corporate users but avoid the burden
|
||||
of back porting fixes to a maintenance branch to avoid the additional work for
|
||||
developers.
|
||||
|
||||
**Task:**
|
||||
- Devise a process to have some type of reasonably stable release protocol
|
||||
to provide "stable" releases for Linux distribution packagers and corporate
|
||||
users.
|
||||
- Document "stable" release procedure.
|
||||
|
||||
**Dependencies:**
|
||||
- None
|
||||
|
||||
**Status:**
|
||||
- Initial planning stages.
|
||||
|
||||
|
||||
## Website Improvements ## {#website_improvements}
|
||||
**Goal:**
|
||||
|
||||
Make the website at www.kicad-pcb.org as the definitive resource for both
|
||||
users and developers which will provide a single point of reference instead
|
||||
of the many separate websites currently in used.
|
||||
|
||||
**Task:**
|
||||
- Define the content and design of the website.
|
||||
- Implement the new design.
|
||||
|
||||
**Dependencies:**
|
||||
- None
|
||||
|
||||
**Status:**
|
||||
- No progress.
|
||||
|
||||
|
||||
# General # {#general}
|
||||
This section defines the tasks that affect all or most of KiCad or do not
|
||||
fit under as specific part of the code such as the board editor or the
|
||||
schematic editor.
|
||||
|
||||
## Convert to a Single Process Application. ## {#kiway}
|
||||
**Goal:**
|
||||
|
||||
Merge common schematic and board code into to separate dynamic objects to allow
|
||||
Eeschema and Pcbnew to run under a single process.
|
||||
|
||||
**Task:**
|
||||
- Convert the majority core code in Eeschema and Pcbnew into dynamic libraries.
|
||||
- Provide a robust method for communicating between code running under a single
|
||||
process.
|
||||
- Revise the schematic editor and board editor main windows run under a single
|
||||
process instead of multiple stand alone applications.
|
||||
- Design a method for passing information between the dynamic libraries running
|
||||
under the same process.
|
||||
- Remove inter-process communications between Eeschema and Pcbnew.
|
||||
|
||||
**Dependencies:**
|
||||
- None
|
||||
|
||||
**Status:**
|
||||
- Stage 1 code released.
|
||||
- Stage 2 in process.
|
||||
|
||||
## User Interface Modernization ## {#wxaui}
|
||||
**Goal:**
|
||||
|
||||
Give KiCad a more modern user interface with dockable tool bars and windows.
|
||||
Create perspectives to allow users to arrange dockable windows as they prefer.
|
||||
|
||||
**Task:**
|
||||
- Take advantage of the advanced UI features in wxAui such as detaching and
|
||||
hiding.
|
||||
- Study ergonomics of various commercial/proprietary PCB applications (when
|
||||
in doubt about any particular UI solution, check how it has been done in a
|
||||
certain proprietary app that is very popular among OSHW folks and do exactly
|
||||
opposite).
|
||||
- Clean up menu structure. Menus must allow access to all features of the
|
||||
program in a clear and logical way. Currently some functions of Pcbnew are
|
||||
accessible only through tool bars
|
||||
- Redesign dialogs, make sure they are following same style rules.
|
||||
- Check quality of translations. Either fix or remove bad quality translations.
|
||||
- Develop a global shortcut manager that allows the user assign arbitrary
|
||||
shortcuts for any tool or action.
|
||||
|
||||
**Dependencies:**
|
||||
- [wxWidgets 3](#wxwidgets3)
|
||||
|
||||
**Status:**
|
||||
- No progress.
|
||||
|
||||
|
||||
# Build Tools # {#build_tools}
|
||||
This section covers build tools for both the KiCad source as well as the
|
||||
custom dependency builds required to build KiCad.
|
||||
|
||||
## Create Separate Build Dependency Project ## {#depends_prj}
|
||||
**Goal:**
|
||||
|
||||
Move the library dependencies and their patches into a separate project to
|
||||
developers to build and install them as required instead of requiring them
|
||||
at build time. Give developers the flexibility to build and/or install
|
||||
library dependencies as they see fit. Remove them from the KiCad source code
|
||||
to reduce the build footprint.
|
||||
|
||||
**Task:**
|
||||
- Create a separate project to build all external dependency libraries that are
|
||||
currently build from source (Boost, OpenSSL, etc).
|
||||
- Use CMake to create a package configuration file for each library so the
|
||||
KiCad find package can pull in header paths, library dependencies, compile
|
||||
flags, and link flags to build KiCad.
|
||||
- Use CMake find package to pull external dependencies.
|
||||
- Remove all build from source dependencies for KiCad source code.
|
||||
|
||||
**Dependencies:**
|
||||
- None
|
||||
|
||||
**Status:**
|
||||
- Initial concept discussions.
|
||||
|
||||
## Platform Binary Installers ## {#installers}
|
||||
**Goal:**
|
||||
|
||||
Provide quality installers for all supported platforms.
|
||||
|
||||
**Task:**
|
||||
- Bring OSX installer up to the level of the Window's and Linux installers.
|
||||
- Possible use of CPack to build platform specific installers as long as they
|
||||
are of the same or better quality than the current independent installers.
|
||||
|
||||
**Dependencies**
|
||||
- None
|
||||
|
||||
**Status**
|
||||
- No progress
|
||||
|
||||
|
||||
# Common Library # {#common_lib}
|
||||
This section covers the source code shared between all of the KiCad
|
||||
applications
|
||||
|
||||
## Unified Rendering Framework ## {#unified_rendering}
|
||||
**Goal:**
|
||||
|
||||
Provide a single framework for developing new tools. Port existing tools
|
||||
to the new framework and remove the legacy framework tools.
|
||||
|
||||
**Task:**
|
||||
- Port wxDC to GAL or get Cairo rendering to nearly the performance of the
|
||||
current wxDC rendering so that we have a single framework to develop new
|
||||
tools and we can continue to support systems that don't have a complete
|
||||
OpenGL stack.
|
||||
|
||||
**Dependencies**
|
||||
- [Tool framework](http://www.ohwr.org/projects/cern-kicad/wiki/WorkPackages)
|
||||
|
||||
**Status**
|
||||
- No progress
|
||||
|
||||
## Unified Geometry Library ## {#geometry_lib}
|
||||
**Goal:**
|
||||
|
||||
Select a single geometry library so that all applications share a common
|
||||
base for 2D objects. Remove any redundant geometry libraries and code to
|
||||
clean up code base.
|
||||
|
||||
**Task:**
|
||||
- Select the best geometry library (Boost, etc.) for the task.
|
||||
- Port all legacy geometry code to the selected library.
|
||||
- Remove any unused geometry library code.
|
||||
|
||||
**Dependencies:**
|
||||
- None
|
||||
|
||||
**Status:**
|
||||
- In progress as part of push and shove router.
|
||||
|
||||
## Conversion to wxWidgets 3 ## {#wxwidgets3}
|
||||
**Goal:**
|
||||
|
||||
Stop supporting the version 2 branch of wxWidgets so that newer features
|
||||
provided by version 3 can be utilized.
|
||||
|
||||
**Task:**
|
||||
- Make wxWidgets 3 a build requirement.
|
||||
- Remove all wxWidgets 2 specific code.
|
||||
|
||||
**Dependencies:**
|
||||
- wxWidgets 3 is widely available on Linux distributions.
|
||||
|
||||
**Status:**
|
||||
- No progress
|
||||
|
||||
## Linux Printing Improvements ## {#linux_print}
|
||||
**Goal:**
|
||||
|
||||
Bring printing on Linux up to par with printing on Windows.
|
||||
|
||||
**Task:**
|
||||
- Resolve Linux printing issues.
|
||||
|
||||
**Dependencies**
|
||||
- [wxWidgets 3](#wxwidgets3)
|
||||
|
||||
**Status**
|
||||
- No progress.
|
||||
|
||||
## Object Properties and Introspection ## {#object_props}
|
||||
**Goal:**
|
||||
|
||||
Provide an object introspection system using properties.
|
||||
|
||||
**Task:**
|
||||
- Select existing or develop property system.
|
||||
- Add definable properties to base objects.
|
||||
- Create introspection framework for manipulating object properties.
|
||||
- Serialization of properties to and from files and/or other I/O structures.
|
||||
- Create tool to edit property name/type/value table.
|
||||
|
||||
**Dependencies:**
|
||||
- None
|
||||
|
||||
**Status:**
|
||||
- No progress.
|
||||
|
||||
## Dynamic Library Plugin ## {#plugin_base}
|
||||
**Goal:**
|
||||
|
||||
Create a base library plugin for handling external file I/O. This will allow
|
||||
plugins to be provided that are external to the project such as providing solid
|
||||
model file support (STEP, IGES, etc.) using OpenCascade without making it a
|
||||
project dependency.
|
||||
|
||||
**Task:**
|
||||
- Create a plugin to handle dynamically registered plugins for loading and
|
||||
saving file formats.
|
||||
- This object should be flexible enough to be extended for handling all file
|
||||
plugin types including schematic, board, footprint library, component
|
||||
library, etc.
|
||||
- See [blueprint](https://blueprints.launchpad.net/kicad/+spec/pluggable-file-io)
|
||||
on Launchpad for more information.
|
||||
|
||||
**Dependencies:**
|
||||
- None
|
||||
|
||||
**Status:**
|
||||
- No progress.
|
||||
|
||||
|
||||
# KiCad: Application Launcher # {#kicad}
|
||||
This section applies to the source code for the KiCad application launcher.
|
||||
|
||||
|
||||
# Eeschema: Schematic Editor # {#eeschema}
|
||||
This section applies to the source code for the Eeschema schematic editor.
|
||||
|
||||
## Coherent SCHEMATIC Object ## {#sch_object}
|
||||
**Goal:**
|
||||
|
||||
Clean up the code related to the schematic object(s) into a coherent object for
|
||||
managing and manipulating the schematic.
|
||||
|
||||
**Task:**
|
||||
- Move most if not all of the code from SCH_SCREEN to the new SCHEMATIC object.
|
||||
- Add any missing functionality to the SCHEMATIC object.
|
||||
|
||||
**Dependencies:**
|
||||
- None
|
||||
|
||||
**Status:**
|
||||
- No progress.
|
||||
|
||||
## Hierarchical Sheet Design ## {#hierarchy_fix}
|
||||
**Goal:**
|
||||
|
||||
Create a more robust sheet instance design rather than recreating them on the
|
||||
fly every time sheet information is required.
|
||||
|
||||
**Task:**
|
||||
- Choose a data structure to contain the sheet hierarchy.
|
||||
- Create helper class to manipulate the hierarchy data structure.
|
||||
|
||||
**Dependencies:**
|
||||
- None
|
||||
|
||||
**Status:**
|
||||
- No progress.
|
||||
|
||||
## Schematic and Component Library Plugin ## {#sch_plugin}
|
||||
**Goal:**
|
||||
Create a plugin manager for loading and saving schematics and component
|
||||
libraries similar to the board plugin manager.
|
||||
|
||||
**Task:**
|
||||
- Design plugin manager for schematics and component libraries.
|
||||
- Port the current schematic and component library file formats to use the
|
||||
plugin.
|
||||
|
||||
**Dependencies:**
|
||||
- [Dynamic library plugin](#plugin_base)
|
||||
|
||||
**Status:**
|
||||
- No progress.
|
||||
|
||||
## Graphics Abstraction Layer Conversion ## {#sch_gal}
|
||||
**Goal:**
|
||||
|
||||
Take advantage of advanced graphics rendering in Eeschema.
|
||||
|
||||
**Task:**
|
||||
- Port graphics rendering to GAL.
|
||||
|
||||
**Dependencies:**
|
||||
- None
|
||||
|
||||
**Status:**
|
||||
- No progress.
|
||||
|
||||
## Port Editing Tools ## {#sch_tool_framework}
|
||||
**Goal:**
|
||||
|
||||
Use standard tool framework across all applications.
|
||||
|
||||
**Task:**
|
||||
- Rewrite editing tools using the new tool framework.
|
||||
|
||||
**Dependencies:**
|
||||
- [GAL port](#sch_gal).
|
||||
|
||||
**Status:**
|
||||
- No progress.
|
||||
|
||||
## S-Expression File Format ## {#sch_sexpr}
|
||||
**Goal:**
|
||||
|
||||
Make schematic file format more readable, add new features, and take advantage
|
||||
of the s-expression capability used in Pcbnew.
|
||||
|
||||
**Task:**
|
||||
- Finalize feature set and file format.
|
||||
- Discuss the possibility of dropping the unit-less proposal temporarily to get
|
||||
the s-expression file format and SWEET library format implemented without
|
||||
completely rewriting Eeschema.
|
||||
- Add new s-expression file format to plugin.
|
||||
|
||||
**Dependencies:**
|
||||
- [Dynamic library plugin](#plugin_base).
|
||||
|
||||
**Status:**
|
||||
- File format document nearly complete.
|
||||
|
||||
## Implement Sweet Component Libraries ## {#sch_sweet}
|
||||
**Goal:**
|
||||
|
||||
Make component library design more robust and feature rich. Use s-expressions
|
||||
to make component library files more readable.
|
||||
|
||||
**Task:**
|
||||
- Use sweet component file format for component libraries.
|
||||
|
||||
**Dependencies:**
|
||||
- [S-expression file format](#sch_sexpr).
|
||||
|
||||
**Status:**
|
||||
- Initial SWEET library written.
|
||||
|
||||
## Component Library Editor Improvements ## {#lib_editor_usability}
|
||||
**Goal:**
|
||||
|
||||
Make editing components with multiple units and/or alternate graphical
|
||||
representations easier.
|
||||
|
||||
**Task:**
|
||||
- Determine usability improvements in the library editor for components with
|
||||
multiple units and/or alternate graphical representations.
|
||||
- Implement said useability improvements.
|
||||
|
||||
**Dependencies:**
|
||||
- None.
|
||||
|
||||
**Status:**
|
||||
- No progress.
|
||||
|
||||
## Component and Netlist Attributes ## {#netlist_attributes}
|
||||
**Goal:**
|
||||
Provide a method of passing information to other tools via the net list.
|
||||
|
||||
**Task:**
|
||||
- Add virtual components and attributes to netlist to define properties that
|
||||
can be used by other tools besides the board editor.
|
||||
|
||||
**Dependencies:**
|
||||
- [S-expression schematic file format](#sch_sexpr).
|
||||
|
||||
**Status:**
|
||||
- No progress.
|
||||
|
||||
|
||||
# CvPcb: Footprint Association Tool # {#cvpcb}
|
||||
This section covers the source code of the footprint assignment tool CvPcb.
|
||||
|
||||
## Footprint Assignment Tool ##
|
||||
**Goal:**
|
||||
|
||||
Merge the footprint assignment functionality of CvPcb into Eeschema so
|
||||
footprints can be assigned inside the schematic editor eliminating the need
|
||||
to launch an separate program.
|
||||
|
||||
**Task:**
|
||||
- Merge footprint assignment capability into Pcbnew shared library.
|
||||
- Remove CvPcb as a stand alone tool.
|
||||
- Add functionality to both the schematic and board editors so users can assign
|
||||
footprints as they prefer.
|
||||
|
||||
**Dependencies:**
|
||||
- [Convert to a single process application](#kiway).
|
||||
|
||||
**Status:**
|
||||
- Initial library conversion committed to product branch.
|
||||
|
||||
|
||||
# Pcbnew: Circuit Board Editor # {#pcbnew}
|
||||
This section covers the source code of the board editing application Pcbnew.
|
||||
|
||||
## Tool Framework ## {#pcb_tool_framework}
|
||||
**Goal:**
|
||||
|
||||
Unify all board editing tools under a single framework.
|
||||
|
||||
**Task:**
|
||||
- Complete porting of all board editing tools to new tool framework so they
|
||||
are available in the OpenGL and Cairo canvases.
|
||||
- Remove all duplicate legacy editing tools.
|
||||
|
||||
**Dependencies:**
|
||||
- None
|
||||
|
||||
**Status:**
|
||||
- Initial porting work in progress.
|
||||
|
||||
## Linked Objects ## {#pcb_linked_objects}
|
||||
**Goal:**
|
||||
|
||||
Provide a way to allow external objects such as footprints to be externally
|
||||
linked in the board file so that changes in the footprint are automatically
|
||||
updated. This will all a one to many object relationship which can pave the
|
||||
way for real board modules.
|
||||
|
||||
**Task:**
|
||||
- Add externally and internally linked objects to the file format to allow for
|
||||
footprints and/or other board objects to be shared (one to many relationship)
|
||||
instead of only supporting embedded objects (one to one relationship) that
|
||||
can only be edited in place.
|
||||
|
||||
**Dependencies:**
|
||||
- None.
|
||||
|
||||
**Status:**
|
||||
- No progress.
|
||||
|
||||
## Modeling ## {#modeling}
|
||||
**Goal:**
|
||||
|
||||
Provide improved solid modeling support for KiCad including the file formats
|
||||
available in OpenCascade.
|
||||
|
||||
**Task:**
|
||||
- Design plugin architecture to handle loading and saving 3D models.
|
||||
- Back port existing 3D formats (IDF and S3D) to plugin
|
||||
- Add STEP 3D modeling capability.
|
||||
- Add IGES 3D modeling capability.
|
||||
|
||||
**Dependencies:**
|
||||
- [Dynamic library plugin](#plugin_base).
|
||||
|
||||
**Status:**
|
||||
- No progress.
|
||||
|
||||
## Push and Shove Router Improvements ## {#ps_router_improvements}
|
||||
**Goal:**
|
||||
Add features such as matched length and microwave tools to the P&S router.
|
||||
|
||||
**Task:**
|
||||
- Determine which features are feasible.
|
||||
- Look at the recently opened FreeRouter code at
|
||||
http://www.freerouting.net/fen/download/file.php?id=146 for inspiration.
|
||||
|
||||
**Dependencies:**
|
||||
- None
|
||||
|
||||
**Status:**
|
||||
- No progress.
|
||||
|
||||
## Layer Improvements ## {#pcb_layers}
|
||||
**Goal:**
|
||||
|
||||
Increase the number of usable technical and user defined layers in Pcbnew.
|
||||
|
||||
**Task:**
|
||||
- Extend the number of copper and mechanical layers.
|
||||
- Develop a type safe flag set template or adapt something already available.
|
||||
- Refactor Pcbnew code to use new flag and remove the 32 layer limitation.
|
||||
- Extend the board file format to handle the additional layers.
|
||||
|
||||
**Dependencies:**
|
||||
- None
|
||||
|
||||
**Status:**
|
||||
- No progress.
|
||||
|
||||
## Pin and Part Swapping ## {#pcb_drc}
|
||||
**Goal:**
|
||||
|
||||
Allow Pcbnew to perform pin and/or part swapping during layout so the user
|
||||
does not have to do it in Eeschema and re-import the net list.
|
||||
|
||||
**Task:**
|
||||
- Provide forward and back annotation between the schematic and board editors.
|
||||
- Define netlist file format changes required to handle pin/part swapping.
|
||||
- Update netlist file formatter and parser to handle file format changes.
|
||||
- Develop a netlist comparison engine that will produce a netlist diff that
|
||||
can be passed between the schematic and board editors.
|
||||
- Create pin/part swap dialog to manipulate swappable pins and parts.
|
||||
- Add support to handle net label back annotation changes.
|
||||
|
||||
**Dependencies:**
|
||||
- [S-expression schematic file format](#sch_sexpr).
|
||||
- [Convert to a single process application](#kiway).
|
||||
|
||||
**Status:**
|
||||
- No progress.
|
||||
|
||||
## Intelligent Selection Tool ## {#pcb_selection_tool}
|
||||
**Goal:**
|
||||
|
||||
Make the selection tool easier for the user to determine which object(s) are
|
||||
being selected.
|
||||
|
||||
**Task:**
|
||||
- Determine and define the actual desired behavior.
|
||||
- Improve ambiguous selections when multiple items are under the cursor or in
|
||||
the selection bounding box.
|
||||
|
||||
**Dependencies:**
|
||||
- Tool framework.
|
||||
- Unified geometry library.
|
||||
|
||||
**Status:**
|
||||
- Initial design committed to product branch.
|
||||
|
||||
## Clipboard Support ## {#fp_edit_clipboard}
|
||||
**Goal:**
|
||||
|
||||
Provide clipboard cut and paste for footprints..
|
||||
|
||||
**Task:**
|
||||
- Clipboard cut and paste to and from clipboard of footprints in footprint
|
||||
editor.
|
||||
|
||||
**Dependencies:**
|
||||
- None
|
||||
|
||||
**Status:**
|
||||
- No progress.
|
||||
|
||||
## Design Rule Check (DRC) Improvements. ## {#drc_improvements}
|
||||
**Goal:**
|
||||
|
||||
Create additional DRC tests for improved error checking.
|
||||
|
||||
**Task:**
|
||||
- Replace geometry code with [unified geometry library](#geometry_lib).
|
||||
- Remove floating point code from clearance calculations to prevent rounding
|
||||
errors.
|
||||
- Add checks for component, silk screen, and mask clearances.
|
||||
- Remove DRC related limitations such as no arc or text on copper layers.
|
||||
- Add option for saving and loading DRC options.
|
||||
|
||||
**Dependencies:**
|
||||
- [Unified geometry library.](#geometry_lib)
|
||||
|
||||
**Progress:**
|
||||
- Planning
|
||||
|
||||
## Gerber File Attributes ## {#gerber_attributes}
|
||||
**Goal:**
|
||||
|
||||
Add file attributes to gerber files for defining layer stacks. See
|
||||
[this](http://www.ucamco.com/files/downloads/file/5/Extending_the_Gerber_Format_with_Attributes.pdf)
|
||||
document and [this](http://www.ucamco.com/files/downloads/file/22/Kick_Starting_a_Revolution_IPC-2581_Meets_Gerber.pdf)
|
||||
document for more information.
|
||||
|
||||
**Task:**
|
||||
- Implement gerber file attributes as an optional setting when plotting gerber
|
||||
files.
|
||||
|
||||
**Dependencies:**
|
||||
- None
|
||||
|
||||
**Progress:**
|
||||
- Under investigation.
|
||||
|
||||
|
||||
# GerbView: Gerber File Viewer # {#gerbview}
|
||||
|
||||
This section covers the source code for the GerbView gerber file viewer.
|
||||
|
||||
## Graphics Abstraction Layer ## {#gerbview_gal}
|
||||
**Goal:**
|
||||
|
||||
Graphics rendering unification.
|
||||
|
||||
**Task:**
|
||||
- Port graphics rendering layer to GAL.
|
||||
|
||||
**Dependencies:**
|
||||
- None.
|
||||
|
||||
**Status**
|
||||
- No progress.
|
||||
|
||||
# Documentation # {#documentation}
|
||||
This section defines the tasks for both the user and developer documentation.
|
||||
|
||||
## Conversion to Markup/down Format ## {#doc_format}
|
||||
**Goal:**
|
||||
|
||||
Make documentation more VCS friendly and separate document content and
|
||||
formatting for more uniform formatting across all user documentation.
|
||||
|
||||
**Task:**
|
||||
- Convert the documentation to a mark up/down language to reduce the VCS
|
||||
footprint, to be able to actually use the VCS to see what changed, and
|
||||
improve the formatting consistency.
|
||||
|
||||
**Dependencies:**
|
||||
- None
|
||||
|
||||
**Status:**
|
||||
- Started with this document.
|
||||
|
||||
## Grammar Check ## {#doc_grammar}
|
||||
**Goal:**
|
||||
|
||||
Improve user documentation readability and make life easier to for translators.
|
||||
|
||||
**Task:**
|
||||
- Review and revise all of the English documentation so that it is update with
|
||||
the current functionality of the code.
|
||||
- Translate the update documentation into other languages.
|
||||
|
||||
**Dependencies:**
|
||||
- None
|
||||
|
||||
**Status:**
|
||||
- No progress.
|
||||
|
||||
## Maintenance ## {#doc_maintenance}
|
||||
**Task:**
|
||||
- Keep screen shots current with the source changes.
|
||||
|
||||
**Dependencies:**
|
||||
- None.
|
||||
|
||||
**Status:**
|
||||
- No progress.
|
||||
|
||||
## Convert Developer Documentation to Markup/down Format ## {#dev_doc_format}
|
||||
**Goal:**
|
||||
|
||||
Improve developers documentation to make life easier for new developers to get
|
||||
involved with the project.
|
||||
|
||||
**Task:**
|
||||
- Convert platform build instructions from plain text to new format to be
|
||||
merged with the developer documentation.
|
||||
- Convert how to contribute to KiCad instructions from plain text to the new
|
||||
format to merged with the developer documentation.
|
||||
|
||||
**Dependencies:**
|
||||
- None.
|
||||
|
||||
**Status:**
|
||||
- No progress.
|
||||
|
||||
|
||||
# Unit Testing # {#unittest}
|
||||
**Goal:**
|
||||
|
||||
Improve the quality of KiCad and ensure changes do no break existing
|
||||
capabilities.
|
||||
|
||||
**Task:**
|
||||
- Explore the possibility of including a C++ unit test framework in addition
|
||||
to the existing Python framework.
|
||||
- Create robust enough test coverage to determine if code changes break any
|
||||
core functionality.
|
||||
|
||||
**Dependencies:**
|
||||
- Completion of the initial release of this document.
|
||||
|
||||
**Status:**
|
||||
- In progress.
|
||||
|
||||
|
||||
# Circuit Simulation # {#simulation}
|
||||
**Goal:**
|
||||
|
||||
Provide quality circuit simulation capabilities similar to commercial products.
|
||||
|
||||
**Task:**
|
||||
- Evaluate and select simulation library (spice, gnucap, qucs, etc).
|
||||
- Evaluate and select plotting library with wxWidgets support.
|
||||
- Confirm current spice netlist export is up to the task and add missing
|
||||
support for simulations.
|
||||
- Use plotting library to handle simulator output in a consistent manor similar
|
||||
to LTSpice.
|
||||
- Develop a tool that allows fine tuning of components on the fly.
|
||||
- Use plugin for the simulation code to allow support of different simulation
|
||||
libraries.
|
||||
- Create a library of simulation components such as voltage source, current
|
||||
source, current probe, etc.
|
||||
|
||||
**Dependencies:**
|
||||
- [Dynamic library plugin](#plugin_base).
|
||||
|
||||
**Status:**
|
||||
- No progress.
|
||||
@@ -73,13 +73,4 @@ Dialogs:
|
||||
within the dialog, but for testing purposes please do not exceed this dialog
|
||||
size should the user have selected a font size of 13 points.
|
||||
|
||||
Quoting:
|
||||
Filenames, paths or other text should be with single quotes ''. e.g.:
|
||||
'filename.kicad_pcb'
|
||||
'longpath/subdir'
|
||||
'FOOTPRINTNAME'
|
||||
'anything else'
|
||||
|
||||
Often text strings like this end up in panels which use HTML rendering, and this
|
||||
can happen in the future. Previously used angle brackets only cause grief there.
|
||||
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
pandoc -f markdown_mmd -t html interactive_router.mmd > interactive_router.html
|
||||
pandoc -f markdown_mmd -t latex interactive_router.mmd > tmp.tex
|
||||
pdflatex interactive_router.tex
|
||||
@@ -1,73 +0,0 @@
|
||||
# Interactive Router #
|
||||
|
||||
The Interactive Router lets you quickly and efficient route your PCBs by shoving off or walking around items on the PCB that collide with the trace you are currently drawing.
|
||||
|
||||
Following modes are supported:
|
||||
|
||||
- **Shove**, attempting to push and shove all items colliding with the currently routed track.
|
||||
- **Walk around**, trying to avoid obstacles by hugging/walking around them.
|
||||
- **Highlight collisions** which highlights all violating objects with a nice, shiny green color and shows violating clearance regions.
|
||||
|
||||
|
||||
## Setting up ##
|
||||
|
||||
Before using the Interactive Router, please set up these two things:
|
||||
- Clearance settings. To set the clearances, open the *Design Rules* dialog and make sure at least the default clearance
|
||||
value looks sensible.
|
||||
|
||||
- Enable OpenGL mode by selecting *View->Switch canvas to OpenGL* menu option or pressing **F11**.
|
||||
|
||||

|
||||
|
||||
## Laying out tracks ##
|
||||
|
||||
To activate the router tool press the *Interactive Router* button  or the **X** key.
|
||||
The cursor will turn into a cross and the tool name, will appear in the status bar.
|
||||
|
||||
To start a track, click on any item (a pad, track or a via) or press the **X** key again hovering the mouse over that item.
|
||||
The new track will use the net of the starting item. Clicking or pressing **X** on empty PCB space starts a track with no net assigned.
|
||||
|
||||
Move the mouse to define shape of the track. The router will try to follow mouse trail, hugging unmovable obstacles
|
||||
(such as pads) and shoving colliding traces/vias, depending on the mode. Retreating mouse cursor will cause the shoved items to spring back
|
||||
to their former locations.
|
||||
|
||||
Clicking on a pad/track/via in the same net finishes routing. Clicking in empty space fixes the segments routed so far and continues routing the trace.
|
||||
|
||||
In order to stop routing and undo all changes (shoved items, etc.), simply press **Esc**.
|
||||
|
||||
Pressing **V** or selecting *Place Through Via* from the context menu while routing a track attaches a via at the end of the trace being routed.
|
||||
Pressing **V** again disables via placement. Clicking in any spot establishes the via and continues routing.
|
||||
|
||||
Pressing **/** or selecting *Switch Track Posture* from the context menu toggles the direction of the initial track segment between straight or diagonal.
|
||||
|
||||
**Note**: By default, the router snaps to centers/axes of the items. Snapping can be disabled by holding **Shift** while routing or selecting items.
|
||||
|
||||
## Setting track widths and via sizes ##
|
||||
|
||||
There are several ways to pre-select a track width/via size or to change it during routing:
|
||||
- Use standard Kicad shortcuts.
|
||||
- Press **W** or select *Custom Track Width* from the context menu to type in a custom width/via size.
|
||||
- Pick a predefined width from the *Select Track Width* sub-menu of the context menu.
|
||||
- Select *Use the starting track width* in the *Select Track Width* menu to pick the width from the start item (or the traces already connected to it).
|
||||
|
||||
## Dragging ##
|
||||
|
||||
The router can drag track segments, corners and vias. To drag an item, click on it with **Ctrl** key pressed, hover the mouse and press **G** or select *Drag Track/Via* from the context menu.
|
||||
Finish dragging by clicking again or abort by pressing *Esc*.
|
||||
|
||||
## Options ##
|
||||
|
||||
The router behavior be configured by pressing *E* or selecting *Routing Options* from the context menu. It opens a window like the one below:
|
||||
|
||||

|
||||
|
||||
The options are:
|
||||
|
||||
- **Mode** - select how the router handles DRC violation (shoving, walking around, etc.)
|
||||
- **Shove vias** - when disabled, vias are treated as un-movable objects and hugged instead of shoved.
|
||||
- **Jump over obstacles** - when enabled, the router tries to move colliding traces behind solid obstacles (e.g. pads) instead of "reflecting" back the collision
|
||||
- **Remove redundant tracks** - removes loops while routing (e.g. if the new track ensures same connectivity as an already existing one, the old track is removed). Loop removal works locally (only between the start and end of the currently routed trace).
|
||||
- **Automatic neckdown** - when enabled, the router tries to break out pads/vias in a clean way, avoiding acute angles and jagged breakout traces.
|
||||
- **Smooth dragged segments** - when enabled, the router attempts to merge several jagged segments into a single straight one (dragging mode).
|
||||
- **Allow DRC violations** (*Highlight collisions* mode only) - allows to establish a track even if is violating the DRC rules.
|
||||
- **Optimizer effort** - defines how much time the router shall spend optimizing the routed/shoved traces. More effort means cleaner routing (but slower), less effort means faster routing but somewhat jagged traces.
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 43 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 547 B |
Binary file not shown.
|
Before Width: | Height: | Size: 37 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 58 KiB |
@@ -0,0 +1,11 @@
|
||||
So, finally we've got an integrated interactive, push-and-sometimes-shove router, although with a very limited user interface:
|
||||
|
||||
- Edit->Interactive router launches the tool,
|
||||
- while routing: 'V' key places a via,
|
||||
- '+' and '-' keys cycle through available layers,
|
||||
- '/' key switches track posture.
|
||||
|
||||
Via/track dimensions are taken from the netclasses.
|
||||
There are no other options available for the time being - promise to add them soon :)
|
||||
|
||||
Tom
|
||||
@@ -5,7 +5,8 @@ Last Revised: 28-Feb-2010
|
||||
Kicad needs wxWidgets, the multi platform G.U.I.
|
||||
Known problems:
|
||||
wxMSW:
|
||||
use *only* wxWidgets >= 3.0
|
||||
*DO NOT* use wxMSW.2.8.1
|
||||
in fact: use wxWidgets >= 2.9.3
|
||||
|
||||
wxGTK
|
||||
Use wxWidgets 2.8.10 or later
|
||||
@@ -20,6 +21,15 @@ So use a very recent version (>= 2.8.10 (that also solve other bugs)
|
||||
wxWidgets patch:
|
||||
|
||||
|
||||
wxMSW, version 2.8.x
|
||||
Some zoom values smaller than 3 to 5 create artifacts on screen, mainly values < 1.
|
||||
(corresponding to draw scale factor > 1 )
|
||||
|
||||
See http://trac.wxwidgets.org/ticket/9554 (and 11669).
|
||||
|
||||
This is fixed in version 2.9.3
|
||||
|
||||
|
||||
wxWidgets 2.9.1 (all platforms)
|
||||
Has a problem when using the built in string to double conversion:
|
||||
In countries using a comm instead of a point as floating number separator
|
||||
@@ -31,7 +41,7 @@ Use a version >= 2.9.3
|
||||
|
||||
|
||||
*************************************************************************************
|
||||
wxGTK version: All before wxWidgets 3.0
|
||||
wxGTK version: All
|
||||
*************************************************************************************
|
||||
Patch for printing wide traces that were shown with missing rounded end caps.
|
||||
Without this patch, printing boards and schematics under Linux, and perhaps OSX
|
||||
@@ -47,10 +57,3 @@ Add after this line:
|
||||
PsPrint( "1 setlinecap\n" );
|
||||
PsPrint("%%EndSetup\n");
|
||||
|
||||
|
||||
Known bug on Windows:
|
||||
Postscript printers print tracks like tin line.
|
||||
It happens only for PS drivers, and PDF printer.
|
||||
Other drivers (PCL for instance) work fine,
|
||||
so it is unlikely a bug inside Kicad/wxWidgets
|
||||
|
||||
|
||||
@@ -338,7 +338,7 @@ TYPEDEF_HIDES_STRUCT = NO
|
||||
# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,
|
||||
# corresponding to a cache size of 2^16 = 65536 symbols.
|
||||
|
||||
SYMBOL_CACHE_SIZE = 4
|
||||
SYMBOL_CACHE_SIZE = 0
|
||||
|
||||
# Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be
|
||||
# set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given
|
||||
@@ -349,7 +349,7 @@ SYMBOL_CACHE_SIZE = 4
|
||||
# formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range is 0..9, the default is 0,
|
||||
# corresponding to a cache size of 2^16 = 65536 symbols.
|
||||
|
||||
LOOKUP_CACHE_SIZE = 6
|
||||
LOOKUP_CACHE_SIZE = 0
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
# Build related configuration options
|
||||
@@ -661,8 +661,7 @@ WARN_LOGFILE =
|
||||
# directories like "/usr/src/myproject". Separate the files or directories
|
||||
# with spaces.
|
||||
|
||||
INPUT = Documentation/development/road-map.md \
|
||||
kicad \
|
||||
INPUT = kicad \
|
||||
pcbnew \
|
||||
cvpcb \
|
||||
eeschema \
|
||||
|
||||
@@ -11,40 +11,32 @@ Contribute to KiCad (under Linux)
|
||||
2) initialize Bazaar:
|
||||
bzr whoami "John Doe <john.doe@gmail.com>"
|
||||
|
||||
3) get latest KiCad source tree:
|
||||
3) get LATEST KiCad source tree and name it, for instance, "kicad_john":
|
||||
cd ~/
|
||||
bzr branch lp:kicad kicad.bzr
|
||||
bzr branch lp:kicad kicad_john
|
||||
|
||||
this should leave you with the folder kicad.bzr
|
||||
4) Read coding_style_policy.pdf, in <kicad_sources>/Documentation,
|
||||
and other docs.
|
||||
|
||||
4) Read coding_style_policy.pdf, in kicad.bzr/Documentation,
|
||||
and other docs.
|
||||
|
||||
5) create a local (branch) copy of the KiCad project
|
||||
bzr branch ./kicad.bzr ./kicad.my_contrib
|
||||
|
||||
6) Modify/add source code in
|
||||
cd kicad.my_contrib
|
||||
5) Modify/add source code.
|
||||
cd kicad_john
|
||||
gedit .......
|
||||
if you need to create and add the file foo.cpp do so and:
|
||||
bzr add foo.cpp
|
||||
if you need to delete files:
|
||||
bzr rm foo.cpp
|
||||
|
||||
7) Compile:
|
||||
cd kicad.my_contrib
|
||||
6) Compile:
|
||||
cd kicad_john
|
||||
mkdir build; cd build
|
||||
cmake ../ -DCMAKE_BUILD_TYPE=Debug
|
||||
to build a debug version
|
||||
or
|
||||
to build a debug version
|
||||
or
|
||||
cmake ../ -DCMAKE_BUILD_TYPE=Release
|
||||
to build a release version
|
||||
make -j8
|
||||
to build a release version
|
||||
make
|
||||
|
||||
8) Repeat step 6 and 7 until satisfied.
|
||||
7) Repeat step 5 and 6 until satisfied.
|
||||
|
||||
9) Create a patch file:
|
||||
cd kicad.my_contrib
|
||||
8) Create a patch:
|
||||
in kicad_john:
|
||||
if some files are added: bzr add [FILE...]
|
||||
bzr diff > my_changes.patch
|
||||
|
||||
9) Send the patch file "my_changes.patch" to the KiCad developers mailing list.
|
||||
+10
-11
@@ -128,17 +128,13 @@ project is created.
|
||||
Installation from source code
|
||||
-----------------------------
|
||||
|
||||
Some dependencies must be satisfied for the correct installation of KiCad:
|
||||
Some dependencies must be satisfied for the correct installation of KiCad:
|
||||
under Linux:
|
||||
wxWidgets >= 2.8.11 http://www.wxwidgets.org/
|
||||
(needs to be compiled with unicode support)
|
||||
under Windows:MacOSX
|
||||
wxWidgets >= 2.9.4 http://www.wxwidgets.org/
|
||||
|
||||
CMake >= 2.8.1 http://www.cmake.org/
|
||||
Boost C++ Libraries:
|
||||
files used by kicad are autmatically downloaded and patched if needed
|
||||
from boost site ( http://www.boost.org/ )
|
||||
wxWidgets >= 2.9.3 http://www.wxwidgets.org/
|
||||
CMake >= 2.6.4 http://www.cmake.org/
|
||||
Boost C++ Libraries (files used by kicad are provided in kicad sources) http://www.boost.org/
|
||||
OpenGL
|
||||
Linux: Mesa 3D Graphics Library http://www.mesa3d.org/
|
||||
Windows: built-in
|
||||
@@ -170,9 +166,6 @@ build directory.
|
||||
Important parameters to cmake
|
||||
-----------------------------
|
||||
|
||||
See Documentation/compiling/build-config.txt for a list of all CMake options
|
||||
available when compiling KiCad.
|
||||
|
||||
-DCMAKE_BUILD_TYPE=<buildtype>
|
||||
<buildtype> may current one of "Debug" and "Release".
|
||||
|
||||
@@ -193,6 +186,12 @@ configured and builded with "--enable-monolithic --disable-shared" parameters.
|
||||
For building dinamically linked executables. Can be used only if wxWidgets
|
||||
configured and builded with "--disable-monolithic --enable-shared" parameters.
|
||||
|
||||
-DwxUSE_UNICODE=ON
|
||||
Require on locale utf8 for build the KiCad with cyrillic fonts support.
|
||||
|
||||
-DKICAD_GOST=ON
|
||||
Build the KiCad with russian GOST support.
|
||||
|
||||
-DKICAD_KEEPCASE=ON
|
||||
Build the KiCad with no component name conversion to uppercase (if you want your
|
||||
ADuC.../Si.../bq... components named as just so).
|
||||
|
||||
@@ -26,6 +26,92 @@ Common
|
||||
but is now in scripts/python/ky temporarily.
|
||||
|
||||
|
||||
FP LIB TABLE
|
||||
------------
|
||||
|
||||
Dialog:
|
||||
- - - -
|
||||
|
||||
a) check for duplicate nicknames in a single table, complain, give the user a nice indication of the duplicate(s)
|
||||
|
||||
b) in the uri column give a small button popup a window(dialog?) which lets user choose a file or directory local to his system by pointing at it.
|
||||
|
||||
c) Active library table load and save functions. There are two tables active at any time, but
|
||||
they look like one table. Identify a place to keep the access mechanism (pointer). Modify
|
||||
the project specific portion of this RAM table when the board changes.
|
||||
|
||||
|
||||
Other:
|
||||
- - - -
|
||||
|
||||
a) develop a syntax for nickname:footprint combo, i.e. bring to life class FPID
|
||||
with development and testing of parsing and formatting.
|
||||
|
||||
|
||||
b) modify cvpcb to handle the nickname:footprint, i.e. textual form of FPID.
|
||||
This means having a wider textfield for the FPID than was allocated for the footprint name alone.
|
||||
Needed is the ability to pick a footprint from any active library.
|
||||
|
||||
|
||||
c) modify the netlist format to handle nickname:footprint, save and load.
|
||||
The nickname needs to be optional. I would say allowed in the grammar in the
|
||||
footprint position are:
|
||||
|
||||
footprint | (fp_id FPID)
|
||||
|
||||
or just
|
||||
|
||||
FPID # if it can be parsed when nickname is missing.
|
||||
|
||||
|
||||
d) write functions to lookup a footprint from
|
||||
i) FPID
|
||||
ii) footprint alone since most old netlists don't have nicknames in them.
|
||||
|
||||
e) Replace MODULE::m_LibRef which is a wxString with FPID. FPID supports
|
||||
the footprint name only which is backwards compatible with the current
|
||||
design.
|
||||
|
||||
f) On the first time an empty global footprint table is encountered, add
|
||||
standard KiCad and user libraries not located in the project directory
|
||||
or any of it's sub-directories to the global footprint library table.
|
||||
|
||||
g) When a project is opened and the project footprint library table is
|
||||
empty, add any user library that is located in the project path or any
|
||||
of it's sub-directories to the project footprint library table.
|
||||
|
||||
h) When populating the footprint library tables, use the library file name
|
||||
without the extension as the FPID nickname. When duplicate names exist,
|
||||
append an incremental integer to the nickname so that the second logic
|
||||
libraries FPID nickname becomes logic1. Assign FPID library nicknames
|
||||
to each MODULE based on the legacy library search order when loading an
|
||||
existing board that does not have fully defined MODULE FPIDs.
|
||||
|
||||
i) Add check for KISYSMOD environment variable, on Pcbnew and CvPcb start up
|
||||
and set it to the known directory of the default KiCad footprint libraries.
|
||||
The code should look something like:
|
||||
|
||||
{
|
||||
const char* envar;
|
||||
|
||||
envar = getenv( "KISYSMOD" );
|
||||
|
||||
if( !envar )
|
||||
{
|
||||
envvar = knownDirOfSysMods;
|
||||
|
||||
setenv( "KISYSMOD", envar );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
These i) and ii) merge into one if footprint alone is a valid FPID.
|
||||
Incorporate any environment variable in the the uri expansion using:
|
||||
const wxString FP_LIB_TABLE::ExpandSubtitutions( const wxString aString )
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Eeschema
|
||||
--------
|
||||
@@ -54,28 +140,25 @@ PCBNew
|
||||
various zoom factors. I believe that a fixed distance in pixels might make
|
||||
for a friendlier UI.
|
||||
|
||||
*) Check that the new load visibility BOARD settings is properly setting the toolbar
|
||||
buttons like show grid or ratsnest. Add PCB_EDIT_FRAME::SetVisibleElements() so
|
||||
toolbar crap is not known to a BOARD.
|
||||
|
||||
*) Finish removing global access requirements from PLUGINs, so that:
|
||||
*) a BOARD is a fully self contained document description.
|
||||
*) plugin developers do not have to access globals, since a plugin could
|
||||
very well be a dynamically loaded DLL/DSO in the future.
|
||||
One final problem remains is the BASE_SCREEN's grid origin. An easy
|
||||
solution is to move just that one field into the BOARD.
|
||||
|
||||
*) Add ::Footprint*() functions to EAGLE_PLUGIN, so that Eagle footprint libraries
|
||||
can be used in situ.
|
||||
|
||||
*) Add a library table for Pcbnew like that in the sweet library and get rid of the
|
||||
damn search path strategy. This will enable concurrent usage of various types
|
||||
of PLUGIN::Footprint*() functions. At least LEGACY and KICAD are both needed
|
||||
concurrently.
|
||||
|
||||
*) Add a hot key to toggle the 45 degree constraint on and off so that it can be
|
||||
changed when drawing a trace.
|
||||
|
||||
*) Paste (module ...) from clipboard into module editor.
|
||||
|
||||
|
||||
|
||||
|
||||
Dick's Final TODO List:
|
||||
======================
|
||||
*) Get licensing cleaned up.
|
||||
|
||||
*) DLL-ization of pcbnew & eeschema
|
||||
http://www.eevblog.com/forum/open-source-kicad-geda/seriously-irritated-with-the-library-editor!/
|
||||
https://blueprints.launchpad.net/kicad/+spec/modular-kicad
|
||||
|
||||
Issues as a result of minimal testing:
|
||||
* If eeschema launched from C++ project manager and does not find all libraries,
|
||||
then the dialog showing the names of missing libraries is shown twice.
|
||||
|
||||
* Clear all/some? retained strings on project change.
|
||||
* Clear the FP_LIB_TABLE when the last KIWAY_PLAYER using it is closed.
|
||||
|
||||
|
||||
Fix export gencad
|
||||
@@ -1,68 +1,54 @@
|
||||
|
||||
include_directories( BEFORE ${INC_BEFORE} )
|
||||
include_directories(BEFORE ${INC_BEFORE})
|
||||
include_directories(
|
||||
../potrace
|
||||
../polygon/kbool/include
|
||||
../common
|
||||
${INC_AFTER}
|
||||
)
|
||||
|
||||
set( BITMAP2COMPONENT_SRCS
|
||||
../common/single_top.cpp
|
||||
set(BITMAP2COMPONENT_SRCS
|
||||
bitmap2component.cpp
|
||||
bitmap2cmp_gui_base
|
||||
bitmap2cmp_gui
|
||||
)
|
||||
|
||||
set_source_files_properties( ../common/single_top.cpp PROPERTIES
|
||||
COMPILE_DEFINITIONS "TOP_FRAME=FRAME_BM2CMP"
|
||||
)
|
||||
set_source_files_properties( bitmap2cmp_gui.cpp PROPERTIES
|
||||
COMPILE_DEFINITIONS "COMPILING_DLL"
|
||||
)
|
||||
|
||||
add_executable( bitmap2component WIN32 MACOSX_BUNDLE
|
||||
${BITMAP2COMPONENT_SRCS}
|
||||
${BITMAP2COMPONENT_RESOURCES}
|
||||
)
|
||||
|
||||
target_link_libraries( bitmap2component
|
||||
common
|
||||
polygon
|
||||
bitmaps
|
||||
${wxWidgets_LIBRARIES}
|
||||
potrace
|
||||
)
|
||||
|
||||
install( TARGETS bitmap2component
|
||||
DESTINATION ${KICAD_BIN}
|
||||
COMPONENT binary
|
||||
)
|
||||
if(WIN32)
|
||||
if(MINGW)
|
||||
# BITMAP2COMPONENT_RESOURCES variable is set by the macro.
|
||||
mingw_resource_compiler(bitmap2component)
|
||||
else(MINGW)
|
||||
set(BITMAP2COMPONENT_RESOURCES bitmap2component.rc)
|
||||
endif(MINGW)
|
||||
endif(WIN32)
|
||||
|
||||
|
||||
if( false ) # linker map with cross reference
|
||||
set_target_properties( bitmap2component PROPERTIES
|
||||
LINK_FLAGS "${TO_LINKER},-cref ${TO_LINKER},-Map=bitmap2component.map"
|
||||
)
|
||||
endif()
|
||||
if(APPLE)
|
||||
set(BITMAP2COMPONENT_RESOURCES bitmap2component.icns)
|
||||
set_source_files_properties("${CMAKE_CURRENT_SOURCE_DIR}/bitmap2component.icns"
|
||||
PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
|
||||
set(MACOSX_BUNDLE_ICON_FILE bitmap2component.icns)
|
||||
set(MACOSX_BUNDLE_GUI_IDENTIFIER org.kicad-eda.bitmap2component)
|
||||
endif(APPLE)
|
||||
|
||||
|
||||
if( MINGW )
|
||||
# BITMAP2COMPONENT_RESOURCES variable is set by the macro.
|
||||
mingw_resource_compiler( bitmap2component )
|
||||
else()
|
||||
set( BITMAP2COMPONENT_RESOURCES bitmap2component.rc )
|
||||
endif()
|
||||
|
||||
add_executable(bitmap2component WIN32 MACOSX_BUNDLE
|
||||
${BITMAP2COMPONENT_SRCS}
|
||||
${BITMAP2COMPONENT_RESOURCES})
|
||||
|
||||
|
||||
if( APPLE )
|
||||
set( BITMAP2COMPONENT_RESOURCES bitmap2component.icns )
|
||||
set_source_files_properties( "${CMAKE_CURRENT_SOURCE_DIR}/bitmap2component.icns" PROPERTIES
|
||||
MACOSX_PACKAGE_LOCATION Resources
|
||||
)
|
||||
set( MACOSX_BUNDLE_ICON_FILE bitmap2component.icns )
|
||||
set( MACOSX_BUNDLE_GUI_IDENTIFIER org.kicad-eda.bitmap2component )
|
||||
if(APPLE)
|
||||
set_target_properties(bitmap2component PROPERTIES MACOSX_BUNDLE_INFO_PLIST
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/Info.plist)
|
||||
endif(APPLE)
|
||||
|
||||
target_link_libraries( bitmap2component common polygon bitmaps
|
||||
${wxWidgets_LIBRARIES}
|
||||
potrace
|
||||
)
|
||||
|
||||
install(TARGETS bitmap2component
|
||||
DESTINATION ${KICAD_BIN}
|
||||
COMPONENT binary)
|
||||
|
||||
set_target_properties( bitmap2component PROPERTIES
|
||||
MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist
|
||||
)
|
||||
endif()
|
||||
|
||||
@@ -34,7 +34,5 @@
|
||||
<true/>
|
||||
<key>NSHumanReadableCopyright</key>
|
||||
<string></string>
|
||||
<key>NSHighResolutionCapable</key>
|
||||
<string>True</string>
|
||||
</dict>
|
||||
</plist>
|
||||
|
||||
+141
-301
@@ -21,15 +21,16 @@
|
||||
* or you may write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#include <fctsys.h>
|
||||
#include <macros.h>
|
||||
|
||||
#include <pgm_base.h>
|
||||
#include <appl_wxstruct.h>
|
||||
#include <wxstruct.h>
|
||||
#include <confirm.h>
|
||||
#include <gestfich.h>
|
||||
|
||||
#include <wx/wx.h>
|
||||
#include <wx/config.h>
|
||||
#include <wx/filename.h>
|
||||
|
||||
#include <bitmap2cmp_gui_base.h>
|
||||
|
||||
#include <potracelib.h>
|
||||
@@ -38,57 +39,47 @@
|
||||
#include <colors_selection.h>
|
||||
#include <build_version.h>
|
||||
#include <menus_helpers.h>
|
||||
#include <kiway.h>
|
||||
#include <kiface_i.h>
|
||||
|
||||
#define KEYWORD_FRAME_POSX wxT( "Bmconverter_Pos_x" )
|
||||
#define KEYWORD_FRAME_POSY wxT( "Bmconverter_Pos_y" )
|
||||
#define KEYWORD_FRAME_SIZEX wxT( "Bmconverter_Size_x" )
|
||||
#define KEYWORD_FRAME_SIZEY wxT( "Bmconverter_Size_y" )
|
||||
#define KEYWORD_LAST_INPUT_FILE wxT( "Last_input" )
|
||||
#define KEYWORD_LAST_OUTPUT_FILE wxT( "Last_output" )
|
||||
#define KEYWORD_LAST_FORMAT wxT( "Last_format" )
|
||||
#define KEYWORD_BINARY_THRESHOLD wxT( "Threshold" )
|
||||
#define KEYWORD_BW_NEGATIVE wxT( "Negative_choice" )
|
||||
#define KEYWORD_FRAME_POSX wxT( "Bmconverter_Pos_x" )
|
||||
#define KEYWORD_FRAME_POSY wxT( "Bmconverter_Pos_y" )
|
||||
#define KEYWORD_FRAME_SIZEX wxT( "Bmconverter_Size_x" )
|
||||
#define KEYWORD_FRAME_SIZEY wxT( "Bmconverter_Size_y" )
|
||||
#define KEYWORD_LAST_INPUT_FILE wxT( "Last_input" )
|
||||
#define KEYWORD_LAST_OUTPUT_FILE wxT( "Last_output" )
|
||||
#define KEYWORD_LAST_FORMAT wxT( "Last_format" )
|
||||
#define KEYWORD_BINARY_THRESHOLD wxT( "Threshold" )
|
||||
#define KEYWORD_BW_NEGATIVE wxT( "Negative_choice" )
|
||||
|
||||
#define DEFAULT_DPI 300 // Default resolution in Bit per inches
|
||||
extern int bitmap2component( potrace_bitmap_t* aPotrace_bitmap, FILE* aOutfile, int aFormat );
|
||||
|
||||
extern int bitmap2component( potrace_bitmap_t* aPotrace_bitmap, FILE* aOutfile,
|
||||
int aFormat, int aDpi_X, int aDpi_Y );
|
||||
|
||||
/**
|
||||
* Class BM2CMP_FRAME_BASE
|
||||
* is the main frame for this application
|
||||
*/
|
||||
/* Class BM2CMP_FRAME_BASE
|
||||
This is the main frame for this application
|
||||
*/
|
||||
class BM2CMP_FRAME : public BM2CMP_FRAME_BASE
|
||||
{
|
||||
private:
|
||||
wxImage m_Pict_Image;
|
||||
wxBitmap m_Pict_Bitmap;
|
||||
wxImage m_Greyscale_Image;
|
||||
wxBitmap m_Greyscale_Bitmap;
|
||||
wxImage m_NB_Image;
|
||||
wxBitmap m_BN_Bitmap;
|
||||
wxSize m_imageDPI; // The initial image resolution. When unknown,
|
||||
// set to DEFAULT_DPI x DEFAULT_DPI per Inch
|
||||
wxString m_BitmapFileName;
|
||||
wxString m_ConvertedFileName;
|
||||
wxSize m_frameSize;
|
||||
wxPoint m_framePos;
|
||||
wxConfig* m_config;
|
||||
wxImage m_Pict_Image;
|
||||
wxBitmap m_Pict_Bitmap;
|
||||
wxImage m_Greyscale_Image;
|
||||
wxBitmap m_Greyscale_Bitmap;
|
||||
wxImage m_NB_Image;
|
||||
wxBitmap m_BN_Bitmap;
|
||||
wxString m_BitmapFileName;
|
||||
wxString m_ConvertedFileName;
|
||||
wxSize m_FrameSize;
|
||||
wxPoint m_FramePos;
|
||||
wxConfig * m_Config;
|
||||
|
||||
public:
|
||||
BM2CMP_FRAME( KIWAY* aKiway, wxWindow* aParent );
|
||||
BM2CMP_FRAME();
|
||||
~BM2CMP_FRAME();
|
||||
|
||||
// overload KIWAY_PLAYER virtual
|
||||
bool OpenProjectFiles( const std::vector<wxString>& aFilenames, int aCtl=0 );
|
||||
|
||||
private:
|
||||
|
||||
// Event handlers
|
||||
void OnPaint( wxPaintEvent& event );
|
||||
void OnLoadFile( wxCommandEvent& event );
|
||||
bool LoadFile( wxString& aFullFileName );
|
||||
void OnExport( wxCommandEvent& event );
|
||||
|
||||
/**
|
||||
@@ -118,51 +109,30 @@ private:
|
||||
void Binarize( double aThreshold ); // aThreshold = 0.0 (black level) to 1.0 (white level)
|
||||
void OnOptionsSelection( wxCommandEvent& event );
|
||||
void OnThresholdChange( wxScrollEvent& event );
|
||||
void OnResolutionChange( wxCommandEvent& event );
|
||||
|
||||
// called when texts controls which handle the image resolution
|
||||
// lose the focus, to ensure the rigyht vaules are displayed
|
||||
// because the m_imageDPI are clipped to acceptable values, and
|
||||
// the text displayed could be differ duringa text edition
|
||||
// We are using ChangeValue here to avoid generating a wxEVT_TEXT event.
|
||||
void UpdateDPITextValueX( wxMouseEvent& event )
|
||||
{
|
||||
m_DPIValueX->ChangeValue( wxString::Format( wxT( "%d" ), m_imageDPI.x ) );
|
||||
}
|
||||
void UpdateDPITextValueY( wxMouseEvent& event )
|
||||
{
|
||||
m_DPIValueY->ChangeValue( wxString::Format( wxT( "%d" ), m_imageDPI.y ) );
|
||||
}
|
||||
|
||||
void NegateGreyscaleImage( );
|
||||
void ExportFile( FILE* aOutfile, int aFormat );
|
||||
void updateImageInfo();
|
||||
};
|
||||
|
||||
|
||||
BM2CMP_FRAME::BM2CMP_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
|
||||
BM2CMP_FRAME_BASE( aParent )
|
||||
BM2CMP_FRAME::BM2CMP_FRAME() : BM2CMP_FRAME_BASE( NULL )
|
||||
{
|
||||
SetKiway( this, aKiway );
|
||||
|
||||
int tmp;
|
||||
m_config = new wxConfig();
|
||||
m_config->Read( KEYWORD_FRAME_POSX, & m_framePos.x, -1 );
|
||||
m_config->Read( KEYWORD_FRAME_POSY, & m_framePos.y, -1 );
|
||||
m_config->Read( KEYWORD_FRAME_SIZEX, & m_frameSize.x, -1 );
|
||||
m_config->Read( KEYWORD_FRAME_SIZEY, & m_frameSize.y, -1 );
|
||||
m_config->Read( KEYWORD_LAST_INPUT_FILE, &m_BitmapFileName );
|
||||
m_config->Read( KEYWORD_LAST_OUTPUT_FILE, &m_ConvertedFileName );
|
||||
|
||||
if( m_config->Read( KEYWORD_BINARY_THRESHOLD, &tmp ) )
|
||||
m_Config = new wxConfig();
|
||||
m_Config->Read( KEYWORD_FRAME_POSX, & m_FramePos.x, -1 );
|
||||
m_Config->Read( KEYWORD_FRAME_POSY, & m_FramePos.y, -1 );
|
||||
m_Config->Read( KEYWORD_FRAME_SIZEX, & m_FrameSize.x, -1 );
|
||||
m_Config->Read( KEYWORD_FRAME_SIZEY, & m_FrameSize.y, -1 );
|
||||
m_Config->Read( KEYWORD_LAST_INPUT_FILE, &m_BitmapFileName );
|
||||
m_Config->Read( KEYWORD_LAST_OUTPUT_FILE, &m_ConvertedFileName );
|
||||
if( m_Config->Read( KEYWORD_BINARY_THRESHOLD, &tmp ) )
|
||||
m_sliderThreshold->SetValue( tmp );
|
||||
|
||||
if( m_config->Read( KEYWORD_BW_NEGATIVE, &tmp ) )
|
||||
if( m_Config->Read( KEYWORD_BW_NEGATIVE, &tmp ) )
|
||||
m_rbOptions->SetSelection( tmp ? 1 : 0 );
|
||||
|
||||
m_config->Read( KEYWORD_LAST_FORMAT, &tmp );
|
||||
m_Config->Read( KEYWORD_LAST_FORMAT, &tmp );
|
||||
m_radioBoxFormat->SetSelection( tmp );
|
||||
|
||||
|
||||
// Give an icon
|
||||
wxIcon icon;
|
||||
icon.CopyFromBitmap( KiBitmap( icon_bitmap2component_xpm ) );
|
||||
@@ -170,36 +140,34 @@ BM2CMP_FRAME::BM2CMP_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
|
||||
|
||||
GetSizer()->SetSizeHints( this );
|
||||
|
||||
SetSize( m_framePos.x, m_framePos.y, m_frameSize.x, m_frameSize.y );
|
||||
SetSize( m_FramePos.x, m_FramePos.y, m_FrameSize.x, m_FrameSize.y );
|
||||
|
||||
m_buttonExport->Enable( false );
|
||||
|
||||
m_imageDPI.x = m_imageDPI.y = DEFAULT_DPI; // Default resolution in Bit per inches
|
||||
|
||||
if ( m_framePos == wxDefaultPosition )
|
||||
if ( m_FramePos == wxDefaultPosition )
|
||||
Centre();
|
||||
}
|
||||
|
||||
|
||||
BM2CMP_FRAME::~BM2CMP_FRAME()
|
||||
{
|
||||
if( !m_config || IsIconized() )
|
||||
if( ( m_Config == NULL ) || IsIconized() )
|
||||
return;
|
||||
|
||||
m_frameSize = GetSize();
|
||||
m_framePos = GetPosition();
|
||||
m_FrameSize = GetSize();
|
||||
m_FramePos = GetPosition();
|
||||
|
||||
m_config->Write( KEYWORD_FRAME_POSX, (long) m_framePos.x );
|
||||
m_config->Write( KEYWORD_FRAME_POSY, (long) m_framePos.y );
|
||||
m_config->Write( KEYWORD_FRAME_SIZEX, (long) m_frameSize.x );
|
||||
m_config->Write( KEYWORD_FRAME_SIZEY, (long) m_frameSize.y );
|
||||
m_config->Write( KEYWORD_LAST_INPUT_FILE, m_BitmapFileName );
|
||||
m_config->Write( KEYWORD_LAST_OUTPUT_FILE, m_ConvertedFileName );
|
||||
m_config->Write( KEYWORD_BINARY_THRESHOLD, m_sliderThreshold->GetValue() );
|
||||
m_config->Write( KEYWORD_BW_NEGATIVE, m_rbOptions->GetSelection() );
|
||||
m_config->Write( KEYWORD_LAST_FORMAT, m_radioBoxFormat->GetSelection() );
|
||||
m_Config->Write( KEYWORD_FRAME_POSX, (long) m_FramePos.x );
|
||||
m_Config->Write( KEYWORD_FRAME_POSY, (long) m_FramePos.y );
|
||||
m_Config->Write( KEYWORD_FRAME_SIZEX, (long) m_FrameSize.x );
|
||||
m_Config->Write( KEYWORD_FRAME_SIZEY, (long) m_FrameSize.y );
|
||||
m_Config->Write( KEYWORD_LAST_INPUT_FILE, m_BitmapFileName );
|
||||
m_Config->Write( KEYWORD_LAST_OUTPUT_FILE, m_ConvertedFileName );
|
||||
m_Config->Write( KEYWORD_BINARY_THRESHOLD, m_sliderThreshold->GetValue() );
|
||||
m_Config->Write( KEYWORD_BW_NEGATIVE, m_rbOptions->GetSelection() );
|
||||
m_Config->Write( KEYWORD_LAST_FORMAT, m_radioBoxFormat->GetSelection() );
|
||||
|
||||
delete m_config;
|
||||
delete m_Config;
|
||||
|
||||
/* This needed for OSX: avoids further OnDraw processing after this
|
||||
* destructor and before the native window is destroyed
|
||||
@@ -239,24 +207,23 @@ void BM2CMP_FRAME::OnPaint( wxPaintEvent& event )
|
||||
*/
|
||||
void BM2CMP_FRAME::OnLoadFile( wxCommandEvent& event )
|
||||
{
|
||||
wxFileName fn( m_BitmapFileName );
|
||||
wxString path = fn.GetPath();
|
||||
wxFileName fn(m_BitmapFileName);
|
||||
wxString path = fn.GetPath();
|
||||
|
||||
if( path.IsEmpty() || !wxDirExists(path) )
|
||||
path = wxGetCwd();
|
||||
|
||||
wxFileDialog fileDlg( this, _( "Choose Image" ), path, wxEmptyString,
|
||||
wxFileDialog FileDlg( this, _( "Choose Image" ), path, wxEmptyString,
|
||||
_( "Image Files " ) + wxImage::GetImageExtWildcard(),
|
||||
wxFD_OPEN );
|
||||
|
||||
int diag = fileDlg.ShowModal();
|
||||
int diag = FileDlg.ShowModal();
|
||||
|
||||
if( diag != wxID_OK )
|
||||
return;
|
||||
|
||||
wxString fullFilename = fileDlg.GetPath();
|
||||
wxString fullFilename = FileDlg.GetPath();
|
||||
|
||||
if( !OpenProjectFiles( std::vector<wxString>( 1, fullFilename ) ) )
|
||||
if( ! LoadFile( fullFilename ) )
|
||||
return;
|
||||
|
||||
m_buttonExport->Enable( true );
|
||||
@@ -265,22 +232,13 @@ void BM2CMP_FRAME::OnLoadFile( wxCommandEvent& event )
|
||||
}
|
||||
|
||||
|
||||
bool BM2CMP_FRAME::OpenProjectFiles( const std::vector<wxString>& aFileSet, int aCtl )
|
||||
bool BM2CMP_FRAME::LoadFile( wxString& aFullFileName )
|
||||
{
|
||||
// Prj().MaybeLoadProjectSettings();
|
||||
|
||||
m_BitmapFileName = aFileSet[0];
|
||||
m_BitmapFileName = aFullFileName;
|
||||
|
||||
if( !m_Pict_Image.LoadFile( m_BitmapFileName ) )
|
||||
{
|
||||
/* LoadFile has its own UI, no need for further failure notification here
|
||||
wxString msg = wxString::Format(
|
||||
_( "Could not load image '%s'" ),
|
||||
GetChars( aFilename )
|
||||
);
|
||||
|
||||
wxMessageBox( msg );
|
||||
*/
|
||||
wxMessageBox( _( "Couldn't load image from <%s>" ), m_BitmapFileName.c_str() );
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -288,32 +246,15 @@ bool BM2CMP_FRAME::OpenProjectFiles( const std::vector<wxString>& aFileSet, int
|
||||
|
||||
int h = m_Pict_Bitmap.GetHeight();
|
||||
int w = m_Pict_Bitmap.GetWidth();
|
||||
int nb = m_Pict_Bitmap.GetDepth();
|
||||
|
||||
// Determine image resolution in DPI (does not existing in all formats).
|
||||
// the resolution can be given in bit per inches or bit per cm in file
|
||||
m_imageDPI.x = m_Pict_Image.GetOptionInt( wxIMAGE_OPTION_RESOLUTIONX );
|
||||
m_imageDPI.y = m_Pict_Image.GetOptionInt( wxIMAGE_OPTION_RESOLUTIONY );
|
||||
|
||||
if( m_imageDPI.x > 1 && m_imageDPI.y > 1 )
|
||||
{
|
||||
if( m_Pict_Image.GetOptionInt( wxIMAGE_OPTION_RESOLUTIONUNIT ) == wxIMAGE_RESOLUTION_CM )
|
||||
{
|
||||
// When the initial resolution is given in bits per cm,
|
||||
// experience shows adding 1.27 to the resolution converted in dpi
|
||||
// before convert to int value reduce the conversion error
|
||||
// but it is not perfect
|
||||
m_imageDPI.x = m_imageDPI.x * 2.54 + 1.27;
|
||||
m_imageDPI.y = m_imageDPI.y * 2.54 + 1.27;
|
||||
}
|
||||
}
|
||||
else // fallback to the default value
|
||||
m_imageDPI.x = m_imageDPI.y = DEFAULT_DPI;
|
||||
|
||||
// Display image info:
|
||||
// We are using ChangeValue here to avoid generating a wxEVT_TEXT event.
|
||||
m_DPIValueX->ChangeValue( wxString::Format( wxT( "%d" ), m_imageDPI.x ) );
|
||||
m_DPIValueY->ChangeValue( wxString::Format( wxT( "%d" ), m_imageDPI.y ) );
|
||||
updateImageInfo();
|
||||
wxString msg;
|
||||
msg.Printf( wxT( "%d" ), w );
|
||||
m_SizeXValue->SetLabel(msg);
|
||||
msg.Printf( wxT( "%d" ), h );
|
||||
m_SizeYValue->SetLabel(msg);
|
||||
msg.Printf( wxT( "%d" ), nb );
|
||||
m_BPPValue->SetLabel(msg);
|
||||
|
||||
m_InitialPicturePanel->SetVirtualSize( w, h );
|
||||
m_GreyscalePicturePanel->SetVirtualSize( w, h );
|
||||
@@ -321,55 +262,16 @@ bool BM2CMP_FRAME::OpenProjectFiles( const std::vector<wxString>& aFileSet, int
|
||||
|
||||
m_Greyscale_Image.Destroy();
|
||||
m_Greyscale_Image = m_Pict_Image.ConvertToGreyscale( );
|
||||
|
||||
if( m_rbOptions->GetSelection() > 0 )
|
||||
NegateGreyscaleImage( );
|
||||
|
||||
m_Greyscale_Bitmap = wxBitmap( m_Greyscale_Image );
|
||||
|
||||
m_NB_Image = m_Greyscale_Image;
|
||||
Binarize( (double) m_sliderThreshold->GetValue()/m_sliderThreshold->GetMax() );
|
||||
Binarize( (double)m_sliderThreshold->GetValue()/m_sliderThreshold->GetMax() );
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void BM2CMP_FRAME::updateImageInfo()
|
||||
{
|
||||
// Note: the image resolution text controls are not modified
|
||||
// here, to avoid a race between text change when entered by user and
|
||||
// a text change if it is modifed here.
|
||||
int h = m_Pict_Bitmap.GetHeight();
|
||||
int w = m_Pict_Bitmap.GetWidth();
|
||||
int nb = m_Pict_Bitmap.GetDepth();
|
||||
|
||||
m_SizeXValue->SetLabel( wxString::Format( wxT( "%d" ), w ) );
|
||||
m_SizeYValue->SetLabel( wxString::Format( wxT( "%d" ), h ) );
|
||||
m_BPPValue->SetLabel( wxString::Format( wxT( "%d" ), nb ) );
|
||||
|
||||
m_SizeXValue_mm->SetLabel( wxString::Format( wxT( "%.1f" ),
|
||||
(double) w / m_imageDPI.x * 25.4 ) );
|
||||
m_SizeYValue_mm->SetLabel( wxString::Format( wxT( "%.1f" ),
|
||||
(double) h / m_imageDPI.y * 25.4 ) );
|
||||
}
|
||||
|
||||
void BM2CMP_FRAME::OnResolutionChange( wxCommandEvent& event )
|
||||
{
|
||||
long tmp;
|
||||
|
||||
if( m_DPIValueX->GetValue().ToLong( &tmp ) )
|
||||
m_imageDPI.x = tmp;
|
||||
|
||||
if( m_DPIValueY->GetValue().ToLong( &tmp ) )
|
||||
m_imageDPI.y = tmp;
|
||||
|
||||
if( m_imageDPI.x < 32 )
|
||||
m_imageDPI.x = 32;
|
||||
|
||||
if( m_imageDPI.y < 32 )
|
||||
m_imageDPI.y = 32;
|
||||
|
||||
updateImageInfo();
|
||||
}
|
||||
|
||||
void BM2CMP_FRAME::Binarize( double aThreshold )
|
||||
{
|
||||
@@ -379,8 +281,8 @@ void BM2CMP_FRAME::Binarize( double aThreshold )
|
||||
int w = m_Greyscale_Image.GetWidth();
|
||||
unsigned int threshold = (int)(aThreshold * 256);
|
||||
|
||||
for( int y = 0; y < h; y++ )
|
||||
for( int x = 0; x < w; x++ )
|
||||
for( int y = 1; y < h; y++ )
|
||||
for( int x = 1; x < w; x++ )
|
||||
{
|
||||
pixin = m_Greyscale_Image.GetGreen( x, y );
|
||||
|
||||
@@ -395,15 +297,14 @@ void BM2CMP_FRAME::Binarize( double aThreshold )
|
||||
m_BN_Bitmap = wxBitmap( m_NB_Image );
|
||||
}
|
||||
|
||||
|
||||
void BM2CMP_FRAME::NegateGreyscaleImage( )
|
||||
{
|
||||
unsigned char pix;
|
||||
int h = m_Greyscale_Image.GetHeight();
|
||||
int w = m_Greyscale_Image.GetWidth();
|
||||
int h = m_Greyscale_Image.GetHeight();
|
||||
int w = m_Greyscale_Image.GetWidth();
|
||||
|
||||
for( int y = 0; y < h; y++ )
|
||||
for( int x = 0; x < w; x++ )
|
||||
for( int y = 1; y < h; y++ )
|
||||
for( int x = 1; x < w; x++ )
|
||||
{
|
||||
pix = m_Greyscale_Image.GetGreen( x, y );
|
||||
pix = ~pix;
|
||||
@@ -420,61 +321,58 @@ void BM2CMP_FRAME::OnOptionsSelection( wxCommandEvent& event )
|
||||
Refresh();
|
||||
}
|
||||
|
||||
|
||||
void BM2CMP_FRAME::OnThresholdChange( wxScrollEvent& event )
|
||||
{
|
||||
Binarize( (double)m_sliderThreshold->GetValue()/m_sliderThreshold->GetMax() );
|
||||
Refresh();
|
||||
}
|
||||
|
||||
|
||||
void BM2CMP_FRAME::OnExport( wxCommandEvent& event )
|
||||
{
|
||||
int sel = m_radioBoxFormat->GetSelection();
|
||||
|
||||
switch( sel )
|
||||
{
|
||||
case 0:
|
||||
OnExportEeschema();
|
||||
break;
|
||||
case 0:
|
||||
OnExportEeschema();
|
||||
break;
|
||||
|
||||
case 1:
|
||||
OnExportPcbnew( true );
|
||||
break;
|
||||
case 1:
|
||||
OnExportPcbnew( true );
|
||||
break;
|
||||
|
||||
case 2:
|
||||
OnExportPcbnew( false );
|
||||
break;
|
||||
case 2:
|
||||
OnExportPcbnew( false );
|
||||
break;
|
||||
|
||||
case 3:
|
||||
OnExportPostScript();
|
||||
break;
|
||||
case 3:
|
||||
OnExportPostScript();
|
||||
break;
|
||||
|
||||
case 4:
|
||||
OnExportLogo();
|
||||
break;
|
||||
case 4:
|
||||
OnExportLogo();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void BM2CMP_FRAME::OnExportLogo()
|
||||
{
|
||||
wxFileName fn( m_ConvertedFileName );
|
||||
wxString path = fn.GetPath();
|
||||
wxFileName fn(m_ConvertedFileName);
|
||||
wxString path = fn.GetPath();
|
||||
|
||||
if( path.IsEmpty() || !wxDirExists(path) )
|
||||
path = ::wxGetCwd();
|
||||
|
||||
wxString msg = _( "Logo file (*.kicad_wks)|*.kicad_wks" );
|
||||
wxFileDialog fileDlg( this, _( "Create a logo file" ), path, wxEmptyString,
|
||||
wxFileDialog FileDlg( this, _( "Create a logo file" ), path, wxEmptyString,
|
||||
msg,
|
||||
wxFD_SAVE | wxFD_OVERWRITE_PROMPT );
|
||||
int diag = fileDlg.ShowModal();
|
||||
int diag = FileDlg.ShowModal();
|
||||
|
||||
if( diag != wxID_OK )
|
||||
return;
|
||||
|
||||
m_ConvertedFileName = fileDlg.GetPath();
|
||||
m_ConvertedFileName = FileDlg.GetPath();
|
||||
|
||||
FILE* outfile;
|
||||
outfile = wxFopen( m_ConvertedFileName, wxT( "w" ) );
|
||||
@@ -491,26 +389,24 @@ void BM2CMP_FRAME::OnExportLogo()
|
||||
fclose( outfile );
|
||||
}
|
||||
|
||||
|
||||
void BM2CMP_FRAME::OnExportPostScript()
|
||||
{
|
||||
wxFileName fn( m_ConvertedFileName );
|
||||
wxString path = fn.GetPath();
|
||||
wxFileName fn(m_ConvertedFileName);
|
||||
wxString path = fn.GetPath();
|
||||
|
||||
if( path.IsEmpty() || !wxDirExists( path ) )
|
||||
if( path.IsEmpty() || !wxDirExists(path) )
|
||||
path = ::wxGetCwd();
|
||||
|
||||
wxString msg = _( "Postscript file (*.ps)|*.ps" );
|
||||
wxFileDialog fileDlg( this, _( "Create a Postscript file" ), path, wxEmptyString,
|
||||
wxFileDialog FileDlg( this, _( "Create a Postscript file" ), path, wxEmptyString,
|
||||
msg,
|
||||
wxFD_SAVE | wxFD_OVERWRITE_PROMPT );
|
||||
|
||||
int diag = fileDlg.ShowModal();
|
||||
int diag = FileDlg.ShowModal();
|
||||
|
||||
if( diag != wxID_OK )
|
||||
return;
|
||||
|
||||
m_ConvertedFileName = fileDlg.GetPath();
|
||||
m_ConvertedFileName = FileDlg.GetPath();
|
||||
|
||||
FILE* outfile;
|
||||
outfile = wxFopen( m_ConvertedFileName, wxT( "w" ) );
|
||||
@@ -527,29 +423,27 @@ void BM2CMP_FRAME::OnExportPostScript()
|
||||
fclose( outfile );
|
||||
}
|
||||
|
||||
|
||||
void BM2CMP_FRAME::OnExportEeschema()
|
||||
{
|
||||
wxFileName fn( m_ConvertedFileName );
|
||||
wxString path = fn.GetPath();
|
||||
wxFileName fn(m_ConvertedFileName);
|
||||
wxString path = fn.GetPath();
|
||||
|
||||
if( path.IsEmpty() || !wxDirExists(path) )
|
||||
path = ::wxGetCwd();
|
||||
|
||||
wxString msg = _( "Schematic lib file (*.lib)|*.lib" );
|
||||
|
||||
wxFileDialog fileDlg( this, _( "Create a lib file for Eeschema" ), path, wxEmptyString,
|
||||
wxFileDialog FileDlg( this, _( "Create a lib file for Eeschema" ), path, wxEmptyString,
|
||||
msg,
|
||||
wxFD_SAVE | wxFD_OVERWRITE_PROMPT );
|
||||
|
||||
int diag = fileDlg.ShowModal();
|
||||
int diag = FileDlg.ShowModal();
|
||||
|
||||
if( diag != wxID_OK )
|
||||
return;
|
||||
|
||||
m_ConvertedFileName = fileDlg.GetPath();
|
||||
m_ConvertedFileName = FileDlg.GetPath();
|
||||
|
||||
FILE* outfile = wxFopen( m_ConvertedFileName, wxT( "w" ) );
|
||||
FILE* outfile;
|
||||
outfile = wxFopen( m_ConvertedFileName, wxT( "w" ) );
|
||||
|
||||
if( outfile == NULL )
|
||||
{
|
||||
@@ -566,29 +460,29 @@ void BM2CMP_FRAME::OnExportEeschema()
|
||||
|
||||
void BM2CMP_FRAME::OnExportPcbnew( bool aLegacyFormat )
|
||||
{
|
||||
wxFileName fn( m_ConvertedFileName );
|
||||
wxString path = fn.GetPath();
|
||||
wxFileName fn(m_ConvertedFileName);
|
||||
wxString path = fn.GetPath();
|
||||
|
||||
if( path.IsEmpty() || !wxDirExists( path ) )
|
||||
if( path.IsEmpty() || !wxDirExists(path) )
|
||||
path = ::wxGetCwd();
|
||||
|
||||
wxString msg = aLegacyFormat ?
|
||||
_( "Footprint file (*.emp)|*.emp" ) :
|
||||
_( "Footprint file (*.kicad_mod)|*.kicad_mod" );
|
||||
|
||||
wxFileDialog fileDlg( this, _( "Create a footprint file for PcbNew" ),
|
||||
wxFileDialog FileDlg( this, _( "Create a footprint file for PcbNew" ),
|
||||
path, wxEmptyString,
|
||||
msg,
|
||||
wxFD_SAVE | wxFD_OVERWRITE_PROMPT );
|
||||
|
||||
int diag = fileDlg.ShowModal();
|
||||
int diag = FileDlg.ShowModal();
|
||||
|
||||
if( diag != wxID_OK )
|
||||
return;
|
||||
|
||||
m_ConvertedFileName = fileDlg.GetPath();
|
||||
m_ConvertedFileName = FileDlg.GetPath();
|
||||
|
||||
FILE* outfile = wxFopen( m_ConvertedFileName, wxT( "w" ) );
|
||||
|
||||
FILE* outfile;
|
||||
outfile = wxFopen( m_ConvertedFileName, wxT( "w" ) );
|
||||
|
||||
if( outfile == NULL )
|
||||
{
|
||||
@@ -602,7 +496,6 @@ void BM2CMP_FRAME::OnExportPcbnew( bool aLegacyFormat )
|
||||
fclose( outfile );
|
||||
}
|
||||
|
||||
|
||||
void BM2CMP_FRAME::ExportFile( FILE* aOutfile, int aFormat )
|
||||
{
|
||||
// Create a potrace bitmap
|
||||
@@ -619,95 +512,42 @@ void BM2CMP_FRAME::ExportFile( FILE* aOutfile, int aFormat )
|
||||
}
|
||||
|
||||
/* fill the bitmap with data */
|
||||
for( int y = 0; y < h; y++ )
|
||||
for( int y = 0; y<h; y++ )
|
||||
{
|
||||
for( int x = 0; x < w; x++ )
|
||||
for( int x = 0; x<w; x++ )
|
||||
{
|
||||
unsigned char pix = m_NB_Image.GetGreen( x, y );
|
||||
BM_PUT( potrace_bitmap, x, y, pix ? 1 : 0 );
|
||||
}
|
||||
}
|
||||
|
||||
bitmap2component( potrace_bitmap, aOutfile, aFormat, m_imageDPI.x, m_imageDPI.y );
|
||||
bitmap2component( potrace_bitmap, aOutfile, aFormat );
|
||||
}
|
||||
|
||||
|
||||
// EDA_APP
|
||||
|
||||
//-----<KIFACE>-----------------------------------------------------------------
|
||||
IMPLEMENT_APP( EDA_APP )
|
||||
|
||||
namespace BMP2CMP {
|
||||
///-----------------------------------------------------------------------------
|
||||
// EDA_APP
|
||||
// main program
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
static struct IFACE : public KIFACE_I
|
||||
bool EDA_APP::OnInit()
|
||||
{
|
||||
bool OnKifaceStart( PGM_BASE* aProgram, int aCtlBits );
|
||||
wxInitAllImageHandlers();
|
||||
|
||||
wxWindow* CreateWindow( wxWindow* aParent, int aClassId, KIWAY* aKiway, int aCtlBits = 0 )
|
||||
{
|
||||
switch( aClassId )
|
||||
{
|
||||
InitEDA_Appl( wxT( "BMP2CMP" ) );
|
||||
|
||||
default:
|
||||
{
|
||||
KIWAY_PLAYER* frame = new BM2CMP_FRAME( aKiway, aParent );
|
||||
return frame;
|
||||
}
|
||||
}
|
||||
}
|
||||
wxFrame* frame = new BM2CMP_FRAME();
|
||||
SetTopWindow( frame );
|
||||
frame->Show( true );
|
||||
|
||||
/**
|
||||
* Function IfaceOrAddress
|
||||
* return a pointer to the requested object. The safest way to use this
|
||||
* is to retrieve a pointer to a static instance of an interface, similar to
|
||||
* how the KIFACE interface is exported. But if you know what you are doing
|
||||
* use it to retrieve anything you want.
|
||||
*
|
||||
* @param aDataId identifies which object you want the address of.
|
||||
*
|
||||
* @return void* - and must be cast into the know type.
|
||||
*/
|
||||
void* IfaceOrAddress( int aDataId )
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
IFACE( const char* aDSOname, KIWAY::FACE_T aType ) :
|
||||
KIFACE_I( aDSOname, aType )
|
||||
{}
|
||||
|
||||
} kiface( "BMP2CMP", KIWAY::FACE_BMP2CMP );
|
||||
|
||||
} // namespace BMP2CMP
|
||||
|
||||
using namespace BMP2CMP;
|
||||
|
||||
static PGM_BASE* process;
|
||||
|
||||
KIFACE_I& Kiface()
|
||||
{
|
||||
return kiface;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
// KIFACE_GETTER's actual spelling is a substitution macro found in kiway.h.
|
||||
// KIFACE_GETTER will not have name mangling due to declaration in kiway.h.
|
||||
MY_API( KIFACE* ) KIFACE_GETTER( int* aKIFACEversion, int aKIWAYversion, PGM_BASE* aProgram )
|
||||
void EDA_APP::MacOpenFile(const wxString &fileName)
|
||||
{
|
||||
process = (PGM_BASE*) aProgram;
|
||||
return &kiface;
|
||||
}
|
||||
|
||||
|
||||
#if defined(BUILD_KIWAY_DLLS)
|
||||
PGM_BASE& Pgm()
|
||||
{
|
||||
wxASSERT( process ); // KIFACE_GETTER has already been called.
|
||||
return *process;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
bool IFACE::OnKifaceStart( PGM_BASE* aProgram, int aCtlBits )
|
||||
{
|
||||
return start_common( aCtlBits );
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// C++ code generated with wxFormBuilder (version Nov 5 2013)
|
||||
// C++ code generated with wxFormBuilder (version Oct 8 2012)
|
||||
// http://www.wxformbuilder.org/
|
||||
//
|
||||
// PLEASE DO "NOT" EDIT THIS FILE!
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
BM2CMP_FRAME_BASE::BM2CMP_FRAME_BASE( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : KIWAY_PLAYER( parent, id, title, pos, size, style )
|
||||
BM2CMP_FRAME_BASE::BM2CMP_FRAME_BASE( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxFrame( parent, id, title, pos, size, style )
|
||||
{
|
||||
this->SetSizeHints( wxDefaultSize, wxDefaultSize );
|
||||
|
||||
@@ -41,43 +41,33 @@ BM2CMP_FRAME_BASE::BM2CMP_FRAME_BASE( wxWindow* parent, wxWindowID id, const wxS
|
||||
sbSizerInfo = new wxStaticBoxSizer( new wxStaticBox( m_panelRight, wxID_ANY, _("Bitmap Info:") ), wxVERTICAL );
|
||||
|
||||
wxFlexGridSizer* fgSizerInfo;
|
||||
fgSizerInfo = new wxFlexGridSizer( 0, 4, 0, 0 );
|
||||
fgSizerInfo->AddGrowableCol( 1 );
|
||||
fgSizerInfo->AddGrowableCol( 2 );
|
||||
fgSizerInfo = new wxFlexGridSizer( 3, 3, 0, 0 );
|
||||
fgSizerInfo->SetFlexibleDirection( wxBOTH );
|
||||
fgSizerInfo->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
|
||||
|
||||
m_staticTextSize = new wxStaticText( m_panelRight, wxID_ANY, _("Size:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticTextSize->Wrap( -1 );
|
||||
fgSizerInfo->Add( m_staticTextSize, 0, wxALIGN_RIGHT|wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
||||
m_staticTextSizeX = new wxStaticText( m_panelRight, wxID_ANY, _("Size X:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticTextSizeX->Wrap( -1 );
|
||||
fgSizerInfo->Add( m_staticTextSizeX, 0, wxALIGN_RIGHT|wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
m_SizeXValue = new wxStaticText( m_panelRight, wxID_ANY, _("0000"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_SizeXValue->Wrap( -1 );
|
||||
fgSizerInfo->Add( m_SizeXValue, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 );
|
||||
fgSizerInfo->Add( m_SizeXValue, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
m_SizeXunits = new wxStaticText( m_panelRight, wxID_ANY, _("pixels"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_SizeXunits->Wrap( -1 );
|
||||
fgSizerInfo->Add( m_SizeXunits, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
m_staticTextSizeY = new wxStaticText( m_panelRight, wxID_ANY, _("Size Y:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticTextSizeY->Wrap( -1 );
|
||||
fgSizerInfo->Add( m_staticTextSizeY, 0, wxALIGN_RIGHT|wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
m_SizeYValue = new wxStaticText( m_panelRight, wxID_ANY, _("0000"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_SizeYValue->Wrap( -1 );
|
||||
fgSizerInfo->Add( m_SizeYValue, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 );
|
||||
fgSizerInfo->Add( m_SizeYValue, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
m_SizePixUnits = new wxStaticText( m_panelRight, wxID_ANY, _("pixels"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_SizePixUnits->Wrap( -1 );
|
||||
fgSizerInfo->Add( m_SizePixUnits, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 );
|
||||
|
||||
m_staticTextSize1 = new wxStaticText( m_panelRight, wxID_ANY, _("Size:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticTextSize1->Wrap( -1 );
|
||||
fgSizerInfo->Add( m_staticTextSize1, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_RIGHT, 5 );
|
||||
|
||||
m_SizeXValue_mm = new wxStaticText( m_panelRight, wxID_ANY, _("0000"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_SizeXValue_mm->Wrap( -1 );
|
||||
fgSizerInfo->Add( m_SizeXValue_mm, 0, wxBOTTOM|wxRIGHT, 5 );
|
||||
|
||||
m_SizeYValue_mm = new wxStaticText( m_panelRight, wxID_ANY, _("0000"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_SizeYValue_mm->Wrap( -1 );
|
||||
fgSizerInfo->Add( m_SizeYValue_mm, 0, wxBOTTOM|wxRIGHT, 5 );
|
||||
|
||||
m_Size_mmxUnits = new wxStaticText( m_panelRight, wxID_ANY, _("mm"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_Size_mmxUnits->Wrap( -1 );
|
||||
fgSizerInfo->Add( m_Size_mmxUnits, 0, wxBOTTOM|wxRIGHT, 5 );
|
||||
m_SizeYunits = new wxStaticText( m_panelRight, wxID_ANY, _("pixels"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_SizeYunits->Wrap( -1 );
|
||||
fgSizerInfo->Add( m_SizeYunits, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
m_staticTextBPP = new wxStaticText( m_panelRight, wxID_ANY, _("BPP:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticTextBPP->Wrap( -1 );
|
||||
@@ -85,38 +75,17 @@ BM2CMP_FRAME_BASE::BM2CMP_FRAME_BASE( wxWindow* parent, wxWindowID id, const wxS
|
||||
|
||||
m_BPPValue = new wxStaticText( m_panelRight, wxID_ANY, _("0000"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_BPPValue->Wrap( -1 );
|
||||
fgSizerInfo->Add( m_BPPValue, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT, 5 );
|
||||
fgSizerInfo->Add( m_BPPValue, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
m_BPPunits = new wxStaticText( m_panelRight, wxID_ANY, _("bits"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_BPPunits->Wrap( -1 );
|
||||
fgSizerInfo->Add( m_BPPunits, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
|
||||
fgSizerInfo->Add( 0, 0, 1, wxEXPAND, 5 );
|
||||
|
||||
m_staticTextBPI = new wxStaticText( m_panelRight, wxID_ANY, _("Resolution:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticTextBPI->Wrap( -1 );
|
||||
fgSizerInfo->Add( m_staticTextBPI, 0, wxALIGN_RIGHT|wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
m_DPIValueX = new wxTextCtrl( m_panelRight, wxID_ANY, _("300"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_DPIValueX->SetMinSize( wxSize( 40,-1 ) );
|
||||
|
||||
fgSizerInfo->Add( m_DPIValueX, 0, wxBOTTOM|wxRIGHT, 5 );
|
||||
|
||||
m_DPIValueY = new wxTextCtrl( m_panelRight, wxID_ANY, _("300"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_DPIValueY->SetMinSize( wxSize( 40,-1 ) );
|
||||
|
||||
fgSizerInfo->Add( m_DPIValueY, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT, 5 );
|
||||
|
||||
m_DPI_Units = new wxStaticText( m_panelRight, wxID_ANY, _("DPI"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_DPI_Units->Wrap( -1 );
|
||||
fgSizerInfo->Add( m_DPI_Units, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT, 5 );
|
||||
|
||||
|
||||
sbSizerInfo->Add( fgSizerInfo, 0, wxEXPAND|wxBOTTOM, 5 );
|
||||
|
||||
|
||||
brightSizer->Add( sbSizerInfo, 0, wxEXPAND|wxALL, 5 );
|
||||
brightSizer->Add( sbSizerInfo, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
m_buttonLoad = new wxButton( m_panelRight, wxID_ANY, _("Load Bitmap"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
brightSizer->Add( m_buttonLoad, 0, wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
||||
@@ -129,18 +98,18 @@ BM2CMP_FRAME_BASE::BM2CMP_FRAME_BASE( wxWindow* parent, wxWindowID id, const wxS
|
||||
wxString m_radioBoxFormatChoices[] = { _("Eeschema"), _("Pcbnew old fmt (.emp)"), _("Pcbnew kicad_mod"), _("Postscript"), _("Logo for title block") };
|
||||
int m_radioBoxFormatNChoices = sizeof( m_radioBoxFormatChoices ) / sizeof( wxString );
|
||||
m_radioBoxFormat = new wxRadioBox( m_panelRight, wxID_ANY, _("Format"), wxDefaultPosition, wxDefaultSize, m_radioBoxFormatNChoices, m_radioBoxFormatChoices, 1, wxRA_SPECIFY_COLS );
|
||||
m_radioBoxFormat->SetSelection( 2 );
|
||||
brightSizer->Add( m_radioBoxFormat, 0, wxEXPAND|wxALL, 5 );
|
||||
m_radioBoxFormat->SetSelection( 4 );
|
||||
brightSizer->Add( m_radioBoxFormat, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
wxString m_rbOptionsChoices[] = { _("Normal"), _("Negative") };
|
||||
int m_rbOptionsNChoices = sizeof( m_rbOptionsChoices ) / sizeof( wxString );
|
||||
m_rbOptions = new wxRadioBox( m_panelRight, wxID_ANY, _("Options"), wxDefaultPosition, wxDefaultSize, m_rbOptionsNChoices, m_rbOptionsChoices, 1, wxRA_SPECIFY_COLS );
|
||||
m_rbOptions->SetSelection( 0 );
|
||||
brightSizer->Add( m_rbOptions, 0, wxEXPAND|wxALL, 5 );
|
||||
brightSizer->Add( m_rbOptions, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
m_ThresholdText = new wxStaticText( m_panelRight, wxID_ANY, _("Threshold Value:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_ThresholdText->Wrap( -1 );
|
||||
brightSizer->Add( m_ThresholdText, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
|
||||
brightSizer->Add( m_ThresholdText, 0, wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
m_sliderThreshold = new wxSlider( m_panelRight, wxID_ANY, 50, 0, 100, wxDefaultPosition, wxDefaultSize, wxSL_HORIZONTAL|wxSL_LABELS );
|
||||
m_sliderThreshold->SetToolTip( _("Adjust the level to convert the greyscale picture to a black and white picture.") );
|
||||
@@ -162,10 +131,6 @@ BM2CMP_FRAME_BASE::BM2CMP_FRAME_BASE( wxWindow* parent, wxWindowID id, const wxS
|
||||
m_InitialPicturePanel->Connect( wxEVT_PAINT, wxPaintEventHandler( BM2CMP_FRAME_BASE::OnPaint ), NULL, this );
|
||||
m_GreyscalePicturePanel->Connect( wxEVT_PAINT, wxPaintEventHandler( BM2CMP_FRAME_BASE::OnPaint ), NULL, this );
|
||||
m_BNPicturePanel->Connect( wxEVT_PAINT, wxPaintEventHandler( BM2CMP_FRAME_BASE::OnPaint ), NULL, this );
|
||||
m_DPIValueX->Connect( wxEVT_LEAVE_WINDOW, wxMouseEventHandler( BM2CMP_FRAME_BASE::UpdatePPITextValueX ), NULL, this );
|
||||
m_DPIValueX->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnResolutionChange ), NULL, this );
|
||||
m_DPIValueY->Connect( wxEVT_LEAVE_WINDOW, wxMouseEventHandler( BM2CMP_FRAME_BASE::UpdatePPITextValueY ), NULL, this );
|
||||
m_DPIValueY->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnResolutionChange ), NULL, this );
|
||||
m_buttonLoad->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnLoadFile ), NULL, this );
|
||||
m_buttonExport->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnExport ), NULL, this );
|
||||
m_rbOptions->Connect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnOptionsSelection ), NULL, this );
|
||||
@@ -178,10 +143,6 @@ BM2CMP_FRAME_BASE::~BM2CMP_FRAME_BASE()
|
||||
m_InitialPicturePanel->Disconnect( wxEVT_PAINT, wxPaintEventHandler( BM2CMP_FRAME_BASE::OnPaint ), NULL, this );
|
||||
m_GreyscalePicturePanel->Disconnect( wxEVT_PAINT, wxPaintEventHandler( BM2CMP_FRAME_BASE::OnPaint ), NULL, this );
|
||||
m_BNPicturePanel->Disconnect( wxEVT_PAINT, wxPaintEventHandler( BM2CMP_FRAME_BASE::OnPaint ), NULL, this );
|
||||
m_DPIValueX->Disconnect( wxEVT_LEAVE_WINDOW, wxMouseEventHandler( BM2CMP_FRAME_BASE::UpdatePPITextValueX ), NULL, this );
|
||||
m_DPIValueX->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnResolutionChange ), NULL, this );
|
||||
m_DPIValueY->Disconnect( wxEVT_LEAVE_WINDOW, wxMouseEventHandler( BM2CMP_FRAME_BASE::UpdatePPITextValueY ), NULL, this );
|
||||
m_DPIValueY->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnResolutionChange ), NULL, this );
|
||||
m_buttonLoad->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnLoadFile ), NULL, this );
|
||||
m_buttonExport->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnExport ), NULL, this );
|
||||
m_rbOptions->Disconnect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnOptionsSelection ), NULL, this );
|
||||
|
||||
@@ -20,10 +20,8 @@
|
||||
<property name="path">.</property>
|
||||
<property name="precompiled_header"></property>
|
||||
<property name="relative_path">1</property>
|
||||
<property name="skip_lua_events">1</property>
|
||||
<property name="skip_php_events">1</property>
|
||||
<property name="skip_python_events">1</property>
|
||||
<property name="ui_table">UI</property>
|
||||
<property name="use_enum">0</property>
|
||||
<property name="use_microsoft_bom">0</property>
|
||||
<object class="Frame" expanded="1">
|
||||
@@ -46,7 +44,7 @@
|
||||
<property name="pos"></property>
|
||||
<property name="size">527,470</property>
|
||||
<property name="style">wxDEFAULT_FRAME_STYLE|wxRESIZE_BORDER</property>
|
||||
<property name="subclass">KIWAY_PLAYER; kiway_player.h</property>
|
||||
<property name="subclass"></property>
|
||||
<property name="title">Bitmap to Component Converter</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
@@ -508,7 +506,7 @@
|
||||
<property name="permission">none</property>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxEXPAND|wxALL</property>
|
||||
<property name="flag">wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxStaticBoxSizer" expanded="1">
|
||||
<property name="id">wxID_ANY</property>
|
||||
@@ -523,16 +521,16 @@
|
||||
<property name="flag">wxEXPAND|wxBOTTOM</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxFlexGridSizer" expanded="1">
|
||||
<property name="cols">4</property>
|
||||
<property name="cols">3</property>
|
||||
<property name="flexible_direction">wxBOTH</property>
|
||||
<property name="growablecols">1,2</property>
|
||||
<property name="growablecols"></property>
|
||||
<property name="growablerows"></property>
|
||||
<property name="hgap">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="name">fgSizerInfo</property>
|
||||
<property name="non_flexible_grow_mode">wxFLEX_GROWMODE_SPECIFIED</property>
|
||||
<property name="permission">none</property>
|
||||
<property name="rows">0</property>
|
||||
<property name="rows">3</property>
|
||||
<property name="vgap">0</property>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
@@ -566,7 +564,7 @@
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="label">Size:</property>
|
||||
<property name="label">Size X:</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
@@ -574,7 +572,7 @@
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_staticTextSize</property>
|
||||
<property name="name">m_staticTextSizeX</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
@@ -619,7 +617,7 @@
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT</property>
|
||||
<property name="flag">wxALL|wxALIGN_CENTER_VERTICAL</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxStaticText" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
@@ -702,7 +700,173 @@
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT</property>
|
||||
<property name="flag">wxALL|wxALIGN_CENTER_VERTICAL</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxStaticText" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer"></property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position"></property>
|
||||
<property name="aui_row"></property>
|
||||
<property name="best_size"></property>
|
||||
<property name="bg"></property>
|
||||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="close_button">1</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="default_pane">0</property>
|
||||
<property name="dock">Dock</property>
|
||||
<property name="dock_fixed">0</property>
|
||||
<property name="docking">Left</property>
|
||||
<property name="enabled">1</property>
|
||||
<property name="fg"></property>
|
||||
<property name="floatable">1</property>
|
||||
<property name="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="label">pixels</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_SizeXunits</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
<property name="permission">protected</property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style"></property>
|
||||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
<property name="wrap">-1</property>
|
||||
<event name="OnChar"></event>
|
||||
<event name="OnEnterWindow"></event>
|
||||
<event name="OnEraseBackground"></event>
|
||||
<event name="OnKeyDown"></event>
|
||||
<event name="OnKeyUp"></event>
|
||||
<event name="OnKillFocus"></event>
|
||||
<event name="OnLeaveWindow"></event>
|
||||
<event name="OnLeftDClick"></event>
|
||||
<event name="OnLeftDown"></event>
|
||||
<event name="OnLeftUp"></event>
|
||||
<event name="OnMiddleDClick"></event>
|
||||
<event name="OnMiddleDown"></event>
|
||||
<event name="OnMiddleUp"></event>
|
||||
<event name="OnMotion"></event>
|
||||
<event name="OnMouseEvents"></event>
|
||||
<event name="OnMouseWheel"></event>
|
||||
<event name="OnPaint"></event>
|
||||
<event name="OnRightDClick"></event>
|
||||
<event name="OnRightDown"></event>
|
||||
<event name="OnRightUp"></event>
|
||||
<event name="OnSetFocus"></event>
|
||||
<event name="OnSize"></event>
|
||||
<event name="OnUpdateUI"></event>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALIGN_RIGHT|wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxStaticText" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer"></property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position"></property>
|
||||
<property name="aui_row"></property>
|
||||
<property name="best_size"></property>
|
||||
<property name="bg"></property>
|
||||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="close_button">1</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="default_pane">0</property>
|
||||
<property name="dock">Dock</property>
|
||||
<property name="dock_fixed">0</property>
|
||||
<property name="docking">Left</property>
|
||||
<property name="enabled">1</property>
|
||||
<property name="fg"></property>
|
||||
<property name="floatable">1</property>
|
||||
<property name="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="label">Size Y:</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_staticTextSizeY</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
<property name="permission">protected</property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style"></property>
|
||||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
<property name="wrap">-1</property>
|
||||
<event name="OnChar"></event>
|
||||
<event name="OnEnterWindow"></event>
|
||||
<event name="OnEraseBackground"></event>
|
||||
<event name="OnKeyDown"></event>
|
||||
<event name="OnKeyUp"></event>
|
||||
<event name="OnKillFocus"></event>
|
||||
<event name="OnLeaveWindow"></event>
|
||||
<event name="OnLeftDClick"></event>
|
||||
<event name="OnLeftDown"></event>
|
||||
<event name="OnLeftUp"></event>
|
||||
<event name="OnMiddleDClick"></event>
|
||||
<event name="OnMiddleDown"></event>
|
||||
<event name="OnMiddleUp"></event>
|
||||
<event name="OnMotion"></event>
|
||||
<event name="OnMouseEvents"></event>
|
||||
<event name="OnMouseWheel"></event>
|
||||
<event name="OnPaint"></event>
|
||||
<event name="OnRightDClick"></event>
|
||||
<event name="OnRightDown"></event>
|
||||
<event name="OnRightUp"></event>
|
||||
<event name="OnSetFocus"></event>
|
||||
<event name="OnSize"></event>
|
||||
<event name="OnUpdateUI"></event>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxStaticText" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
@@ -785,7 +949,7 @@
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT</property>
|
||||
<property name="flag">wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxStaticText" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
@@ -823,339 +987,7 @@
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_SizePixUnits</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
<property name="permission">protected</property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style"></property>
|
||||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
<property name="wrap">-1</property>
|
||||
<event name="OnChar"></event>
|
||||
<event name="OnEnterWindow"></event>
|
||||
<event name="OnEraseBackground"></event>
|
||||
<event name="OnKeyDown"></event>
|
||||
<event name="OnKeyUp"></event>
|
||||
<event name="OnKillFocus"></event>
|
||||
<event name="OnLeaveWindow"></event>
|
||||
<event name="OnLeftDClick"></event>
|
||||
<event name="OnLeftDown"></event>
|
||||
<event name="OnLeftUp"></event>
|
||||
<event name="OnMiddleDClick"></event>
|
||||
<event name="OnMiddleDown"></event>
|
||||
<event name="OnMiddleUp"></event>
|
||||
<event name="OnMotion"></event>
|
||||
<event name="OnMouseEvents"></event>
|
||||
<event name="OnMouseWheel"></event>
|
||||
<event name="OnPaint"></event>
|
||||
<event name="OnRightDClick"></event>
|
||||
<event name="OnRightDown"></event>
|
||||
<event name="OnRightUp"></event>
|
||||
<event name="OnSetFocus"></event>
|
||||
<event name="OnSize"></event>
|
||||
<event name="OnUpdateUI"></event>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_RIGHT</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxStaticText" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer"></property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position"></property>
|
||||
<property name="aui_row"></property>
|
||||
<property name="best_size"></property>
|
||||
<property name="bg"></property>
|
||||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="close_button">1</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="default_pane">0</property>
|
||||
<property name="dock">Dock</property>
|
||||
<property name="dock_fixed">0</property>
|
||||
<property name="docking">Left</property>
|
||||
<property name="enabled">1</property>
|
||||
<property name="fg"></property>
|
||||
<property name="floatable">1</property>
|
||||
<property name="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="label">Size:</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_staticTextSize1</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
<property name="permission">protected</property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style"></property>
|
||||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
<property name="wrap">-1</property>
|
||||
<event name="OnChar"></event>
|
||||
<event name="OnEnterWindow"></event>
|
||||
<event name="OnEraseBackground"></event>
|
||||
<event name="OnKeyDown"></event>
|
||||
<event name="OnKeyUp"></event>
|
||||
<event name="OnKillFocus"></event>
|
||||
<event name="OnLeaveWindow"></event>
|
||||
<event name="OnLeftDClick"></event>
|
||||
<event name="OnLeftDown"></event>
|
||||
<event name="OnLeftUp"></event>
|
||||
<event name="OnMiddleDClick"></event>
|
||||
<event name="OnMiddleDown"></event>
|
||||
<event name="OnMiddleUp"></event>
|
||||
<event name="OnMotion"></event>
|
||||
<event name="OnMouseEvents"></event>
|
||||
<event name="OnMouseWheel"></event>
|
||||
<event name="OnPaint"></event>
|
||||
<event name="OnRightDClick"></event>
|
||||
<event name="OnRightDown"></event>
|
||||
<event name="OnRightUp"></event>
|
||||
<event name="OnSetFocus"></event>
|
||||
<event name="OnSize"></event>
|
||||
<event name="OnUpdateUI"></event>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxBOTTOM|wxRIGHT</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxStaticText" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer"></property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position"></property>
|
||||
<property name="aui_row"></property>
|
||||
<property name="best_size"></property>
|
||||
<property name="bg"></property>
|
||||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="close_button">1</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="default_pane">0</property>
|
||||
<property name="dock">Dock</property>
|
||||
<property name="dock_fixed">0</property>
|
||||
<property name="docking">Left</property>
|
||||
<property name="enabled">1</property>
|
||||
<property name="fg"></property>
|
||||
<property name="floatable">1</property>
|
||||
<property name="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="label">0000</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_SizeXValue_mm</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
<property name="permission">protected</property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style"></property>
|
||||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
<property name="wrap">-1</property>
|
||||
<event name="OnChar"></event>
|
||||
<event name="OnEnterWindow"></event>
|
||||
<event name="OnEraseBackground"></event>
|
||||
<event name="OnKeyDown"></event>
|
||||
<event name="OnKeyUp"></event>
|
||||
<event name="OnKillFocus"></event>
|
||||
<event name="OnLeaveWindow"></event>
|
||||
<event name="OnLeftDClick"></event>
|
||||
<event name="OnLeftDown"></event>
|
||||
<event name="OnLeftUp"></event>
|
||||
<event name="OnMiddleDClick"></event>
|
||||
<event name="OnMiddleDown"></event>
|
||||
<event name="OnMiddleUp"></event>
|
||||
<event name="OnMotion"></event>
|
||||
<event name="OnMouseEvents"></event>
|
||||
<event name="OnMouseWheel"></event>
|
||||
<event name="OnPaint"></event>
|
||||
<event name="OnRightDClick"></event>
|
||||
<event name="OnRightDown"></event>
|
||||
<event name="OnRightUp"></event>
|
||||
<event name="OnSetFocus"></event>
|
||||
<event name="OnSize"></event>
|
||||
<event name="OnUpdateUI"></event>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxBOTTOM|wxRIGHT</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxStaticText" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer"></property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position"></property>
|
||||
<property name="aui_row"></property>
|
||||
<property name="best_size"></property>
|
||||
<property name="bg"></property>
|
||||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="close_button">1</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="default_pane">0</property>
|
||||
<property name="dock">Dock</property>
|
||||
<property name="dock_fixed">0</property>
|
||||
<property name="docking">Left</property>
|
||||
<property name="enabled">1</property>
|
||||
<property name="fg"></property>
|
||||
<property name="floatable">1</property>
|
||||
<property name="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="label">0000</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_SizeYValue_mm</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
<property name="permission">protected</property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style"></property>
|
||||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
<property name="wrap">-1</property>
|
||||
<event name="OnChar"></event>
|
||||
<event name="OnEnterWindow"></event>
|
||||
<event name="OnEraseBackground"></event>
|
||||
<event name="OnKeyDown"></event>
|
||||
<event name="OnKeyUp"></event>
|
||||
<event name="OnKillFocus"></event>
|
||||
<event name="OnLeaveWindow"></event>
|
||||
<event name="OnLeftDClick"></event>
|
||||
<event name="OnLeftDown"></event>
|
||||
<event name="OnLeftUp"></event>
|
||||
<event name="OnMiddleDClick"></event>
|
||||
<event name="OnMiddleDown"></event>
|
||||
<event name="OnMiddleUp"></event>
|
||||
<event name="OnMotion"></event>
|
||||
<event name="OnMouseEvents"></event>
|
||||
<event name="OnMouseWheel"></event>
|
||||
<event name="OnPaint"></event>
|
||||
<event name="OnRightDClick"></event>
|
||||
<event name="OnRightDown"></event>
|
||||
<event name="OnRightUp"></event>
|
||||
<event name="OnSetFocus"></event>
|
||||
<event name="OnSize"></event>
|
||||
<event name="OnUpdateUI"></event>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxBOTTOM|wxRIGHT</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxStaticText" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer"></property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position"></property>
|
||||
<property name="aui_row"></property>
|
||||
<property name="best_size"></property>
|
||||
<property name="bg"></property>
|
||||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="close_button">1</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="default_pane">0</property>
|
||||
<property name="dock">Dock</property>
|
||||
<property name="dock_fixed">0</property>
|
||||
<property name="docking">Left</property>
|
||||
<property name="enabled">1</property>
|
||||
<property name="fg"></property>
|
||||
<property name="floatable">1</property>
|
||||
<property name="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="label">mm</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_Size_mmxUnits</property>
|
||||
<property name="name">m_SizeYunits</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
@@ -1283,7 +1115,7 @@
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT</property>
|
||||
<property name="flag">wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxStaticText" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
@@ -1447,364 +1279,6 @@
|
||||
<event name="OnUpdateUI"></event>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxEXPAND</property>
|
||||
<property name="proportion">1</property>
|
||||
<object class="spacer" expanded="1">
|
||||
<property name="height">0</property>
|
||||
<property name="permission">protected</property>
|
||||
<property name="width">0</property>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALIGN_RIGHT|wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxStaticText" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer"></property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position"></property>
|
||||
<property name="aui_row"></property>
|
||||
<property name="best_size"></property>
|
||||
<property name="bg"></property>
|
||||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="close_button">1</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="default_pane">0</property>
|
||||
<property name="dock">Dock</property>
|
||||
<property name="dock_fixed">0</property>
|
||||
<property name="docking">Left</property>
|
||||
<property name="enabled">1</property>
|
||||
<property name="fg"></property>
|
||||
<property name="floatable">1</property>
|
||||
<property name="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="label">Resolution:</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_staticTextBPI</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
<property name="permission">protected</property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style"></property>
|
||||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
<property name="wrap">-1</property>
|
||||
<event name="OnChar"></event>
|
||||
<event name="OnEnterWindow"></event>
|
||||
<event name="OnEraseBackground"></event>
|
||||
<event name="OnKeyDown"></event>
|
||||
<event name="OnKeyUp"></event>
|
||||
<event name="OnKillFocus"></event>
|
||||
<event name="OnLeaveWindow"></event>
|
||||
<event name="OnLeftDClick"></event>
|
||||
<event name="OnLeftDown"></event>
|
||||
<event name="OnLeftUp"></event>
|
||||
<event name="OnMiddleDClick"></event>
|
||||
<event name="OnMiddleDown"></event>
|
||||
<event name="OnMiddleUp"></event>
|
||||
<event name="OnMotion"></event>
|
||||
<event name="OnMouseEvents"></event>
|
||||
<event name="OnMouseWheel"></event>
|
||||
<event name="OnPaint"></event>
|
||||
<event name="OnRightDClick"></event>
|
||||
<event name="OnRightDown"></event>
|
||||
<event name="OnRightUp"></event>
|
||||
<event name="OnSetFocus"></event>
|
||||
<event name="OnSize"></event>
|
||||
<event name="OnUpdateUI"></event>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxBOTTOM|wxRIGHT</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxTextCtrl" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer"></property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position"></property>
|
||||
<property name="aui_row"></property>
|
||||
<property name="best_size"></property>
|
||||
<property name="bg"></property>
|
||||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="close_button">1</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="default_pane">0</property>
|
||||
<property name="dock">Dock</property>
|
||||
<property name="dock_fixed">0</property>
|
||||
<property name="docking">Left</property>
|
||||
<property name="enabled">1</property>
|
||||
<property name="fg"></property>
|
||||
<property name="floatable">1</property>
|
||||
<property name="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="maxlength"></property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size">40,-1</property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_DPIValueX</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
<property name="permission">protected</property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style"></property>
|
||||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="validator_data_type"></property>
|
||||
<property name="validator_style">wxFILTER_NONE</property>
|
||||
<property name="validator_type">wxDefaultValidator</property>
|
||||
<property name="validator_variable"></property>
|
||||
<property name="value">300</property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
<event name="OnChar"></event>
|
||||
<event name="OnEnterWindow"></event>
|
||||
<event name="OnEraseBackground"></event>
|
||||
<event name="OnKeyDown"></event>
|
||||
<event name="OnKeyUp"></event>
|
||||
<event name="OnKillFocus"></event>
|
||||
<event name="OnLeaveWindow">UpdatePPITextValueX</event>
|
||||
<event name="OnLeftDClick"></event>
|
||||
<event name="OnLeftDown"></event>
|
||||
<event name="OnLeftUp"></event>
|
||||
<event name="OnMiddleDClick"></event>
|
||||
<event name="OnMiddleDown"></event>
|
||||
<event name="OnMiddleUp"></event>
|
||||
<event name="OnMotion"></event>
|
||||
<event name="OnMouseEvents"></event>
|
||||
<event name="OnMouseWheel"></event>
|
||||
<event name="OnPaint"></event>
|
||||
<event name="OnRightDClick"></event>
|
||||
<event name="OnRightDown"></event>
|
||||
<event name="OnRightUp"></event>
|
||||
<event name="OnSetFocus"></event>
|
||||
<event name="OnSize"></event>
|
||||
<event name="OnText">OnResolutionChange</event>
|
||||
<event name="OnTextEnter"></event>
|
||||
<event name="OnTextMaxLen"></event>
|
||||
<event name="OnTextURL"></event>
|
||||
<event name="OnUpdateUI"></event>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxTextCtrl" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer"></property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position"></property>
|
||||
<property name="aui_row"></property>
|
||||
<property name="best_size"></property>
|
||||
<property name="bg"></property>
|
||||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="close_button">1</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="default_pane">0</property>
|
||||
<property name="dock">Dock</property>
|
||||
<property name="dock_fixed">0</property>
|
||||
<property name="docking">Left</property>
|
||||
<property name="enabled">1</property>
|
||||
<property name="fg"></property>
|
||||
<property name="floatable">1</property>
|
||||
<property name="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="maxlength"></property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size">40,-1</property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_DPIValueY</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
<property name="permission">protected</property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style"></property>
|
||||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="validator_data_type"></property>
|
||||
<property name="validator_style">wxFILTER_NONE</property>
|
||||
<property name="validator_type">wxDefaultValidator</property>
|
||||
<property name="validator_variable"></property>
|
||||
<property name="value">300</property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
<event name="OnChar"></event>
|
||||
<event name="OnEnterWindow"></event>
|
||||
<event name="OnEraseBackground"></event>
|
||||
<event name="OnKeyDown"></event>
|
||||
<event name="OnKeyUp"></event>
|
||||
<event name="OnKillFocus"></event>
|
||||
<event name="OnLeaveWindow">UpdatePPITextValueY</event>
|
||||
<event name="OnLeftDClick"></event>
|
||||
<event name="OnLeftDown"></event>
|
||||
<event name="OnLeftUp"></event>
|
||||
<event name="OnMiddleDClick"></event>
|
||||
<event name="OnMiddleDown"></event>
|
||||
<event name="OnMiddleUp"></event>
|
||||
<event name="OnMotion"></event>
|
||||
<event name="OnMouseEvents"></event>
|
||||
<event name="OnMouseWheel"></event>
|
||||
<event name="OnPaint"></event>
|
||||
<event name="OnRightDClick"></event>
|
||||
<event name="OnRightDown"></event>
|
||||
<event name="OnRightUp"></event>
|
||||
<event name="OnSetFocus"></event>
|
||||
<event name="OnSize"></event>
|
||||
<event name="OnText">OnResolutionChange</event>
|
||||
<event name="OnTextEnter"></event>
|
||||
<event name="OnTextMaxLen"></event>
|
||||
<event name="OnTextURL"></event>
|
||||
<event name="OnUpdateUI"></event>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxStaticText" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer"></property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position"></property>
|
||||
<property name="aui_row"></property>
|
||||
<property name="best_size"></property>
|
||||
<property name="bg"></property>
|
||||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="close_button">1</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="default_pane">0</property>
|
||||
<property name="dock">Dock</property>
|
||||
<property name="dock_fixed">0</property>
|
||||
<property name="docking">Left</property>
|
||||
<property name="enabled">1</property>
|
||||
<property name="fg"></property>
|
||||
<property name="floatable">1</property>
|
||||
<property name="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="label">DPI</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_DPI_Units</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
<property name="permission">protected</property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style"></property>
|
||||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
<property name="wrap">-1</property>
|
||||
<event name="OnChar"></event>
|
||||
<event name="OnEnterWindow"></event>
|
||||
<event name="OnEraseBackground"></event>
|
||||
<event name="OnKeyDown"></event>
|
||||
<event name="OnKeyUp"></event>
|
||||
<event name="OnKillFocus"></event>
|
||||
<event name="OnLeaveWindow"></event>
|
||||
<event name="OnLeftDClick"></event>
|
||||
<event name="OnLeftDown"></event>
|
||||
<event name="OnLeftUp"></event>
|
||||
<event name="OnMiddleDClick"></event>
|
||||
<event name="OnMiddleDown"></event>
|
||||
<event name="OnMiddleUp"></event>
|
||||
<event name="OnMotion"></event>
|
||||
<event name="OnMouseEvents"></event>
|
||||
<event name="OnMouseWheel"></event>
|
||||
<event name="OnPaint"></event>
|
||||
<event name="OnRightDClick"></event>
|
||||
<event name="OnRightDown"></event>
|
||||
<event name="OnRightUp"></event>
|
||||
<event name="OnSetFocus"></event>
|
||||
<event name="OnSize"></event>
|
||||
<event name="OnUpdateUI"></event>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
@@ -1987,7 +1461,7 @@
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxEXPAND|wxALL</property>
|
||||
<property name="flag">wxBOTTOM|wxRIGHT|wxLEFT</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxRadioBox" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
@@ -2035,7 +1509,7 @@
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="selection">2</property>
|
||||
<property name="selection">4</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style">wxRA_SPECIFY_COLS</property>
|
||||
@@ -2077,7 +1551,7 @@
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxEXPAND|wxALL</property>
|
||||
<property name="flag">wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxRadioBox" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
@@ -2167,7 +1641,7 @@
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
|
||||
<property name="flag">wxRIGHT|wxLEFT</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxStaticText" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// C++ code generated with wxFormBuilder (version Nov 5 2013)
|
||||
// C++ code generated with wxFormBuilder (version Oct 8 2012)
|
||||
// http://www.wxformbuilder.org/
|
||||
//
|
||||
// PLEASE DO "NOT" EDIT THIS FILE!
|
||||
@@ -11,9 +11,6 @@
|
||||
#include <wx/artprov.h>
|
||||
#include <wx/xrc/xmlres.h>
|
||||
#include <wx/intl.h>
|
||||
class KIWAY_PLAYER;
|
||||
|
||||
#include "kiway_player.h"
|
||||
#include <wx/scrolwin.h>
|
||||
#include <wx/gdicmn.h>
|
||||
#include <wx/font.h>
|
||||
@@ -25,7 +22,6 @@ class KIWAY_PLAYER;
|
||||
#include <wx/icon.h>
|
||||
#include <wx/notebook.h>
|
||||
#include <wx/stattext.h>
|
||||
#include <wx/textctrl.h>
|
||||
#include <wx/sizer.h>
|
||||
#include <wx/statbox.h>
|
||||
#include <wx/button.h>
|
||||
@@ -41,7 +37,7 @@ class KIWAY_PLAYER;
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
/// Class BM2CMP_FRAME_BASE
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
class BM2CMP_FRAME_BASE : public KIWAY_PLAYER
|
||||
class BM2CMP_FRAME_BASE : public wxFrame
|
||||
{
|
||||
private:
|
||||
|
||||
@@ -51,21 +47,15 @@ class BM2CMP_FRAME_BASE : public KIWAY_PLAYER
|
||||
wxScrolledWindow* m_GreyscalePicturePanel;
|
||||
wxScrolledWindow* m_BNPicturePanel;
|
||||
wxPanel* m_panelRight;
|
||||
wxStaticText* m_staticTextSize;
|
||||
wxStaticText* m_staticTextSizeX;
|
||||
wxStaticText* m_SizeXValue;
|
||||
wxStaticText* m_SizeXunits;
|
||||
wxStaticText* m_staticTextSizeY;
|
||||
wxStaticText* m_SizeYValue;
|
||||
wxStaticText* m_SizePixUnits;
|
||||
wxStaticText* m_staticTextSize1;
|
||||
wxStaticText* m_SizeXValue_mm;
|
||||
wxStaticText* m_SizeYValue_mm;
|
||||
wxStaticText* m_Size_mmxUnits;
|
||||
wxStaticText* m_SizeYunits;
|
||||
wxStaticText* m_staticTextBPP;
|
||||
wxStaticText* m_BPPValue;
|
||||
wxStaticText* m_BPPunits;
|
||||
wxStaticText* m_staticTextBPI;
|
||||
wxTextCtrl* m_DPIValueX;
|
||||
wxTextCtrl* m_DPIValueY;
|
||||
wxStaticText* m_DPI_Units;
|
||||
wxButton* m_buttonLoad;
|
||||
wxButton* m_buttonExport;
|
||||
wxRadioBox* m_radioBoxFormat;
|
||||
@@ -76,9 +66,6 @@ class BM2CMP_FRAME_BASE : public KIWAY_PLAYER
|
||||
|
||||
// Virtual event handlers, overide them in your derived class
|
||||
virtual void OnPaint( wxPaintEvent& event ) { event.Skip(); }
|
||||
virtual void UpdatePPITextValueX( wxMouseEvent& event ) { event.Skip(); }
|
||||
virtual void OnResolutionChange( wxCommandEvent& event ) { event.Skip(); }
|
||||
virtual void UpdatePPITextValueY( wxMouseEvent& event ) { event.Skip(); }
|
||||
virtual void OnLoadFile( wxCommandEvent& event ) { event.Skip(); }
|
||||
virtual void OnExport( wxCommandEvent& event ) { event.Skip(); }
|
||||
virtual void OnOptionsSelection( wxCommandEvent& event ) { event.Skip(); }
|
||||
|
||||
@@ -138,12 +138,12 @@ BITMAPCONV_INFO::BITMAPCONV_INFO()
|
||||
}
|
||||
|
||||
|
||||
int bitmap2component( potrace_bitmap_t* aPotrace_bitmap, FILE* aOutfile,
|
||||
int aFormat, int aDpi_X, int aDpi_Y )
|
||||
int bitmap2component( potrace_bitmap_t* aPotrace_bitmap, FILE* aOutfile, int aFormat )
|
||||
{
|
||||
potrace_param_t* param;
|
||||
potrace_state_t* st;
|
||||
|
||||
|
||||
// set tracing parameters, starting from defaults
|
||||
param = potrace_param_default();
|
||||
if( !param )
|
||||
@@ -171,8 +171,8 @@ int bitmap2component( potrace_bitmap_t* aPotrace_bitmap, FILE* aOutfile,
|
||||
{
|
||||
case 4:
|
||||
info.m_Format = KICAD_LOGO;
|
||||
info.m_ScaleX = 1e3 * 25.4 / aDpi_X; // the conversion scale from PPI to micro
|
||||
info.m_ScaleY = 1e3 * 25.4 / aDpi_Y; // Y axis is top to bottom
|
||||
info.m_ScaleX = 1e3 * 25.4 / 300; // the conversion scale from PPI to micro
|
||||
info.m_ScaleY = info.m_ScaleX; // Y axis is top to bottom
|
||||
info.CreateOutputFile();
|
||||
break;
|
||||
|
||||
@@ -186,22 +186,22 @@ int bitmap2component( potrace_bitmap_t* aPotrace_bitmap, FILE* aOutfile,
|
||||
|
||||
case 2:
|
||||
info.m_Format = EESCHEMA_FMT;
|
||||
info.m_ScaleX = 1000.0 / aDpi_X; // the conversion scale from PPI to UI
|
||||
info.m_ScaleY = -1000.0 / aDpi_Y; // Y axis is bottom to Top for components in libs
|
||||
info.m_ScaleX = 1000.0 / 300; // the conversion scale from PPI to UI
|
||||
info.m_ScaleY = -info.m_ScaleX; // Y axis is bottom to Top for components in libs
|
||||
info.CreateOutputFile();
|
||||
break;
|
||||
|
||||
case 1:
|
||||
info.m_Format = PCBNEW_KICAD_MOD;
|
||||
info.m_ScaleX = 1e6 * 25.4 / aDpi_X; // the conversion scale from PPI to UI
|
||||
info.m_ScaleY = 1e6 * 25.4 / aDpi_Y; // Y axis is top to bottom in modedit
|
||||
info.m_ScaleX = 1e6 * 25.4 / 300; // the conversion scale from PPI to UI
|
||||
info.m_ScaleY = info.m_ScaleX; // Y axis is top to bottom in modedit
|
||||
info.CreateOutputFile();
|
||||
break;
|
||||
|
||||
case 0:
|
||||
info.m_Format = PCBNEW_LEGACY_EMP;
|
||||
info.m_ScaleX = 10000.0 / aDpi_X; // the conversion scale
|
||||
info.m_ScaleY = 10000.0 / aDpi_Y; // Y axis is top to bottom in modedit
|
||||
info.m_ScaleX = 10000.0 / 300; // the conversion scale
|
||||
info.m_ScaleY = info.m_ScaleX; // Y axis is top to bottom in modedit
|
||||
info.CreateOutputFile();
|
||||
break;
|
||||
|
||||
@@ -355,7 +355,7 @@ void BITMAPCONV_INFO::OuputOnePolygon( KPolygon & aPolygon )
|
||||
|
||||
case PCBNEW_LEGACY_EMP:
|
||||
{
|
||||
LAYER_NUM layer = F_SilkS;
|
||||
LAYER_NUM layer = SILKSCREEN_N_FRONT;
|
||||
int width = 1;
|
||||
fprintf( m_Outfile, "DP %d %d %d %d %d %d %d\n",
|
||||
0, 0, 0, 0,
|
||||
|
||||
@@ -151,6 +151,7 @@ set( BMAPS_MID
|
||||
annotate_down_right
|
||||
annotate_right_down
|
||||
annotate
|
||||
apply
|
||||
auto_associe
|
||||
auto_delete_track
|
||||
auto_track_width
|
||||
@@ -176,7 +177,6 @@ set( BMAPS_MID
|
||||
copyblock
|
||||
copycomponent
|
||||
copy_button
|
||||
copy_library
|
||||
copper_layers_setup
|
||||
cursor_shape
|
||||
cursor
|
||||
@@ -234,8 +234,6 @@ set( BMAPS_MID
|
||||
ercwarn
|
||||
erc
|
||||
exit
|
||||
export_dsn
|
||||
export_idf
|
||||
export_footprint_names
|
||||
export_module
|
||||
export_options_pad
|
||||
@@ -287,6 +285,7 @@ set( BMAPS_MID
|
||||
import
|
||||
info
|
||||
insert_module_board
|
||||
invert_module
|
||||
invisible_text
|
||||
kicad_icon_small
|
||||
label2glabel
|
||||
@@ -334,8 +333,6 @@ set( BMAPS_MID
|
||||
mirepcb
|
||||
mirror_h
|
||||
mirror_v
|
||||
mirror_footprint_axisX
|
||||
mirror_footprint_axisY
|
||||
mode_module
|
||||
mode_track
|
||||
modratsnest
|
||||
@@ -447,8 +444,6 @@ set( BMAPS_MID
|
||||
post_module
|
||||
preference
|
||||
print_button
|
||||
ps_router
|
||||
py_script
|
||||
ratsnest
|
||||
read_setup
|
||||
redo
|
||||
@@ -460,8 +455,8 @@ set( BMAPS_MID
|
||||
right
|
||||
rotate_field
|
||||
rotate_glabel
|
||||
rotate_module_cw
|
||||
rotate_module_ccw
|
||||
rotate_module_neg
|
||||
rotate_module_pos
|
||||
rotate_pin
|
||||
rotate_ccw
|
||||
rotate_cw
|
||||
|
||||
@@ -8,50 +8,51 @@
|
||||
static const unsigned char png[] = {
|
||||
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
|
||||
0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x08, 0x06, 0x00, 0x00, 0x00, 0x1f, 0xf3, 0xff,
|
||||
0x61, 0x00, 0x00, 0x02, 0x9d, 0x49, 0x44, 0x41, 0x54, 0x38, 0xcb, 0x7d, 0x93, 0x5d, 0x48, 0x54,
|
||||
0x41, 0x14, 0xc7, 0x47, 0x53, 0x12, 0x3f, 0x2a, 0xd3, 0x72, 0x0b, 0x41, 0x7a, 0x08, 0x8b, 0x28,
|
||||
0x0a, 0x29, 0x4b, 0x0b, 0x2a, 0xb7, 0x74, 0xdd, 0x2c, 0x5b, 0x3f, 0xb0, 0x0c, 0xc3, 0xcd, 0x0d,
|
||||
0x8d, 0x90, 0x14, 0x4b, 0xd3, 0x7b, 0xaf, 0xb3, 0xa9, 0x2f, 0x85, 0x58, 0xcb, 0xaa, 0xec, 0xde,
|
||||
0x9d, 0x99, 0xfd, 0x50, 0xcb, 0xac, 0x5e, 0x32, 0x32, 0xec, 0xa1, 0x44, 0xfb, 0xa0, 0xd0, 0x17,
|
||||
0x05, 0x83, 0x4a, 0x4a, 0x29, 0xa3, 0x1e, 0x8c, 0x92, 0x5c, 0x6d, 0x9d, 0xce, 0x6a, 0x6a, 0xea,
|
||||
0xe6, 0xc3, 0xef, 0x65, 0xee, 0x39, 0xff, 0x7b, 0xce, 0x7f, 0xfe, 0x83, 0x38, 0xe7, 0x68, 0x21,
|
||||
0x8c, 0xe1, 0x55, 0x8c, 0x09, 0x09, 0xcc, 0x22, 0x66, 0x30, 0x22, 0xe6, 0x32, 0x26, 0x1d, 0xc2,
|
||||
0x18, 0xfb, 0x78, 0xaa, 0x5d, 0xd4, 0x68, 0xa5, 0x42, 0x19, 0xa5, 0xe2, 0x20, 0xa3, 0xe2, 0xc8,
|
||||
0x3c, 0x98, 0xf8, 0x9e, 0x11, 0xc9, 0x60, 0xb1, 0xe0, 0xd5, 0x1e, 0x05, 0x2c, 0x96, 0xb2, 0x08,
|
||||
0x46, 0x85, 0x1e, 0x2b, 0x34, 0x1b, 0xad, 0xc6, 0xcf, 0x85, 0x8e, 0xd7, 0xa3, 0xb9, 0x8e, 0xb7,
|
||||
0x63, 0x3a, 0xc7, 0x87, 0xf1, 0x62, 0x47, 0xd7, 0x8f, 0x1b, 0x56, 0xf3, 0x30, 0x08, 0x7d, 0x04,
|
||||
0x3a, 0x64, 0x59, 0xd8, 0x30, 0x4f, 0xc0, 0x66, 0xbb, 0x1c, 0x02, 0x1f, 0xda, 0x28, 0x95, 0xfa,
|
||||
0xf2, 0xcc, 0xcf, 0xbe, 0xa7, 0x99, 0x06, 0x5c, 0x9b, 0xc4, 0xfe, 0x49, 0x45, 0x51, 0x1f, 0x0f,
|
||||
0x29, 0xe8, 0xe5, 0x5b, 0xf0, 0x9b, 0x49, 0x4d, 0xfd, 0x3b, 0xd7, 0x79, 0xb9, 0x73, 0x04, 0x6a,
|
||||
0x7a, 0x61, 0x9a, 0xce, 0x06, 0x19, 0x87, 0xcf, 0x0a, 0xc0, 0x41, 0x35, 0xa3, 0xd2, 0x73, 0x9d,
|
||||
0xb1, 0xfd, 0x6b, 0x6c, 0x65, 0x8f, 0xcb, 0xeb, 0xcc, 0x4b, 0x8e, 0xb4, 0x7f, 0xc9, 0x9e, 0xc6,
|
||||
0x5b, 0xfb, 0x82, 0xc7, 0x56, 0x74, 0xbb, 0xb2, 0x0c, 0x4f, 0x60, 0x25, 0xa9, 0x0b, 0x7a, 0x4a,
|
||||
0xa7, 0x04, 0xea, 0xea, 0x4a, 0x82, 0xc1, 0xa8, 0x87, 0xb8, 0xae, 0xbe, 0x7b, 0x3f, 0xee, 0x98,
|
||||
0xf0, 0x3e, 0xdd, 0xc1, 0x51, 0x96, 0x67, 0xbc, 0x80, 0x38, 0xfd, 0xd3, 0xdf, 0x7a, 0x63, 0xed,
|
||||
0x2b, 0x10, 0x68, 0x05, 0xcf, 0x14, 0xc8, 0x46, 0x24, 0x15, 0xec, 0xdd, 0xa2, 0xc1, 0xb7, 0x3f,
|
||||
0x85, 0xe9, 0x1e, 0x71, 0x94, 0xf9, 0xf8, 0x1f, 0xda, 0x17, 0xb1, 0x56, 0xd7, 0xc6, 0xd5, 0x42,
|
||||
0xcb, 0x37, 0x30, 0xba, 0x19, 0x6e, 0x2a, 0x11, 0x11, 0x22, 0x66, 0xc1, 0xfe, 0x24, 0x26, 0xdf,
|
||||
0xe1, 0xf4, 0x39, 0xd1, 0xca, 0x51, 0xc6, 0x83, 0x25, 0xf1, 0x3d, 0x79, 0x9f, 0xc7, 0xe6, 0xdb,
|
||||
0x47, 0xe1, 0xa7, 0x32, 0xf8, 0x71, 0x0c, 0xd9, 0xa8, 0x70, 0x04, 0xc6, 0xa9, 0x89, 0xca, 0x31,
|
||||
0x8e, 0xfa, 0xa6, 0xdf, 0xe1, 0x28, 0xed, 0xde, 0x92, 0x78, 0xa7, 0xdd, 0xe5, 0xdb, 0xb3, 0x0d,
|
||||
0x4e, 0x58, 0xbb, 0x1a, 0x26, 0xd0, 0xb8, 0x0d, 0xdc, 0x07, 0xe3, 0xe8, 0x77, 0x64, 0x56, 0x0d,
|
||||
0xfb, 0xa7, 0x30, 0x8e, 0x34, 0xb7, 0xa6, 0x39, 0xbe, 0x90, 0x9b, 0x53, 0x04, 0x68, 0x08, 0x8f,
|
||||
0x3a, 0x55, 0x31, 0x08, 0xcd, 0xe5, 0x76, 0x82, 0xf7, 0xba, 0xc3, 0xa3, 0x00, 0x91, 0xc2, 0xcc,
|
||||
0x0b, 0x25, 0xf6, 0x70, 0xb5, 0x30, 0x86, 0x8e, 0xda, 0xf8, 0x52, 0xac, 0x53, 0x97, 0x3b, 0x53,
|
||||
0xce, 0x5d, 0x6a, 0xa6, 0x54, 0x28, 0x30, 0x99, 0x8a, 0x57, 0x4e, 0x5d, 0xa3, 0x9d, 0x4a, 0xf1,
|
||||
0x84, 0x08, 0xba, 0x88, 0xb8, 0xb3, 0x5f, 0x82, 0x94, 0xe5, 0x13, 0x48, 0x2d, 0xf3, 0x39, 0xcc,
|
||||
0xb3, 0x04, 0x2a, 0xa5, 0x09, 0xa8, 0x19, 0x32, 0x1a, 0x85, 0x3c, 0x88, 0x77, 0xd2, 0x6c, 0x0e,
|
||||
0xdc, 0xf1, 0x04, 0xc5, 0xd4, 0xaa, 0xab, 0x17, 0xb5, 0x8a, 0xdd, 0x19, 0x03, 0x01, 0xd1, 0x39,
|
||||
0x4e, 0x9f, 0x03, 0x7a, 0x8e, 0xe2, 0x0d, 0xdc, 0xeb, 0x70, 0x0d, 0x5f, 0x76, 0xb0, 0x92, 0x07,
|
||||
0x45, 0x6b, 0x7f, 0xad, 0xd9, 0x95, 0x3e, 0x7c, 0x05, 0x6a, 0x98, 0x45, 0x48, 0x6e, 0x68, 0xc0,
|
||||
0x2b, 0xe6, 0x45, 0xd9, 0x9d, 0x46, 0x10, 0x51, 0x1a, 0x6a, 0x8b, 0x93, 0x76, 0xaa, 0x52, 0xae,
|
||||
0x07, 0x6f, 0x4b, 0xec, 0x5f, 0xbe, 0x31, 0x6e, 0xdc, 0x2f, 0x52, 0xf9, 0x33, 0x70, 0x73, 0xc2,
|
||||
0x50, 0xb4, 0x2a, 0xf5, 0x9a, 0xd9, 0x5c, 0xaa, 0x72, 0x3f, 0xac, 0xc6, 0xc6, 0x92, 0x60, 0x8f,
|
||||
0x8f, 0xc9, 0x64, 0xc2, 0xfe, 0xe0, 0xc7, 0x56, 0x4a, 0xcb, 0x62, 0x66, 0xb0, 0x11, 0x71, 0xcf,
|
||||
0x0c, 0x0e, 0x22, 0x44, 0xda, 0xed, 0x45, 0x01, 0xff, 0x7d, 0x8d, 0x73, 0x42, 0x26, 0x5f, 0x10,
|
||||
0x0b, 0x25, 0x04, 0xaf, 0x97, 0xe5, 0xd2, 0xb0, 0xa6, 0x26, 0x1c, 0x0a, 0x66, 0xfb, 0x79, 0xaa,
|
||||
0xfd, 0x03, 0x46, 0x3c, 0x41, 0xae, 0xe6, 0xa0, 0x09, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45,
|
||||
0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
0x61, 0x00, 0x00, 0x02, 0xb0, 0x49, 0x44, 0x41, 0x54, 0x38, 0xcb, 0x8d, 0x93, 0x5f, 0x48, 0x53,
|
||||
0x51, 0x1c, 0xc7, 0x45, 0xa7, 0x25, 0x61, 0x26, 0xb6, 0xfc, 0x93, 0x88, 0x92, 0xa9, 0x60, 0x11,
|
||||
0xf4, 0x22, 0xfd, 0x7b, 0xe8, 0x21, 0xea, 0x2d, 0xf2, 0x25, 0xa8, 0x27, 0x03, 0x85, 0x88, 0xd0,
|
||||
0xd5, 0x9a, 0x48, 0x77, 0x76, 0x23, 0x14, 0xb7, 0x74, 0x9b, 0xcb, 0x35, 0x77, 0xe7, 0xbd, 0x57,
|
||||
0xaf, 0x05, 0x35, 0x88, 0x56, 0xd6, 0x96, 0x63, 0x81, 0xf3, 0xc6, 0xc0, 0x6a, 0x43, 0x27, 0xcb,
|
||||
0x6d, 0xa0, 0xb8, 0xd9, 0x9d, 0x9b, 0xdb, 0xfc, 0x13, 0xb8, 0xb5, 0x72, 0x3b, 0x9d, 0x2b, 0x53,
|
||||
0xdc, 0x34, 0xea, 0xe1, 0xc3, 0xb9, 0x70, 0xee, 0xf7, 0x7b, 0x7e, 0xbf, 0x73, 0xbe, 0xbf, 0x34,
|
||||
0x00, 0x40, 0xda, 0x76, 0x50, 0x14, 0x4d, 0x57, 0xa9, 0x5a, 0x72, 0xe5, 0xf2, 0xdb, 0x7b, 0x52,
|
||||
0xf7, 0x76, 0x63, 0xeb, 0x83, 0x24, 0xd1, 0x42, 0x92, 0x14, 0x4a, 0x29, 0x02, 0xf1, 0x93, 0x84,
|
||||
0x70, 0x99, 0xc4, 0x85, 0x5e, 0x92, 0x44, 0x9e, 0xa9, 0xd5, 0x48, 0xf9, 0x3f, 0x0d, 0x28, 0x0a,
|
||||
0x3d, 0x04, 0x45, 0x06, 0x63, 0x67, 0xc3, 0x77, 0xa6, 0xfe, 0x6c, 0xd4, 0x7b, 0xad, 0x36, 0xea,
|
||||
0xa9, 0x3f, 0x17, 0x99, 0xe4, 0x5f, 0x59, 0x26, 0x08, 0xa1, 0x19, 0x9a, 0x57, 0x4b, 0x64, 0x5d,
|
||||
0xbc, 0x7e, 0x1c, 0xa3, 0xbb, 0xa5, 0xe2, 0x1b, 0x3b, 0x0c, 0x48, 0x1c, 0x11, 0x8e, 0x35, 0x5d,
|
||||
0x76, 0xcf, 0x9e, 0x3f, 0xf2, 0x2b, 0x50, 0x96, 0x09, 0x36, 0x99, 0x3b, 0x7d, 0x78, 0x7d, 0xf4,
|
||||
0x6e, 0xdd, 0x8c, 0xba, 0xbf, 0xc7, 0x69, 0xff, 0x66, 0x8f, 0x98, 0xc6, 0x46, 0x43, 0xa2, 0xae,
|
||||
0x8e, 0xba, 0x24, 0x03, 0x8d, 0x46, 0x93, 0x31, 0x80, 0x23, 0x83, 0xe6, 0x4b, 0x35, 0xab, 0x73,
|
||||
0xa5, 0x1c, 0x90, 0x0a, 0x7d, 0xe1, 0x58, 0xd8, 0x60, 0xd0, 0x45, 0x7c, 0x3e, 0x1f, 0x90, 0xf7,
|
||||
0x4a, 0xdf, 0x6e, 0x0a, 0x3b, 0x44, 0x8f, 0xea, 0x05, 0x02, 0x41, 0xce, 0xc6, 0xa5, 0xb1, 0xbd,
|
||||
0xeb, 0x4f, 0x95, 0xaf, 0xda, 0x4b, 0x38, 0x20, 0x15, 0x43, 0x6d, 0x59, 0xf8, 0xa3, 0x51, 0x1f,
|
||||
0xf6, 0xfb, 0xfd, 0x40, 0xd9, 0xa7, 0xb0, 0xb2, 0xa2, 0xc7, 0xdd, 0xa2, 0x66, 0xfd, 0x88, 0x2e,
|
||||
0x2c, 0x16, 0xb7, 0x37, 0x6d, 0xb8, 0x11, 0x04, 0x72, 0x13, 0x3f, 0x53, 0xe9, 0xa4, 0x4b, 0xb2,
|
||||
0xe2, 0x9f, 0x8b, 0x33, 0xc0, 0x26, 0xe3, 0xc5, 0x1c, 0x40, 0x9c, 0x2c, 0x0d, 0xbc, 0x78, 0xf9,
|
||||
0x7c, 0x29, 0x18, 0x0c, 0x02, 0xdb, 0x94, 0x2d, 0xa6, 0x1d, 0xd6, 0x7a, 0x69, 0xda, 0xf4, 0xc3,
|
||||
0x62, 0xb1, 0xac, 0x77, 0x76, 0x76, 0x34, 0x6c, 0x18, 0x0c, 0x0d, 0xa1, 0x15, 0xb8, 0xec, 0x4e,
|
||||
0x83, 0xa4, 0xe2, 0xe0, 0xbc, 0xb6, 0x28, 0x0b, 0x18, 0x0a, 0x39, 0x40, 0x5f, 0x98, 0x19, 0x97,
|
||||
0x55, 0x72, 0x19, 0xec, 0xa9, 0xd4, 0xbd, 0x18, 0x58, 0x8c, 0xb1, 0x06, 0x0e, 0x87, 0x03, 0x30,
|
||||
0x0c, 0x03, 0x2c, 0x56, 0xcb, 0x6f, 0x95, 0xba, 0x6f, 0x0a, 0x56, 0xcf, 0xd9, 0xba, 0x0c, 0x8a,
|
||||
0x42, 0xca, 0x65, 0xf7, 0xae, 0x5f, 0x7d, 0x50, 0x5b, 0xd5, 0x83, 0x54, 0x14, 0xbc, 0x41, 0x2a,
|
||||
0x8b, 0xde, 0x63, 0x58, 0xef, 0xd7, 0xf9, 0x79, 0xcf, 0x7a, 0x34, 0x1a, 0x05, 0xb3, 0xb3, 0x33,
|
||||
0x31, 0xf8, 0x0a, 0x93, 0x0a, 0xa5, 0x1c, 0x53, 0x28, 0x9f, 0xdc, 0x6f, 0x6c, 0x6c, 0xcc, 0x4c,
|
||||
0xca, 0x01, 0x0b, 0x1b, 0x1e, 0x82, 0x68, 0xe5, 0x8e, 0x8f, 0x7f, 0x38, 0x81, 0xa9, 0x95, 0xc3,
|
||||
0x2e, 0x97, 0xf3, 0xe7, 0xda, 0xda, 0x1a, 0x58, 0xf0, 0x2d, 0xc4, 0x70, 0x02, 0xa3, 0x57, 0x56,
|
||||
0x56, 0xd8, 0x4c, 0xec, 0x87, 0xec, 0x85, 0x14, 0x40, 0xf2, 0x76, 0x0d, 0x87, 0x1a, 0x57, 0x11,
|
||||
0x56, 0xab, 0x25, 0x1c, 0x0a, 0x85, 0x00, 0xe3, 0x65, 0x62, 0x03, 0x83, 0xb8, 0x19, 0x96, 0x9b,
|
||||
0x95, 0x10, 0x97, 0x42, 0x32, 0x12, 0x06, 0xf9, 0x3b, 0xc4, 0x32, 0xb9, 0xa4, 0x8d, 0xfe, 0x44,
|
||||
0xaf, 0x7a, 0x3c, 0x1e, 0xe0, 0x76, 0xbb, 0xe3, 0x83, 0xd4, 0xc0, 0x17, 0xf8, 0x84, 0xc7, 0xe1,
|
||||
0x5e, 0x0d, 0xa4, 0x2a, 0xf1, 0x1f, 0x77, 0x47, 0x94, 0x59, 0x60, 0xca, 0x6e, 0x19, 0x8c, 0x23,
|
||||
0x4b, 0xd3, 0xd3, 0xd3, 0xc0, 0xe5, 0x72, 0x41, 0x31, 0x61, 0xa5, 0x28, 0x6a, 0x5f, 0xca, 0x21,
|
||||
0x6c, 0xf9, 0x79, 0x90, 0xec, 0x24, 0x03, 0x14, 0x6d, 0xad, 0x7e, 0xad, 0x7d, 0x15, 0x34, 0x9b,
|
||||
0xcd, 0x60, 0x62, 0x72, 0x02, 0x50, 0x43, 0xa4, 0xcd, 0x31, 0xe7, 0x60, 0x7b, 0xce, 0x87, 0x14,
|
||||
0x43, 0x38, 0x89, 0x35, 0x37, 0xb1, 0x1e, 0x48, 0x32, 0x78, 0xd8, 0xde, 0x76, 0x51, 0xa7, 0x7b,
|
||||
0x17, 0x35, 0x99, 0x46, 0xe3, 0xb0, 0x67, 0x2b, 0x9f, 0xcf, 0xdf, 0x7e, 0x72, 0x0e, 0xe4, 0x28,
|
||||
0x24, 0xfd, 0xaf, 0xd3, 0xc8, 0x22, 0x12, 0xb5, 0xb7, 0xc0, 0xa1, 0x91, 0xf0, 0x78, 0xbc, 0xec,
|
||||
0xff, 0x19, 0x65, 0x96, 0x3f, 0xa1, 0x97, 0xae, 0x1c, 0xfc, 0x3f, 0x7e, 0xea, 0x00, 0x00, 0x00,
|
||||
0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
};
|
||||
|
||||
const BITMAP_OPAQUE tree_nosel_xpm[1] = {{ png, sizeof( png ), "tree_nosel_xpm" }};
|
||||
|
||||
@@ -8,49 +8,45 @@
|
||||
static const unsigned char png[] = {
|
||||
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
|
||||
0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x08, 0x06, 0x00, 0x00, 0x00, 0x1f, 0xf3, 0xff,
|
||||
0x61, 0x00, 0x00, 0x02, 0x97, 0x49, 0x44, 0x41, 0x54, 0x38, 0xcb, 0x75, 0x93, 0x4b, 0x4c, 0x13,
|
||||
0x51, 0x14, 0x86, 0xaf, 0x3c, 0x62, 0xa3, 0xf2, 0x7e, 0x23, 0x2d, 0xb4, 0xf2, 0x10, 0x82, 0x41,
|
||||
0xa2, 0x06, 0x25, 0x24, 0x2e, 0x80, 0x28, 0xd4, 0x00, 0x8a, 0xf1, 0x85, 0xb0, 0xd1, 0x44, 0xa3,
|
||||
0x9b, 0x2a, 0x6f, 0x98, 0x19, 0xc7, 0x17, 0x2b, 0xf0, 0x99, 0xa0, 0xed, 0xf4, 0xde, 0x3b, 0x6d,
|
||||
0x91, 0x50, 0x8d, 0x62, 0xb4, 0x44, 0x5d, 0xb8, 0x01, 0xa2, 0x21, 0x24, 0x74, 0xa1, 0x46, 0x70,
|
||||
0x41, 0x82, 0x31, 0x26, 0x9a, 0x14, 0x8d, 0x89, 0xad, 0xf2, 0xe8, 0xf5, 0x0c, 0x2a, 0x84, 0x32,
|
||||
0x2c, 0xbe, 0xc5, 0x64, 0xce, 0xfd, 0xef, 0x7f, 0xfe, 0x7b, 0x0e, 0x62, 0x8c, 0xa1, 0x40, 0x1c,
|
||||
0x98, 0xcf, 0xa3, 0x56, 0xae, 0x59, 0x26, 0x42, 0x07, 0xd0, 0x8d, 0x31, 0x57, 0x6f, 0x36, 0x8b,
|
||||
0x3a, 0xb5, 0xda, 0x65, 0x1f, 0x76, 0x3b, 0x97, 0x2d, 0x13, 0xde, 0x46, 0x09, 0xef, 0x01, 0xa6,
|
||||
0x03, 0xf0, 0x50, 0xcc, 0x3f, 0x73, 0x58, 0xc5, 0x74, 0x55, 0x01, 0x59, 0xe6, 0xb7, 0x41, 0xc1,
|
||||
0x04, 0x91, 0xdb, 0xa6, 0xb8, 0x61, 0xa3, 0xe7, 0xf0, 0x97, 0x84, 0xd9, 0xea, 0xef, 0x91, 0xfe,
|
||||
0x03, 0x3f, 0x22, 0xfc, 0x35, 0x9f, 0xb4, 0x33, 0xdc, 0xab, 0x32, 0x8f, 0xd5, 0xd6, 0x3a, 0x45,
|
||||
0x89, 0xe0, 0xb6, 0xdb, 0xc5, 0xed, 0xcb, 0x04, 0x08, 0x11, 0x0d, 0x94, 0xf2, 0xc3, 0x77, 0x7a,
|
||||
0xcf, 0xbd, 0xdf, 0x3f, 0x19, 0x3f, 0x53, 0xfa, 0x21, 0x7c, 0x7e, 0xeb, 0x48, 0x30, 0xcb, 0x19,
|
||||
0x42, 0x2c, 0x7b, 0x10, 0xb1, 0xfc, 0xd1, 0x60, 0x56, 0x32, 0x11, 0x36, 0x7f, 0x68, 0x5c, 0xe7,
|
||||
0xbb, 0xdb, 0xd3, 0xf0, 0x0e, 0xda, 0x1a, 0x85, 0xb6, 0xb2, 0x16, 0x05, 0x28, 0xe6, 0x2c, 0x92,
|
||||
0xdc, 0xf2, 0xba, 0x72, 0x2c, 0xc5, 0x5b, 0x30, 0xa2, 0xf1, 0x6f, 0x7e, 0x89, 0x98, 0x1a, 0xca,
|
||||
0xbf, 0x7d, 0x63, 0x49, 0x3e, 0x4c, 0xb9, 0x61, 0x70, 0x7b, 0x75, 0x41, 0x40, 0x92, 0xda, 0x12,
|
||||
0x94, 0xde, 0x4c, 0x4f, 0xf6, 0xbe, 0x2d, 0x1c, 0x0c, 0x9f, 0xcb, 0x7a, 0x81, 0xd8, 0x02, 0xcf,
|
||||
0xd5, 0x29, 0x1a, 0x8c, 0x9c, 0x6d, 0x7c, 0x5c, 0xe1, 0x06, 0xc7, 0x2e, 0x49, 0xe2, 0xf4, 0x60,
|
||||
0x5f, 0xa8, 0x24, 0x84, 0x77, 0x96, 0x0c, 0xa4, 0x4e, 0xe7, 0x0c, 0x84, 0xb0, 0x4c, 0x17, 0x5a,
|
||||
0xe2, 0xe9, 0x4a, 0x72, 0x5c, 0x21, 0xac, 0xd8, 0xa5, 0xfd, 0x46, 0x09, 0xd7, 0x47, 0x29, 0x57,
|
||||
0x8e, 0x6c, 0x84, 0x3f, 0x0e, 0xc9, 0x4b, 0xf9, 0x0f, 0xa2, 0xe7, 0x32, 0xfa, 0xd7, 0xb0, 0x8c,
|
||||
0x7e, 0xb4, 0x92, 0x47, 0x4b, 0x64, 0x3e, 0x0c, 0x62, 0x3b, 0x9c, 0x09, 0x3f, 0x95, 0xb6, 0xe1,
|
||||
0xa9, 0xab, 0x20, 0x7d, 0xc1, 0x08, 0x2d, 0x74, 0xe5, 0xe2, 0x78, 0x5f, 0xba, 0x33, 0x88, 0xa5,
|
||||
0xdf, 0x47, 0xea, 0x38, 0xff, 0xd1, 0x17, 0xc4, 0x72, 0xa5, 0x78, 0x1f, 0x38, 0xef, 0x94, 0xb1,
|
||||
0x50, 0x8d, 0x30, 0x6e, 0x2f, 0xa2, 0x58, 0x10, 0xf3, 0x6e, 0x68, 0x3f, 0x1b, 0x68, 0x28, 0xdb,
|
||||
0x74, 0x0f, 0xad, 0x4e, 0x0f, 0x62, 0x06, 0x69, 0x2d, 0x2b, 0xb8, 0x99, 0x31, 0x0e, 0xae, 0x05,
|
||||
0x4a, 0xc5, 0x9d, 0x90, 0x41, 0x6b, 0x1c, 0x38, 0x38, 0x5f, 0x77, 0xcd, 0x68, 0x49, 0xed, 0x88,
|
||||
0xf1, 0x1a, 0x64, 0x28, 0x0a, 0x40, 0xff, 0x1f, 0x8a, 0x98, 0xee, 0x4a, 0xcc, 0xaf, 0xba, 0xae,
|
||||
0x72, 0x09, 0xce, 0x98, 0x30, 0x6e, 0x0a, 0xfb, 0xfb, 0x8c, 0x54, 0x28, 0x85, 0x20, 0x4f, 0xea,
|
||||
0x1b, 0x75, 0x93, 0x1b, 0x2f, 0x86, 0xcf, 0xa4, 0x59, 0x10, 0x4b, 0x93, 0x56, 0x92, 0x7c, 0x21,
|
||||
0xe2, 0x77, 0x56, 0xb3, 0xc1, 0x0d, 0x33, 0x70, 0x42, 0xb6, 0x0a, 0xc6, 0xc5, 0x39, 0xe8, 0xee,
|
||||
0x6e, 0x89, 0x22, 0x84, 0x3b, 0x78, 0xcb, 0x52, 0x5f, 0xa3, 0x3b, 0x93, 0xe6, 0x8e, 0x3e, 0x1b,
|
||||
0xe3, 0x4d, 0xbc, 0xa4, 0xf1, 0xa7, 0x5c, 0x0f, 0x66, 0x29, 0x9d, 0x21, 0x2c, 0xf1, 0xb2, 0x86,
|
||||
0x45, 0x9d, 0x8a, 0xf3, 0x6a, 0x4f, 0xa7, 0xbe, 0xb9, 0x6d, 0x6e, 0x38, 0x26, 0x63, 0xae, 0x42,
|
||||
0xb9, 0x7d, 0xd9, 0x28, 0x5b, 0xad, 0x62, 0x34, 0x04, 0x5a, 0x8c, 0x71, 0x5b, 0x59, 0xb1, 0x69,
|
||||
0x37, 0x9f, 0x54, 0xab, 0x1f, 0xda, 0x70, 0x24, 0xf1, 0x6b, 0xc4, 0xd1, 0xa4, 0x8f, 0x71, 0xb5,
|
||||
0xba, 0xd1, 0xaa, 0xa6, 0x32, 0x13, 0x04, 0xb7, 0x47, 0x71, 0xab, 0x5c, 0xa8, 0xba, 0x4c, 0xb0,
|
||||
0x71, 0xeb, 0x60, 0x40, 0xb6, 0x10, 0xd2, 0x5e, 0x68, 0xc3, 0xfc, 0xae, 0x40, 0x1c, 0x30, 0xbe,
|
||||
0x76, 0x7b, 0xc3, 0xfa, 0x55, 0xb7, 0x71, 0x49, 0xc8, 0x1c, 0x0a, 0x62, 0xb1, 0x18, 0x8b, 0xc9,
|
||||
0xca, 0xa4, 0xf6, 0xf6, 0x8a, 0xb1, 0x90, 0xb8, 0x46, 0xad, 0xf6, 0x0f, 0xc1, 0xb7, 0x26, 0x9c,
|
||||
0x1b, 0xea, 0xf7, 0x51, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
0x61, 0x00, 0x00, 0x02, 0x4a, 0x49, 0x44, 0x41, 0x54, 0x38, 0xcb, 0x63, 0xf8, 0xff, 0xff, 0x3f,
|
||||
0x03, 0x32, 0x9e, 0x37, 0xaf, 0x52, 0x74, 0xee, 0xdc, 0x1a, 0xf5, 0x99, 0x33, 0x1b, 0x44, 0xd0,
|
||||
0xe5, 0xb0, 0x61, 0x38, 0x03, 0xa4, 0x69, 0xc1, 0xbc, 0xba, 0x65, 0x33, 0x56, 0x14, 0xbe, 0x9f,
|
||||
0xb9, 0xac, 0xe8, 0xfd, 0xfc, 0x79, 0xb5, 0xaf, 0x80, 0x78, 0xc3, 0xbc, 0x79, 0x0d, 0x4a, 0x04,
|
||||
0x0d, 0x98, 0x3f, 0xbf, 0x41, 0x01, 0xa8, 0xf9, 0x70, 0xc1, 0x61, 0xfb, 0x57, 0xee, 0x57, 0x84,
|
||||
0x7f, 0xb9, 0x5c, 0x12, 0xfc, 0xed, 0x7d, 0x45, 0xec, 0x67, 0xd2, 0x19, 0xfd, 0x0f, 0xf3, 0xe6,
|
||||
0xd5, 0x1e, 0xeb, 0xe9, 0x6b, 0x2e, 0x5d, 0xb0, 0x68, 0xde, 0xb1, 0xce, 0xce, 0xb6, 0x10, 0xac,
|
||||
0x06, 0x2c, 0x98, 0x57, 0xdb, 0x1c, 0xb1, 0x4f, 0xf7, 0x85, 0xc9, 0x01, 0x8e, 0x3f, 0x1a, 0xbb,
|
||||
0x19, 0xfe, 0xc3, 0xb0, 0xe9, 0x7e, 0xae, 0x3f, 0xb5, 0x4b, 0xd3, 0xdf, 0x9c, 0x3a, 0x7d, 0xe2,
|
||||
0xe7, 0xee, 0x3d, 0xbb, 0x5e, 0x34, 0x37, 0xd7, 0x68, 0x82, 0xd4, 0x37, 0x34, 0x34, 0xf0, 0xc0,
|
||||
0x0d, 0x98, 0x34, 0x29, 0x97, 0x7d, 0xf6, 0xfc, 0xca, 0x25, 0x56, 0x9b, 0x44, 0x3f, 0xa9, 0x6d,
|
||||
0x62, 0xf8, 0x8f, 0x8e, 0x67, 0x6d, 0x9c, 0xf8, 0xe7, 0xed, 0xdb, 0xb7, 0xff, 0x17, 0x2f, 0x59,
|
||||
0x78, 0x0c, 0xac, 0x81, 0x81, 0x81, 0x71, 0xf6, 0xdc, 0x59, 0xa7, 0xa6, 0x4c, 0x9b, 0x38, 0x0d,
|
||||
0xcc, 0x07, 0x9a, 0xc6, 0x32, 0x67, 0x5e, 0x55, 0x9f, 0xfe, 0x02, 0xe1, 0x8f, 0x2a, 0x2b, 0x19,
|
||||
0xfe, 0xa3, 0xe3, 0xfe, 0xa5, 0xed, 0xbf, 0x3f, 0x7c, 0xf8, 0xf0, 0x7f, 0xff, 0xfe, 0x7d, 0xaf,
|
||||
0xa6, 0x4e, 0x9f, 0x3c, 0x7f, 0xf2, 0x94, 0x09, 0xbb, 0x2e, 0x5d, 0xba, 0xf8, 0x73, 0xc1, 0xc2,
|
||||
0x79, 0xc7, 0xe1, 0x5e, 0x00, 0xfa, 0x33, 0xc5, 0xa4, 0x5b, 0xf9, 0xb2, 0xe2, 0x1c, 0x96, 0xbf,
|
||||
0x4a, 0x0b, 0x19, 0xfe, 0xc3, 0xf1, 0x7c, 0xc6, 0xff, 0xe1, 0x5d, 0x7e, 0x2f, 0x6f, 0xdf, 0xbe,
|
||||
0xfd, 0xf7, 0xd1, 0xa3, 0x47, 0xff, 0x5f, 0xbe, 0x7c, 0xf9, 0x1f, 0x44, 0x03, 0x0d, 0xf8, 0xdd,
|
||||
0xdb, 0xdf, 0xdd, 0x8a, 0x12, 0x88, 0x93, 0x67, 0x94, 0x24, 0xca, 0x97, 0x4a, 0xde, 0x93, 0xe9,
|
||||
0xe0, 0xf8, 0x25, 0xdb, 0xc7, 0xf2, 0x5f, 0xb6, 0x8b, 0xfd, 0xa7, 0x56, 0x99, 0xea, 0x8d, 0x35,
|
||||
0xeb, 0x57, 0xbe, 0x7e, 0xf6, 0xec, 0xd9, 0xff, 0x3b, 0x77, 0xee, 0xfc, 0xdf, 0xba, 0x6d, 0xf3,
|
||||
0xd3, 0xb5, 0xeb, 0x56, 0x5f, 0x9f, 0x30, 0xa9, 0xa7, 0x2b, 0x34, 0x34, 0x94, 0x19, 0x25, 0x1a,
|
||||
0xe7, 0xcd, 0xab, 0x96, 0x6d, 0x99, 0x94, 0xe5, 0xeb, 0x55, 0xe8, 0x56, 0xa8, 0x9f, 0xa5, 0x3f,
|
||||
0xd1, 0x28, 0xcb, 0xa8, 0x6f, 0xee, 0x82, 0x99, 0xe7, 0x1f, 0x3f, 0x7e, 0xfc, 0xff, 0xd5, 0xab,
|
||||
0x57, 0xff, 0xb7, 0x6d, 0xdf, 0xfa, 0xb4, 0xa6, 0xb9, 0x46, 0x1d, 0x67, 0x3a, 0x00, 0xe1, 0x99,
|
||||
0x33, 0xd3, 0x58, 0xe7, 0xcc, 0x69, 0x10, 0x5a, 0xb4, 0xa8, 0x41, 0x6c, 0xd2, 0xa4, 0x9e, 0xe6,
|
||||
0xcb, 0x97, 0x2f, 0x7d, 0x03, 0x39, 0xfb, 0xc2, 0xc5, 0xf3, 0x1f, 0xfa, 0x26, 0xf6, 0xa6, 0xe2,
|
||||
0x4d, 0x48, 0xc8, 0xb8, 0xa1, 0xb5, 0x41, 0x67, 0xd7, 0xae, 0x1d, 0xcf, 0x9f, 0x3c, 0x79, 0xf2,
|
||||
0xff, 0xc1, 0x83, 0xfb, 0x7f, 0x66, 0xcf, 0x99, 0xbe, 0x92, 0x60, 0x4a, 0x84, 0xe1, 0xdc, 0xdc,
|
||||
0x5c, 0xf6, 0xc5, 0x8b, 0x17, 0x5c, 0x06, 0xf9, 0x19, 0x64, 0xc0, 0x92, 0x65, 0x8b, 0x2e, 0x02,
|
||||
0x63, 0x8a, 0x8d, 0x68, 0x03, 0xa6, 0x4c, 0x9b, 0xb4, 0xec, 0xc2, 0x85, 0xf3, 0x7f, 0xee, 0xdd,
|
||||
0xbb, 0xf7, 0x7f, 0xcb, 0xd6, 0x4d, 0x8f, 0x1b, 0x1a, 0x2a, 0x14, 0x88, 0xca, 0x0b, 0x20, 0xdc,
|
||||
0xdc, 0xdc, 0xe0, 0xb2, 0x7d, 0xfb, 0xd6, 0x4f, 0x67, 0xcf, 0x9e, 0xfd, 0x7f, 0xe8, 0xf0, 0xa1,
|
||||
0x77, 0x3d, 0xfd, 0x9d, 0x31, 0x44, 0x67, 0x26, 0x10, 0x6e, 0xef, 0x6c, 0x2d, 0xda, 0xb3, 0x77,
|
||||
0xcf, 0x9f, 0xfd, 0x07, 0xf6, 0xfd, 0x9a, 0x3e, 0x73, 0xca, 0x3c, 0x92, 0x72, 0x23, 0x34, 0x8d,
|
||||
0x33, 0xf5, 0xf4, 0x75, 0xd5, 0xf7, 0x4d, 0xe8, 0x2e, 0x22, 0x46, 0x33, 0x08, 0x03, 0x00, 0xa3,
|
||||
0x36, 0xa6, 0x81, 0xc6, 0x70, 0x96, 0x32, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae,
|
||||
0x42, 0x60, 0x82,
|
||||
};
|
||||
|
||||
const BITMAP_OPAQUE tree_sel_xpm[1] = {{ png, sizeof( png ), "tree_sel_xpm" }};
|
||||
|
||||
@@ -8,30 +8,61 @@
|
||||
static const unsigned char png[] = {
|
||||
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
|
||||
0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c,
|
||||
0xce, 0x00, 0x00, 0x01, 0x67, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xbd, 0xd6, 0xbf, 0x4a, 0x03,
|
||||
0x41, 0x10, 0x06, 0xf0, 0x31, 0x0a, 0x9a, 0x46, 0x1f, 0x40, 0x04, 0x6b, 0x9f, 0xc0, 0x22, 0xa4,
|
||||
0x14, 0x2c, 0x6c, 0x2c, 0x94, 0x28, 0x5c, 0x44, 0x2f, 0x85, 0xf1, 0x6f, 0xa9, 0xdd, 0x3d, 0x80,
|
||||
0x85, 0xf8, 0x0e, 0x5a, 0x08, 0x5a, 0xc6, 0x52, 0xb0, 0x30, 0xb7, 0x47, 0xf0, 0x0d, 0x52, 0x04,
|
||||
0x6d, 0xb4, 0x0f, 0x8a, 0x45, 0xce, 0xef, 0xbb, 0x5b, 0xb9, 0x20, 0x9e, 0x18, 0x98, 0xbd, 0x62,
|
||||
0x8e, 0x65, 0x73, 0x3b, 0x3f, 0x66, 0xd9, 0xdb, 0x89, 0xc4, 0x71, 0x2c, 0x45, 0x44, 0xf2, 0x08,
|
||||
0x82, 0x60, 0xc2, 0xdf, 0xf5, 0xf7, 0x76, 0xf6, 0xfd, 0x1e, 0x83, 0x63, 0xce, 0xa9, 0x43, 0x4c,
|
||||
0xbc, 0x71, 0xea, 0xf5, 0x17, 0x6f, 0x96, 0x62, 0x06, 0xc7, 0x9c, 0x53, 0x87, 0x58, 0x05, 0x81,
|
||||
0x85, 0x87, 0x4a, 0x12, 0x1c, 0xd7, 0xb6, 0x0f, 0x3e, 0x44, 0xda, 0x97, 0x22, 0x61, 0x53, 0xe4,
|
||||
0x71, 0xd6, 0x19, 0xb4, 0x5e, 0x3f, 0xc2, 0xaf, 0xe1, 0x77, 0x0c, 0x10, 0x06, 0xf0, 0xa1, 0x48,
|
||||
0x6b, 0x52, 0x6d, 0xeb, 0x6a, 0x27, 0xde, 0xfb, 0xf2, 0x4a, 0x70, 0x81, 0xc4, 0x0d, 0xc4, 0x2d,
|
||||
0x90, 0x7e, 0x86, 0xb6, 0x7b, 0x22, 0xc6, 0xc3, 0xca, 0x92, 0xfa, 0x61, 0xc0, 0xd6, 0x95, 0x01,
|
||||
0xac, 0x22, 0xa2, 0x21, 0x10, 0xe3, 0x68, 0x6e, 0x24, 0xe8, 0xdf, 0x2f, 0x4b, 0x3c, 0x06, 0x60,
|
||||
0x0d, 0x50, 0xd7, 0x82, 0xaf, 0x88, 0x8a, 0x3a, 0x94, 0x81, 0x9d, 0x19, 0x00, 0x2d, 0x8b, 0x7d,
|
||||
0x02, 0xdf, 0x74, 0x02, 0xd9, 0xea, 0x4a, 0x40, 0xce, 0x32, 0x2c, 0xaa, 0x3a, 0x81, 0x32, 0x30,
|
||||
0x3c, 0x4f, 0x31, 0xf3, 0x86, 0xca, 0xe6, 0x1d, 0x42, 0xd7, 0xe3, 0x40, 0xee, 0x6c, 0x65, 0x9d,
|
||||
0xbc, 0xd3, 0xa8, 0xf3, 0xd5, 0x4b, 0x38, 0x8d, 0x78, 0xb1, 0xa7, 0x71, 0xcb, 0x19, 0x94, 0x62,
|
||||
0xa6, 0x6e, 0xab, 0x7a, 0x16, 0xb9, 0x9f, 0x72, 0x08, 0xf1, 0xe8, 0x9b, 0x27, 0x8b, 0x1d, 0x3b,
|
||||
0x83, 0x52, 0x8c, 0x1f, 0x75, 0x02, 0x19, 0xc7, 0x10, 0x6f, 0x90, 0xe4, 0xba, 0x1a, 0xfc, 0xbc,
|
||||
0x88, 0xf5, 0x1b, 0x5c, 0x7a, 0x37, 0xb2, 0xaa, 0xa6, 0x6b, 0xa8, 0x61, 0xa1, 0x2b, 0x67, 0x1d,
|
||||
0x96, 0x6b, 0x78, 0xeb, 0xb3, 0xc5, 0xb0, 0x9f, 0x0d, 0xe7, 0x51, 0xed, 0xb0, 0x5c, 0xc3, 0x16,
|
||||
0xf3, 0x5b, 0x9e, 0xdc, 0xc6, 0xc7, 0xb9, 0x51, 0xa1, 0xbf, 0xf2, 0x14, 0x0b, 0x69, 0x6e, 0x5d,
|
||||
0x5e, 0x1e, 0xf5, 0xc3, 0x90, 0x97, 0x47, 0x8a, 0xfa, 0x03, 0xf9, 0x05, 0xe4, 0xc8, 0xfd, 0xf2,
|
||||
0x75, 0x7b, 0xa3, 0xda, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
0xce, 0x00, 0x00, 0x03, 0x51, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0x63, 0xf8, 0xff, 0xff, 0x3f,
|
||||
0x03, 0x3d, 0x30, 0x98, 0x08, 0x0d, 0x0d, 0x65, 0x36, 0xb3, 0xb1, 0x38, 0x60, 0x6e, 0x6e, 0x7e,
|
||||
0x11, 0x19, 0x83, 0xc4, 0x1c, 0x1c, 0x1c, 0x58, 0xa8, 0x66, 0x91, 0xa7, 0xa7, 0x27, 0xbb, 0x99,
|
||||
0xa5, 0xd9, 0x79, 0x8d, 0x9d, 0x96, 0xb7, 0xd5, 0xb7, 0x59, 0xdc, 0x57, 0xdf, 0x6c, 0xff, 0x44,
|
||||
0x63, 0x83, 0xc7, 0x6b, 0x13, 0x33, 0xef, 0x0f, 0x1a, 0x1a, 0xf7, 0x8f, 0xeb, 0xe8, 0xfc, 0x59,
|
||||
0xa4, 0xab, 0xfb, 0xaf, 0x53, 0x47, 0xe7, 0x5f, 0x89, 0x8e, 0xce, 0xdf, 0x58, 0x5d, 0xdd, 0x3f,
|
||||
0x2e, 0xc6, 0xc6, 0xff, 0x59, 0xc9, 0xb6, 0x48, 0x7d, 0x9d, 0xeb, 0x5b, 0xcd, 0x95, 0x61, 0x3f,
|
||||
0xb5, 0x96, 0xc7, 0xff, 0x07, 0x61, 0x13, 0xb3, 0x98, 0xff, 0xba, 0xba, 0xbf, 0xfe, 0xeb, 0xe8,
|
||||
0xfc, 0xc7, 0xc0, 0xda, 0xda, 0x3f, 0x5f, 0x68, 0x6a, 0x3e, 0xab, 0x30, 0x36, 0x7e, 0xc6, 0xc5,
|
||||
0xc0, 0xc0, 0x40, 0xa2, 0x8f, 0xd6, 0x7a, 0x7d, 0x00, 0x59, 0xa0, 0xb9, 0x32, 0xe2, 0x97, 0xc6,
|
||||
0x1a, 0xaf, 0x0f, 0x46, 0x26, 0xb6, 0xaf, 0xb8, 0xb8, 0xb4, 0xab, 0x79, 0x78, 0x1c, 0xeb, 0x84,
|
||||
0x84, 0xb2, 0xfa, 0x24, 0x24, 0x7a, 0xe6, 0xc9, 0xca, 0x2e, 0x5f, 0xa7, 0xa2, 0x72, 0xe1, 0x8c,
|
||||
0xb6, 0xf6, 0xbf, 0xbf, 0x10, 0x0b, 0xbf, 0xbf, 0x57, 0x57, 0x7f, 0xda, 0xac, 0xaa, 0xfa, 0x8e,
|
||||
0x0f, 0x9f, 0x85, 0x28, 0x16, 0xa9, 0x6d, 0xb4, 0x78, 0xaa, 0xbe, 0xde, 0xe9, 0x8d, 0xda, 0x46,
|
||||
0xf3, 0x27, 0x20, 0x6c, 0x68, 0x62, 0xf8, 0x98, 0x95, 0x95, 0xb5, 0x00, 0xa8, 0x3f, 0x0d, 0x8a,
|
||||
0x33, 0xa1, 0x74, 0x0a, 0x1f, 0x9f, 0x6f, 0xbd, 0x8a, 0xca, 0x99, 0x93, 0x30, 0x0b, 0xb5, 0xb4,
|
||||
0xbe, 0xbe, 0x91, 0x91, 0x59, 0xe4, 0x00, 0x94, 0x63, 0xc4, 0x9b, 0x18, 0xcc, 0xad, 0xcd, 0x0f,
|
||||
0x1b, 0x99, 0x18, 0x3d, 0x02, 0x19, 0x8e, 0x84, 0xef, 0x30, 0x31, 0x31, 0x65, 0x00, 0x35, 0xf3,
|
||||
0x83, 0x0c, 0x00, 0x62, 0x16, 0x20, 0x16, 0x00, 0x62, 0x19, 0x20, 0x36, 0x06, 0x59, 0xc8, 0xc3,
|
||||
0xe3, 0x55, 0xa3, 0xa6, 0x76, 0xef, 0x06, 0xd4, 0x77, 0x5f, 0x24, 0x25, 0x7b, 0x40, 0x0e, 0x61,
|
||||
0xc2, 0x6a, 0x11, 0x08, 0x83, 0x52, 0x17, 0xd0, 0xf5, 0x99, 0x40, 0x9c, 0x05, 0xc3, 0x50, 0x4b,
|
||||
0x40, 0x98, 0x17, 0x45, 0x13, 0x02, 0xb0, 0x02, 0xb1, 0x11, 0x2b, 0xab, 0x6c, 0xb6, 0x86, 0xc6,
|
||||
0xab, 0x27, 0x10, 0x9f, 0x7d, 0xfb, 0xc4, 0xc3, 0xe3, 0x1d, 0x01, 0x14, 0x67, 0xc6, 0x6a, 0x11,
|
||||
0x14, 0x88, 0x03, 0xb1, 0x1a, 0x1a, 0x96, 0xc3, 0x1b, 0xf6, 0x10, 0xc0, 0xc6, 0xcb, 0xeb, 0x9b,
|
||||
0x0c, 0x0c, 0xbe, 0x8f, 0x20, 0xcb, 0xd4, 0xd5, 0x1f, 0xdd, 0x62, 0x61, 0xe1, 0xb5, 0x46, 0x0e,
|
||||
0x46, 0x06, 0x1c, 0x2e, 0x45, 0x01, 0x44, 0x25, 0x5f, 0xa0, 0x65, 0x42, 0x42, 0xf9, 0x75, 0xda,
|
||||
0xda, 0x7f, 0xc1, 0x71, 0x26, 0x25, 0x35, 0x79, 0x0e, 0x34, 0x88, 0x31, 0x2d, 0xa2, 0x38, 0x53,
|
||||
0x32, 0x30, 0xf0, 0x29, 0x2b, 0x9f, 0x3d, 0x0c, 0xf1, 0xd5, 0x93, 0xfb, 0x40, 0x7e, 0x1c, 0x2c,
|
||||
0xbe, 0xa8, 0x6d, 0x11, 0x83, 0x94, 0xd4, 0x74, 0x6b, 0x98, 0xaf, 0x04, 0x05, 0x13, 0x5b, 0x60,
|
||||
0x41, 0x4f, 0xfd, 0x32, 0x0d, 0x18, 0x2f, 0x1a, 0x1a, 0x2f, 0xc0, 0xa9, 0x50, 0x5a, 0x7a, 0xe1,
|
||||
0x4a, 0x20, 0x3f, 0x00, 0x9c, 0x62, 0x69, 0x60, 0x11, 0x83, 0xa6, 0xe6, 0x9b, 0xe5, 0x20, 0x8b,
|
||||
0x14, 0x15, 0x0f, 0xec, 0x07, 0x72, 0xd3, 0x69, 0x62, 0x11, 0x08, 0x6b, 0x6b, 0x7f, 0x2b, 0x07,
|
||||
0x59, 0xa4, 0xaa, 0x7a, 0xed, 0x22, 0xd4, 0x22, 0x6e, 0x9a, 0x58, 0x04, 0x2c, 0x80, 0xeb, 0x40,
|
||||
0x16, 0x29, 0x2b, 0x9f, 0x3b, 0x05, 0xca, 0xd4, 0xa0, 0xa8, 0xa3, 0x91, 0x8f, 0xfe, 0xcd, 0x04,
|
||||
0x59, 0xa4, 0xa0, 0xb0, 0x6f, 0x2f, 0xd4, 0x22, 0x49, 0xb8, 0xa4, 0xa5, 0xa5, 0x25, 0xa7, 0xba,
|
||||
0xba, 0x3a, 0x2f, 0x32, 0x06, 0x16, 0x4d, 0x6c, 0xc4, 0x1a, 0xde, 0xd0, 0xd0, 0xc0, 0x04, 0x2a,
|
||||
0x33, 0x41, 0x58, 0x57, 0xf7, 0xc7, 0x19, 0x50, 0xa9, 0x2f, 0x2b, 0xbb, 0x60, 0x35, 0xb4, 0x6c,
|
||||
0x14, 0x00, 0x2b, 0x32, 0x36, 0x36, 0x16, 0x31, 0xb3, 0x32, 0x3b, 0x65, 0x66, 0x63, 0x7e, 0x1a,
|
||||
0x09, 0x9f, 0x31, 0xb3, 0x35, 0xdf, 0x81, 0xab, 0x90, 0x44, 0xc7, 0x66, 0xf6, 0x16, 0xab, 0x40,
|
||||
0x05, 0xb3, 0x99, 0x85, 0xc3, 0x2d, 0x50, 0xf5, 0x02, 0xc2, 0x86, 0x26, 0x16, 0x4f, 0xb8, 0xb9,
|
||||
0xb9, 0x2b, 0x40, 0x99, 0x19, 0xa2, 0xc8, 0xcc, 0x4c, 0xd1, 0xcc, 0xd5, 0xfc, 0x98, 0xfa, 0x56,
|
||||
0x8b, 0xfb, 0x6a, 0x9b, 0xcd, 0x1f, 0x81, 0xb0, 0xfa, 0x1a, 0xf3, 0x47, 0x86, 0x66, 0x86, 0xf7,
|
||||
0xa0, 0xc9, 0x93, 0x89, 0xa0, 0x45, 0x76, 0xe6, 0x07, 0xb5, 0x56, 0x58, 0xdc, 0xd1, 0x58, 0xef,
|
||||
0xfe, 0x46, 0x73, 0x45, 0xd4, 0x6f, 0xcd, 0x95, 0xe1, 0x3f, 0xf5, 0x9d, 0x0c, 0xef, 0x09, 0x08,
|
||||
0x08, 0xd4, 0x83, 0xca, 0x4a, 0x64, 0x8b, 0x8e, 0xab, 0x6d, 0x82, 0x54, 0x0f, 0x20, 0xac, 0xbe,
|
||||
0x0a, 0x58, 0x4d, 0x98, 0x1a, 0x3e, 0x80, 0x56, 0x0d, 0xac, 0xc4, 0x58, 0xa4, 0xb9, 0xc4, 0xec,
|
||||
0x11, 0x4c, 0xbf, 0xda, 0x46, 0xcb, 0x67, 0x48, 0x16, 0xc9, 0xd0, 0xd0, 0x22, 0xf3, 0x27, 0x50,
|
||||
0x8b, 0x6a, 0x31, 0x2d, 0x5a, 0x0f, 0x54, 0xb0, 0x0e, 0x82, 0xd5, 0x97, 0x52, 0xcd, 0xa2, 0x1a,
|
||||
0xb8, 0x45, 0x36, 0x36, 0x36, 0x82, 0x66, 0x56, 0x16, 0x47, 0xd1, 0x2b, 0x3e, 0x5d, 0x53, 0xfd,
|
||||
0x0b, 0xc4, 0x5a, 0x64, 0xea, 0x60, 0xbe, 0x1c, 0x98, 0xa8, 0x1e, 0x19, 0x19, 0x19, 0x3d, 0x81,
|
||||
0x61, 0xa0, 0x19, 0x0f, 0x80, 0x89, 0xa1, 0x08, 0x6e, 0x11, 0xb4, 0xe8, 0x60, 0x86, 0xe6, 0xe2,
|
||||
0x54, 0x34, 0x9c, 0x8e, 0x5e, 0x89, 0xe1, 0x2a, 0xe3, 0x80, 0x38, 0x1c, 0x9a, 0x9c, 0x91, 0xf5,
|
||||
0x67, 0x80, 0xeb, 0x39, 0xf4, 0x62, 0x1e, 0x88, 0x45, 0xd1, 0x30, 0x1f, 0x09, 0xe5, 0x1c, 0x27,
|
||||
0x16, 0xfd, 0x42, 0x20, 0x09, 0x00, 0x33, 0xa7, 0x77, 0x70, 0xcd, 0x40, 0x9d, 0x52, 0x00, 0x00,
|
||||
0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
};
|
||||
|
||||
const BITMAP_OPAQUE add_arc_xpm[1] = {{ png, sizeof( png ), "add_arc_xpm" }};
|
||||
|
||||
@@ -8,19 +8,34 @@
|
||||
static const unsigned char png[] = {
|
||||
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
|
||||
0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c,
|
||||
0xce, 0x00, 0x00, 0x00, 0xac, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xbd, 0xd6, 0xbb, 0x0d, 0x84,
|
||||
0x40, 0x0c, 0x04, 0xd0, 0x69, 0x82, 0x02, 0x88, 0x68, 0x88, 0xfc, 0x02, 0x3a, 0x25, 0xb2, 0x45,
|
||||
0x39, 0x44, 0x07, 0x81, 0x2f, 0xd8, 0xd5, 0x09, 0xc4, 0x6f, 0x3f, 0x1e, 0x82, 0x89, 0x9f, 0x46,
|
||||
0x13, 0xd8, 0x30, 0x33, 0x30, 0x02, 0x4c, 0x1d, 0xa0, 0x1f, 0x40, 0x5b, 0x33, 0x03, 0x09, 0x91,
|
||||
0x1e, 0x90, 0x05, 0x10, 0x03, 0x64, 0x06, 0xc6, 0x86, 0x85, 0xac, 0x11, 0x89, 0xd1, 0xe1, 0x05,
|
||||
0x44, 0xbe, 0xae, 0x8d, 0x2e, 0x90, 0x15, 0x90, 0xde, 0x6d, 0xa3, 0x27, 0xc4, 0x05, 0x4a, 0x41,
|
||||
0xaa, 0xa1, 0x54, 0xa4, 0x0a, 0xca, 0x41, 0x8a, 0xa1, 0x5c, 0xa4, 0x08, 0x2a, 0x41, 0xb2, 0xa1,
|
||||
0x52, 0x24, 0x0b, 0xaa, 0x41, 0x92, 0xa1, 0x5a, 0x24, 0x09, 0xf2, 0x40, 0x1e, 0x21, 0x2f, 0xe4,
|
||||
0x16, 0xf2, 0x44, 0x2e, 0x21, 0x6f, 0xe4, 0x14, 0x62, 0x20, 0x07, 0x88, 0x85, 0xec, 0x20, 0x26,
|
||||
0xf2, 0x87, 0xd8, 0x48, 0x30, 0x30, 0x36, 0xe1, 0xdc, 0xf2, 0x90, 0x08, 0xe9, 0xc0, 0x46, 0xb6,
|
||||
0x8d, 0xe6, 0x88, 0x2c, 0x0c, 0x64, 0xb3, 0x91, 0xb6, 0xe1, 0xd9, 0x9b, 0x3a, 0xd6, 0x43, 0xf9,
|
||||
0x03, 0x84, 0x61, 0xf2, 0x8b, 0xa0, 0xb8, 0x69, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e,
|
||||
0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
0xce, 0x00, 0x00, 0x01, 0x99, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xdd, 0xd4, 0x3b, 0x4f, 0xc2,
|
||||
0x50, 0x14, 0xc0, 0xf1, 0x8b, 0x6d, 0xaf, 0xb7, 0x0f, 0xa8, 0x0d, 0xa9, 0x14, 0x84, 0xa6, 0x0a,
|
||||
0x58, 0x92, 0x16, 0x34, 0x42, 0x48, 0xf0, 0x45, 0x51, 0x13, 0x1d, 0xdc, 0x0c, 0x1a, 0xdf, 0x88,
|
||||
0x9f, 0xc2, 0xd1, 0xd5, 0xc5, 0xdd, 0xd9, 0x38, 0x39, 0xb9, 0xe8, 0x47, 0xd2, 0xc1, 0x0f, 0xe0,
|
||||
0xe2, 0xf5, 0x54, 0x19, 0x0c, 0x4d, 0x2c, 0xd2, 0x8b, 0x83, 0xc3, 0x3f, 0x69, 0x93, 0xf6, 0xfc,
|
||||
0xd2, 0xe4, 0xf6, 0x20, 0x4a, 0x29, 0xfa, 0x8b, 0xd0, 0xff, 0x86, 0xe0, 0x2e, 0x06, 0x8d, 0x79,
|
||||
0x1e, 0xe5, 0x1d, 0x87, 0x62, 0xcb, 0xa2, 0xa4, 0xd1, 0xa0, 0x62, 0xa5, 0x42, 0x65, 0xdb, 0xa6,
|
||||
0xf1, 0x6a, 0x95, 0xaa, 0x91, 0x21, 0x18, 0x6c, 0xb8, 0x2e, 0xa5, 0x61, 0x0d, 0x8b, 0xfd, 0x1a,
|
||||
0x32, 0x8c, 0xbb, 0x49, 0xf8, 0xf4, 0xb1, 0x91, 0x43, 0x92, 0xe4, 0xd5, 0x00, 0x12, 0x47, 0x0e,
|
||||
0x11, 0xe2, 0xb4, 0x00, 0x52, 0x22, 0x1d, 0x06, 0x45, 0xd9, 0xd3, 0x79, 0x3e, 0xb9, 0xce, 0x71,
|
||||
0x62, 0x1b, 0x21, 0xbc, 0x0b, 0x43, 0x3b, 0x41, 0xc8, 0x5e, 0x8b, 0x0c, 0xf9, 0x03, 0xa0, 0x3a,
|
||||
0xb4, 0x09, 0x6d, 0x61, 0xec, 0xec, 0x04, 0xa1, 0x7c, 0x8b, 0x05, 0xc4, 0x41, 0x09, 0x28, 0xe9,
|
||||
0xa7, 0xaa, 0xdd, 0x99, 0x7e, 0x88, 0xe7, 0x2d, 0x2f, 0x32, 0xd4, 0xc3, 0x62, 0xfe, 0xa9, 0xf2,
|
||||
0x33, 0xcd, 0x47, 0x2d, 0x08, 0x65, 0x9b, 0x4c, 0xa0, 0xef, 0x15, 0x8b, 0x4f, 0x89, 0x20, 0x64,
|
||||
0xb0, 0x87, 0x4a, 0xa5, 0x87, 0x78, 0x10, 0xd2, 0x57, 0x99, 0x43, 0xba, 0x7e, 0xaf, 0x04, 0x21,
|
||||
0x6d, 0x85, 0x39, 0x94, 0x4a, 0xdd, 0xca, 0xfd, 0x10, 0xfc, 0xab, 0xcb, 0xcc, 0xa1, 0x4c, 0xe6,
|
||||
0x46, 0x0a, 0x42, 0xfc, 0x12, 0x73, 0x28, 0x97, 0xbb, 0x16, 0x83, 0x10, 0x5a, 0x64, 0x0e, 0x59,
|
||||
0xd6, 0x25, 0xe9, 0x87, 0x1c, 0xe7, 0xed, 0xd5, 0x75, 0xdf, 0x5f, 0xe0, 0xfa, 0x79, 0x90, 0x0a,
|
||||
0x05, 0x3a, 0x1e, 0x0a, 0x21, 0xd4, 0xc6, 0x83, 0xec, 0xbf, 0x9f, 0xd2, 0xb4, 0x2b, 0x15, 0x06,
|
||||
0xf1, 0x21, 0x50, 0x55, 0x88, 0x0a, 0x61, 0x5c, 0xae, 0xc0, 0x20, 0x3d, 0x04, 0x42, 0x7c, 0x54,
|
||||
0x88, 0xe3, 0xa6, 0xb6, 0x61, 0x4e, 0x21, 0x14, 0xd2, 0xf5, 0x8b, 0x79, 0x59, 0x6e, 0xee, 0x4b,
|
||||
0x52, 0xfd, 0x9c, 0x90, 0x5a, 0x97, 0x90, 0x05, 0x68, 0xee, 0x8c, 0x90, 0x72, 0xc7, 0xdf, 0xee,
|
||||
0x84, 0x94, 0x4e, 0x05, 0x61, 0xf6, 0x44, 0x10, 0xf2, 0xd0, 0xf4, 0x31, 0xc6, 0xe6, 0x11, 0xc6,
|
||||
0x59, 0x28, 0x7d, 0xc8, 0x71, 0xa9, 0x03, 0x98, 0xe1, 0x43, 0x76, 0x18, 0xe4, 0x2f, 0xd9, 0x34,
|
||||
0xd4, 0xea, 0xbd, 0x30, 0x4c, 0x1b, 0x50, 0x3e, 0x0c, 0xf2, 0x17, 0xac, 0x0c, 0x99, 0x9f, 0x0f,
|
||||
0x0f, 0x97, 0x05, 0x4d, 0x84, 0x9f, 0xff, 0xaf, 0x4d, 0x2e, 0x44, 0x8c, 0xfb, 0x00, 0xc6, 0xc7,
|
||||
0xfe, 0xbc, 0x5c, 0x83, 0xff, 0x17, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42,
|
||||
0x60, 0x82,
|
||||
};
|
||||
|
||||
const BITMAP_OPAQUE add_bus_xpm[1] = {{ png, sizeof( png ), "add_bus_xpm" }};
|
||||
|
||||
@@ -8,31 +8,55 @@
|
||||
static const unsigned char png[] = {
|
||||
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
|
||||
0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c,
|
||||
0xce, 0x00, 0x00, 0x01, 0x72, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0x63, 0xf8, 0xff, 0xff, 0x3f,
|
||||
0x03, 0xb5, 0xb1, 0x9f, 0x9f, 0x5f, 0x03, 0x32, 0x06, 0x89, 0x81, 0x25, 0x7c, 0x7d, 0x7d, 0x6d,
|
||||
0x40, 0xd8, 0xdb, 0xdb, 0xdb, 0x16, 0x86, 0x81, 0x0a, 0xec, 0x60, 0x18, 0x28, 0x67, 0x0f, 0xc3,
|
||||
0xd2, 0xd2, 0xb3, 0x6b, 0x19, 0x18, 0x4e, 0x38, 0x32, 0x30, 0x6c, 0x63, 0x27, 0xd9, 0x22, 0x74,
|
||||
0x09, 0x5c, 0x58, 0x4c, 0x6c, 0xf9, 0x09, 0xa0, 0x25, 0xff, 0xa1, 0xf8, 0x12, 0x03, 0xc3, 0x31,
|
||||
0x0d, 0x9a, 0x58, 0xc4, 0xc1, 0xb1, 0xe7, 0x25, 0x92, 0x45, 0x20, 0xfc, 0x19, 0x88, 0x63, 0xa8,
|
||||
0x6e, 0x91, 0x90, 0xd0, 0xea, 0xf3, 0x68, 0x16, 0x41, 0xf1, 0xc9, 0xd9, 0x40, 0xdf, 0x71, 0x12,
|
||||
0xb4, 0x08, 0x18, 0x27, 0x2e, 0x20, 0xec, 0xe3, 0xe3, 0xe3, 0x0c, 0xc3, 0xc0, 0xf8, 0x70, 0x82,
|
||||
0x61, 0xa0, 0x62, 0x47, 0x10, 0x76, 0x71, 0x89, 0x75, 0xe7, 0xe2, 0xda, 0xbe, 0x15, 0xbb, 0x65,
|
||||
0x88, 0xa0, 0xc4, 0x69, 0x11, 0xa9, 0x18, 0x14, 0x5c, 0xd0, 0x60, 0xfb, 0x8f, 0x2d, 0x28, 0xa9,
|
||||
0x66, 0x11, 0xc4, 0xb2, 0x63, 0x1a, 0x10, 0x5f, 0x60, 0xfa, 0x4e, 0x58, 0x78, 0xd5, 0x59, 0x4f,
|
||||
0xcf, 0xf0, 0x16, 0xaa, 0x58, 0x04, 0xb5, 0x8c, 0x93, 0x81, 0xe1, 0xf8, 0x1c, 0x6c, 0x96, 0x81,
|
||||
0x12, 0x8e, 0xa5, 0x65, 0xde, 0x14, 0xaa, 0x58, 0x44, 0x28, 0x28, 0x99, 0x98, 0x8e, 0xfe, 0xd4,
|
||||
0xd3, 0x6b, 0x58, 0x48, 0x35, 0x8b, 0xf0, 0x05, 0x25, 0xd0, 0x67, 0x2f, 0x48, 0x4e, 0xde, 0x66,
|
||||
0x66, 0xa5, 0xd3, 0x41, 0x1a, 0x81, 0x06, 0x1c, 0x04, 0x26, 0xe9, 0x48, 0x62, 0x82, 0x92, 0x93,
|
||||
0x73, 0xe7, 0x13, 0x92, 0x2d, 0x02, 0x69, 0x42, 0x75, 0x31, 0xc8, 0x50, 0x44, 0xfe, 0x81, 0x61,
|
||||
0x55, 0xd5, 0xde, 0x35, 0xc0, 0x6c, 0xf0, 0x00, 0xe4, 0x28, 0x90, 0xe3, 0xc8, 0x29, 0x19, 0x5e,
|
||||
0xe0, 0xcb, 0x3f, 0x54, 0x2b, 0x19, 0x40, 0x11, 0x0b, 0x8a, 0x60, 0x5c, 0xf9, 0x87, 0xa0, 0x45,
|
||||
0xd4, 0xca, 0x3f, 0xb0, 0xa2, 0x88, 0x8a, 0x25, 0x03, 0xee, 0xfc, 0x03, 0x72, 0x04, 0x2c, 0xff,
|
||||
0x50, 0x31, 0xc3, 0xe2, 0xce, 0x3f, 0xaa, 0xaa, 0x7d, 0xeb, 0xa8, 0x66, 0x11, 0x71, 0x45, 0x51,
|
||||
0x68, 0x0b, 0x15, 0x4b, 0x06, 0xdc, 0x41, 0x09, 0xaa, 0x5a, 0xa8, 0x5a, 0x32, 0xe0, 0x0a, 0x4a,
|
||||
0x50, 0x99, 0x47, 0x75, 0x8b, 0x60, 0x41, 0x89, 0x5c, 0x13, 0x83, 0xaa, 0x7f, 0x9a, 0x58, 0x04,
|
||||
0xc2, 0x5e, 0x5e, 0x21, 0xcd, 0xc0, 0x3c, 0xb7, 0x40, 0x53, 0xb3, 0x73, 0x05, 0x55, 0x4b, 0x6f,
|
||||
0xa2, 0xdb, 0x0c, 0xc3, 0xca, 0x22, 0x00, 0x49, 0x09, 0x08, 0x8b, 0x18, 0xbe, 0x02, 0x9f, 0x00,
|
||||
0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
0xce, 0x00, 0x00, 0x02, 0xe8, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xbd, 0x95, 0x5b, 0x48, 0x14,
|
||||
0x51, 0x18, 0xc7, 0x77, 0x5b, 0x77, 0x17, 0x33, 0xc4, 0x4c, 0x37, 0x75, 0x57, 0x9b, 0xd9, 0x75,
|
||||
0xd4, 0xd9, 0x73, 0xce, 0x6c, 0x64, 0xa1, 0x54, 0x66, 0x88, 0x15, 0x6a, 0x50, 0x29, 0x51, 0x6a,
|
||||
0x86, 0xf5, 0x54, 0x60, 0x18, 0x44, 0xf5, 0x64, 0xa5, 0xbe, 0x44, 0x46, 0x05, 0x81, 0x0f, 0xd1,
|
||||
0x85, 0x1e, 0x14, 0x4a, 0x23, 0x13, 0xb2, 0x20, 0x2f, 0x89, 0x26, 0x99, 0xa4, 0x26, 0xa9, 0x11,
|
||||
0x14, 0x3e, 0x95, 0x11, 0x44, 0x64, 0x2f, 0x96, 0x38, 0x7d, 0x87, 0xbe, 0x81, 0x29, 0x76, 0xc7,
|
||||
0x11, 0x2f, 0x0f, 0x3f, 0x06, 0xe6, 0x9c, 0x39, 0xbf, 0x73, 0xf9, 0xfe, 0x67, 0x2c, 0xaa, 0xaa,
|
||||
0x5a, 0x96, 0x03, 0xcb, 0xb2, 0x8a, 0x28, 0x55, 0x7b, 0x80, 0x77, 0x1a, 0xe7, 0xd8, 0xcd, 0x1b,
|
||||
0xa3, 0x84, 0x24, 0x2d, 0x85, 0x68, 0x12, 0x50, 0x35, 0xae, 0xd1, 0x9a, 0x8e, 0x71, 0xc6, 0x3e,
|
||||
0x0d, 0x31, 0x96, 0xbe, 0xa4, 0xa2, 0x3a, 0x52, 0xd5, 0x3b, 0xae, 0x28, 0xea, 0x98, 0xa2, 0xfc,
|
||||
0x1c, 0xa4, 0x74, 0xb7, 0xc5, 0x62, 0xb1, 0x2e, 0x58, 0xc4, 0x07, 0xa1, 0x74, 0xf6, 0x8b, 0x5e,
|
||||
0x54, 0x9b, 0x76, 0x66, 0x98, 0x8b, 0x90, 0xdf, 0x03, 0x94, 0x1e, 0x5f, 0xa8, 0x2c, 0xa8, 0x28,
|
||||
0xd3, 0xd7, 0xdc, 0xde, 0xe7, 0xf7, 0x4f, 0xe8, 0x64, 0xea, 0x20, 0x63, 0x17, 0xa1, 0xef, 0x8a,
|
||||
0x45, 0x15, 0x09, 0x42, 0x67, 0x5b, 0x9c, 0xdd, 0x7e, 0xac, 0x3d, 0x2d, 0x6d, 0x44, 0x2f, 0x1b,
|
||||
0x61, 0xac, 0xe1, 0xba, 0x24, 0x39, 0x17, 0x51, 0xd4, 0xd5, 0x06, 0xef, 0xcb, 0xc2, 0x6d, 0xb6,
|
||||
0xe2, 0x16, 0x49, 0x7a, 0xae, 0x97, 0xbd, 0x52, 0x32, 0xda, 0x29, 0xfd, 0x75, 0x94, 0x31, 0xb5,
|
||||
0x7c, 0x2e, 0x02, 0x01, 0xd5, 0x3d, 0x97, 0xe8, 0x31, 0xbc, 0x2f, 0x02, 0xb6, 0x02, 0x3b, 0xee,
|
||||
0x78, 0xbd, 0x4d, 0x9a, 0xa8, 0x97, 0xe5, 0xfc, 0xd0, 0xf7, 0x35, 0xc2, 0xef, 0x9f, 0xc9, 0x33,
|
||||
0x23, 0xe2, 0xd5, 0x96, 0x0c, 0xf8, 0x80, 0xec, 0xba, 0xc4, 0xc4, 0xfa, 0x31, 0xc6, 0x66, 0xba,
|
||||
0x59, 0xce, 0x94, 0x59, 0x91, 0x24, 0x7d, 0xe4, 0x93, 0x5d, 0x09, 0xd8, 0x82, 0x8a, 0xca, 0xa4,
|
||||
0xab, 0x2f, 0x37, 0x45, 0x44, 0x94, 0x42, 0x9b, 0x07, 0x88, 0xc0, 0xe7, 0x96, 0xd3, 0xf1, 0xf1,
|
||||
0xb5, 0xcf, 0x68, 0xce, 0x57, 0xb3, 0x22, 0xb7, 0xbb, 0xa1, 0x12, 0xbe, 0x4b, 0x01, 0x56, 0x05,
|
||||
0x15, 0x9d, 0x4f, 0x3d, 0x35, 0x06, 0xf9, 0x99, 0xbc, 0xe4, 0xf1, 0x64, 0x43, 0x7b, 0x18, 0xe0,
|
||||
0x04, 0xe2, 0x81, 0x8c, 0x9d, 0xd1, 0xf2, 0x49, 0x51, 0xec, 0x6c, 0x16, 0xc5, 0xee, 0x7b, 0xa2,
|
||||
0xd8, 0xd5, 0x24, 0x08, 0x1d, 0x0f, 0x42, 0x11, 0x19, 0xb9, 0xbf, 0x02, 0xbe, 0xd9, 0x0c, 0xac,
|
||||
0x09, 0x29, 0xe2, 0xe7, 0x31, 0xaa, 0x28, 0xdf, 0x7b, 0x64, 0x39, 0x97, 0x97, 0x35, 0xe0, 0x00,
|
||||
0x5c, 0xc0, 0x06, 0x20, 0x0f, 0x28, 0x04, 0x0e, 0x01, 0x47, 0x0c, 0x28, 0xe1, 0xdb, 0x0e, 0xc4,
|
||||
0x18, 0x8a, 0xf0, 0x76, 0x98, 0x1e, 0x20, 0xe4, 0x30, 0xca, 0xec, 0x40, 0x34, 0x20, 0x03, 0x59,
|
||||
0x40, 0x01, 0xb0, 0xd7, 0x80, 0x7c, 0x60, 0x23, 0x10, 0x15, 0x54, 0x94, 0xed, 0x6b, 0xec, 0xea,
|
||||
0x27, 0xe4, 0xb3, 0xae, 0xac, 0x67, 0x21, 0xb0, 0x55, 0x28, 0x0b, 0xc3, 0x3d, 0x5f, 0x0b, 0x24,
|
||||
0x01, 0xa2, 0x01, 0xeb, 0x80, 0x58, 0xdc, 0xfa, 0xe0, 0x81, 0xf5, 0x39, 0x9d, 0x15, 0xdd, 0xb2,
|
||||
0xfc, 0x5e, 0x9f, 0xa1, 0x61, 0xc6, 0x6e, 0x5f, 0x20, 0xc4, 0x81, 0x42, 0x1b, 0xae, 0xd0, 0x61,
|
||||
0x80, 0x1d, 0xfb, 0x59, 0x0d, 0x03, 0x1b, 0x63, 0xb3, 0x95, 0x3e, 0x4d, 0x4d, 0xed, 0xd7, 0xcb,
|
||||
0x86, 0xd8, 0xfa, 0x27, 0x84, 0x4c, 0x97, 0x10, 0xa2, 0x1e, 0x34, 0x41, 0x9c, 0xd9, 0xc0, 0x66,
|
||||
0xc1, 0x9a, 0x77, 0xdd, 0x4f, 0x4e, 0x6e, 0xd3, 0x44, 0x6f, 0x95, 0xc0, 0x92, 0x04, 0x56, 0xc2,
|
||||
0xc0, 0x6e, 0xaf, 0x17, 0x84, 0xbb, 0xfc, 0xac, 0xde, 0xb0, 0xc0, 0x3c, 0x02, 0x3b, 0x51, 0x68,
|
||||
0x18, 0x58, 0x14, 0x15, 0x60, 0x50, 0xf9, 0xc1, 0x27, 0xf2, 0xeb, 0xa8, 0xda, 0xed, 0xbe, 0xfc,
|
||||
0x9a, 0x06, 0xbe, 0x99, 0x15, 0x79, 0x3c, 0x8d, 0x95, 0x38, 0xd9, 0xbf, 0x81, 0x95, 0xe5, 0xa9,
|
||||
0x6a, 0x49, 0xfa, 0x70, 0xcb, 0xeb, 0xed, 0x7b, 0xc8, 0x25, 0x2e, 0x57, 0xcd, 0x15, 0x14, 0xb9,
|
||||
0x75, 0x81, 0x4d, 0x00, 0x32, 0x0f, 0xc4, 0xa6, 0x9c, 0x15, 0xc5, 0xde, 0x47, 0xbc, 0xaf, 0x28,
|
||||
0xbe, 0x68, 0x11, 0xc5, 0x9e, 0xd6, 0x50, 0x44, 0x45, 0x15, 0x9f, 0xf8, 0x27, 0xb0, 0x78, 0xcd,
|
||||
0x50, 0x0c, 0x61, 0x39, 0x92, 0x8f, 0x83, 0x6b, 0x55, 0xe3, 0xc0, 0x92, 0x4e, 0xc7, 0xb6, 0xa2,
|
||||
0x79, 0x07, 0x16, 0x08, 0xc7, 0x25, 0xe6, 0x62, 0xd0, 0xf6, 0x60, 0x20, 0x5d, 0xda, 0xcf, 0x0e,
|
||||
0xfb, 0xd9, 0x71, 0x76, 0x7e, 0x60, 0x1b, 0x9e, 0xe3, 0x3e, 0x03, 0x0a, 0x30, 0xb0, 0xab, 0xb5,
|
||||
0x8a, 0x08, 0xc3, 0xf4, 0xf2, 0xb3, 0xf0, 0x62, 0xd8, 0x12, 0x70, 0x02, 0x56, 0x5d, 0xe5, 0x58,
|
||||
0x75, 0x81, 0x8d, 0x03, 0x04, 0x2c, 0x96, 0x50, 0x08, 0x38, 0x59, 0xa7, 0x7e, 0x80, 0xff, 0x03,
|
||||
0x68, 0x0f, 0xf5, 0xeb, 0xd6, 0xdd, 0x10, 0x0e, 0x13, 0xf0, 0x7e, 0xd6, 0x3f, 0x8d, 0xcc, 0x56,
|
||||
0x2c, 0x13, 0x1d, 0x81, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60,
|
||||
0x82,
|
||||
};
|
||||
|
||||
const BITMAP_OPAQUE add_bus2bus_xpm[1] = {{ png, sizeof( png ), "add_bus2bus_xpm" }};
|
||||
|
||||
@@ -8,36 +8,53 @@
|
||||
static const unsigned char png[] = {
|
||||
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
|
||||
0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c,
|
||||
0xce, 0x00, 0x00, 0x01, 0xc7, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xcd, 0x96, 0x31, 0x4f, 0xc2,
|
||||
0x40, 0x14, 0xc7, 0xdf, 0x60, 0x1c, 0xf8, 0x06, 0x30, 0xba, 0x98, 0x10, 0x07, 0x47, 0x07, 0xd8,
|
||||
0x8c, 0x33, 0x2e, 0x6a, 0x24, 0xd1, 0x04, 0x1a, 0x6a, 0x83, 0xcc, 0xc6, 0xad, 0x09, 0xa1, 0x89,
|
||||
0x13, 0x7c, 0x03, 0x13, 0x77, 0xc7, 0x6e, 0x26, 0x26, 0x86, 0x44, 0x34, 0x2c, 0x0c, 0x4e, 0x4e,
|
||||
0x4e, 0x7c, 0x02, 0x88, 0x21, 0x94, 0xf3, 0xfe, 0x77, 0x57, 0x3d, 0xa0, 0x85, 0xaa, 0xa5, 0x3a,
|
||||
0xfc, 0xd3, 0xe6, 0xda, 0x7b, 0xbf, 0xfe, 0xdf, 0x7b, 0x77, 0x57, 0x62, 0x8c, 0x51, 0x12, 0x5a,
|
||||
0xfe, 0x02, 0x75, 0xd3, 0x44, 0x4f, 0x05, 0xa2, 0x4e, 0x9d, 0xcb, 0xe5, 0xea, 0x2b, 0xb9, 0x72,
|
||||
0x0c, 0xcf, 0xba, 0xe9, 0x1f, 0x83, 0x88, 0x5e, 0xd6, 0x89, 0x1e, 0x1b, 0x3c, 0xd8, 0x98, 0x8b,
|
||||
0x2d, 0x11, 0xde, 0x71, 0x8a, 0xc5, 0x8b, 0x4d, 0xd3, 0x34, 0x6b, 0x96, 0x65, 0x6d, 0x44, 0x02,
|
||||
0x11, 0x3d, 0x6f, 0xf3, 0x89, 0x3d, 0x15, 0xc4, 0xe3, 0xc0, 0x3b, 0x04, 0x92, 0x5f, 0xdf, 0xce,
|
||||
0x48, 0x09, 0x97, 0x8e, 0x7a, 0xe6, 0xe5, 0x77, 0xaf, 0xd8, 0xe9, 0x99, 0xe9, 0x15, 0x1a, 0x47,
|
||||
0xef, 0xa5, 0xaa, 0x31, 0x28, 0xd5, 0xca, 0xd7, 0x0b, 0x41, 0x7c, 0x52, 0x85, 0x6b, 0xa4, 0x20,
|
||||
0xaf, 0x5c, 0xb9, 0x65, 0x69, 0xc9, 0x66, 0x6f, 0x0e, 0x38, 0x64, 0xb2, 0x75, 0x9f, 0x67, 0xd9,
|
||||
0x87, 0x1c, 0xc3, 0x15, 0x30, 0xdd, 0x59, 0x90, 0x13, 0x40, 0x26, 0x5c, 0x4d, 0x9e, 0xfb, 0x54,
|
||||
0x94, 0x42, 0x23, 0x5d, 0xfb, 0xce, 0xe1, 0x10, 0x10, 0x5f, 0x70, 0x86, 0xf1, 0x39, 0x90, 0xac,
|
||||
0xc9, 0x67, 0xba, 0x9a, 0xdf, 0xe9, 0x28, 0x7c, 0x39, 0x1c, 0xe8, 0x8e, 0x90, 0x46, 0xd4, 0x2c,
|
||||
0x00, 0x24, 0x0a, 0xaf, 0xd2, 0x15, 0xcd, 0x89, 0x2e, 0xd4, 0x04, 0x30, 0x38, 0x43, 0x1a, 0x51,
|
||||
0x33, 0xd4, 0x70, 0x0a, 0x24, 0x5b, 0x58, 0x74, 0x8e, 0x17, 0xa5, 0x26, 0x8b, 0x9c, 0x21, 0x5d,
|
||||
0xa8, 0x99, 0x8a, 0x35, 0xf6, 0x5b, 0x5f, 0x81, 0x44, 0x07, 0x31, 0x74, 0x50, 0x6c, 0x0b, 0x54,
|
||||
0x76, 0x23, 0x43, 0x6c, 0x0d, 0x24, 0x16, 0xe3, 0x94, 0xd5, 0x59, 0xd9, 0xb6, 0xbd, 0x66, 0x58,
|
||||
0x46, 0xb5, 0x7c, 0x6e, 0xbc, 0x41, 0xb8, 0xc7, 0x58, 0x38, 0x08, 0xad, 0x2f, 0x62, 0xd6, 0x75,
|
||||
0x90, 0xab, 0xd3, 0x83, 0x84, 0xc0, 0xc7, 0x97, 0x27, 0x83, 0x9d, 0xdb, 0x3d, 0x06, 0xe1, 0x1e,
|
||||
0x63, 0xe1, 0x20, 0x3f, 0x4b, 0x1d, 0x57, 0x07, 0xf5, 0xe5, 0x60, 0x3b, 0x13, 0x36, 0x11, 0x2e,
|
||||
0x00, 0xf0, 0xdb, 0x17, 0xf7, 0x18, 0x0b, 0x07, 0x61, 0x51, 0x0b, 0x50, 0xff, 0x4f, 0x40, 0x89,
|
||||
0xa5, 0x2e, 0xa9, 0x66, 0x48, 0xac, 0xbd, 0xe3, 0x59, 0xb0, 0x9a, 0x9b, 0x5c, 0xe0, 0x82, 0x8d,
|
||||
0x63, 0x0b, 0xd2, 0x0e, 0xca, 0x94, 0xda, 0xf5, 0xe7, 0xb7, 0xa0, 0xdf, 0x6e, 0xaa, 0x33, 0x6e,
|
||||
0x5a, 0x2a, 0x46, 0x0f, 0x31, 0x63, 0x3d, 0x26, 0x34, 0x27, 0x2d, 0x35, 0x77, 0x84, 0x58, 0xb1,
|
||||
0x1f, 0x7c, 0xaa, 0x26, 0x7e, 0xba, 0x30, 0xb7, 0xb2, 0xb2, 0xa3, 0xfc, 0x2b, 0x5d, 0xd3, 0x4e,
|
||||
0x56, 0xf2, 0x73, 0xa2, 0xd7, 0xe4, 0xff, 0xfd, 0x6e, 0xc5, 0xad, 0x0f, 0xa2, 0x2a, 0x66, 0x8d,
|
||||
0xf7, 0xe6, 0x8a, 0x2e, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
0xce, 0x00, 0x00, 0x02, 0xd2, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xbd, 0x96, 0x4d, 0x68, 0x13,
|
||||
0x41, 0x14, 0xc7, 0xa3, 0x55, 0x2b, 0x22, 0x22, 0xa5, 0xb6, 0x64, 0x77, 0xa3, 0x22, 0x81, 0x26,
|
||||
0x8d, 0x68, 0x76, 0x26, 0xec, 0xa6, 0xf9, 0xb0, 0x11, 0x14, 0x89, 0x8a, 0xa8, 0x10, 0x6c, 0x6d,
|
||||
0x23, 0x8a, 0x08, 0x7a, 0xf3, 0xe0, 0x51, 0x44, 0xf4, 0x2a, 0x78, 0x11, 0xc4, 0xa2, 0x5e, 0xf4,
|
||||
0x50, 0x85, 0x8a, 0x54, 0xaa, 0x55, 0xb0, 0x94, 0x0a, 0x82, 0x25, 0xb4, 0x4d, 0x2f, 0x42, 0x4b,
|
||||
0xf1, 0xa0, 0x2d, 0x9a, 0xec, 0x6c, 0x50, 0x0f, 0x8d, 0x1f, 0xcd, 0xf8, 0x66, 0x9b, 0xc5, 0x6c,
|
||||
0x6d, 0x36, 0x9b, 0x6d, 0xed, 0xe1, 0x4f, 0x92, 0x97, 0x99, 0xf9, 0xcd, 0xbe, 0xff, 0x9b, 0x9d,
|
||||
0xe7, 0xa0, 0x94, 0x3a, 0x56, 0x42, 0x15, 0x07, 0x70, 0x58, 0xf1, 0x08, 0x58, 0x3d, 0xc9, 0x8b,
|
||||
0xe4, 0x06, 0x8f, 0xc8, 0x6b, 0x90, 0xca, 0x63, 0xf2, 0x91, 0x47, 0x4a, 0xaf, 0x80, 0xc8, 0x55,
|
||||
0x4e, 0xcc, 0x1e, 0xd9, 0x86, 0xb3, 0x4e, 0xdb, 0xa0, 0x06, 0xf9, 0x4b, 0x23, 0x2c, 0xda, 0x03,
|
||||
0xa2, 0x16, 0xf4, 0x4b, 0x8c, 0x9e, 0x19, 0x97, 0xc3, 0xc1, 0x94, 0x14, 0x96, 0x86, 0x75, 0xc9,
|
||||
0xad, 0xc1, 0x1e, 0x53, 0x10, 0x27, 0xaa, 0xed, 0x30, 0x59, 0x29, 0x2e, 0xf2, 0x03, 0x76, 0x3e,
|
||||
0x04, 0x9f, 0x37, 0x79, 0x51, 0x49, 0x6e, 0xdd, 0x4d, 0x7c, 0x02, 0x56, 0x64, 0x1e, 0xab, 0x17,
|
||||
0x04, 0x4c, 0xee, 0x42, 0x7c, 0x8c, 0x8d, 0x13, 0x43, 0xa7, 0xa9, 0xb7, 0xeb, 0xc4, 0x6c, 0xf3,
|
||||
0xb3, 0x7d, 0x13, 0xbe, 0x97, 0x91, 0xb4, 0xaf, 0x2f, 0x92, 0x96, 0x5a, 0xa4, 0x91, 0x45, 0x41,
|
||||
0xf0, 0x6b, 0x35, 0x4c, 0x7a, 0xac, 0xef, 0x54, 0x40, 0x6a, 0xca, 0x15, 0x50, 0x77, 0x5a, 0x48,
|
||||
0xef, 0x51, 0x31, 0x94, 0xfc, 0xe9, 0xb9, 0xd7, 0x49, 0x9b, 0x1e, 0x75, 0x14, 0xbc, 0xcf, 0x0f,
|
||||
0x4f, 0x7b, 0x07, 0x4c, 0x40, 0x1c, 0x26, 0x97, 0xf4, 0xa7, 0x80, 0xdd, 0x5f, 0x76, 0xc4, 0xe8,
|
||||
0x1a, 0xab, 0x66, 0x4b, 0xd1, 0xf0, 0xb0, 0xf7, 0xe1, 0xf1, 0x5c, 0x53, 0xf7, 0x3c, 0xac, 0xb9,
|
||||
0x7f, 0xff, 0xe4, 0xa2, 0x20, 0xb6, 0x73, 0x30, 0x38, 0xaf, 0x81, 0x44, 0xe5, 0x54, 0xb5, 0x55,
|
||||
0x25, 0x47, 0xe5, 0xb7, 0x2c, 0x5d, 0x9e, 0xde, 0x63, 0x84, 0xc1, 0x3c, 0xdd, 0x6d, 0x79, 0x29,
|
||||
0x18, 0x1c, 0x33, 0x80, 0x30, 0xa6, 0x6b, 0x01, 0x32, 0xa2, 0xa5, 0x0b, 0xab, 0x4f, 0xed, 0x94,
|
||||
0x2f, 0x80, 0xfa, 0xa4, 0x3d, 0x50, 0x04, 0xad, 0xa1, 0x94, 0x18, 0x6d, 0xcf, 0xfb, 0x23, 0x49,
|
||||
0x8a, 0x42, 0x89, 0x4f, 0x06, 0x10, 0x2f, 0xaa, 0xe7, 0x8b, 0x29, 0xcb, 0x36, 0xee, 0xfa, 0xdc,
|
||||
0x60, 0x07, 0x14, 0x8b, 0xc5, 0xd6, 0x63, 0x8c, 0xeb, 0x99, 0x76, 0xe0, 0x81, 0x43, 0x2e, 0xf4,
|
||||
0x61, 0x4e, 0xc0, 0x33, 0x05, 0x27, 0x52, 0xbc, 0x7f, 0x41, 0x48, 0x79, 0xc0, 0x40, 0xe0, 0xd1,
|
||||
0x95, 0xe5, 0x3a, 0xa0, 0x70, 0xee, 0x5e, 0x69, 0x6b, 0x8a, 0xe4, 0x6c, 0x09, 0x88, 0xbc, 0x67,
|
||||
0x41, 0x17, 0x22, 0x07, 0xca, 0x9b, 0x2d, 0xf7, 0x33, 0x73, 0x0d, 0x82, 0x98, 0x09, 0xe8, 0x9a,
|
||||
0x96, 0x25, 0xac, 0xdc, 0xd6, 0x40, 0x75, 0x32, 0xd9, 0x04, 0x81, 0x82, 0xe6, 0x4f, 0xcb, 0xd7,
|
||||
0xba, 0xb2, 0x1e, 0xc8, 0x72, 0x9a, 0x95, 0x6c, 0xa9, 0x58, 0xac, 0xdc, 0x78, 0x21, 0xa0, 0x1e,
|
||||
0xd4, 0x8f, 0x88, 0x06, 0xe2, 0x71, 0x76, 0xef, 0xbc, 0x3f, 0xea, 0xa4, 0xa9, 0xd9, 0x0c, 0x34,
|
||||
0x14, 0x31, 0xc8, 0x0c, 0xc4, 0xe1, 0x6f, 0xf5, 0xfa, 0x51, 0x71, 0xbb, 0x69, 0xed, 0xca, 0x81,
|
||||
0xaa, 0x4a, 0x5d, 0x15, 0xa0, 0x7f, 0x52, 0x67, 0xb9, 0x18, 0x22, 0xc1, 0x41, 0x28, 0x80, 0x51,
|
||||
0x83, 0x20, 0x66, 0xb9, 0x18, 0xac, 0x96, 0x77, 0x22, 0x91, 0xa8, 0x89, 0xc7, 0xe3, 0xb5, 0xa5,
|
||||
0x62, 0xb1, 0xea, 0xca, 0x7b, 0x19, 0x0e, 0xac, 0xc1, 0x9f, 0x80, 0x1a, 0x86, 0xb5, 0xe6, 0x98,
|
||||
0x25, 0x86, 0x03, 0x5b, 0xfa, 0x0a, 0xe2, 0x10, 0x79, 0xb2, 0x14, 0xc8, 0x16, 0x5f, 0x66, 0x23,
|
||||
0xac, 0x33, 0x55, 0xf4, 0xe7, 0x96, 0xe9, 0x4b, 0x15, 0x06, 0x74, 0xd8, 0x7e, 0x1a, 0x44, 0xba,
|
||||
0x8a, 0xd9, 0x99, 0xe0, 0xf0, 0xcc, 0x86, 0x4a, 0xd7, 0xc4, 0x2c, 0xfb, 0xee, 0x48, 0xd0, 0x1a,
|
||||
0xab, 0x80, 0xed, 0xfe, 0xdc, 0x66, 0x98, 0x77, 0xbf, 0x38, 0xff, 0x37, 0x28, 0x58, 0xf6, 0x2a,
|
||||
0x5f, 0x78, 0xf1, 0x81, 0xa1, 0xef, 0xd8, 0x8d, 0x5a, 0xf1, 0x29, 0xa0, 0x6f, 0x80, 0xf1, 0xd3,
|
||||
0xfa, 0xb5, 0x0e, 0xba, 0x68, 0xa9, 0x67, 0x58, 0x78, 0x95, 0x43, 0x4a, 0x07, 0x59, 0x73, 0x02,
|
||||
0xf1, 0x36, 0x01, 0x65, 0xdc, 0xbc, 0x3f, 0xe7, 0x87, 0xeb, 0xfd, 0x1c, 0xfc, 0x77, 0x07, 0x1a,
|
||||
0x95, 0xd1, 0x92, 0xde, 0x61, 0xdc, 0x89, 0xb2, 0xf8, 0xbf, 0x36, 0x27, 0x00, 0xbc, 0xee, 0xf3,
|
||||
0xd1, 0x75, 0xb6, 0xdb, 0x2d, 0x56, 0x9e, 0x50, 0x1c, 0x9d, 0x5a, 0x73, 0x82, 0xc8, 0x1b, 0xd0,
|
||||
0x77, 0x78, 0xc2, 0x0c, 0x98, 0xfe, 0x82, 0x2d, 0xce, 0xfa, 0x85, 0x25, 0xb5, 0x5b, 0x65, 0x27,
|
||||
0x38, 0xe8, 0x2a, 0x3b, 0xd5, 0xf8, 0x07, 0x4e, 0x6c, 0x94, 0x21, 0x43, 0x7b, 0xc5, 0x80, 0x00,
|
||||
0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
};
|
||||
|
||||
const BITMAP_OPAQUE add_circle_xpm[1] = {{ png, sizeof( png ), "add_circle_xpm" }};
|
||||
|
||||
@@ -8,29 +8,47 @@
|
||||
static const unsigned char png[] = {
|
||||
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
|
||||
0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c,
|
||||
0xce, 0x00, 0x00, 0x01, 0x56, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0x63, 0xf8, 0xff, 0xff, 0x3f,
|
||||
0x03, 0x3d, 0x30, 0x86, 0x40, 0x03, 0x03, 0x43, 0x12, 0x10, 0x37, 0x03, 0x31, 0x17, 0xad, 0x2d,
|
||||
0x3a, 0x00, 0xc4, 0xff, 0x9b, 0x98, 0x99, 0xef, 0x01, 0x69, 0x1b, 0x9a, 0x5a, 0xd4, 0x2f, 0x2f,
|
||||
0xff, 0x7f, 0x82, 0xbc, 0xfc, 0x9f, 0x46, 0x46, 0xc6, 0x7f, 0x40, 0x7e, 0x3f, 0x35, 0x7c, 0x87,
|
||||
0xd5, 0xa2, 0x79, 0x76, 0x76, 0xff, 0xbf, 0x7e, 0xf8, 0xf0, 0x7f, 0x4b, 0x76, 0xf6, 0xff, 0x06,
|
||||
0x46, 0x46, 0xaa, 0xf8, 0x0e, 0xa7, 0x45, 0xbf, 0x7e, 0xfd, 0x02, 0xe3, 0x3b, 0x7b, 0xf7, 0x52,
|
||||
0xc5, 0x77, 0x04, 0x2d, 0x02, 0x61, 0x90, 0xef, 0xb6, 0xe6, 0xe4, 0x50, 0xe4, 0x3b, 0xa2, 0x2c,
|
||||
0xa2, 0x86, 0xef, 0x60, 0xc9, 0xf9, 0x00, 0x12, 0x7e, 0x3f, 0x49, 0x55, 0x15, 0xab, 0x45, 0x94,
|
||||
0xf8, 0x0e, 0x64, 0x51, 0x1a, 0x86, 0x45, 0x6a, 0x6a, 0x60, 0x43, 0xdf, 0x3d, 0x7c, 0xf8, 0xff,
|
||||
0xf9, 0xe5, 0xcb, 0x28, 0xf8, 0xdb, 0xc7, 0x8f, 0x60, 0xb9, 0xbb, 0xfb, 0xf6, 0xfd, 0x9f, 0xa0,
|
||||
0xa0, 0x40, 0xb4, 0xef, 0x70, 0x06, 0xdd, 0x8f, 0x6f, 0xdf, 0xfe, 0xb7, 0xf1, 0xf2, 0xfe, 0x07,
|
||||
0xe5, 0x29, 0x64, 0x7c, 0xa8, 0xbd, 0x1d, 0xd5, 0x77, 0xb9, 0xb9, 0x44, 0xf9, 0x0e, 0x6f, 0x1c,
|
||||
0xfd, 0xf8, 0xfa, 0xf5, 0xff, 0xb7, 0x4f, 0x9f, 0x50, 0x30, 0xb6, 0xe0, 0x24, 0xc6, 0x77, 0x44,
|
||||
0x25, 0x86, 0xc7, 0xa7, 0x4e, 0x81, 0x7d, 0x88, 0x2b, 0xde, 0x90, 0x7d, 0x07, 0xb6, 0x8c, 0x91,
|
||||
0xf1, 0x2b, 0xd0, 0x9c, 0x23, 0x48, 0xd1, 0x91, 0x46, 0x94, 0x45, 0x9d, 0x42, 0x42, 0xff, 0xef,
|
||||
0xee, 0xdf, 0x4f, 0x89, 0x45, 0x49, 0x78, 0x2d, 0xfa, 0xfc, 0xe6, 0xcd, 0xff, 0xf7, 0x8f, 0x1e,
|
||||
0xfd, 0x6f, 0x07, 0xc6, 0xd5, 0xe5, 0x95, 0x2b, 0xc1, 0x6c, 0x6c, 0x3e, 0xa3, 0x28, 0xe8, 0x70,
|
||||
0x25, 0x86, 0x83, 0xad, 0xad, 0xe4, 0x25, 0x06, 0x7c, 0xf9, 0xe8, 0xd3, 0xab, 0x57, 0x18, 0x3e,
|
||||
0xfa, 0xf9, 0xe3, 0x07, 0x79, 0xc9, 0x1b, 0x5f, 0x3e, 0x82, 0xc7, 0x91, 0xb0, 0x30, 0xb8, 0x54,
|
||||
0xa0, 0x28, 0xc3, 0x12, 0x93, 0x18, 0x1e, 0x1e, 0x3f, 0xfe, 0xff, 0xe7, 0xf7, 0xef, 0x94, 0x15,
|
||||
0x41, 0x83, 0xa6, 0x50, 0xa5, 0x79, 0x35, 0x41, 0x97, 0x8a, 0x8f, 0x6e, 0x55, 0x39, 0xbd, 0x1a,
|
||||
0x27, 0xa0, 0x7c, 0xd5, 0x41, 0xf3, 0xe6, 0x16, 0xad, 0x30, 0x00, 0xee, 0x60, 0x35, 0xe4, 0x92,
|
||||
0x65, 0x02, 0x5f, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
0xce, 0x00, 0x00, 0x02, 0x68, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xed, 0x96, 0xcf, 0x6a, 0x13,
|
||||
0x51, 0x14, 0xc6, 0x83, 0x56, 0xd1, 0x9d, 0x2f, 0x50, 0x95, 0x5a, 0x15, 0x7c, 0x8a, 0x2c, 0x9a,
|
||||
0x76, 0xfe, 0x27, 0x33, 0xed, 0xb4, 0xc6, 0x46, 0xab, 0xc4, 0x4e, 0xba, 0x70, 0x25, 0xa9, 0x48,
|
||||
0x77, 0x7d, 0x00, 0x51, 0x0b, 0x4a, 0x41, 0xc4, 0xb8, 0xd0, 0x85, 0x25, 0x26, 0xad, 0x92, 0x50,
|
||||
0x8a, 0x22, 0x2a, 0x22, 0xd9, 0x76, 0x27, 0xb8, 0x90, 0x2c, 0x74, 0x15, 0x5c, 0x0c, 0x34, 0xa3,
|
||||
0xc2, 0x71, 0xbe, 0xcb, 0xdc, 0xe1, 0x66, 0x3a, 0x13, 0x04, 0x49, 0x70, 0x61, 0xe0, 0x63, 0xce,
|
||||
0xdc, 0xdf, 0x39, 0xf7, 0x63, 0xee, 0xcc, 0x3d, 0x37, 0x29, 0x22, 0x4a, 0x0d, 0x43, 0x3d, 0x37,
|
||||
0xa6, 0x9a, 0xf9, 0xa4, 0xc8, 0x53, 0x3f, 0xb9, 0xb2, 0x4a, 0xe6, 0x0b, 0x67, 0x96, 0x3a, 0xb1,
|
||||
0xab, 0xc9, 0x93, 0x7b, 0x5c, 0xc8, 0xe5, 0x0c, 0x79, 0x49, 0x75, 0xb1, 0x46, 0x48, 0x72, 0x97,
|
||||
0x47, 0xc8, 0xbb, 0x71, 0x80, 0x49, 0x92, 0x24, 0x12, 0x59, 0xa7, 0x7c, 0x98, 0xdc, 0xe5, 0x43,
|
||||
0x4c, 0x22, 0x43, 0xcc, 0x6b, 0xa2, 0x75, 0x89, 0x46, 0xf5, 0xc5, 0x71, 0xba, 0x3c, 0x23, 0x51,
|
||||
0xd5, 0x39, 0xb3, 0xcf, 0xa8, 0xe6, 0x9c, 0x66, 0xac, 0xe6, 0x8c, 0xef, 0x33, 0x42, 0xfe, 0xbc,
|
||||
0x29, 0xd3, 0xc6, 0xe2, 0xd9, 0x64, 0x23, 0xcb, 0xb2, 0x76, 0x15, 0x45, 0xc1, 0x63, 0xd3, 0xc2,
|
||||
0xb4, 0x4c, 0x8f, 0xd7, 0xd7, 0xc8, 0xce, 0xca, 0xac, 0x80, 0x8d, 0x07, 0xec, 0x82, 0x3f, 0xd1,
|
||||
0xa3, 0xfb, 0x77, 0xd8, 0x55, 0x64, 0x88, 0xe7, 0x2d, 0x99, 0x1e, 0xde, 0xbb, 0xdd, 0xc3, 0x0c,
|
||||
0xc3, 0xf8, 0x9a, 0x4e, 0xa7, 0x8f, 0x84, 0x46, 0x9a, 0xa6, 0xed, 0x75, 0x3a, 0x1d, 0xd2, 0x55,
|
||||
0x85, 0x1a, 0xa5, 0x93, 0xe4, 0xcc, 0x4e, 0xd1, 0xcb, 0xd2, 0x29, 0x56, 0xe0, 0x79, 0x1e, 0x13,
|
||||
0xd8, 0x0b, 0x67, 0x2c, 0x60, 0x63, 0x3d, 0x0c, 0xf1, 0xce, 0xd2, 0x71, 0xba, 0x76, 0x7e, 0x92,
|
||||
0xb6, 0x4b, 0x27, 0x42, 0xe6, 0x1b, 0x75, 0x73, 0xb9, 0xdc, 0xb1, 0x1e, 0x23, 0xd7, 0x75, 0x49,
|
||||
0x53, 0x65, 0xb6, 0xc6, 0x74, 0x33, 0xc5, 0x84, 0x82, 0x8f, 0xcd, 0x26, 0x93, 0xa6, 0x24, 0x33,
|
||||
0xb6, 0x54, 0xc1, 0x38, 0x67, 0xf8, 0x25, 0x1a, 0x15, 0x6c, 0xd3, 0x9f, 0x50, 0x0a, 0x35, 0x67,
|
||||
0x19, 0xf4, 0x7e, 0x6b, 0x8b, 0xa9, 0x1f, 0x43, 0x1c, 0x65, 0x49, 0x46, 0xdd, 0x56, 0xab, 0x45,
|
||||
0x1f, 0x1a, 0x0d, 0x7a, 0x53, 0xab, 0x85, 0x7a, 0x5b, 0xaf, 0x87, 0x93, 0xbd, 0xdb, 0xdc, 0x4c,
|
||||
0x64, 0x88, 0xa3, 0x2c, 0xd6, 0x48, 0x55, 0x55, 0xaf, 0x58, 0x2c, 0xd2, 0xea, 0xca, 0x4a, 0x58,
|
||||
0xfc, 0xb7, 0x4a, 0x5c, 0xba, 0x76, 0xbb, 0x4d, 0xba, 0xa6, 0xd1, 0xeb, 0x6a, 0x75, 0xb0, 0x46,
|
||||
0x55, 0xdf, 0x60, 0xa1, 0x50, 0x18, 0xec, 0x13, 0xf9, 0xdf, 0xfc, 0x8f, 0x72, 0xb9, 0x4c, 0xcf,
|
||||
0x2b, 0x95, 0xc1, 0x2f, 0x1d, 0xbe, 0x3a, 0x7c, 0xaa, 0x43, 0x31, 0xba, 0x34, 0x67, 0xb1, 0x3d,
|
||||
0xc0, 0x95, 0x9f, 0xce, 0x86, 0x85, 0x17, 0x67, 0x2d, 0xb6, 0x97, 0xb8, 0xae, 0xe4, 0x67, 0x42,
|
||||
0x86, 0x3c, 0xb1, 0x0e, 0xb9, 0x7d, 0x8d, 0xe2, 0x36, 0x25, 0x9f, 0x4c, 0x6c, 0x9c, 0x68, 0xbc,
|
||||
0xc8, 0x15, 0x19, 0xaf, 0x01, 0x07, 0xeb, 0x6b, 0x84, 0x36, 0xf3, 0xcc, 0x6f, 0x8a, 0x62, 0x73,
|
||||
0xf4, 0xba, 0x5d, 0x26, 0xc4, 0x1b, 0x01, 0x43, 0x0e, 0x72, 0x45, 0xf6, 0xf4, 0xea, 0x39, 0xd6,
|
||||
0x1f, 0x9f, 0xf8, 0x57, 0xb0, 0x58, 0x23, 0xd3, 0x34, 0x3f, 0xfb, 0x7b, 0xe9, 0x17, 0x1a, 0x27,
|
||||
0x26, 0xaa, 0xac, 0xdf, 0x0d, 0x9b, 0x23, 0xc6, 0x21, 0xc4, 0xbc, 0xa9, 0x22, 0x07, 0xb9, 0x51,
|
||||
0xf6, 0x60, 0xed, 0x16, 0xbb, 0x72, 0xa6, 0xeb, 0xfa, 0x77, 0xdb, 0xb6, 0x8f, 0x86, 0x46, 0xfe,
|
||||
0xcd, 0x41, 0x74, 0x59, 0x1c, 0x05, 0x4d, 0xbf, 0x29, 0x8a, 0xcd, 0x11, 0xe3, 0x10, 0xe2, 0xed,
|
||||
0x80, 0x21, 0x07, 0xb9, 0x22, 0x7b, 0xb5, 0x34, 0x4a, 0xd7, 0xf3, 0x13, 0xb4, 0x53, 0x1a, 0x15,
|
||||
0xd9, 0x48, 0xe2, 0x79, 0x14, 0x7d, 0x47, 0xe2, 0x99, 0x23, 0xbe, 0x07, 0xe4, 0xfe, 0x09, 0x8b,
|
||||
0x35, 0xc2, 0x11, 0x2c, 0x7e, 0x3d, 0x86, 0x92, 0xf9, 0xc6, 0x19, 0x62, 0x91, 0x89, 0xc7, 0x75,
|
||||
0x3f, 0x16, 0x6b, 0x34, 0xb4, 0x3f, 0x27, 0xff, 0x8d, 0xfe, 0x49, 0xa3, 0xdf, 0xf4, 0x5e, 0xec,
|
||||
0x57, 0x87, 0xb9, 0x43, 0x28, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60,
|
||||
0x82,
|
||||
};
|
||||
|
||||
const BITMAP_OPAQUE add_component_xpm[1] = {{ png, sizeof( png ), "add_component_xpm" }};
|
||||
|
||||
@@ -8,33 +8,48 @@
|
||||
static const unsigned char png[] = {
|
||||
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
|
||||
0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c,
|
||||
0xce, 0x00, 0x00, 0x01, 0x88, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xdd, 0xd6, 0xb1, 0x2b, 0xc4,
|
||||
0x61, 0x1c, 0xc7, 0xf1, 0xf7, 0xf9, 0x1d, 0xb9, 0xa8, 0xc3, 0x5d, 0x57, 0x9e, 0x94, 0x0c, 0x32,
|
||||
0x51, 0x94, 0x49, 0x92, 0x59, 0x16, 0x75, 0x83, 0x41, 0x99, 0x0c, 0x12, 0x19, 0x18, 0x44, 0x49,
|
||||
0x59, 0xee, 0xf7, 0x60, 0x10, 0x25, 0xc4, 0x72, 0x9c, 0xe7, 0xce, 0x1f, 0x60, 0x30, 0x1a, 0x0c,
|
||||
0x4a, 0x99, 0x2f, 0x25, 0x9b, 0xe5, 0x46, 0x4a, 0xbe, 0x06, 0x77, 0xbf, 0x7b, 0x58, 0xa4, 0x7e,
|
||||
0xcf, 0x0d, 0x86, 0xef, 0xf2, 0x0c, 0xcf, 0xab, 0xcf, 0xf7, 0xf9, 0x3e, 0x4f, 0x0f, 0x22, 0x42,
|
||||
0x2d, 0xca, 0xdd, 0xc6, 0x9a, 0x65, 0x34, 0x4f, 0xf8, 0xcc, 0x39, 0x83, 0xd8, 0xa1, 0x05, 0xcd,
|
||||
0x3b, 0x1a, 0x41, 0x53, 0x74, 0x07, 0x6d, 0x91, 0x2e, 0x23, 0x82, 0xe6, 0xc6, 0x1d, 0xa4, 0x39,
|
||||
0x0e, 0xa0, 0x2d, 0xd6, 0x5c, 0x42, 0xcf, 0x56, 0xa2, 0x41, 0x27, 0x10, 0xdb, 0xf4, 0x5a, 0xc8,
|
||||
0x0b, 0xeb, 0xd4, 0xb9, 0x81, 0x7c, 0x96, 0xac, 0xb6, 0x65, 0x9d, 0x8d, 0x37, 0x9a, 0x6b, 0x2b,
|
||||
0xd1, 0x94, 0x13, 0x08, 0x9f, 0x26, 0x34, 0x6f, 0x65, 0xe4, 0x03, 0x9f, 0x94, 0x2b, 0x68, 0xdc,
|
||||
0x6a, 0xdb, 0x9d, 0xb3, 0x97, 0x01, 0xcd, 0x9e, 0xd5, 0xb6, 0x4d, 0x97, 0x50, 0x31, 0x80, 0x32,
|
||||
0x0c, 0x3b, 0x81, 0xc8, 0xd0, 0x6d, 0xa5, 0x29, 0xb1, 0x4e, 0x34, 0x54, 0xe8, 0x12, 0x3a, 0xf2,
|
||||
0x70, 0x7a, 0x1a, 0xe3, 0x65, 0xaf, 0x0d, 0x59, 0xe8, 0x47, 0xba, 0x16, 0xb9, 0x0a, 0xf5, 0xf5,
|
||||
0x2e, 0x40, 0x9f, 0x81, 0x92, 0x01, 0xb1, 0xeb, 0xbc, 0x8e, 0x37, 0x03, 0x23, 0xa1, 0x41, 0x06,
|
||||
0xee, 0x0d, 0xc8, 0xbe, 0xe7, 0xc9, 0x64, 0x3c, 0x2e, 0xe9, 0x78, 0x5c, 0x76, 0xa3, 0xd1, 0x0a,
|
||||
0x58, 0x3c, 0x80, 0xfa, 0x6f, 0x10, 0x9a, 0x59, 0x34, 0x25, 0xab, 0xc7, 0xbf, 0x56, 0x72, 0xb5,
|
||||
0x9a, 0x60, 0x28, 0x99, 0x14, 0xa5, 0x94, 0x28, 0xa5, 0xa4, 0x3f, 0x95, 0x92, 0x8b, 0xf2, 0x7a,
|
||||
0x0e, 0x06, 0x7e, 0x42, 0x8f, 0x7f, 0x41, 0xd0, 0x48, 0xcf, 0xdc, 0xd7, 0x66, 0xd9, 0x48, 0x44,
|
||||
0x3a, 0xda, 0xdb, 0x03, 0x48, 0x29, 0x25, 0x87, 0x9e, 0x27, 0x06, 0x24, 0x0f, 0x13, 0xdf, 0x21,
|
||||
0x9f, 0x79, 0x34, 0xaf, 0x7f, 0x81, 0x9a, 0x37, 0xaa, 0x89, 0xc6, 0x5a, 0x5b, 0x03, 0x64, 0x34,
|
||||
0x91, 0x08, 0xd6, 0x0b, 0xd0, 0x1d, 0xd6, 0x19, 0xe5, 0xcb, 0x2d, 0x92, 0xb5, 0xc6, 0x46, 0x59,
|
||||
0x89, 0xc5, 0x24, 0x17, 0x89, 0x54, 0xa0, 0xeb, 0xd0, 0x86, 0xe1, 0x0c, 0x92, 0x06, 0x6e, 0x7f,
|
||||
0x4e, 0x9d, 0x81, 0x87, 0x4b, 0xe8, 0x0c, 0xf5, 0x1e, 0x19, 0xf0, 0x0c, 0x4c, 0x1b, 0x38, 0x32,
|
||||
0x70, 0x62, 0x60, 0xc6, 0x40, 0x43, 0xcd, 0x7e, 0x41, 0xff, 0x1f, 0xfa, 0x04, 0xa0, 0xb0, 0xd7,
|
||||
0x03, 0x0b, 0xe0, 0xec, 0xc3, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60,
|
||||
0x82,
|
||||
0xce, 0x00, 0x00, 0x02, 0x7e, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xed, 0xd6, 0x41, 0x88, 0x55,
|
||||
0x55, 0x1c, 0xc7, 0xf1, 0xcf, 0x7b, 0xf3, 0x9a, 0x19, 0xa7, 0x99, 0x67, 0x38, 0x8a, 0x4d, 0x23,
|
||||
0x8d, 0x23, 0x9a, 0xf8, 0xe6, 0xbd, 0x73, 0x89, 0x49, 0x43, 0x89, 0x4c, 0x2d, 0xd2, 0x45, 0xd1,
|
||||
0x42, 0x49, 0xb3, 0xb1, 0x48, 0x28, 0xca, 0x48, 0x4a, 0x0d, 0x87, 0x79, 0x77, 0x32, 0xca, 0x30,
|
||||
0x30, 0x5b, 0x24, 0x39, 0x44, 0x41, 0x2d, 0xda, 0xa4, 0xa5, 0xe0, 0x26, 0x71, 0x23, 0x4d, 0x09,
|
||||
0x15, 0xb4, 0x08, 0xf1, 0x09, 0x41, 0x8b, 0x16, 0xad, 0x5a, 0x04, 0x31, 0x53, 0x12, 0x7a, 0x5a,
|
||||
0x78, 0xe7, 0x31, 0x33, 0x22, 0x91, 0x3e, 0x23, 0xc2, 0xc5, 0x17, 0xce, 0xbd, 0x8b, 0xfb, 0xbd,
|
||||
0xbf, 0xff, 0xff, 0x7f, 0xee, 0xb9, 0x62, 0x8c, 0xfe, 0x0d, 0xdc, 0x10, 0xfd, 0xa7, 0x44, 0x86,
|
||||
0xad, 0x31, 0xe4, 0x1e, 0xe4, 0xae, 0x9b, 0xc8, 0x1e, 0x45, 0xa9, 0xdf, 0xa5, 0xa2, 0x21, 0x7b,
|
||||
0x27, 0x64, 0xd7, 0x23, 0xcd, 0x13, 0x52, 0x51, 0x2a, 0x7a, 0xc1, 0x21, 0xcc, 0x46, 0xa1, 0xf1,
|
||||
0xa2, 0xaa, 0x13, 0x75, 0xd1, 0x0a, 0xef, 0x61, 0x2d, 0x66, 0x36, 0x56, 0x32, 0x68, 0x8e, 0xd4,
|
||||
0x9f, 0x52, 0xd1, 0xa0, 0x71, 0x05, 0x07, 0xb0, 0x09, 0x9d, 0x8d, 0x4e, 0xb3, 0xad, 0x9e, 0x66,
|
||||
0xc0, 0xf7, 0xd8, 0x87, 0x75, 0x28, 0x36, 0x56, 0x94, 0x1a, 0xad, 0x8b, 0xfa, 0x1d, 0x43, 0x8a,
|
||||
0x04, 0xcd, 0xd7, 0xfc, 0xf0, 0xb3, 0x95, 0xca, 0xbd, 0xe7, 0x92, 0x64, 0xdf, 0xd7, 0xfd, 0x7d,
|
||||
0x9f, 0x0c, 0x6c, 0x9e, 0x7d, 0xb1, 0xb8, 0xbb, 0x29, 0xda, 0x6d, 0x5c, 0x93, 0x77, 0xf0, 0x1c,
|
||||
0xba, 0x91, 0xbf, 0x26, 0x49, 0x2d, 0x49, 0x0e, 0xd6, 0x42, 0x88, 0x93, 0x39, 0xb5, 0x6c, 0x49,
|
||||
0x5c, 0xf6, 0x48, 0xfb, 0x0f, 0x78, 0x13, 0x0f, 0x61, 0x26, 0x72, 0x57, 0x2d, 0x39, 0x97, 0x24,
|
||||
0x4f, 0x4d, 0x16, 0x9c, 0x4e, 0x4a, 0x17, 0x26, 0xd6, 0xa3, 0xa1, 0x34, 0xd6, 0x59, 0x28, 0xec,
|
||||
0xcd, 0xca, 0xd6, 0x32, 0x65, 0x1f, 0xa9, 0x7a, 0x58, 0xd5, 0x7a, 0xc3, 0x1e, 0x95, 0x7a, 0xcc,
|
||||
0xb0, 0x01, 0xa9, 0x27, 0x0d, 0xdb, 0x2a, 0xf5, 0xb4, 0xaa, 0x67, 0xa5, 0x9e, 0x57, 0xb5, 0x5d,
|
||||
0xea, 0xa5, 0xd1, 0xa5, 0xa5, 0x9f, 0x6b, 0x21, 0xc4, 0xe3, 0xe5, 0xc5, 0x63, 0x2d, 0x1d, 0xf9,
|
||||
0xdf, 0xdc, 0x24, 0xae, 0x28, 0x77, 0xd4, 0xc5, 0x3b, 0xbb, 0xba, 0x3e, 0x46, 0x0f, 0xf2, 0x53,
|
||||
0x45, 0xa9, 0x3f, 0xea, 0x8d, 0xfc, 0x1b, 0x0a, 0x43, 0xb9, 0x78, 0x26, 0xa9, 0xc4, 0x5a, 0x08,
|
||||
0x71, 0x79, 0xa9, 0x3d, 0xe2, 0x12, 0x4d, 0xe2, 0x57, 0x95, 0x4b, 0xc9, 0x46, 0x7a, 0x7b, 0x4f,
|
||||
0xe1, 0x0e, 0x14, 0xae, 0x5a, 0x24, 0x15, 0xbf, 0x5c, 0x5a, 0x8a, 0xb5, 0x10, 0xe2, 0xf6, 0x3b,
|
||||
0x6f, 0xad, 0x8b, 0x5a, 0xe7, 0xe4, 0xeb, 0x89, 0xf6, 0x74, 0x77, 0x9f, 0xc4, 0x1a, 0xb4, 0xd7,
|
||||
0x7b, 0x84, 0x9c, 0x17, 0xbd, 0x6c, 0x83, 0x0f, 0xac, 0x73, 0xd4, 0x83, 0x8e, 0x79, 0xc0, 0x51,
|
||||
0xab, 0x7d, 0x6a, 0x95, 0x23, 0xee, 0x73, 0x38, 0xe3, 0xc8, 0x04, 0xef, 0xf7, 0x2f, 0xf8, 0xa9,
|
||||
0x16, 0x42, 0x3c, 0x1b, 0x42, 0x1c, 0x5c, 0x78, 0xdb, 0xaf, 0xf7, 0xcf, 0x2b, 0xfe, 0xf2, 0x79,
|
||||
0x79, 0xf1, 0xf9, 0xec, 0xde, 0xc5, 0x95, 0x1d, 0x1d, 0x1f, 0x61, 0x03, 0x66, 0x4d, 0x15, 0x31,
|
||||
0x17, 0x5b, 0xb3, 0x69, 0x39, 0x30, 0x8d, 0xb7, 0xa6, 0x33, 0xbf, 0xa5, 0x65, 0xe4, 0xdb, 0x72,
|
||||
0x79, 0x7c, 0xfa, 0xd4, 0xd5, 0x42, 0x88, 0x6f, 0xf7, 0xf4, 0x7c, 0x87, 0xfd, 0x57, 0x12, 0xdd,
|
||||
0x92, 0x45, 0xdd, 0x8c, 0x2d, 0x18, 0xc0, 0xe3, 0xd9, 0xf5, 0x26, 0x6c, 0x9c, 0xc6, 0x96, 0xa4,
|
||||
0xad, 0xed, 0xb5, 0xcf, 0x16, 0x2d, 0xfa, 0xf1, 0x4c, 0xa5, 0x72, 0xa1, 0x16, 0x42, 0xfc, 0xa6,
|
||||
0xaf, 0x6f, 0x6c, 0x57, 0x57, 0xd7, 0x17, 0x78, 0x17, 0xaf, 0x63, 0xf5, 0x94, 0xd2, 0x65, 0xb2,
|
||||
0x02, 0x8a, 0xd9, 0xd7, 0x76, 0x32, 0x9d, 0x57, 0x60, 0x2e, 0xee, 0xc2, 0x8e, 0x19, 0xf9, 0xfc,
|
||||
0xc1, 0xdb, 0x9b, 0x9b, 0x3f, 0xc4, 0x08, 0x0e, 0x65, 0x55, 0x78, 0x06, 0xbd, 0x97, 0x0d, 0xc3,
|
||||
0xa4, 0x64, 0xff, 0x84, 0x22, 0x96, 0x63, 0x1b, 0x5e, 0xc5, 0x1b, 0x78, 0x25, 0x6b, 0x41, 0x82,
|
||||
0xb6, 0x86, 0x9c, 0x47, 0xc8, 0xe3, 0x66, 0xcc, 0xc7, 0xdd, 0x58, 0x95, 0xa5, 0x9c, 0x87, 0xd6,
|
||||
0x86, 0x9e, 0xb0, 0x59, 0xb2, 0x26, 0xcc, 0xc8, 0xa4, 0xad, 0xd9, 0x0b, 0xe4, 0xfe, 0xdf, 0x7f,
|
||||
0x41, 0x7f, 0x01, 0x07, 0x61, 0x97, 0xa4, 0xee, 0x5d, 0x02, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x49,
|
||||
0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
};
|
||||
|
||||
const BITMAP_OPAQUE add_corner_xpm[1] = {{ png, sizeof( png ), "add_corner_xpm" }};
|
||||
|
||||
@@ -8,28 +8,40 @@
|
||||
static const unsigned char png[] = {
|
||||
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
|
||||
0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c,
|
||||
0xce, 0x00, 0x00, 0x01, 0x3f, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xb5, 0x95, 0xbd, 0x4a, 0x03,
|
||||
0x41, 0x14, 0x46, 0x4f, 0x82, 0x88, 0x22, 0x58, 0x0b, 0x36, 0x96, 0x22, 0x16, 0x06, 0x7f, 0x48,
|
||||
0xa5, 0x22, 0x88, 0xfa, 0x0e, 0x56, 0xbe, 0x4a, 0x1a, 0x0b, 0x1b, 0x1f, 0x42, 0xb0, 0xb2, 0xf1,
|
||||
0x01, 0xb6, 0xb1, 0x08, 0xe8, 0xce, 0xbd, 0x2b, 0x2e, 0xd8, 0xa8, 0x68, 0x14, 0xa3, 0x8d, 0xbe,
|
||||
0xc1, 0x58, 0x64, 0x75, 0x43, 0xb2, 0xab, 0x71, 0x76, 0xa6, 0x18, 0x66, 0x60, 0x67, 0x38, 0x7c,
|
||||
0x73, 0x76, 0xee, 0xc5, 0x5a, 0x4b, 0xa8, 0x01, 0x57, 0xf3, 0x3f, 0xeb, 0x70, 0x90, 0xeb, 0x3d,
|
||||
0x90, 0x77, 0x30, 0xad, 0x60, 0xa0, 0x1c, 0x22, 0x9f, 0x20, 0x0f, 0xa0, 0xb3, 0x81, 0x40, 0xe6,
|
||||
0x00, 0xe4, 0x03, 0xe4, 0x1e, 0x92, 0x45, 0xef, 0x89, 0x20, 0x99, 0xca, 0xd7, 0xba, 0x0f, 0x66,
|
||||
0xc1, 0xbb, 0x23, 0x90, 0x6d, 0xd0, 0x3b, 0x48, 0x9a, 0x85, 0xdf, 0xfd, 0x40, 0xe2, 0x1d, 0x90,
|
||||
0xb7, 0xcc, 0xc9, 0x0d, 0xa4, 0xe3, 0xde, 0x41, 0x90, 0xec, 0xf6, 0x89, 0x7f, 0x04, 0x59, 0x0a,
|
||||
0x92, 0x08, 0xf4, 0xb0, 0x07, 0x31, 0x4f, 0xa0, 0x8d, 0xd2, 0x7d, 0xee, 0x80, 0x68, 0xac, 0x37,
|
||||
0xdb, 0x1a, 0x98, 0x16, 0xc4, 0xcb, 0xbf, 0xee, 0x77, 0x74, 0xb2, 0x05, 0x72, 0x09, 0x32, 0x37,
|
||||
0xf2, 0x19, 0x87, 0xbf, 0x6b, 0x13, 0xb4, 0x9b, 0x39, 0x69, 0x83, 0xad, 0x7b, 0x07, 0x81, 0xd9,
|
||||
0x00, 0xe9, 0xe6, 0x4e, 0xcc, 0x4a, 0x90, 0x44, 0xa0, 0xa7, 0x2e, 0x10, 0x07, 0x50, 0x67, 0x12,
|
||||
0xe4, 0xe4, 0xbf, 0x90, 0x91, 0x40, 0x60, 0xd6, 0x41, 0xce, 0xa1, 0x3d, 0x5d, 0xe9, 0x19, 0xfc,
|
||||
0x0d, 0x31, 0xaf, 0x99, 0xf8, 0xb3, 0x20, 0xa0, 0x01, 0x48, 0x07, 0x64, 0xd5, 0x3b, 0x08, 0x6c,
|
||||
0x1d, 0xe4, 0x22, 0x83, 0x3c, 0x83, 0xae, 0x55, 0xae, 0x20, 0xe5, 0x89, 0xd2, 0x19, 0x90, 0x08,
|
||||
0xe2, 0xa6, 0x97, 0xc2, 0x3b, 0x7c, 0x5d, 0x7a, 0xfc, 0xfd, 0x08, 0xc1, 0xd6, 0xbc, 0xb5, 0x91,
|
||||
0x62, 0x27, 0x7a, 0xe4, 0xbd, 0xeb, 0x16, 0x88, 0x7f, 0x29, 0x6b, 0x5e, 0xd5, 0xaa, 0x3c, 0xd1,
|
||||
0x04, 0xe8, 0x6d, 0x48, 0x48, 0x5f, 0x22, 0x6d, 0x80, 0xa4, 0xa1, 0x20, 0x03, 0x8e, 0x86, 0xdb,
|
||||
0xaf, 0xcf, 0xf1, 0x05, 0x56, 0x13, 0x40, 0xc7, 0xbb, 0x6a, 0xb9, 0x16, 0x00, 0x00, 0x00, 0x00,
|
||||
0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
0xce, 0x00, 0x00, 0x01, 0xf9, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xbd, 0xd6, 0x3f, 0x48, 0xd4,
|
||||
0x61, 0x1c, 0xc7, 0xf1, 0xd7, 0x73, 0x5d, 0xa6, 0x99, 0x7f, 0x50, 0xa4, 0xb3, 0x41, 0x2a, 0xb2,
|
||||
0x24, 0xa7, 0x08, 0x24, 0x88, 0x9a, 0x1a, 0xca, 0x31, 0x08, 0x6a, 0x6a, 0x08, 0x5a, 0x1d, 0x6b,
|
||||
0x11, 0x2a, 0x24, 0x08, 0x89, 0xa0, 0xa1, 0x96, 0x86, 0x86, 0xa2, 0xad, 0xb1, 0xa1, 0x29, 0x22,
|
||||
0x02, 0xa3, 0x38, 0xb0, 0xa1, 0xa9, 0x2c, 0x24, 0x33, 0x1c, 0x2a, 0xcb, 0x4a, 0xbb, 0xee, 0x69,
|
||||
0xb8, 0xdf, 0xe5, 0x5d, 0x1d, 0x7a, 0x7a, 0xa7, 0x0f, 0x7c, 0xe1, 0xc7, 0xc3, 0xef, 0xf7, 0xbc,
|
||||
0xf9, 0x7d, 0x3f, 0x9f, 0xcf, 0xf3, 0x3c, 0x21, 0xc6, 0x68, 0x3d, 0x46, 0xca, 0x3a, 0x8d, 0x35,
|
||||
0x01, 0x85, 0xe0, 0x64, 0x08, 0x1a, 0xca, 0x26, 0x63, 0x8c, 0x75, 0x2d, 0xe2, 0x39, 0x62, 0x24,
|
||||
0xde, 0x23, 0x86, 0xbf, 0xf3, 0x75, 0x86, 0x9c, 0x4f, 0x20, 0xc5, 0x1a, 0xaa, 0x3b, 0x88, 0x78,
|
||||
0xf6, 0x1f, 0xc8, 0x18, 0xb1, 0x6d, 0x2d, 0x40, 0x3d, 0xe4, 0x3f, 0x14, 0x20, 0xb3, 0x2f, 0x39,
|
||||
0xdd, 0x87, 0xfa, 0xb6, 0x0e, 0x01, 0x8d, 0xdc, 0x1d, 0x64, 0x3a, 0x4b, 0xdf, 0x29, 0xec, 0x43,
|
||||
0x73, 0xf1, 0x9d, 0x50, 0x4b, 0x8e, 0x42, 0x70, 0x01, 0x0b, 0x84, 0x2b, 0xe8, 0x46, 0x1f, 0xcd,
|
||||
0x6d, 0xcc, 0xcd, 0x61, 0x06, 0xaf, 0x62, 0x8c, 0xdf, 0x21, 0x5d, 0x03, 0xe4, 0x12, 0x86, 0x13,
|
||||
0xef, 0x4e, 0x12, 0x1e, 0xe0, 0x37, 0x73, 0xb3, 0x09, 0xe4, 0x35, 0x7e, 0xd6, 0x64, 0x6f, 0xe2,
|
||||
0x48, 0xb9, 0xf0, 0xf9, 0x47, 0x3c, 0x49, 0x23, 0x83, 0xdd, 0xd8, 0xfc, 0xdf, 0x37, 0xab, 0x80,
|
||||
0xec, 0x24, 0xce, 0x2f, 0x42, 0xbe, 0xbc, 0x60, 0x38, 0x93, 0xe8, 0x54, 0xec, 0x52, 0xaa, 0x0e,
|
||||
0x20, 0x69, 0xa6, 0xce, 0x10, 0xf3, 0x7c, 0x1c, 0x67, 0xc7, 0x09, 0xf4, 0x56, 0xfa, 0x8b, 0xd2,
|
||||
0x4a, 0xad, 0x40, 0x93, 0x3d, 0xc5, 0x47, 0xb6, 0x3d, 0xe7, 0xce, 0x28, 0x07, 0x46, 0x98, 0x98,
|
||||
0x41, 0xae, 0x60, 0x8a, 0x25, 0x46, 0x95, 0xed, 0x1a, 0x25, 0x7e, 0x25, 0xee, 0xc7, 0x06, 0xf4,
|
||||
0xe0, 0x18, 0x0e, 0x61, 0x17, 0x36, 0x96, 0x66, 0xa6, 0xe2, 0x1a, 0x55, 0x40, 0xae, 0x96, 0x08,
|
||||
0x3f, 0x4d, 0xcc, 0xa0, 0x21, 0xb1, 0x73, 0xa6, 0xe8, 0xdc, 0x65, 0xd7, 0x59, 0x06, 0x72, 0xad,
|
||||
0xdc, 0x5d, 0x9f, 0x9f, 0x72, 0xab, 0x25, 0x11, 0x3e, 0x9d, 0xec, 0xfe, 0xa1, 0x9a, 0xae, 0x2c,
|
||||
0x93, 0xa3, 0xdc, 0xfc, 0x62, 0xd4, 0xa6, 0xb2, 0x0c, 0x5c, 0xe6, 0x7d, 0x2b, 0x7e, 0xc4, 0x18,
|
||||
0x73, 0x2b, 0x0a, 0xde, 0x12, 0xee, 0x82, 0x66, 0xde, 0x3c, 0x64, 0x32, 0x4b, 0xf7, 0x71, 0x1c,
|
||||
0x44, 0xc7, 0x6a, 0xf2, 0x57, 0xa9, 0x5d, 0x17, 0x89, 0x5b, 0x13, 0x58, 0x13, 0x5d, 0xfd, 0x74,
|
||||
0x0c, 0x62, 0x00, 0x5d, 0x95, 0x32, 0xb2, 0x22, 0x10, 0x31, 0x90, 0xbf, 0x51, 0xd0, 0xe2, 0x57,
|
||||
0x96, 0x99, 0x2d, 0x09, 0xac, 0x15, 0xdb, 0xd1, 0x5e, 0xd3, 0xc6, 0x5b, 0x02, 0xb9, 0x59, 0x2e,
|
||||
0xfc, 0xc4, 0x75, 0x9a, 0x52, 0x8b, 0x21, 0xad, 0x4e, 0xf4, 0x25, 0xa4, 0x88, 0xc8, 0x0d, 0x95,
|
||||
0x43, 0xde, 0x3d, 0xa3, 0xfb, 0x30, 0x3a, 0xeb, 0x76, 0x5e, 0x15, 0x68, 0x8f, 0xdb, 0x99, 0x1f,
|
||||
0x2f, 0x40, 0xde, 0x8e, 0xd1, 0x75, 0x14, 0xfd, 0x68, 0xac, 0x2b, 0xa8, 0x00, 0xbb, 0xdd, 0xcb,
|
||||
0xc4, 0x7d, 0x3a, 0x8f, 0x60, 0x6f, 0xe1, 0x20, 0xab, 0xad, 0x5d, 0xa5, 0x55, 0x76, 0xf0, 0x85,
|
||||
0xd0, 0xd2, 0xce, 0xb7, 0x4d, 0xf8, 0x14, 0x63, 0x5c, 0xa8, 0xe7, 0x15, 0xec, 0x0f, 0x67, 0x83,
|
||||
0x90, 0xe8, 0x8e, 0xba, 0xc6, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42,
|
||||
0x60, 0x82,
|
||||
};
|
||||
|
||||
const BITMAP_OPAQUE add_dashed_line_xpm[1] = {{ png, sizeof( png ), "add_dashed_line_xpm" }};
|
||||
|
||||
@@ -8,31 +8,33 @@
|
||||
static const unsigned char png[] = {
|
||||
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
|
||||
0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c,
|
||||
0xce, 0x00, 0x00, 0x01, 0x70, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xed, 0x96, 0x3d, 0x4b, 0xc3,
|
||||
0x40, 0x18, 0xc7, 0x2f, 0x34, 0x89, 0x22, 0xc4, 0x04, 0xdc, 0x7c, 0x59, 0x24, 0x90, 0xad, 0x79,
|
||||
0x4f, 0xd6, 0xa8, 0x73, 0x15, 0x71, 0x13, 0x1c, 0xfd, 0x04, 0x82, 0x9b, 0xf8, 0x09, 0xea, 0xd4,
|
||||
0xb9, 0xa3, 0xb8, 0xea, 0x66, 0x3f, 0x86, 0x38, 0x0b, 0x5a, 0xb5, 0x20, 0x0a, 0xe2, 0xd4, 0x45,
|
||||
0xcf, 0xff, 0x23, 0x17, 0x08, 0x35, 0xea, 0x55, 0x4d, 0x29, 0x68, 0xe0, 0xc7, 0x71, 0xcf, 0xe5,
|
||||
0x9e, 0xdf, 0xe5, 0xb9, 0x3b, 0x08, 0xe3, 0x9c, 0xb3, 0x51, 0xc0, 0xc6, 0x46, 0x64, 0xdb, 0xf6,
|
||||
0x44, 0x18, 0x86, 0x7d, 0xc1, 0xce, 0xe0, 0x38, 0x62, 0xcf, 0xe0, 0xee, 0xc7, 0xa2, 0x2c, 0xcb,
|
||||
0x26, 0x91, 0x88, 0x0b, 0xfa, 0x41, 0x10, 0xd4, 0x07, 0x44, 0x14, 0x7f, 0xfc, 0x55, 0x51, 0x14,
|
||||
0x45, 0x47, 0x68, 0xcf, 0xe8, 0x2b, 0x2b, 0x15, 0x25, 0x49, 0x32, 0x83, 0xb6, 0x07, 0x9a, 0x95,
|
||||
0x8a, 0xa8, 0x8f, 0xd2, 0x35, 0x68, 0x5f, 0xd0, 0x2e, 0x57, 0x2a, 0x22, 0x50, 0xc2, 0x36, 0xfa,
|
||||
0x57, 0x9e, 0xe7, 0x59, 0x95, 0x8a, 0xd2, 0x34, 0x9d, 0x46, 0xff, 0x12, 0x1c, 0x56, 0x2a, 0x22,
|
||||
0x7c, 0xdf, 0x5f, 0x41, 0xec, 0x65, 0x28, 0x11, 0xea, 0x7d, 0x8c, 0x72, 0x9c, 0x0c, 0x23, 0x12,
|
||||
0x25, 0x6c, 0x7d, 0x26, 0xa2, 0x9c, 0x79, 0xde, 0xe2, 0xc9, 0xe1, 0x1f, 0xad, 0x06, 0x63, 0x1a,
|
||||
0x63, 0x4c, 0x79, 0xb7, 0x4a, 0xc4, 0x68, 0x21, 0xc5, 0xe3, 0x5e, 0x72, 0xc7, 0xb8, 0xb4, 0xe8,
|
||||
0xbb, 0x48, 0x89, 0xf0, 0xe8, 0x60, 0x03, 0x6c, 0x7d, 0x59, 0x7f, 0xc6, 0xb6, 0xc1, 0x26, 0x98,
|
||||
0x92, 0x16, 0xe1, 0x89, 0x40, 0x0b, 0x3c, 0x00, 0x0a, 0x34, 0x24, 0x44, 0xab, 0xe2, 0xdd, 0x27,
|
||||
0xd0, 0x06, 0x4b, 0x54, 0xd6, 0x52, 0x91, 0xe3, 0x38, 0x5c, 0x55, 0xd5, 0x9e, 0x98, 0xf0, 0x86,
|
||||
0xa2, 0x28, 0x1c, 0x77, 0xa5, 0x4b, 0x77, 0x46, 0xd0, 0x15, 0x5c, 0x0b, 0x6e, 0x08, 0x9c, 0xc0,
|
||||
0x5b, 0x7a, 0xb7, 0x38, 0xb7, 0x56, 0xab, 0xdd, 0x53, 0xce, 0xd2, 0x2f, 0xb2, 0x2c, 0xcb, 0xd5,
|
||||
0x34, 0xed, 0x00, 0x93, 0x2e, 0xf2, 0x09, 0x88, 0xad, 0xc7, 0x71, 0xbc, 0x40, 0xe0, 0xfe, 0xcc,
|
||||
0x13, 0xae, 0xeb, 0xce, 0x11, 0x10, 0xcc, 0x12, 0x86, 0x61, 0xac, 0x15, 0x16, 0x77, 0xae, 0xeb,
|
||||
0xfa, 0xbe, 0x69, 0x9a, 0x8b, 0xb2, 0x7b, 0x94, 0x8a, 0x12, 0xee, 0x49, 0x94, 0x6e, 0x17, 0x34,
|
||||
0x41, 0x7d, 0x7c, 0x4f, 0xdd, 0xbf, 0xe8, 0xef, 0x8a, 0x4e, 0x41, 0xa7, 0x02, 0x51, 0x27, 0xcf,
|
||||
0x3b, 0xb2, 0xff, 0xba, 0x57, 0xa9, 0x62, 0x87, 0xa0, 0x34, 0xfb, 0xea, 0xd6, 0x00, 0x00, 0x00,
|
||||
0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
0xce, 0x00, 0x00, 0x01, 0x95, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xcd, 0xd6, 0xbd, 0x4b, 0xc3,
|
||||
0x40, 0x18, 0x06, 0xf0, 0x03, 0x2d, 0x16, 0xe2, 0x20, 0xa2, 0x4e, 0x2a, 0xd2, 0x8a, 0x83, 0x14,
|
||||
0x6c, 0x51, 0x10, 0xd4, 0xd5, 0xd5, 0x59, 0xc4, 0x41, 0x04, 0x67, 0xb5, 0x83, 0x82, 0x78, 0x83,
|
||||
0x8a, 0x82, 0x83, 0xb8, 0x09, 0xfe, 0x03, 0x45, 0x5c, 0x84, 0x2e, 0x2e, 0x8e, 0xce, 0xba, 0x38,
|
||||
0x38, 0xd6, 0x49, 0xc1, 0x0f, 0x1c, 0x83, 0xad, 0x9e, 0xcf, 0x5b, 0xde, 0x2b, 0x67, 0x0c, 0x77,
|
||||
0xad, 0x24, 0xc1, 0xc0, 0xaf, 0x49, 0xdf, 0x24, 0xf7, 0x5c, 0x2e, 0x97, 0x10, 0xa1, 0x94, 0x12,
|
||||
0x49, 0x10, 0xff, 0x2a, 0x08, 0x4b, 0x05, 0x7c, 0xd8, 0x0c, 0xd4, 0xa9, 0xf6, 0x1e, 0x65, 0xd0,
|
||||
0x13, 0xd0, 0xc6, 0x17, 0xcc, 0x1b, 0x75, 0xfa, 0xf1, 0xe3, 0x08, 0xfa, 0x60, 0x33, 0x46, 0x50,
|
||||
0x15, 0x36, 0xa2, 0x0e, 0x2a, 0x41, 0x8d, 0x86, 0x0b, 0x46, 0x8c, 0xa0, 0xad, 0xa8, 0x83, 0xf6,
|
||||
0xe1, 0x9c, 0xb7, 0x2b, 0x71, 0x07, 0x8d, 0xc2, 0x15, 0xff, 0x8f, 0x35, 0x28, 0x0d, 0x05, 0xb8,
|
||||
0x89, 0x3d, 0x88, 0x6b, 0xb3, 0x2d, 0x07, 0xe5, 0x72, 0xca, 0x27, 0x2d, 0x06, 0x09, 0x57, 0x90,
|
||||
0xd9, 0xae, 0x2e, 0x28, 0x62, 0x09, 0xea, 0xa0, 0x29, 0x0c, 0x52, 0x07, 0x71, 0xdd, 0x83, 0x1d,
|
||||
0x4b, 0x50, 0xa3, 0xdd, 0x1f, 0x05, 0xdb, 0x10, 0x60, 0x29, 0x06, 0x83, 0xb8, 0x2e, 0x5d, 0x41,
|
||||
0xb4, 0x3f, 0x58, 0x90, 0x81, 0x46, 0xc6, 0xe0, 0x18, 0x16, 0xa1, 0x0d, 0xda, 0x43, 0x3a, 0xb0,
|
||||
0x02, 0x27, 0x30, 0x69, 0x09, 0x92, 0xbf, 0x0b, 0x42, 0xf4, 0xc0, 0x2a, 0xdc, 0x1a, 0x53, 0x38,
|
||||
0x63, 0xb9, 0xd2, 0xac, 0x71, 0xdc, 0x7d, 0xbd, 0xf7, 0x42, 0x0c, 0xb8, 0x82, 0xcc, 0xc6, 0x35,
|
||||
0xfd, 0x26, 0x78, 0x83, 0x67, 0xf6, 0xc2, 0x5e, 0xd9, 0x67, 0xc8, 0x79, 0x25, 0x5b, 0xd0, 0x2e,
|
||||
0xdf, 0x8b, 0x6b, 0xe3, 0x64, 0x5a, 0x9f, 0xc2, 0x04, 0x0c, 0xb3, 0x2c, 0xcb, 0xc0, 0x38, 0x77,
|
||||
0x46, 0x77, 0xea, 0x0e, 0x0e, 0xa0, 0xdb, 0x35, 0x74, 0x73, 0xbc, 0x3e, 0x84, 0x4b, 0x78, 0x84,
|
||||
0x0b, 0x58, 0x63, 0xeb, 0xac, 0xc8, 0xce, 0xe0, 0x01, 0xca, 0x1c, 0x20, 0x35, 0x57, 0x50, 0x0a,
|
||||
0xa6, 0x61, 0x09, 0xb6, 0xb9, 0xb6, 0x07, 0x83, 0xd0, 0x67, 0xe8, 0x65, 0x54, 0xef, 0x37, 0x8e,
|
||||
0xa5, 0x7b, 0xb4, 0x40, 0x57, 0x6a, 0x0d, 0x0a, 0xdc, 0xe8, 0x4e, 0x9a, 0x4d, 0x3c, 0xb3, 0x0a,
|
||||
0x96, 0x09, 0x41, 0xb3, 0x73, 0x99, 0x87, 0x31, 0xdd, 0xd4, 0xac, 0xb3, 0x3d, 0xb4, 0x96, 0x7d,
|
||||
0x29, 0xc7, 0x73, 0xd4, 0x7c, 0xd0, 0x5f, 0x84, 0x05, 0xe1, 0x9d, 0x54, 0xab, 0x46, 0x1d, 0x94,
|
||||
0xcf, 0xab, 0x21, 0xcf, 0x9b, 0x3a, 0x6a, 0x04, 0x19, 0xaf, 0x12, 0x19, 0xf9, 0xd7, 0x8f, 0x9e,
|
||||
0x85, 0x09, 0x04, 0x75, 0xd5, 0x25, 0xf5, 0x5d, 0xf7, 0x0d, 0x2a, 0x30, 0xaf, 0x71, 0x68, 0xa7,
|
||||
0x5d, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
};
|
||||
|
||||
const BITMAP_OPAQUE add_dimension_xpm[1] = {{ png, sizeof( png ), "add_dimension_xpm" }};
|
||||
|
||||
@@ -8,15 +8,15 @@
|
||||
static const unsigned char png[] = {
|
||||
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
|
||||
0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c,
|
||||
0xce, 0x00, 0x00, 0x00, 0x74, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xed, 0xd5, 0x31, 0x0a, 0xc2,
|
||||
0x40, 0x14, 0x84, 0xe1, 0xff, 0x45, 0x21, 0x2b, 0xd8, 0x59, 0x58, 0x5b, 0x0a, 0x39, 0x59, 0x9a,
|
||||
0xdc, 0x44, 0xb0, 0xf1, 0x64, 0xe9, 0x53, 0x58, 0x6d, 0x6f, 0xb1, 0x62, 0x92, 0xf1, 0x14, 0x6f,
|
||||
0x43, 0xe0, 0xcd, 0x05, 0x3e, 0x66, 0x9a, 0x31, 0x49, 0xd4, 0x48, 0x43, 0xa5, 0x04, 0x14, 0x50,
|
||||
0x40, 0x3b, 0x82, 0x8e, 0x00, 0xf6, 0xb2, 0x33, 0x85, 0xce, 0x45, 0x38, 0x30, 0x69, 0x50, 0x36,
|
||||
0x1e, 0x9c, 0x58, 0x79, 0x03, 0x17, 0xa7, 0x32, 0x99, 0x1f, 0xf7, 0x86, 0x2f, 0x09, 0x98, 0x5d,
|
||||
0x57, 0x6b, 0x29, 0x26, 0x09, 0x7b, 0xda, 0x95, 0x85, 0x9b, 0x0b, 0x93, 0x18, 0xd5, 0xeb, 0x63,
|
||||
0x71, 0x13, 0x01, 0x05, 0x14, 0xd0, 0x76, 0xd0, 0x1f, 0x27, 0x57, 0x1c, 0xc2, 0x57, 0xbf, 0x3f,
|
||||
0x4a, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
0xce, 0x00, 0x00, 0x00, 0x6b, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xed, 0xd3, 0xb1, 0x0a, 0x40,
|
||||
0x50, 0x1c, 0x85, 0xf1, 0xef, 0xca, 0xe8, 0x01, 0xac, 0x1e, 0xc1, 0x64, 0xf0, 0x2c, 0x06, 0x83,
|
||||
0xbc, 0x85, 0x6c, 0xbc, 0x80, 0x52, 0x94, 0x47, 0xfd, 0x1b, 0x88, 0x94, 0xd1, 0xbd, 0xa5, 0xce,
|
||||
0xf0, 0xcd, 0xbf, 0xe5, 0x1c, 0xcc, 0x8c, 0x10, 0x21, 0x48, 0x90, 0xa0, 0x1f, 0x41, 0x4c, 0x24,
|
||||
0xac, 0x8c, 0xbe, 0xba, 0xa1, 0x8d, 0x94, 0x05, 0xf3, 0x16, 0xb8, 0x50, 0x50, 0x76, 0x40, 0x3d,
|
||||
0x31, 0x33, 0x39, 0x25, 0x1d, 0x05, 0xc3, 0xe7, 0x41, 0x73, 0x8d, 0x01, 0x70, 0x40, 0x05, 0xb4,
|
||||
0x1e, 0xaa, 0x1f, 0xab, 0x3b, 0xb1, 0xc8, 0x47, 0x3a, 0xac, 0x20, 0x41, 0x82, 0xde, 0xdb, 0x01,
|
||||
0xe4, 0x1f, 0xb1, 0x9e, 0xf9, 0x08, 0x63, 0x44, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44,
|
||||
0xae, 0x42, 0x60, 0x82,
|
||||
};
|
||||
|
||||
const BITMAP_OPAQUE add_entry_xpm[1] = {{ png, sizeof( png ), "add_entry_xpm" }};
|
||||
|
||||
@@ -8,36 +8,42 @@
|
||||
static const unsigned char png[] = {
|
||||
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
|
||||
0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c,
|
||||
0xce, 0x00, 0x00, 0x01, 0xc1, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xed, 0x96, 0x31, 0x48, 0x02,
|
||||
0x61, 0x14, 0xc7, 0x5f, 0x77, 0xa6, 0x17, 0x72, 0xd0, 0xe2, 0x68, 0xb9, 0x38, 0x8a, 0x42, 0x81,
|
||||
0x63, 0x2d, 0x42, 0x53, 0x21, 0x4e, 0x82, 0xa3, 0x2d, 0x4a, 0xd0, 0x12, 0x21, 0x2e, 0x5a, 0x4a,
|
||||
0x44, 0x51, 0x38, 0x55, 0x93, 0x05, 0x0d, 0x89, 0x38, 0xeb, 0x64, 0x2d, 0x82, 0x46, 0x60, 0x20,
|
||||
0x68, 0x82, 0xe0, 0x2a, 0x35, 0x09, 0x89, 0x92, 0x79, 0xff, 0x3e, 0x6f, 0x28, 0xaa, 0xb3, 0xba,
|
||||
0x32, 0x69, 0xe8, 0xe0, 0x0f, 0x1f, 0xf7, 0xf1, 0xde, 0xef, 0x1e, 0xff, 0xf7, 0xbd, 0xfb, 0x08,
|
||||
0x00, 0x8d, 0x42, 0xf4, 0x0f, 0xfa, 0xfb, 0xa0, 0x10, 0x91, 0xc0, 0x74, 0xcc, 0x74, 0xa1, 0x46,
|
||||
0x61, 0xa2, 0x35, 0xb5, 0xa0, 0x79, 0x26, 0x1c, 0x58, 0xad, 0x88, 0xcf, 0xcd, 0x7d, 0x49, 0x87,
|
||||
0x36, 0x1b, 0xfa, 0x31, 0x0c, 0xb6, 0xa2, 0x1a, 0x54, 0x3f, 0x3f, 0xc7, 0x57, 0x1f, 0xa9, 0xd7,
|
||||
0xc3, 0xd9, 0xd2, 0x92, 0x14, 0x1e, 0x1b, 0x93, 0x58, 0xec, 0xe2, 0x8f, 0x41, 0x9d, 0x4e, 0x07,
|
||||
0xa1, 0x50, 0x08, 0x99, 0x4c, 0xe6, 0xdd, 0xde, 0x43, 0xab, 0x85, 0xa3, 0x99, 0x99, 0x5e, 0x98,
|
||||
0xe3, 0xda, 0x2c, 0x7e, 0xf6, 0x47, 0xa0, 0x54, 0x2a, 0x05, 0x8e, 0xe3, 0x60, 0xb1, 0x58, 0x14,
|
||||
0x2b, 0xbb, 0x6f, 0x34, 0xb0, 0x6f, 0x34, 0x3e, 0x6e, 0xf0, 0xfc, 0x6d, 0x84, 0x68, 0xfa, 0xdb,
|
||||
0x20, 0x97, 0xcb, 0x05, 0x9f, 0xcf, 0x07, 0x41, 0x10, 0x50, 0x2a, 0x95, 0x14, 0x61, 0x77, 0xe5,
|
||||
0x32, 0xb6, 0x44, 0xf1, 0x71, 0x43, 0xa3, 0xb9, 0x61, 0x79, 0x26, 0x55, 0x83, 0x9a, 0xcd, 0xa6,
|
||||
0x0c, 0x28, 0x16, 0x8b, 0x70, 0x3a, 0x9d, 0x08, 0x04, 0x02, 0x03, 0x3d, 0xab, 0x67, 0xb3, 0x60,
|
||||
0xa0, 0xbe, 0x67, 0xd9, 0x23, 0xa2, 0x71, 0x55, 0xa0, 0x78, 0x3c, 0x0e, 0xb3, 0xd9, 0x2c, 0xaf,
|
||||
0x13, 0x89, 0x04, 0x4c, 0x26, 0x13, 0x24, 0x49, 0x1a, 0x08, 0xbb, 0x3e, 0x39, 0x91, 0x3b, 0x71,
|
||||
0xd9, 0x48, 0x97, 0xb4, 0xc3, 0xd2, 0xbe, 0x68, 0x9d, 0xf6, 0x68, 0x62, 0x20, 0xc8, 0xe1, 0x70,
|
||||
0x20, 0x18, 0x0c, 0xca, 0xeb, 0x16, 0x33, 0x5e, 0xaf, 0xd7, 0x23, 0x97, 0xcb, 0x7d, 0xd8, 0x8d,
|
||||
0xa7, 0x0b, 0x0b, 0x32, 0x4c, 0xd8, 0x24, 0xd0, 0xee, 0x2b, 0x79, 0x15, 0x41, 0x0d, 0x66, 0x32,
|
||||
0xcf, 0xf3, 0x48, 0x26, 0x93, 0xa8, 0x54, 0x2a, 0xb2, 0xfa, 0x60, 0xbf, 0xdf, 0xff, 0x69, 0x45,
|
||||
0xde, 0x29, 0xba, 0x7a, 0x53, 0xd1, 0x2a, 0x6d, 0x93, 0xa8, 0x08, 0x8a, 0xc5, 0x62, 0x72, 0xb7,
|
||||
0xe9, 0x74, 0xba, 0x67, 0x69, 0xb5, 0x5a, 0x18, 0x0c, 0x06, 0x74, 0xbb, 0xdd, 0xe1, 0x79, 0x64,
|
||||
0xb7, 0xdb, 0x11, 0x89, 0x44, 0x5e, 0x25, 0x6b, 0xb7, 0xdb, 0x10, 0x45, 0x11, 0xe9, 0x74, 0x7a,
|
||||
0x38, 0x5d, 0x57, 0xab, 0xd5, 0xd8, 0x5b, 0x42, 0xb5, 0x5a, 0x7d, 0xf7, 0xe5, 0x6e, 0xb7, 0x1b,
|
||||
0x1e, 0x8f, 0x67, 0x38, 0xe7, 0x28, 0x9f, 0xcf, 0x23, 0x1a, 0x8d, 0x2a, 0xfa, 0x50, 0x28, 0x14,
|
||||
0x9e, 0x2b, 0x1d, 0xea, 0x64, 0xf8, 0x95, 0x59, 0x37, 0x8a, 0xe9, 0x3d, 0x9a, 0xff, 0xd1, 0xff,
|
||||
0x9d, 0xe1, 0xcf, 0x83, 0x9e, 0x00, 0x5a, 0xce, 0x5e, 0x60, 0x01, 0xb3, 0x24, 0x02, 0x00, 0x00,
|
||||
0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
0xce, 0x00, 0x00, 0x02, 0x1b, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xed, 0xd6, 0xcd, 0x4b, 0x54,
|
||||
0x51, 0x18, 0xc7, 0xf1, 0xcf, 0x8c, 0x8d, 0xe3, 0x50, 0xd2, 0x1b, 0x59, 0xa6, 0xc5, 0x38, 0x09,
|
||||
0x6d, 0xa2, 0x90, 0xc0, 0x5d, 0x8b, 0x40, 0x28, 0xa2, 0xa0, 0x20, 0x24, 0x82, 0xc0, 0xca, 0x8a,
|
||||
0x96, 0x45, 0x10, 0xed, 0x42, 0xc8, 0x45, 0xd9, 0xa2, 0x36, 0xfd, 0x09, 0x81, 0xb5, 0x08, 0x82,
|
||||
0x72, 0x59, 0xa0, 0x48, 0xef, 0x82, 0x9e, 0x08, 0x82, 0x16, 0x89, 0xe0, 0x26, 0xe9, 0x95, 0xd2,
|
||||
0xc8, 0xd3, 0xe6, 0x06, 0x17, 0xf3, 0x65, 0xc6, 0xa8, 0x55, 0x8b, 0x2f, 0x97, 0x7b, 0x0f, 0xf7,
|
||||
0xf7, 0xe5, 0x9c, 0xf3, 0x3c, 0xe7, 0x5e, 0x31, 0x46, 0xff, 0x02, 0xff, 0x45, 0x7f, 0x24, 0x0a,
|
||||
0x3c, 0x0e, 0xbc, 0x5a, 0x2c, 0x23, 0x9c, 0x29, 0x57, 0xf4, 0x3e, 0x10, 0xff, 0x80, 0x1f, 0x2f,
|
||||
0xd9, 0x5f, 0x96, 0x68, 0x98, 0x8f, 0xf5, 0x8a, 0x9d, 0xeb, 0x15, 0xdb, 0x2b, 0xa1, 0x5b, 0x6d,
|
||||
0x4f, 0x60, 0x7a, 0x84, 0x2f, 0x81, 0x96, 0xb2, 0x44, 0x79, 0xcd, 0xbb, 0x90, 0xa9, 0x74, 0xfd,
|
||||
0x07, 0x64, 0xbb, 0x02, 0x71, 0x84, 0xb1, 0x97, 0xd4, 0x2f, 0x4a, 0x84, 0x26, 0xbc, 0xc3, 0x07,
|
||||
0x4c, 0x60, 0xdb, 0x6c, 0x41, 0x83, 0xb2, 0xb7, 0x13, 0xd9, 0x93, 0x51, 0x0a, 0x8b, 0x11, 0xdd,
|
||||
0x40, 0x4c, 0xf1, 0x00, 0xc5, 0x99, 0x41, 0xf7, 0xc9, 0x0f, 0xca, 0x3e, 0x4f, 0xf6, 0xac, 0x37,
|
||||
0xce, 0xcc, 0x99, 0x4f, 0x84, 0x7a, 0x7c, 0x4b, 0x04, 0xa3, 0xc9, 0x75, 0x0a, 0x1d, 0xb3, 0xcd,
|
||||
0xaa, 0x9f, 0x35, 0x4f, 0x65, 0xc7, 0x02, 0xf1, 0x71, 0x75, 0xf6, 0x72, 0xbe, 0xa7, 0xb4, 0xe2,
|
||||
0x17, 0x0b, 0x89, 0xae, 0x24, 0xe1, 0xdf, 0x71, 0x21, 0x59, 0xc2, 0x88, 0x3e, 0x34, 0xcc, 0x26,
|
||||
0xeb, 0x93, 0xdb, 0x3a, 0x24, 0xf3, 0x39, 0x10, 0x0f, 0x1c, 0xae, 0x8b, 0xf9, 0x9e, 0x52, 0xcc,
|
||||
0xf7, 0x94, 0xe2, 0x9c, 0x22, 0xac, 0xc2, 0xa7, 0x24, 0x78, 0x00, 0xc7, 0x71, 0x35, 0xb9, 0xff,
|
||||
0x8a, 0xf6, 0xb9, 0x8a, 0xe3, 0xa1, 0xaa, 0xb3, 0x81, 0xf8, 0x2c, 0x97, 0x89, 0x75, 0x5d, 0xc5,
|
||||
0x05, 0x45, 0x17, 0x53, 0xfb, 0x72, 0x0f, 0xdd, 0xe8, 0x4a, 0x3d, 0xbb, 0x83, 0xba, 0x99, 0x92,
|
||||
0xc0, 0xba, 0xc0, 0xdb, 0x40, 0x3c, 0xb9, 0x77, 0xd5, 0xfc, 0x33, 0xc2, 0xb2, 0xd4, 0x32, 0xcd,
|
||||
0xc5, 0x47, 0xec, 0x4b, 0x4b, 0x46, 0x29, 0x24, 0xa7, 0x4c, 0x1c, 0x50, 0xd5, 0x9b, 0xd3, 0x78,
|
||||
0x82, 0x25, 0xad, 0x68, 0x99, 0x4b, 0x74, 0x2e, 0x15, 0xd8, 0x8b, 0x6b, 0x29, 0x7a, 0x53, 0x63,
|
||||
0x37, 0xb1, 0x32, 0xc6, 0x28, 0x92, 0x09, 0xdc, 0x0a, 0xc4, 0x21, 0x99, 0xfe, 0xd5, 0x8a, 0x47,
|
||||
0x28, 0xae, 0x98, 0xaf, 0xea, 0xf2, 0x78, 0x83, 0x49, 0x8c, 0xe3, 0x14, 0x8a, 0xa8, 0x4e, 0xa8,
|
||||
0xc1, 0xeb, 0xa4, 0x40, 0xc6, 0xd1, 0x96, 0x64, 0x5c, 0x4a, 0xfa, 0xe8, 0xf5, 0x16, 0x1b, 0x8e,
|
||||
0x15, 0x94, 0x36, 0x96, 0x55, 0xde, 0xd8, 0x89, 0x3d, 0xbf, 0x82, 0x7e, 0x6b, 0x40, 0x5a, 0x93,
|
||||
0xf1, 0xdd, 0x2f, 0x38, 0x9a, 0xf4, 0xcf, 0x44, 0xbb, 0xba, 0xce, 0x9c, 0xe6, 0x16, 0x95, 0xf4,
|
||||
0x51, 0x39, 0x04, 0x76, 0x04, 0x26, 0x03, 0x53, 0x97, 0xd4, 0x9e, 0xae, 0x51, 0x6a, 0x9b, 0x2d,
|
||||
0x23, 0x7d, 0x7a, 0x4f, 0x0f, 0xc9, 0x4c, 0x04, 0xc6, 0x2b, 0xe4, 0x5b, 0x20, 0xde, 0x95, 0x3b,
|
||||
0x5f, 0xad, 0xe9, 0x20, 0xdb, 0x73, 0xf3, 0x9d, 0x75, 0xe3, 0x23, 0x4c, 0x0e, 0x33, 0x95, 0xbc,
|
||||
0x58, 0x11, 0x8f, 0x64, 0xaf, 0x17, 0x6c, 0x3a, 0x44, 0x69, 0xf9, 0x82, 0x5f, 0xd8, 0x82, 0xc6,
|
||||
0x86, 0x1a, 0x9b, 0x3a, 0xaa, 0x35, 0x1d, 0xac, 0x94, 0x1a, 0xcd, 0x47, 0x0a, 0x9a, 0x1b, 0xcb,
|
||||
0xfa, 0x94, 0xa3, 0x8a, 0xcd, 0xb5, 0x8b, 0x63, 0xed, 0xd2, 0xff, 0x7f, 0x41, 0x7f, 0x8d, 0x9f,
|
||||
0x8e, 0x31, 0x67, 0x6a, 0x5f, 0x12, 0x40, 0xd2, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44,
|
||||
0xae, 0x42, 0x60, 0x82,
|
||||
};
|
||||
|
||||
const BITMAP_OPAQUE add_glabel_xpm[1] = {{ png, sizeof( png ), "add_glabel_xpm" }};
|
||||
|
||||
@@ -8,70 +8,74 @@
|
||||
static const unsigned char png[] = {
|
||||
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
|
||||
0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c,
|
||||
0xce, 0x00, 0x00, 0x03, 0xdc, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xb5, 0x95, 0x5f, 0x48, 0x53,
|
||||
0x71, 0x14, 0xc7, 0x67, 0x10, 0x1a, 0x91, 0x88, 0x28, 0x2a, 0x42, 0x3d, 0x24, 0x05, 0xd5, 0x4b,
|
||||
0x20, 0x91, 0x25, 0xa6, 0x64, 0x86, 0x60, 0x96, 0x49, 0x51, 0x04, 0x29, 0x29, 0xe5, 0x83, 0xbd,
|
||||
0x86, 0x10, 0xfd, 0xc1, 0xa7, 0xa2, 0x94, 0x7a, 0xa8, 0x27, 0x8d, 0x92, 0x82, 0xc8, 0x2c, 0x45,
|
||||
0xc9, 0x68, 0xc3, 0x36, 0x32, 0x44, 0xb3, 0x48, 0x66, 0xba, 0x29, 0x25, 0x73, 0x7f, 0x9c, 0x9b,
|
||||
0xfb, 0x73, 0x9d, 0x73, 0xba, 0xe9, 0x4e, 0xbf, 0x73, 0xb6, 0xdf, 0xf5, 0xde, 0x9b, 0xe9, 0x2a,
|
||||
0xfa, 0xc1, 0x97, 0xdd, 0xed, 0xde, 0x9d, 0xcf, 0xf9, 0x7d, 0x7f, 0xe7, 0x9c, 0xab, 0x8a, 0x8f,
|
||||
0x8f, 0xcf, 0xca, 0xce, 0xce, 0x3e, 0xfe, 0x3f, 0xc5, 0x18, 0xdb, 0x55, 0x79, 0x79, 0x79, 0x17,
|
||||
0x3c, 0x5e, 0x2f, 0xd8, 0xa7, 0x1d, 0x7f, 0xad, 0x69, 0x87, 0x93, 0xe4, 0x70, 0xfe, 0x2a, 0x41,
|
||||
0x98, 0x85, 0x82, 0x82, 0x82, 0xf3, 0x04, 0xc2, 0x87, 0x4c, 0x93, 0xe6, 0x98, 0x35, 0x69, 0xb6,
|
||||
0x80, 0xd9, 0x82, 0xb2, 0x82, 0xc5, 0x6a, 0x03, 0xab, 0x0d, 0x35, 0x45, 0xb2, 0x4d, 0xc9, 0xe5,
|
||||
0x76, 0xbb, 0xff, 0x1c, 0x14, 0x01, 0xf0, 0xe0, 0x18, 0xc8, 0x0e, 0x53, 0x76, 0xd4, 0x34, 0xdb,
|
||||
0x19, 0x17, 0xee, 0x70, 0x45, 0x1e, 0xaf, 0x10, 0x3b, 0x08, 0xb3, 0xb7, 0x58, 0xad, 0xb2, 0xe0,
|
||||
0x18, 0x14, 0x03, 0x71, 0x8b, 0x9c, 0x33, 0x33, 0xab, 0x4a, 0x98, 0x8d, 0xc1, 0x3a, 0xdc, 0x81,
|
||||
0x1c, 0xb0, 0x12, 0x9c, 0x07, 0x9a, 0x71, 0xb9, 0x48, 0x2e, 0x66, 0x91, 0x54, 0xee, 0xe8, 0xa7,
|
||||
0xcf, 0xe7, 0x5b, 0x1b, 0xc4, 0x2d, 0x42, 0x9f, 0x95, 0x00, 0x69, 0x60, 0xb7, 0xc7, 0x43, 0xc2,
|
||||
0x82, 0xe2, 0xf2, 0x4a, 0x34, 0xe7, 0xf7, 0x47, 0x40, 0x87, 0x0b, 0x72, 0xab, 0x7b, 0xdb, 0x2b,
|
||||
0xe1, 0xed, 0xa3, 0xfd, 0x12, 0xe5, 0x80, 0xfa, 0xe9, 0x11, 0xf8, 0x31, 0xf6, 0x91, 0x3c, 0x57,
|
||||
0x02, 0x28, 0x70, 0x34, 0xb8, 0x57, 0x10, 0x58, 0x65, 0x09, 0x64, 0x11, 0x6a, 0x56, 0xa1, 0xf9,
|
||||
0xf9, 0xf9, 0x08, 0xe8, 0xd2, 0xb9, 0x9d, 0x37, 0x5f, 0xdc, 0x52, 0xc1, 0xdb, 0xa6, 0xdd, 0xf0,
|
||||
0xfe, 0xd9, 0x21, 0x51, 0xed, 0xf7, 0x53, 0xa0, 0xf3, 0xc1, 0x36, 0xb0, 0x59, 0x8c, 0x72, 0x40,
|
||||
0x34, 0x53, 0x1e, 0xbc, 0xf6, 0xf2, 0x65, 0x50, 0xa9, 0x54, 0xa0, 0xd5, 0xe9, 0xc0, 0x37, 0x37,
|
||||
0x07, 0x73, 0x0a, 0x05, 0x02, 0x01, 0x39, 0xc8, 0x32, 0xf6, 0x1a, 0xa4, 0xcb, 0x63, 0xff, 0x02,
|
||||
0x6d, 0x0d, 0x9b, 0xe1, 0xdd, 0x93, 0x1c, 0x70, 0x3a, 0xed, 0xb4, 0x03, 0x0e, 0xc0, 0x4c, 0xd1,
|
||||
0x7b, 0x04, 0x65, 0x64, 0x64, 0x40, 0x56, 0x56, 0x16, 0xd4, 0xd6, 0xd6, 0x52, 0xf6, 0x4a, 0x2d,
|
||||
0x2e, 0x2e, 0xae, 0x0d, 0xc2, 0x65, 0x1d, 0x6b, 0x87, 0xd6, 0xdb, 0x1b, 0xa0, 0xf7, 0xf5, 0xd9,
|
||||
0x88, 0x45, 0x68, 0x07, 0x03, 0x50, 0xe6, 0xcc, 0xfb, 0xee, 0xee, 0x6e, 0x48, 0x4e, 0x4e, 0x86,
|
||||
0x8e, 0x8e, 0x0e, 0x48, 0x4b, 0x4b, 0xa3, 0xc0, 0x0b, 0x0b, 0x0b, 0x32, 0x05, 0x83, 0xc1, 0xf5,
|
||||
0x41, 0xb8, 0x0c, 0xfd, 0x77, 0x00, 0xef, 0x7f, 0xd5, 0xde, 0x10, 0x01, 0x7e, 0xcc, 0x96, 0x59,
|
||||
0x52, 0x59, 0x59, 0x09, 0x55, 0x55, 0x55, 0x04, 0x48, 0x4d, 0x4d, 0x25, 0x30, 0x06, 0x96, 0x6a,
|
||||
0x69, 0x69, 0x29, 0x36, 0x10, 0xae, 0x4f, 0x6f, 0xaa, 0xd8, 0xce, 0xe2, 0xc0, 0x3c, 0xae, 0xa1,
|
||||
0xa0, 0xe8, 0x3b, 0x5a, 0x98, 0x94, 0x94, 0x04, 0x6a, 0xb5, 0x9a, 0x02, 0xd6, 0xd4, 0xd4, 0x40,
|
||||
0x45, 0x45, 0x05, 0x84, 0x42, 0x21, 0x99, 0xfe, 0x18, 0x44, 0xcf, 0x7c, 0xd7, 0x90, 0x1d, 0xe8,
|
||||
0x7b, 0x6b, 0x6b, 0x2b, 0x9d, 0x0f, 0x5e, 0x63, 0xc0, 0x9e, 0x9e, 0x1e, 0x48, 0x4c, 0x4c, 0xa4,
|
||||
0x02, 0xc0, 0xe0, 0x5c, 0xcb, 0xcb, 0xcb, 0xb1, 0x81, 0x46, 0xfb, 0x6e, 0x45, 0xac, 0x7b, 0x7f,
|
||||
0x55, 0x84, 0xe0, 0x0e, 0xca, 0xcb, 0xcb, 0x09, 0x54, 0x5a, 0x5a, 0x4a, 0x2a, 0x29, 0x29, 0xa1,
|
||||
0xea, 0xc3, 0x04, 0x30, 0x38, 0x57, 0x38, 0x1c, 0x5e, 0x1f, 0x64, 0x36, 0xbc, 0x64, 0x90, 0x38,
|
||||
0xf8, 0xf8, 0xea, 0x94, 0x0c, 0xe2, 0x62, 0xe5, 0x9e, 0x90, 0x90, 0x00, 0x75, 0x75, 0x75, 0xd0,
|
||||
0xd0, 0xd0, 0x00, 0x8d, 0x8d, 0x8d, 0xa4, 0xa2, 0xa2, 0x22, 0x28, 0x2b, 0x2b, 0xa3, 0xe0, 0x52,
|
||||
0xad, 0x09, 0x72, 0xd9, 0x06, 0xa0, 0xed, 0xee, 0x26, 0x50, 0x3f, 0xde, 0xc7, 0xec, 0xf0, 0x8a,
|
||||
0x10, 0xb4, 0xa9, 0xb9, 0xb9, 0x19, 0x32, 0x33, 0x33, 0xe9, 0x5a, 0x9a, 0xb9, 0x56, 0xab, 0x05,
|
||||
0xf6, 0xee, 0xa1, 0x56, 0xf8, 0x2d, 0xe8, 0x97, 0x86, 0xbd, 0x97, 0x0c, 0x9d, 0x0f, 0xb7, 0x82,
|
||||
0xd7, 0x65, 0x12, 0xcb, 0x94, 0x1f, 0x70, 0x61, 0x61, 0x21, 0xf5, 0x0d, 0x07, 0x70, 0xe1, 0xf7,
|
||||
0xf4, 0xf4, 0x74, 0x68, 0x6a, 0x6a, 0x12, 0xef, 0xe1, 0x12, 0x47, 0x50, 0x5f, 0xe7, 0x05, 0x50,
|
||||
0x3f, 0x39, 0x48, 0xd2, 0xb4, 0xe4, 0x92, 0xb4, 0xcf, 0x8f, 0x82, 0xc3, 0xf2, 0x59, 0x66, 0x19,
|
||||
0xaf, 0x22, 0x7e, 0xc8, 0x1c, 0x80, 0x0b, 0x3f, 0xf1, 0x3e, 0x56, 0x24, 0x36, 0x34, 0x36, 0x37,
|
||||
0x7e, 0x06, 0xd8, 0xff, 0xc5, 0xa1, 0x8a, 0x8d, 0x88, 0xd3, 0x16, 0xc7, 0x8b, 0x10, 0xed, 0x7a,
|
||||
0x3f, 0xeb, 0x17, 0xfc, 0x93, 0x72, 0x37, 0x1c, 0x22, 0xcd, 0x18, 0xaf, 0xf1, 0xb9, 0x19, 0x36,
|
||||
0x0f, 0x4d, 0x26, 0x13, 0x8c, 0x8f, 0x8f, 0x83, 0xd1, 0x68, 0x04, 0x83, 0xc1, 0x00, 0x43, 0xfa,
|
||||
0xe1, 0xd0, 0x8e, 0x1d, 0xbb, 0x8a, 0x57, 0x40, 0xd1, 0x11, 0x43, 0xe3, 0x85, 0x95, 0xa8, 0x3f,
|
||||
0xda, 0x2f, 0xeb, 0xed, 0x06, 0x85, 0xcf, 0xd8, 0xd9, 0x3b, 0x6a, 0x70, 0x70, 0x10, 0x06, 0x06,
|
||||
0x06, 0x60, 0x68, 0x68, 0x08, 0x26, 0x26, 0x26, 0xe0, 0xdb, 0xc8, 0x68, 0xf8, 0xe4, 0xe9, 0x53,
|
||||
0xd7, 0x58, 0x2e, 0x2a, 0x39, 0x28, 0x3a, 0xc7, 0xb0, 0x17, 0xa8, 0x31, 0x57, 0xb1, 0x4d, 0xb9,
|
||||
0x1b, 0xfc, 0x0d, 0xdd, 0xc0, 0x5d, 0x74, 0x75, 0x75, 0xd1, 0xef, 0xc1, 0xe0, 0x22, 0xe8, 0x87,
|
||||
0xf5, 0xe1, 0xe2, 0x63, 0x25, 0x35, 0x08, 0x11, 0x41, 0xb3, 0x52, 0x10, 0xb3, 0x8d, 0x83, 0xf8,
|
||||
0xf9, 0xac, 0x65, 0x1b, 0x26, 0x31, 0xc5, 0xde, 0x59, 0x7a, 0xbd, 0x1e, 0x34, 0x1a, 0x6c, 0xe8,
|
||||
0x00, 0xe8, 0x3e, 0xe8, 0x96, 0x4b, 0xcb, 0x4f, 0x9c, 0xe1, 0x90, 0x98, 0x40, 0xab, 0x9d, 0x8f,
|
||||
0xb4, 0x08, 0xf0, 0xbe, 0x95, 0xbd, 0x85, 0xd1, 0xae, 0x7e, 0x66, 0xdb, 0xa3, 0x96, 0x16, 0x5f,
|
||||
0x7e, 0xfe, 0x81, 0x3d, 0x52, 0x88, 0x08, 0xc2, 0xc0, 0x02, 0x87, 0xb0, 0x22, 0x98, 0x57, 0x9c,
|
||||
0x8f, 0x72, 0xa4, 0x28, 0xad, 0x73, 0xb0, 0x37, 0xb4, 0xae, 0xb7, 0x37, 0x7c, 0xbd, 0xbe, 0x7e,
|
||||
0x24, 0x25, 0x25, 0x65, 0x8b, 0x12, 0x42, 0x20, 0x36, 0x75, 0xf7, 0xb2, 0x81, 0x78, 0xe5, 0x5f,
|
||||
0x54, 0x5d, 0x7d, 0xf1, 0x4a, 0x61, 0x51, 0x71, 0x35, 0x1b, 0x41, 0x1b, 0x57, 0x83, 0xa0, 0x7e,
|
||||
0x02, 0x31, 0x50, 0x72, 0x61, 0x7e, 0x5f, 0xf1, 0xa4, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e,
|
||||
0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
0xce, 0x00, 0x00, 0x04, 0x1b, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xbd, 0x96, 0xdf, 0x4f, 0x93,
|
||||
0x57, 0x18, 0xc7, 0x3f, 0xcf, 0x69, 0x2b, 0x88, 0x20, 0x8b, 0x23, 0xd5, 0x0e, 0xb3, 0x09, 0x91,
|
||||
0x59, 0xc4, 0x25, 0x98, 0xc5, 0x19, 0x82, 0xb8, 0x6c, 0x31, 0x0e, 0xb7, 0xf1, 0x23, 0x59, 0xa2,
|
||||
0x68, 0xbc, 0x59, 0x02, 0x17, 0x1b, 0xf1, 0xce, 0x98, 0x8c, 0x2d, 0x5c, 0x7a, 0xb1, 0x3f, 0x80,
|
||||
0x0d, 0x97, 0xcc, 0x71, 0x23, 0x24, 0xdb, 0x85, 0x04, 0x0d, 0x28, 0x5b, 0xb0, 0xc4, 0x48, 0x3a,
|
||||
0x34, 0x8c, 0x64, 0xc9, 0x36, 0x15, 0x2d, 0xa6, 0x73, 0x10, 0xba, 0x21, 0xa5, 0x80, 0x6d, 0x69,
|
||||
0xcf, 0x2e, 0xfa, 0xb6, 0xbc, 0x6f, 0xcb, 0x5b, 0x2f, 0x96, 0xec, 0x24, 0x4f, 0xf2, 0xbc, 0xef,
|
||||
0xfb, 0x9c, 0xf3, 0x7d, 0xbe, 0xdf, 0xe7, 0x39, 0xe7, 0xbc, 0xa2, 0xb5, 0xe6, 0xff, 0x18, 0x4e,
|
||||
0x00, 0x11, 0x71, 0x00, 0x05, 0xff, 0x71, 0xad, 0xa4, 0xd6, 0xfa, 0x79, 0x5e, 0x20, 0xe0, 0x0d,
|
||||
0xbf, 0xdf, 0x3f, 0x54, 0x52, 0x52, 0x52, 0x88, 0x08, 0x92, 0x02, 0xdf, 0x88, 0x32, 0xde, 0xe5,
|
||||
0x1b, 0x7d, 0x7d, 0x7d, 0x63, 0xc0, 0xc9, 0x17, 0x01, 0xb1, 0xb7, 0xaa, 0xea, 0x95, 0x44, 0x22,
|
||||
0xa1, 0x44, 0x84, 0xb4, 0x29, 0x91, 0x14, 0x48, 0xda, 0xf2, 0x80, 0xd6, 0xd4, 0xd4, 0xb8, 0xf3,
|
||||
0x25, 0x22, 0x5a, 0x6b, 0x44, 0xa4, 0xf6, 0x9f, 0xc5, 0xc5, 0x7b, 0xc9, 0x64, 0x52, 0x0d, 0x5e,
|
||||
0xbd, 0xca, 0x3e, 0xaf, 0xd7, 0x58, 0x4c, 0x10, 0xc9, 0xc3, 0xc8, 0xc4, 0x7a, 0x25, 0x12, 0x59,
|
||||
0x51, 0x4a, 0xcd, 0xce, 0xcc, 0xcc, 0x84, 0x3a, 0x3a, 0x3a, 0x4e, 0x6b, 0xad, 0x9f, 0x6e, 0xca,
|
||||
0x48, 0x89, 0xa0, 0x45, 0x38, 0x70, 0xe0, 0x00, 0x7b, 0x2a, 0x2a, 0x52, 0x8c, 0x94, 0x42, 0x36,
|
||||
0x63, 0x64, 0xf2, 0x53, 0xe9, 0x00, 0xb0, 0x0d, 0xd8, 0xbf, 0xcf, 0xeb, 0x8d, 0x00, 0x0e, 0x5b,
|
||||
0x46, 0xcf, 0x96, 0x96, 0xee, 0x69, 0xad, 0xd5, 0x83, 0xfb, 0xf7, 0xa9, 0xa8, 0xac, 0xe4, 0xce,
|
||||
0x9d, 0x3b, 0xb8, 0x9c, 0x4e, 0x94, 0x52, 0x26, 0x02, 0xb2, 0x51, 0x33, 0x2b, 0x48, 0x66, 0xc4,
|
||||
0x62, 0xb1, 0xf5, 0x40, 0x20, 0x70, 0xc3, 0xe5, 0x72, 0xad, 0xf4, 0xf4, 0xf4, 0x7c, 0x35, 0x35,
|
||||
0x35, 0x75, 0xcb, 0xc2, 0x48, 0x4c, 0xf2, 0x28, 0x11, 0xe2, 0xb1, 0x18, 0x75, 0x75, 0x75, 0x68,
|
||||
0xad, 0x73, 0x99, 0xd9, 0xd5, 0x2c, 0x05, 0xee, 0x6c, 0x38, 0x7a, 0xf4, 0x03, 0x87, 0xc3, 0xc1,
|
||||
0xc8, 0xc8, 0xc8, 0x4d, 0x20, 0x17, 0x08, 0x11, 0x44, 0xa9, 0x94, 0x19, 0xd2, 0xa1, 0x75, 0xe6,
|
||||
0x39, 0x1b, 0x24, 0x33, 0x27, 0x57, 0x46, 0x6b, 0xd7, 0x02, 0x19, 0x5d, 0xc4, 0xc4, 0x4a, 0x19,
|
||||
0x41, 0xca, 0x00, 0x55, 0x06, 0x68, 0xda, 0x6e, 0xdf, 0xbe, 0xcd, 0x99, 0x33, 0x67, 0xe8, 0xea,
|
||||
0xea, 0xb2, 0xbc, 0x77, 0x64, 0xf9, 0x9b, 0x36, 0x83, 0x98, 0x75, 0xdf, 0x84, 0x81, 0x32, 0xf9,
|
||||
0xdf, 0x5c, 0xba, 0xc4, 0xb5, 0x6b, 0xd7, 0x10, 0x11, 0x8e, 0x1c, 0x39, 0x42, 0x4b, 0x4b, 0x4b,
|
||||
0x0e, 0x03, 0x5b, 0x46, 0x66, 0xf9, 0xcc, 0xfb, 0x27, 0xcd, 0x46, 0x8c, 0x4c, 0x23, 0x91, 0x08,
|
||||
0xc3, 0xc3, 0xc3, 0xb8, 0xdd, 0x6e, 0xb4, 0xd6, 0x5c, 0xbf, 0x7e, 0x9d, 0x48, 0x24, 0xb2, 0x91,
|
||||
0x90, 0x11, 0x67, 0x2f, 0x5d, 0x96, 0xf6, 0x19, 0x06, 0x69, 0xe9, 0x0c, 0x7f, 0x70, 0x70, 0x90,
|
||||
0x68, 0x34, 0x4a, 0x6b, 0x6b, 0x2b, 0x1e, 0x8f, 0x07, 0x9f, 0xcf, 0x47, 0x30, 0x18, 0xb4, 0x28,
|
||||
0x92, 0xbf, 0x46, 0x66, 0xe9, 0xd2, 0x35, 0x32, 0x4b, 0x67, 0x00, 0xf6, 0xf7, 0xf7, 0xe3, 0x70,
|
||||
0x38, 0xa8, 0xaf, 0xaf, 0xa7, 0xb1, 0xb1, 0x91, 0xd9, 0xd9, 0x59, 0x26, 0x26, 0x26, 0x30, 0xb6,
|
||||
0x89, 0xc5, 0x6c, 0xa5, 0x23, 0x0b, 0x28, 0xcd, 0x26, 0x5d, 0xb3, 0xb9, 0xb9, 0x39, 0xc6, 0xc7,
|
||||
0xc7, 0x29, 0x2a, 0x2a, 0x62, 0x60, 0x60, 0x80, 0x87, 0x0f, 0x1f, 0x02, 0x30, 0x3a, 0x3a, 0xca,
|
||||
0xc2, 0xc2, 0x82, 0x2d, 0x88, 0xa5, 0x19, 0x36, 0x6b, 0x4d, 0x73, 0x17, 0x8a, 0x08, 0x03, 0x03,
|
||||
0x03, 0x24, 0x93, 0x49, 0xe2, 0xf1, 0x38, 0x3e, 0x9f, 0x2f, 0x13, 0x33, 0x3e, 0x3e, 0x4e, 0x30,
|
||||
0x18, 0xc4, 0xe3, 0xf1, 0xd8, 0x9e, 0x75, 0x2a, 0xf7, 0xf8, 0x12, 0x5b, 0xeb, 0xef, 0xef, 0x47,
|
||||
0x29, 0x45, 0x6f, 0x6f, 0x2f, 0xd3, 0xd3, 0xd3, 0xcc, 0xcc, 0xcc, 0xd0, 0xdc, 0xdc, 0x4c, 0x28,
|
||||
0x14, 0x62, 0x6c, 0x6c, 0x8c, 0x78, 0x3c, 0x6e, 0xcb, 0xca, 0x69, 0xb9, 0x0a, 0xb2, 0x5b, 0xd4,
|
||||
0x04, 0x1c, 0x8d, 0x46, 0x39, 0x75, 0xea, 0x14, 0x4d, 0x4d, 0x4d, 0x78, 0xbd, 0x5e, 0x2a, 0x2b,
|
||||
0x2b, 0x11, 0x11, 0xba, 0xbb, 0xbb, 0xa9, 0xae, 0xae, 0x66, 0xfb, 0xf6, 0xed, 0x84, 0x42, 0x21,
|
||||
0x4a, 0x4b, 0x4b, 0x11, 0x11, 0x5c, 0x5b, 0xb6, 0xd8, 0x4b, 0x97, 0xbe, 0x6d, 0x2d, 0xd2, 0x19,
|
||||
0x7e, 0x61, 0x61, 0x21, 0x17, 0x2e, 0x5c, 0xb0, 0x7c, 0x9b, 0x9c, 0xe8, 0xe3, 0xca, 0x77, 0x1f,
|
||||
0x03, 0xf0, 0xc7, 0xdf, 0xf0, 0xe5, 0xd4, 0xa7, 0x96, 0xc5, 0xb7, 0x3a, 0x77, 0xef, 0x37, 0xf2,
|
||||
0xd5, 0x19, 0xa0, 0xbb, 0x93, 0x93, 0x8f, 0x4b, 0x4b, 0x4b, 0xb7, 0xc6, 0xe3, 0xf1, 0x9d, 0x99,
|
||||
0xd3, 0x37, 0xab, 0x39, 0xcc, 0xf2, 0xce, 0x3e, 0xf6, 0xf3, 0xc3, 0x95, 0x4e, 0xda, 0x3b, 0x87,
|
||||
0x28, 0x73, 0x1f, 0x62, 0x6d, 0x0d, 0x9e, 0x3f, 0x87, 0xb5, 0xb5, 0x94, 0xdd, 0xba, 0x71, 0x1a,
|
||||
0xcf, 0x1e, 0xcf, 0xa1, 0x9e, 0x9e, 0x9e, 0xdd, 0x9d, 0x9d, 0x9d, 0x41, 0xa7, 0xc1, 0xe4, 0x17,
|
||||
0x60, 0x2f, 0x80, 0xdf, 0xef, 0x0f, 0x00, 0xaf, 0x99, 0xa5, 0xcb, 0x06, 0x0b, 0x2f, 0xfd, 0xc5,
|
||||
0xe5, 0xaf, 0x3f, 0xe2, 0xdd, 0xf7, 0x3e, 0xe7, 0xd5, 0x8a, 0x0f, 0x59, 0x5d, 0x05, 0x0d, 0x24,
|
||||
0x92, 0xb0, 0x9e, 0x48, 0x99, 0xd6, 0x05, 0x28, 0x71, 0x14, 0x14, 0x14, 0x14, 0xa8, 0x1c, 0xe9,
|
||||
0x00, 0x02, 0x81, 0xc0, 0xb3, 0xaa, 0xaa, 0x2a, 0x77, 0x34, 0x1a, 0x75, 0xdd, 0x7c, 0x7a, 0xd3,
|
||||
0xd9, 0xf4, 0x63, 0x93, 0x35, 0x40, 0xc3, 0xc9, 0xdf, 0xa0, 0xa1, 0xfc, 0x18, 0x6f, 0xd5, 0x7f,
|
||||
0xc6, 0xf2, 0x32, 0xac, 0xae, 0xa6, 0x58, 0xac, 0xae, 0x6e, 0x58, 0x22, 0x91, 0xa7, 0xbd, 0x01,
|
||||
0xda, 0xda, 0xda, 0x1a, 0x01, 0xce, 0x9d, 0x3b, 0xd7, 0x7d, 0xb6, 0xe1, 0xec, 0x27, 0xc7, 0xca,
|
||||
0x8e, 0xb1, 0xbe, 0xbe, 0x6e, 0x9d, 0xb4, 0xf3, 0x09, 0x73, 0x7f, 0xfe, 0xca, 0xfc, 0xfc, 0x3c,
|
||||
0x4a, 0xed, 0xb2, 0x00, 0xa4, 0x41, 0xb3, 0xa6, 0xe4, 0x02, 0x69, 0xad, 0xe7, 0x00, 0xce, 0x9f,
|
||||
0x3f, 0x1f, 0xa9, 0xdd, 0x51, 0xab, 0x2f, 0x96, 0x5f, 0x24, 0x1c, 0x0e, 0x5b, 0x8a, 0xa4, 0xdf,
|
||||
0xd4, 0x4c, 0xf8, 0xbe, 0x60, 0xe8, 0xfb, 0x36, 0xde, 0x39, 0xf1, 0x13, 0x6b, 0x6b, 0x8e, 0x17,
|
||||
0x32, 0x12, 0xbb, 0xff, 0x3a, 0x11, 0xa9, 0x04, 0x5e, 0x2e, 0x29, 0x29, 0x71, 0xba, 0x5c, 0xae,
|
||||
0x9c, 0xad, 0x5e, 0xfd, 0xba, 0xa7, 0xec, 0xf0, 0xc1, 0xa7, 0x7d, 0xbb, 0xca, 0x8f, 0xbf, 0xb4,
|
||||
0xad, 0xf8, 0x20, 0xb1, 0x18, 0xc4, 0xe3, 0x1b, 0x16, 0x5e, 0xfc, 0x96, 0x5d, 0xbb, 0x0f, 0xff,
|
||||
0xbc, 0xc3, 0xfd, 0xf6, 0xc9, 0xf6, 0xf6, 0xf6, 0x27, 0x4e, 0xbb, 0x9d, 0xac, 0xb5, 0x7e, 0x04,
|
||||
0x3c, 0xb2, 0xfd, 0xab, 0x11, 0x91, 0x13, 0x8d, 0xc7, 0xdf, 0x5f, 0x0e, 0xff, 0x7e, 0x79, 0x39,
|
||||
0xfc, 0xa0, 0x30, 0xfb, 0xfb, 0xb6, 0xe2, 0x62, 0x5c, 0x85, 0x3b, 0x23, 0xe9, 0xe7, 0x7f, 0x01,
|
||||
0x5e, 0x8e, 0x7c, 0x3f, 0xe6, 0x47, 0xe7, 0x2b, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44,
|
||||
0xae, 0x42, 0x60, 0x82,
|
||||
};
|
||||
|
||||
const BITMAP_OPAQUE add_hierar_pin_xpm[1] = {{ png, sizeof( png ), "add_hierar_pin_xpm" }};
|
||||
|
||||
@@ -8,73 +8,83 @@
|
||||
static const unsigned char png[] = {
|
||||
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
|
||||
0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c,
|
||||
0xce, 0x00, 0x00, 0x04, 0x16, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xb5, 0x95, 0x5d, 0x48, 0x9b,
|
||||
0x57, 0x18, 0xc7, 0x03, 0x1a, 0xdc, 0xcd, 0x56, 0x06, 0x0a, 0x1b, 0x78, 0x21, 0x64, 0xe6, 0x62,
|
||||
0x14, 0xac, 0x22, 0x13, 0x66, 0xcc, 0x2a, 0x8c, 0x82, 0x76, 0x6d, 0x47, 0xc7, 0xc6, 0xae, 0x76,
|
||||
0x31, 0x64, 0x78, 0xb3, 0x5e, 0x96, 0x15, 0x69, 0x61, 0x51, 0x30, 0xb6, 0xae, 0x2b, 0xad, 0xc5,
|
||||
0x5d, 0x14, 0xb7, 0xd9, 0x8e, 0x41, 0x27, 0x2b, 0x8c, 0x8c, 0x42, 0x75, 0x1f, 0xa1, 0x0e, 0x5c,
|
||||
0xe6, 0xa8, 0x26, 0xad, 0x1f, 0x95, 0x21, 0x9a, 0x2f, 0xa3, 0xf1, 0x4d, 0xde, 0x7c, 0x9a, 0xc4,
|
||||
0xbc, 0xff, 0x9d, 0xe7, 0xe8, 0x79, 0x3f, 0x62, 0x74, 0x6e, 0x65, 0x07, 0xfe, 0x44, 0x5e, 0xde,
|
||||
0xf7, 0xf9, 0x9d, 0xff, 0xff, 0x79, 0xce, 0xd1, 0x54, 0x55, 0x55, 0xf5, 0x4a, 0x73, 0x73, 0xf3,
|
||||
0x99, 0xff, 0x53, 0x8c, 0x61, 0x31, 0xd9, 0xed, 0xf6, 0x0f, 0x63, 0xf1, 0x38, 0xd6, 0x22, 0xeb,
|
||||
0xff, 0x59, 0x91, 0xf5, 0x0d, 0xae, 0xf5, 0x8d, 0xbd, 0x92, 0xe5, 0x04, 0xda, 0xdb, 0xdb, 0x3f,
|
||||
0xe0, 0x20, 0x7a, 0x69, 0x65, 0xd5, 0x7f, 0x68, 0xad, 0xfa, 0x03, 0xf0, 0x07, 0x48, 0x41, 0x04,
|
||||
0x82, 0x21, 0x04, 0x43, 0xa4, 0x30, 0x57, 0x28, 0x6c, 0x94, 0x24, 0x49, 0xff, 0x1e, 0xb4, 0x03,
|
||||
0x10, 0xc5, 0xa9, 0xd0, 0x1a, 0xc2, 0x6b, 0xa4, 0x08, 0x73, 0x26, 0x44, 0x0e, 0x35, 0xc5, 0xe2,
|
||||
0xf2, 0xe1, 0x41, 0xb4, 0xfb, 0x40, 0x30, 0x68, 0x28, 0x4e, 0x45, 0xa9, 0x90, 0x88, 0x68, 0x23,
|
||||
0x1a, 0x2d, 0x2b, 0x39, 0x71, 0x88, 0xe8, 0xc8, 0x81, 0x11, 0xa0, 0x15, 0x17, 0x85, 0xa2, 0x9b,
|
||||
0x9b, 0x5c, 0x9b, 0x2c, 0x22, 0xbd, 0xa4, 0xdd, 0xdf, 0x64, 0x32, 0x79, 0x30, 0x48, 0x44, 0x44,
|
||||
0x39, 0x97, 0x02, 0xf4, 0x85, 0xa5, 0x58, 0x8c, 0x8b, 0x06, 0x4a, 0x28, 0xae, 0x53, 0x2a, 0x9d,
|
||||
0x2e, 0x0f, 0x12, 0x7d, 0x20, 0x17, 0x3b, 0x11, 0x69, 0x80, 0xc5, 0x99, 0xbb, 0x18, 0xff, 0xba,
|
||||
0xd5, 0xa8, 0x51, 0x1b, 0xbc, 0x0f, 0x9d, 0x3c, 0x22, 0x52, 0xa2, 0x44, 0x99, 0x4c, 0x66, 0x2f,
|
||||
0x48, 0x44, 0x65, 0xb3, 0xb5, 0xc1, 0x6c, 0x36, 0x63, 0x71, 0x71, 0xd1, 0xe0, 0x80, 0x0a, 0xdf,
|
||||
0xfb, 0xfc, 0x08, 0x7e, 0xf9, 0xe6, 0x0d, 0x55, 0xe3, 0x5f, 0x36, 0xe1, 0xae, 0xd3, 0x84, 0x79,
|
||||
0xcf, 0x4d, 0x24, 0x53, 0x29, 0xa4, 0x4a, 0x94, 0xcd, 0x66, 0x8d, 0x20, 0x01, 0x79, 0x34, 0x33,
|
||||
0x83, 0xca, 0xca, 0x4a, 0xd4, 0xd5, 0xd5, 0xe1, 0xb3, 0xab, 0x57, 0x55, 0x48, 0x8c, 0xc5, 0x43,
|
||||
0x20, 0x2a, 0x6e, 0x5c, 0x0a, 0x7e, 0xfb, 0xfe, 0x2c, 0xc6, 0xae, 0x98, 0xb1, 0xfa, 0xf4, 0x3e,
|
||||
0x77, 0xa0, 0x57, 0x2e, 0x97, 0xd3, 0x40, 0x14, 0x0d, 0x41, 0xa8, 0x1f, 0x0e, 0x47, 0x2f, 0x5a,
|
||||
0x5a, 0x5a, 0xf0, 0xa9, 0xc3, 0x81, 0xd6, 0xd6, 0x56, 0x35, 0xff, 0xb8, 0x2c, 0x63, 0x82, 0xc5,
|
||||
0xb4, 0x17, 0x04, 0x6c, 0xe7, 0xd3, 0x18, 0xff, 0xaa, 0x09, 0xf7, 0xae, 0xbd, 0x88, 0x68, 0xd8,
|
||||
0x8b, 0xad, 0xad, 0x2d, 0x55, 0xf9, 0x7c, 0x5e, 0x03, 0x51, 0x3c, 0x3b, 0x3d, 0x89, 0xa0, 0xb1,
|
||||
0xa9, 0x09, 0xfd, 0x4e, 0x27, 0xbc, 0x5e, 0x2f, 0x2a, 0x2a, 0x2a, 0x30, 0x37, 0x3f, 0xcf, 0x4e,
|
||||
0xb7, 0xcc, 0xf3, 0xde, 0x0f, 0x44, 0x2b, 0x93, 0x08, 0xe0, 0x87, 0x1b, 0x2f, 0xe3, 0xc7, 0x2f,
|
||||
0x2c, 0x48, 0xc9, 0x61, 0x0e, 0x20, 0x6d, 0x6f, 0x6f, 0x6b, 0x20, 0x8a, 0x87, 0x1a, 0xff, 0xbb,
|
||||
0xc7, 0xa3, 0x16, 0x27, 0x27, 0xaf, 0x31, 0x67, 0x7d, 0x7d, 0x7d, 0x48, 0xb0, 0x11, 0xa5, 0xfc,
|
||||
0x7f, 0xba, 0xdd, 0xb6, 0x2f, 0x88, 0x96, 0x14, 0xfe, 0x03, 0x63, 0x83, 0xcf, 0xe1, 0xf2, 0x8d,
|
||||
0x6a, 0xd8, 0xbf, 0xb5, 0x73, 0x0d, 0x3f, 0x1a, 0xd6, 0x40, 0xd4, 0x03, 0x3a, 0x80, 0x9f, 0x5c,
|
||||
0xb8, 0xc0, 0x06, 0xc1, 0xa6, 0xc6, 0x35, 0x30, 0x30, 0x80, 0x63, 0x8d, 0x8d, 0xbc, 0xa9, 0x69,
|
||||
0x36, 0xa6, 0xff, 0x04, 0xda, 0x0c, 0x79, 0x38, 0x68, 0xf0, 0xba, 0x06, 0xba, 0xe5, 0xbd, 0xa5,
|
||||
0x81, 0x24, 0x29, 0xc6, 0x47, 0xd8, 0x6a, 0xb5, 0xc2, 0x62, 0xb1, 0xa0, 0xb3, 0xb3, 0x13, 0x9d,
|
||||
0x27, 0x4f, 0x72, 0xa8, 0xc9, 0x64, 0xc2, 0x0c, 0x1b, 0x90, 0x0c, 0x9b, 0x9e, 0x83, 0x40, 0x69,
|
||||
0x79, 0x95, 0x45, 0xf7, 0x12, 0x5c, 0xc3, 0x75, 0xc8, 0x24, 0xc3, 0x28, 0x16, 0x8b, 0x5c, 0x8a,
|
||||
0xa2, 0xe8, 0x40, 0xb1, 0x38, 0x7e, 0x75, 0xbb, 0x79, 0x6c, 0xbd, 0xbd, 0xbd, 0xe8, 0xef, 0xef,
|
||||
0xe7, 0x7d, 0x72, 0x32, 0x47, 0x0d, 0x0d, 0x0d, 0xe8, 0xe9, 0xe9, 0xe1, 0x8d, 0xfd, 0xf9, 0x8e,
|
||||
0xbd, 0x2c, 0xa8, 0x90, 0x4b, 0xe2, 0xc1, 0x48, 0x03, 0x1b, 0xfd, 0x17, 0x10, 0x8b, 0x78, 0x79,
|
||||
0x71, 0xbd, 0x54, 0x10, 0x4d, 0xd4, 0xc7, 0xe7, 0xce, 0xc1, 0xd6, 0xd6, 0xc6, 0x23, 0xe3, 0xcd,
|
||||
0x67, 0x7d, 0xa1, 0xc8, 0x86, 0x86, 0x86, 0x50, 0x5f, 0x5f, 0xcf, 0xc7, 0xb4, 0x1c, 0x48, 0x51,
|
||||
0x8a, 0x98, 0x1c, 0x3b, 0x85, 0xef, 0x06, 0x2a, 0x10, 0xfa, 0xeb, 0xfe, 0x1e, 0x88, 0x11, 0xc4,
|
||||
0x8a, 0xd7, 0xd6, 0xd6, 0xe2, 0xca, 0xe0, 0x20, 0x1f, 0x63, 0x9a, 0xb0, 0xe4, 0x6e, 0x5f, 0xfc,
|
||||
0x7e, 0x3f, 0x77, 0x3a, 0x35, 0x35, 0xc5, 0x41, 0xa5, 0x07, 0xf6, 0xc1, 0xc8, 0x31, 0x7e, 0x60,
|
||||
0x97, 0xfe, 0xbc, 0xa9, 0x83, 0x2b, 0x6a, 0x6c, 0xb4, 0x54, 0x10, 0x39, 0xe0, 0x87, 0xb2, 0xc4,
|
||||
0x0d, 0x1d, 0x38, 0x8a, 0x8c, 0xdc, 0xd0, 0xa8, 0x06, 0x9e, 0xba, 0x38, 0x4c, 0x38, 0x13, 0x5a,
|
||||
0x98, 0xba, 0xcc, 0x8b, 0x16, 0x0a, 0x05, 0x7e, 0x13, 0xd0, 0x46, 0x69, 0xf3, 0xf4, 0x9b, 0x65,
|
||||
0xdf, 0x6b, 0x20, 0xf6, 0x40, 0x12, 0x20, 0x72, 0xc3, 0x40, 0xe4, 0x86, 0x3e, 0x12, 0x87, 0x8e,
|
||||
0x8a, 0x90, 0xe8, 0x5c, 0xe8, 0x1b, 0x4d, 0x8b, 0xfe, 0xa6, 0xf7, 0xa2, 0xec, 0x3c, 0xae, 0xac,
|
||||
0xac, 0x60, 0x69, 0x69, 0x89, 0x5f, 0x5f, 0x0b, 0x0b, 0x0b, 0x98, 0xf5, 0x3d, 0x2e, 0x58, 0xad,
|
||||
0xaf, 0x76, 0x68, 0x20, 0x36, 0xd2, 0x62, 0x17, 0x3c, 0x36, 0xe6, 0x86, 0x40, 0xc2, 0x8d, 0x80,
|
||||
0x08, 0x90, 0xbe, 0x07, 0xf4, 0xce, 0x1a, 0x3b, 0x87, 0xd3, 0xd3, 0xd3, 0xf0, 0xb0, 0xb3, 0x38,
|
||||
0x3b, 0x3b, 0x8b, 0xe5, 0xe5, 0x65, 0x3c, 0x99, 0x9b, 0x57, 0xce, 0xbe, 0xf7, 0xee, 0x45, 0xb6,
|
||||
0x17, 0x93, 0x11, 0xb4, 0xdb, 0x1f, 0x11, 0x5b, 0x56, 0x17, 0xdb, 0x7e, 0x6e, 0xe8, 0x19, 0xa5,
|
||||
0x41, 0x2e, 0x5c, 0x2e, 0x17, 0x7f, 0x9e, 0xcf, 0xe7, 0xe0, 0x7b, 0xec, 0x53, 0x3a, 0x4e, 0xbd,
|
||||
0xd5, 0x4d, 0x10, 0x15, 0x94, 0xd0, 0x83, 0xca, 0xf4, 0xe7, 0xa0, 0xd8, 0x68, 0x13, 0x61, 0x76,
|
||||
0x47, 0xfa, 0x7c, 0x3e, 0x4c, 0x4c, 0x4c, 0xb0, 0x6f, 0xb2, 0x70, 0x3f, 0x74, 0x17, 0x4f, 0xbf,
|
||||
0xf3, 0xf6, 0xfb, 0x02, 0x72, 0x28, 0x50, 0xb9, 0xfe, 0x88, 0xc8, 0x04, 0x28, 0xc8, 0x2e, 0x64,
|
||||
0x8a, 0x8b, 0xae, 0xb0, 0x91, 0xd1, 0xd1, 0xe4, 0xf1, 0xe3, 0xaf, 0x1f, 0xd5, 0x43, 0x54, 0x10,
|
||||
0x15, 0x56, 0xa7, 0x8d, 0x0d, 0x41, 0xa6, 0xa4, 0x3f, 0xa2, 0x37, 0xfb, 0x45, 0xb7, 0xce, 0xfe,
|
||||
0xcd, 0xb8, 0x27, 0x27, 0x95, 0x4b, 0x0e, 0xc7, 0x5c, 0x75, 0x75, 0xf5, 0xf3, 0xa5, 0x10, 0x0e,
|
||||
0xaa, 0xa9, 0xa9, 0x69, 0xec, 0xee, 0xee, 0x3e, 0xff, 0x2c, 0xea, 0xea, 0xfa, 0xe8, 0xfc, 0x9b,
|
||||
0x27, 0x3a, 0xba, 0xd8, 0x75, 0x65, 0x2e, 0x07, 0x21, 0xfd, 0x0d, 0x5a, 0x2f, 0x58, 0xe8, 0xa4,
|
||||
0x51, 0x14, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
0xce, 0x00, 0x00, 0x04, 0xaa, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xad, 0x96, 0x6d, 0x4c, 0x5b,
|
||||
0x65, 0x14, 0x80, 0x0b, 0xc8, 0x9a, 0x31, 0x60, 0x60, 0x16, 0x51, 0xa2, 0x7f, 0x9a, 0xf8, 0x91,
|
||||
0x00, 0xc9, 0xfe, 0x10, 0x93, 0x25, 0xa2, 0x21, 0xfb, 0x07, 0x68, 0x02, 0x24, 0x6a, 0x22, 0x41,
|
||||
0xf6, 0xc7, 0x18, 0x22, 0x41, 0x02, 0x31, 0xa2, 0x15, 0x17, 0x70, 0x38, 0x87, 0x13, 0x13, 0x08,
|
||||
0xe3, 0x82, 0x40, 0x57, 0x50, 0xda, 0x0e, 0x56, 0x3e, 0x12, 0xbe, 0x34, 0x45, 0xa0, 0x4c, 0x11,
|
||||
0x5d, 0x5c, 0x5c, 0x08, 0x5b, 0x10, 0xc9, 0xc6, 0x58, 0xbf, 0x3f, 0x69, 0x0b, 0xbd, 0xed, 0xf1,
|
||||
0x3d, 0x07, 0x6e, 0xb9, 0x17, 0xd6, 0x66, 0x26, 0xde, 0xe4, 0x49, 0xef, 0x6d, 0xdf, 0x7b, 0x9e,
|
||||
0xf7, 0x9c, 0xf3, 0xde, 0xf7, 0x56, 0x26, 0x93, 0xc9, 0x9e, 0x64, 0x9c, 0xfe, 0x1f, 0x91, 0x03,
|
||||
0x80, 0xec, 0x30, 0x78, 0x9c, 0xb1, 0x58, 0x2c, 0x7e, 0x9b, 0xcd, 0x1e, 0xb2, 0xdb, 0x19, 0x0e,
|
||||
0x47, 0xc8, 0xe1, 0x74, 0x86, 0x9c, 0x88, 0xcb, 0x15, 0x72, 0x09, 0xb8, 0xdd, 0x21, 0x37, 0xe2,
|
||||
0xf1, 0x84, 0x3c, 0x51, 0x58, 0x5a, 0x5a, 0xda, 0x60, 0xf1, 0x9e, 0x8e, 0x2a, 0x72, 0x38, 0x1c,
|
||||
0xbc, 0xd9, 0x62, 0x01, 0x8b, 0xd5, 0x0a, 0x56, 0x9b, 0x0d, 0x6c, 0x76, 0x3b, 0x30, 0x21, 0x30,
|
||||
0x21, 0x38, 0x11, 0x97, 0x0b, 0x98, 0x08, 0xdc, 0x88, 0xc7, 0x03, 0x1e, 0x01, 0xaf, 0x57, 0xc2,
|
||||
0xca, 0xca, 0x8a, 0x29, 0xa6, 0x88, 0x05, 0xe3, 0x51, 0xd2, 0xd3, 0xd3, 0x03, 0x06, 0x83, 0x01,
|
||||
0x7e, 0x9e, 0x9b, 0x83, 0x39, 0x64, 0x7e, 0x1e, 0xe6, 0xa3, 0xb1, 0xb0, 0x00, 0x0b, 0x88, 0xd1,
|
||||
0xb8, 0x07, 0x3b, 0x67, 0xf7, 0x06, 0x27, 0x26, 0x26, 0x56, 0x27, 0x27, 0x27, 0xff, 0x2a, 0x29,
|
||||
0x29, 0xb9, 0x7c, 0x44, 0xc4, 0x4a, 0xc3, 0x63, 0x16, 0x1a, 0x8d, 0x86, 0xb2, 0x32, 0x99, 0xcd,
|
||||
0xd2, 0xec, 0xc4, 0x19, 0x62, 0x76, 0xe2, 0x0c, 0xf7, 0xb3, 0x3c, 0x4c, 0x53, 0x53, 0x93, 0xf6,
|
||||
0xa8, 0xc8, 0xed, 0xe6, 0x31, 0x90, 0x56, 0xab, 0x05, 0x1b, 0x0b, 0xfe, 0x60, 0x6b, 0x8b, 0xa4,
|
||||
0x7a, 0xbd, 0x1e, 0xf4, 0x23, 0x23, 0x30, 0x82, 0x8c, 0x8e, 0xc2, 0xe8, 0x3e, 0x63, 0x63, 0x63,
|
||||
0x30, 0x36, 0x3e, 0x0e, 0xe3, 0x31, 0xa8, 0xae, 0xae, 0xfe, 0xa3, 0xac, 0xac, 0xec, 0x03, 0x44,
|
||||
0x2e, 0x97, 0xbf, 0x48, 0x22, 0x36, 0x2b, 0x1e, 0x67, 0xaa, 0xd5, 0xe9, 0x68, 0xe6, 0xf7, 0x37,
|
||||
0x37, 0xa9, 0x1c, 0x16, 0x6b, 0x8c, 0x7e, 0xed, 0xcf, 0x1c, 0x7b, 0xe3, 0x8d, 0x41, 0x60, 0x67,
|
||||
0x07, 0x32, 0x33, 0x33, 0x5f, 0x27, 0x11, 0x6b, 0x2c, 0x8f, 0x37, 0xeb, 0x98, 0xe8, 0xa1, 0xc9,
|
||||
0x04, 0x7f, 0xaf, 0xaf, 0x53, 0x1f, 0x4c, 0xe6, 0x28, 0x0b, 0x44, 0x5c, 0x3e, 0x41, 0x18, 0x45,
|
||||
0xea, 0x0f, 0x04, 0x0e, 0x44, 0xec, 0x0b, 0x1e, 0x07, 0xab, 0xd5, 0x6a, 0x48, 0x4c, 0x4c, 0xc4,
|
||||
0x82, 0x42, 0x7c, 0x7c, 0x3c, 0xdc, 0xb9, 0x7b, 0x97, 0x4a, 0x29, 0x08, 0xba, 0x3f, 0x93, 0x43,
|
||||
0x67, 0xbd, 0x2c, 0x26, 0x83, 0x5f, 0xbf, 0xc0, 0x04, 0x6e, 0xf0, 0xf9, 0x7c, 0xc4, 0x8e, 0x38,
|
||||
0x23, 0xef, 0xf6, 0x36, 0x8f, 0xf6, 0xba, 0xba, 0x3a, 0x92, 0x08, 0x74, 0x72, 0x9c, 0x24, 0x8b,
|
||||
0xc7, 0x11, 0x21, 0x37, 0xe7, 0x2e, 0x43, 0x80, 0x65, 0x82, 0xec, 0x06, 0x83, 0x07, 0xa2, 0x6d,
|
||||
0x26, 0x62, 0x40, 0x7e, 0x7e, 0xbe, 0x44, 0x54, 0x5a, 0x5a, 0x4a, 0x7d, 0xc1, 0x32, 0x61, 0xc6,
|
||||
0x82, 0xa8, 0xb7, 0x4b, 0x0d, 0x6a, 0xd5, 0x10, 0xf4, 0x5f, 0x1d, 0x8e, 0x30, 0xa0, 0xbe, 0x0e,
|
||||
0xaa, 0x8e, 0x8f, 0xe9, 0xf7, 0xee, 0x86, 0x93, 0xe0, 0x71, 0x99, 0x60, 0x77, 0x77, 0x17, 0x78,
|
||||
0x9e, 0x17, 0x89, 0x7c, 0x3e, 0x12, 0xa5, 0xa5, 0xa5, 0x91, 0x20, 0x2f, 0x2f, 0x8f, 0x3e, 0xd3,
|
||||
0xd3, 0xd3, 0x29, 0x23, 0x94, 0x60, 0xc6, 0x82, 0x48, 0xfb, 0xc3, 0x10, 0xcd, 0x16, 0xcb, 0x82,
|
||||
0xc1, 0x04, 0x82, 0x6c, 0xf6, 0x23, 0xdc, 0x6b, 0x34, 0xc6, 0x30, 0xf4, 0x3e, 0x5d, 0x4b, 0x44,
|
||||
0xac, 0x96, 0xfc, 0xe2, 0xe2, 0x62, 0x24, 0x13, 0xf6, 0xd0, 0x41, 0x42, 0x42, 0x02, 0x9d, 0x4f,
|
||||
0xcf, 0xcc, 0x90, 0x04, 0x27, 0x22, 0x88, 0x74, 0x83, 0xc3, 0x92, 0xe0, 0x62, 0x4c, 0xf7, 0x7e,
|
||||
0x07, 0xee, 0x93, 0x78, 0x46, 0x02, 0x58, 0x1f, 0xde, 0x3e, 0x2a, 0x52, 0x2a, 0x95, 0x14, 0x98,
|
||||
0x7d, 0x09, 0x56, 0xb6, 0xd2, 0x72, 0x72, 0x72, 0xe8, 0xba, 0xb6, 0xb6, 0x96, 0x24, 0x3e, 0xbf,
|
||||
0x3f, 0x22, 0xba, 0xa6, 0xb9, 0x2e, 0x09, 0x8e, 0xc1, 0xc4, 0x18, 0xae, 0x9d, 0xa3, 0x71, 0xd5,
|
||||
0x9f, 0x27, 0x43, 0xea, 0x37, 0x2f, 0x81, 0xfc, 0x92, 0x62, 0x77, 0x4f, 0xe4, 0xf7, 0xf3, 0xb9,
|
||||
0xb9, 0xb9, 0x14, 0xb8, 0xbc, 0xbc, 0x9c, 0x56, 0x5a, 0x45, 0x45, 0x05, 0x5d, 0x67, 0x67, 0x67,
|
||||
0x93, 0x04, 0x4b, 0x75, 0x58, 0x24, 0x0e, 0x1e, 0x0a, 0x85, 0x22, 0x78, 0x5d, 0x0f, 0xe0, 0xca,
|
||||
0xfe, 0xd8, 0xd3, 0xcd, 0xcf, 0x80, 0xbc, 0x45, 0x41, 0x5b, 0xc3, 0x99, 0x8d, 0x8d, 0x0d, 0x3e,
|
||||
0x2e, 0x2e, 0x8e, 0x02, 0x0f, 0x0c, 0x0c, 0xd0, 0x96, 0xd3, 0xde, 0xde, 0x1e, 0x29, 0xe5, 0xda,
|
||||
0xda, 0x1a, 0xf5, 0x43, 0x2c, 0x7a, 0x94, 0x20, 0x1c, 0x0e, 0x13, 0x01, 0xbf, 0x13, 0xae, 0x9c,
|
||||
0x4f, 0xa1, 0xb1, 0x2f, 0x5f, 0xc8, 0x38, 0x10, 0x71, 0x1c, 0x17, 0x12, 0x82, 0x4e, 0x4d, 0x4d,
|
||||
0xd1, 0xa6, 0x8a, 0x1b, 0xac, 0x20, 0x6f, 0x6b, 0x6b, 0xa3, 0x7e, 0x08, 0xa2, 0x21, 0xad, 0x5e,
|
||||
0x22, 0x11, 0x04, 0x08, 0x1e, 0xbf, 0x4c, 0xd4, 0xd1, 0xb8, 0x8f, 0x1a, 0x8e, 0xc3, 0x89, 0x96,
|
||||
0xe7, 0x41, 0xfe, 0x95, 0x22, 0x48, 0xa2, 0xe2, 0xe2, 0xe2, 0xb0, 0x78, 0x59, 0x1f, 0xa6, 0xa0,
|
||||
0xa0, 0xe0, 0x88, 0xe8, 0xb0, 0x04, 0x0f, 0xbc, 0xb6, 0x9b, 0x57, 0xa1, 0x4b, 0x79, 0x8c, 0x16,
|
||||
0xc4, 0xa0, 0xea, 0x5b, 0xb8, 0xb1, 0xf8, 0x2b, 0xae, 0xde, 0xf7, 0x50, 0xf4, 0x4a, 0x6a, 0x6a,
|
||||
0x2a, 0xc4, 0x12, 0x25, 0x25, 0x25, 0x49, 0x96, 0xf7, 0xb0, 0x6e, 0x24, 0x22, 0xc1, 0x03, 0x3f,
|
||||
0xb1, 0x67, 0x38, 0x66, 0xac, 0xa7, 0x60, 0x6f, 0x32, 0x9d, 0x6f, 0x80, 0x4e, 0x33, 0x0a, 0x0e,
|
||||
0xf6, 0x0c, 0x0a, 0xab, 0xae, 0x52, 0x08, 0x58, 0x54, 0x54, 0x04, 0x2d, 0x2d, 0x2d, 0xd0, 0xdc,
|
||||
0xdc, 0x0c, 0x35, 0x35, 0x35, 0xb8, 0x03, 0x47, 0x64, 0xb8, 0x23, 0x8b, 0x45, 0xe2, 0x72, 0xa1,
|
||||
0x04, 0xfb, 0x7a, 0xf3, 0xc6, 0x20, 0xfd, 0xde, 0xa5, 0x3c, 0x0e, 0x5f, 0x36, 0x9e, 0x87, 0xe9,
|
||||
0xe9, 0x1f, 0xa1, 0x5f, 0xa3, 0xb9, 0xc7, 0xee, 0x7f, 0x16, 0x45, 0x1c, 0x06, 0x62, 0xfd, 0xe0,
|
||||
0xab, 0xaa, 0xaa, 0x7e, 0xc3, 0xa6, 0xe3, 0x6e, 0xb0, 0xbc, 0xbc, 0x4c, 0xef, 0x9a, 0xe4, 0xe4,
|
||||
0x64, 0x12, 0x55, 0x56, 0x56, 0x46, 0x44, 0x5d, 0x0d, 0xe9, 0x70, 0x95, 0x35, 0x59, 0x40, 0xf5,
|
||||
0xc5, 0x53, 0xd0, 0xdb, 0x78, 0x0a, 0xb8, 0x4f, 0xf7, 0x7e, 0x9f, 0xd2, 0x7c, 0x08, 0x86, 0x9f,
|
||||
0x8c, 0xd0, 0xdd, 0xd7, 0x67, 0x4a, 0x49, 0x49, 0x39, 0x25, 0xbc, 0x8f, 0x6e, 0xef, 0xcf, 0x7a,
|
||||
0xa1, 0xbe, 0xbe, 0xbe, 0x43, 0x2c, 0xc2, 0x25, 0x5d, 0x58, 0x58, 0x48, 0x22, 0x85, 0x42, 0xf1,
|
||||
0x58, 0x7b, 0x5d, 0xff, 0xc5, 0xe7, 0xa0, 0xef, 0xbb, 0x7e, 0xb8, 0x70, 0xf1, 0xd2, 0xfd, 0x8c,
|
||||
0x8c, 0x8c, 0x13, 0xe2, 0x17, 0xdf, 0x49, 0x46, 0x1a, 0x23, 0x89, 0x2d, 0x8a, 0x46, 0xa3, 0xd1,
|
||||
0xb8, 0x36, 0x3b, 0x3b, 0xfb, 0x0f, 0xdb, 0x29, 0x82, 0x28, 0xc5, 0xac, 0xd8, 0x9f, 0x17, 0x7a,
|
||||
0x88, 0x3d, 0xce, 0x4d, 0xb0, 0x5b, 0x36, 0x40, 0xdd, 0xdb, 0x0b, 0xdf, 0xab, 0x54, 0x84, 0xaa,
|
||||
0xbb, 0x1b, 0xda, 0x5b, 0x5b, 0x59, 0xa9, 0x1a, 0xa1, 0x95, 0x95, 0x9d, 0xeb, 0xe0, 0xe0, 0xed,
|
||||
0x77, 0xce, 0xdd, 0xc9, 0xca, 0xca, 0x3a, 0x26, 0x79, 0xc3, 0x46, 0xf9, 0x23, 0x91, 0xc4, 0x84,
|
||||
0xeb, 0xc2, 0x5e, 0x26, 0x7e, 0x38, 0xc5, 0x2b, 0x0d, 0xcf, 0x71, 0xd7, 0x60, 0xcf, 0x21, 0xeb,
|
||||
0xc7, 0x34, 0xfc, 0x79, 0xeb, 0x56, 0xb8, 0xe4, 0xcd, 0xb7, 0xba, 0xd8, 0xfd, 0x71, 0x47, 0x62,
|
||||
0x46, 0x13, 0xcd, 0xcc, 0xcc, 0xac, 0x32, 0x49, 0x98, 0x49, 0x08, 0x26, 0x21, 0x58, 0x70, 0x09,
|
||||
0x81, 0xc0, 0x4e, 0x78, 0xcb, 0x64, 0x0e, 0xeb, 0xf4, 0xa3, 0xde, 0x57, 0xcf, 0x9e, 0x7d, 0xf7,
|
||||
0x51, 0xf1, 0x62, 0x89, 0x9e, 0xc0, 0xe7, 0xeb, 0x3f, 0xa2, 0x88, 0x26, 0x41, 0xfe, 0x05, 0xd8,
|
||||
0x59, 0x10, 0x8c, 0xd8, 0x02, 0xbb, 0x25, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae,
|
||||
0x42, 0x60, 0x82,
|
||||
};
|
||||
|
||||
const BITMAP_OPAQUE add_hierarchical_label_xpm[1] = {{ png, sizeof( png ), "add_hierarchical_label_xpm" }};
|
||||
|
||||
@@ -8,18 +8,34 @@
|
||||
static const unsigned char png[] = {
|
||||
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
|
||||
0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c,
|
||||
0xce, 0x00, 0x00, 0x00, 0x9a, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0x63, 0xf8, 0xff, 0xff, 0x3f,
|
||||
0x03, 0x3d, 0x30, 0x45, 0x9a, 0xfd, 0xfc, 0xfc, 0x3c, 0x7c, 0x7d, 0x7d, 0x13, 0x40, 0x34, 0x4d,
|
||||
0x2d, 0x82, 0x5a, 0xd2, 0x00, 0xa2, 0x47, 0x2d, 0x1a, 0xb5, 0x88, 0xf6, 0x16, 0x31, 0x34, 0x30,
|
||||
0x08, 0x28, 0x67, 0x28, 0x4f, 0x90, 0xcd, 0x93, 0xdd, 0x09, 0xa2, 0x41, 0x7c, 0xaa, 0x5b, 0xc4,
|
||||
0xd0, 0xcc, 0xe0, 0xc3, 0xd0, 0xc4, 0xf0, 0x02, 0x88, 0xff, 0x23, 0xe1, 0x17, 0x20, 0x71, 0xaa,
|
||||
0x59, 0x04, 0x34, 0x50, 0x17, 0x88, 0x7f, 0xa2, 0x59, 0x02, 0xc3, 0x20, 0x71, 0x5d, 0x9c, 0x16,
|
||||
0x79, 0x79, 0x79, 0x49, 0x04, 0x04, 0x04, 0x28, 0x10, 0x83, 0x59, 0x1a, 0x58, 0x76, 0xe1, 0xb0,
|
||||
0x04, 0x86, 0x37, 0xe0, 0xb4, 0x08, 0x16, 0xa9, 0xc4, 0x60, 0x96, 0x7a, 0x96, 0xcf, 0x04, 0x2c,
|
||||
0x7a, 0x36, 0xf0, 0x16, 0xd1, 0x2d, 0xe8, 0xe8, 0x96, 0x18, 0x06, 0x65, 0xf2, 0xa6, 0x6b, 0x86,
|
||||
0x1d, 0x2d, 0x54, 0x47, 0x2d, 0x1a, 0x38, 0x8b, 0xe8, 0xd6, 0xdc, 0x22, 0x05, 0x03, 0x00, 0x5f,
|
||||
0x00, 0xcf, 0xb1, 0x61, 0x8e, 0x75, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae,
|
||||
0x42, 0x60, 0x82,
|
||||
0xce, 0x00, 0x00, 0x01, 0xa3, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xed, 0xd6, 0x3f, 0x6b, 0x93,
|
||||
0x51, 0x14, 0xc7, 0xf1, 0x4f, 0x93, 0x68, 0xb1, 0xad, 0x0a, 0x2a, 0x82, 0x50, 0x8b, 0x08, 0x0e,
|
||||
0x82, 0x83, 0x55, 0x42, 0x03, 0x15, 0xa9, 0xed, 0x93, 0x22, 0xb4, 0xda, 0x5a, 0x70, 0x11, 0x1b,
|
||||
0x33, 0x39, 0xb4, 0xd1, 0xc5, 0x46, 0xa7, 0x8a, 0xa0, 0x2f, 0x40, 0x7c, 0x01, 0xba, 0xf8, 0x0a,
|
||||
0x1c, 0x74, 0x76, 0x12, 0xc1, 0x97, 0xa2, 0xa3, 0xf4, 0x1f, 0x7d, 0xae, 0x83, 0x4f, 0x4a, 0x12,
|
||||
0x7d, 0xe2, 0x93, 0xc6, 0x8a, 0x43, 0x87, 0xdf, 0x76, 0xee, 0xfd, 0x72, 0xce, 0xf9, 0x9d, 0x7b,
|
||||
0xae, 0x10, 0x82, 0x5e, 0x84, 0xbe, 0x86, 0x3a, 0xc6, 0xf5, 0x04, 0x59, 0x15, 0x76, 0xc4, 0x31,
|
||||
0x14, 0xfe, 0x05, 0xa8, 0x8a, 0xe3, 0x69, 0x99, 0xfd, 0x4d, 0x50, 0x0d, 0x27, 0xf7, 0x41, 0x9d,
|
||||
0x01, 0x65, 0xe7, 0x44, 0x5e, 0x59, 0x10, 0x5c, 0x17, 0xdc, 0x12, 0x14, 0x7d, 0x74, 0xc1, 0x04,
|
||||
0x0e, 0xf4, 0x0c, 0xf2, 0x4c, 0xce, 0x94, 0x27, 0xca, 0xd6, 0x2c, 0xda, 0xb6, 0x24, 0x78, 0x24,
|
||||
0x58, 0x12, 0xdc, 0x15, 0x8b, 0x6c, 0x1a, 0xf7, 0xd2, 0x09, 0x87, 0xdb, 0x33, 0xeb, 0x0e, 0x34,
|
||||
0xad, 0x6e, 0xd6, 0x77, 0x2b, 0x4d, 0x25, 0x6b, 0xd6, 0x8a, 0x60, 0xc6, 0xba, 0x31, 0x6f, 0x70,
|
||||
0xb4, 0x19, 0x96, 0x1d, 0x12, 0x39, 0xaf, 0x6c, 0x4d, 0x3d, 0x05, 0xd2, 0xd0, 0x63, 0x41, 0x64,
|
||||
0xd3, 0x19, 0x55, 0x0c, 0xfc, 0x02, 0x42, 0x01, 0xfd, 0xa9, 0x8a, 0xbc, 0xb6, 0x28, 0xee, 0x08,
|
||||
0x69, 0xe8, 0x9e, 0x58, 0xc9, 0x27, 0x8c, 0x20, 0xbf, 0x03, 0xca, 0x74, 0x78, 0x5e, 0x50, 0xcb,
|
||||
0x10, 0xb7, 0x2a, 0x78, 0x28, 0x98, 0xf4, 0x15, 0x25, 0xf4, 0x77, 0x07, 0x9a, 0x16, 0xfe, 0x58,
|
||||
0xb6, 0xd6, 0xf2, 0x6d, 0xe3, 0x26, 0x06, 0xbb, 0x03, 0xcd, 0x75, 0x9d, 0xd1, 0x37, 0xdc, 0x68,
|
||||
0x05, 0xfd, 0xec, 0xcf, 0x08, 0x2e, 0xa1, 0xf8, 0x5b, 0x5d, 0xf5, 0x4e, 0x25, 0x63, 0x8f, 0xaa,
|
||||
0x62, 0x25, 0x5f, 0x30, 0xd6, 0x52, 0xba, 0x04, 0x96, 0xc7, 0xc1, 0x54, 0x5d, 0x71, 0x59, 0xd9,
|
||||
0x7a, 0x46, 0xd7, 0x6d, 0x39, 0xe5, 0x39, 0x4e, 0xb7, 0x98, 0x21, 0xb3, 0xc5, 0xa7, 0x3c, 0x35,
|
||||
0xd3, 0xc1, 0xe2, 0x75, 0xc1, 0xac, 0x0d, 0xa3, 0x3e, 0x24, 0x46, 0x38, 0xb4, 0xbb, 0x81, 0xbd,
|
||||
0x2d, 0x6f, 0xd2, 0x0b, 0x65, 0x1b, 0x2a, 0x62, 0xb5, 0xe4, 0xf2, 0x9a, 0xa0, 0x22, 0x16, 0xd9,
|
||||
0x32, 0xea, 0xbd, 0x82, 0x6b, 0x38, 0xb2, 0xab, 0x81, 0x6d, 0xd9, 0xa8, 0xe3, 0x2e, 0x9a, 0xf0,
|
||||
0xd6, 0x7c, 0xe2, 0xc6, 0x39, 0x41, 0xd1, 0x67, 0xc3, 0x6a, 0x38, 0x8b, 0x81, 0x9e, 0x9e, 0xa0,
|
||||
0x36, 0x60, 0xae, 0xed, 0xf5, 0x7e, 0x80, 0xe1, 0xb4, 0x2d, 0xbb, 0xbf, 0x8f, 0xfe, 0x0b, 0xd0,
|
||||
0xf2, 0xde, 0x81, 0x18, 0xc2, 0x02, 0xee, 0xe3, 0x4e, 0xf2, 0xe5, 0xda, 0x13, 0x50, 0x1f, 0x06,
|
||||
0x93, 0x99, 0x19, 0x42, 0x2e, 0x2d, 0xf6, 0x07, 0x38, 0xc8, 0x81, 0xcd, 0xab, 0xde, 0xd2, 0xd3,
|
||||
0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
};
|
||||
|
||||
const BITMAP_OPAQUE add_junction_xpm[1] = {{ png, sizeof( png ), "add_junction_xpm" }};
|
||||
|
||||
@@ -8,29 +8,72 @@
|
||||
static const unsigned char png[] = {
|
||||
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
|
||||
0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c,
|
||||
0xce, 0x00, 0x00, 0x01, 0x5b, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xcd, 0x96, 0x31, 0x6e, 0xc2,
|
||||
0x30, 0x14, 0x86, 0x0d, 0x2c, 0x28, 0xf6, 0x05, 0x98, 0x7a, 0x11, 0x24, 0x7a, 0x8d, 0x74, 0x67,
|
||||
0x66, 0x40, 0x62, 0x86, 0x99, 0x81, 0xb5, 0x67, 0xe8, 0xc6, 0xc0, 0xd2, 0xa5, 0x07, 0x48, 0x07,
|
||||
0x12, 0xa4, 0x5e, 0xa1, 0xc7, 0x80, 0xf7, 0x9b, 0xa4, 0x3c, 0x1b, 0xc7, 0x38, 0xa9, 0x03, 0x20,
|
||||
0x3d, 0x62, 0x39, 0xb6, 0x3f, 0xbd, 0xcf, 0x2f, 0x71, 0x84, 0x58, 0x8a, 0xe3, 0x5d, 0x02, 0x7f,
|
||||
0xf4, 0xc3, 0x75, 0x4c, 0xf1, 0x5b, 0x5e, 0x63, 0xb7, 0xcf, 0xa0, 0x8e, 0x21, 0x63, 0x0e, 0xca,
|
||||
0xd0, 0x51, 0x66, 0xe6, 0x6e, 0xaf, 0xc4, 0xbc, 0x4d, 0xdb, 0x00, 0x31, 0x75, 0x19, 0xda, 0xb1,
|
||||
0xc2, 0xab, 0xce, 0x35, 0xe1, 0x67, 0x38, 0x7c, 0x29, 0x92, 0x64, 0x9a, 0x4b, 0xb9, 0xce, 0x95,
|
||||
0xda, 0xea, 0xa0, 0x36, 0xfa, 0x70, 0xef, 0x06, 0xc4, 0x50, 0xe7, 0x86, 0x08, 0xd1, 0x2f, 0xa4,
|
||||
0x7c, 0xdb, 0x4b, 0xf9, 0x49, 0xd7, 0x2f, 0x57, 0xe0, 0x1e, 0x41, 0x53, 0x8c, 0x35, 0x40, 0x2e,
|
||||
0x75, 0xac, 0x23, 0xe3, 0x10, 0x5a, 0x60, 0x53, 0x07, 0xb0, 0x03, 0x63, 0xaf, 0x60, 0x21, 0xea,
|
||||
0x90, 0x89, 0xb1, 0x98, 0x52, 0xef, 0x14, 0x93, 0xef, 0x24, 0x19, 0x21, 0x0e, 0x4a, 0xbd, 0x52,
|
||||
0xff, 0xce, 0x82, 0xa5, 0x8d, 0xd4, 0xc1, 0x3b, 0xd7, 0x45, 0x0b, 0xcc, 0x3e, 0x84, 0x18, 0xb0,
|
||||
0x6c, 0x7b, 0xd4, 0xbf, 0x70, 0x69, 0xac, 0xf6, 0xcc, 0xaf, 0x8e, 0x6e, 0xea, 0x6c, 0x68, 0x93,
|
||||
0x79, 0x26, 0x01, 0x90, 0x4b, 0x66, 0x34, 0x37, 0x58, 0x9d, 0xae, 0xa8, 0x0b, 0x68, 0x72, 0x03,
|
||||
0xb2, 0x28, 0x35, 0x56, 0xd9, 0xaf, 0x83, 0xd5, 0xa1, 0x7c, 0xab, 0x89, 0xd8, 0x0f, 0x1f, 0x04,
|
||||
0xfd, 0x18, 0xf3, 0x07, 0xa2, 0xb9, 0xc1, 0xea, 0xae, 0x40, 0x1e, 0x08, 0xc6, 0xbb, 0x40, 0x8d,
|
||||
0xd5, 0x95, 0x5a, 0x6a, 0x21, 0x7a, 0x4f, 0x49, 0x6f, 0x2b, 0x75, 0x46, 0x31, 0x58, 0x25, 0x6c,
|
||||
0x43, 0x50, 0x28, 0xba, 0xf4, 0xad, 0x62, 0x08, 0x52, 0x67, 0x97, 0xb7, 0x0f, 0x82, 0xd2, 0x77,
|
||||
0x95, 0x77, 0xfb, 0x07, 0x96, 0x32, 0x83, 0xc6, 0xea, 0x81, 0xd5, 0xba, 0x78, 0x26, 0x6d, 0x1e,
|
||||
0xd8, 0x18, 0xaf, 0xa0, 0x20, 0x75, 0x31, 0x5e, 0xaa, 0x4f, 0x7a, 0x4c, 0xfc, 0xe7, 0xd0, 0xe3,
|
||||
0xa7, 0x6d, 0x9d, 0xba, 0xd8, 0xed, 0x87, 0x7c, 0x9c, 0x74, 0x06, 0xb1, 0xd5, 0x75, 0x1e, 0x27,
|
||||
0x81, 0x0d, 0x43, 0x7e, 0x87, 0x6e, 0x2b, 0x40, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44,
|
||||
0xce, 0x00, 0x00, 0x04, 0x0b, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xbd, 0xd6, 0x5f, 0x4c, 0x53,
|
||||
0x57, 0x1c, 0x07, 0xf0, 0x5b, 0x4a, 0x59, 0x41, 0x18, 0xcc, 0x44, 0xd4, 0x42, 0x81, 0xd2, 0xd6,
|
||||
0x21, 0xd3, 0x0d, 0xc7, 0xc0, 0xc4, 0xd0, 0x0c, 0x1a, 0x61, 0xe8, 0x58, 0x04, 0x16, 0x15, 0x87,
|
||||
0x32, 0x08, 0x43, 0x83, 0xcc, 0x4c, 0x37, 0x56, 0xa0, 0x02, 0x86, 0xe0, 0xa4, 0x30, 0x81, 0xc1,
|
||||
0x1c, 0x6a, 0x41, 0xf9, 0x53, 0x6a, 0xe5, 0x6f, 0x0b, 0x88, 0x80, 0xe0, 0xda, 0x52, 0xda, 0x42,
|
||||
0xf4, 0x61, 0xcf, 0x4b, 0x7c, 0x59, 0x32, 0x93, 0xbd, 0x2c, 0xf1, 0xdf, 0x93, 0x8c, 0xef, 0x7a,
|
||||
0x6f, 0xd3, 0xd3, 0x15, 0xda, 0x72, 0xb7, 0x87, 0x3d, 0x7c, 0xdb, 0xdb, 0x7b, 0xcf, 0xf9, 0x7d,
|
||||
0xee, 0x39, 0x3d, 0xf7, 0x0f, 0x05, 0x80, 0xfa, 0x3f, 0xc2, 0x7c, 0xc4, 0xbe, 0x1d, 0xf4, 0x4b,
|
||||
0x94, 0x24, 0xe0, 0x35, 0x9d, 0xb4, 0x0c, 0xce, 0x6a, 0xe1, 0x29, 0xce, 0x5a, 0x45, 0x05, 0xb5,
|
||||
0x76, 0xfe, 0x3c, 0x85, 0xa2, 0x62, 0xce, 0x5a, 0xd6, 0x61, 0xce, 0x5f, 0xd1, 0x52, 0xe7, 0xf1,
|
||||
0xff, 0x90, 0x17, 0x04, 0x12, 0xef, 0x09, 0x7d, 0xd2, 0xa0, 0x56, 0xe1, 0x72, 0x6b, 0x2a, 0x6a,
|
||||
0xaa, 0x29, 0xaf, 0x69, 0xb8, 0x22, 0x85, 0xfa, 0x7e, 0x3f, 0x7a, 0x8d, 0x73, 0xac, 0x73, 0x7d,
|
||||
0x7a, 0x0c, 0x51, 0x52, 0xee, 0x6b, 0x0f, 0xe8, 0x92, 0x6a, 0x3d, 0xc2, 0xc1, 0xc5, 0xda, 0x10,
|
||||
0x8f, 0x7d, 0x8d, 0xcd, 0x89, 0xd0, 0x2d, 0x5b, 0x70, 0x77, 0xc5, 0xca, 0x2a, 0x34, 0xe6, 0x01,
|
||||
0xa5, 0x65, 0xf0, 0x9f, 0xba, 0x8a, 0x29, 0x6b, 0xb8, 0x68, 0xef, 0x2d, 0xc2, 0x80, 0x71, 0xd4,
|
||||
0xd1, 0x78, 0x09, 0x3d, 0xd3, 0xd7, 0x50, 0xdf, 0x10, 0x49, 0x30, 0x65, 0xf7, 0x51, 0xd4, 0x4c,
|
||||
0xb4, 0x42, 0x61, 0x68, 0xc1, 0x80, 0xed, 0xe7, 0x7f, 0x07, 0xe5, 0x1d, 0xe3, 0xfd, 0xe9, 0x2a,
|
||||
0xa4, 0xea, 0x90, 0x6d, 0xe8, 0xd0, 0x35, 0x5c, 0x43, 0xa0, 0xfc, 0x2a, 0x0a, 0x5c, 0x85, 0x33,
|
||||
0x1f, 0xb4, 0x1d, 0x80, 0x76, 0x79, 0x91, 0x3d, 0x54, 0x52, 0xca, 0x7d, 0xe5, 0x2a, 0x74, 0xd3,
|
||||
0xd0, 0xb4, 0xa1, 0xc3, 0x1d, 0xc7, 0x99, 0x2b, 0x95, 0x3c, 0xe6, 0xf8, 0x99, 0x6a, 0x37, 0x44,
|
||||
0x47, 0xf6, 0x63, 0x16, 0x74, 0x8e, 0x91, 0xb3, 0x82, 0x0a, 0x0a, 0x03, 0x9f, 0xb9, 0xa0, 0x1f,
|
||||
0xfa, 0x4a, 0x36, 0x74, 0x18, 0x5c, 0x9c, 0x22, 0x23, 0x3a, 0xb9, 0x0e, 0xa2, 0x93, 0x7d, 0x33,
|
||||
0x9f, 0x1d, 0x74, 0xf0, 0xd0, 0x1b, 0x7f, 0xd4, 0x56, 0x52, 0x68, 0xfa, 0x82, 0x83, 0xba, 0x4b,
|
||||
0x6f, 0x41, 0x63, 0x9e, 0x20, 0x8d, 0x75, 0x76, 0x13, 0x5a, 0xba, 0xb2, 0x09, 0x54, 0xd6, 0x24,
|
||||
0xc5, 0xc7, 0xea, 0x63, 0x4c, 0xc2, 0x6b, 0xc3, 0x09, 0xf6, 0xe9, 0xed, 0xe2, 0xcd, 0x21, 0xc9,
|
||||
0xde, 0xd0, 0x27, 0x5a, 0xf9, 0x56, 0x98, 0xb7, 0x71, 0x61, 0xd8, 0xcb, 0x45, 0xc7, 0x09, 0x2e,
|
||||
0x9a, 0x3b, 0xe5, 0x68, 0xeb, 0x39, 0x8e, 0xba, 0xfa, 0x70, 0xf7, 0x42, 0x70, 0x4c, 0x5f, 0xdf,
|
||||
0x82, 0x96, 0x14, 0xba, 0x7a, 0xa7, 0x15, 0x29, 0xc5, 0x7c, 0x82, 0x15, 0x0d, 0x9e, 0xf3, 0x0f,
|
||||
0xe5, 0x8a, 0x42, 0x7e, 0xb7, 0x08, 0x22, 0x61, 0x8e, 0x0c, 0x62, 0x30, 0x3a, 0x33, 0x62, 0x2e,
|
||||
0x5a, 0x4a, 0x38, 0x1e, 0xcb, 0xbb, 0x53, 0x53, 0xce, 0x14, 0x98, 0xe8, 0xbe, 0x01, 0x53, 0xce,
|
||||
0x61, 0x2c, 0x8b, 0xe2, 0x60, 0x16, 0xee, 0x40, 0xe1, 0x47, 0x3c, 0x06, 0x0a, 0x54, 0x70, 0x50,
|
||||
0x3e, 0xa4, 0xf4, 0x0d, 0xc9, 0xa4, 0x21, 0xbf, 0x8d, 0xe6, 0xe5, 0xc0, 0x26, 0x15, 0xc3, 0xb2,
|
||||
0x63, 0x0b, 0xc1, 0x4c, 0x91, 0x5c, 0xdc, 0xca, 0x0a, 0x40, 0x7d, 0x7d, 0x04, 0x6e, 0x8c, 0x37,
|
||||
0x62, 0xb2, 0xb3, 0x1d, 0x66, 0x79, 0x3a, 0x03, 0xd0, 0x59, 0x4c, 0xff, 0x10, 0xe3, 0x43, 0x5a,
|
||||
0x5c, 0x18, 0x6b, 0x44, 0x60, 0x55, 0x00, 0x83, 0xf1, 0x1c, 0xdf, 0x95, 0xfa, 0x2b, 0xde, 0x21,
|
||||
0xfa, 0x82, 0x6d, 0x1e, 0x54, 0x63, 0x78, 0x61, 0x0e, 0x33, 0xca, 0x2a, 0x2c, 0xbd, 0x93, 0x00,
|
||||
0xab, 0x70, 0x3b, 0xac, 0xd1, 0xdb, 0x60, 0x8b, 0x11, 0xc0, 0x94, 0x99, 0x81, 0x87, 0xc7, 0x8f,
|
||||
0x12, 0xc0, 0x2e, 0x11, 0x63, 0x56, 0xf1, 0x0d, 0x86, 0x6c, 0xee, 0xa5, 0x7d, 0xfa, 0xae, 0x82,
|
||||
0x4c, 0x21, 0xbf, 0x9a, 0x87, 0xba, 0xa9, 0x0e, 0xdf, 0x90, 0xab, 0xd3, 0xc8, 0x83, 0xfb, 0xee,
|
||||
0xc2, 0x31, 0x42, 0x3c, 0x0a, 0x0b, 0x73, 0x24, 0x14, 0xcb, 0xb1, 0x31, 0x58, 0x7a, 0x7f, 0x1f,
|
||||
0xc6, 0x47, 0x74, 0x5e, 0x57, 0xd9, 0x89, 0xfe, 0x33, 0x04, 0xdb, 0xa2, 0x0c, 0x46, 0xbd, 0xa1,
|
||||
0xd3, 0x3f, 0xe4, 0xca, 0x6c, 0xe5, 0xd7, 0x0c, 0xf2, 0x98, 0xcf, 0x67, 0xf2, 0x28, 0x22, 0x02,
|
||||
0xfa, 0x81, 0x5e, 0xbf, 0x77, 0x83, 0x4f, 0xba, 0x0b, 0x08, 0xf6, 0xe6, 0xc5, 0x30, 0x6c, 0x4f,
|
||||
0x0e, 0x58, 0xf5, 0x0b, 0xdd, 0x53, 0x7d, 0x07, 0xbb, 0x54, 0x82, 0x95, 0xe8, 0x28, 0x3c, 0x0e,
|
||||
0x09, 0x61, 0xb2, 0x22, 0x8c, 0x86, 0xf9, 0xa0, 0x1c, 0x43, 0x56, 0xb3, 0x4f, 0x88, 0xbe, 0x78,
|
||||
0xd3, 0x7f, 0x3a, 0x44, 0xb0, 0xa0, 0x2f, 0x69, 0xc2, 0x07, 0x34, 0x79, 0xad, 0xc3, 0x31, 0x6d,
|
||||
0x22, 0xf7, 0x7f, 0xe2, 0x00, 0xed, 0x12, 0x09, 0xf9, 0x3d, 0x5f, 0x56, 0xea, 0x77, 0x54, 0xf4,
|
||||
0x6d, 0x29, 0xa5, 0x3d, 0xcd, 0x89, 0x55, 0xfa, 0x80, 0xe8, 0xf9, 0xb7, 0xed, 0x4e, 0x20, 0x45,
|
||||
0x6d, 0x89, 0xbb, 0x31, 0xae, 0xd3, 0x40, 0xaf, 0xed, 0x67, 0xb6, 0x5d, 0xfb, 0xa7, 0xda, 0xbe,
|
||||
0xf7, 0x8b, 0x69, 0x6c, 0x46, 0x24, 0xaa, 0xde, 0x05, 0xf7, 0x5b, 0x2f, 0x10, 0xbd, 0xea, 0x96,
|
||||
0x52, 0x53, 0x48, 0x31, 0x3a, 0xf7, 0xae, 0x36, 0x93, 0xce, 0x7a, 0x4d, 0x1f, 0x39, 0x09, 0x6b,
|
||||
0xd2, 0x7b, 0x18, 0x36, 0x2d, 0xf8, 0xc5, 0xba, 0xe6, 0xf5, 0xe0, 0x9f, 0xe6, 0xac, 0x6d, 0x80,
|
||||
0x16, 0x8a, 0x8b, 0x3c, 0x10, 0x63, 0xee, 0x91, 0x0d, 0x9d, 0x0d, 0xbd, 0x3d, 0xb0, 0xc7, 0x3b,
|
||||
0xa7, 0x75, 0xee, 0xdc, 0xd9, 0x4d, 0x1f, 0x13, 0x3b, 0xf7, 0xac, 0x5b, 0x75, 0xd7, 0x2f, 0xd7,
|
||||
0x7a, 0xfc, 0x2f, 0xf4, 0x99, 0x8f, 0x4e, 0x4f, 0x7a, 0x2d, 0xf0, 0xa0, 0xa2, 0x9c, 0x5c, 0x4f,
|
||||
0x63, 0x86, 0x51, 0xf6, 0x8f, 0x09, 0xa9, 0x03, 0x9a, 0x4b, 0x4e, 0xf2, 0x18, 0xcd, 0x4c, 0xb5,
|
||||
0xc2, 0x67, 0x81, 0xa1, 0x45, 0x23, 0x2c, 0xfb, 0x53, 0x9d, 0xa3, 0xce, 0x3b, 0xc2, 0x1e, 0xca,
|
||||
0x8f, 0x0b, 0x7e, 0x6a, 0x89, 0x12, 0xfc, 0x63, 0x01, 0x24, 0x62, 0xd8, 0x38, 0xef, 0x77, 0x5a,
|
||||
0x0c, 0xb7, 0xd4, 0xa4, 0xbd, 0xbe, 0xff, 0x36, 0x3b, 0x88, 0x9e, 0xba, 0x81, 0xb3, 0xa5, 0xb0,
|
||||
0x8b, 0xe3, 0x99, 0x8e, 0xb3, 0x17, 0xbe, 0x62, 0xf5, 0x4e, 0xb0, 0xf0, 0xf9, 0x29, 0xa6, 0xfd,
|
||||
0xc3, 0xcf, 0x0a, 0xd8, 0x41, 0xa2, 0xc4, 0xe0, 0x5f, 0x93, 0x64, 0xb1, 0x2f, 0x4f, 0xa6, 0xc4,
|
||||
0xbe, 0x1c, 0xd9, 0x1a, 0xba, 0x2a, 0x4f, 0xdf, 0xf5, 0x7c, 0x7f, 0x66, 0xc2, 0xb3, 0xcd, 0x92,
|
||||
0x2d, 0x93, 0xbc, 0xa0, 0xdb, 0x97, 0xed, 0x13, 0xbe, 0xf2, 0x76, 0x3c, 0x55, 0xbe, 0xeb, 0x39,
|
||||
0xfd, 0xca, 0x45, 0x20, 0x81, 0x98, 0x3a, 0xb0, 0x53, 0x4c, 0x65, 0xd3, 0x49, 0x8e, 0xa3, 0x72,
|
||||
0x5d, 0xdb, 0x6c, 0x22, 0x8d, 0xa7, 0x72, 0xfc, 0x1d, 0x17, 0x88, 0xa8, 0x4c, 0xda, 0xf8, 0x1b,
|
||||
0x60, 0x76, 0x60, 0xa1, 0x4e, 0x22, 0xae, 0x5d, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44,
|
||||
0xae, 0x42, 0x60, 0x82,
|
||||
};
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user