Compare commits
890 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 2758acfd42 | |||
| 54c3031d74 | |||
| 9a9c7856b3 | |||
| 401b2fb524 | |||
| 0a0a2da680 | |||
| e4df76d986 | |||
| 79028f1627 | |||
| d87e5cb809 | |||
| 3484334d15 | |||
| 9ab6571b3f | |||
| dad5600e7e | |||
| ee56d58173 | |||
| 9f8f2a2449 | |||
| f591534a0f | |||
| 7a2e0c6632 | |||
| 29519c5fda | |||
| 4b996f6bbe | |||
| e4a5bfc788 | |||
| 4c58397949 | |||
| 011b4027db | |||
| a1adc59cb8 | |||
| ee4a8fc05a | |||
| 420a3ce498 | |||
| 9b6798c479 | |||
| 765816ccb1 | |||
| f3e9e3497b | |||
| 8e9e1a618b | |||
| 7272020cd3 | |||
| 16fff71c31 | |||
| 190223949c | |||
| 38d463ae49 | |||
| 73193196d2 | |||
| 2975e85950 | |||
| b2fbf982a8 | |||
| 0843fbf904 | |||
| 8dab9041e4 | |||
| 6aed98f795 | |||
| c20a76f3e2 | |||
| 435b1720c3 | |||
| 22bdf37fc2 | |||
| 9e3ac0eafb | |||
| 5c1c24cdab | |||
| c9cc824761 | |||
| b3c1e0330a | |||
| 4506fb2022 | |||
| ecec324121 | |||
| 959b33c59b | |||
| d6646c34ef | |||
| b56ac54cb2 | |||
| 5bc47a0c3b | |||
| f2db83008a | |||
| 9a01cf1b35 | |||
| 0f6f30b26e | |||
| 8219334806 | |||
| e6997d87b3 | |||
| 13b453c21e | |||
| 4ec3f18fda | |||
| fc8ffd8421 | |||
| 4551651777 | |||
| 82f2e8c344 | |||
| b76c5c9433 | |||
| 1737927814 | |||
| 38d7ac6d9c | |||
| db1bf4351b | |||
| 2d491f9cbd | |||
| a58d0f8a67 | |||
| 42cd6ca4ca | |||
| f292f1628b | |||
| 20909d4948 | |||
| 1f6ff4a519 | |||
| 07568f87c3 | |||
| 267e510071 | |||
| 73b921d591 | |||
| 8677035989 | |||
| a179893d70 | |||
| 540fb91d34 | |||
| 591a07d2d9 | |||
| f607e913d5 | |||
| 3d57de91e8 | |||
| 9fbceaa458 | |||
| 281180512f | |||
| 50fa1937f9 | |||
| d79aee3f78 | |||
| f599185e2d | |||
| fd79c7ae46 | |||
| 9de0846f3e | |||
| f168ece461 | |||
| 4100650ce1 | |||
| 87bb437fd3 | |||
| 626c671448 | |||
| b532c4a2b8 | |||
| 276cb7590d | |||
| f66aae2213 | |||
| 17c4e21f34 | |||
| 3613bca5ea | |||
| eff9c46e59 | |||
| c186a42a54 | |||
| 676d35f559 | |||
| e8bc4632b4 | |||
| 222158e954 | |||
| dde87b2f45 | |||
| 789284f519 | |||
| 19576ae167 | |||
| be8fe7bdd6 | |||
| d7a6a2cc71 | |||
| 7eea344f91 | |||
| 2bd0b67591 | |||
| d9307a174d | |||
| 59c5b30f3f | |||
| 938859f10a | |||
| a9b53d94e8 | |||
| a33e2ed9b1 | |||
| 7687ca2080 | |||
| 2a1a6e8cbe | |||
| 45fa9e8448 | |||
| 0ca66d1af3 | |||
| 63baa69342 | |||
| 894291faba | |||
| 51708bab49 | |||
| 4497a754fb | |||
| 6223e7475c | |||
| bf97378168 | |||
| 5a6f291c72 | |||
| 3404f4e86b | |||
| 6c07ebe5f2 | |||
| 24a4f06013 | |||
| 73bf4cbce7 | |||
| 67c8071bf4 | |||
| 9b163cb444 | |||
| 83d6a77617 | |||
| e5e174a20e | |||
| 8aede85214 | |||
| c625b9e3cc | |||
| 222d44a8d8 | |||
| 386f827d38 | |||
| 831c51c875 | |||
| 2d25d37112 | |||
| a3172d643f | |||
| 02787784a4 | |||
| 967f390aec | |||
| 89951b01ff | |||
| ca8f026bc3 | |||
| 4c14d7ef5a | |||
| 8234c20e28 | |||
| 52e272954f | |||
| 77caf50265 | |||
| 2ab8751fd4 | |||
| 54589c0828 | |||
| 1fdb247167 | |||
| 49cc47afd1 | |||
| 673677c831 | |||
| c30dc04571 | |||
| f58de79ceb | |||
| 8d9bb7a63e | |||
| 18490162f7 | |||
| bf71a4e012 | |||
| d29edf6381 | |||
| b087b7743e | |||
| 8ee1a7f67f | |||
| 475385d876 | |||
| 1b967a07e5 | |||
| 1088d613d5 | |||
| 1b2d4d6522 | |||
| 0fd1214dea | |||
| 00547b7aac | |||
| 621bfe36a8 | |||
| c1849f7e00 | |||
| b23db7c4cb | |||
| b3525bc642 | |||
| 589951eaea | |||
| 74adbbcc5d | |||
| bab61dd249 | |||
| 5c3bcb09fa | |||
| f0b94dd0d4 | |||
| ba5ab99a03 | |||
| 9bc3028eb7 | |||
| 5ef9db6d67 | |||
| 86a710e175 | |||
| 1797a9c61a | |||
| fd49bc5d8d | |||
| de4c6c6fab | |||
| 78a7dd3269 | |||
| 0cf53da0fe | |||
| 13b8708e58 | |||
| b6d91bd28a | |||
| 5bdc78e3ba | |||
| bce8fb31ab | |||
| 77d7d21130 | |||
| fed1520a8e | |||
| 284d5861dd | |||
| ee6154c842 | |||
| 709197c294 | |||
| fd55b7b4ed | |||
| 5bca5e2d77 | |||
| ee96937fd4 | |||
| a370d69542 | |||
| 24aad2eed4 | |||
| 910605cc7d | |||
| 7194e25bba | |||
| 7f287cb8f9 | |||
| a0ce1491d9 | |||
| 26035d23fe | |||
| 835debe75e | |||
| b482deb8b0 | |||
| 76fd1e6f5a | |||
| abb45fbe45 | |||
| 567ce48cc1 | |||
| 56a17b4e68 | |||
| c027e72439 | |||
| 25b8da8e3b | |||
| 5b47d1a910 | |||
| a844c3043c | |||
| e099a82d15 | |||
| b681af4556 | |||
| 78d66a9ac3 | |||
| bfe4d9f3f4 | |||
| a02ee3719c | |||
| 542f713678 | |||
| 2395c6fdaa | |||
| c7f02d5e51 | |||
| 55a726e933 | |||
| 601633347c | |||
| 182973c0ee | |||
| a16e9ac76a | |||
| 66f70e5da6 | |||
| 5a187c6ca8 | |||
| c6042100f9 | |||
| fde7ae4d19 | |||
| e37e13e700 | |||
| d22003578e | |||
| 52139cf0c4 | |||
| 37b723d8ae | |||
| aec3649524 | |||
| 36d716bb50 | |||
| f61c692929 | |||
| 3f717f3baf | |||
| ffc95090aa | |||
| 2eaa9236f2 | |||
| e4bab37b62 | |||
| 105c9c71ee | |||
| e135229ca6 | |||
| 97dea6ede5 | |||
| d871a92d1c | |||
| a152aa125b | |||
| 4e217d4028 | |||
| e5da7a4606 | |||
| faace3090c | |||
| d3e2345f94 | |||
| a3e087ab51 | |||
| 3a614a8ea1 | |||
| 9cb60dcdf5 | |||
| af6db68816 | |||
| 305ed0b65a | |||
| 263efb41e8 | |||
| d6312c7b92 | |||
| b31af4891d | |||
| 0ba08f57f2 | |||
| a2d7881afe | |||
| d79e598bf8 | |||
| a6a39cb842 | |||
| 5d0883c0e4 | |||
| e6d49424cf | |||
| 72abcd5991 | |||
| 9c2bb85858 | |||
| e9b059ee94 | |||
| 7a913844e2 | |||
| f8be7e1f57 | |||
| d5c43c4675 | |||
| 85fa6d8025 | |||
| 6b2a8f54a1 | |||
| bd1fb845b1 | |||
| 9c64c9af5d | |||
| 1057eceb2f | |||
| 445bc75319 | |||
| 4fb7ee02cd | |||
| ad11b7ebd0 | |||
| 5d9bda6f97 | |||
| 54be07c17d | |||
| 2c7ab3a28e | |||
| 3cc3c1bbd3 | |||
| ddedf2e046 | |||
| a60c339f85 | |||
| ce2c5d6528 | |||
| fd81f70355 | |||
| 100bb7c6ca | |||
| 1ffcedd9d4 | |||
| fc1f713106 | |||
| 83c3a78e6d | |||
| e6a3e7024d | |||
| d62fde0d79 | |||
| a70cf464d6 | |||
| 546260348d | |||
| 693aec949c | |||
| 5c7ac1bb7e | |||
| 8862752523 | |||
| 201c380925 | |||
| c7230a6f77 | |||
| 6b78fdf822 | |||
| 3cb326e426 | |||
| d3f9332372 | |||
| be0f6a6af2 | |||
| 25aa233cef | |||
| 5fdc424202 | |||
| 9b74bb5c92 | |||
| 8bf8a649c8 | |||
| 7ba8d8b608 | |||
| e35328fece | |||
| 366d4d7b0b | |||
| 3af1e75084 | |||
| dabd80fe4c | |||
| cb711a648f | |||
| 5b58dbc980 | |||
| 8b3c0a941c | |||
| 3ce29a3d7e | |||
| dc3c6b2f39 | |||
| 1cbee4c504 | |||
| 798e4c288a | |||
| ac39e32bc9 | |||
| 52da7f931b | |||
| fcb6f814de | |||
| 9e6b56d783 | |||
| 923dad6ca8 | |||
| 9f17d91b32 | |||
| 2bcb04a3b1 | |||
| a530b600b8 | |||
| d494a2bee2 | |||
| 6a027662ae | |||
| 577bb7bf31 | |||
| df664bd55f | |||
| 8a2705f81f | |||
| fcaf11422a | |||
| 3444409554 | |||
| 683c01b301 | |||
| e2492f773d | |||
| 1f3a2dcd1d | |||
| 4205cb32c5 | |||
| 6ab9bdb346 | |||
| a4aec1919c | |||
| 5b97d70d57 | |||
| eeeb4596c3 | |||
| 23853cae14 | |||
| 87f6f33b37 | |||
| 8c03d1bdde | |||
| 7f1c7d808d | |||
| be12aece5b | |||
| d7605f1449 | |||
| ef80642dec | |||
| a5622c93d4 | |||
| b6f9bfe9a5 | |||
| 79954657e2 | |||
| 35d3f1f72a | |||
| 388d74faf4 | |||
| 0f8747e194 | |||
| 93f16ba9e3 | |||
| bea2d42e8c | |||
| 68d644fd28 | |||
| f6e33450ff | |||
| 65008c5c0b | |||
| dbfaf568fc | |||
| 58fd6ac03e | |||
| 1e64524afb | |||
| 20a5d8effd | |||
| 8c7e0bcb0a | |||
| c69080f11e | |||
| 5a48c800ee | |||
| c6eff4d373 | |||
| 5c056c2a3e | |||
| 61f593f350 | |||
| 6cc7dc7aaa | |||
| 239f040a98 | |||
| 3827c16fde | |||
| e299343807 | |||
| 4130ce2b93 | |||
| d6acb64514 | |||
| 8e233e2591 | |||
| 9cda16220e | |||
| 36acadbd52 | |||
| 37b6552c42 | |||
| 1903052d79 | |||
| 2b4cfd9a60 | |||
| decbb65f09 | |||
| 8e2ca37edc | |||
| 8fb6bcc8b1 | |||
| 2f36c670ff | |||
| d701c3a480 | |||
| cd7f3375b2 | |||
| 46cd185524 | |||
| e04d82e940 | |||
| 26d0863921 | |||
| 37f23fa537 | |||
| 167d408b5e | |||
| d4a8ff4872 | |||
| fb9b12a982 | |||
| 88a03f1a1d | |||
| ba7e400e13 | |||
| 57f0f88552 | |||
| 42a0cf6283 | |||
| b67acd5ea1 | |||
| 5e2721d2f5 | |||
| 2cd43aee0a | |||
| fb1570d290 | |||
| 79972ad4db | |||
| 61934c285c | |||
| a7d554971c | |||
| e54ea90607 | |||
| fda403a079 | |||
| f2e75c96be | |||
| 322eb2b8a8 | |||
| 6f71183d0e | |||
| 5d852cf6ae | |||
| 2d1ea1618b | |||
| 50723d07a6 | |||
| 1161562bc8 | |||
| 0c8b3aaced | |||
| b81b7decf6 | |||
| e5463330ef | |||
| 17c0b3e460 | |||
| 3bc3193805 | |||
| d6db6dedca | |||
| d931bc72c7 | |||
| 6506f77689 | |||
| 0d64b38dbc | |||
| 7856061cf0 | |||
| 0210e414d2 | |||
| 41231e8ae2 | |||
| ba2e34682e | |||
| b234ff9234 | |||
| 3442cc3d1a | |||
| e618e34c94 | |||
| 105c3b0a4c | |||
| 69d0446019 | |||
| 078045f73b | |||
| 78af1daa2e | |||
| 0bd0d57a81 | |||
| 9dd5b6ce37 | |||
| d862cdaa72 | |||
| 4f57de9688 | |||
| 92b6e05909 | |||
| 2bd0bae2f7 | |||
| 69b5d24f28 | |||
| e5dcb9d9da | |||
| 4db8638f7e | |||
| cec885daf9 | |||
| 90fbf27114 | |||
| f1436cec9b | |||
| cf968cb6b5 | |||
| 2278f40051 | |||
| 18a76d3a87 | |||
| 6a65461ec7 | |||
| a5a0a7c4f3 | |||
| f1e6f8042c | |||
| 848873d87e | |||
| 75bb864237 | |||
| d5275b16aa | |||
| 15d1b6cef0 | |||
| 6d4dd3e17a | |||
| 649c22a34e | |||
| 8d04d39036 | |||
| 0e90c719b0 | |||
| a79526cad8 | |||
| d05d8b6100 | |||
| 9856867954 | |||
| 19064b680e | |||
| 95265c765b | |||
| 1ed8912f57 | |||
| 82a0eb4413 | |||
| be7215402b | |||
| 4500b064d8 | |||
| 93d191d7c9 | |||
| 1607ceaf3e | |||
| 5b24ea9dd9 | |||
| c879dcaf7d | |||
| 86691dabbf | |||
| fe71a66bb9 | |||
| 80e0d848f2 | |||
| 8b3a2984bf | |||
| fccce265aa | |||
| a43a228f78 | |||
| dd8610fd5c | |||
| b991beb712 | |||
| 25f6483488 | |||
| efc0325e14 | |||
| d19ec021fe | |||
| b34a307936 | |||
| fb565caf7b | |||
| 6796e8fff6 | |||
| 213547f545 | |||
| 73851e962b | |||
| de22204514 | |||
| ebba15fe67 | |||
| c1cd3339fa | |||
| 713a296a59 | |||
| 06bde527d5 | |||
| dcd31f5701 | |||
| 65f2af5849 | |||
| 2dd7a8637c | |||
| 211d056728 | |||
| dc0aed5b16 | |||
| 5064df4ba2 | |||
| 469c31da97 | |||
| 5fb41e6ecc | |||
| a68a442bbb | |||
| 84db5644d6 | |||
| fc1fb7a590 | |||
| dc91d4eca8 | |||
| f6a42a36d6 | |||
| 2a769dc0b0 | |||
| 3475bfb2aa | |||
| f9f8fade89 | |||
| e404fb772b | |||
| 2a9412042c | |||
| e8ab661504 | |||
| 3f91db25d4 | |||
| 300381ba4d | |||
| 4363e6a213 | |||
| 450dac4b1e | |||
| 278127fe29 | |||
| 23d71de75f | |||
| d86789898d | |||
| c3dc1f65d4 | |||
| 238fb00727 | |||
| 2d48c81d58 | |||
| 0893e0043f | |||
| 72c0267fe6 | |||
| c9956def36 | |||
| 5d60fe6812 | |||
| 6051dfae30 | |||
| 3518153d5b | |||
| cf949609b2 | |||
| d482a8805c | |||
| 161dc9ce7e | |||
| 090073cc3b | |||
| 6ae718e4d6 | |||
| 783b1cb611 | |||
| 4b01f80e8d | |||
| c8278f377b | |||
| d34b664933 | |||
| c8f40e1d26 | |||
| 185a8d7582 | |||
| 8373e91a1b | |||
| 6aeedfb70c | |||
| e7f3851212 | |||
| 7df05ade4c | |||
| 24b032ce5b | |||
| b6fe4ff637 | |||
| 8f1aa28b37 | |||
| 55c1e22a67 | |||
| ca0d4511a9 | |||
| b56855c542 | |||
| 72e8eb3b94 | |||
| 281a1cdc2c | |||
| 3c8f901a1f | |||
| e0589d2908 | |||
| dfd53976d4 | |||
| 02d43be93c | |||
| 2e8bceb676 | |||
| 16f9e697ab | |||
| 269f88ee28 | |||
| f11d950448 | |||
| 6ba2c44e88 | |||
| d1ed4665de | |||
| 5b68cfa018 | |||
| 85f88b6b05 | |||
| ea467441d2 | |||
| 40ba502853 | |||
| 09d7d0f1bc | |||
| 3418d53a6d | |||
| d5440d60ab | |||
| 2ba237ec12 | |||
| 01a343f28e | |||
| 85220591e2 | |||
| ecadc8bbba | |||
| 26c92eaf0f | |||
| d129abb9c9 | |||
| 3b98b00d6f | |||
| ce329e13fb | |||
| be9cd98cb1 | |||
| 216acd98d6 | |||
| 10fd8a59b2 | |||
| 3974c6fd89 | |||
| f82962e42c | |||
| bf1ced4184 | |||
| cabfcbc73c | |||
| 574473c480 | |||
| 17143fd53f | |||
| b8fff99e68 | |||
| 3b038feae0 | |||
| 032bda223e | |||
| b16d4d18e0 | |||
| df3a57dcda | |||
| 3bf7ab910f | |||
| e8ce0ba6ef | |||
| d8fff5c820 | |||
| aa9897d932 | |||
| f265a52c96 | |||
| f214cfae12 | |||
| febc8cd6aa | |||
| 463e061740 | |||
| d80759efb8 | |||
| 1d66aad4df | |||
| f5284ced54 | |||
| c951ca6f47 | |||
| f25ae373bb | |||
| 845833e8fd | |||
| f0ac61a8fd | |||
| 8f7278e34f | |||
| b124599de3 | |||
| 697234dd51 | |||
| ba97494d6f | |||
| 1996fba8a6 | |||
| a6bbe907ee | |||
| 43579f4c02 | |||
| 909a25c147 | |||
| aa3aafc4ff | |||
| b32439a694 | |||
| ddbc25077c | |||
| b075886b19 | |||
| eae999a85a | |||
| 77f0799750 | |||
| 8de93ad8b4 | |||
| b377b5bbed | |||
| 75b5324762 | |||
| 610d200e8a | |||
| 8002692f3e | |||
| 9496b57b01 | |||
| a5cd5844ec | |||
| da16b479a0 | |||
| 44f1059000 | |||
| cf4b41f7d9 | |||
| a84ca5b147 | |||
| 71f5f96e64 | |||
| 2aa8e444ee | |||
| cfa187f477 | |||
| 1ed411e431 | |||
| 9233ae97d0 | |||
| 0ee38653f7 | |||
| df89b5bf8a | |||
| cca4037fec | |||
| e015da8d95 | |||
| 4ceb186251 | |||
| 370109b868 | |||
| 3b3165ad51 | |||
| 98e68cd66a | |||
| 407301a28c | |||
| 5ce0e7265b | |||
| f1704fd61a | |||
| 35e87128f5 | |||
| dd93f89931 | |||
| fb85612f81 | |||
| 966173c129 | |||
| 55757039fa | |||
| 1113e18c40 | |||
| 02947345e8 | |||
| 63f18f0b03 | |||
| cd6da987cc | |||
| 006d7ddd31 | |||
| 81842fc9d0 | |||
| ec9e0b2086 | |||
| 64b71644bb | |||
| 1e58b09d96 | |||
| 455136ee50 | |||
| 1058ba6a0f | |||
| f8c541c0d7 | |||
| b485e78030 | |||
| d8e7892081 | |||
| 1638c3b1c2 | |||
| 2d0e92d412 | |||
| f1a43f4977 | |||
| 18f7d0129a | |||
| 356ccd0314 | |||
| 4adf89b40b | |||
| eb4aded5d6 | |||
| 5230f45658 | |||
| b4e70e56a6 | |||
| cb3edf2607 | |||
| 720b26d11e | |||
| e35be13b23 | |||
| ba19d93df9 | |||
| 5d1dcb4387 | |||
| f101934909 | |||
| ede2575018 | |||
| fb80ee5a0e | |||
| 44fc69398c | |||
| c162337cab | |||
| 821faaf3c0 | |||
| bf85eb9b4e | |||
| 691c6614a8 | |||
| 6db7cb8937 | |||
| 6afc572eae | |||
| 2a932a2176 | |||
| b2bcde1bfc | |||
| ec6fd23636 | |||
| 6f34f95c52 | |||
| 94e5b36279 | |||
| f0ce4d6336 | |||
| d06b42b917 | |||
| 764986a9b0 | |||
| c4efa95b4a | |||
| 5a655779d7 | |||
| 0403437ad0 | |||
| b62f94f5c2 | |||
| daf09ed9fe | |||
| 72794f1416 | |||
| b00e20b23f | |||
| e99a2181ff | |||
| 65b38e8dcf | |||
| 9b8780a2fd | |||
| 9c0e4cae74 | |||
| deb387f54c | |||
| 5d5422b4c5 | |||
| 85b8dd8b34 | |||
| b93d34dff4 | |||
| e997a7db9a | |||
| d1a065119e | |||
| 1dab468e20 | |||
| c5cd0c73a3 | |||
| ae139403e4 | |||
| d3c9154f9a | |||
| caba60968a | |||
| 2e0def8670 | |||
| 8c3d16a395 | |||
| 3f48531da7 | |||
| 128cdca068 | |||
| bd997a3900 | |||
| 8e93eda449 | |||
| a6674ecd56 | |||
| 654651856f | |||
| c489659a20 | |||
| 18377e0c9f | |||
| cebba6c0b9 | |||
| 89f9bf545d | |||
| 055d36abd7 | |||
| 7bafc5fa8b | |||
| 6946c0bedb | |||
| bb40f86daa | |||
| 89d198659c | |||
| c56e540e5d | |||
| d3fd74246f | |||
| 616061a6ca | |||
| d94b8b9c0e | |||
| 89d39cf8ff | |||
| 0ba130dbd3 | |||
| 434935613c | |||
| 454585d3d2 | |||
| 65a6e341ad | |||
| fc933034db | |||
| 20c8b094d6 | |||
| 552ddfbdfa | |||
| 9743eec3ab | |||
| b3ad1dc26e | |||
| b6c9d4a88c | |||
| 25b6ac61cb | |||
| 9c9252e8a3 | |||
| 3a744ad72f | |||
| 554e2a4bce | |||
| 6e8979d8d8 | |||
| 583d416640 | |||
| 03b50b4f85 | |||
| 440e135e3a | |||
| ab39f06003 | |||
| 98f78f534c | |||
| d18b12c1a3 | |||
| 6a7b1aa39a | |||
| c4be74a9d0 | |||
| 9092048dbc | |||
| bb419f1201 | |||
| d505fd2b60 | |||
| a771e0eccb | |||
| 593a5181d7 | |||
| c29274e760 | |||
| 216573bf48 | |||
| 1c235a5c89 | |||
| f90049dd9e | |||
| 90787e84bf | |||
| c36c80a077 | |||
| 227333239f | |||
| 2d43fcf9ee | |||
| 3edad56e6b | |||
| 4e2d900775 | |||
| 4dae82054e | |||
| cb5948d3a5 | |||
| 9fc7281fab | |||
| bb779b237a | |||
| 1294b4fec8 | |||
| 0b754562f6 | |||
| 15cb032ab7 | |||
| c85d2fd3bf | |||
| bc821ff47d | |||
| 42d9f42807 | |||
| 7ceff4cf5d | |||
| 4147da312b | |||
| 439891c31f | |||
| 322524101d | |||
| fd698653d9 | |||
| 8b503a06fa | |||
| 4a201df556 | |||
| 577b9f478b | |||
| f5a2eb1ab0 | |||
| 4379480d4b | |||
| dfa4afa826 | |||
| a533514763 | |||
| 952aaef52a | |||
| a54016a6f7 | |||
| 0c8a95c44b | |||
| 403633d21f | |||
| cc6f1d784d | |||
| e07ef3be9c | |||
| f35f534ff4 | |||
| 3899ec136b | |||
| 91ee809558 | |||
| 4c94e2729f | |||
| 2a5a207148 | |||
| c75bd89d63 | |||
| f58844bf8b | |||
| 07ac3499f3 | |||
| 050b64b822 | |||
| 43aa94dcfc | |||
| b2e54a432b | |||
| e766732020 | |||
| 3a5e01c44a | |||
| d4883da98b | |||
| 7cc3e9a16d | |||
| 9ad352d4bd | |||
| 031173bc47 | |||
| 658820a25e | |||
| 17fdce01a9 | |||
| bc4cc00332 | |||
| b57e9492b1 | |||
| 712bdc9d8d | |||
| 33a7c95455 | |||
| f054dcc77d | |||
| 95858b77c1 | |||
| 4afbce5ad6 | |||
| 93956002ac | |||
| 006dd290e9 | |||
| fb875145aa | |||
| 77993ced7e | |||
| e1f64d6283 | |||
| 2b60ce484e | |||
| a21b336138 | |||
| 0655280f2c | |||
| 2793578dcb | |||
| f1a70662c5 | |||
| 8a7e501fe6 | |||
| 86fc2dc2ba | |||
| 9cff42b4ed | |||
| 55546126a1 | |||
| 5a11dacd9e | |||
| bb5873bf20 | |||
| 20eda54349 | |||
| c98461f59e | |||
| b154c9a5c4 | |||
| 12255e3680 | |||
| 473c41ddbf | |||
| b93382831c | |||
| 5ee61f5ae7 | |||
| 082bbd49e7 | |||
| 4e2e69c9cb | |||
| 6f78bb6960 | |||
| a00caac789 | |||
| 4e8f191f43 | |||
| b1c5afd72f | |||
| aa5a2225e7 | |||
| 4c7672b581 | |||
| 5f9fa05e21 | |||
| ee92fa51bc | |||
| 63b3960120 | |||
| e5c76ddf3e | |||
| 4b07979008 | |||
| 168fa09f5f | |||
| 4facd57cb7 | |||
| e999636048 | |||
| 5bd769ea40 | |||
| bd693f97a1 | |||
| af0cb68c1b | |||
| 761d7fd438 | |||
| c537e8a892 | |||
| 702e85cd96 | |||
| c93e0b6c5e | |||
| f7b4a20066 | |||
| 49ac89bfed | |||
| 16e62b29f9 | |||
| b8180b0459 | |||
| 37f250b384 | |||
| 5685ec525b | |||
| 5be59ea8dd | |||
| 5855f2d909 | |||
| 5424223949 | |||
| de22148b44 | |||
| 73664e610b |
+19
-1
@@ -1,5 +1,6 @@
|
||||
boost_root
|
||||
.downloads-by-cmake
|
||||
.gdb_history
|
||||
boost_root
|
||||
Build*
|
||||
build*
|
||||
common/fp_lib_table_keywords.cpp
|
||||
@@ -95,3 +96,20 @@ pcbnew/Info.plist
|
||||
.cproject
|
||||
.pydevproject
|
||||
__pycache__
|
||||
|
||||
# Visual Studio
|
||||
.vs/
|
||||
.editorconfig
|
||||
CMakeSettings.json
|
||||
|
||||
# Sublime Text
|
||||
*.sublime-*
|
||||
|
||||
# KDevelop
|
||||
.kdev4/
|
||||
*.kdev4
|
||||
|
||||
# Translations
|
||||
*.mo
|
||||
i18n_status.svg
|
||||
i18n_status.csv
|
||||
|
||||
@@ -40,12 +40,6 @@ CACHE_WRAPPER::~CACHE_WRAPPER()
|
||||
}
|
||||
|
||||
|
||||
FILENAME_RESOLVER* PROJECT::Get3DFilenameResolver()
|
||||
{
|
||||
return Get3DCacheManager()->GetResolver();
|
||||
}
|
||||
|
||||
|
||||
S3D_CACHE* PROJECT::Get3DCacheManager( bool updateProjDir )
|
||||
{
|
||||
wxCriticalSectionLocker lock( lock3D_wrapper );
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// C++ code generated with wxFormBuilder (version Jun 5 2018)
|
||||
// C++ code generated with wxFormBuilder (version 3.9.0 Nov 1 2020)
|
||||
// http://www.wxformbuilder.org/
|
||||
//
|
||||
// PLEASE DO *NOT* EDIT THIS FILE!
|
||||
@@ -9,209 +9,209 @@
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
PANEL_PREV_3D_BASE::PANEL_PREV_3D_BASE( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style ) : wxPanel( parent, id, pos, size, style )
|
||||
PANEL_PREV_3D_BASE::PANEL_PREV_3D_BASE( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style, const wxString& name ) : wxPanel( parent, id, pos, size, style, name )
|
||||
{
|
||||
wxBoxSizer* bSizermain;
|
||||
bSizermain = new wxBoxSizer( wxHORIZONTAL );
|
||||
|
||||
|
||||
wxBoxSizer* bSizerLeft;
|
||||
bSizerLeft = new wxBoxSizer( wxVERTICAL );
|
||||
|
||||
|
||||
wxStaticBoxSizer* sbSizerScale;
|
||||
sbSizerScale = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Scale") ), wxVERTICAL );
|
||||
|
||||
|
||||
wxFlexGridSizer* fgSizerScale;
|
||||
fgSizerScale = new wxFlexGridSizer( 0, 3, 0, 0 );
|
||||
fgSizerScale->SetFlexibleDirection( wxBOTH );
|
||||
fgSizerScale->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
|
||||
|
||||
|
||||
m_staticText1 = new wxStaticText( sbSizerScale->GetStaticBox(), wxID_ANY, _("X:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticText1->Wrap( -1 );
|
||||
fgSizerScale->Add( m_staticText1, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
|
||||
|
||||
|
||||
xscale = new wxTextCtrl( sbSizerScale->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
fgSizerScale->Add( xscale, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
|
||||
|
||||
|
||||
m_spinXscale = new wxSpinButton( sbSizerScale->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS|wxSP_VERTICAL );
|
||||
fgSizerScale->Add( m_spinXscale, 0, wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
|
||||
m_staticText2 = new wxStaticText( sbSizerScale->GetStaticBox(), wxID_ANY, _("Y:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticText2->Wrap( -1 );
|
||||
fgSizerScale->Add( m_staticText2, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
|
||||
|
||||
|
||||
yscale = new wxTextCtrl( sbSizerScale->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
fgSizerScale->Add( yscale, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
|
||||
|
||||
|
||||
m_spinYscale = new wxSpinButton( sbSizerScale->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS|wxSP_VERTICAL );
|
||||
fgSizerScale->Add( m_spinYscale, 0, wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
|
||||
m_staticText3 = new wxStaticText( sbSizerScale->GetStaticBox(), wxID_ANY, _("Z:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticText3->Wrap( -1 );
|
||||
fgSizerScale->Add( m_staticText3, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT, 5 );
|
||||
|
||||
|
||||
zscale = new wxTextCtrl( sbSizerScale->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
fgSizerScale->Add( zscale, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT, 5 );
|
||||
|
||||
|
||||
m_spinZscale = new wxSpinButton( sbSizerScale->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS|wxSP_VERTICAL );
|
||||
fgSizerScale->Add( m_spinZscale, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM, 5 );
|
||||
|
||||
|
||||
|
||||
|
||||
sbSizerScale->Add( fgSizerScale, 0, wxEXPAND|wxRIGHT|wxLEFT, 10 );
|
||||
|
||||
|
||||
|
||||
|
||||
bSizerLeft->Add( sbSizerScale, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
|
||||
wxStaticBoxSizer* sbSizerRotation;
|
||||
sbSizerRotation = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Rotation") ), wxVERTICAL );
|
||||
|
||||
|
||||
wxFlexGridSizer* fgSizerRotate;
|
||||
fgSizerRotate = new wxFlexGridSizer( 0, 3, 0, 0 );
|
||||
fgSizerRotate->SetFlexibleDirection( wxBOTH );
|
||||
fgSizerRotate->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
|
||||
|
||||
|
||||
m_staticText11 = new wxStaticText( sbSizerRotation->GetStaticBox(), wxID_ANY, _("X:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticText11->Wrap( -1 );
|
||||
fgSizerRotate->Add( m_staticText11, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
|
||||
|
||||
|
||||
xrot = new wxTextCtrl( sbSizerRotation->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
fgSizerRotate->Add( xrot, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
|
||||
|
||||
|
||||
m_spinXrot = new wxSpinButton( sbSizerRotation->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS|wxSP_VERTICAL );
|
||||
fgSizerRotate->Add( m_spinXrot, 0, wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
|
||||
m_staticText21 = new wxStaticText( sbSizerRotation->GetStaticBox(), wxID_ANY, _("Y:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticText21->Wrap( -1 );
|
||||
fgSizerRotate->Add( m_staticText21, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
|
||||
|
||||
|
||||
yrot = new wxTextCtrl( sbSizerRotation->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
fgSizerRotate->Add( yrot, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
|
||||
|
||||
|
||||
m_spinYrot = new wxSpinButton( sbSizerRotation->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS|wxSP_VERTICAL );
|
||||
fgSizerRotate->Add( m_spinYrot, 0, wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
|
||||
m_staticText31 = new wxStaticText( sbSizerRotation->GetStaticBox(), wxID_ANY, _("Z:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticText31->Wrap( -1 );
|
||||
fgSizerRotate->Add( m_staticText31, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT, 5 );
|
||||
|
||||
|
||||
zrot = new wxTextCtrl( sbSizerRotation->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
fgSizerRotate->Add( zrot, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT, 5 );
|
||||
|
||||
|
||||
m_spinZrot = new wxSpinButton( sbSizerRotation->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS|wxSP_VERTICAL );
|
||||
fgSizerRotate->Add( m_spinZrot, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM, 5 );
|
||||
|
||||
|
||||
|
||||
|
||||
sbSizerRotation->Add( fgSizerRotate, 0, wxEXPAND|wxRIGHT|wxLEFT, 10 );
|
||||
|
||||
|
||||
|
||||
|
||||
bSizerLeft->Add( sbSizerRotation, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
|
||||
wxStaticBoxSizer* sbSizerOffset;
|
||||
sbSizerOffset = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Offset") ), wxVERTICAL );
|
||||
|
||||
|
||||
wxFlexGridSizer* fgSizerOffset;
|
||||
fgSizerOffset = new wxFlexGridSizer( 0, 3, 0, 0 );
|
||||
fgSizerOffset->SetFlexibleDirection( wxBOTH );
|
||||
fgSizerOffset->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
|
||||
|
||||
|
||||
m_staticText12 = new wxStaticText( sbSizerOffset->GetStaticBox(), wxID_ANY, _("X:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticText12->Wrap( -1 );
|
||||
fgSizerOffset->Add( m_staticText12, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
|
||||
|
||||
|
||||
xoff = new wxTextCtrl( sbSizerOffset->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
fgSizerOffset->Add( xoff, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
|
||||
|
||||
|
||||
m_spinXoffset = new wxSpinButton( sbSizerOffset->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS|wxSP_VERTICAL );
|
||||
fgSizerOffset->Add( m_spinXoffset, 0, wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
|
||||
m_staticText22 = new wxStaticText( sbSizerOffset->GetStaticBox(), wxID_ANY, _("Y:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticText22->Wrap( -1 );
|
||||
fgSizerOffset->Add( m_staticText22, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
|
||||
|
||||
|
||||
yoff = new wxTextCtrl( sbSizerOffset->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
fgSizerOffset->Add( yoff, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
|
||||
|
||||
|
||||
m_spinYoffset = new wxSpinButton( sbSizerOffset->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS|wxSP_VERTICAL );
|
||||
fgSizerOffset->Add( m_spinYoffset, 0, wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
|
||||
m_staticText32 = new wxStaticText( sbSizerOffset->GetStaticBox(), wxID_ANY, _("Z:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticText32->Wrap( -1 );
|
||||
fgSizerOffset->Add( m_staticText32, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT, 5 );
|
||||
|
||||
|
||||
zoff = new wxTextCtrl( sbSizerOffset->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
fgSizerOffset->Add( zoff, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT, 5 );
|
||||
|
||||
|
||||
m_spinZoffset = new wxSpinButton( sbSizerOffset->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS|wxSP_VERTICAL );
|
||||
fgSizerOffset->Add( m_spinZoffset, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM, 5 );
|
||||
|
||||
|
||||
|
||||
|
||||
sbSizerOffset->Add( fgSizerOffset, 0, wxEXPAND|wxLEFT|wxRIGHT, 10 );
|
||||
|
||||
|
||||
|
||||
|
||||
bSizerLeft->Add( sbSizerOffset, 0, wxEXPAND|wxALL, 5 );
|
||||
|
||||
|
||||
|
||||
|
||||
bSizermain->Add( bSizerLeft, 0, 0, 5 );
|
||||
|
||||
|
||||
wxBoxSizer* bSizerRight;
|
||||
bSizerRight = new wxBoxSizer( wxVERTICAL );
|
||||
|
||||
|
||||
wxStaticText* staticPreviewLabel;
|
||||
staticPreviewLabel = new wxStaticText( this, wxID_ANY, _("Preview"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
staticPreviewLabel->Wrap( -1 );
|
||||
staticPreviewLabel->SetFont( wxFont( 11, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, false, wxEmptyString ) );
|
||||
|
||||
bSizerRight->Add( staticPreviewLabel, 0, wxLEFT, 15 );
|
||||
|
||||
|
||||
bSizerRight->Add( staticPreviewLabel, 0, wxALL, 5 );
|
||||
|
||||
m_SizerPanelView = new wxBoxSizer( wxVERTICAL );
|
||||
|
||||
|
||||
bSizerRight->Add( m_SizerPanelView, 1, wxEXPAND|wxBOTTOM, 8 );
|
||||
|
||||
|
||||
|
||||
|
||||
bSizerRight->Add( m_SizerPanelView, 1, wxEXPAND|wxBOTTOM, 5 );
|
||||
|
||||
|
||||
bSizermain->Add( bSizerRight, 1, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 4 );
|
||||
|
||||
|
||||
wxBoxSizer* bSizer3DButtons;
|
||||
bSizer3DButtons = new wxBoxSizer( wxVERTICAL );
|
||||
|
||||
|
||||
|
||||
|
||||
bSizer3DButtons->Add( 0, 0, 0, wxEXPAND|wxTOP, 4 );
|
||||
|
||||
m_bpvISO = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), wxBU_AUTODRAW );
|
||||
|
||||
m_bpvISO = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 );
|
||||
m_bpvISO->SetToolTip( _("Change to isometric perspective") );
|
||||
|
||||
|
||||
bSizer3DButtons->Add( m_bpvISO, 0, wxTOP|wxBOTTOM, 5 );
|
||||
|
||||
m_bpvLeft = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), wxBU_AUTODRAW );
|
||||
|
||||
m_bpvLeft = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 );
|
||||
bSizer3DButtons->Add( m_bpvLeft, 0, 0, 5 );
|
||||
|
||||
m_bpvRight = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), wxBU_AUTODRAW );
|
||||
bSizer3DButtons->Add( m_bpvRight, 0, 0, 5 );
|
||||
|
||||
m_bpvFront = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), wxBU_AUTODRAW );
|
||||
bSizer3DButtons->Add( m_bpvFront, 0, 0, 5 );
|
||||
|
||||
m_bpvBack = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), wxBU_AUTODRAW );
|
||||
bSizer3DButtons->Add( m_bpvBack, 0, 0, 5 );
|
||||
|
||||
m_bpvTop = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), wxBU_AUTODRAW );
|
||||
bSizer3DButtons->Add( m_bpvTop, 0, 0, 5 );
|
||||
|
||||
m_bpvBottom = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), wxBU_AUTODRAW );
|
||||
bSizer3DButtons->Add( m_bpvBottom, 0, 0, 5 );
|
||||
|
||||
m_bpUpdate = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), wxBU_AUTODRAW );
|
||||
|
||||
m_bpvRight = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 );
|
||||
bSizer3DButtons->Add( m_bpvRight, 0, wxTOP, 5 );
|
||||
|
||||
m_bpvFront = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 );
|
||||
bSizer3DButtons->Add( m_bpvFront, 0, wxTOP, 5 );
|
||||
|
||||
m_bpvBack = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 );
|
||||
bSizer3DButtons->Add( m_bpvBack, 0, wxTOP, 5 );
|
||||
|
||||
m_bpvTop = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 );
|
||||
bSizer3DButtons->Add( m_bpvTop, 0, wxTOP, 5 );
|
||||
|
||||
m_bpvBottom = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 );
|
||||
bSizer3DButtons->Add( m_bpvBottom, 0, wxTOP, 5 );
|
||||
|
||||
m_bpUpdate = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 );
|
||||
m_bpUpdate->SetToolTip( _("Reload board and 3D models") );
|
||||
|
||||
|
||||
bSizer3DButtons->Add( m_bpUpdate, 0, wxTOP, 5 );
|
||||
|
||||
|
||||
|
||||
|
||||
bSizermain->Add( bSizer3DButtons, 0, wxALL|wxEXPAND, 5 );
|
||||
|
||||
|
||||
|
||||
|
||||
this->SetSizer( bSizermain );
|
||||
this->Layout();
|
||||
bSizermain->Fit( this );
|
||||
|
||||
|
||||
// Connect Events
|
||||
xscale->Connect( wxEVT_MOUSEWHEEL, wxMouseEventHandler( PANEL_PREV_3D_BASE::onMouseWheelScale ), NULL, this );
|
||||
xscale->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PANEL_PREV_3D_BASE::updateOrientation ), NULL, this );
|
||||
@@ -306,5 +306,5 @@ PANEL_PREV_3D_BASE::~PANEL_PREV_3D_BASE()
|
||||
m_bpvTop->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_PREV_3D_BASE::View3DTop ), NULL, this );
|
||||
m_bpvBottom->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_PREV_3D_BASE::View3DBottom ), NULL, this );
|
||||
m_bpUpdate->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_PREV_3D_BASE::View3DUpdate ), NULL, this );
|
||||
|
||||
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,12 +1,11 @@
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// C++ code generated with wxFormBuilder (version Jun 5 2018)
|
||||
// C++ code generated with wxFormBuilder (version 3.9.0 Nov 1 2020)
|
||||
// http://www.wxformbuilder.org/
|
||||
//
|
||||
// PLEASE DO *NOT* EDIT THIS FILE!
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef __PANEL_PREV_3D_BASE_H__
|
||||
#define __PANEL_PREV_3D_BASE_H__
|
||||
#pragma once
|
||||
|
||||
#include <wx/artprov.h>
|
||||
#include <wx/xrc/xmlres.h>
|
||||
@@ -21,10 +20,10 @@
|
||||
#include <wx/spinbutt.h>
|
||||
#include <wx/sizer.h>
|
||||
#include <wx/statbox.h>
|
||||
#include <wx/bmpbuttn.h>
|
||||
#include <wx/bitmap.h>
|
||||
#include <wx/image.h>
|
||||
#include <wx/icon.h>
|
||||
#include <wx/bmpbuttn.h>
|
||||
#include <wx/button.h>
|
||||
#include <wx/panel.h>
|
||||
|
||||
@@ -34,10 +33,10 @@
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
/// Class PANEL_PREV_3D_BASE
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
class PANEL_PREV_3D_BASE : public wxPanel
|
||||
class PANEL_PREV_3D_BASE : public wxPanel
|
||||
{
|
||||
private:
|
||||
|
||||
|
||||
protected:
|
||||
wxStaticText* m_staticText1;
|
||||
wxTextCtrl* xscale;
|
||||
@@ -74,7 +73,7 @@ class PANEL_PREV_3D_BASE : public wxPanel
|
||||
wxBitmapButton* m_bpvTop;
|
||||
wxBitmapButton* m_bpvBottom;
|
||||
wxBitmapButton* m_bpUpdate;
|
||||
|
||||
|
||||
// Virtual event handlers, overide them in your derived class
|
||||
virtual void onMouseWheelScale( wxMouseEvent& event ) { event.Skip(); }
|
||||
virtual void updateOrientation( wxCommandEvent& event ) { event.Skip(); }
|
||||
@@ -94,14 +93,13 @@ class PANEL_PREV_3D_BASE : public wxPanel
|
||||
virtual void View3DTop( wxCommandEvent& event ) { event.Skip(); }
|
||||
virtual void View3DBottom( wxCommandEvent& event ) { event.Skip(); }
|
||||
virtual void View3DUpdate( wxCommandEvent& event ) { event.Skip(); }
|
||||
|
||||
|
||||
|
||||
|
||||
public:
|
||||
wxTextCtrl* yoff;
|
||||
|
||||
PANEL_PREV_3D_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxTAB_TRAVERSAL );
|
||||
|
||||
PANEL_PREV_3D_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxTAB_TRAVERSAL, const wxString& name = wxEmptyString );
|
||||
~PANEL_PREV_3D_BASE();
|
||||
|
||||
|
||||
};
|
||||
|
||||
#endif //__PANEL_PREV_3D_BASE_H__
|
||||
|
||||
@@ -24,12 +24,20 @@
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file panel_prev_model.cpp
|
||||
*/
|
||||
|
||||
#include "panel_prev_model.h"
|
||||
|
||||
#include <3d_canvas/eda_3d_canvas.h>
|
||||
#include <common_ogl/cogl_att_list.h>
|
||||
|
||||
#include <class_board.h>
|
||||
|
||||
#include <base_units.h>
|
||||
#include <bitmaps.h>
|
||||
#include <class_drawpanel.h>
|
||||
#include <dpi_scaling.h>
|
||||
#include <pgm_base.h>
|
||||
#include <project.h>
|
||||
@@ -44,7 +52,7 @@ PANEL_PREV_3D::PANEL_PREV_3D( wxWindow* aParent, PCB_BASE_FRAME* aFrame, MODULE*
|
||||
initPanel();
|
||||
|
||||
// Initialize the color settings to draw the board and the footprint
|
||||
m_dummyBoard->SetGeneralSettings( &aFrame->Settings() );
|
||||
m_dummyBoard->SetColorsSettings( &aFrame->Settings().Colors() );
|
||||
|
||||
m_parentModelList = aParentModelList;
|
||||
|
||||
@@ -100,8 +108,8 @@ void PANEL_PREV_3D::initPanel()
|
||||
m_spinXoffset,m_spinYoffset, m_spinZoffset
|
||||
};
|
||||
|
||||
for( wxSpinButton* button : spinButtonList )
|
||||
button->SetRange(INT_MIN, INT_MAX );
|
||||
for( int ii = 0; ii < 9; ii++ )
|
||||
spinButtonList[ii]->SetRange( INT_MIN, INT_MAX );
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -50,8 +50,8 @@
|
||||
#define SCALE_INCREMENT_FINE 0.02
|
||||
#define SCALE_INCREMENT 0.1
|
||||
|
||||
#define ROTATION_INCREMENT 90 // in degrees, for spin button command
|
||||
#define ROTATION_INCREMENT_WHEEL 90 // in degrees, for mouse wheel command
|
||||
#define ROTATION_INCREMENT 5 // in degrees, for spin button command
|
||||
#define ROTATION_INCREMENT_WHEEL 15 // in degrees, for mouse wheel command
|
||||
#define ROTATION_INCREMENT_WHEEL_FINE 1 // in degrees, for mouse wheel command
|
||||
|
||||
#define OFFSET_INCREMENT_MM 0.5
|
||||
|
||||
@@ -44,7 +44,7 @@ if( APPLE )
|
||||
endif()
|
||||
|
||||
find_file( S3DSG_VERSION_FILE sg_version.h
|
||||
PATHS ${CMAKE_SOURCE_DIR}/include/plugins/3dapi NO_DEFAULT_PATH )
|
||||
PATHS ${CMAKE_SOURCE_DIR}/include/plugins/3dapi NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
|
||||
|
||||
if( NOT ${S3DSG_VERSION_FILE} STREQUAL "S3DSG_VERSION_FILE-NOTFOUND" )
|
||||
|
||||
@@ -95,8 +95,12 @@ target_compile_definitions( kicad_3dsg PRIVATE -DCOMPILE_SGLIB )
|
||||
|
||||
target_link_libraries( kicad_3dsg ${wxWidgets_LIBRARIES} )
|
||||
|
||||
# Don't specify the ARCHIVE DESTINATION parameter to prevent
|
||||
# the install of the import library on Windows
|
||||
# https://cmake.org/pipermail/cmake/2011-November/047746.html
|
||||
install( TARGETS
|
||||
kicad_3dsg
|
||||
DESTINATION ${KICAD_LIB}
|
||||
RUNTIME DESTINATION ${KICAD_LIB}
|
||||
LIBRARY DESTINATION ${KICAD_LIB}
|
||||
COMPONENT binary
|
||||
)
|
||||
|
||||
@@ -65,7 +65,7 @@ CINFO3D_VISU::CINFO3D_VISU() :
|
||||
m_boardSize = wxSize();
|
||||
m_boardCenter = SFVEC3F( 0.0f );
|
||||
|
||||
m_boardBoundingBox.Reset();
|
||||
m_boardBoudingBox.Reset();
|
||||
|
||||
m_layers_container2D.clear();
|
||||
m_layers_holes2D.clear();
|
||||
@@ -272,13 +272,9 @@ void CINFO3D_VISU::InitSettings( REPORTER *aStatusTextReporter )
|
||||
{
|
||||
wxLogTrace( m_logTrace, wxT( "CINFO3D_VISU::InitSettings" ) );
|
||||
|
||||
// Calculates the board bounding box
|
||||
// First, use only the board outlines
|
||||
EDA_RECT bbbox = m_board->ComputeBoundingBox( true );
|
||||
|
||||
// If no outlines, use the board with items
|
||||
if( ( bbbox.GetWidth() == 0 ) && ( bbbox.GetHeight() == 0 ) )
|
||||
bbbox = m_board->ComputeBoundingBox( false );
|
||||
// Calculates the board bounding box (board outlines + items)
|
||||
// to ensure any item, even outside the board outlines can be seen
|
||||
EDA_RECT bbbox = m_board->ComputeBoundingBox( false );
|
||||
|
||||
// Gives a non null size to avoid issues in zoom / scale calculations
|
||||
if( ( bbbox.GetWidth() == 0 ) && ( bbbox.GetHeight() == 0 ) )
|
||||
@@ -415,7 +411,7 @@ void CINFO3D_VISU::InitSettings( REPORTER *aStatusTextReporter )
|
||||
boardMin.z = m_layerZcoordTop[B_Adhes];
|
||||
boardMax.z = m_layerZcoordTop[F_Adhes];
|
||||
|
||||
m_boardBoundingBox = CBBOX( boardMin, boardMax );
|
||||
m_boardBoudingBox = CBBOX( boardMin, boardMax );
|
||||
|
||||
#ifdef PRINT_STATISTICS_3D_VIEWER
|
||||
unsigned stats_startCreateBoardPolyTime = GetRunningMicroSecs();
|
||||
|
||||
@@ -144,7 +144,7 @@ class CINFO3D_VISU
|
||||
* @brief GetBBox3DU - Get the bbox of the pcb board
|
||||
* @return the board bbox in 3d units
|
||||
*/
|
||||
const CBBOX &GetBBox3DU() const { return m_boardBoundingBox; }
|
||||
const CBBOX &GetBBox3DU() const { return m_boardBoudingBox; }
|
||||
|
||||
/**
|
||||
* @brief GetEpoxyThickness3DU - Get the current epoxy thickness
|
||||
@@ -425,6 +425,10 @@ class CINFO3D_VISU
|
||||
// Helper functions to create the board
|
||||
COBJECT2D *createNewTrack( const TRACK* aTrack , int aClearanceValue ) const;
|
||||
|
||||
void createNewPad( const D_PAD* aPad,
|
||||
CGENERICCONTAINER2D *aDstContainer,
|
||||
wxSize aInflateValue ) const;
|
||||
|
||||
void createNewPadWithClearance( const D_PAD *aPad,
|
||||
CGENERICCONTAINER2D *aDstContainer,
|
||||
wxSize aClearanceValue ) const;
|
||||
@@ -478,7 +482,7 @@ class CINFO3D_VISU
|
||||
SHAPE_POLY_SET &aCornerBuffer,
|
||||
int aWidth) const;
|
||||
|
||||
void transformPadsShapesWithClearanceToPolygon( const PADS &aPads,
|
||||
void transformPadsShapesWithClearanceToPolygon( const DLIST<D_PAD> &aPads,
|
||||
PCB_LAYER_ID aLayer,
|
||||
SHAPE_POLY_SET &aCornerBuffer,
|
||||
int aInflateValue,
|
||||
@@ -490,10 +494,12 @@ class CINFO3D_VISU
|
||||
|
||||
void buildPadShapePolygon( const D_PAD *aPad,
|
||||
SHAPE_POLY_SET &aCornerBuffer,
|
||||
wxSize aInflateValue ) const;
|
||||
wxSize aInflateValue,
|
||||
int aSegmentsPerCircle,
|
||||
double aCorrectionFactor ) const;
|
||||
|
||||
|
||||
public:
|
||||
public:
|
||||
SFVEC3D m_BgColorBot; ///< background bottom color
|
||||
SFVEC3D m_BgColorTop; ///< background top color
|
||||
SFVEC3D m_BoardBodyColor; ///< in realistic mode: FR4 board color
|
||||
@@ -503,7 +509,7 @@ public:
|
||||
SFVEC3D m_CopperColor; ///< in realistic mode: copper color
|
||||
|
||||
|
||||
private:
|
||||
private:
|
||||
|
||||
/// Current board
|
||||
BOARD *m_board;
|
||||
@@ -541,8 +547,8 @@ private:
|
||||
|
||||
// Pcb board bounding boxes
|
||||
|
||||
/// 3d bounding box of the pcb board in 3d units
|
||||
CBBOX m_boardBoundingBox;
|
||||
/// 3d bouding box of the pcb board in 3d units
|
||||
CBBOX m_boardBoudingBox;
|
||||
|
||||
/// It contains polygon contours for each layer
|
||||
MAP_POLY m_layers_poly;
|
||||
|
||||
@@ -50,7 +50,7 @@
|
||||
#include <class_text_mod.h>
|
||||
#include <convert_basic_shapes_to_polygon.h>
|
||||
#include <trigo.h>
|
||||
#include <gr_text.h>
|
||||
#include <draw_graphic_text.h>
|
||||
#include <utility>
|
||||
#include <vector>
|
||||
|
||||
@@ -64,7 +64,7 @@ static CGENERICCONTAINER2D *s_dstcontainer = NULL;
|
||||
static float s_biuTo3Dunits;
|
||||
static const BOARD_ITEM *s_boardItem = NULL;
|
||||
|
||||
// This is a call back function, used by GRText to draw the 3D text shape:
|
||||
// This is a call back function, used by DrawGraphicText to draw the 3D text shape:
|
||||
void addTextSegmToContainer( int x0, int y0, int xf, int yf, void* aData )
|
||||
{
|
||||
wxASSERT( s_dstcontainer != NULL );
|
||||
@@ -87,46 +87,51 @@ void addTextSegmToContainer( int x0, int y0, int xf, int yf, void* aData )
|
||||
// Based on
|
||||
// void TEXTE_PCB::TransformShapeWithClearanceToPolygonSet
|
||||
// board_items_to_polygon_shape_transform.cpp
|
||||
void CINFO3D_VISU::AddShapeWithClearanceToContainer( const TEXTE_PCB* aText,
|
||||
void CINFO3D_VISU::AddShapeWithClearanceToContainer( const TEXTE_PCB* aTextPCB,
|
||||
CGENERICCONTAINER2D *aDstContainer,
|
||||
PCB_LAYER_ID aLayerId,
|
||||
int aClearanceValue )
|
||||
{
|
||||
wxSize size = aText->GetTextSize();
|
||||
wxSize size = aTextPCB->GetTextSize();
|
||||
|
||||
if( aText->IsMirrored() )
|
||||
if( aTextPCB->IsMirrored() )
|
||||
size.x = -size.x;
|
||||
|
||||
s_boardItem = (const BOARD_ITEM *) &aText;
|
||||
s_boardItem = (const BOARD_ITEM *)&aTextPCB;
|
||||
s_dstcontainer = aDstContainer;
|
||||
s_textWidth = aText->GetThickness() + ( 2 * aClearanceValue );
|
||||
s_textWidth = aTextPCB->GetThickness() + ( 2 * aClearanceValue );
|
||||
s_biuTo3Dunits = m_biuTo3Dunits;
|
||||
|
||||
// not actually used, but needed by GRText
|
||||
// not actually used, but needed by DrawGraphicText
|
||||
const COLOR4D dummy_color = COLOR4D::BLACK;
|
||||
|
||||
if( aText->IsMultilineAllowed() )
|
||||
if( aTextPCB->IsMultilineAllowed() )
|
||||
{
|
||||
wxArrayString strings_list;
|
||||
wxStringSplit( aText->GetShownText(), strings_list, '\n' );
|
||||
wxStringSplit( aTextPCB->GetShownText(), strings_list, '\n' );
|
||||
std::vector<wxPoint> positions;
|
||||
positions.reserve( strings_list.Count() );
|
||||
aText->GetPositionsOfLinesOfMultilineText( positions, strings_list.Count() );
|
||||
aTextPCB->GetPositionsOfLinesOfMultilineText( positions,
|
||||
strings_list.Count() );
|
||||
|
||||
for( unsigned ii = 0; ii < strings_list.Count(); ++ii )
|
||||
{
|
||||
wxString txt = strings_list.Item( ii );
|
||||
|
||||
GRText( NULL, positions[ii], dummy_color, txt, aText->GetTextAngle(), size,
|
||||
aText->GetHorizJustify(), aText->GetVertJustify(), aText->GetThickness(),
|
||||
aText->IsItalic(), true, addTextSegmToContainer );
|
||||
DrawGraphicText( NULL, NULL, positions[ii], dummy_color,
|
||||
txt, aTextPCB->GetTextAngle(), size,
|
||||
aTextPCB->GetHorizJustify(), aTextPCB->GetVertJustify(),
|
||||
aTextPCB->GetThickness(), aTextPCB->IsItalic(),
|
||||
true, addTextSegmToContainer );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
GRText( NULL, aText->GetTextPos(), dummy_color, aText->GetShownText(),
|
||||
aText->GetTextAngle(), size, aText->GetHorizJustify(), aText->GetVertJustify(),
|
||||
aText->GetThickness(), aText->IsItalic(), true, addTextSegmToContainer );
|
||||
DrawGraphicText( NULL, NULL, aTextPCB->GetTextPos(), dummy_color,
|
||||
aTextPCB->GetShownText(), aTextPCB->GetTextAngle(), size,
|
||||
aTextPCB->GetHorizJustify(), aTextPCB->GetVertJustify(),
|
||||
aTextPCB->GetThickness(), aTextPCB->IsItalic(),
|
||||
true, addTextSegmToContainer );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -176,7 +181,9 @@ void CINFO3D_VISU::AddGraphicsShapesWithClearanceToContainer( const MODULE* aMod
|
||||
std::vector<TEXTE_MODULE *> texts; // List of TEXTE_MODULE to convert
|
||||
EDGE_MODULE* outline;
|
||||
|
||||
for( auto item : aModule->GraphicalItems() )
|
||||
for( EDA_ITEM* item = aModule->GraphicalItemsList();
|
||||
item != NULL;
|
||||
item = item->Next() )
|
||||
{
|
||||
switch( item->Type() )
|
||||
{
|
||||
@@ -219,17 +226,20 @@ void CINFO3D_VISU::AddGraphicsShapesWithClearanceToContainer( const MODULE* aMod
|
||||
s_dstcontainer = aDstContainer;
|
||||
s_biuTo3Dunits = m_biuTo3Dunits;
|
||||
|
||||
for( TEXTE_MODULE* text : texts )
|
||||
for( unsigned ii = 0; ii < texts.size(); ++ii )
|
||||
{
|
||||
s_textWidth = text->GetThickness() + ( 2 * aInflateValue );
|
||||
wxSize size = text->GetTextSize();
|
||||
TEXTE_MODULE *textmod = texts[ii];
|
||||
s_textWidth = textmod->GetThickness() + ( 2 * aInflateValue );
|
||||
wxSize size = textmod->GetTextSize();
|
||||
|
||||
if( text->IsMirrored() )
|
||||
if( textmod->IsMirrored() )
|
||||
size.x = -size.x;
|
||||
|
||||
GRText( NULL, text->GetTextPos(), BLACK, text->GetShownText(), text->GetDrawRotation(),
|
||||
size, text->GetHorizJustify(), text->GetVertJustify(), text->GetThickness(),
|
||||
text->IsItalic(), true, addTextSegmToContainer );
|
||||
DrawGraphicText( NULL, NULL, textmod->GetTextPos(), BLACK,
|
||||
textmod->GetShownText(), textmod->GetDrawRotation(), size,
|
||||
textmod->GetHorizJustify(), textmod->GetVertJustify(),
|
||||
textmod->GetThickness(), textmod->IsItalic(),
|
||||
true, addTextSegmToContainer );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -376,9 +386,22 @@ void CINFO3D_VISU::createNewPadWithClearance( const D_PAD* aPad,
|
||||
case PAD_SHAPE_RECT:
|
||||
{
|
||||
// see pcbnew/board_items_to_polygon_shape_transform.cpp
|
||||
|
||||
wxPoint corners[4];
|
||||
aPad->BuildPadPolygon( corners, wxSize( 0, 0), aPad->GetOrientation() );
|
||||
bool drawOutline;
|
||||
|
||||
// For aClearanceValue.x == aClearanceValue.y and > 0 we use the pad shape
|
||||
// and draw outlines with thicknes = aClearanceValue.
|
||||
// Otherwise we draw only the inflated/deflated shape
|
||||
if( aClearanceValue.x > 0 && aClearanceValue.x == aClearanceValue.y )
|
||||
{
|
||||
drawOutline = true;
|
||||
aPad->BuildPadPolygon( corners, wxSize( 0, 0 ), aPad->GetOrientation() );
|
||||
}
|
||||
else
|
||||
{
|
||||
drawOutline = false;
|
||||
aPad->BuildPadPolygon( corners, aClearanceValue, aPad->GetOrientation() );
|
||||
}
|
||||
|
||||
SFVEC2F corners3DU[4];
|
||||
|
||||
@@ -406,20 +429,23 @@ void CINFO3D_VISU::createNewPadWithClearance( const D_PAD* aPad,
|
||||
// Add the PAD contours
|
||||
// Round segments cannot have 0-length elements, so we approximate them
|
||||
// as a small circle
|
||||
for( int i = 1; i <= 4; i++ )
|
||||
if( drawOutline )
|
||||
{
|
||||
if( Is_segment_a_circle( corners3DU[i - 1], corners3DU[i & 3] ) )
|
||||
for( int i = 1; i <= 4; i++ )
|
||||
{
|
||||
aDstContainer->Add( new CFILLEDCIRCLE2D( corners3DU[i - 1],
|
||||
aClearanceValue.x * m_biuTo3Dunits,
|
||||
*aPad ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
aDstContainer->Add( new CROUNDSEGMENT2D( corners3DU[i - 1],
|
||||
corners3DU[i & 3],
|
||||
aClearanceValue.x * 2.0f * m_biuTo3Dunits,
|
||||
*aPad ) );
|
||||
if( Is_segment_a_circle( corners3DU[i - 1], corners3DU[i & 3] ) )
|
||||
{
|
||||
aDstContainer->Add( new CFILLEDCIRCLE2D( corners3DU[i - 1],
|
||||
aClearanceValue.x * m_biuTo3Dunits,
|
||||
*aPad ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
aDstContainer->Add( new CROUNDSEGMENT2D( corners3DU[i - 1],
|
||||
corners3DU[i & 3],
|
||||
aClearanceValue.x * 2.0f * m_biuTo3Dunits,
|
||||
*aPad ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -477,25 +503,6 @@ void CINFO3D_VISU::createNewPadWithClearance( const D_PAD* aPad,
|
||||
}
|
||||
break;
|
||||
|
||||
case PAD_SHAPE_CHAMFERED_RECT:
|
||||
{
|
||||
wxSize shapesize( aPad->GetSize() );
|
||||
shapesize.x += aClearanceValue.x * 2;
|
||||
shapesize.y += aClearanceValue.y * 2;
|
||||
|
||||
SHAPE_POLY_SET polyList; // Will contain the pad outlines in board coordinates
|
||||
|
||||
int corner_radius = aPad->GetRoundRectCornerRadius( shapesize );
|
||||
TransformRoundChamferedRectToPolygon( polyList, PadShapePos, shapesize, aPad->GetOrientation(),
|
||||
corner_radius, aPad->GetChamferRectRatio(),
|
||||
aPad->GetChamferPositions(), ARC_HIGH_DEF );
|
||||
|
||||
// Add the PAD polygon
|
||||
Convert_shape_line_polygon_to_triangles( polyList, *aDstContainer, m_biuTo3Dunits, *aPad );
|
||||
|
||||
}
|
||||
break;
|
||||
|
||||
case PAD_SHAPE_CUSTOM:
|
||||
{
|
||||
SHAPE_POLY_SET polyList; // Will contain the pad outlines in board coordinates
|
||||
@@ -568,15 +575,59 @@ COBJECT2D *CINFO3D_VISU::createNewPadDrill( const D_PAD* aPad, int aInflateValue
|
||||
}
|
||||
|
||||
|
||||
// This function pretends to be like the
|
||||
// void D_PAD::BuildPadShapePolygon(
|
||||
// board_items_to_polygon_shape_transform.cpp
|
||||
void CINFO3D_VISU::createNewPad( const D_PAD* aPad,
|
||||
CGENERICCONTAINER2D *aDstContainer,
|
||||
wxSize aInflateValue ) const
|
||||
{
|
||||
switch( aPad->GetShape() )
|
||||
{
|
||||
case PAD_SHAPE_CIRCLE:
|
||||
case PAD_SHAPE_OVAL:
|
||||
case PAD_SHAPE_ROUNDRECT:
|
||||
case PAD_SHAPE_CUSTOM:
|
||||
createNewPadWithClearance( aPad, aDstContainer, aInflateValue );
|
||||
break;
|
||||
|
||||
case PAD_SHAPE_TRAPEZOID:
|
||||
case PAD_SHAPE_RECT:
|
||||
wxPoint corners[4];
|
||||
aPad->BuildPadPolygon( corners, aInflateValue, aPad->GetOrientation() );
|
||||
|
||||
// Note: for pad having a shape offset,
|
||||
// the pad position is NOT the shape position
|
||||
for( unsigned int ii = 0; ii < 4; ++ii )
|
||||
corners[ii] += aPad->ShapePos(); // Shift origin to position
|
||||
|
||||
aDstContainer->Add( new CPOLYGON4PTS2D(
|
||||
SFVEC2F( corners[0].x * m_biuTo3Dunits,
|
||||
-corners[0].y * m_biuTo3Dunits ),
|
||||
SFVEC2F( corners[1].x * m_biuTo3Dunits,
|
||||
-corners[1].y * m_biuTo3Dunits ),
|
||||
SFVEC2F( corners[2].x * m_biuTo3Dunits,
|
||||
-corners[2].y * m_biuTo3Dunits ),
|
||||
SFVEC2F( corners[3].x * m_biuTo3Dunits,
|
||||
-corners[3].y * m_biuTo3Dunits ),
|
||||
*aPad ) );
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void CINFO3D_VISU::AddPadsShapesWithClearanceToContainer( const MODULE* aModule,
|
||||
CGENERICCONTAINER2D *aDstContainer,
|
||||
PCB_LAYER_ID aLayerId,
|
||||
int aInflateValue,
|
||||
bool aSkipNPTHPadsWihNoCopper )
|
||||
{
|
||||
const D_PAD* pad = aModule->PadsList();
|
||||
|
||||
wxSize margin;
|
||||
|
||||
for( auto pad : aModule->Pads() )
|
||||
for( ; pad != NULL; pad = pad->Next() )
|
||||
{
|
||||
if( !pad->IsOnLayer( aLayerId ) )
|
||||
continue;
|
||||
@@ -625,7 +676,7 @@ void CINFO3D_VISU::AddPadsShapesWithClearanceToContainer( const MODULE* aModule,
|
||||
break;
|
||||
}
|
||||
|
||||
createNewPadWithClearance( pad, aDstContainer, margin );
|
||||
createNewPad( pad, aDstContainer, margin );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -724,13 +775,14 @@ void CINFO3D_VISU::AddShapeWithClearanceToContainer( const DRAWSEGMENT* aDrawSeg
|
||||
const SFVEC2F center3DU( aDrawSegment->GetCenter().x * m_biuTo3Dunits,
|
||||
-aDrawSegment->GetCenter().y * m_biuTo3Dunits );
|
||||
|
||||
float inner_radius = ( aDrawSegment->GetRadius() - linewidth / 2 ) * m_biuTo3Dunits;
|
||||
float outer_radius = ( aDrawSegment->GetRadius() + linewidth / 2 ) * m_biuTo3Dunits;
|
||||
const float inner_radius =
|
||||
std::max<float>( (aDrawSegment->GetRadius() - linewidth / 2) * m_biuTo3Dunits, 0.0 );
|
||||
const float outter_radius = (aDrawSegment->GetRadius() + linewidth / 2) * m_biuTo3Dunits;
|
||||
|
||||
if( inner_radius < 0 )
|
||||
inner_radius = 0;
|
||||
|
||||
aDstContainer->Add( new CRING2D( center3DU, inner_radius, outer_radius, *aDrawSegment ) );
|
||||
aDstContainer->Add( new CRING2D( center3DU,
|
||||
inner_radius,
|
||||
outter_radius,
|
||||
*aDrawSegment ) );
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -776,9 +828,12 @@ void CINFO3D_VISU::AddShapeWithClearanceToContainer( const DRAWSEGMENT* aDrawSeg
|
||||
case S_CURVE:
|
||||
case S_POLYGON:
|
||||
{
|
||||
const int segcountforcircle = ARC_APPROX_SEGMENTS_COUNT_HIGH_DEF;
|
||||
const double correctionFactor = GetCircleCorrectionFactor( segcountforcircle );
|
||||
SHAPE_POLY_SET polyList;
|
||||
|
||||
aDrawSegment->TransformShapeWithClearanceToPolygon( polyList, aClearanceValue );
|
||||
aDrawSegment->TransformShapeWithClearanceToPolygon( polyList, aClearanceValue,
|
||||
segcountforcircle, correctionFactor );
|
||||
|
||||
polyList.Simplify( SHAPE_POLY_SET::PM_FAST );
|
||||
|
||||
@@ -807,16 +862,13 @@ void CINFO3D_VISU::AddSolidAreasShapesToContainer( const ZONE_CONTAINER* aZoneCo
|
||||
SHAPE_POLY_SET polyList = SHAPE_POLY_SET( aZoneContainer->GetFilledPolysList(), true );
|
||||
|
||||
// This convert the poly in outline and holes
|
||||
Convert_shape_line_polygon_to_triangles( polyList, *aDstContainer, m_biuTo3Dunits,
|
||||
Convert_shape_line_polygon_to_triangles( polyList,
|
||||
*aDstContainer,
|
||||
m_biuTo3Dunits,
|
||||
*aZoneContainer );
|
||||
|
||||
// add filled areas outlines, which are drawn with thick lines segments
|
||||
// but only if filled polygons outlines have thickness
|
||||
if( !aZoneContainer->GetFilledPolysUseThickness() )
|
||||
return;
|
||||
|
||||
float line_thickness = aZoneContainer->GetMinThickness() * m_biuTo3Dunits;
|
||||
|
||||
// /////////////////////////////////////////////////////////////////////////
|
||||
for( int i = 0; i < polyList.OutlineCount(); ++i )
|
||||
{
|
||||
// Add outline
|
||||
@@ -832,15 +884,17 @@ void CINFO3D_VISU::AddSolidAreasShapesToContainer( const ZONE_CONTAINER* aZoneCo
|
||||
|
||||
if( Is_segment_a_circle( start3DU, end3DU ) )
|
||||
{
|
||||
float radius = line_thickness/2;
|
||||
float radius = (aZoneContainer->GetMinThickness() / 2) * m_biuTo3Dunits;
|
||||
|
||||
if( radius > 0.0 ) // degenerated circles crash 3D viewer
|
||||
aDstContainer->Add( new CFILLEDCIRCLE2D( start3DU, radius,
|
||||
aDstContainer->Add( new CFILLEDCIRCLE2D( start3DU, radius ,
|
||||
*aZoneContainer ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
aDstContainer->Add( new CROUNDSEGMENT2D( start3DU, end3DU, line_thickness,
|
||||
aDstContainer->Add( new CROUNDSEGMENT2D( start3DU, end3DU,
|
||||
aZoneContainer->GetMinThickness() *
|
||||
m_biuTo3Dunits,
|
||||
*aZoneContainer ) );
|
||||
}
|
||||
}
|
||||
@@ -860,7 +914,7 @@ void CINFO3D_VISU::AddSolidAreasShapesToContainer( const ZONE_CONTAINER* aZoneCo
|
||||
|
||||
if( Is_segment_a_circle( start3DU, end3DU ) )
|
||||
{
|
||||
float radius = line_thickness/2;
|
||||
float radius = (aZoneContainer->GetMinThickness() / 2) * m_biuTo3Dunits;
|
||||
|
||||
if( radius > 0.0 ) // degenerated circles crash 3D viewer
|
||||
aDstContainer->Add(
|
||||
@@ -870,7 +924,9 @@ void CINFO3D_VISU::AddSolidAreasShapesToContainer( const ZONE_CONTAINER* aZoneCo
|
||||
else
|
||||
{
|
||||
aDstContainer->Add(
|
||||
new CROUNDSEGMENT2D( start3DU, end3DU, line_thickness,
|
||||
new CROUNDSEGMENT2D( start3DU, end3DU,
|
||||
aZoneContainer->GetMinThickness() *
|
||||
m_biuTo3Dunits,
|
||||
*aZoneContainer ) );
|
||||
}
|
||||
}
|
||||
@@ -890,17 +946,28 @@ void CINFO3D_VISU::buildPadShapeThickOutlineAsSegments( const D_PAD* aPad,
|
||||
-aPad->ShapePos().y * m_biuTo3Dunits );
|
||||
|
||||
const int radius = aPad->GetSize().x / 2;
|
||||
const float inner_radius = ( radius - aWidth / 2 ) * m_biuTo3Dunits;
|
||||
const float outer_radius = ( radius + aWidth / 2 ) * m_biuTo3Dunits;
|
||||
const float inner_radius = (radius - aWidth / 2) * m_biuTo3Dunits;
|
||||
const float outter_radius = (radius + aWidth / 2) * m_biuTo3Dunits;
|
||||
|
||||
aDstContainer->Add( new CRING2D( center3DU, inner_radius, outer_radius, *aPad ) );
|
||||
aDstContainer->Add( new CRING2D( center3DU,
|
||||
inner_radius,
|
||||
outter_radius,
|
||||
*aPad ) );
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// For other shapes, draw polygon outlines
|
||||
SHAPE_POLY_SET corners;
|
||||
aPad->BuildPadShapePolygon( corners, wxSize( 0, 0 ) );
|
||||
|
||||
const int segcountforcircle = GetNrSegmentsCircle( glm::min( aPad->GetSize().x,
|
||||
aPad->GetSize().y) );
|
||||
|
||||
const double correctionFactor = GetCircleCorrectionFactor( segcountforcircle );
|
||||
|
||||
aPad->BuildPadShapePolygon( corners, wxSize( 0, 0 ),
|
||||
// This two factors are only expected to be used if render an oval
|
||||
segcountforcircle, correctionFactor );
|
||||
|
||||
|
||||
// Add outlines as thick segments in polygon buffer
|
||||
@@ -917,13 +984,15 @@ void CINFO3D_VISU::buildPadShapeThickOutlineAsSegments( const D_PAD* aPad,
|
||||
|
||||
if( Is_segment_a_circle( start3DU, end3DU ) )
|
||||
{
|
||||
aDstContainer->Add(
|
||||
new CFILLEDCIRCLE2D( start3DU, ( aWidth / 2 ) * m_biuTo3Dunits, *aPad ) );
|
||||
aDstContainer->Add( new CFILLEDCIRCLE2D( start3DU,
|
||||
(aWidth / 2) * m_biuTo3Dunits,
|
||||
*aPad ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
aDstContainer->Add(
|
||||
new CROUNDSEGMENT2D( start3DU, end3DU, aWidth * m_biuTo3Dunits, *aPad ) );
|
||||
aDstContainer->Add( new CROUNDSEGMENT2D( start3DU, end3DU,
|
||||
aWidth * m_biuTo3Dunits,
|
||||
*aPad ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -140,6 +140,17 @@ void CINFO3D_VISU::destroyLayers()
|
||||
|
||||
void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
|
||||
{
|
||||
// Number of segments to draw a circle using segments (used on countour zones
|
||||
// and text copper elements )
|
||||
const int segcountforcircle = 12;
|
||||
const double correctionFactor = GetCircleCorrectionFactor( segcountforcircle );
|
||||
|
||||
// segments to draw a circle to build texts. Is is used only to build
|
||||
// the shape of each segment of the stroke font, therefore no need to have
|
||||
// many segments per circle.
|
||||
const int segcountInStrokeFont = 12;
|
||||
const double correctionFactorStroke = GetCircleCorrectionFactor( segcountInStrokeFont );
|
||||
|
||||
destroyLayers();
|
||||
|
||||
// Build Copper layers
|
||||
@@ -166,9 +177,9 @@ void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
|
||||
// /////////////////////////////////////////////////////////////////////////
|
||||
std::vector< const TRACK *> trackList;
|
||||
trackList.clear();
|
||||
trackList.reserve( m_board->Tracks().size() );
|
||||
trackList.reserve( m_board->m_Track.GetCount() );
|
||||
|
||||
for( auto track : m_board->Tracks() )
|
||||
for( const TRACK* track = m_board->m_Track; track; track = track->Next() )
|
||||
{
|
||||
if( !Is3DLayerEnabled( track->GetLayer() ) ) // Skip non enabled layers
|
||||
continue;
|
||||
@@ -382,7 +393,7 @@ void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
|
||||
// Add VIA hole contourns
|
||||
// /////////////////////////////////////////////////////////
|
||||
|
||||
// Add outer holes of VIAs
|
||||
// Add outter holes of VIAs
|
||||
SHAPE_POLY_SET *layerOuterHolesPoly = NULL;
|
||||
SHAPE_POLY_SET *layerInnerHolesPoly = NULL;
|
||||
|
||||
@@ -414,11 +425,15 @@ void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
|
||||
const int holediameter = via->GetDrillValue();
|
||||
const int hole_outer_radius = (holediameter / 2) + GetCopperThicknessBIU();
|
||||
|
||||
TransformCircleToPolygon( *layerOuterHolesPoly, via->GetStart(),
|
||||
hole_outer_radius, ARC_HIGH_DEF );
|
||||
TransformCircleToPolygon( *layerOuterHolesPoly,
|
||||
via->GetStart(),
|
||||
hole_outer_radius,
|
||||
GetNrSegmentsCircle( hole_outer_radius * 2 ) );
|
||||
|
||||
TransformCircleToPolygon( *layerInnerHolesPoly, via->GetStart(),
|
||||
holediameter / 2, ARC_HIGH_DEF );
|
||||
TransformCircleToPolygon( *layerInnerHolesPoly,
|
||||
via->GetStart(),
|
||||
holediameter / 2,
|
||||
GetNrSegmentsCircle( holediameter ) );
|
||||
}
|
||||
else if( lIdx == 0 ) // it only adds once the THT holes
|
||||
{
|
||||
@@ -427,16 +442,22 @@ void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
|
||||
|
||||
// Add through hole contourns
|
||||
// /////////////////////////////////////////////////////////
|
||||
TransformCircleToPolygon( m_through_outer_holes_poly, via->GetStart(),
|
||||
hole_outer_radius, ARC_HIGH_DEF );
|
||||
TransformCircleToPolygon( m_through_outer_holes_poly,
|
||||
via->GetStart(),
|
||||
hole_outer_radius,
|
||||
GetNrSegmentsCircle( hole_outer_radius * 2 ) );
|
||||
|
||||
TransformCircleToPolygon( m_through_inner_holes_poly, via->GetStart(),
|
||||
holediameter / 2, ARC_HIGH_DEF );
|
||||
TransformCircleToPolygon( m_through_inner_holes_poly,
|
||||
via->GetStart(),
|
||||
holediameter / 2,
|
||||
GetNrSegmentsCircle( holediameter ) );
|
||||
|
||||
// Add samething for vias only
|
||||
|
||||
TransformCircleToPolygon( m_through_outer_holes_vias_poly, via->GetStart(),
|
||||
hole_outer_radius, ARC_HIGH_DEF );
|
||||
TransformCircleToPolygon( m_through_outer_holes_vias_poly,
|
||||
via->GetStart(),
|
||||
hole_outer_radius,
|
||||
GetNrSegmentsCircle( hole_outer_radius * 2 ) );
|
||||
|
||||
//TransformCircleToPolygon( m_through_inner_holes_vias_poly,
|
||||
// via->GetStart(),
|
||||
@@ -476,7 +497,13 @@ void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
|
||||
continue;
|
||||
|
||||
// Add the track contour
|
||||
track->TransformShapeWithClearanceToPolygon( *layerPoly, 0 );
|
||||
int nrSegments = GetNrSegmentsCircle( track->GetWidth() );
|
||||
|
||||
track->TransformShapeWithClearanceToPolygon(
|
||||
*layerPoly,
|
||||
0,
|
||||
nrSegments,
|
||||
GetCircleCorrectionFactor( nrSegments ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -488,9 +515,11 @@ void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
|
||||
|
||||
// Add holes of modules
|
||||
// /////////////////////////////////////////////////////////////////////////
|
||||
for( auto module : m_board->Modules() )
|
||||
for( const MODULE* module = m_board->m_Modules; module; module = module->Next() )
|
||||
{
|
||||
for( auto pad : module->Pads() )
|
||||
const D_PAD* pad = module->PadsList();
|
||||
|
||||
for( ; pad; pad = pad->Next() )
|
||||
{
|
||||
const wxSize padHole = pad->GetDrillSize();
|
||||
|
||||
@@ -520,9 +549,11 @@ void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
|
||||
|
||||
// Add contours of the pad holes (pads can be Circle or Segment holes)
|
||||
// /////////////////////////////////////////////////////////////////////////
|
||||
for( auto module : m_board->Modules() )
|
||||
for( const MODULE* module = m_board->m_Modules; module; module = module->Next() )
|
||||
{
|
||||
for( auto pad : module->Pads() )
|
||||
const D_PAD* pad = module->PadsList();
|
||||
|
||||
for( ; pad; pad = pad->Next() )
|
||||
{
|
||||
const wxSize padHole = pad->GetDrillSize();
|
||||
|
||||
@@ -532,16 +563,28 @@ void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
|
||||
// The hole in the body is inflated by copper thickness.
|
||||
const int inflate = GetCopperThicknessBIU();
|
||||
|
||||
// we use the hole diameter to calculate the seg count.
|
||||
// for round holes, padHole.x == padHole.y
|
||||
// for oblong holes, the diameter is the smaller of (padHole.x, padHole.y)
|
||||
const int diam = std::min( padHole.x, padHole.y );
|
||||
|
||||
|
||||
if( pad->GetAttribute () != PAD_ATTRIB_HOLE_NOT_PLATED )
|
||||
{
|
||||
pad->BuildPadDrillShapePolygon( m_through_outer_holes_poly, inflate );
|
||||
pad->BuildPadDrillShapePolygon( m_through_outer_holes_poly,
|
||||
inflate,
|
||||
GetNrSegmentsCircle( diam ) );
|
||||
|
||||
pad->BuildPadDrillShapePolygon( m_through_inner_holes_poly, 0 );
|
||||
pad->BuildPadDrillShapePolygon( m_through_inner_holes_poly,
|
||||
0,
|
||||
GetNrSegmentsCircle( diam ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
// If not plated, no copper.
|
||||
pad->BuildPadDrillShapePolygon( m_through_outer_holes_poly_NPTH, inflate );
|
||||
pad->BuildPadDrillShapePolygon( m_through_outer_holes_poly_NPTH,
|
||||
inflate,
|
||||
GetNrSegmentsCircle( diam ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -562,7 +605,7 @@ void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
|
||||
CBVHCONTAINER2D *layerContainer = m_layers_container2D[curr_layer_id];
|
||||
|
||||
// ADD PADS
|
||||
for( auto module : m_board->Modules() )
|
||||
for( const MODULE* module = m_board->m_Modules; module; module = module->Next() )
|
||||
{
|
||||
// Note: NPTH pads are not drawn on copper layers when the pad
|
||||
// has same shape as its hole
|
||||
@@ -599,22 +642,25 @@ void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
|
||||
SHAPE_POLY_SET *layerPoly = m_layers_poly[curr_layer_id];
|
||||
|
||||
// ADD PADS
|
||||
for( auto module : m_board->Modules() )
|
||||
for( const MODULE* module = m_board->m_Modules; module; module = module->Next() )
|
||||
{
|
||||
// Construct polys
|
||||
// /////////////////////////////////////////////////////////////
|
||||
|
||||
// Note: NPTH pads are not drawn on copper layers when the pad
|
||||
// has same shape as its hole
|
||||
transformPadsShapesWithClearanceToPolygon( module->Pads(),
|
||||
transformPadsShapesWithClearanceToPolygon( module->PadsList(),
|
||||
curr_layer_id,
|
||||
*layerPoly,
|
||||
0,
|
||||
true );
|
||||
|
||||
// Micro-wave modules may have items on copper layers
|
||||
module->TransformGraphicTextWithClearanceToPolygonSet(
|
||||
curr_layer_id, *layerPoly, 0 );
|
||||
module->TransformGraphicTextWithClearanceToPolygonSet( curr_layer_id,
|
||||
*layerPoly,
|
||||
0,
|
||||
segcountforcircle,
|
||||
correctionFactor );
|
||||
|
||||
transformGraphicModuleEdgeToPolygonSet( module, curr_layer_id, *layerPoly );
|
||||
}
|
||||
@@ -644,7 +690,7 @@ void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
|
||||
|
||||
switch( item->Type() )
|
||||
{
|
||||
case PCB_LINE_T:
|
||||
case PCB_LINE_T: // should not exist on copper layers
|
||||
{
|
||||
AddShapeWithClearanceToContainer( (DRAWSEGMENT*)item,
|
||||
layerContainer,
|
||||
@@ -703,17 +749,31 @@ void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
|
||||
switch( item->Type() )
|
||||
{
|
||||
case PCB_LINE_T:
|
||||
( (DRAWSEGMENT*) item )->TransformShapeWithClearanceToPolygon( *layerPoly, 0 );
|
||||
break;
|
||||
{
|
||||
const int nrSegments =
|
||||
GetNrSegmentsCircle( item->GetBoundingBox().GetSizeMax() );
|
||||
|
||||
( (DRAWSEGMENT*) item )->TransformShapeWithClearanceToPolygon(
|
||||
*layerPoly,
|
||||
0,
|
||||
nrSegments,
|
||||
GetCircleCorrectionFactor( nrSegments ) );
|
||||
}
|
||||
break;
|
||||
|
||||
case PCB_TEXT_T:
|
||||
( (TEXTE_PCB*) item )->TransformShapeWithClearanceToPolygonSet( *layerPoly, 0 );
|
||||
break;
|
||||
( (TEXTE_PCB*) item )->TransformShapeWithClearanceToPolygonSet(
|
||||
*layerPoly,
|
||||
0,
|
||||
segcountforcircle,
|
||||
correctionFactor );
|
||||
break;
|
||||
|
||||
default:
|
||||
wxLogTrace( m_logTrace, wxT( "createLayers: item type: %d not implemented" ),
|
||||
item->Type() );
|
||||
break;
|
||||
wxLogTrace( m_logTrace,
|
||||
wxT( "createLayers: item type: %d not implemented" ),
|
||||
item->Type() );
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -786,7 +846,7 @@ void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
|
||||
auto layerContainer = m_layers_poly.find( zone->GetLayer() );
|
||||
|
||||
if( layerContainer != m_layers_poly.end() )
|
||||
zone->TransformSolidAreasShapesToPolygonSet( *layerContainer->second );
|
||||
zone->TransformSolidAreasShapesToPolygonSet( *layerContainer->second, segcountforcircle, correctionFactor );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -974,11 +1034,22 @@ void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
|
||||
switch( item->Type() )
|
||||
{
|
||||
case PCB_LINE_T:
|
||||
( (DRAWSEGMENT*) item )->TransformShapeWithClearanceToPolygon( *layerPoly, 0 );
|
||||
{
|
||||
const unsigned int nr_segments =
|
||||
GetNrSegmentsCircle( item->GetBoundingBox().GetSizeMax() );
|
||||
|
||||
((DRAWSEGMENT*) item)->TransformShapeWithClearanceToPolygon( *layerPoly,
|
||||
0,
|
||||
nr_segments,
|
||||
0.0 );
|
||||
}
|
||||
break;
|
||||
|
||||
case PCB_TEXT_T:
|
||||
( (TEXTE_PCB*) item )->TransformShapeWithClearanceToPolygonSet( *layerPoly, 0 );
|
||||
((TEXTE_PCB*) item)->TransformShapeWithClearanceToPolygonSet( *layerPoly,
|
||||
0,
|
||||
segcountInStrokeFont,
|
||||
1.0 );
|
||||
break;
|
||||
|
||||
default:
|
||||
@@ -989,39 +1060,49 @@ void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
|
||||
|
||||
// Add modules tech layers - objects
|
||||
// /////////////////////////////////////////////////////////////////////
|
||||
for( auto module : m_board->Modules() )
|
||||
for( MODULE* module = m_board->m_Modules; module; module = module->Next() )
|
||||
{
|
||||
if( (curr_layer_id == F_SilkS) || (curr_layer_id == B_SilkS) )
|
||||
{
|
||||
D_PAD* pad = module->PadsList();
|
||||
int linewidth = g_DrawDefaultLineThickness;
|
||||
|
||||
for( auto pad : module->Pads() )
|
||||
for( ; pad; pad = pad->Next() )
|
||||
{
|
||||
if( !pad->IsOnLayer( curr_layer_id ) )
|
||||
continue;
|
||||
|
||||
buildPadShapeThickOutlineAsSegments( pad, layerContainer, linewidth );
|
||||
buildPadShapeThickOutlineAsSegments( pad,
|
||||
layerContainer,
|
||||
linewidth );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
AddPadsShapesWithClearanceToContainer(
|
||||
module, layerContainer, curr_layer_id, 0, false );
|
||||
AddPadsShapesWithClearanceToContainer( module,
|
||||
layerContainer,
|
||||
curr_layer_id,
|
||||
0,
|
||||
false );
|
||||
}
|
||||
|
||||
AddGraphicsShapesWithClearanceToContainer( module, layerContainer, curr_layer_id, 0 );
|
||||
AddGraphicsShapesWithClearanceToContainer( module,
|
||||
layerContainer,
|
||||
curr_layer_id,
|
||||
0 );
|
||||
}
|
||||
|
||||
|
||||
// Add modules tech layers - contours
|
||||
// /////////////////////////////////////////////////////////////////////
|
||||
for( auto module : m_board->Modules() )
|
||||
for( MODULE* module = m_board->m_Modules; module; module = module->Next() )
|
||||
{
|
||||
if( (curr_layer_id == F_SilkS) || (curr_layer_id == B_SilkS) )
|
||||
{
|
||||
D_PAD* pad = module->PadsList();
|
||||
const int linewidth = g_DrawDefaultLineThickness;
|
||||
|
||||
for( auto pad : module->Pads() )
|
||||
for( ; pad; pad = pad->Next() )
|
||||
{
|
||||
if( !pad->IsOnLayer( curr_layer_id ) )
|
||||
continue;
|
||||
@@ -1031,12 +1112,20 @@ void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
|
||||
}
|
||||
else
|
||||
{
|
||||
transformPadsShapesWithClearanceToPolygon(
|
||||
module->Pads(), curr_layer_id, *layerPoly, 0, false );
|
||||
transformPadsShapesWithClearanceToPolygon( module->PadsList(),
|
||||
curr_layer_id,
|
||||
*layerPoly,
|
||||
0,
|
||||
false );
|
||||
}
|
||||
|
||||
// On tech layers, use a poor circle approximation, only for texts (stroke font)
|
||||
module->TransformGraphicTextWithClearanceToPolygonSet( curr_layer_id, *layerPoly, 0 );
|
||||
module->TransformGraphicTextWithClearanceToPolygonSet( curr_layer_id,
|
||||
*layerPoly,
|
||||
0,
|
||||
segcountInStrokeFont,
|
||||
correctionFactorStroke,
|
||||
segcountInStrokeFont );
|
||||
|
||||
// Add the remaining things with dynamic seg count for circles
|
||||
transformGraphicModuleEdgeToPolygonSet( module, curr_layer_id, *layerPoly );
|
||||
@@ -1066,7 +1155,10 @@ void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
|
||||
if( !zone->IsOnLayer( curr_layer_id ) )
|
||||
continue;
|
||||
|
||||
zone->TransformSolidAreasShapesToPolygonSet( *layerPoly );
|
||||
zone->TransformSolidAreasShapesToPolygonSet( *layerPoly,
|
||||
// Use the same segcount as stroke font
|
||||
segcountInStrokeFont,
|
||||
correctionFactorStroke );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2015-2016 Mario Luzeiro <mrluzeiro@ua.pt>
|
||||
* Copyright (C) 1992-2019 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
* Copyright (C) 1992-2016 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
|
||||
@@ -40,7 +40,9 @@
|
||||
// but it adds the rect/trapezoid shapes with a different winding
|
||||
void CINFO3D_VISU::buildPadShapePolygon( const D_PAD* aPad,
|
||||
SHAPE_POLY_SET& aCornerBuffer,
|
||||
wxSize aInflateValue ) const
|
||||
wxSize aInflateValue,
|
||||
int aSegmentsPerCircle,
|
||||
double aCorrectionFactor ) const
|
||||
{
|
||||
wxPoint corners[4];
|
||||
wxPoint PadShapePos = aPad->ShapePos(); /* Note: for pad having a shape offset,
|
||||
@@ -50,7 +52,6 @@ void CINFO3D_VISU::buildPadShapePolygon( const D_PAD* aPad,
|
||||
case PAD_SHAPE_CIRCLE:
|
||||
case PAD_SHAPE_OVAL:
|
||||
case PAD_SHAPE_ROUNDRECT:
|
||||
case PAD_SHAPE_CHAMFERED_RECT:
|
||||
{
|
||||
// We are using TransformShapeWithClearanceToPolygon to build the shape.
|
||||
// Currently, this method uses only the same inflate value for X and Y dirs.
|
||||
@@ -61,7 +62,8 @@ void CINFO3D_VISU::buildPadShapePolygon( const D_PAD* aPad,
|
||||
D_PAD dummy( *aPad );
|
||||
wxSize new_size = aPad->GetSize() + aInflateValue + aInflateValue;
|
||||
dummy.SetSize( new_size );
|
||||
dummy.TransformShapeWithClearanceToPolygon( aCornerBuffer, 0 );
|
||||
dummy.TransformShapeWithClearanceToPolygon( aCornerBuffer, 0,
|
||||
aSegmentsPerCircle, aCorrectionFactor );
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -87,17 +89,8 @@ void CINFO3D_VISU::buildPadShapePolygon( const D_PAD* aPad,
|
||||
case PAD_SHAPE_CUSTOM:
|
||||
{
|
||||
SHAPE_POLY_SET polyList; // Will contain the pad outlines in board coordinates
|
||||
auto inflate_val = std::max( aInflateValue.x, aInflateValue.y );
|
||||
|
||||
polyList.Append( aPad->GetCustomShapeAsPolygon() );
|
||||
aPad->CustomShapeAsPolygonToBoardPosition( &polyList, aPad->ShapePos(), aPad->GetOrientation() );
|
||||
|
||||
if( inflate_val > 0 )
|
||||
{
|
||||
int numSegs = GetNrSegmentsCircle( inflate_val );
|
||||
polyList.Inflate( inflate_val, numSegs );
|
||||
}
|
||||
|
||||
aCornerBuffer.Append( polyList );
|
||||
}
|
||||
break;
|
||||
@@ -111,8 +104,11 @@ void CINFO3D_VISU::buildPadShapeThickOutlineAsPolygon( const D_PAD* aPad,
|
||||
{
|
||||
if( aPad->GetShape() == PAD_SHAPE_CIRCLE ) // Draw a ring
|
||||
{
|
||||
unsigned int nr_sides_per_circle = GetNrSegmentsCircle( ( aPad->GetSize().x / 2 +
|
||||
aWidth / 2 ) * 2 );
|
||||
|
||||
TransformRingToPolygon( aCornerBuffer, aPad->ShapePos(),
|
||||
aPad->GetSize().x / 2, ARC_HIGH_DEF, aWidth );
|
||||
aPad->GetSize().x / 2, nr_sides_per_circle, aWidth );
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -120,7 +116,11 @@ void CINFO3D_VISU::buildPadShapeThickOutlineAsPolygon( const D_PAD* aPad,
|
||||
// For other shapes, draw polygon outlines
|
||||
SHAPE_POLY_SET corners;
|
||||
|
||||
buildPadShapePolygon( aPad, corners, wxSize( 0, 0 ) );
|
||||
unsigned int nr_sides_per_circle = GetNrSegmentsCircle( glm::min( aPad->GetSize().x,
|
||||
aPad->GetSize().y) );
|
||||
buildPadShapePolygon( aPad, corners, wxSize( 0, 0 ),
|
||||
nr_sides_per_circle,
|
||||
GetCircleCorrectionFactor( nr_sides_per_circle ) );
|
||||
|
||||
// Add outlines as thick segments in polygon buffer
|
||||
|
||||
@@ -131,21 +131,26 @@ void CINFO3D_VISU::buildPadShapeThickOutlineAsPolygon( const D_PAD* aPad,
|
||||
const VECTOR2I& a = path.CPoint( ii );
|
||||
const VECTOR2I& b = path.CPoint( ii + 1 );
|
||||
|
||||
TransformRoundedEndsSegmentToPolygon( aCornerBuffer, wxPoint( a.x, a.y ),
|
||||
wxPoint( b.x, b.y ), ARC_HIGH_DEF, aWidth );
|
||||
TransformRoundedEndsSegmentToPolygon( aCornerBuffer,
|
||||
wxPoint( a.x, a.y ),
|
||||
wxPoint( b.x, b.y ),
|
||||
nr_sides_per_circle,
|
||||
aWidth );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Based on the same function name in board_items_to_polyshape_transform.cpp
|
||||
// It was implemented here to allow dynamic segments count per pad shape
|
||||
void CINFO3D_VISU::transformPadsShapesWithClearanceToPolygon( const PADS& aPads, PCB_LAYER_ID aLayer,
|
||||
void CINFO3D_VISU::transformPadsShapesWithClearanceToPolygon( const DLIST<D_PAD>& aPads, PCB_LAYER_ID aLayer,
|
||||
SHAPE_POLY_SET& aCornerBuffer,
|
||||
int aInflateValue,
|
||||
bool aSkipNPTHPadsWihNoCopper ) const
|
||||
{
|
||||
const D_PAD* pad = aPads;
|
||||
|
||||
wxSize margin;
|
||||
for( auto pad : aPads )
|
||||
for( ; pad != NULL; pad = pad->Next() )
|
||||
{
|
||||
if( !pad->IsOnLayer(aLayer) )
|
||||
continue;
|
||||
@@ -194,7 +199,11 @@ void CINFO3D_VISU::transformPadsShapesWithClearanceToPolygon( const PADS& aPads,
|
||||
break;
|
||||
}
|
||||
|
||||
buildPadShapePolygon( pad, aCornerBuffer, margin );
|
||||
unsigned int aCircleToSegmentsCount = GetNrSegmentsCircle( pad->GetSize().x );
|
||||
double aCorrectionFactor = GetCircleCorrectionFactor( aCircleToSegmentsCount );
|
||||
|
||||
buildPadShapePolygon( pad, aCornerBuffer, margin,
|
||||
aCircleToSegmentsCount, aCorrectionFactor );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -202,7 +211,9 @@ void CINFO3D_VISU::transformGraphicModuleEdgeToPolygonSet( const MODULE *aModule
|
||||
PCB_LAYER_ID aLayer,
|
||||
SHAPE_POLY_SET& aCornerBuffer ) const
|
||||
{
|
||||
for( auto item : aModule->GraphicalItems() )
|
||||
for( const EDA_ITEM* item = aModule->GraphicalItemsList();
|
||||
item != NULL;
|
||||
item = item->Next() )
|
||||
{
|
||||
switch( item->Type() )
|
||||
{
|
||||
@@ -213,7 +224,15 @@ void CINFO3D_VISU::transformGraphicModuleEdgeToPolygonSet( const MODULE *aModule
|
||||
if( outline->GetLayer() != aLayer )
|
||||
break;
|
||||
|
||||
outline->TransformShapeWithClearanceToPolygon( aCornerBuffer, 0 );
|
||||
unsigned int aCircleToSegmentsCount =
|
||||
GetNrSegmentsCircle( outline->GetBoundingBox().GetSizeMax() );
|
||||
|
||||
double aCorrectionFactor = GetCircleCorrectionFactor( aCircleToSegmentsCount );
|
||||
|
||||
outline->TransformShapeWithClearanceToPolygon( aCornerBuffer,
|
||||
0,
|
||||
aCircleToSegmentsCount,
|
||||
aCorrectionFactor );
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2015-2016 Mario Luzeiro <mrluzeiro@ua.pt>
|
||||
* Copyright (C) 1992-2019 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
* Copyright (C) 1992-2020 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
|
||||
@@ -45,8 +45,6 @@
|
||||
#include <hotkeys_basic.h>
|
||||
#include <menus_helpers.h>
|
||||
|
||||
#include <widgets/wx_busy_indicator.h>
|
||||
|
||||
|
||||
/**
|
||||
* Flag to enable 3D canvas debug tracing.
|
||||
@@ -59,6 +57,9 @@ const wxChar * EDA_3D_CANVAS::m_logTrace = wxT( "KI_TRACE_EDA_3D_CANVAS" );
|
||||
|
||||
const float EDA_3D_CANVAS::m_delta_move_step_factor = 0.7f;
|
||||
|
||||
// A custom event, used to call DoRePaint during an idle time
|
||||
wxDEFINE_EVENT( wxEVT_REFRESH_CUSTOM_COMMAND, wxEvent);
|
||||
|
||||
|
||||
BEGIN_EVENT_TABLE( EDA_3D_CANVAS, wxGLCanvas )
|
||||
EVT_PAINT( EDA_3D_CANVAS::OnPaint )
|
||||
@@ -80,6 +81,7 @@ BEGIN_EVENT_TABLE( EDA_3D_CANVAS, wxGLCanvas )
|
||||
|
||||
// other events
|
||||
EVT_ERASE_BACKGROUND( EDA_3D_CANVAS::OnEraseBackground )
|
||||
EVT_CUSTOM(wxEVT_REFRESH_CUSTOM_COMMAND, ID_CUSTOM_EVENT_1, EDA_3D_CANVAS::OnRefreshRequest )
|
||||
EVT_MENU_RANGE( ID_POPUP_3D_VIEW_START,
|
||||
ID_POPUP_3D_VIEW_END, EDA_3D_CANVAS::OnPopUpMenu )
|
||||
|
||||
@@ -143,11 +145,6 @@ EDA_3D_CANVAS::EDA_3D_CANVAS( wxWindow *aParent,
|
||||
wxASSERT( m_3d_render_raytracing != NULL );
|
||||
wxASSERT( m_3d_render_ogl_legacy != NULL );
|
||||
|
||||
auto busy_indicator_factory = []() { return std::make_unique<WX_BUSY_INDICATOR>(); };
|
||||
|
||||
m_3d_render_raytracing->SetBusyIndicatorFactory( busy_indicator_factory );
|
||||
m_3d_render_ogl_legacy->SetBusyIndicatorFactory( busy_indicator_factory );
|
||||
|
||||
RenderEngineChanged();
|
||||
|
||||
wxASSERT( aBoard != NULL );
|
||||
@@ -319,17 +316,22 @@ void EDA_3D_CANVAS::DisplayStatus()
|
||||
}
|
||||
|
||||
|
||||
void EDA_3D_CANVAS::OnPaint( wxPaintEvent &event )
|
||||
void EDA_3D_CANVAS::OnPaint( wxPaintEvent& aEvent )
|
||||
{
|
||||
// Please have a look at:
|
||||
// https://lists.launchpad.net/kicad-developers/msg25149.html
|
||||
// wxPaintDC( this );
|
||||
// event.Skip( false );
|
||||
// aEvent.Skip( false );
|
||||
DoRePaint();
|
||||
}
|
||||
|
||||
|
||||
void EDA_3D_CANVAS::DoRePaint()
|
||||
{
|
||||
// SwapBuffer requires the window to be shown before calling
|
||||
if( !IsShownOnScreen() )
|
||||
{
|
||||
wxLogTrace( m_logTrace, "EDA_3D_CANVAS::OnPaint !IsShown" );
|
||||
wxLogTrace( m_logTrace, "EDA_3D_CANVAS::DoRePaint !IsShown" );
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -660,42 +662,79 @@ void EDA_3D_CANVAS::OnRightClick( wxMouseEvent &event )
|
||||
|
||||
wxPoint pos;
|
||||
wxMenu PopUpMenu;
|
||||
wxString msg;
|
||||
|
||||
pos.x = event.GetX();
|
||||
pos.y = event.GetY();
|
||||
|
||||
msg = AddHotkeyName( _( "Zoom +" ), GetHotkeyConfig(),
|
||||
ID_POPUP_ZOOMIN );
|
||||
AddMenuItem( &PopUpMenu, ID_POPUP_ZOOMIN,
|
||||
_( "Zoom +\tF1" ), KiBitmap( zoom_in_xpm ) );
|
||||
msg, KiBitmap( zoom_in_xpm ) );
|
||||
|
||||
|
||||
msg = AddHotkeyName( _( "Zoom -" ), GetHotkeyConfig(),
|
||||
ID_POPUP_ZOOMOUT );
|
||||
AddMenuItem( &PopUpMenu, ID_POPUP_ZOOMOUT,
|
||||
_( "Zoom -\tF2" ), KiBitmap( zoom_out_xpm ) );
|
||||
msg, KiBitmap( zoom_out_xpm ) );
|
||||
|
||||
PopUpMenu.AppendSeparator();
|
||||
|
||||
msg = AddHotkeyName( _( "Top View" ), GetHotkeyConfig(),
|
||||
ID_POPUP_VIEW_ZPOS );
|
||||
AddMenuItem( &PopUpMenu, ID_POPUP_VIEW_ZPOS,
|
||||
_( "Top View\tZ" ), KiBitmap( axis3d_top_xpm ) );
|
||||
msg, KiBitmap( axis3d_top_xpm ) );
|
||||
|
||||
msg = AddHotkeyName( _( "Bottom View" ), GetHotkeyConfig(),
|
||||
ID_POPUP_VIEW_ZNEG );
|
||||
AddMenuItem( &PopUpMenu, ID_POPUP_VIEW_ZNEG,
|
||||
_( "Bottom View\tShift+Z" ), KiBitmap( axis3d_bottom_xpm ) );
|
||||
msg, KiBitmap( axis3d_bottom_xpm ) );
|
||||
|
||||
PopUpMenu.AppendSeparator();
|
||||
|
||||
msg = AddHotkeyName( _( "Right View" ), GetHotkeyConfig(),
|
||||
ID_POPUP_VIEW_XPOS );
|
||||
AddMenuItem( &PopUpMenu, ID_POPUP_VIEW_XPOS,
|
||||
_( "Right View\tX" ), KiBitmap( axis3d_right_xpm ) );
|
||||
msg, KiBitmap( axis3d_right_xpm ) );
|
||||
|
||||
msg = AddHotkeyName( _( "Left View" ), GetHotkeyConfig(),
|
||||
ID_POPUP_VIEW_XNEG );
|
||||
AddMenuItem( &PopUpMenu, ID_POPUP_VIEW_XNEG,
|
||||
_( "Left View\tShift+X" ), KiBitmap( axis3d_left_xpm ) );
|
||||
msg, KiBitmap( axis3d_left_xpm ) );
|
||||
|
||||
PopUpMenu.AppendSeparator();
|
||||
|
||||
msg = AddHotkeyName( _( "Front View" ), GetHotkeyConfig(),
|
||||
ID_POPUP_VIEW_YPOS );
|
||||
AddMenuItem( &PopUpMenu, ID_POPUP_VIEW_YPOS,
|
||||
_( "Front View\tY" ), KiBitmap( axis3d_front_xpm ) );
|
||||
msg, KiBitmap( axis3d_front_xpm ) );
|
||||
|
||||
msg = AddHotkeyName( _( "Back View" ), GetHotkeyConfig(),
|
||||
ID_POPUP_VIEW_YNEG );
|
||||
AddMenuItem( &PopUpMenu, ID_POPUP_VIEW_YNEG,
|
||||
_( "Back View\tShift+Y" ), KiBitmap( axis3d_back_xpm ) );
|
||||
msg, KiBitmap( axis3d_back_xpm ) );
|
||||
|
||||
PopUpMenu.AppendSeparator();
|
||||
|
||||
msg = AddHotkeyName( _( "Move Left <-" ), GetHotkeyConfig(),
|
||||
ID_POPUP_MOVE3D_LEFT );
|
||||
AddMenuItem( &PopUpMenu, ID_POPUP_MOVE3D_LEFT,
|
||||
_( "Move Left <-\tLeft" ), KiBitmap( left_xpm ) );
|
||||
msg, KiBitmap( left_xpm ) );
|
||||
|
||||
msg = AddHotkeyName( _( "Move Right ->" ), GetHotkeyConfig(),
|
||||
ID_POPUP_MOVE3D_RIGHT );
|
||||
AddMenuItem( &PopUpMenu, ID_POPUP_MOVE3D_RIGHT,
|
||||
_( "Move Right ->\tRight" ), KiBitmap( right_xpm ) );
|
||||
msg, KiBitmap( right_xpm ) );
|
||||
|
||||
msg = AddHotkeyName( _( "Move Up ^" ), GetHotkeyConfig(),
|
||||
ID_POPUP_MOVE3D_UP );
|
||||
AddMenuItem( &PopUpMenu, ID_POPUP_MOVE3D_UP,
|
||||
_( "Move Up ^\tUp" ), KiBitmap( up_xpm ) );
|
||||
msg, KiBitmap( up_xpm ) );
|
||||
|
||||
msg = AddHotkeyName( _( "Move Down" ), GetHotkeyConfig(),
|
||||
ID_POPUP_MOVE3D_DOWN );
|
||||
AddMenuItem( &PopUpMenu, ID_POPUP_MOVE3D_DOWN,
|
||||
_( "Move Down\tDown" ), KiBitmap( down_xpm ) );
|
||||
msg, KiBitmap( down_xpm ) );
|
||||
|
||||
PopupMenu( &PopUpMenu, pos );
|
||||
}
|
||||
@@ -826,13 +865,13 @@ void EDA_3D_CANVAS::restart_editingTimeOut_Timer()
|
||||
|
||||
void EDA_3D_CANVAS::OnTimerTimeout_Redraw( wxTimerEvent &event )
|
||||
{
|
||||
(void)event;
|
||||
Request_refresh( true );
|
||||
}
|
||||
|
||||
//Refresh();
|
||||
//Update();
|
||||
|
||||
wxPaintEvent redrawEvent;
|
||||
wxPostEvent( this, redrawEvent );
|
||||
void EDA_3D_CANVAS::OnRefreshRequest( wxEvent& aEvent )
|
||||
{
|
||||
DoRePaint();
|
||||
}
|
||||
|
||||
|
||||
@@ -840,22 +879,12 @@ void EDA_3D_CANVAS::Request_refresh( bool aRedrawImmediately )
|
||||
{
|
||||
if( aRedrawImmediately )
|
||||
{
|
||||
// On some systems, just calling Refresh does not work always
|
||||
// (Issue experienced on Win7 MSYS2)
|
||||
//Refresh();
|
||||
//Update();
|
||||
|
||||
// Using PostEvent will take priority to other events, like
|
||||
// mouse movements, keys, etc.
|
||||
wxPaintEvent redrawEvent;
|
||||
// Just calling Refresh() does not work always
|
||||
// Using an event to call DoRepaint ensure the repaint code will be executed,
|
||||
// and PostEvent will take priority to other events like mouse movements, keys, etc.
|
||||
// and is executed during the next idle time
|
||||
wxCommandEvent redrawEvent( wxEVT_REFRESH_CUSTOM_COMMAND, ID_CUSTOM_EVENT_1 );
|
||||
wxPostEvent( this, redrawEvent );
|
||||
|
||||
// This behaves the same
|
||||
// wxQueueEvent( this,
|
||||
// From wxWidget documentation: "The heap-allocated and
|
||||
// non-NULL event to queue, the function takes ownership of it."
|
||||
// new wxPaintEvent()
|
||||
// );
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1055,7 +1084,10 @@ bool EDA_3D_CANVAS::SetView3D( int aKeycode )
|
||||
m_settings.CameraGet().SetT0_and_T1_current_T();
|
||||
m_settings.CameraGet().Reset_T1();
|
||||
m_settings.CameraGet().RotateX_T1( glm::radians( -90.0f ) );
|
||||
m_settings.CameraGet().RotateZ_T1( glm::radians( -180.0f ) );
|
||||
// The rotation angle should be 180.
|
||||
// We use 179.999 (180 - epsilon) to avoid a full 360 deg rotation when
|
||||
// using 180 deg if the previous rotated position was already 180 deg
|
||||
m_settings.CameraGet().RotateZ_T1( glm::radians( -179.999f ) );
|
||||
request_start_moving_camera();
|
||||
return true;
|
||||
|
||||
@@ -1071,7 +1103,7 @@ bool EDA_3D_CANVAS::SetView3D( int aKeycode )
|
||||
m_settings.CameraGet().SetInterpolateMode( INTERPOLATION_BEZIER );
|
||||
m_settings.CameraGet().SetT0_and_T1_current_T();
|
||||
m_settings.CameraGet().Reset_T1();
|
||||
m_settings.CameraGet().RotateY_T1( glm::radians( 180.0f ) );
|
||||
m_settings.CameraGet().RotateY_T1( glm::radians( 179.999f ) ); // Rotation = 180-epsilon
|
||||
request_start_moving_camera(
|
||||
glm::min( glm::max( m_settings.CameraGet().ZoomGet(), 0.5f ), 1.125f ) );
|
||||
return true;
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2015-2016 Mario Luzeiro <mrluzeiro@ua.pt>
|
||||
* Copyright (C) 1992-2019 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
* Copyright (C) 1992-2020 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
|
||||
@@ -128,12 +128,28 @@ class EDA_3D_CANVAS : public HIDPI_GL_CANVAS
|
||||
|
||||
bool IsOpenGLInitialized() const { return m_is_opengl_initialized; }
|
||||
|
||||
/**
|
||||
* Return a structure containing currently used hotkey mapping.
|
||||
*/
|
||||
EDA_HOTKEY_CONFIG* GetHotkeyConfig() const;
|
||||
|
||||
private:
|
||||
|
||||
void OnPaint( wxPaintEvent &event );
|
||||
/** Called by a wxPaintEvent event
|
||||
*/
|
||||
void OnPaint( wxPaintEvent& aEvent );
|
||||
|
||||
/**
|
||||
* The actual function to repaint the canvas.
|
||||
* It is usually called by OnPaint() but because it does not use a wxPaintDC
|
||||
* it can be called outside a wxPaintEvent
|
||||
*/
|
||||
void DoRePaint();
|
||||
|
||||
void OnEraseBackground( wxEraseEvent &event );
|
||||
|
||||
void OnRefreshRequest( wxEvent& aEvent );
|
||||
|
||||
void OnMouseWheel( wxMouseEvent &event );
|
||||
|
||||
#if wxCHECK_VERSION( 3, 1, 0 ) || defined( USE_OSX_MAGNIFY_EVENT )
|
||||
|
||||
@@ -745,7 +745,9 @@ void C3D_RENDER_OGL_LEGACY::generate_3D_Vias_and_Pads()
|
||||
// /////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// Insert vias holes (vertical cylinders)
|
||||
for( auto track : m_settings.GetBoard()->Tracks() )
|
||||
for( const TRACK* track = m_settings.GetBoard()->m_Track;
|
||||
track;
|
||||
track = track->Next() )
|
||||
{
|
||||
if( track->Type() == PCB_VIA_T )
|
||||
{
|
||||
@@ -798,9 +800,11 @@ void C3D_RENDER_OGL_LEGACY::generate_3D_Vias_and_Pads()
|
||||
tht_inner_holes_poly.RemoveAllContours();
|
||||
|
||||
// Insert pads holes (vertical cylinders)
|
||||
for( const auto module : m_settings.GetBoard()->Modules() )
|
||||
for( const MODULE* module = m_settings.GetBoard()->m_Modules;
|
||||
module;
|
||||
module = module->Next() )
|
||||
{
|
||||
for( auto pad : module->Pads() )
|
||||
for( const D_PAD* pad = module->PadsList(); pad; pad = pad->Next() )
|
||||
{
|
||||
if( pad->GetAttribute() != PAD_ATTRIB_HOLE_NOT_PLATED )
|
||||
{
|
||||
@@ -819,10 +823,13 @@ void C3D_RENDER_OGL_LEGACY::generate_3D_Vias_and_Pads()
|
||||
double correctionFactor = m_settings.GetCircleCorrectionFactor( nrSegments );
|
||||
int correction = radius * ( correctionFactor - 1 );
|
||||
|
||||
pad->BuildPadDrillShapePolygon(
|
||||
tht_outer_holes_poly, copperThickness + correction );
|
||||
pad->BuildPadDrillShapePolygon( tht_outer_holes_poly,
|
||||
copperThickness + correction,
|
||||
nrSegments );
|
||||
|
||||
pad->BuildPadDrillShapePolygon( tht_inner_holes_poly, correction );
|
||||
pad->BuildPadDrillShapePolygon( tht_inner_holes_poly,
|
||||
correction,
|
||||
nrSegments );
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -903,7 +910,8 @@ void C3D_RENDER_OGL_LEGACY::load_3D_models( REPORTER *aStatusTextReporter )
|
||||
return;
|
||||
|
||||
// Go for all modules
|
||||
for( auto module : m_settings.GetBoard()->Modules() )
|
||||
for( const MODULE* module = m_settings.GetBoard()->m_Modules;
|
||||
module; module = module->Next() )
|
||||
{
|
||||
if( !module->Models().empty() )
|
||||
{
|
||||
|
||||
@@ -198,6 +198,7 @@ void C3D_RENDER_OGL_LEGACY::setupMaterials()
|
||||
0.00f, 0.30f );
|
||||
|
||||
m_materials.m_Copper.m_Shininess = shininessfactor * 128.0f;
|
||||
m_materials.m_Copper.m_Emissive = SFVEC3F( 0.0f, 0.0f, 0.0f );
|
||||
|
||||
|
||||
// Paste material mixed with paste color
|
||||
@@ -213,6 +214,7 @@ void C3D_RENDER_OGL_LEGACY::setupMaterials()
|
||||
m_settings.m_SolderPasteColor.b );
|
||||
|
||||
m_materials.m_Paste.m_Shininess = 0.1f * 128.0f;
|
||||
m_materials.m_Paste.m_Emissive = SFVEC3F( 0.0f, 0.0f, 0.0f );
|
||||
|
||||
|
||||
// Silk screen material mixed with silk screen color
|
||||
@@ -228,6 +230,7 @@ void C3D_RENDER_OGL_LEGACY::setupMaterials()
|
||||
m_settings.m_SilkScreenColor.b + 0.10f );
|
||||
|
||||
m_materials.m_SilkS.m_Shininess = 0.078125f * 128.0f;
|
||||
m_materials.m_SilkS.m_Emissive = SFVEC3F( 0.0f, 0.0f, 0.0f );
|
||||
|
||||
|
||||
// Solder mask material mixed with solder mask color
|
||||
@@ -244,6 +247,7 @@ void C3D_RENDER_OGL_LEGACY::setupMaterials()
|
||||
|
||||
m_materials.m_SolderMask.m_Shininess = 0.8f * 128.0f;
|
||||
m_materials.m_SolderMask.m_Transparency = 0.17f;
|
||||
m_materials.m_SolderMask.m_Emissive = SFVEC3F( 0.0f, 0.0f, 0.0f );
|
||||
|
||||
|
||||
// Epoxy material
|
||||
@@ -258,6 +262,7 @@ void C3D_RENDER_OGL_LEGACY::setupMaterials()
|
||||
20.0f / 255.0f );
|
||||
|
||||
m_materials.m_EpoxyBoard.m_Shininess = 0.1f * 128.0f;
|
||||
m_materials.m_EpoxyBoard.m_Emissive = SFVEC3F( 0.0f, 0.0f, 0.0f );
|
||||
}
|
||||
else // Technical Mode
|
||||
{
|
||||
@@ -269,34 +274,40 @@ void C3D_RENDER_OGL_LEGACY::setupMaterials()
|
||||
m_materials.m_Copper.m_Ambient = matAmbientColor;
|
||||
m_materials.m_Copper.m_Specular = matSpecularColor;
|
||||
m_materials.m_Copper.m_Shininess = matShininess;
|
||||
m_materials.m_Copper.m_Emissive = SFVEC3F( 0.0f, 0.0f, 0.0f );
|
||||
|
||||
// Paste material
|
||||
m_materials.m_Paste.m_Ambient = matAmbientColor;
|
||||
m_materials.m_Paste.m_Specular = matSpecularColor;
|
||||
m_materials.m_Paste.m_Shininess = matShininess;
|
||||
m_materials.m_Paste.m_Emissive = SFVEC3F( 0.0f, 0.0f, 0.0f );
|
||||
|
||||
// Silk screen material
|
||||
m_materials.m_SilkS.m_Ambient = matAmbientColor;
|
||||
m_materials.m_SilkS.m_Specular = matSpecularColor;
|
||||
m_materials.m_SilkS.m_Shininess = matShininess;
|
||||
m_materials.m_SilkS.m_Emissive = SFVEC3F( 0.0f, 0.0f, 0.0f );
|
||||
|
||||
// Solder mask material
|
||||
m_materials.m_SolderMask.m_Ambient = matAmbientColor;
|
||||
m_materials.m_SolderMask.m_Specular = matSpecularColor;
|
||||
m_materials.m_SolderMask.m_Shininess = matShininess;
|
||||
m_materials.m_SolderMask.m_Transparency = 0.17f;
|
||||
m_materials.m_SolderMask.m_Emissive = SFVEC3F( 0.0f, 0.0f, 0.0f );
|
||||
|
||||
// Epoxy material
|
||||
m_materials.m_EpoxyBoard.m_Ambient = matAmbientColor;
|
||||
m_materials.m_EpoxyBoard.m_Diffuse = m_settings.m_BoardBodyColor;
|
||||
m_materials.m_EpoxyBoard.m_Specular = matSpecularColor;
|
||||
m_materials.m_EpoxyBoard.m_Shininess = matShininess;
|
||||
m_materials.m_EpoxyBoard.m_Emissive = SFVEC3F( 0.0f, 0.0f, 0.0f );
|
||||
|
||||
// Gray material (used for example in technical vias and pad holes)
|
||||
m_materials.m_GrayMaterial.m_Ambient = SFVEC3F( 0.8f, 0.8f, 0.8f );
|
||||
m_materials.m_GrayMaterial.m_Diffuse = SFVEC3F( 0.3f, 0.3f, 0.3f );
|
||||
m_materials.m_GrayMaterial.m_Specular = SFVEC3F( 0.4f, 0.4f, 0.4f );
|
||||
m_materials.m_GrayMaterial.m_Shininess = 0.01f * 128.0f;
|
||||
m_materials.m_GrayMaterial.m_Emissive = SFVEC3F( 0.0f, 0.0f, 0.0f );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -347,6 +358,7 @@ void C3D_RENDER_OGL_LEGACY::set_layer_material( PCB_LAYER_ID aLayerID )
|
||||
m_materials.m_Plastic.m_Diffuse.b * 0.7f );
|
||||
|
||||
m_materials.m_Plastic.m_Shininess = 0.078125f * 128.0f;
|
||||
m_materials.m_Plastic.m_Emissive = SFVEC3F( 0.0f, 0.0f, 0.0f );
|
||||
OGL_SetMaterial( m_materials.m_Plastic );
|
||||
break;
|
||||
|
||||
@@ -472,7 +484,7 @@ bool C3D_RENDER_OGL_LEGACY::Redraw( bool aIsMoving,
|
||||
|
||||
if( m_reloadRequested )
|
||||
{
|
||||
std::unique_ptr<BUSY_INDICATOR> busy = CreateBusyIndicator();
|
||||
wxBusyCursor dummy;
|
||||
|
||||
if( aStatusTextReporter )
|
||||
aStatusTextReporter->Report( _( "Loading..." ) );
|
||||
@@ -980,13 +992,18 @@ void C3D_RENDER_OGL_LEGACY::render_3D_models( bool aRenderTopOrBot,
|
||||
bool aRenderTransparentOnly )
|
||||
{
|
||||
// Go for all modules
|
||||
for( auto module : m_settings.GetBoard()->Modules() )
|
||||
if( m_settings.GetBoard()->m_Modules.GetCount() )
|
||||
{
|
||||
if( !module->Models().empty() )
|
||||
if( m_settings.ShouldModuleBeDisplayed( (MODULE_ATTR_T) module->GetAttributes() ) )
|
||||
if( ( aRenderTopOrBot && !module->IsFlipped() )
|
||||
|| ( !aRenderTopOrBot && module->IsFlipped() ) )
|
||||
render_3D_module( module, aRenderTransparentOnly );
|
||||
for( const MODULE* module = m_settings.GetBoard()->m_Modules;
|
||||
module;
|
||||
module = module->Next() )
|
||||
{
|
||||
if( !module->Models().empty() )
|
||||
if( m_settings.ShouldModuleBeDisplayed( (MODULE_ATTR_T)module->GetAttributes() ) )
|
||||
if( ( aRenderTopOrBot && !module->IsFlipped()) ||
|
||||
(!aRenderTopOrBot && module->IsFlipped()) )
|
||||
render_3D_module( module, aRenderTransparentOnly );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -286,7 +286,9 @@ void C3D_RENDER_RAYTRACING::reload( REPORTER *aStatusTextReporter )
|
||||
|
||||
m_outlineBoard2dObjects = new CCONTAINER2D;
|
||||
|
||||
if( ((const SHAPE_POLY_SET &)m_settings.GetBoardPoly()).OutlineCount() == 1 )
|
||||
const int outlineCount = m_settings.GetBoardPoly().OutlineCount();
|
||||
|
||||
if( outlineCount > 0 )
|
||||
{
|
||||
float divFactor = 0.0f;
|
||||
|
||||
@@ -299,12 +301,16 @@ void C3D_RENDER_RAYTRACING::reload( REPORTER *aStatusTextReporter )
|
||||
SHAPE_POLY_SET boardPolyCopy = m_settings.GetBoardPoly();
|
||||
boardPolyCopy.Fracture( SHAPE_POLY_SET::PM_FAST );
|
||||
|
||||
Convert_path_polygon_to_polygon_blocks_and_dummy_blocks(
|
||||
boardPolyCopy,
|
||||
*m_outlineBoard2dObjects,
|
||||
m_settings.BiuTo3Dunits(),
|
||||
divFactor,
|
||||
(const BOARD_ITEM &)*m_settings.GetBoard() );
|
||||
for( int iOutlinePolyIdx = 0; iOutlinePolyIdx < outlineCount; iOutlinePolyIdx++ )
|
||||
{
|
||||
Convert_path_polygon_to_polygon_blocks_and_dummy_blocks(
|
||||
boardPolyCopy,
|
||||
*m_outlineBoard2dObjects,
|
||||
m_settings.BiuTo3Dunits(),
|
||||
divFactor,
|
||||
*dynamic_cast<const BOARD_ITEM*>( m_settings.GetBoard() ),
|
||||
iOutlinePolyIdx );
|
||||
}
|
||||
|
||||
if( m_settings.GetFlag( FL_SHOW_BOARD_BODY ) )
|
||||
{
|
||||
@@ -443,6 +449,10 @@ void C3D_RENDER_RAYTRACING::reload( REPORTER *aStatusTextReporter )
|
||||
++ii )
|
||||
{
|
||||
PCB_LAYER_ID layer_id = static_cast<PCB_LAYER_ID>(ii->first);
|
||||
const CBVHCONTAINER2D *container2d = static_cast<const CBVHCONTAINER2D *>(ii->second);
|
||||
|
||||
if( !container2d )
|
||||
continue;
|
||||
|
||||
// Mask kayers are not processed here because they are a special case
|
||||
if( (layer_id == B_Mask) || (layer_id == F_Mask) )
|
||||
@@ -503,7 +513,6 @@ void C3D_RENDER_RAYTRACING::reload( REPORTER *aStatusTextReporter )
|
||||
break;
|
||||
}
|
||||
|
||||
const CBVHCONTAINER2D *container2d = static_cast<const CBVHCONTAINER2D *>(ii->second);
|
||||
const LIST_OBJECT2D &listObject2d = container2d->GetList();
|
||||
|
||||
for( LIST_OBJECT2D::const_iterator itemOnLayer = listObject2d.begin();
|
||||
@@ -649,6 +658,9 @@ void C3D_RENDER_RAYTRACING::reload( REPORTER *aStatusTextReporter )
|
||||
const CBVHCONTAINER2D *containerLayer2d =
|
||||
static_cast<const CBVHCONTAINER2D *>(ii->second);
|
||||
|
||||
if( !containerLayer2d )
|
||||
continue;
|
||||
|
||||
// Only get the Solder mask layers
|
||||
if( !((layer_id == B_Mask) || (layer_id == F_Mask)) )
|
||||
continue;
|
||||
@@ -1076,7 +1088,7 @@ void C3D_RENDER_RAYTRACING::insert3DPadHole( const D_PAD* aPad )
|
||||
width * m_settings.BiuTo3Dunits(),
|
||||
*aPad );
|
||||
|
||||
CROUNDSEGMENT2D *outerSeg = new CROUNDSEGMENT2D(
|
||||
CROUNDSEGMENT2D *outterSeg = new CROUNDSEGMENT2D(
|
||||
SFVEC2F( start.x * m_settings.BiuTo3Dunits(),
|
||||
-start.y * m_settings.BiuTo3Dunits() ),
|
||||
SFVEC2F( end.x * m_settings.BiuTo3Dunits(),
|
||||
@@ -1090,14 +1102,14 @@ void C3D_RENDER_RAYTRACING::insert3DPadHole( const D_PAD* aPad )
|
||||
std::vector<const COBJECT2D *> *object2d_B = new std::vector<const COBJECT2D *>();
|
||||
object2d_B->push_back( innerSeg );
|
||||
|
||||
CITEMLAYERCSG2D *itemCSG2d = new CITEMLAYERCSG2D( outerSeg,
|
||||
CITEMLAYERCSG2D *itemCSG2d = new CITEMLAYERCSG2D( outterSeg,
|
||||
object2d_B,
|
||||
CSGITEM_FULL,
|
||||
*aPad );
|
||||
|
||||
m_containerWithObjectsToDelete.Add( itemCSG2d );
|
||||
m_containerWithObjectsToDelete.Add( innerSeg );
|
||||
m_containerWithObjectsToDelete.Add( outerSeg );
|
||||
m_containerWithObjectsToDelete.Add( outterSeg );
|
||||
|
||||
object2d_A = itemCSG2d;
|
||||
}
|
||||
@@ -1171,7 +1183,9 @@ void C3D_RENDER_RAYTRACING::add_3D_vias_and_pads_to_container()
|
||||
// /////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// Insert vias holes (vertical cylinders)
|
||||
for( auto track : m_settings.GetBoard()->Tracks() )
|
||||
for( const TRACK* track = m_settings.GetBoard()->m_Track;
|
||||
track;
|
||||
track = track->Next() )
|
||||
{
|
||||
if( track->Type() == PCB_VIA_T )
|
||||
{
|
||||
@@ -1181,9 +1195,11 @@ void C3D_RENDER_RAYTRACING::add_3D_vias_and_pads_to_container()
|
||||
}
|
||||
|
||||
// Insert pads holes (vertical cylinders)
|
||||
for( auto module : m_settings.GetBoard()->Modules() )
|
||||
for( const MODULE* module = m_settings.GetBoard()->m_Modules;
|
||||
module;
|
||||
module = module->Next() )
|
||||
{
|
||||
for( auto pad : module->Pads() )
|
||||
for( const D_PAD* pad = module->PadsList(); pad; pad = pad->Next() )
|
||||
if( pad->GetAttribute () != PAD_ATTRIB_HOLE_NOT_PLATED )
|
||||
{
|
||||
insert3DPadHole( pad );
|
||||
@@ -1195,7 +1211,9 @@ void C3D_RENDER_RAYTRACING::add_3D_vias_and_pads_to_container()
|
||||
void C3D_RENDER_RAYTRACING::load_3D_models()
|
||||
{
|
||||
// Go for all modules
|
||||
for( auto module : m_settings.GetBoard()->Modules() )
|
||||
for( const MODULE* module = m_settings.GetBoard()->m_Modules;
|
||||
module;
|
||||
module = module->Next() )
|
||||
{
|
||||
if( (!module->Models().empty() ) &&
|
||||
m_settings.ShouldModuleBeDisplayed( (MODULE_ATTR_T)module->GetAttributes() ) )
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/*
|
||||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2015-2016 Mario Luzeiro <mrluzeiro@ua.pt>
|
||||
@@ -167,7 +167,7 @@ bool C3D_RENDER_RAYTRACING::Redraw( bool aIsMoving, REPORTER *aStatusTextReporte
|
||||
initialize_block_positions();
|
||||
}
|
||||
|
||||
std::unique_ptr<BUSY_INDICATOR> busy = CreateBusyIndicator();
|
||||
wxBusyCursor dummy;
|
||||
|
||||
// Reload board if it was requested
|
||||
// /////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -109,9 +109,9 @@ public:
|
||||
float *aOutT,
|
||||
SFVEC2F *aNormalOut ) const = 0;
|
||||
|
||||
/**
|
||||
* Function IsBBoxInside
|
||||
* @brief Tests if the bounding is out, intersects or is complety inside
|
||||
/** Function IsBBoxInside
|
||||
* @brief Tests if the bouding is out, intersects or is complety inside
|
||||
* @param aBBox - The bounding box to test
|
||||
* @return INTERSECTION_RESULT
|
||||
*/
|
||||
virtual INTERSECTION_RESULT IsBBoxInside( const CBBOX2D &aBBox ) const = 0;
|
||||
|
||||
@@ -408,17 +408,16 @@ void Convert_path_polygon_to_polygon_blocks_and_dummy_blocks(
|
||||
CGENERICCONTAINER2D &aDstContainer,
|
||||
float aBiuTo3DunitsScale,
|
||||
float aDivFactor,
|
||||
const BOARD_ITEM &aBoardItem )
|
||||
const BOARD_ITEM &aBoardItem,
|
||||
int aPolyIndex )
|
||||
{
|
||||
BOX2I pathBounds = aMainPath.BBox();
|
||||
|
||||
// Get the path
|
||||
|
||||
wxASSERT( aMainPath.OutlineCount() == 1 );
|
||||
const SHAPE_POLY_SET::POLYGON& curr_polywithholes = aMainPath.CPolygon( 0 );
|
||||
wxASSERT( aPolyIndex < aMainPath.OutlineCount() );
|
||||
|
||||
wxASSERT( curr_polywithholes.size() == 1 );
|
||||
const SHAPE_LINE_CHAIN& path = curr_polywithholes[0]; // a simple polygon
|
||||
const SHAPE_LINE_CHAIN& path = aMainPath.COutline( aPolyIndex );
|
||||
|
||||
BOX2I pathBounds = path.BBox();
|
||||
|
||||
// Convert the points to segments class
|
||||
CBBOX2D bbox;
|
||||
@@ -430,8 +429,10 @@ void Convert_path_polygon_to_polygon_blocks_and_dummy_blocks(
|
||||
// Contains a closed polygon used to calc if points are inside
|
||||
SEGMENTS segments;
|
||||
|
||||
segments_and_normals.resize( path.PointCount() );
|
||||
segments.resize( path.PointCount() );
|
||||
segments_and_normals.reserve( path.PointCount() );
|
||||
segments.reserve( path.PointCount() );
|
||||
|
||||
SFVEC2F prevPoint;
|
||||
|
||||
for( int i = 0; i < path.PointCount(); i++ )
|
||||
{
|
||||
@@ -440,9 +441,23 @@ void Convert_path_polygon_to_polygon_blocks_and_dummy_blocks(
|
||||
const SFVEC2F point ( (float)( a.x) * aBiuTo3DunitsScale,
|
||||
(float)(-a.y) * aBiuTo3DunitsScale );
|
||||
|
||||
bbox.Union( point );
|
||||
segments_and_normals[i].m_Start = point;
|
||||
segments[i].m_Start = point;
|
||||
// Only add points that are not coincident
|
||||
if( (i == 0) ||
|
||||
(fabs(prevPoint.x - point.x) > FLT_EPSILON) ||
|
||||
(fabs(prevPoint.y - point.y) > FLT_EPSILON) )
|
||||
{
|
||||
prevPoint = point;
|
||||
|
||||
bbox.Union( point );
|
||||
|
||||
SEGMENT_WITH_NORMALS sn;
|
||||
sn.m_Start = point;
|
||||
segments_and_normals.push_back( sn );
|
||||
|
||||
POLYSEGMENT ps;
|
||||
ps.m_Start = point;
|
||||
segments.push_back( ps );
|
||||
}
|
||||
}
|
||||
|
||||
bbox.ScaleNextUp();
|
||||
@@ -518,13 +533,13 @@ void Convert_path_polygon_to_polygon_blocks_and_dummy_blocks(
|
||||
segments_and_normals[i].m_Normals.m_Start = normalSeg;
|
||||
else
|
||||
segments_and_normals[i].m_Normals.m_Start =
|
||||
glm::normalize( (((normalBeforeSeg * dotBefore ) + normalSeg) * 0.5f) );
|
||||
glm::normalize( (normalBeforeSeg * dotBefore ) + normalSeg );
|
||||
|
||||
if( dotAfter < 0.7f )
|
||||
segments_and_normals[i].m_Normals.m_End = normalSeg;
|
||||
else
|
||||
segments_and_normals[i].m_Normals.m_End =
|
||||
glm::normalize( (((normalAfterSeg * dotAfter ) + normalSeg) * 0.5f) );
|
||||
glm::normalize( (normalAfterSeg * dotAfter ) + normalSeg );
|
||||
}
|
||||
|
||||
if( aDivFactor == 0.0f )
|
||||
@@ -751,7 +766,7 @@ void Polygon2d_TestModule()
|
||||
aPath[2] = ClipperLib::IntPoint( 2, 2 );
|
||||
aPath[3] = ClipperLib::IntPoint( -2, 2 );
|
||||
|
||||
// It must be an outer polygon
|
||||
// It must be an outter polygon
|
||||
wxASSERT( ClipperLib::Orientation( aPath ) );
|
||||
|
||||
polygon_Convert( aPath, aSegments, 1.0f );
|
||||
|
||||
@@ -86,7 +86,7 @@ typedef struct
|
||||
class CPOLYGONBLOCK2D : public COBJECT2D
|
||||
{
|
||||
private:
|
||||
/// This is the outer part of the polygon. This list is used to test a ray
|
||||
/// This is the outter part of the polygon. This list is used to test a ray
|
||||
/// intersection with the boundaries of this sub polygon.
|
||||
/// It contains also the interpolated normals that are passed from the main
|
||||
/// polygon.
|
||||
@@ -148,7 +148,8 @@ void Convert_path_polygon_to_polygon_blocks_and_dummy_blocks(
|
||||
CGENERICCONTAINER2D &aDstContainer,
|
||||
float aBiuTo3DunitsScale,
|
||||
float aDivFactor,
|
||||
const BOARD_ITEM &aBoardItem );
|
||||
const BOARD_ITEM &aBoardItem,
|
||||
int aPolyIndex );
|
||||
|
||||
void Polygon2d_TestModule();
|
||||
|
||||
|
||||
@@ -88,7 +88,7 @@ bool CPOLYGON4PTS2D::Intersects( const CBBOX2D &aBBox ) const
|
||||
if( !m_bbox.Intersects( aBBox ) )
|
||||
return false;
|
||||
|
||||
// Check if the bounding box complety have inside the small bounding box
|
||||
// Check if the bouding box complety have inside the small bouding box
|
||||
if( (aBBox.Max().x > m_bbox.Max().x) &&
|
||||
(aBBox.Max().y > m_bbox.Max().x) &&
|
||||
(aBBox.Min().x < m_bbox.Min().x) &&
|
||||
|
||||
@@ -87,15 +87,15 @@ bool CRING2D::Intersect( const RAYSEG2D &aSegRay,
|
||||
// dd*t^2 + (2*qd)*t + (qq-r^2) = 0
|
||||
|
||||
const float discriminantsqr = qd * qd - qq;
|
||||
const float discriminantsqr_outer = discriminantsqr + m_outer_radius_squared;
|
||||
const float discriminantsqr_outter = discriminantsqr + m_outer_radius_squared;
|
||||
|
||||
// If the discriminant is less than zero, there is no intersection
|
||||
if( discriminantsqr_outer < FLT_EPSILON )
|
||||
if( discriminantsqr_outter < FLT_EPSILON )
|
||||
return false;
|
||||
|
||||
// Otherwise check and make sure that the intersections occur on the ray (t
|
||||
// > 0) and return the closer one
|
||||
const float discriminant = sqrt( discriminantsqr_outer );
|
||||
const float discriminant = sqrt( discriminantsqr_outter );
|
||||
float t = (-qd - discriminant);
|
||||
|
||||
if( (t > FLT_EPSILON) && (t < aSegRay.m_Length) )
|
||||
|
||||
@@ -83,7 +83,7 @@ public:
|
||||
CROUNDSEG( const SFVEC2F &aStart,
|
||||
const SFVEC2F &aEnd,
|
||||
float aInnerRadius,
|
||||
float aOuterRadius,
|
||||
float aOutterRadius,
|
||||
float aZmin,
|
||||
float aZmax );
|
||||
|
||||
@@ -102,9 +102,9 @@ private:
|
||||
float m_inner_radius;
|
||||
float m_inner_radius_squared;
|
||||
float m_inner_inv_radius;
|
||||
float m_outer_radius;
|
||||
float m_outer_radius_squared;
|
||||
float m_outer_inv_radius;
|
||||
float m_outter_radius;
|
||||
float m_outter_radius_squared;
|
||||
float m_outter_inv_radius;
|
||||
float m_width;
|
||||
float m_seglen_over_two_squared;
|
||||
};
|
||||
|
||||
@@ -54,19 +54,3 @@ C3D_RENDER_BASE::~C3D_RENDER_BASE()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void C3D_RENDER_BASE::SetBusyIndicatorFactory( BUSY_INDICATOR::FACTORY aNewFactory )
|
||||
{
|
||||
m_busyIndicatorFactory = aNewFactory;
|
||||
}
|
||||
|
||||
|
||||
std::unique_ptr<BUSY_INDICATOR> C3D_RENDER_BASE::CreateBusyIndicator() const
|
||||
{
|
||||
std::unique_ptr<BUSY_INDICATOR> busy;
|
||||
|
||||
if( m_busyIndicatorFactory )
|
||||
busy = m_busyIndicatorFactory();
|
||||
|
||||
return busy;
|
||||
}
|
||||
|
||||
@@ -35,8 +35,6 @@
|
||||
#include "../3d_canvas/cinfo3d_visu.h"
|
||||
#include <reporter.h>
|
||||
|
||||
#include <widgets/busy_indicator.h>
|
||||
|
||||
/**
|
||||
* This is a base class to hold data and functions for render targets.
|
||||
*/
|
||||
@@ -88,22 +86,9 @@ public:
|
||||
*/
|
||||
virtual int GetWaitForEditingTimeOut() = 0;
|
||||
|
||||
/**
|
||||
* Set a new busy indicator factory.
|
||||
*
|
||||
* When set, this factory will be used to generate busy indicators when
|
||||
* suitable. If not set, no busy indicator will be used.
|
||||
*/
|
||||
void SetBusyIndicatorFactory( BUSY_INDICATOR::FACTORY aNewFactory );
|
||||
|
||||
// Attributes
|
||||
|
||||
protected:
|
||||
/**
|
||||
* Return a created busy indicator, if a factory has been set, else
|
||||
* a null pointer.
|
||||
*/
|
||||
std::unique_ptr<BUSY_INDICATOR> CreateBusyIndicator() const;
|
||||
|
||||
/// settings refrence in use for this render
|
||||
CINFO3D_VISU &m_settings;
|
||||
@@ -124,10 +109,6 @@ protected:
|
||||
* more information.
|
||||
*/
|
||||
static const wxChar *m_logTrace;
|
||||
|
||||
private:
|
||||
/// Factory that returns a suitable busy indicator for the context.
|
||||
BUSY_INDICATOR::FACTORY m_busyIndicatorFactory;
|
||||
};
|
||||
|
||||
#endif // C3D_RENDER_BASE_H
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2015-2016 Mario Luzeiro <mrluzeiro@ua.pt>
|
||||
* Copyright (C) 1992-2017 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
* Copyright (C) 1992-2019 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
|
||||
@@ -31,6 +31,17 @@
|
||||
#include <wx/log.h>
|
||||
|
||||
|
||||
// A helper function to normalize aAngle between -2PI and +2PI
|
||||
inline void normalise2PI( float& aAngle )
|
||||
{
|
||||
while( aAngle > 0.0 )
|
||||
aAngle -= M_PI*2;
|
||||
|
||||
while( aAngle < 0.0 )
|
||||
aAngle += M_PI*2;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Trace mask used to enable or disable the trace output of this class.
|
||||
* The debug output can be turned on by setting the WXTRACE environment variable to
|
||||
@@ -95,6 +106,20 @@ void CCAMERA::Reset_T1()
|
||||
m_zoom_t1 = 1.0f;
|
||||
m_rotate_aux_t1 = SFVEC3F( 0.0f );
|
||||
m_lookat_pos_t1 = m_board_lookat_pos_init;
|
||||
|
||||
|
||||
// Since 0 = 2pi, we want to reset the angle to be the closest
|
||||
// one to where we currently are. That ensures that we rotate
|
||||
// the board around the smallest distance getting there.
|
||||
if( m_rotate_aux_t0.x > M_PI )
|
||||
m_rotate_aux_t1.x = 2*M_PI;
|
||||
|
||||
if( m_rotate_aux_t0.y > M_PI )
|
||||
m_rotate_aux_t1.y = 2*M_PI;
|
||||
|
||||
if( m_rotate_aux_t0.z > M_PI )
|
||||
m_rotate_aux_t1.z = 2*M_PI;
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -111,14 +136,17 @@ void CCAMERA::updateRotationMatrix()
|
||||
m_rotationMatrixAux = glm::rotate( glm::mat4( 1.0f ),
|
||||
m_rotate_aux.x,
|
||||
SFVEC3F( 1.0f, 0.0f, 0.0f ) );
|
||||
normalise2PI( m_rotate_aux.x );
|
||||
|
||||
m_rotationMatrixAux = glm::rotate( m_rotationMatrixAux,
|
||||
m_rotate_aux.y,
|
||||
SFVEC3F( 0.0f, 1.0f, 0.0f ) );
|
||||
normalise2PI( m_rotate_aux.y );
|
||||
|
||||
m_rotationMatrixAux = glm::rotate( m_rotationMatrixAux,
|
||||
m_rotate_aux.z,
|
||||
SFVEC3F( 0.0f, 0.0f, 1.0f ) );
|
||||
normalise2PI( m_rotate_aux.z );
|
||||
|
||||
m_parametersChanged = true;
|
||||
|
||||
@@ -163,7 +191,7 @@ void CCAMERA::rebuildProjection()
|
||||
|
||||
m_projectionMatrixInv = glm::inverse( m_projectionMatrix );
|
||||
|
||||
m_frustum.tang = glm::tan( glm::radians( m_frustum.angle ) * 0.5f ) ;
|
||||
m_frustum.tang = glm::tan( glm::radians( m_frustum.angle ) * 0.5f );
|
||||
|
||||
m_focalLen.x = ( (float)m_windowSize.y / (float)m_windowSize.x ) / m_frustum.tang;
|
||||
m_focalLen.y = 1.0f / m_frustum.tang;
|
||||
@@ -178,19 +206,21 @@ void CCAMERA::rebuildProjection()
|
||||
|
||||
m_frustum.nearD = -m_frustum.farD; // Use a symmetrical clip plane for ortho projection
|
||||
|
||||
const float orthoReductionFactor = m_zoom / 75.0f;
|
||||
// This formula was found by trial and error
|
||||
const float orthoReductionFactor = glm::length( m_camera_pos_init ) *
|
||||
m_zoom * m_zoom * 0.5f;
|
||||
|
||||
// Initialize Projection Matrix for Ortographic View
|
||||
m_projectionMatrix = glm::ortho( -m_windowSize.x * orthoReductionFactor,
|
||||
m_windowSize.x * orthoReductionFactor,
|
||||
-m_windowSize.y * orthoReductionFactor,
|
||||
m_windowSize.y * orthoReductionFactor,
|
||||
m_projectionMatrix = glm::ortho( -m_frustum.ratio * orthoReductionFactor,
|
||||
m_frustum.ratio * orthoReductionFactor,
|
||||
-orthoReductionFactor,
|
||||
orthoReductionFactor,
|
||||
m_frustum.nearD, m_frustum.farD );
|
||||
|
||||
m_projectionMatrixInv = glm::inverse( m_projectionMatrix );
|
||||
|
||||
m_frustum.nw = m_windowSize.x * orthoReductionFactor * 2.0f;
|
||||
m_frustum.nh = m_windowSize.y * orthoReductionFactor * 2.0f;
|
||||
m_frustum.nw = orthoReductionFactor * 2.0f * m_frustum.ratio;
|
||||
m_frustum.nh = orthoReductionFactor * 2.0f;
|
||||
m_frustum.fw = m_frustum.nw;
|
||||
m_frustum.fh = m_frustum.nh;
|
||||
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2015-2016 Mario Luzeiro <mrluzeiro@ua.pt>
|
||||
* Copyright (C) 2014 Jean-Pierre Charras, jp.charras at wanadoo.fr
|
||||
* Copyright (C) 2011 Wayne Stambaugh <stambaughw@verizon.net>
|
||||
* Copyright (C) 1992-2016 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_viewer.h
|
||||
* @brief Declaration of the eda_3d_viewer class
|
||||
*/
|
||||
|
||||
#ifndef _3D_VIEWER_H_
|
||||
#define _3D_VIEWER_H_
|
||||
|
||||
|
||||
/// A variable name whose value holds the path of 3D shape files.
|
||||
/// Currently an environment variable, eventually a project variable.
|
||||
#define KISYS3DMOD wxT( "KISYS3DMOD" )
|
||||
|
||||
/// All 3D files are expected to be stored in LIB3D_FOLDER, or one of
|
||||
/// its subdirectory.
|
||||
#define LIB3D_FOLDER wxT( "packages3d" )
|
||||
|
||||
|
||||
#endif // _3D_VIEWER_H_
|
||||
@@ -1,129 +0,0 @@
|
||||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2017 Jon Evans <jon@craftyjon.com>
|
||||
* Copyright (C) 2017-2019 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 3 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, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <tool/tool_manager.h>
|
||||
#include <bitmaps.h>
|
||||
#include "3d_actions.h"
|
||||
|
||||
|
||||
// Actions, being statically-defined, require specialized I18N handling. We continue to
|
||||
// use the _() macro so that string harvesting by the I18N framework doesn't have to be
|
||||
// specialized, but we don't translate on initialization and instead do it in the getters.
|
||||
|
||||
#undef _
|
||||
#define _(s) s
|
||||
|
||||
|
||||
TOOL_ACTION EDA_3D_ACTIONS::pivotCenter( "3DViewer.Control.pivotCenter",
|
||||
AS_GLOBAL,
|
||||
' ', "",
|
||||
"Center pivot rotation (Middle mouse click)" );
|
||||
|
||||
TOOL_ACTION EDA_3D_ACTIONS::moveLeft( "3DViewer.Control.moveLeft",
|
||||
AS_GLOBAL,
|
||||
WXK_LEFT, "",
|
||||
"Move board Left" );
|
||||
|
||||
TOOL_ACTION EDA_3D_ACTIONS::moveRight( "3DViewer.Control.moveRight",
|
||||
AS_GLOBAL,
|
||||
WXK_RIGHT, "",
|
||||
"Move board Right" );
|
||||
|
||||
TOOL_ACTION EDA_3D_ACTIONS::moveUp( "3DViewer.Control.moveUp",
|
||||
AS_GLOBAL,
|
||||
WXK_UP, "",
|
||||
"Move board Up" );
|
||||
|
||||
TOOL_ACTION EDA_3D_ACTIONS::moveDown( "3DViewer.Control.moveDown",
|
||||
AS_GLOBAL,
|
||||
WXK_DOWN, "",
|
||||
"Move board Down" );
|
||||
|
||||
TOOL_ACTION EDA_3D_ACTIONS::homeView( "3DViewer.Control.homeView",
|
||||
AS_GLOBAL,
|
||||
WXK_HOME, "",
|
||||
"Home view" );
|
||||
|
||||
TOOL_ACTION EDA_3D_ACTIONS::resetView( "3DViewer.Control.resetView",
|
||||
AS_GLOBAL,
|
||||
'R', "",
|
||||
"Reset view" );
|
||||
|
||||
TOOL_ACTION EDA_3D_ACTIONS::viewFront( "3DViewer.Control.viewFront",
|
||||
AS_GLOBAL,
|
||||
'Y', "",
|
||||
"View Front" );
|
||||
|
||||
TOOL_ACTION EDA_3D_ACTIONS::viewBack( "3DViewer.Control.viewBack",
|
||||
AS_GLOBAL,
|
||||
MD_SHIFT + 'Y', "",
|
||||
"View Back" );
|
||||
|
||||
TOOL_ACTION EDA_3D_ACTIONS::viewLeft( "3DViewer.Control.viewLeft",
|
||||
AS_GLOBAL,
|
||||
MD_SHIFT + 'X', "",
|
||||
"View Left" );
|
||||
|
||||
TOOL_ACTION EDA_3D_ACTIONS::viewRight( "3DViewer.Control.viewRight",
|
||||
AS_GLOBAL,
|
||||
'X', "",
|
||||
"View Right" );
|
||||
|
||||
TOOL_ACTION EDA_3D_ACTIONS::viewTop( "3DViewer.Control.viewTop",
|
||||
AS_GLOBAL,
|
||||
'Z', "",
|
||||
"View Top" );
|
||||
|
||||
TOOL_ACTION EDA_3D_ACTIONS::viewBottom( "3DViewer.Control.viewBottom",
|
||||
AS_GLOBAL,
|
||||
MD_SHIFT + 'Z', "",
|
||||
"View Bottom" );
|
||||
|
||||
TOOL_ACTION EDA_3D_ACTIONS::rotate45axisZ( "3DViewer.Control.rotate45axisZ",
|
||||
AS_GLOBAL,
|
||||
WXK_TAB, "",
|
||||
"Rotate 45 degrees over Z axis" );
|
||||
|
||||
TOOL_ACTION EDA_3D_ACTIONS::zoomIn( "3DViewer.Control.zoomIn",
|
||||
AS_GLOBAL,
|
||||
WXK_F1, "",
|
||||
"Zoom in " );
|
||||
|
||||
TOOL_ACTION EDA_3D_ACTIONS::zoomOut( "3DViewer.Control.zoomOut",
|
||||
AS_GLOBAL,
|
||||
WXK_F2, "",
|
||||
"Zoom out" );
|
||||
|
||||
TOOL_ACTION EDA_3D_ACTIONS::attributesTHT( "3DViewer.Control.attributesTHT",
|
||||
AS_GLOBAL,
|
||||
'T', "",
|
||||
"Toggle 3D models with type Through Hole" );
|
||||
|
||||
TOOL_ACTION EDA_3D_ACTIONS::attributesSMD( "3DViewer.Control.attributesSMD",
|
||||
AS_GLOBAL,
|
||||
'S', "",
|
||||
"Toggle 3D models with type Surface Mount" );
|
||||
|
||||
TOOL_ACTION EDA_3D_ACTIONS::attributesVirtual( "3DViewer.Control.attributesVirtual",
|
||||
AS_GLOBAL,
|
||||
'V', "",
|
||||
"Toggle 3D models with type Virtual" );
|
||||
|
||||
|
||||
@@ -1,70 +0,0 @@
|
||||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2013-2016 CERN
|
||||
* Copyright (C) 2018 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
* @author Maciej Suminski <maciej.suminski@cern.ch>
|
||||
*
|
||||
* 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
|
||||
*/
|
||||
|
||||
#ifndef EDA_3D_ACTIONS_H
|
||||
#define EDA_3D_ACTIONS_H
|
||||
|
||||
#include <tool/tool_action.h>
|
||||
#include <tool/actions.h>
|
||||
#include <core/optional.h>
|
||||
|
||||
class TOOL_EVENT;
|
||||
class TOOL_MANAGER;
|
||||
|
||||
/**
|
||||
* Class EDA_3D_ACTIONS
|
||||
*
|
||||
* Note: these aren't "real" actions; we just use them to see the hotkeys display.
|
||||
*/
|
||||
class EDA_3D_ACTIONS : public ACTIONS
|
||||
{
|
||||
public:
|
||||
static TOOL_ACTION pivotCenter;
|
||||
static TOOL_ACTION moveLeft;
|
||||
static TOOL_ACTION moveRight;
|
||||
static TOOL_ACTION moveUp;
|
||||
static TOOL_ACTION moveDown;
|
||||
static TOOL_ACTION homeView;
|
||||
static TOOL_ACTION resetView;
|
||||
|
||||
static TOOL_ACTION viewFront;
|
||||
static TOOL_ACTION viewBack;
|
||||
static TOOL_ACTION viewLeft;
|
||||
static TOOL_ACTION viewRight;
|
||||
static TOOL_ACTION viewTop;
|
||||
static TOOL_ACTION viewBottom;
|
||||
|
||||
static TOOL_ACTION rotate45axisZ;
|
||||
static TOOL_ACTION zoomIn;
|
||||
static TOOL_ACTION zoomOut;
|
||||
static TOOL_ACTION attributesTHT;
|
||||
static TOOL_ACTION attributesSMD;
|
||||
static TOOL_ACTION attributesVirtual;
|
||||
|
||||
///> @copydoc COMMON_ACTIONS::TranslateLegacyId()
|
||||
virtual OPT<TOOL_EVENT> TranslateLegacyId( int aId ) override { return OPT<TOOL_EVENT>(); }
|
||||
};
|
||||
|
||||
#endif
|
||||
+249
-261
@@ -24,319 +24,307 @@
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file 3d_menubar.cpp
|
||||
*/
|
||||
|
||||
#include <fctsys.h>
|
||||
#include <tool/conditional_menu.h>
|
||||
|
||||
#include <eda_3d_viewer.h>
|
||||
#include <3d_canvas/cinfo3d_visu.h>
|
||||
#include <menus_helpers.h>
|
||||
#include <3d_viewer_id.h>
|
||||
#include <3d_actions.h>
|
||||
#include <tool/tool_manager.h>
|
||||
#include <tool/common_control.h>
|
||||
#include "help_common_strings.h"
|
||||
|
||||
|
||||
void EDA_3D_VIEWER::CreateMenuBar()
|
||||
{
|
||||
wxLogTrace( m_logTrace, "EDA_3D_VIEWER::CreateMenuBar" );
|
||||
|
||||
COMMON_CONTROL* tool = m_toolManager->GetTool<COMMON_CONTROL>();
|
||||
wxMenuBar* menuBar = new wxMenuBar;
|
||||
wxMenu* fileMenu = new wxMenu;
|
||||
wxMenu* editMenu = new wxMenu;
|
||||
wxMenu* viewMenu = new wxMenu;
|
||||
wxMenu* prefsMenu = new wxMenu;
|
||||
wxMenu* helpMenu = new wxMenu;
|
||||
|
||||
menuBar->Append( fileMenu, _( "&File" ) );
|
||||
|
||||
AddMenuItem( fileMenu, ID_MENU_SCREENCOPY_PNG,
|
||||
_( "Export Current View as PNG..." ),
|
||||
KiBitmap( export_xpm ) );
|
||||
|
||||
AddMenuItem( fileMenu, ID_MENU_SCREENCOPY_JPEG,
|
||||
_( "Export Current View as JPEG..." ),
|
||||
KiBitmap( export_xpm ) );
|
||||
|
||||
fileMenu->AppendSeparator();
|
||||
AddMenuItem( fileMenu, wxID_EXIT,
|
||||
_( "&Exit" ),
|
||||
KiBitmap( exit_xpm ) );
|
||||
|
||||
menuBar->Append( editMenu, _( "&Edit" ) );
|
||||
|
||||
AddMenuItem( editMenu, ID_TOOL_SCREENCOPY_TOCLIBBOARD,
|
||||
_( "Copy 3D Image" ),
|
||||
KiBitmap( copy_xpm ) );
|
||||
|
||||
menuBar->Append( viewMenu, _( "&View" ) );
|
||||
|
||||
AddMenuItem( viewMenu, ID_ZOOM_IN,
|
||||
_( "Zoom &In" ), HELP_ZOOM_IN,
|
||||
KiBitmap( zoom_in_xpm ) );
|
||||
|
||||
AddMenuItem( viewMenu, ID_ZOOM_OUT,
|
||||
_( "Zoom &Out" ), HELP_ZOOM_OUT,
|
||||
KiBitmap( zoom_out_xpm ) );
|
||||
|
||||
AddMenuItem( viewMenu, ID_ZOOM_PAGE,
|
||||
_( "Zoom to &Fit" ), HELP_ZOOM_FIT,
|
||||
KiBitmap( zoom_fit_in_page_xpm ) );
|
||||
|
||||
AddMenuItem( viewMenu, ID_ZOOM_REDRAW,
|
||||
_( "&Redraw" ), HELP_ZOOM_REDRAW,
|
||||
KiBitmap( zoom_redraw_xpm ) );
|
||||
|
||||
viewMenu->AppendSeparator();
|
||||
|
||||
AddMenuItem( viewMenu, ID_ROTATE3D_X_NEG,
|
||||
_( "Rotate X Clockwise" ),
|
||||
KiBitmap( rotate_neg_x_xpm ) );
|
||||
|
||||
AddMenuItem( viewMenu, ID_ROTATE3D_X_POS,
|
||||
_( "Rotate X Counterclockwise" ),
|
||||
KiBitmap( rotate_pos_x_xpm ) );
|
||||
|
||||
viewMenu->AppendSeparator();
|
||||
|
||||
AddMenuItem( viewMenu, ID_ROTATE3D_Y_NEG,
|
||||
_( "Rotate Y Clockwise" ),
|
||||
KiBitmap( rotate_neg_y_xpm ) );
|
||||
|
||||
AddMenuItem( viewMenu, ID_ROTATE3D_Y_POS,
|
||||
_( "Rotate Y Counterclockwise" ),
|
||||
KiBitmap( rotate_pos_y_xpm ) );
|
||||
|
||||
viewMenu->AppendSeparator();
|
||||
|
||||
AddMenuItem( viewMenu, ID_ROTATE3D_Z_NEG,
|
||||
_( "Rotate Z Clockwise" ),
|
||||
KiBitmap( rotate_neg_z_xpm ) );
|
||||
|
||||
AddMenuItem( viewMenu, ID_ROTATE3D_Z_POS,
|
||||
_( "Rotate Z Counterclockwise" ),
|
||||
KiBitmap( rotate_pos_z_xpm ) );
|
||||
|
||||
viewMenu->AppendSeparator();
|
||||
|
||||
AddMenuItem( viewMenu, ID_MOVE3D_LEFT,
|
||||
_( "Move left" ),
|
||||
KiBitmap( left_xpm ) );
|
||||
|
||||
AddMenuItem( viewMenu, ID_MOVE3D_RIGHT,
|
||||
_( "Move right" ),
|
||||
KiBitmap( right_xpm ) );
|
||||
|
||||
AddMenuItem( viewMenu, ID_MOVE3D_UP,
|
||||
_( "Move up" ),
|
||||
KiBitmap( up_xpm ) );
|
||||
|
||||
AddMenuItem( viewMenu, ID_MOVE3D_DOWN,
|
||||
_( "Move down" ),
|
||||
KiBitmap( down_xpm ) );
|
||||
|
||||
menuBar->Append( prefsMenu, _( "&Preferences" ) );
|
||||
|
||||
AddMenuItem( prefsMenu, ID_TOOL_SET_VISIBLE_ITEMS,
|
||||
_( "Display Options" ),
|
||||
KiBitmap( read_setup_xpm ) );
|
||||
|
||||
prefsMenu->AppendCheckItem( ID_RENDER_CURRENT_VIEW, _( "Raytracing" ) );
|
||||
prefsMenu->Check( ID_RENDER_CURRENT_VIEW,
|
||||
m_settings.RenderEngineGet() != RENDER_ENGINE_OPENGL_LEGACY );
|
||||
|
||||
wxMenu * renderOptionsMenu = new wxMenu;
|
||||
AddMenuItem( prefsMenu, renderOptionsMenu, ID_MENU3D_FL,
|
||||
_( "Render Options" ), KiBitmap( options_3drender_xpm ) );
|
||||
|
||||
wxMenu * materialsList = new wxMenu;
|
||||
AddMenuItem( renderOptionsMenu, materialsList, ID_MENU3D_FL_RENDER_MATERIAL,
|
||||
_( "Material Properties" ), KiBitmap( color_materials_xpm ) );
|
||||
|
||||
materialsList->AppendRadioItem( ID_MENU3D_FL_RENDER_MATERIAL_MODE_NORMAL,
|
||||
_( "Use All Properties" ),
|
||||
_( "Use all material properties from each 3D model file" ) );
|
||||
|
||||
materialsList->AppendRadioItem( ID_MENU3D_FL_RENDER_MATERIAL_MODE_DIFFUSE_ONLY,
|
||||
_( "Use Diffuse Only" ),
|
||||
_( "Use only the diffuse color property from model 3D model file" ) );
|
||||
|
||||
materialsList->AppendRadioItem( ID_MENU3D_FL_RENDER_MATERIAL_MODE_CAD_MODE,
|
||||
_( "CAD Color Style" ),
|
||||
_( "Use a CAD color style based on the diffuse color of the material" ) );
|
||||
|
||||
// Add specific preferences for OpenGL
|
||||
// /////////////////////////////////////////////////////////////////////////
|
||||
wxMenu * renderOptionsMenu_OPENGL = new wxMenu;
|
||||
|
||||
AddMenuItem( renderOptionsMenu, renderOptionsMenu_OPENGL, ID_MENU3D_FL_OPENGL,
|
||||
_( "OpenGL Options" ), KiBitmap( tools_xpm ) );
|
||||
|
||||
AddMenuItem( renderOptionsMenu_OPENGL, ID_MENU3D_FL_OPENGL_RENDER_COPPER_THICKNESS,
|
||||
_( "Show Copper Thickness" ),
|
||||
_( "Shows the copper thickness on copper layers (slower loading)"),
|
||||
KiBitmap( use_3D_copper_thickness_xpm ), wxITEM_CHECK );
|
||||
|
||||
AddMenuItem( renderOptionsMenu_OPENGL, ID_MENU3D_FL_OPENGL_RENDER_SHOW_MODEL_BBOX,
|
||||
_( "Show Model Bounding Boxes" ),
|
||||
KiBitmap( ortho_xpm ), wxITEM_CHECK );
|
||||
|
||||
|
||||
//-- File menu -----------------------------------------------------------
|
||||
//
|
||||
CONDITIONAL_MENU* fileMenu = new CONDITIONAL_MENU( false, tool );
|
||||
// Add specific preferences for Raytracing
|
||||
// /////////////////////////////////////////////////////////////////////////
|
||||
wxMenu * renderOptionsMenu_RAYTRACING = new wxMenu;
|
||||
AddMenuItem( renderOptionsMenu, renderOptionsMenu_RAYTRACING, ID_MENU3D_FL_RAYTRACING,
|
||||
_( "Raytracing Options" ), KiBitmap( tools_xpm ) );
|
||||
|
||||
fileMenu->AddItem( ID_MENU_SCREENCOPY_PNG, _( "Export Current View as PNG..." ), "",
|
||||
export_xpm, SELECTION_CONDITIONS::ShowAlways );
|
||||
AddMenuItem( renderOptionsMenu_RAYTRACING, ID_MENU3D_FL_RAYTRACING_RENDER_SHADOWS,
|
||||
_( "Render Shadows" ),
|
||||
KiBitmap( green_xpm ), wxITEM_CHECK );
|
||||
|
||||
fileMenu->AddItem( ID_MENU_SCREENCOPY_JPEG, _( "Export Current View as JPEG..." ), "",
|
||||
export_xpm, SELECTION_CONDITIONS::ShowAlways );
|
||||
|
||||
fileMenu->AddSeparator();
|
||||
fileMenu->AddClose( _( "3D Viewer" ) );
|
||||
|
||||
fileMenu->Resolve();
|
||||
|
||||
//-- Edit menu -------------------------------------------------------
|
||||
//
|
||||
CONDITIONAL_MENU* editMenu = new CONDITIONAL_MENU( false, tool );
|
||||
|
||||
editMenu->AddItem( ID_TOOL_SCREENCOPY_TOCLIBBOARD, _( "Copy 3D Image" ), "",
|
||||
copy_xpm, SELECTION_CONDITIONS::ShowAlways );
|
||||
|
||||
editMenu->Resolve();
|
||||
|
||||
//-- View menu -------------------------------------------------------
|
||||
//
|
||||
CONDITIONAL_MENU* viewMenu = new CONDITIONAL_MENU( false, tool );
|
||||
|
||||
viewMenu->AddItem( ID_ZOOM_IN, _( "Zoom In\tF1" ), HELP_ZOOM_IN,
|
||||
zoom_in_xpm, SELECTION_CONDITIONS::ShowAlways );
|
||||
|
||||
viewMenu->AddItem( ID_ZOOM_OUT, _( "Zoom Out\tF2" ), HELP_ZOOM_OUT,
|
||||
zoom_out_xpm, SELECTION_CONDITIONS::ShowAlways );
|
||||
|
||||
viewMenu->AddItem( ID_ZOOM_PAGE, _( "Zoom to Fit" ), HELP_ZOOM_FIT,
|
||||
zoom_fit_in_page_xpm, SELECTION_CONDITIONS::ShowAlways );
|
||||
|
||||
viewMenu->AddItem( ID_ZOOM_REDRAW, _( "Redraw\tR" ), HELP_ZOOM_REDRAW,
|
||||
zoom_redraw_xpm, SELECTION_CONDITIONS::ShowAlways );
|
||||
|
||||
viewMenu->AddSeparator();
|
||||
viewMenu->AddItem( ID_ROTATE3D_X_NEG, _( "Rotate X Clockwise\tShift+X" ), "",
|
||||
rotate_neg_x_xpm, SELECTION_CONDITIONS::ShowAlways );
|
||||
|
||||
viewMenu->AddItem( ID_ROTATE3D_X_POS, _( "Rotate X Counterclockwise\tX" ), "",
|
||||
rotate_pos_x_xpm, SELECTION_CONDITIONS::ShowAlways );
|
||||
|
||||
viewMenu->AddSeparator();
|
||||
viewMenu->AddItem( ID_ROTATE3D_Y_NEG, _( "Rotate Y Clockwise\tShift+Y" ), "",
|
||||
rotate_neg_y_xpm, SELECTION_CONDITIONS::ShowAlways );
|
||||
|
||||
viewMenu->AddItem( ID_ROTATE3D_Y_POS, _( "Rotate Y Counterclockwise\tY" ), "",
|
||||
rotate_pos_y_xpm, SELECTION_CONDITIONS::ShowAlways );
|
||||
|
||||
viewMenu->AddSeparator();
|
||||
viewMenu->AddItem( ID_ROTATE3D_Z_NEG, _( "Rotate Z Clockwise\tShift+Z" ), "",
|
||||
rotate_neg_z_xpm, SELECTION_CONDITIONS::ShowAlways );;
|
||||
|
||||
viewMenu->AddItem( ID_ROTATE3D_Z_POS, _( "Rotate Z Counterclockwise\tZ" ), "",
|
||||
rotate_pos_z_xpm, SELECTION_CONDITIONS::ShowAlways );
|
||||
|
||||
viewMenu->AddSeparator();
|
||||
viewMenu->AddItem( ID_MOVE3D_LEFT, _( "Move Left\tLeft" ), "",
|
||||
left_xpm, SELECTION_CONDITIONS::ShowAlways );
|
||||
|
||||
viewMenu->AddItem( ID_MOVE3D_RIGHT, _( "Move Right\tRight" ), "",
|
||||
right_xpm, SELECTION_CONDITIONS::ShowAlways );
|
||||
|
||||
viewMenu->AddItem( ID_MOVE3D_UP, _( "Move Up\tUp" ), "",
|
||||
up_xpm, SELECTION_CONDITIONS::ShowAlways );
|
||||
|
||||
viewMenu->AddItem( ID_MOVE3D_DOWN, _( "Move Down\tDown" ), "",
|
||||
down_xpm, SELECTION_CONDITIONS::ShowAlways );
|
||||
|
||||
viewMenu->Resolve();
|
||||
|
||||
//-- Preferences menu -----------------------------------------------
|
||||
//
|
||||
CONDITIONAL_MENU* prefsMenu = new CONDITIONAL_MENU( false, tool );
|
||||
|
||||
auto raytracingCondition = [ this ] ( const SELECTION& aSel ) {
|
||||
return m_settings.RenderEngineGet() != RENDER_ENGINE_OPENGL_LEGACY;
|
||||
};
|
||||
auto NormalModeCondition = [ this ] ( const SELECTION& aSel ) {
|
||||
return m_settings.MaterialModeGet() == MATERIAL_MODE_NORMAL;
|
||||
};
|
||||
auto DiffuseModeCondition = [ this ] ( const SELECTION& aSel ) {
|
||||
return m_settings.MaterialModeGet() == MATERIAL_MODE_DIFFUSE_ONLY;
|
||||
};
|
||||
auto CADModeCondition = [ this ] ( const SELECTION& aSel ) {
|
||||
return m_settings.MaterialModeGet() == MATERIAL_MODE_CAD_MODE;
|
||||
};
|
||||
auto copperThicknessCondition = [ this ] ( const SELECTION& aSel ) {
|
||||
return m_settings.GetFlag( FL_RENDER_OPENGL_COPPER_THICKNESS );
|
||||
};
|
||||
auto boundingBoxesCondition = [ this ] ( const SELECTION& aSel ) {
|
||||
return m_settings.GetFlag( FL_RENDER_OPENGL_SHOW_MODEL_BBOX );
|
||||
};
|
||||
auto renderShadowsCondition = [ this ] ( const SELECTION& aSel ) {
|
||||
return m_settings.GetFlag( FL_RENDER_RAYTRACING_SHADOWS );
|
||||
};
|
||||
auto proceduralTexturesCondition = [ this ] ( const SELECTION& aSel ) {
|
||||
return m_settings.GetFlag( FL_RENDER_RAYTRACING_PROCEDURAL_TEXTURES );
|
||||
};
|
||||
auto showFloorCondition = [ this ] ( const SELECTION& aSel ) {
|
||||
return m_settings.GetFlag( FL_RENDER_RAYTRACING_BACKFLOOR );
|
||||
};
|
||||
auto useRefractionsCondition = [ this ] ( const SELECTION& aSel ) {
|
||||
return m_settings.GetFlag( FL_RENDER_RAYTRACING_REFRACTIONS );
|
||||
};
|
||||
auto useReflectionsCondition = [ this ] ( const SELECTION& aSel ) {
|
||||
return m_settings.GetFlag( FL_RENDER_RAYTRACING_REFLECTIONS );
|
||||
};
|
||||
auto antiAliasingCondition = [ this ] ( const SELECTION& aSel ) {
|
||||
return m_settings.GetFlag( FL_RENDER_RAYTRACING_ANTI_ALIASING );
|
||||
};
|
||||
auto postProcessCondition = [ this ] ( const SELECTION& aSel ) {
|
||||
return m_settings.GetFlag( FL_RENDER_RAYTRACING_POST_PROCESSING );
|
||||
};
|
||||
auto showAxesCondition = [ this ] ( const SELECTION& aSel ) {
|
||||
return m_settings.GetFlag( FL_AXIS );
|
||||
};
|
||||
|
||||
prefsMenu->AddItem( ID_TOOL_SET_VISIBLE_ITEMS, _( "Display Options" ), "",
|
||||
read_setup_xpm, SELECTION_CONDITIONS::ShowAlways );
|
||||
|
||||
prefsMenu->AddCheckItem( ID_RENDER_CURRENT_VIEW, _( "Raytracing" ), "",
|
||||
tools_xpm, raytracingCondition );
|
||||
|
||||
// Render options submenu
|
||||
CONDITIONAL_MENU* optsSubmenu = new CONDITIONAL_MENU( false, tool );
|
||||
optsSubmenu->SetTitle( _( "Render Options" ) );
|
||||
optsSubmenu->SetIcon( options_3drender_xpm );
|
||||
|
||||
// Material properties submenu
|
||||
CONDITIONAL_MENU* propsSubmenu = new CONDITIONAL_MENU( false, tool );
|
||||
propsSubmenu->SetTitle( _( "Material Properties" ) );
|
||||
propsSubmenu->SetIcon( color_materials_xpm );
|
||||
|
||||
propsSubmenu->AddCheckItem( ID_MENU3D_FL_RENDER_MATERIAL_MODE_NORMAL,
|
||||
_( "Use All Properties" ),
|
||||
_( "Use all material properties from each 3D model file" ),
|
||||
nullptr, NormalModeCondition );
|
||||
|
||||
propsSubmenu->AddCheckItem( ID_MENU3D_FL_RENDER_MATERIAL_MODE_DIFFUSE_ONLY,
|
||||
_( "Use Diffuse Only" ),
|
||||
_( "Use only the diffuse color property from model 3D model file" ),
|
||||
nullptr, DiffuseModeCondition );
|
||||
|
||||
propsSubmenu->AddCheckItem( ID_MENU3D_FL_RENDER_MATERIAL_MODE_CAD_MODE,
|
||||
_( "CAD Color Style" ),
|
||||
_( "Use a CAD color style based on the diffuse color of the material" ),
|
||||
nullptr, CADModeCondition );
|
||||
|
||||
optsSubmenu->AddMenu( propsSubmenu, SELECTION_CONDITIONS::ShowAlways );
|
||||
|
||||
optsSubmenu->AddCheckItem( ID_MENU3D_FL_OPENGL_RENDER_COPPER_THICKNESS,
|
||||
_( "Show Copper Thickness" ),
|
||||
_( "Shows the copper thickness on copper layers (slower loading)" ),
|
||||
use_3D_copper_thickness_xpm, copperThicknessCondition );
|
||||
|
||||
optsSubmenu->AddCheckItem( ID_MENU3D_FL_OPENGL_RENDER_SHOW_MODEL_BBOX,
|
||||
_( "Show Model Bounding Boxes" ), "",
|
||||
ortho_xpm, boundingBoxesCondition );
|
||||
|
||||
// Raytracing submenu
|
||||
CONDITIONAL_MENU* raySubmenu = new CONDITIONAL_MENU( false, tool );
|
||||
raySubmenu->SetTitle( _( "Raytracing Options" ) );
|
||||
raySubmenu->SetIcon( tools_xpm );
|
||||
|
||||
raySubmenu->AddCheckItem( ID_MENU3D_FL_RAYTRACING_RENDER_SHADOWS,
|
||||
_( "Render Shadows" ), "",
|
||||
green_xpm, renderShadowsCondition );
|
||||
|
||||
raySubmenu->AddCheckItem( ID_MENU3D_FL_RAYTRACING_PROCEDURAL_TEXTURES,
|
||||
AddMenuItem( renderOptionsMenu_RAYTRACING, ID_MENU3D_FL_RAYTRACING_PROCEDURAL_TEXTURES,
|
||||
_( "Procedural Textures" ),
|
||||
_( "Apply procedural textures to materials (slow)"),
|
||||
green_xpm, proceduralTexturesCondition );
|
||||
KiBitmap( green_xpm ), wxITEM_CHECK );
|
||||
|
||||
raySubmenu->AddCheckItem( ID_MENU3D_FL_RAYTRACING_BACKFLOOR,
|
||||
AddMenuItem( renderOptionsMenu_RAYTRACING, ID_MENU3D_FL_RAYTRACING_BACKFLOOR,
|
||||
_( "Add Floor" ),
|
||||
_( "Adds a floor plane below the board (slow)"),
|
||||
green_xpm, showFloorCondition );
|
||||
KiBitmap( green_xpm ), wxITEM_CHECK );
|
||||
|
||||
raySubmenu->AddCheckItem( ID_MENU3D_FL_RAYTRACING_REFRACTIONS,
|
||||
AddMenuItem( renderOptionsMenu_RAYTRACING, ID_MENU3D_FL_RAYTRACING_REFRACTIONS,
|
||||
_( "Refractions" ),
|
||||
_( "Render materials with refractions properties on final render (slow)"),
|
||||
green_xpm, useRefractionsCondition );
|
||||
KiBitmap( green_xpm ), wxITEM_CHECK );
|
||||
|
||||
raySubmenu->AddCheckItem( ID_MENU3D_FL_RAYTRACING_REFLECTIONS,
|
||||
AddMenuItem( renderOptionsMenu_RAYTRACING, ID_MENU3D_FL_RAYTRACING_REFLECTIONS,
|
||||
_( "Reflections" ),
|
||||
_( "Render materials with reflections properties on final render (slow)"),
|
||||
green_xpm, useReflectionsCondition );
|
||||
KiBitmap( green_xpm ), wxITEM_CHECK );
|
||||
|
||||
raySubmenu->AddCheckItem( ID_MENU3D_FL_RAYTRACING_ANTI_ALIASING,
|
||||
AddMenuItem( renderOptionsMenu_RAYTRACING, ID_MENU3D_FL_RAYTRACING_ANTI_ALIASING,
|
||||
_( "Anti-aliasing" ),
|
||||
_( "Render with improved quality on final render (slow)"),
|
||||
green_xpm, antiAliasingCondition );
|
||||
KiBitmap( green_xpm ), wxITEM_CHECK );
|
||||
|
||||
raySubmenu->AddCheckItem( ID_MENU3D_FL_RAYTRACING_POST_PROCESSING,
|
||||
AddMenuItem( renderOptionsMenu_RAYTRACING, ID_MENU3D_FL_RAYTRACING_POST_PROCESSING,
|
||||
_( "Post-processing" ),
|
||||
_( "Apply Screen Space Ambient Occlusion and Global Illumination reflections on final render (slow)"),
|
||||
green_xpm, postProcessCondition );
|
||||
KiBitmap( green_xpm ), wxITEM_CHECK );
|
||||
|
||||
optsSubmenu->AddMenu( raySubmenu, SELECTION_CONDITIONS::ShowAlways );
|
||||
prefsMenu->AddMenu( optsSubmenu, SELECTION_CONDITIONS::ShowAlways );
|
||||
prefsMenu->AppendSeparator();
|
||||
|
||||
prefsMenu->AddSeparator();
|
||||
|
||||
// Color submenu
|
||||
CONDITIONAL_MENU* colorSubmenu = new CONDITIONAL_MENU( false, tool );
|
||||
colorSubmenu->SetTitle( _( "Choose Colors" ) );
|
||||
colorSubmenu->SetIcon( palette_xpm );
|
||||
// Colors, axis and grid elements
|
||||
// /////////////////////////////////////////////////////////////////////////
|
||||
|
||||
colorSubmenu->AddItem( ID_MENU3D_BGCOLOR_TOP, _( "Background Top Color..." ), "",
|
||||
setcolor_3d_bg_xpm, SELECTION_CONDITIONS::ShowAlways );
|
||||
// Add submenu set Colors
|
||||
wxMenu * setColorMenu = new wxMenu;
|
||||
AddMenuItem( prefsMenu, setColorMenu, ID_MENU3D_COLOR,
|
||||
_( "Choose Colors" ), KiBitmap( palette_xpm ) );
|
||||
|
||||
colorSubmenu->AddItem( ID_MENU3D_BGCOLOR_BOTTOM, _( "Background Bottom Color..." ), "",
|
||||
setcolor_3d_bg_xpm, SELECTION_CONDITIONS::ShowAlways );
|
||||
wxMenu * setBgColorMenu = new wxMenu;
|
||||
AddMenuItem( setColorMenu, setBgColorMenu, ID_MENU3D_BGCOLOR,
|
||||
_( "Background Color" ), KiBitmap( palette_xpm ) );
|
||||
|
||||
colorSubmenu->AddItem( ID_MENU3D_SILKSCREEN_COLOR, _( "Silkscreen Color..." ), "",
|
||||
setcolor_silkscreen_xpm, SELECTION_CONDITIONS::ShowAlways );
|
||||
AddMenuItem( setBgColorMenu, ID_MENU3D_BGCOLOR_TOP_SELECTION,
|
||||
_( "Background Top Color..." ), KiBitmap( setcolor_3d_bg_xpm ) );
|
||||
|
||||
colorSubmenu->AddItem( ID_MENU3D_SOLDERMASK_COLOR, _( "Solder Mask Color..." ), "",
|
||||
setcolor_soldermask_xpm, SELECTION_CONDITIONS::ShowAlways );
|
||||
AddMenuItem( setBgColorMenu, ID_MENU3D_BGCOLOR_BOTTOM_SELECTION,
|
||||
_( "Background Bottom Color..." ), KiBitmap( setcolor_3d_bg_xpm ) );
|
||||
|
||||
colorSubmenu->AddItem( ID_MENU3D_SOLDERPASTE_COLOR, _( "Solder Paste Color..." ), "",
|
||||
setcolor_solderpaste_xpm, SELECTION_CONDITIONS::ShowAlways );
|
||||
AddMenuItem( setColorMenu, ID_MENU3D_SILKSCREEN_COLOR_SELECTION,
|
||||
_( "Silkscreen Color..." ), KiBitmap( setcolor_silkscreen_xpm ) );
|
||||
|
||||
colorSubmenu->AddItem( ID_MENU3D_COPPER_COLOR, _( "Copper/Surface Finish Color..." ), "",
|
||||
setcolor_copper_xpm, SELECTION_CONDITIONS::ShowAlways );
|
||||
AddMenuItem( setColorMenu, ID_MENU3D_SOLDERMASK_COLOR_SELECTION,
|
||||
_( "Solder Mask Color..." ), KiBitmap( setcolor_soldermask_xpm ) );
|
||||
|
||||
colorSubmenu->AddItem( ID_MENU3D_PCB_BODY_COLOR, _( "Board Body Color..." ), "",
|
||||
setcolor_board_body_xpm, SELECTION_CONDITIONS::ShowAlways );
|
||||
AddMenuItem( setColorMenu, ID_MENU3D_SOLDERPASTE_COLOR_SELECTION,
|
||||
_( "Solder Paste Color..." ), KiBitmap( setcolor_solderpaste_xpm ) );
|
||||
|
||||
prefsMenu->AddMenu( colorSubmenu );
|
||||
AddMenuItem( setColorMenu, ID_MENU3D_COPPER_COLOR_SELECTION,
|
||||
_( "Copper/Surface Finish Color..." ), KiBitmap( setcolor_copper_xpm ) );
|
||||
|
||||
prefsMenu->AddCheckItem( ID_MENU3D_AXIS_ONOFF, _( "Show 3D &Axis" ), "",
|
||||
axis3d_front_xpm, showAxesCondition );
|
||||
AddMenuItem( setColorMenu, ID_MENU3D_PCB_BODY_COLOR_SELECTION,
|
||||
_( "Board Body Color..." ), KiBitmap( setcolor_board_body_xpm ) );
|
||||
|
||||
// Grid submenu
|
||||
CONDITIONAL_MENU* gridSubmenu = new CONDITIONAL_MENU( false, tool );
|
||||
gridSubmenu->SetTitle( _( "3D Grid" ) );
|
||||
gridSubmenu->SetIcon( grid_xpm );
|
||||
AddMenuItem( prefsMenu, ID_MENU3D_AXIS_ONOFF,
|
||||
_( "Show 3D &Axis" ), KiBitmap( axis3d_front_xpm ), wxITEM_CHECK );
|
||||
|
||||
auto noGridCondition = [ this ] ( const SELECTION& aSel ) {
|
||||
return m_settings.GridGet() == GRID3D_NONE;
|
||||
};
|
||||
auto grid10mmCondition = [ this ] ( const SELECTION& aSel ) {
|
||||
return m_settings.GridGet() == GRID3D_10MM;
|
||||
};
|
||||
auto grid5mmCondition = [ this ] ( const SELECTION& aSel ) {
|
||||
return m_settings.GridGet() == GRID3D_5MM;
|
||||
};
|
||||
auto grid2p5mmCondition = [ this ] ( const SELECTION& aSel ) {
|
||||
return m_settings.GridGet() == GRID3D_2P5MM;
|
||||
};
|
||||
auto grid_1mmCondition = [ this ] ( const SELECTION& aSel ) {
|
||||
return m_settings.GridGet() == GRID3D_1MM;
|
||||
};
|
||||
|
||||
gridSubmenu->AddCheckItem( ID_MENU3D_GRID_NOGRID, _( "No 3D Grid" ), "",
|
||||
nullptr, noGridCondition );
|
||||
gridSubmenu->AddCheckItem( ID_MENU3D_GRID_10_MM, _( "3D Grid 10mm" ), "",
|
||||
nullptr, grid10mmCondition );
|
||||
gridSubmenu->AddCheckItem( ID_MENU3D_GRID_5_MM, _( "3D Grid 5mm" ), "",
|
||||
nullptr, grid5mmCondition );
|
||||
gridSubmenu->AddCheckItem( ID_MENU3D_GRID_2P5_MM, _( "3D Grid 2.5mm" ), "",
|
||||
nullptr, grid2p5mmCondition );
|
||||
gridSubmenu->AddCheckItem( ID_MENU3D_GRID_1_MM, _( "3D Grid 1mm" ), "",
|
||||
nullptr, grid_1mmCondition );
|
||||
// Creates grid menu
|
||||
// /////////////////////////////////////////////////////////////////////////
|
||||
|
||||
prefsMenu->AddMenu( gridSubmenu, SELECTION_CONDITIONS::ShowAlways );
|
||||
wxMenu * gridlistMenu = new wxMenu;
|
||||
AddMenuItem( prefsMenu, gridlistMenu, ID_MENU3D_GRID,
|
||||
_( "3D Grid" ), KiBitmap( grid_xpm ) );
|
||||
gridlistMenu->AppendRadioItem( ID_MENU3D_GRID_NOGRID, _( "No 3D Grid" ), wxEmptyString );
|
||||
gridlistMenu->AppendRadioItem( ID_MENU3D_GRID_10_MM, _( "3D Grid 10 mm" ), wxEmptyString );
|
||||
gridlistMenu->AppendRadioItem( ID_MENU3D_GRID_5_MM, _( "3D Grid 5 mm" ), wxEmptyString );
|
||||
gridlistMenu->AppendRadioItem( ID_MENU3D_GRID_2P5_MM, _( "3D Grid 2.5 mm" ), wxEmptyString );
|
||||
gridlistMenu->AppendRadioItem( ID_MENU3D_GRID_1_MM, _( "3D Grid 1 mm" ), wxEmptyString );
|
||||
|
||||
prefsMenu->AddSeparator();
|
||||
prefsMenu->AddItem( ID_MENU3D_RESET_DEFAULTS, _( "Reset to Default Settings" ), "",
|
||||
tools_xpm, SELECTION_CONDITIONS::ShowAlways );
|
||||
// If the grid is on, check the corresponding menuitem showing the grid size
|
||||
if( m_settings.GridGet() != GRID3D_NONE )
|
||||
{
|
||||
gridlistMenu->Check( ID_MENU3D_GRID_10_MM, m_settings.GridGet() == GRID3D_10MM );
|
||||
gridlistMenu->Check( ID_MENU3D_GRID_5_MM, m_settings.GridGet() == GRID3D_5MM );
|
||||
gridlistMenu->Check( ID_MENU3D_GRID_2P5_MM, m_settings.GridGet() == GRID3D_2P5MM );
|
||||
gridlistMenu->Check( ID_MENU3D_GRID_1_MM, m_settings.GridGet() == GRID3D_1MM );
|
||||
}
|
||||
else
|
||||
gridlistMenu->Check( ID_MENU3D_GRID_NOGRID, true );
|
||||
|
||||
#ifdef __APPLE__ // Note: will get moved to Apple menu by wxWidgets
|
||||
prefsMenu->AddItem( wxID_PREFERENCES,
|
||||
_( "Preferences...\tCTRL+," ),
|
||||
_( "Show preferences for all open tools" ),
|
||||
preference_xpm, SELECTION_CONDITIONS::ShowAlways );
|
||||
#endif
|
||||
// Reset options
|
||||
// /////////////////////////////////////////////////////////////////////////
|
||||
prefsMenu->AppendSeparator();
|
||||
|
||||
prefsMenu->Resolve();
|
||||
AddMenuItem( prefsMenu, ID_MENU3D_RESET_DEFAULTS,
|
||||
_( "Reset to Default Settings" ),
|
||||
KiBitmap( tools_xpm ) );
|
||||
|
||||
//-- Menubar -------------------------------------------------------------
|
||||
//
|
||||
menuBar->Append( fileMenu, _( "&File" ) );
|
||||
menuBar->Append( editMenu, _( "&Edit" ) );
|
||||
menuBar->Append( viewMenu, _( "&View" ) );
|
||||
menuBar->Append( prefsMenu, _( "&Preferences" ) );
|
||||
AddStandardHelpMenu( menuBar );
|
||||
// Help menu
|
||||
// /////////////////////////////////////////////////////////////////////////
|
||||
menuBar->Append( helpMenu, _( "&Help" ) );
|
||||
|
||||
AddMenuItem( helpMenu, wxID_HELP,
|
||||
_( "Pcbnew &Manual" ),
|
||||
_( "Open Pcbnew Manual" ),
|
||||
KiBitmap( online_help_xpm ) );
|
||||
|
||||
AddMenuItem( helpMenu, wxID_INDEX,
|
||||
_( "&Getting Started in KiCad" ),
|
||||
_( "Open \"Getting Started in KiCad\" guide for beginners" ),
|
||||
KiBitmap( help_xpm ) );
|
||||
|
||||
wxString text = AddHotkeyName( _( "&List Hotkeys..." ), GetHotkeyConfig(), HK_HELP );
|
||||
AddMenuItem( helpMenu, ID_MENU3D_HELP_HOTKEY_SHOW_CURRENT_LIST,
|
||||
text,
|
||||
_( "Displays the current hotkeys list and corresponding commands" ),
|
||||
KiBitmap( hotkeys_xpm ) );
|
||||
|
||||
helpMenu->AppendSeparator();
|
||||
|
||||
AddMenuItem( helpMenu, ID_HELP_GET_INVOLVED,
|
||||
_( "Get &Involved" ),
|
||||
_( "Contribute to KiCad (opens a web browser)" ),
|
||||
KiBitmap( info_xpm ) );
|
||||
|
||||
helpMenu->AppendSeparator();
|
||||
|
||||
AddMenuItem( helpMenu, wxID_ABOUT,
|
||||
_( "&About KiCad" ),
|
||||
_( "Display KiCad About dialog" ),
|
||||
KiBitmap( about_xpm ) );
|
||||
|
||||
SetMenuBar( menuBar );
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// C++ code generated with wxFormBuilder (version Jul 11 2018)
|
||||
// C++ code generated with wxFormBuilder (version 3.9.0 Nov 1 2020)
|
||||
// http://www.wxformbuilder.org/
|
||||
//
|
||||
// PLEASE DO *NOT* EDIT THIS FILE!
|
||||
@@ -12,251 +12,252 @@
|
||||
DIALOG_3D_VIEW_OPTIONS_BASE::DIALOG_3D_VIEW_OPTIONS_BASE( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : DIALOG_SHIM( parent, id, title, pos, size, style )
|
||||
{
|
||||
this->SetSizeHints( wxDefaultSize, wxDefaultSize );
|
||||
|
||||
|
||||
wxBoxSizer* bSizerMain;
|
||||
bSizerMain = new wxBoxSizer( wxVERTICAL );
|
||||
|
||||
|
||||
wxBoxSizer* bSizerUpper;
|
||||
bSizerUpper = new wxBoxSizer( wxHORIZONTAL );
|
||||
|
||||
|
||||
wxBoxSizer* bSizeLeft;
|
||||
bSizeLeft = new wxBoxSizer( wxVERTICAL );
|
||||
|
||||
|
||||
m_staticText3DRenderOpts = new wxStaticText( this, wxID_ANY, _("Render options:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticText3DRenderOpts->Wrap( -1 );
|
||||
m_staticText3DRenderOpts->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) );
|
||||
|
||||
|
||||
bSizeLeft->Add( m_staticText3DRenderOpts, 0, wxALL, 5 );
|
||||
|
||||
|
||||
wxFlexGridSizer* fgSizerRenderOptions;
|
||||
fgSizerRenderOptions = new wxFlexGridSizer( 0, 3, 0, 0 );
|
||||
fgSizerRenderOptions->SetFlexibleDirection( wxBOTH );
|
||||
fgSizerRenderOptions->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
|
||||
|
||||
|
||||
|
||||
|
||||
fgSizerRenderOptions->Add( 0, 0, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 10 );
|
||||
|
||||
|
||||
m_bitmapRealisticMode = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
fgSizerRenderOptions->Add( m_bitmapRealisticMode, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
|
||||
m_checkBoxRealisticMode = new wxCheckBox( this, wxID_ANY, _("Realistic mode"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
fgSizerRenderOptions->Add( m_checkBoxRealisticMode, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
|
||||
|
||||
|
||||
fgSizerRenderOptions->Add( 0, 0, 0, wxRIGHT|wxLEFT, 10 );
|
||||
|
||||
|
||||
m_bitmapBoardBody = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
fgSizerRenderOptions->Add( m_bitmapBoardBody, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
|
||||
m_checkBoxBoardBody = new wxCheckBox( this, wxID_ANY, _("Show board body"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
fgSizerRenderOptions->Add( m_checkBoxBoardBody, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
|
||||
|
||||
|
||||
fgSizerRenderOptions->Add( 0, 0, 1, wxEXPAND, 5 );
|
||||
|
||||
|
||||
m_bitmapCuThickness = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
fgSizerRenderOptions->Add( m_bitmapCuThickness, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
|
||||
m_checkBoxCuThickness = new wxCheckBox( this, wxID_ANY, _("Show copper thickness"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
fgSizerRenderOptions->Add( m_checkBoxCuThickness, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
|
||||
|
||||
|
||||
fgSizerRenderOptions->Add( 0, 0, 0, wxRIGHT|wxLEFT, 10 );
|
||||
|
||||
|
||||
m_bitmapBoundingBoxes = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
fgSizerRenderOptions->Add( m_bitmapBoundingBoxes, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
|
||||
m_checkBoxBoundingBoxes = new wxCheckBox( this, wxID_ANY, _("Show model bounding boxes"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
fgSizerRenderOptions->Add( m_checkBoxBoundingBoxes, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
|
||||
|
||||
|
||||
fgSizerRenderOptions->Add( 0, 0, 0, wxRIGHT|wxLEFT, 10 );
|
||||
|
||||
|
||||
m_bitmapAreas = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
fgSizerRenderOptions->Add( m_bitmapAreas, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
|
||||
m_checkBoxAreas = new wxCheckBox( this, wxID_ANY, _("Show filled areas in zones"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
fgSizerRenderOptions->Add( m_checkBoxAreas, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
|
||||
wxFlexGridSizer* fgSizer3;
|
||||
fgSizer3 = new wxFlexGridSizer( 0, 2, 0, 0 );
|
||||
fgSizer3->SetFlexibleDirection( wxBOTH );
|
||||
fgSizer3->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
|
||||
|
||||
|
||||
|
||||
|
||||
fgSizerRenderOptions->Add( fgSizer3, 1, wxEXPAND, 5 );
|
||||
|
||||
|
||||
|
||||
|
||||
bSizeLeft->Add( fgSizerRenderOptions, 0, wxEXPAND|wxBOTTOM, 5 );
|
||||
|
||||
|
||||
|
||||
|
||||
bSizeLeft->Add( 0, 10, 0, 0, 5 );
|
||||
|
||||
|
||||
m_staticText3DmodelVisibility = new wxStaticText( this, wxID_ANY, _("3D model visibility:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticText3DmodelVisibility->Wrap( -1 );
|
||||
m_staticText3DmodelVisibility->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) );
|
||||
|
||||
|
||||
bSizeLeft->Add( m_staticText3DmodelVisibility, 0, wxALL, 5 );
|
||||
|
||||
|
||||
wxFlexGridSizer* fgSizer3DVisibility;
|
||||
fgSizer3DVisibility = new wxFlexGridSizer( 0, 3, 0, 0 );
|
||||
fgSizer3DVisibility->SetFlexibleDirection( wxBOTH );
|
||||
fgSizer3DVisibility->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
|
||||
|
||||
|
||||
|
||||
|
||||
fgSizer3DVisibility->Add( 0, 0, 1, wxRIGHT|wxLEFT, 10 );
|
||||
|
||||
|
||||
m_bitmap3DshapesTH = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
fgSizer3DVisibility->Add( m_bitmap3DshapesTH, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
|
||||
m_checkBox3DshapesTH = new wxCheckBox( this, wxID_ANY, _("Show 3D through hole models"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
fgSizer3DVisibility->Add( m_checkBox3DshapesTH, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
|
||||
|
||||
|
||||
fgSizer3DVisibility->Add( 0, 0, 0, wxRIGHT|wxLEFT, 10 );
|
||||
|
||||
|
||||
m_bitmap3DshapesSMD = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
fgSizer3DVisibility->Add( m_bitmap3DshapesSMD, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
|
||||
m_checkBox3DshapesSMD = new wxCheckBox( this, wxID_ANY, _("Show 3D SMD models"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
fgSizer3DVisibility->Add( m_checkBox3DshapesSMD, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
|
||||
|
||||
|
||||
fgSizer3DVisibility->Add( 0, 0, 0, wxRIGHT|wxLEFT, 10 );
|
||||
|
||||
|
||||
m_bitmap3DshapesVirtual = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
fgSizer3DVisibility->Add( m_bitmap3DshapesVirtual, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
|
||||
m_checkBox3DshapesVirtual = new wxCheckBox( this, wxID_ANY, _("Show 3D virtual models"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
fgSizer3DVisibility->Add( m_checkBox3DshapesVirtual, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
|
||||
|
||||
|
||||
bSizeLeft->Add( fgSizer3DVisibility, 0, wxEXPAND, 5 );
|
||||
|
||||
|
||||
|
||||
|
||||
bSizerUpper->Add( bSizeLeft, 1, wxEXPAND, 5 );
|
||||
|
||||
|
||||
m_staticlineVertical = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL );
|
||||
bSizerUpper->Add( m_staticlineVertical, 0, wxEXPAND | wxALL, 5 );
|
||||
|
||||
|
||||
wxBoxSizer* bSizerRight;
|
||||
bSizerRight = new wxBoxSizer( wxHORIZONTAL );
|
||||
|
||||
|
||||
wxBoxSizer* bSizeLayer;
|
||||
bSizeLayer = new wxBoxSizer( wxVERTICAL );
|
||||
|
||||
|
||||
m_staticTextBoardLayers = new wxStaticText( this, wxID_ANY, _("Board layers:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticTextBoardLayers->Wrap( -1 );
|
||||
m_staticTextBoardLayers->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) );
|
||||
|
||||
|
||||
bSizeLayer->Add( m_staticTextBoardLayers, 0, wxALL, 5 );
|
||||
|
||||
|
||||
wxFlexGridSizer* fgSizerShowBrdLayersOpts;
|
||||
fgSizerShowBrdLayersOpts = new wxFlexGridSizer( 0, 3, 0, 0 );
|
||||
fgSizerShowBrdLayersOpts->SetFlexibleDirection( wxBOTH );
|
||||
fgSizerShowBrdLayersOpts->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
|
||||
|
||||
|
||||
|
||||
|
||||
fgSizerShowBrdLayersOpts->Add( 0, 0, 0, wxRIGHT|wxLEFT, 10 );
|
||||
|
||||
|
||||
m_bitmapSilkscreen = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
fgSizerShowBrdLayersOpts->Add( m_bitmapSilkscreen, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
|
||||
m_checkBoxSilkscreen = new wxCheckBox( this, wxID_ANY, _("Show silkscreen layers"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
fgSizerShowBrdLayersOpts->Add( m_checkBoxSilkscreen, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
|
||||
|
||||
|
||||
|
||||
|
||||
fgSizerShowBrdLayersOpts->Add( 0, 0, 0, wxRIGHT|wxLEFT, 10 );
|
||||
|
||||
|
||||
m_bitmapSolderMask = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
fgSizerShowBrdLayersOpts->Add( m_bitmapSolderMask, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
|
||||
m_checkBoxSolderMask = new wxCheckBox( this, wxID_ANY, _("Show solder mask layers"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
fgSizerShowBrdLayersOpts->Add( m_checkBoxSolderMask, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
|
||||
|
||||
|
||||
fgSizerShowBrdLayersOpts->Add( 0, 0, 0, wxRIGHT|wxLEFT, 10 );
|
||||
|
||||
|
||||
m_bitmapSolderPaste = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
fgSizerShowBrdLayersOpts->Add( m_bitmapSolderPaste, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
|
||||
m_checkBoxSolderpaste = new wxCheckBox( this, wxID_ANY, _("Show solder paste layers"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
fgSizerShowBrdLayersOpts->Add( m_checkBoxSolderpaste, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
|
||||
|
||||
|
||||
fgSizerShowBrdLayersOpts->Add( 0, 0, 0, wxRIGHT|wxLEFT, 10 );
|
||||
|
||||
|
||||
m_bitmapAdhesive = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
fgSizerShowBrdLayersOpts->Add( m_bitmapAdhesive, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
|
||||
m_checkBoxAdhesive = new wxCheckBox( this, wxID_ANY, _("Show adhesive layers"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
fgSizerShowBrdLayersOpts->Add( m_checkBoxAdhesive, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
|
||||
|
||||
|
||||
bSizeLayer->Add( fgSizerShowBrdLayersOpts, 0, wxEXPAND, 5 );
|
||||
|
||||
|
||||
|
||||
|
||||
bSizeLayer->Add( 0, 10, 0, 0, 5 );
|
||||
|
||||
|
||||
m_staticTextUserLayers = new wxStaticText( this, wxID_ANY, _("User layers (not shown in realistic mode):"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticTextUserLayers->Wrap( -1 );
|
||||
m_staticTextUserLayers->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) );
|
||||
|
||||
|
||||
bSizeLayer->Add( m_staticTextUserLayers, 0, wxALL, 5 );
|
||||
|
||||
|
||||
wxFlexGridSizer* fgSizerShowUserLayersOpts;
|
||||
fgSizerShowUserLayersOpts = new wxFlexGridSizer( 0, 3, 0, 0 );
|
||||
fgSizerShowUserLayersOpts->SetFlexibleDirection( wxBOTH );
|
||||
fgSizerShowUserLayersOpts->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
|
||||
|
||||
|
||||
|
||||
|
||||
fgSizerShowUserLayersOpts->Add( 0, 0, 0, wxRIGHT|wxLEFT, 10 );
|
||||
|
||||
|
||||
m_bitmapComments = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
fgSizerShowUserLayersOpts->Add( m_bitmapComments, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
|
||||
m_checkBoxComments = new wxCheckBox( this, wxID_ANY, _("Show comments and drawings layers"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
fgSizerShowUserLayersOpts->Add( m_checkBoxComments, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
|
||||
|
||||
|
||||
fgSizerShowUserLayersOpts->Add( 0, 0, 0, wxRIGHT|wxLEFT, 10 );
|
||||
|
||||
|
||||
m_bitmapECO = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
fgSizerShowUserLayersOpts->Add( m_bitmapECO, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
|
||||
m_checkBoxECO = new wxCheckBox( this, wxID_ANY, _("Show ECO layers"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
fgSizerShowUserLayersOpts->Add( m_checkBoxECO, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
|
||||
|
||||
|
||||
bSizeLayer->Add( fgSizerShowUserLayersOpts, 0, wxEXPAND, 5 );
|
||||
|
||||
|
||||
|
||||
|
||||
bSizerRight->Add( bSizeLayer, 1, wxEXPAND, 5 );
|
||||
|
||||
|
||||
|
||||
|
||||
bSizerUpper->Add( bSizerRight, 1, wxEXPAND, 5 );
|
||||
|
||||
|
||||
|
||||
|
||||
bSizerMain->Add( bSizerUpper, 1, wxEXPAND, 5 );
|
||||
|
||||
|
||||
m_staticlineH = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
|
||||
bSizerMain->Add( m_staticlineH, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 );
|
||||
|
||||
|
||||
m_sdbSizer = new wxStdDialogButtonSizer();
|
||||
m_sdbSizerOK = new wxButton( this, wxID_OK );
|
||||
m_sdbSizer->AddButton( m_sdbSizerOK );
|
||||
m_sdbSizerCancel = new wxButton( this, wxID_CANCEL );
|
||||
m_sdbSizer->AddButton( m_sdbSizerCancel );
|
||||
m_sdbSizer->Realize();
|
||||
|
||||
|
||||
bSizerMain->Add( m_sdbSizer, 0, wxALL|wxALIGN_RIGHT, 5 );
|
||||
|
||||
|
||||
|
||||
|
||||
this->SetSizer( bSizerMain );
|
||||
this->Layout();
|
||||
|
||||
bSizerMain->Fit( this );
|
||||
|
||||
this->Centre( wxBOTH );
|
||||
|
||||
|
||||
// Connect Events
|
||||
m_checkBoxRealisticMode->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_3D_VIEW_OPTIONS_BASE::OnCheckRealisticMode ), NULL, this );
|
||||
}
|
||||
@@ -265,5 +266,5 @@ DIALOG_3D_VIEW_OPTIONS_BASE::~DIALOG_3D_VIEW_OPTIONS_BASE()
|
||||
{
|
||||
// Disconnect Events
|
||||
m_checkBoxRealisticMode->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_3D_VIEW_OPTIONS_BASE::OnCheckRealisticMode ), NULL, this );
|
||||
|
||||
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,12 +1,11 @@
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// C++ code generated with wxFormBuilder (version Jul 11 2018)
|
||||
// C++ code generated with wxFormBuilder (version 3.9.0 Nov 1 2020)
|
||||
// http://www.wxformbuilder.org/
|
||||
//
|
||||
// PLEASE DO *NOT* EDIT THIS FILE!
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef __DIALOG_3D_VIEW_OPTION_BASE_H__
|
||||
#define __DIALOG_3D_VIEW_OPTION_BASE_H__
|
||||
#pragma once
|
||||
|
||||
#include <wx/artprov.h>
|
||||
#include <wx/xrc/xmlres.h>
|
||||
@@ -37,7 +36,7 @@
|
||||
class DIALOG_3D_VIEW_OPTIONS_BASE : public DIALOG_SHIM
|
||||
{
|
||||
private:
|
||||
|
||||
|
||||
protected:
|
||||
wxStaticText* m_staticText3DRenderOpts;
|
||||
wxStaticBitmap* m_bitmapRealisticMode;
|
||||
@@ -76,16 +75,15 @@ class DIALOG_3D_VIEW_OPTIONS_BASE : public DIALOG_SHIM
|
||||
wxStdDialogButtonSizer* m_sdbSizer;
|
||||
wxButton* m_sdbSizerOK;
|
||||
wxButton* m_sdbSizerCancel;
|
||||
|
||||
|
||||
// Virtual event handlers, overide them in your derived class
|
||||
virtual void OnCheckRealisticMode( wxCommandEvent& event ) { event.Skip(); }
|
||||
|
||||
|
||||
|
||||
|
||||
public:
|
||||
|
||||
DIALOG_3D_VIEW_OPTIONS_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("3D Display Options"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 571,372 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
|
||||
|
||||
DIALOG_3D_VIEW_OPTIONS_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("3D Display Options"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
|
||||
~DIALOG_3D_VIEW_OPTIONS_BASE();
|
||||
|
||||
|
||||
};
|
||||
|
||||
#endif //__DIALOG_3D_VIEW_OPTION_BASE_H__
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2015-2016 Mario Luzeiro <mrluzeiro@ua.pt>
|
||||
* Copyright (C) 1992-2019 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
* Copyright (C) 1992-2020 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
|
||||
@@ -22,21 +22,28 @@
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#include <wx/colordlg.h>
|
||||
#include <wx/colour.h>
|
||||
#include <wx/filename.h>
|
||||
#include <wx/string.h>
|
||||
#include <wx/wupdlock.h>
|
||||
#include <wx/clipbrd.h>
|
||||
#include "eda_3d_viewer.h"
|
||||
|
||||
#include "../3d_viewer_id.h"
|
||||
#include "../common_ogl/cogl_att_list.h"
|
||||
#include <3d_actions.h>
|
||||
|
||||
#include <bitmaps.h>
|
||||
#include <dpi_scaling.h>
|
||||
#include <gestfich.h>
|
||||
#include <lru_cache.h>
|
||||
#include <pgm_base.h>
|
||||
#include <project.h>
|
||||
#include <wildcards_and_files_ext.h>
|
||||
#include <tool/tool_manager.h>
|
||||
#include <tool/common_control.h>
|
||||
|
||||
#include <hotkeys_basic.h>
|
||||
#include <wx/colordlg.h>
|
||||
#include <wx/colourdata.h>
|
||||
#include <wx/toolbar.h>
|
||||
|
||||
|
||||
@@ -80,8 +87,11 @@ static const wxChar keyBoardBodyColor_Red[] = wxT( "BoardBodyColor_Red" );
|
||||
static const wxChar keyBoardBodyColor_Green[] = wxT( "BoardBodyColor_Green" );
|
||||
static const wxChar keyBoardBodyColor_Blue[] = wxT( "BoardBodyColor_Blue" );
|
||||
|
||||
static const wxChar keyMousewheelPanning[] = wxT( "MousewheelPAN3D" );
|
||||
|
||||
static const wxChar keyShowRealisticMode[] = wxT( "ShowRealisticMode" );
|
||||
static const wxChar keyRenderEngine[] = wxT( "RenderEngine" );
|
||||
//static const wxChar keyRenderTextures[] = wxT( "Render_Textures" );
|
||||
static const wxChar keyRenderMaterial[] = wxT( "Render_Material" );
|
||||
|
||||
static const wxChar keyRenderOGL_ShowCopperTck[]= wxT( "Render_OGL_ShowCopperThickness" );
|
||||
@@ -122,18 +132,27 @@ BEGIN_EVENT_TABLE( EDA_3D_VIEWER, EDA_BASE_FRAME )
|
||||
|
||||
EVT_TOOL( ID_TOOL_SET_VISIBLE_ITEMS, EDA_3D_VIEWER::Install3DViewOptionDialog )
|
||||
|
||||
EVT_MENU( wxID_CLOSE, EDA_3D_VIEWER::Exit3DFrame )
|
||||
EVT_MENU( wxID_EXIT, EDA_3D_VIEWER::Exit3DFrame )
|
||||
EVT_MENU( ID_RENDER_CURRENT_VIEW, EDA_3D_VIEWER::OnRenderEngineSelection )
|
||||
EVT_MENU( ID_DISABLE_RAY_TRACING, EDA_3D_VIEWER::OnDisableRayTracing )
|
||||
|
||||
EVT_MENU_RANGE( ID_MENU3D_GRID, ID_MENU3D_GRID_END, EDA_3D_VIEWER::On3DGridSelection )
|
||||
EVT_MENU( wxID_ABOUT, EDA_BASE_FRAME::GetKicadAbout )
|
||||
|
||||
EVT_CLOSE( EDA_3D_VIEWER::OnCloseWindow )
|
||||
|
||||
EVT_UPDATE_UI( ID_RENDER_CURRENT_VIEW, EDA_3D_VIEWER::OnUpdateUIEngine )
|
||||
EVT_UPDATE_UI_RANGE( ID_MENU3D_FL_RENDER_MATERIAL_MODE_NORMAL,
|
||||
ID_MENU3D_FL_RENDER_MATERIAL_MODE_CAD_MODE,
|
||||
EDA_3D_VIEWER::OnUpdateUIMaterial )
|
||||
EVT_UPDATE_UI_RANGE( ID_MENU3D_FL_OPENGL_RENDER_COPPER_THICKNESS,
|
||||
ID_MENU3D_FL_OPENGL_RENDER_SHOW_MODEL_BBOX,
|
||||
EDA_3D_VIEWER::OnUpdateUIOpenGL )
|
||||
EVT_UPDATE_UI_RANGE( ID_MENU3D_FL_RAYTRACING_RENDER_SHADOWS,
|
||||
ID_MENU3D_FL_RAYTRACING_PROCEDURAL_TEXTURES,
|
||||
EDA_3D_VIEWER::OnUpdateUIRayTracing )
|
||||
|
||||
EVT_CLOSE( EDA_3D_VIEWER::OnCloseWindow )
|
||||
EVT_UPDATE_UI( ID_RENDER_CURRENT_VIEW, EDA_3D_VIEWER::OnUpdateUIEngine )
|
||||
EVT_UPDATE_UI( ID_MENU3D_AXIS_ONOFF, EDA_3D_VIEWER::OnUpdateUIAxis )
|
||||
END_EVENT_TABLE()
|
||||
|
||||
|
||||
@@ -142,7 +161,7 @@ EDA_3D_VIEWER::EDA_3D_VIEWER( KIWAY *aKiway, PCB_BASE_FRAME *aParent,
|
||||
KIWAY_PLAYER( aKiway, aParent,
|
||||
FRAME_PCB_DISPLAY3D, aTitle,
|
||||
wxDefaultPosition, wxDefaultSize,
|
||||
style, QUALIFIED_VIEWER3D_FRAMENAME( aParent ) )
|
||||
style, VIEWER3D_FRAMENAME )
|
||||
{
|
||||
wxLogTrace( m_logTrace, "EDA_3D_VIEWER::EDA_3D_VIEWER %s", aTitle );
|
||||
|
||||
@@ -177,15 +196,6 @@ EDA_3D_VIEWER::EDA_3D_VIEWER( KIWAY *aKiway, PCB_BASE_FRAME *aParent,
|
||||
// Some settings need the canvas
|
||||
loadCommonSettings();
|
||||
|
||||
// Create the manager
|
||||
m_toolManager = new TOOL_MANAGER;
|
||||
m_toolManager->SetEnvironment( nullptr, nullptr, nullptr, this );
|
||||
|
||||
// Register tools
|
||||
m_toolManager->RegisterTool( new COMMON_CONTROL );
|
||||
m_actions = new EDA_3D_ACTIONS();
|
||||
m_toolManager->InitTools();
|
||||
|
||||
CreateMenuBar();
|
||||
ReCreateMainToolbar();
|
||||
|
||||
@@ -216,7 +226,7 @@ EDA_3D_VIEWER::~EDA_3D_VIEWER()
|
||||
|
||||
// m_canvas delete will be called by wxWidget manager
|
||||
//delete m_canvas;
|
||||
//m_canvas = nullptr;
|
||||
//m_canvas = 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -256,12 +266,13 @@ void EDA_3D_VIEWER::OnCloseWindow( wxCloseEvent &event )
|
||||
|
||||
// m_canvas delete will be called by wxWidget manager
|
||||
//delete m_canvas;
|
||||
//m_canvas = nullptr;
|
||||
//m_canvas = 0;
|
||||
|
||||
Destroy();
|
||||
event.Skip( true );
|
||||
}
|
||||
|
||||
|
||||
#define ROT_ANGLE 10.0
|
||||
|
||||
void EDA_3D_VIEWER::Process_Special_Functions( wxCommandEvent &event )
|
||||
@@ -283,7 +294,7 @@ void EDA_3D_VIEWER::Process_Special_Functions( wxCommandEvent &event )
|
||||
break;
|
||||
|
||||
case ID_ROTATE3D_X_POS:
|
||||
m_settings.CameraGet().RotateX( glm::radians(ROT_ANGLE) );
|
||||
m_settings.CameraGet().RotateX( glm::radians( ROT_ANGLE ) );
|
||||
|
||||
if( m_settings.RenderEngineGet() == RENDER_ENGINE_OPENGL_LEGACY )
|
||||
m_canvas->Request_refresh();
|
||||
@@ -293,7 +304,7 @@ void EDA_3D_VIEWER::Process_Special_Functions( wxCommandEvent &event )
|
||||
break;
|
||||
|
||||
case ID_ROTATE3D_X_NEG:
|
||||
m_settings.CameraGet().RotateX( -glm::radians(ROT_ANGLE) );
|
||||
m_settings.CameraGet().RotateX( -glm::radians( ROT_ANGLE ) );
|
||||
|
||||
if( m_settings.RenderEngineGet() == RENDER_ENGINE_OPENGL_LEGACY )
|
||||
m_canvas->Request_refresh();
|
||||
@@ -360,7 +371,11 @@ void EDA_3D_VIEWER::Process_Special_Functions( wxCommandEvent &event )
|
||||
|
||||
case ID_ORTHO:
|
||||
m_settings.CameraGet().ToggleProjection();
|
||||
m_canvas->Request_refresh();
|
||||
|
||||
if( m_settings.RenderEngineGet() == RENDER_ENGINE_OPENGL_LEGACY )
|
||||
m_canvas->Request_refresh();
|
||||
else
|
||||
m_canvas->RenderRaytracingRequest();
|
||||
return;
|
||||
|
||||
case ID_TOOL_SCREENCOPY_TOCLIBBOARD:
|
||||
@@ -369,7 +384,7 @@ void EDA_3D_VIEWER::Process_Special_Functions( wxCommandEvent &event )
|
||||
takeScreenshot( event );
|
||||
return;
|
||||
|
||||
case ID_MENU3D_BGCOLOR_BOTTOM:
|
||||
case ID_MENU3D_BGCOLOR_BOTTOM_SELECTION:
|
||||
if( Set3DColorFromUser( m_settings.m_BgColorBot, _( "Background Color, Bottom" ),
|
||||
nullptr ) )
|
||||
{
|
||||
@@ -380,7 +395,7 @@ void EDA_3D_VIEWER::Process_Special_Functions( wxCommandEvent &event )
|
||||
}
|
||||
return;
|
||||
|
||||
case ID_MENU3D_BGCOLOR_TOP:
|
||||
case ID_MENU3D_BGCOLOR_TOP_SELECTION:
|
||||
if( Set3DColorFromUser( m_settings.m_BgColorTop, _( "Background Color, Top" ), nullptr ) )
|
||||
{
|
||||
if( m_settings.RenderEngineGet() == RENDER_ENGINE_OPENGL_LEGACY )
|
||||
@@ -390,23 +405,23 @@ void EDA_3D_VIEWER::Process_Special_Functions( wxCommandEvent &event )
|
||||
}
|
||||
return;
|
||||
|
||||
case ID_MENU3D_SILKSCREEN_COLOR:
|
||||
case ID_MENU3D_SILKSCREEN_COLOR_SELECTION:
|
||||
Set3DSilkScreenColorFromUser();
|
||||
return;
|
||||
|
||||
case ID_MENU3D_SOLDERMASK_COLOR:
|
||||
case ID_MENU3D_SOLDERMASK_COLOR_SELECTION:
|
||||
Set3DSolderMaskColorFromUser();
|
||||
return;
|
||||
|
||||
case ID_MENU3D_SOLDERPASTE_COLOR:
|
||||
case ID_MENU3D_SOLDERPASTE_COLOR_SELECTION:
|
||||
Set3DSolderPasteColorFromUser();
|
||||
return;
|
||||
|
||||
case ID_MENU3D_COPPER_COLOR:
|
||||
case ID_MENU3D_COPPER_COLOR_SELECTION:
|
||||
Set3DCopperColorFromUser();
|
||||
break;
|
||||
|
||||
case ID_MENU3D_PCB_BODY_COLOR:
|
||||
case ID_MENU3D_PCB_BODY_COLOR_SELECTION:
|
||||
Set3DBoardBodyColorFromUser();
|
||||
break;
|
||||
|
||||
@@ -549,6 +564,12 @@ void EDA_3D_VIEWER::Process_Special_Functions( wxCommandEvent &event )
|
||||
}
|
||||
return;
|
||||
|
||||
case ID_MENU3D_HELP_HOTKEY_SHOW_CURRENT_LIST:
|
||||
{
|
||||
DisplayHotKeys();
|
||||
}
|
||||
return;
|
||||
|
||||
default:
|
||||
wxFAIL_MSG( "Invalid event in EDA_3D_VIEWER::Process_Special_Functions()" );
|
||||
return;
|
||||
@@ -567,28 +588,29 @@ void EDA_3D_VIEWER::On3DGridSelection( wxCommandEvent &event )
|
||||
|
||||
switch( id )
|
||||
{
|
||||
case ID_MENU3D_GRID_NOGRID: m_settings.GridSet( GRID3D_NONE ); break;
|
||||
case ID_MENU3D_GRID_10_MM: m_settings.GridSet( GRID3D_10MM ); break;
|
||||
case ID_MENU3D_GRID_5_MM: m_settings.GridSet( GRID3D_5MM ); break;
|
||||
case ID_MENU3D_GRID_2P5_MM: m_settings.GridSet( GRID3D_2P5MM ); break;
|
||||
case ID_MENU3D_GRID_1_MM: m_settings.GridSet( GRID3D_1MM ); break;
|
||||
case ID_MENU3D_GRID_NOGRID:
|
||||
m_settings.GridSet( GRID3D_NONE );
|
||||
break;
|
||||
|
||||
default: wxFAIL_MSG( "Invalid event in EDA_3D_VIEWER::On3DGridSelection()" );
|
||||
}
|
||||
case ID_MENU3D_GRID_10_MM:
|
||||
m_settings.GridSet( GRID3D_10MM );
|
||||
break;
|
||||
|
||||
int menu_ids[]
|
||||
{
|
||||
ID_MENU3D_GRID_NOGRID, ID_MENU3D_GRID_10_MM, ID_MENU3D_GRID_5_MM,
|
||||
ID_MENU3D_GRID_2P5_MM, ID_MENU3D_GRID_1_MM
|
||||
};
|
||||
case ID_MENU3D_GRID_5_MM:
|
||||
m_settings.GridSet( GRID3D_5MM );
|
||||
break;
|
||||
|
||||
// Refresh checkmarks
|
||||
wxMenuBar* menuBar = GetMenuBar();
|
||||
case ID_MENU3D_GRID_2P5_MM:
|
||||
m_settings.GridSet( GRID3D_2P5MM );
|
||||
break;
|
||||
|
||||
for( int ii = 0; ii < 5; ii++ )
|
||||
{
|
||||
wxMenuItem* item = menuBar->FindItem( menu_ids[ii] );
|
||||
item->Check( menu_ids[ii] == id );
|
||||
case ID_MENU3D_GRID_1_MM:
|
||||
m_settings.GridSet( GRID3D_1MM );
|
||||
break;
|
||||
|
||||
default:
|
||||
wxFAIL_MSG( "Invalid event in EDA_3D_VIEWER::On3DGridSelection()" );
|
||||
return;
|
||||
}
|
||||
|
||||
if( m_canvas )
|
||||
@@ -627,11 +649,25 @@ void EDA_3D_VIEWER::ProcessZoom( wxCommandEvent &event )
|
||||
|
||||
switch( id )
|
||||
{
|
||||
case ID_ZOOM_PAGE: m_canvas->SetView3D( WXK_HOME ); break;
|
||||
case ID_ZOOM_IN: m_canvas->SetView3D( WXK_F1 ); break;
|
||||
case ID_ZOOM_OUT: m_canvas->SetView3D( WXK_F2 ); break;
|
||||
case ID_ZOOM_REDRAW: m_canvas->Request_refresh(); break;
|
||||
default: wxFAIL_MSG( "Invalid event in EDA_3D_VIEWER::ProcessZoom()" );
|
||||
case ID_ZOOM_PAGE:
|
||||
m_canvas->SetView3D( WXK_HOME );
|
||||
break;
|
||||
|
||||
case ID_ZOOM_IN:
|
||||
m_canvas->SetView3D( WXK_F1 );
|
||||
break;
|
||||
|
||||
case ID_ZOOM_OUT:
|
||||
m_canvas->SetView3D( WXK_F2 );
|
||||
break;
|
||||
|
||||
case ID_ZOOM_REDRAW:
|
||||
m_canvas->Request_refresh();
|
||||
break;
|
||||
|
||||
default:
|
||||
wxFAIL_MSG( "Invalid event in EDA_3D_VIEWER::ProcessZoom()" );
|
||||
return;
|
||||
}
|
||||
|
||||
m_canvas->DisplayStatus();
|
||||
@@ -647,11 +683,11 @@ void EDA_3D_VIEWER::OnDisableRayTracing( wxCommandEvent& aEvent )
|
||||
}
|
||||
|
||||
|
||||
void EDA_3D_VIEWER::OnActivate( wxActivateEvent &event )
|
||||
void EDA_3D_VIEWER::OnActivate( wxActivateEvent &aEvent )
|
||||
{
|
||||
wxLogTrace( m_logTrace, "EDA_3D_VIEWER::OnActivate" );
|
||||
|
||||
if( m_canvas )
|
||||
if( aEvent.GetActive() && m_canvas )
|
||||
{
|
||||
// Reload data if 3D frame shows a board,
|
||||
// because it can be changed since last frame activation
|
||||
@@ -662,17 +698,17 @@ void EDA_3D_VIEWER::OnActivate( wxActivateEvent &event )
|
||||
m_canvas->SetFocus();
|
||||
}
|
||||
|
||||
event.Skip(); // required under wxMAC
|
||||
aEvent.Skip(); // required under wxMAC
|
||||
}
|
||||
|
||||
|
||||
void EDA_3D_VIEWER::OnSetFocus(wxFocusEvent &event)
|
||||
void EDA_3D_VIEWER::OnSetFocus( wxFocusEvent& aEvent )
|
||||
{
|
||||
// Activates again the focus of the canvas so it will catch mouse and key events
|
||||
if( m_canvas )
|
||||
m_canvas->SetFocus();
|
||||
|
||||
event.Skip();
|
||||
aEvent.Skip();
|
||||
}
|
||||
|
||||
|
||||
@@ -874,12 +910,12 @@ void EDA_3D_VIEWER::SaveSettings( wxConfigBase *aCfg )
|
||||
}
|
||||
|
||||
|
||||
void EDA_3D_VIEWER::CommonSettingsChanged( bool aEnvVarsChanged )
|
||||
void EDA_3D_VIEWER::CommonSettingsChanged()
|
||||
{
|
||||
wxLogTrace( m_logTrace, "EDA_3D_VIEWER::CommonSettingsChanged" );
|
||||
|
||||
// Regen menu bars, etc
|
||||
EDA_BASE_FRAME::CommonSettingsChanged( aEnvVarsChanged );
|
||||
EDA_BASE_FRAME::CommonSettingsChanged();
|
||||
|
||||
// There is no base class that handles toolbars for this frame
|
||||
ReCreateMainToolbar();
|
||||
@@ -890,6 +926,20 @@ void EDA_3D_VIEWER::CommonSettingsChanged( bool aEnvVarsChanged )
|
||||
}
|
||||
|
||||
|
||||
void EDA_3D_VIEWER::OnLeftClick( wxDC *DC, const wxPoint &MousePos )
|
||||
{
|
||||
wxLogTrace( m_logTrace, "EDA_3D_VIEWER::OnLeftClick" );
|
||||
// Do nothing
|
||||
}
|
||||
|
||||
|
||||
void EDA_3D_VIEWER::OnRightClick( const wxPoint &MousePos, wxMenu *PopMenu )
|
||||
{
|
||||
wxLogTrace( m_logTrace, "EDA_3D_VIEWER::OnRightClick" );
|
||||
// Do nothing
|
||||
}
|
||||
|
||||
|
||||
void EDA_3D_VIEWER::OnKeyEvent( wxKeyEvent& event )
|
||||
{
|
||||
if( m_canvas )
|
||||
@@ -899,6 +949,13 @@ void EDA_3D_VIEWER::OnKeyEvent( wxKeyEvent& event )
|
||||
}
|
||||
|
||||
|
||||
void EDA_3D_VIEWER::RedrawActiveWindow( wxDC *DC, bool EraseBg )
|
||||
{
|
||||
wxLogTrace( m_logTrace, "EDA_3D_VIEWER::RedrawActiveWindow" );
|
||||
// Do nothing
|
||||
}
|
||||
|
||||
|
||||
void EDA_3D_VIEWER::takeScreenshot( wxCommandEvent& event )
|
||||
{
|
||||
wxString fullFileName;
|
||||
@@ -934,6 +991,17 @@ void EDA_3D_VIEWER::takeScreenshot( wxCommandEvent& event )
|
||||
|
||||
fullFileName = m_defaultSaveScreenshotFileName.GetFullPath();
|
||||
|
||||
wxFileName fn = fullFileName;
|
||||
|
||||
if( !fn.IsDirWritable() )
|
||||
{
|
||||
wxString msg;
|
||||
|
||||
msg.Printf( _( "Insufficient permissions required to save file\n%s" ), fullFileName );
|
||||
wxMessageBox( msg, _( "Error" ), wxOK | wxICON_ERROR, this );
|
||||
return;
|
||||
}
|
||||
|
||||
// Be sure the screen area destroyed by the file dialog is redrawn
|
||||
// before making a screen copy.
|
||||
// Without this call, under Linux the screen refresh is made to late.
|
||||
@@ -1015,118 +1083,129 @@ bool EDA_3D_VIEWER::Set3DColorFromUser( SFVEC3D &aColor, const wxString& aTitle,
|
||||
|
||||
bool EDA_3D_VIEWER::Set3DSilkScreenColorFromUser()
|
||||
{
|
||||
CUSTOM_COLORS_LIST colors;
|
||||
CUSTOM_COLORS_LIST definedColors;
|
||||
definedColors.push_back( CUSTOM_COLOR_ITEM( 241.0/255.0, 241.0/255.0, 241.0/255.0, "White" ) );
|
||||
definedColors.push_back( CUSTOM_COLOR_ITEM( 4.0/255.0, 18.0/255.0, 21.0/255.0, "Dark" ) );
|
||||
|
||||
colors.push_back( CUSTOM_COLOR_ITEM( 241.0/255.0, 241.0/255.0, 241.0/255.0, "White" ) );
|
||||
colors.push_back( CUSTOM_COLOR_ITEM( 4.0/255.0, 18.0/255.0, 21.0/255.0, "Dark" ) );
|
||||
bool change = Set3DColorFromUser( m_settings.m_SilkScreenColor,
|
||||
_( "Solder Mask Color" ), &definedColors );
|
||||
|
||||
if( Set3DColorFromUser( m_settings.m_SilkScreenColor, _( "Silkscreen Color" ), &colors ) )
|
||||
{
|
||||
if( change )
|
||||
NewDisplay( true );
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
return change;
|
||||
}
|
||||
|
||||
|
||||
bool EDA_3D_VIEWER::Set3DSolderMaskColorFromUser()
|
||||
{
|
||||
CUSTOM_COLORS_LIST colors;
|
||||
CUSTOM_COLORS_LIST definedColors;
|
||||
|
||||
colors.push_back( CUSTOM_COLOR_ITEM( 20/255.0, 51/255.0, 36/255.0, "Green" ) );
|
||||
colors.push_back( CUSTOM_COLOR_ITEM( 91/255.0, 168/255.0, 12/255.0, "Light Green" ) );
|
||||
colors.push_back( CUSTOM_COLOR_ITEM( 13/255.0, 104/255.0, 11/255.0, "Saturated Green" ) );
|
||||
colors.push_back( CUSTOM_COLOR_ITEM( 181/255.0, 19/255.0, 21/255.0, "Red" ) );
|
||||
colors.push_back( CUSTOM_COLOR_ITEM( 239/255.0, 53/255.0, 41/255.0, "Red Light Orange" ) );
|
||||
colors.push_back( CUSTOM_COLOR_ITEM( 210/255.0, 40/255.0, 14/255.0, "Red 2" ) );
|
||||
colors.push_back( CUSTOM_COLOR_ITEM( 2/255.0, 59/255.0, 162/255.0, "Blue" ) );
|
||||
colors.push_back( CUSTOM_COLOR_ITEM( 54/255.0, 79/255.0, 116/255.0, "Light blue 1" ) );
|
||||
colors.push_back( CUSTOM_COLOR_ITEM( 61/255.0, 85/255.0, 130/255.0, "Light blue 2" ) );
|
||||
colors.push_back( CUSTOM_COLOR_ITEM( 21/255.0, 70/255.0, 80/255.0, "Green blue (dark)" ) );
|
||||
colors.push_back( CUSTOM_COLOR_ITEM( 11/255.0, 11/255.0, 11/255.0, "Black" ) );
|
||||
colors.push_back( CUSTOM_COLOR_ITEM( 245/255.0, 245/255.0, 245/255.0, "White" ) );
|
||||
colors.push_back( CUSTOM_COLOR_ITEM( 119/255.0, 31/255.0, 91/255.0, "Purple" ) );
|
||||
colors.push_back( CUSTOM_COLOR_ITEM( 32/255.0, 2/255.0, 53/255.0, "Purple Dark" ) );
|
||||
definedColors.push_back( CUSTOM_COLOR_ITEM( 20/255.0, 51/255.0, 36/255.0, "Green" ) );
|
||||
definedColors.push_back( CUSTOM_COLOR_ITEM( 91/255.0, 168/255.0, 12/255.0, "Light Green" ) );
|
||||
definedColors.push_back( CUSTOM_COLOR_ITEM( 13/255.0, 104/255.0, 11/255.0,
|
||||
"Saturated Green" ) );
|
||||
definedColors.push_back( CUSTOM_COLOR_ITEM( 181/255.0, 19/255.0, 21/255.0, "Red" ) );
|
||||
definedColors.push_back( CUSTOM_COLOR_ITEM( 239/255.0, 53/255.0, 41/255.0,
|
||||
"Red Light Orange" ) );
|
||||
definedColors.push_back( CUSTOM_COLOR_ITEM( 210/255.0, 40/255.0, 14/255.0, "Red 2" ) );
|
||||
definedColors.push_back( CUSTOM_COLOR_ITEM( 2/255.0, 59/255.0, 162/255.0, "Blue" ) );
|
||||
definedColors.push_back( CUSTOM_COLOR_ITEM( 54/255.0, 79/255.0, 116/255.0, "Light blue 1" ) );
|
||||
definedColors.push_back( CUSTOM_COLOR_ITEM( 61/255.0, 85/255.0, 130/255.0, "Light blue 2" ) );
|
||||
definedColors.push_back( CUSTOM_COLOR_ITEM( 21/255.0, 70/255.0, 80/255.0,
|
||||
"Green blue (dark)" ) );
|
||||
definedColors.push_back( CUSTOM_COLOR_ITEM( 11/255.0, 11/255.0, 11/255.0, "Black" ) );
|
||||
definedColors.push_back( CUSTOM_COLOR_ITEM( 245/255.0, 245/255.0, 245/255.0, "White" ) );
|
||||
definedColors.push_back( CUSTOM_COLOR_ITEM( 119/255.0, 31/255.0, 91/255.0, "Purple" ) );
|
||||
definedColors.push_back( CUSTOM_COLOR_ITEM( 32/255.0, 2/255.0, 53/255.0, "Purple Dark" ) );
|
||||
|
||||
if( Set3DColorFromUser( m_settings.m_SolderMaskColor, _( "Solder Mask Color" ), &colors ) )
|
||||
{
|
||||
bool change = Set3DColorFromUser( m_settings.m_SolderMaskColor,
|
||||
_( "Solder Mask Color" ),
|
||||
&definedColors );
|
||||
|
||||
if( change )
|
||||
NewDisplay( true );
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
return change;
|
||||
}
|
||||
|
||||
|
||||
bool EDA_3D_VIEWER::Set3DCopperColorFromUser()
|
||||
{
|
||||
CUSTOM_COLORS_LIST colors;
|
||||
CUSTOM_COLORS_LIST definedColors;
|
||||
|
||||
colors.push_back( CUSTOM_COLOR_ITEM( 184/255.0, 115/255.0, 50/255.0, "Copper" ) );
|
||||
colors.push_back( CUSTOM_COLOR_ITEM( 178/255.0, 156/255.0, 0.0, "Gold" ) );
|
||||
colors.push_back( CUSTOM_COLOR_ITEM( 213/255.0, 213/255.0, 213/255.0, "Silver" ) );
|
||||
colors.push_back( CUSTOM_COLOR_ITEM( 160/255.0, 160/255.0, 160/255.0, "Tin" ) );
|
||||
definedColors.push_back( CUSTOM_COLOR_ITEM( 184/255.0, 115/255.0, 50/255.0, "Copper" ) );
|
||||
definedColors.push_back( CUSTOM_COLOR_ITEM( 178/255.0, 156/255.0, 0.0, "Gold" ) );
|
||||
definedColors.push_back( CUSTOM_COLOR_ITEM( 213/255.0, 213/255.0, 213/255.0, "Silver" ) );
|
||||
definedColors.push_back( CUSTOM_COLOR_ITEM( 160/255.0, 160/255.0, 160/255.0, "Tin" ) );
|
||||
|
||||
if( Set3DColorFromUser( m_settings.m_CopperColor, _( "Copper Color" ), &colors ) )
|
||||
{
|
||||
bool change = Set3DColorFromUser( m_settings.m_CopperColor, _( "Copper Color" ),
|
||||
&definedColors );
|
||||
|
||||
if( change )
|
||||
NewDisplay( true );
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
return change;
|
||||
}
|
||||
|
||||
|
||||
bool EDA_3D_VIEWER::Set3DBoardBodyColorFromUser()
|
||||
{
|
||||
CUSTOM_COLORS_LIST colors;
|
||||
CUSTOM_COLORS_LIST definedColors;
|
||||
|
||||
colors.push_back( CUSTOM_COLOR_ITEM( 51/255.0, 43/255.0, 22/255.0, "FR4 natural, dark" ) );
|
||||
colors.push_back( CUSTOM_COLOR_ITEM( 109/255.0, 116/255.0, 75/255.0, "FR4 natural" ) );
|
||||
colors.push_back( CUSTOM_COLOR_ITEM( 78/255.0, 14/255.0, 5/255.0, "brown/red" ) );
|
||||
colors.push_back( CUSTOM_COLOR_ITEM( 146/255.0, 99/255.0, 47/255.0, "brown 1" ) );
|
||||
colors.push_back( CUSTOM_COLOR_ITEM( 160/255.0, 123/255.0, 54/255.0, "brown 2" ) );
|
||||
colors.push_back( CUSTOM_COLOR_ITEM( 146/255.0, 99/255.0, 47/255.0, "brown 3" ) );
|
||||
colors.push_back( CUSTOM_COLOR_ITEM( 63/255.0, 126/255.0, 71/255.0, "green 1" ) );
|
||||
colors.push_back( CUSTOM_COLOR_ITEM( 117/255.0, 122/255.0, 90/255.0, "green 2" ) );
|
||||
definedColors.push_back( CUSTOM_COLOR_ITEM( 51/255.0, 43/255.0, 22/255.0,
|
||||
"FR4 natural, dark" ) );
|
||||
definedColors.push_back( CUSTOM_COLOR_ITEM( 109/255.0, 116/255.0, 75/255.0, "FR4 natural" ) );
|
||||
definedColors.push_back( CUSTOM_COLOR_ITEM( 78/255.0, 14/255.0, 5/255.0, "brown/red" ) );
|
||||
definedColors.push_back( CUSTOM_COLOR_ITEM( 146/255.0, 99/255.0, 47/255.0, "brown 1" ) );
|
||||
definedColors.push_back( CUSTOM_COLOR_ITEM( 160/255.0, 123/255.0, 54/255.0, "brown 2" ) );
|
||||
definedColors.push_back( CUSTOM_COLOR_ITEM( 146/255.0, 99/255.0, 47/255.0, "brown 3" ) );
|
||||
definedColors.push_back( CUSTOM_COLOR_ITEM( 63/255.0, 126/255.0, 71/255.0, "green 1" ) );
|
||||
definedColors.push_back( CUSTOM_COLOR_ITEM( 117/255.0, 122/255.0, 90/255.0, "green 2" ) );
|
||||
|
||||
if( Set3DColorFromUser( m_settings.m_BoardBodyColor, _( "Board Body Color" ), &colors ) )
|
||||
{
|
||||
bool change = Set3DColorFromUser( m_settings.m_BoardBodyColor, _( "Board Body Color" ),
|
||||
&definedColors );
|
||||
if( change )
|
||||
NewDisplay( true );
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
return change;
|
||||
}
|
||||
|
||||
|
||||
bool EDA_3D_VIEWER::Set3DSolderPasteColorFromUser()
|
||||
{
|
||||
CUSTOM_COLORS_LIST colors;
|
||||
CUSTOM_COLORS_LIST definedColors;
|
||||
|
||||
colors.push_back( CUSTOM_COLOR_ITEM( 128/255.0, 128/255.0, 128/255.0, "grey" ) );
|
||||
colors.push_back( CUSTOM_COLOR_ITEM( 213/255.0, 213/255.0, 213/255.0, "Silver" ) );
|
||||
colors.push_back( CUSTOM_COLOR_ITEM( 90/255.0, 90/255.0, 90/255.0, "grey 2" ) );
|
||||
definedColors.push_back( CUSTOM_COLOR_ITEM( 128/255.0, 128/255.0, 128/255.0, "grey" ) );
|
||||
definedColors.push_back( CUSTOM_COLOR_ITEM( 213/255.0, 213/255.0, 213/255.0, "Silver" ) );
|
||||
definedColors.push_back( CUSTOM_COLOR_ITEM( 90/255.0, 90/255.0, 90/255.0, "grey 2" ) );
|
||||
|
||||
if( Set3DColorFromUser( m_settings.m_SolderPasteColor, _( "Solder Paste Color" ), &colors ) )
|
||||
{
|
||||
bool change = Set3DColorFromUser( m_settings.m_SolderPasteColor,
|
||||
_( "Solder Paste Color" ), &definedColors );
|
||||
|
||||
if( change )
|
||||
NewDisplay( true );
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
return change;
|
||||
}
|
||||
|
||||
|
||||
void EDA_3D_VIEWER::OnUpdateUIEngine( wxUpdateUIEvent& aEvent )
|
||||
{
|
||||
wxLogTrace( m_logTrace, "EDA_3D_VIEWER::OnUpdateUIEngine %s %s",
|
||||
( !m_disable_ray_tracing ) ? "enable" : "disable",
|
||||
( m_settings.RenderEngineGet() == RENDER_ENGINE_RAYTRACING ) ?
|
||||
"Ray Trace" : "OpenGL Legacy" );
|
||||
|
||||
aEvent.Enable( !m_disable_ray_tracing );
|
||||
aEvent.Check( m_settings.RenderEngineGet() != RENDER_ENGINE_OPENGL_LEGACY );
|
||||
}
|
||||
|
||||
|
||||
void EDA_3D_VIEWER::OnUpdateUIMaterial( wxUpdateUIEvent& aEvent )
|
||||
{
|
||||
wxLogTrace( m_logTrace, "EDA_3D_VIEWER::OnUpdateUIMaterial() id %d", aEvent.GetId() );
|
||||
|
||||
// Set the state of toggle menus according to the current display options
|
||||
switch( aEvent.GetId() )
|
||||
{
|
||||
@@ -1148,6 +1227,74 @@ void EDA_3D_VIEWER::OnUpdateUIMaterial( wxUpdateUIEvent& aEvent )
|
||||
}
|
||||
|
||||
|
||||
void EDA_3D_VIEWER::OnUpdateUIOpenGL( wxUpdateUIEvent& aEvent )
|
||||
{
|
||||
wxLogTrace( m_logTrace, "EDA_3D_VIEWER::OnUpdateUIOpenGL() id %d", aEvent.GetId() );
|
||||
|
||||
// OpenGL
|
||||
switch( aEvent.GetId() )
|
||||
{
|
||||
case ID_MENU3D_FL_OPENGL_RENDER_COPPER_THICKNESS:
|
||||
aEvent.Check( m_settings.GetFlag( FL_RENDER_OPENGL_COPPER_THICKNESS ) );
|
||||
break;
|
||||
|
||||
case ID_MENU3D_FL_OPENGL_RENDER_SHOW_MODEL_BBOX:
|
||||
aEvent.Check( m_settings.GetFlag( FL_RENDER_OPENGL_SHOW_MODEL_BBOX ) );
|
||||
break;
|
||||
|
||||
default:
|
||||
wxFAIL_MSG( "Invalid event in EDA_3D_VIEWER::OnUpdateUIOpenGL()" );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void EDA_3D_VIEWER::OnUpdateUIRayTracing( wxUpdateUIEvent& aEvent )
|
||||
{
|
||||
wxLogTrace( m_logTrace, "EDA_3D_VIEWER::OnUpdateUIRayTracing() id %d", aEvent.GetId() );
|
||||
|
||||
// Raytracing
|
||||
switch( aEvent.GetId() )
|
||||
{
|
||||
case ID_MENU3D_FL_RAYTRACING_RENDER_SHADOWS:
|
||||
aEvent.Check( m_settings.GetFlag( FL_RENDER_RAYTRACING_SHADOWS ) );
|
||||
break;
|
||||
|
||||
case ID_MENU3D_FL_RAYTRACING_BACKFLOOR:
|
||||
aEvent.Check( m_settings.GetFlag( FL_RENDER_RAYTRACING_BACKFLOOR ) );
|
||||
break;
|
||||
|
||||
case ID_MENU3D_FL_RAYTRACING_REFRACTIONS:
|
||||
aEvent.Check( m_settings.GetFlag( FL_RENDER_RAYTRACING_REFRACTIONS ) );
|
||||
break;
|
||||
|
||||
case ID_MENU3D_FL_RAYTRACING_REFLECTIONS:
|
||||
aEvent.Check( m_settings.GetFlag( FL_RENDER_RAYTRACING_REFLECTIONS ) );
|
||||
break;
|
||||
|
||||
case ID_MENU3D_FL_RAYTRACING_POST_PROCESSING:
|
||||
aEvent.Check( m_settings.GetFlag( FL_RENDER_RAYTRACING_POST_PROCESSING ) );
|
||||
break;
|
||||
|
||||
case ID_MENU3D_FL_RAYTRACING_ANTI_ALIASING:
|
||||
aEvent.Check( m_settings.GetFlag( FL_RENDER_RAYTRACING_ANTI_ALIASING ) );
|
||||
break;
|
||||
|
||||
case ID_MENU3D_FL_RAYTRACING_PROCEDURAL_TEXTURES:
|
||||
aEvent.Check( m_settings.GetFlag( FL_RENDER_RAYTRACING_PROCEDURAL_TEXTURES ) );
|
||||
break;
|
||||
|
||||
default:
|
||||
wxFAIL_MSG( "Invalid event in EDA_3D_VIEWER::OnUpdateUIMaterial()" );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void EDA_3D_VIEWER::OnUpdateUIAxis( wxUpdateUIEvent& aEvent )
|
||||
{
|
||||
aEvent.Check( m_settings.GetFlag( FL_AXIS ) );
|
||||
}
|
||||
|
||||
|
||||
void EDA_3D_VIEWER::loadCommonSettings()
|
||||
{
|
||||
wxCHECK_RET( m_canvas, "Cannot load settings to null canvas" );
|
||||
|
||||
@@ -39,16 +39,9 @@
|
||||
#include <../common/dialogs/dialog_color_picker.h> // for CUSTOM_COLORS_LIST definition
|
||||
|
||||
|
||||
/// A variable name whose value holds the path of 3D shape files.
|
||||
/// Currently an environment variable, eventually a project variable.
|
||||
#define KISYS3DMOD wxT( "KISYS3DMOD" )
|
||||
|
||||
|
||||
#define KICAD_DEFAULT_3D_DRAWFRAME_STYLE (wxDEFAULT_FRAME_STYLE | wxWANTS_CHARS)
|
||||
|
||||
#define VIEWER3D_FRAMENAME wxT( "Viewer3DFrameName" )
|
||||
#define QUALIFIED_VIEWER3D_FRAMENAME( parent ) \
|
||||
( wxString( VIEWER3D_FRAMENAME ) + wxT( ":" ) + parent->GetName() )
|
||||
|
||||
/**
|
||||
* Create and handle a window for the 3d viewer connected to a Kiway and a pcbboard
|
||||
@@ -90,11 +83,30 @@ class EDA_3D_VIEWER : public KIWAY_PLAYER
|
||||
*/
|
||||
void NewDisplay( bool aForceImmediateRedraw = false );
|
||||
|
||||
/**
|
||||
* Set the default file name (eg: to be suggested to a screenshot)
|
||||
* @param aFn = file name to assign
|
||||
*/
|
||||
void SetDefaultFileName( const wxString& aFn )
|
||||
{
|
||||
m_defaultSaveScreenshotFileName = aFn;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the default suggested file name
|
||||
*/
|
||||
const wxFileName& GetDefaultFileName() const { return m_defaultSaveScreenshotFileName; }
|
||||
|
||||
/**
|
||||
* @return current settings
|
||||
*/
|
||||
CINFO3D_VISU &GetSettings() { return m_settings; }
|
||||
|
||||
/**
|
||||
* Return a structure containing currently used hotkey mapping.
|
||||
*/
|
||||
EDA_HOTKEY_CONFIG* GetHotkeyConfig() const;
|
||||
|
||||
/**
|
||||
* Get a SFVEC3D from a wx colour dialog
|
||||
* @param aColor is the SFVEC3D to change
|
||||
@@ -149,7 +161,7 @@ class EDA_3D_VIEWER : public KIWAY_PLAYER
|
||||
* need to do this manually from the PCB frame because the 3D viewer isn't
|
||||
* updated via the #KIWAY.
|
||||
*/
|
||||
void CommonSettingsChanged( bool aEnvVarsChanged ) override;
|
||||
void CommonSettingsChanged() override;
|
||||
|
||||
private:
|
||||
/// Called when user press the File->Exit
|
||||
@@ -164,6 +176,12 @@ class EDA_3D_VIEWER : public KIWAY_PLAYER
|
||||
void OnRenderEngineSelection( wxCommandEvent &event );
|
||||
void OnDisableRayTracing( wxCommandEvent& aEvent );
|
||||
|
||||
void OnUpdateUIEngine( wxUpdateUIEvent& aEvent );
|
||||
void OnUpdateUIMaterial( wxUpdateUIEvent& aEvent );
|
||||
void OnUpdateUIOpenGL( wxUpdateUIEvent& aEvent );
|
||||
void OnUpdateUIRayTracing( wxUpdateUIEvent& aEvent );
|
||||
void OnUpdateUIAxis( wxUpdateUIEvent& aEvent );
|
||||
|
||||
void ProcessZoom( wxCommandEvent &event );
|
||||
|
||||
void OnActivate( wxActivateEvent &event );
|
||||
@@ -172,22 +190,30 @@ class EDA_3D_VIEWER : public KIWAY_PLAYER
|
||||
|
||||
void Install3DViewOptionDialog( wxCommandEvent &event );
|
||||
|
||||
void OnUpdateUIEngine( wxUpdateUIEvent& aEvent );
|
||||
void OnUpdateUIMaterial( wxUpdateUIEvent& aEvent );
|
||||
|
||||
void CreateMenuBar();
|
||||
|
||||
void DisplayHotKeys()
|
||||
{
|
||||
DisplayHotkeyList( this, GetHotkeyConfig() );
|
||||
}
|
||||
|
||||
/**
|
||||
* Equivalent of EDA_DRAW_FRAME::ReCreateHToolbar
|
||||
*/
|
||||
void ReCreateMainToolbar();
|
||||
|
||||
void SetToolbars();
|
||||
|
||||
void SaveSettings( wxConfigBase *aCfg ) override;
|
||||
|
||||
void LoadSettings( wxConfigBase *aCfg ) override;
|
||||
|
||||
void OnLeftClick( wxDC *DC, const wxPoint &MousePos );
|
||||
void OnRightClick( const wxPoint &MousePos, wxMenu *PopMenu );
|
||||
void OnKeyEvent( wxKeyEvent& event );
|
||||
|
||||
void RedrawActiveWindow( wxDC *DC, bool EraseBg );
|
||||
|
||||
/**
|
||||
* Create a Screenshot of the current 3D view.
|
||||
* Output file format is png or jpeg, or image is copied to the clipboard
|
||||
@@ -208,13 +234,22 @@ class EDA_3D_VIEWER : public KIWAY_PLAYER
|
||||
*/
|
||||
void loadCommonSettings();
|
||||
|
||||
wxFileName m_defaultSaveScreenshotFileName;
|
||||
/**
|
||||
* Filename to propose for save a screenshot
|
||||
*/
|
||||
wxFileName m_defaultSaveScreenshotFileName;
|
||||
|
||||
wxAuiToolBar* m_mainToolBar;
|
||||
EDA_3D_CANVAS* m_canvas;
|
||||
CINFO3D_VISU m_settings;
|
||||
/**
|
||||
* The canvas where the openGL context will be rendered
|
||||
*/
|
||||
EDA_3D_CANVAS *m_canvas;
|
||||
|
||||
bool m_disable_ray_tracing;
|
||||
/**
|
||||
* Store all the settings and options to be used by the renders
|
||||
*/
|
||||
CINFO3D_VISU m_settings;
|
||||
|
||||
bool m_disable_ray_tracing;
|
||||
|
||||
/**
|
||||
* Trace mask used to enable or disable the trace output of this class.
|
||||
|
||||
@@ -0,0 +1,105 @@
|
||||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 1992-2018 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 hotkeys.cpp
|
||||
* @brief list of hotkeys used in 3D viewer
|
||||
*/
|
||||
|
||||
#include <hotkeys_basic.h>
|
||||
#include "eda_3d_viewer.h"
|
||||
#include "../3d_viewer_id.h"
|
||||
|
||||
// Define 3D Viewer Hotkeys
|
||||
static EDA_HOTKEY HkHotkeysHelp( _HKI( "List Hotkeys" ), HK_HELP, GR_KB_CTRL + WXK_F1 );
|
||||
static EDA_HOTKEY Hk3D_PivotCenter( _HKI( "Center pivot rotation (Middle mouse click)" ), 0, WXK_SPACE );
|
||||
static EDA_HOTKEY Hk3D_MoveLeft( _HKI( "Move board Left" ), ID_POPUP_MOVE3D_LEFT, WXK_LEFT );
|
||||
static EDA_HOTKEY Hk3D_MoveRight( _HKI( "Move board Right" ), ID_POPUP_MOVE3D_RIGHT, WXK_RIGHT );
|
||||
static EDA_HOTKEY Hk3D_MoveUp( _HKI( "Move board Up" ), ID_POPUP_MOVE3D_UP, WXK_UP );
|
||||
static EDA_HOTKEY Hk3D_MoveDown( _HKI( "Move board Down" ), ID_POPUP_MOVE3D_DOWN, WXK_DOWN );
|
||||
static EDA_HOTKEY Hk3D_HomeView( _HKI( "Home view" ), 0, WXK_HOME );
|
||||
static EDA_HOTKEY Hk3D_ResetView( _HKI( "Reset view" ), 0, 'R' );
|
||||
|
||||
static EDA_HOTKEY Hk3D_ViewFront( _HKI( "View Front" ), ID_POPUP_VIEW_YPOS, 'Y' );
|
||||
static EDA_HOTKEY Hk3D_ViewBack( _HKI( "View Back" ), ID_POPUP_VIEW_YNEG, GR_KB_SHIFT + 'Y' );
|
||||
static EDA_HOTKEY Hk3D_ViewLeft( _HKI( "View Left" ), ID_POPUP_VIEW_XNEG, GR_KB_SHIFT + 'X' );
|
||||
static EDA_HOTKEY Hk3D_ViewRight( _HKI( "View Right" ), ID_POPUP_VIEW_XPOS, 'X' );
|
||||
static EDA_HOTKEY Hk3D_ViewTop( _HKI( "View Top" ), ID_POPUP_VIEW_ZPOS, 'Z' );
|
||||
static EDA_HOTKEY Hk3D_ViewBot( _HKI( "View Bot" ), ID_POPUP_VIEW_ZNEG, GR_KB_SHIFT + 'Z' );
|
||||
|
||||
static EDA_HOTKEY Hk3D_Rotate45axisZ( _HKI( "Rotate 45 degrees over Z axis" ), 0, WXK_TAB );
|
||||
static EDA_HOTKEY Hk3D_ZoomIn( _HKI( "Zoom in " ), ID_POPUP_ZOOMIN, WXK_F1 );
|
||||
static EDA_HOTKEY Hk3D_ZoomOut( _HKI( "Zoom out" ), ID_POPUP_ZOOMOUT, WXK_F2 );
|
||||
static EDA_HOTKEY Hk3D_AttributesTHT( _HKI( "Toggle 3D models with type Through Hole" ), 0, 'T' );
|
||||
static EDA_HOTKEY Hk3D_AttributesSMD( _HKI( "Toggle 3D models with type Surface Mount" ), 0, 'S' );
|
||||
static EDA_HOTKEY Hk3D_AttributesVirtual( _HKI( "Toggle 3D models with type Virtual" ), 0, 'V' );
|
||||
|
||||
static wxString viewer3DSectionTitle( _HKI( "Viewer 3D" ) );
|
||||
|
||||
// List of hotkey descriptors for the 3D Viewer only
|
||||
// !TODO: this is used just for help menu, the structured are not used yet in the viewer
|
||||
static EDA_HOTKEY* viewer3d_Hotkey_List[] =
|
||||
{
|
||||
&HkHotkeysHelp,
|
||||
&Hk3D_PivotCenter,
|
||||
&Hk3D_MoveLeft,
|
||||
&Hk3D_MoveRight,
|
||||
&Hk3D_MoveUp,
|
||||
&Hk3D_MoveDown,
|
||||
&Hk3D_HomeView,
|
||||
&Hk3D_ResetView,
|
||||
&Hk3D_ViewFront,
|
||||
&Hk3D_ViewBack,
|
||||
&Hk3D_ViewLeft,
|
||||
&Hk3D_ViewRight,
|
||||
&Hk3D_ViewTop,
|
||||
&Hk3D_ViewBot,
|
||||
&Hk3D_Rotate45axisZ,
|
||||
&Hk3D_ZoomIn,
|
||||
&Hk3D_ZoomOut,
|
||||
&Hk3D_AttributesTHT,
|
||||
&Hk3D_AttributesSMD,
|
||||
&Hk3D_AttributesVirtual,
|
||||
NULL
|
||||
};
|
||||
|
||||
|
||||
// list of sections and corresponding hotkey list for the 3D Viewer
|
||||
// (used to list current hotkeys)
|
||||
static struct EDA_HOTKEY_CONFIG s_3DViewer_Hotkeys_Descr[] =
|
||||
{
|
||||
{ &g_CommonSectionTag, viewer3d_Hotkey_List, &viewer3DSectionTitle },
|
||||
{ NULL, NULL, NULL }
|
||||
};
|
||||
|
||||
|
||||
EDA_HOTKEY_CONFIG* EDA_3D_VIEWER::GetHotkeyConfig() const
|
||||
{
|
||||
return s_3DViewer_Hotkeys_Descr;
|
||||
}
|
||||
|
||||
|
||||
EDA_HOTKEY_CONFIG* EDA_3D_CANVAS::GetHotkeyConfig() const
|
||||
{
|
||||
return s_3DViewer_Hotkeys_Descr;
|
||||
}
|
||||
@@ -32,13 +32,13 @@ enum id_3dview_frm
|
||||
ID_ORTHO,
|
||||
ID_MENU3D_COLOR,
|
||||
ID_MENU3D_BGCOLOR,
|
||||
ID_MENU3D_BGCOLOR_BOTTOM,
|
||||
ID_MENU3D_BGCOLOR_TOP,
|
||||
ID_MENU3D_SILKSCREEN_COLOR,
|
||||
ID_MENU3D_SOLDERMASK_COLOR,
|
||||
ID_MENU3D_SOLDERPASTE_COLOR,
|
||||
ID_MENU3D_PCB_BODY_COLOR,
|
||||
ID_MENU3D_COPPER_COLOR,
|
||||
ID_MENU3D_BGCOLOR_BOTTOM_SELECTION,
|
||||
ID_MENU3D_BGCOLOR_TOP_SELECTION,
|
||||
ID_MENU3D_SILKSCREEN_COLOR_SELECTION,
|
||||
ID_MENU3D_SOLDERMASK_COLOR_SELECTION,
|
||||
ID_MENU3D_SOLDERPASTE_COLOR_SELECTION,
|
||||
ID_MENU3D_PCB_BODY_COLOR_SELECTION,
|
||||
ID_MENU3D_COPPER_COLOR_SELECTION,
|
||||
ID_MENU3D_AXIS_ONOFF,
|
||||
|
||||
ID_MENU3D_MODULE_ONOFF,
|
||||
@@ -85,6 +85,8 @@ enum id_3dview_frm
|
||||
ID_MENU3D_RESET_DEFAULTS,
|
||||
|
||||
// Help
|
||||
ID_MENU3D_HELP_HOTKEY_SHOW_CURRENT_LIST,
|
||||
|
||||
ID_MENU_COMMAND_END,
|
||||
|
||||
ID_RENDER_CURRENT_VIEW,
|
||||
@@ -101,6 +103,8 @@ enum id_3dview_frm
|
||||
|
||||
ID_DISABLE_RAY_TRACING,
|
||||
|
||||
ID_CUSTOM_EVENT_1, // A id for a custom event (canvas refresh request)
|
||||
|
||||
ID_POPUP_3D_VIEW_START,
|
||||
ID_POPUP_ZOOMIN,
|
||||
ID_POPUP_ZOOMOUT,
|
||||
|
||||
@@ -6,6 +6,7 @@ configure_file( 3d_plugin_dir.h.in 3d_plugin_dir.h @ONLY )
|
||||
include_directories(BEFORE ${INC_BEFORE})
|
||||
include_directories(
|
||||
${CMAKE_CURRENT_BINARY_DIR}
|
||||
../include/legacy_wx
|
||||
../pcbnew
|
||||
3d_canvas
|
||||
3d_cache
|
||||
@@ -87,8 +88,8 @@ set(3D-VIEWER_SRCS
|
||||
3d_rendering/cpostshader.cpp
|
||||
3d_rendering/cpostshader_ssao.cpp
|
||||
3d_rendering/ctrack_ball.cpp
|
||||
3d_viewer/3d_actions.cpp
|
||||
3d_viewer/3d_menubar.cpp
|
||||
3d_viewer/hotkeys.cpp
|
||||
3d_rendering/test_cases.cpp
|
||||
3d_rendering/trackball.cpp
|
||||
3d_viewer/3d_toolbar.cpp
|
||||
|
||||
+3
-2
@@ -46,9 +46,10 @@ Russell Oliver <roliver8143[at]gmail-dot-com>
|
||||
Seth Hillbrand <hillbrand[at]ucdavis-dot-edu>
|
||||
Jeff Young <jeff[at]rokeby-dot-ie>
|
||||
Kevin Cozens <kevin[at]ve3syb-dot-ca>
|
||||
Ian McInerney <ian.s.mcinerney[at]ieee-dot-org>
|
||||
|
||||
See git repo on launchpad for contributors at
|
||||
https://code.launchpad.net/~kicad-product-committers/kicad/+git/product-git/+ref/master.
|
||||
See git repo on GitLab for contributors at
|
||||
https://gitlab.com/kicad/code/kicad/-/graphs/master
|
||||
|
||||
|
||||
== Document Writers
|
||||
|
||||
+74
-118
@@ -21,14 +21,7 @@
|
||||
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
#
|
||||
|
||||
cmake_minimum_required( VERSION 3.0.2 FATAL_ERROR )
|
||||
# because of http://public.kitware.com/Bug/view.php?id=10395
|
||||
|
||||
# See https://gitlab.kitware.com/cmake/cmake/issues/15943
|
||||
# Remove as soon as 3.1 is minimum required version
|
||||
if(POLICY CMP0025)
|
||||
cmake_policy(SET CMP0025 NEW) # CMake 3.0
|
||||
endif()
|
||||
cmake_minimum_required( VERSION 3.2 FATAL_ERROR )
|
||||
|
||||
# Default to CMAKE_BUILD_TYPE = Release unless overridden on command line
|
||||
# http://www.cmake.org/pipermail/cmake/2008-September/023808.html
|
||||
@@ -60,6 +53,12 @@ option( BUILD_SMALL_DEBUG_FILES "In debug build: create smaller binaries." OFF )
|
||||
# so that build option settings can be included in bug reports.
|
||||
#
|
||||
|
||||
option( USE_WX_GRAPHICS_CONTEXT
|
||||
"Use wxGraphicsContext for rendering (default OFF). Warning, this is experimental" )
|
||||
|
||||
option( USE_WX_OVERLAY
|
||||
"Use wxOverlay: Always ON for MAC and GTK3 (default OFF)." )
|
||||
|
||||
option( KICAD_SCRIPTING
|
||||
"Build the Python scripting support inside KiCad binaries (default ON)."
|
||||
ON )
|
||||
@@ -85,12 +84,12 @@ option( KICAD_SCRIPTING_ACTION_MENU
|
||||
ON )
|
||||
|
||||
option( KICAD_USE_OCE
|
||||
"Build tools and plugins related to OpenCascade Community Edition (default ON)"
|
||||
ON )
|
||||
"Build tools and plugins related to OpenCascade Community Edition (default OFF)"
|
||||
OFF )
|
||||
|
||||
option( KICAD_USE_OCC
|
||||
"Build tools and plugins related to OpenCascade Technology (overrides KICAD_USE_OCE, default OFF)"
|
||||
OFF )
|
||||
"Build tools and plugins related to OpenCascade Technology (overrides KICAD_USE_OCE, default ON)"
|
||||
ON )
|
||||
|
||||
option( KICAD_INSTALL_DEMOS
|
||||
"Install KiCad demos and examples (default ON)"
|
||||
@@ -108,27 +107,6 @@ option( KICAD_SPICE
|
||||
"Build KiCad with internal Spice simulator."
|
||||
ON )
|
||||
|
||||
# Not supported by all platforms (for instance mingw)
|
||||
option( KICAD_SANITIZE
|
||||
"Build KiCad with sanitizer options. WARNING: Not compatible with gold linker"
|
||||
OFF )
|
||||
|
||||
option( KICAD_STDLIB_DEBUG
|
||||
"Build KiCad with libstdc++ debug flags enabled."
|
||||
OFF )
|
||||
|
||||
option( KICAD_STDLIB_LIGHT_DEBUG
|
||||
"Build KiCad with libstdc++ with -Wp,-D_GLIBCXX_ASSERTIONS flag enabled. Not as intrusive as KICAD_STDLIB_DEBUG"
|
||||
OFF )
|
||||
|
||||
option( KICAD_BUILD_PARALLEL_CL_MP
|
||||
"Build in parallel using the /MP compiler option (default OFF for safety reasons)"
|
||||
OFF )
|
||||
|
||||
option( KICAD_USE_VALGRIND
|
||||
"Build KiCad with valgrind stack tracking enabled."
|
||||
OFF )
|
||||
|
||||
# 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 )
|
||||
@@ -158,17 +136,15 @@ endif()
|
||||
set( CMAKE_CXX_VISIBILITY_PRESET "hidden" )
|
||||
set( CMAKE_VISIBILITY_INLINES_HIDDEN ON )
|
||||
|
||||
|
||||
# Global setting: build everything position independent
|
||||
set( CMAKE_POSITION_INDEPENDENT_CODE ON )
|
||||
|
||||
# Global setting: Use C++14
|
||||
set(CMAKE_CXX_STANDARD 14)
|
||||
|
||||
# Global setting: Use C++11
|
||||
set(CMAKE_CXX_STANDARD 11)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
|
||||
# Enable additional valgrind instrumentation for stack tracking in libcontext
|
||||
if( KICAD_USE_VALGRIND )
|
||||
add_definitions( -DKICAD_USE_VALGRIND )
|
||||
endif()
|
||||
|
||||
# CMP0063: CMake < 3.3 does not handle hidden visibility for static libraries,
|
||||
# and 3.3 is backwards compatible when the minimum version is smaller than 3.3.
|
||||
@@ -192,9 +168,12 @@ endif()
|
||||
# Add option to add user directories for linker, if any
|
||||
LINK_DIRECTORIES( ${LINK_DIRECTORIES_PATH} )
|
||||
|
||||
set( KICAD_CONFIG_DIR "kicad" CACHE STRING "Location of user specific KiCad config files" )
|
||||
mark_as_advanced( KICAD_CONFIG_DIR )
|
||||
add_definitions( -DKICAD_CONFIG_DIR=${KICAD_CONFIG_DIR} )
|
||||
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 default data file path to CMAKE_INSTALL_PREFIX if it wasn't specified during the
|
||||
# CMake configuration. The value of DEFAULT_INSTALL_PATH is expanded in config.h and
|
||||
@@ -214,24 +193,6 @@ include( PerformFeatureChecks )
|
||||
perform_feature_checks()
|
||||
|
||||
|
||||
# Workaround: CMake < 3.1 does not support CMAKE_CXX_STANDARD
|
||||
if( NOT CMAKE_MINIMUM_REQUIRED_VERSION VERSION_LESS 3.1 )
|
||||
message( FATAL_ERROR "Remove compatibility code" )
|
||||
endif()
|
||||
|
||||
if( CMAKE_VERSION VERSION_LESS 3.1 AND ( CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang" ) )
|
||||
include(CheckCXXCompilerFlag)
|
||||
|
||||
CHECK_CXX_COMPILER_FLAG("-std=gnu++14" COMPILER_SUPPORTS_CXX14)
|
||||
|
||||
if(COMPILER_SUPPORTS_CXX14)
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++14")
|
||||
else()
|
||||
message(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++14 support. Please use a different C++ compiler.")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
|
||||
# Warn about missing override specifiers, if supported
|
||||
if( CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
|
||||
include(CheckCXXCompilerFlag)
|
||||
@@ -270,10 +231,6 @@ if( WIN32 )
|
||||
# define UNICODE and_UNICODE definition on Windows. KiCad uses unicode.
|
||||
# Both definitions are required
|
||||
add_definitions(-DUNICODE -D_UNICODE)
|
||||
|
||||
# In fully standards-compliant mode, M_PI et al. are defined only if
|
||||
# _USE_MATH_DEFINES is set.
|
||||
add_definitions( -D_USE_MATH_DEFINES )
|
||||
endif()
|
||||
|
||||
|
||||
@@ -343,21 +300,6 @@ if( CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
|
||||
set( CMAKE_CXX_FLAGS_DEBUG "-g3 -ggdb3 -DDEBUG -Wno-deprecated-declarations" )
|
||||
endif()
|
||||
|
||||
if( KICAD_SANITIZE )
|
||||
add_definitions( -DKICAD_SANITIZE )
|
||||
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_GLIBCXX_SANITIZE_VECTOR -fsanitize=address -fno-optimize-sibling-calls -fsanitize-address-use-after-scope -fno-omit-frame-pointer" )
|
||||
endif()
|
||||
|
||||
if( KICAD_STDLIB_DEBUG )
|
||||
add_definitions( -DKICAD_STDLIB_DEBUG )
|
||||
set( CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -D_GLIBCXX_DEBUG" )
|
||||
elseif( KICAD_STDLIB_LIGHT_DEBUG )
|
||||
# useless if KICAD_STDLIB_DEBUG is ON.
|
||||
# this option makes some controls to trap out of bound memory access.
|
||||
add_definitions( -DKICAD_STDLIB_LIGHT_DEBUG )
|
||||
set( CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wp,-D_GLIBCXX_ASSERTIONS" )
|
||||
endif()
|
||||
|
||||
if( MINGW )
|
||||
set( CMAKE_EXE_LINKER_FLAGS_RELEASE "-s" )
|
||||
|
||||
@@ -388,11 +330,17 @@ if( CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
|
||||
|
||||
elseif( NOT APPLE )
|
||||
# Thou shalt not link vaporware and tell us it's a valid DSO (apple ld doesn't support it)
|
||||
# temporarily disabled due to breaking ASAN-enabled builds - Tom
|
||||
# set( CMAKE_SHARED_LINKER_FLAGS "-Wl,--no-undefined" )
|
||||
# set( CMAKE_MODULE_LINKER_FLAGS "-Wl,--no-undefined" )
|
||||
set( CMAKE_SHARED_LINKER_FLAGS "-Wl,--no-undefined" )
|
||||
set( CMAKE_MODULE_LINKER_FLAGS "-Wl,--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} -Wl,-Bsymbolic" )
|
||||
set( CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,-Bsymbolic" )
|
||||
|
||||
endif()
|
||||
|
||||
if( APPLE )
|
||||
@@ -401,36 +349,8 @@ if( CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
|
||||
|
||||
endif( CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
|
||||
|
||||
if( MSVC )
|
||||
# Disallow implicit linking for Boost
|
||||
add_definitions( -DBOOST_ALL_NO_LIB )
|
||||
# Disable MSVC's deprecation warnings
|
||||
add_definitions( -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE -D_SCL_SECURE_NO_WARNINGS )
|
||||
# Hide Windows's min() and max() macros
|
||||
add_definitions( -DNOMINMAX )
|
||||
# source and execution charset are UTF-8
|
||||
string( APPEND CMAKE_CXX_FLAGS " /utf-8" )
|
||||
# C4290: throw() is interpreted as declspec(nothrow)
|
||||
string( APPEND CMAKE_CXX_FLAGS " /wd4290" )
|
||||
# C4800: non-bool is explicitly cast to bool, forcing value of 0 or 1
|
||||
string( APPEND CMAKE_CXX_FLAGS " /wd4800" )
|
||||
# /Zi: create PDB
|
||||
string( APPEND CMAKE_CXX_FLAGS " /Zi" )
|
||||
# /GF: enable string pooling
|
||||
string( APPEND CMAKE_CXX_FLAGS_RELEASE " /GF" )
|
||||
foreach( type EXE SHARED MODULE)
|
||||
# /DEBUG: create PDB
|
||||
string( APPEND CMAKE_${type}_LINKER_FLAGS " /DEBUG" )
|
||||
# /OPT:REF: omit unreferenced code
|
||||
string( APPEND CMAKE_${type}_LINKER_FLAGS_RELEASE " /OPT:REF" )
|
||||
# /OPT:ICF: fold common data
|
||||
string( APPEND CMAKE_${type}_LINKER_FLAGS_RELEASE " /OPT:ICF" )
|
||||
endforeach()
|
||||
|
||||
# Let cl.exe parallelize builds
|
||||
if( KICAD_BUILD_PARALLEL_CL_MP )
|
||||
string( APPEND CMAKE_CXX_FLAGS " /MP" )
|
||||
endif()
|
||||
if( USE_WX_OVERLAY OR APPLE )
|
||||
add_definitions( -DUSE_WX_OVERLAY )
|
||||
endif()
|
||||
|
||||
if( KICAD_SCRIPTING )
|
||||
@@ -468,13 +388,17 @@ endif()
|
||||
if( KICAD_USE_OCC )
|
||||
add_definitions( -DKICAD_USE_OCC )
|
||||
remove_definitions( -DKICAD_USE_OCE )
|
||||
unset( KICAD_USE_OCE )
|
||||
unset( KICAD_USE_OCE CACHE )
|
||||
endif()
|
||||
|
||||
if( KICAD_USE_CUSTOM_PADS )
|
||||
add_definitions( -DKICAD_USE_CUSTOM_PADS )
|
||||
endif()
|
||||
|
||||
if( USE_WX_GRAPHICS_CONTEXT OR APPLE )
|
||||
add_definitions( -DUSE_WX_GRAPHICS_CONTEXT )
|
||||
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 '.'.
|
||||
@@ -636,6 +560,11 @@ endif()
|
||||
# Find GLM library, required
|
||||
#
|
||||
find_package( GLM 0.9.5.1 REQUIRED )
|
||||
if( GLM_VERSION MATCHES "0.9.9.3" AND CMAKE_CXX_COMPILER_ID MATCHES "GNU")
|
||||
MESSAGE( FATAL_ERROR "\nGLM version ${GLM_VERSION} is incompatible with KiCad using GCC.\n"
|
||||
"Please downgrade to GLM version 0.9.9.2 or older or use clang instead" )
|
||||
endif()
|
||||
|
||||
add_definitions( -DGLM_FORCE_CTOR_INIT )
|
||||
|
||||
#
|
||||
@@ -658,9 +587,16 @@ find_package( Boost 1.54.0 REQUIRED )
|
||||
# Include MinGW resource compiler.
|
||||
include( MinGWResourceCompiler )
|
||||
|
||||
# Find GDI+ on windows if wxGraphicsContext is available, and only link gdiplus library
|
||||
# if wxGraphicsContext not used, because the cairo printing system uses this library
|
||||
if( WIN32 )
|
||||
# we need the gdiplus library for cairo printing on windows
|
||||
set( GDI_PLUS_LIBRARIES gdiplus )
|
||||
if( USE_WX_GRAPHICS_CONTEXT )
|
||||
find_package( GdiPlus )
|
||||
check_find_package_result( GDI_PLUS_FOUND "GDI+" )
|
||||
else()
|
||||
# if WX_GRAPHICS_CONTEXT is not used we just need the gdiplus library for cairo printing
|
||||
set( GDI_PLUS_LIBRARIES gdiplus )
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Find ngspice library, required for integrated circuit simulator
|
||||
@@ -836,6 +772,11 @@ find_package( wxWidgets ${wxWidgets_REQ_VERSION} COMPONENTS gl aui adv html core
|
||||
# Include wxWidgets macros.
|
||||
include( ${wxWidgets_USE_FILE} )
|
||||
|
||||
# Check for GTK3 libraries - These do not have XOR, so we need overlay (Page layout editor)
|
||||
if( wxWidgets_LIBRARIES MATCHES "gtk3" )
|
||||
add_definitions( -DUSE_WX_OVERLAY )
|
||||
endif()
|
||||
|
||||
if( KICAD_SCRIPTING_WXPYTHON AND NOT KICAD_SCRIPTING_WXPYTHON_PHOENIX )
|
||||
# wxPython appears to be installed and valid so make sure the headers are available.
|
||||
foreach( path ${wxWidgets_INCLUDE_DIRS} )
|
||||
@@ -928,6 +869,16 @@ add_custom_target( uninstall
|
||||
"${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" )
|
||||
|
||||
|
||||
#################################################
|
||||
# Generate platform metadata files
|
||||
#################################################
|
||||
if( APPLE )
|
||||
include( ${CMAKE_MODULE_PATH}/WritePlatformMetadata_macos.cmake )
|
||||
elseif( UNIX )
|
||||
include( ${CMAKE_MODULE_PATH}/WritePlatformMetadata_linux.cmake )
|
||||
endif()
|
||||
|
||||
|
||||
#================================================
|
||||
# Installation
|
||||
#================================================
|
||||
@@ -953,7 +904,7 @@ if( UNIX AND NOT APPLE )
|
||||
set( UNIX_MIME_FILES ${UNIX_MIME_DIR}/mime )
|
||||
set( UNIX_ICON_FILES ${UNIX_MIME_DIR}/icons )
|
||||
set( UNIX_APPLICATIONS_FILES ${UNIX_MIME_DIR}/applications )
|
||||
set( UNIX_APPDATA_FILES resources/linux/appdata )
|
||||
set( UNIX_APPDATA_FILES ${PROJECT_BINARY_DIR}/resources/linux/appdata )
|
||||
|
||||
# Install Mime directory
|
||||
install( DIRECTORY ${UNIX_ICON_FILES}
|
||||
@@ -977,6 +928,9 @@ if( UNIX AND NOT APPLE )
|
||||
install( DIRECTORY ${UNIX_APPDATA_FILES}
|
||||
DESTINATION share
|
||||
COMPONENT resources
|
||||
FILES_MATCHING
|
||||
PATTERN "*appdata.xml"
|
||||
PATTERN "*.in" EXCLUDE
|
||||
)
|
||||
endif()
|
||||
|
||||
@@ -1006,7 +960,6 @@ endif()
|
||||
|
||||
# Binaries ( CMake targets )
|
||||
add_subdirectory( bitmaps_png )
|
||||
add_subdirectory( libs )
|
||||
add_subdirectory( common )
|
||||
add_subdirectory( 3d-viewer )
|
||||
add_subdirectory( cvpcb )
|
||||
@@ -1023,7 +976,10 @@ add_subdirectory( plugins ) # 3D plugins must be built before kicad
|
||||
add_subdirectory( kicad ) # should follow pcbnew, eeschema
|
||||
add_subdirectory( tools )
|
||||
add_subdirectory( utils )
|
||||
add_subdirectory( qa )
|
||||
|
||||
if( KICAD_BUILD_QA_TESTS )
|
||||
add_subdirectory( qa )
|
||||
endif()
|
||||
|
||||
# Resources
|
||||
if ( KICAD_INSTALL_DEMOS )
|
||||
|
||||
@@ -27,6 +27,8 @@ macro( create_git_version_header _git_src_path )
|
||||
find_package( Git )
|
||||
|
||||
if( GIT_FOUND )
|
||||
message( STATUS "Using Git to determine build version string." )
|
||||
|
||||
set( _Git_SAVED_LC_ALL "$ENV{LC_ALL}" )
|
||||
set( ENV{LC_ALL} C )
|
||||
|
||||
|
||||
@@ -0,0 +1,342 @@
|
||||
#.rst:
|
||||
# FindOpenSSL
|
||||
# -----------
|
||||
#
|
||||
# Try to find the OpenSSL encryption library
|
||||
#
|
||||
# Once done this will define
|
||||
#
|
||||
# ::
|
||||
#
|
||||
# OPENSSL_ROOT_DIR - Set this variable to the root installation of OpenSSL
|
||||
#
|
||||
#
|
||||
#
|
||||
# Read-Only variables:
|
||||
#
|
||||
# ::
|
||||
#
|
||||
# OPENSSL_FOUND - system has the OpenSSL library
|
||||
# OPENSSL_INCLUDE_DIR - the OpenSSL include directory
|
||||
# OPENSSL_LIBRARIES - The libraries needed to use OpenSSL
|
||||
# OPENSSL_VERSION - This is set to $major.$minor.$revision$path (eg. 0.9.8s)
|
||||
|
||||
#=============================================================================
|
||||
# Copyright 2006-2009 Kitware, Inc.
|
||||
# Copyright 2006 Alexander Neundorf <neundorf@kde.org>
|
||||
# Copyright 2009-2011 Mathieu Malaterre <mathieu.malaterre@gmail.com>
|
||||
#
|
||||
# Distributed under the OSI-approved BSD License (the "License");
|
||||
# see accompanying file Copyright.txt for details.
|
||||
#
|
||||
# This software is distributed WITHOUT ANY WARRANTY; without even the
|
||||
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
# See the License for more information.
|
||||
#=============================================================================
|
||||
# (To distribute this file outside of CMake, substitute the full
|
||||
# License text for the above reference.)
|
||||
|
||||
if (UNIX)
|
||||
find_package(PkgConfig QUIET)
|
||||
pkg_check_modules(_OPENSSL QUIET openssl)
|
||||
endif ()
|
||||
|
||||
if (WIN32)
|
||||
# http://www.slproweb.com/products/Win32OpenSSL.html
|
||||
set(_OPENSSL_ROOT_HINTS
|
||||
${OPENSSL_ROOT_DIR}
|
||||
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OpenSSL (32-bit)_is1;Inno Setup: App Path]"
|
||||
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OpenSSL (64-bit)_is1;Inno Setup: App Path]"
|
||||
ENV OPENSSL_ROOT_DIR
|
||||
)
|
||||
file(TO_CMAKE_PATH "$ENV{PROGRAMFILES}" _programfiles)
|
||||
set(_OPENSSL_ROOT_PATHS
|
||||
"${_programfiles}/OpenSSL"
|
||||
"${_programfiles}/OpenSSL-Win32"
|
||||
"${_programfiles}/OpenSSL-Win64"
|
||||
"C:/OpenSSL/"
|
||||
"C:/OpenSSL-Win32/"
|
||||
"C:/OpenSSL-Win64/"
|
||||
)
|
||||
unset(_programfiles)
|
||||
else ()
|
||||
set(_OPENSSL_ROOT_HINTS
|
||||
${OPENSSL_ROOT_DIR}
|
||||
ENV OPENSSL_ROOT_DIR
|
||||
)
|
||||
endif ()
|
||||
|
||||
set(_OPENSSL_ROOT_HINTS_AND_PATHS
|
||||
HINTS ${_OPENSSL_ROOT_HINTS}
|
||||
PATHS ${_OPENSSL_ROOT_PATHS}
|
||||
)
|
||||
|
||||
find_path(OPENSSL_INCLUDE_DIR
|
||||
NAMES
|
||||
openssl/ssl.h
|
||||
${_OPENSSL_ROOT_HINTS_AND_PATHS}
|
||||
HINTS
|
||||
${_OPENSSL_INCLUDEDIR}
|
||||
PATH_SUFFIXES
|
||||
include
|
||||
)
|
||||
|
||||
if(WIN32 AND NOT CYGWIN)
|
||||
if(MSVC)
|
||||
# /MD and /MDd are the standard values - if someone wants to use
|
||||
# others, the libnames have to change here too
|
||||
# use also ssl and ssleay32 in debug as fallback for openssl < 0.9.8b
|
||||
# TODO: handle /MT and static lib
|
||||
# In Visual C++ naming convention each of these four kinds of Windows libraries has it's standard suffix:
|
||||
# * MD for dynamic-release
|
||||
# * MDd for dynamic-debug
|
||||
# * MT for static-release
|
||||
# * MTd for static-debug
|
||||
|
||||
# Implementation details:
|
||||
# We are using the libraries located in the VC subdir instead of the parent directory eventhough :
|
||||
# libeay32MD.lib is identical to ../libeay32.lib, and
|
||||
# ssleay32MD.lib is identical to ../ssleay32.lib
|
||||
find_library(LIB_EAY_DEBUG
|
||||
NAMES
|
||||
libeay32MDd
|
||||
libeay32d
|
||||
${_OPENSSL_ROOT_HINTS_AND_PATHS}
|
||||
PATH_SUFFIXES
|
||||
"lib"
|
||||
"VC"
|
||||
"lib/VC"
|
||||
)
|
||||
|
||||
find_library(LIB_EAY_RELEASE
|
||||
NAMES
|
||||
libeay32MD
|
||||
libeay32
|
||||
${_OPENSSL_ROOT_HINTS_AND_PATHS}
|
||||
PATH_SUFFIXES
|
||||
"lib"
|
||||
"VC"
|
||||
"lib/VC"
|
||||
)
|
||||
|
||||
find_library(SSL_EAY_DEBUG
|
||||
NAMES
|
||||
ssleay32MDd
|
||||
ssleay32d
|
||||
${_OPENSSL_ROOT_HINTS_AND_PATHS}
|
||||
PATH_SUFFIXES
|
||||
"lib"
|
||||
"VC"
|
||||
"lib/VC"
|
||||
)
|
||||
|
||||
find_library(SSL_EAY_RELEASE
|
||||
NAMES
|
||||
ssleay32MD
|
||||
ssleay32
|
||||
ssl
|
||||
${_OPENSSL_ROOT_HINTS_AND_PATHS}
|
||||
PATH_SUFFIXES
|
||||
"lib"
|
||||
"VC"
|
||||
"lib/VC"
|
||||
)
|
||||
|
||||
set(LIB_EAY_LIBRARY_DEBUG "${LIB_EAY_DEBUG}")
|
||||
set(LIB_EAY_LIBRARY_RELEASE "${LIB_EAY_RELEASE}")
|
||||
set(SSL_EAY_LIBRARY_DEBUG "${SSL_EAY_DEBUG}")
|
||||
set(SSL_EAY_LIBRARY_RELEASE "${SSL_EAY_RELEASE}")
|
||||
|
||||
include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake)
|
||||
select_library_configurations(LIB_EAY)
|
||||
select_library_configurations(SSL_EAY)
|
||||
|
||||
mark_as_advanced(LIB_EAY_LIBRARY_DEBUG LIB_EAY_LIBRARY_RELEASE
|
||||
SSL_EAY_LIBRARY_DEBUG SSL_EAY_LIBRARY_RELEASE)
|
||||
set( OPENSSL_LIBRARIES ${SSL_EAY_LIBRARY} ${LIB_EAY_LIBRARY} )
|
||||
elseif(MINGW)
|
||||
message( STATUS "Searching for OpenSSL in MinGW." )
|
||||
# same player, for MinGW
|
||||
set(LIB_EAY_NAMES libeay32)
|
||||
set(SSL_EAY_NAMES ssleay32)
|
||||
list(APPEND LIB_EAY_NAMES crypto)
|
||||
list(APPEND SSL_EAY_NAMES ssl)
|
||||
|
||||
find_library(LIB_EAY
|
||||
NAMES
|
||||
${LIB_EAY_NAMES}
|
||||
${_OPENSSL_ROOT_HINTS_AND_PATHS}
|
||||
PATH_SUFFIXES
|
||||
"lib"
|
||||
"lib/MinGW"
|
||||
# Do not search system path. Otherwise the DLL will be found rather than the link library.
|
||||
NO_SYSTEM_ENVIRONMENT_PATH
|
||||
NO_CMAKE_SYSTEM_PATH
|
||||
)
|
||||
|
||||
find_library(SSL_EAY
|
||||
NAMES
|
||||
${SSL_EAY_NAMES}
|
||||
${_OPENSSL_ROOT_HINTS_AND_PATHS}
|
||||
PATH_SUFFIXES
|
||||
"lib"
|
||||
"lib/MinGW"
|
||||
# Do not search system path. Otherwise the DLL will be found rather than the link library.
|
||||
NO_SYSTEM_ENVIRONMENT_PATH
|
||||
NO_CMAKE_SYSTEM_PATH
|
||||
)
|
||||
|
||||
mark_as_advanced(SSL_EAY LIB_EAY)
|
||||
set( OPENSSL_LIBRARIES ${SSL_EAY} ${LIB_EAY} )
|
||||
unset(LIB_EAY_NAMES)
|
||||
unset(SSL_EAY_NAMES)
|
||||
else()
|
||||
# Not sure what to pick for -say- intel, let's use the toplevel ones and hope someone report issues:
|
||||
find_library(LIB_EAY
|
||||
NAMES
|
||||
libeay32
|
||||
${_OPENSSL_ROOT_HINTS_AND_PATHS}
|
||||
HINTS
|
||||
${_OPENSSL_LIBDIR}
|
||||
PATH_SUFFIXES
|
||||
lib
|
||||
)
|
||||
|
||||
find_library(SSL_EAY
|
||||
NAMES
|
||||
ssleay32
|
||||
${_OPENSSL_ROOT_HINTS_AND_PATHS}
|
||||
HINTS
|
||||
${_OPENSSL_LIBDIR}
|
||||
PATH_SUFFIXES
|
||||
lib
|
||||
)
|
||||
|
||||
mark_as_advanced(SSL_EAY LIB_EAY)
|
||||
set( OPENSSL_LIBRARIES ${SSL_EAY} ${LIB_EAY} )
|
||||
endif()
|
||||
else()
|
||||
|
||||
find_library(OPENSSL_SSL_LIBRARY
|
||||
NAMES
|
||||
ssl
|
||||
ssleay32
|
||||
ssleay32MD
|
||||
${_OPENSSL_ROOT_HINTS_AND_PATHS}
|
||||
HINTS
|
||||
${_OPENSSL_LIBDIR}
|
||||
PATH_SUFFIXES
|
||||
lib
|
||||
)
|
||||
|
||||
find_library(OPENSSL_CRYPTO_LIBRARY
|
||||
NAMES
|
||||
crypto
|
||||
${_OPENSSL_ROOT_HINTS_AND_PATHS}
|
||||
HINTS
|
||||
${_OPENSSL_LIBDIR}
|
||||
PATH_SUFFIXES
|
||||
lib
|
||||
)
|
||||
|
||||
mark_as_advanced(OPENSSL_CRYPTO_LIBRARY OPENSSL_SSL_LIBRARY)
|
||||
|
||||
# compat defines
|
||||
set(OPENSSL_SSL_LIBRARIES ${OPENSSL_SSL_LIBRARY})
|
||||
set(OPENSSL_CRYPTO_LIBRARIES ${OPENSSL_CRYPTO_LIBRARY})
|
||||
|
||||
set(OPENSSL_LIBRARIES ${OPENSSL_SSL_LIBRARY} ${OPENSSL_CRYPTO_LIBRARY})
|
||||
|
||||
endif()
|
||||
|
||||
function(from_hex HEX DEC)
|
||||
string(TOUPPER "${HEX}" HEX)
|
||||
set(_res 0)
|
||||
string(LENGTH "${HEX}" _strlen)
|
||||
|
||||
while (_strlen GREATER 0)
|
||||
math(EXPR _res "${_res} * 16")
|
||||
string(SUBSTRING "${HEX}" 0 1 NIBBLE)
|
||||
string(SUBSTRING "${HEX}" 1 -1 HEX)
|
||||
if (NIBBLE STREQUAL "A")
|
||||
math(EXPR _res "${_res} + 10")
|
||||
elseif (NIBBLE STREQUAL "B")
|
||||
math(EXPR _res "${_res} + 11")
|
||||
elseif (NIBBLE STREQUAL "C")
|
||||
math(EXPR _res "${_res} + 12")
|
||||
elseif (NIBBLE STREQUAL "D")
|
||||
math(EXPR _res "${_res} + 13")
|
||||
elseif (NIBBLE STREQUAL "E")
|
||||
math(EXPR _res "${_res} + 14")
|
||||
elseif (NIBBLE STREQUAL "F")
|
||||
math(EXPR _res "${_res} + 15")
|
||||
else()
|
||||
math(EXPR _res "${_res} + ${NIBBLE}")
|
||||
endif()
|
||||
|
||||
string(LENGTH "${HEX}" _strlen)
|
||||
endwhile()
|
||||
|
||||
set(${DEC} ${_res} PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
if (OPENSSL_INCLUDE_DIR)
|
||||
if (_OPENSSL_VERSION)
|
||||
set(OPENSSL_VERSION "${_OPENSSL_VERSION}")
|
||||
elseif(OPENSSL_INCLUDE_DIR AND EXISTS "${OPENSSL_INCLUDE_DIR}/openssl/opensslv.h")
|
||||
file(STRINGS "${OPENSSL_INCLUDE_DIR}/openssl/opensslv.h" openssl_version_str
|
||||
REGEX "^#[\t ]*define[\t ]+OPENSSL_VERSION_NUMBER[\t ]+0x([0-9a-fA-F])+.*")
|
||||
|
||||
# The version number is encoded as 0xMNNFFPPS: major minor fix patch status
|
||||
# The status gives if this is a developer or prerelease and is ignored here.
|
||||
# Major, minor, and fix directly translate into the version numbers shown in
|
||||
# the string. The patch field translates to the single character suffix that
|
||||
# indicates the bug fix state, which 00 -> nothing, 01 -> a, 02 -> b and so
|
||||
# on.
|
||||
|
||||
message(STATUS "OPENSSL_VERSION_STR=${openssl_version_str}")
|
||||
|
||||
string(REGEX REPLACE "^.*OPENSSL_VERSION_NUMBER[\t ]+0x([0-9a-fA-F])([0-9a-fA-F][0-9a-fA-F])([0-9a-fA-F][0-9a-fA-F])([0-9a-fA-F][0-9a-fA-F])([0-9a-fA-F]).*$"
|
||||
"\\1;\\2;\\3;\\4;\\5" OPENSSL_VERSION_LIST "${openssl_version_str}")
|
||||
list(GET OPENSSL_VERSION_LIST 0 OPENSSL_VERSION_MAJOR)
|
||||
list(GET OPENSSL_VERSION_LIST 1 OPENSSL_VERSION_MINOR)
|
||||
from_hex("${OPENSSL_VERSION_MINOR}" OPENSSL_VERSION_MINOR)
|
||||
list(GET OPENSSL_VERSION_LIST 2 OPENSSL_VERSION_FIX)
|
||||
from_hex("${OPENSSL_VERSION_FIX}" OPENSSL_VERSION_FIX)
|
||||
list(GET OPENSSL_VERSION_LIST 3 OPENSSL_VERSION_PATCH)
|
||||
|
||||
if (NOT OPENSSL_VERSION_PATCH STREQUAL "00")
|
||||
from_hex("${OPENSSL_VERSION_PATCH}" _tmp)
|
||||
# 96 is the ASCII code of 'a' minus 1
|
||||
math(EXPR OPENSSL_VERSION_PATCH_ASCII "${_tmp} + 96")
|
||||
unset(_tmp)
|
||||
# Once anyone knows how OpenSSL would call the patch versions beyond 'z'
|
||||
# this should be updated to handle that, too. This has not happened yet
|
||||
# so it is simply ignored here for now.
|
||||
string(ASCII "${OPENSSL_VERSION_PATCH_ASCII}" OPENSSL_VERSION_PATCH_STRING)
|
||||
endif ()
|
||||
|
||||
set(OPENSSL_VERSION "${OPENSSL_VERSION_MAJOR}.${OPENSSL_VERSION_MINOR}.${OPENSSL_VERSION_FIX}${OPENSSL_VERSION_PATCH_STRING}")
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
|
||||
if (OPENSSL_VERSION)
|
||||
find_package_handle_standard_args(OpenSSL
|
||||
REQUIRED_VARS
|
||||
OPENSSL_LIBRARIES
|
||||
OPENSSL_INCLUDE_DIR
|
||||
VERSION_VAR
|
||||
OPENSSL_VERSION
|
||||
FAIL_MESSAGE
|
||||
"Could NOT find OpenSSL, try to set the path to OpenSSL root folder in the system variable OPENSSL_ROOT_DIR"
|
||||
)
|
||||
else ()
|
||||
find_package_handle_standard_args(OpenSSL "Could NOT find OpenSSL, try to set the path to OpenSSL root folder in the system variable OPENSSL_ROOT_DIR"
|
||||
OPENSSL_LIBRARIES
|
||||
OPENSSL_INCLUDE_DIR
|
||||
)
|
||||
endif ()
|
||||
|
||||
mark_as_advanced(OPENSSL_INCLUDE_DIR OPENSSL_LIBRARIES)
|
||||
@@ -37,7 +37,7 @@ unset(_Python_NAMES)
|
||||
|
||||
set(_PYTHON1_VERSIONS 1.6 1.5)
|
||||
set(_PYTHON2_VERSIONS 2.7 2.6 2.5 2.4 2.3 2.2 2.1 2.0)
|
||||
set(_PYTHON3_VERSIONS 3.8 3.7 3.6 3.5 3.4 3.3 3.2 3.1 3.0)
|
||||
set(_PYTHON3_VERSIONS 3.10 3.9 3.8 3.7 3.6 3.5 3.4 3.3 3.2 3.1 3.0)
|
||||
|
||||
if(PythonInterp_FIND_VERSION)
|
||||
if(PythonInterp_FIND_VERSION MATCHES "^[0-9]+\\.[0-9]+(\\.[0-9]+.*)?$")
|
||||
|
||||
@@ -44,7 +44,7 @@ cmake_find_frameworks(Python)
|
||||
|
||||
set(_PYTHON1_VERSIONS 1.6 1.5)
|
||||
set(_PYTHON2_VERSIONS 2.7 2.6 2.5 2.4 2.3 2.2 2.1 2.0)
|
||||
set(_PYTHON3_VERSIONS 3.8 3.7 3.6 3.5 3.4 3.3 3.2 3.1 3.0)
|
||||
set(_PYTHON3_VERSIONS 3.10 3.9 3.8 3.7 3.6 3.5 3.4 3.3 3.2 3.1 3.0)
|
||||
|
||||
if(PythonLibs_FIND_VERSION)
|
||||
if(PythonLibs_FIND_VERSION MATCHES "^[0-9]+\\.[0-9]+(\\.[0-9]+.*)?$")
|
||||
|
||||
@@ -55,7 +55,7 @@
|
||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
find_program(SWIG_EXECUTABLE NAMES swig3.0 swig2.0 swig)
|
||||
find_program(SWIG_EXECUTABLE NAMES swig4.0 swig3.0 swig2.0 swig)
|
||||
|
||||
if(SWIG_EXECUTABLE)
|
||||
execute_process(COMMAND ${SWIG_EXECUTABLE} -swiglib
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
# CMake script for finding libngspice
|
||||
|
||||
# Copyright (C) 2016 CERN
|
||||
# Copyright (C) 2020 Kicad Developers, see AUTHORS.txt for contributors.
|
||||
#
|
||||
# Author: Maciej Suminski <maciej.suminski@cern.ch>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
@@ -20,21 +22,108 @@
|
||||
# or you may write to the Free Software Foundation, Inc.,
|
||||
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
|
||||
# Usage:
|
||||
#
|
||||
# ngspice uses pkg-config to gather the configuration information so the pkg-config
|
||||
# information is used to populate the CMake find_* commands. When pkg-config is not
|
||||
# available, the fallback is the default platform search paths set up by CMake. The
|
||||
# default search paths can be overridden by user. The order of precedence is as
|
||||
# follows:
|
||||
#
|
||||
# User defined root path NGSPICE_ROOT_DIR on CMake command line.
|
||||
# User defined root path environment variable NGSPICE_ROOT_DIR.
|
||||
# Paths generated by pkg-config.
|
||||
# The default system paths configured by CMake
|
||||
#
|
||||
# For a specific ngspice include path not defined above set NGSPICE_INCLUDE_PATH.
|
||||
#
|
||||
# For a specific ngspice library path not defined above set NGSPICE_LIBRARY_PATH.
|
||||
|
||||
# Use pkg-config if it's available.
|
||||
find_package(PkgConfig)
|
||||
|
||||
if( PKG_CONFIG_FOUND )
|
||||
pkg_check_modules( _NGSPICE ngspice )
|
||||
|
||||
if( _NGSPICE_FOUND )
|
||||
set( NGSPICE_BUILD_VERSION "${_NGSPICE_VERSION}" CACHE STRING
|
||||
"ngspice version returned by pkg-config" )
|
||||
endif()
|
||||
endif()
|
||||
|
||||
find_path( NGSPICE_INCLUDE_DIR ngspice/sharedspice.h
|
||||
PATHS ${NGSPICE_ROOT_DIR} $ENV{NGSPICE_ROOT_DIR} ${NGSPICE_INCLUDE_PATH}
|
||||
${NGSPICE_ROOT_DIR}/include
|
||||
PATH_SUFFIXES src/include share/ngspice/include share/ngspice/include/ngspice
|
||||
PATHS
|
||||
${NGSPICE_ROOT_DIR}
|
||||
$ENV{NGSPICE_ROOT_DIR}
|
||||
${NGSPICE_INCLUDE_PATH}
|
||||
${_NGSPICE_INCLUDE_DIRS}
|
||||
PATH_SUFFIXES
|
||||
include
|
||||
src/include
|
||||
share/ngspice/include
|
||||
share/ngspice/include/ngspice
|
||||
)
|
||||
|
||||
find_library( NGSPICE_LIBRARY ngspice
|
||||
PATHS ${NGSPICE_ROOT_DIR} $ENV{NGSPICE_ROOT_DIR} ${NGSPICE_LIBRARY_PATH}
|
||||
PATH_SUFFIXES src/.libs lib
|
||||
if( UNIX )
|
||||
set( NGSPICE_LIB_NAME libngspice.so.0 CACHE STRING "Optionally versioned name of the shared library" )
|
||||
else()
|
||||
set( NGSPICE_LIB_NAME ngspice CACHE STRING "Optionally versioned name of the shared library" )
|
||||
endif()
|
||||
|
||||
find_library( NGSPICE_LIBRARY ${NGSPICE_LIB_NAME}
|
||||
PATHS
|
||||
${NGSPICE_ROOT_DIR}
|
||||
$ENV{NGSPICE_ROOT_DIR}
|
||||
${NGSPICE_LIBRARY_PATH}
|
||||
${_NGSPICE_LIBRARY_DIRS}
|
||||
PATH_SUFFIXES
|
||||
src/.libs
|
||||
lib
|
||||
)
|
||||
|
||||
# If the ngspice version is not set by pkg-config, see if ngspice/config.h is available.
|
||||
if( NOT NGSPICE_BUILD_VERSION )
|
||||
find_file( NGSPICE_CONFIG_H ngspice/config.h
|
||||
PATHS
|
||||
${NGSPICE_ROOT_DIR}
|
||||
$ENV{NGSPICE_ROOT_DIR}
|
||||
${NGSPICE_INCLUDE_PATH}
|
||||
${_NGSPICE_INCLUDE_DIRS}
|
||||
PATH_SUFFIXES
|
||||
include
|
||||
src/include
|
||||
share/ngspice/include
|
||||
share/ngspice/include/ngspice
|
||||
)
|
||||
|
||||
if( NOT NGSPICE_CONFIG_H-NOTFOUND )
|
||||
message( STATUS "ngspice configuration file ${NGSPICE_CONFIG_H} found." )
|
||||
set( NGSPICE_HAVE_CONFIG_H "1" CACHE STRING "ngspice/config.h header found." )
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if( WIN32 AND MSYS )
|
||||
# NGSPICE_LIBRARY points to libngspice.dll.a on Windows,
|
||||
# but the goal is to find out the DLL name.
|
||||
find_library( NGSPICE_DLL NAMES libngspice-0.dll libngspice-1.dll )
|
||||
|
||||
# Some msys versions do not find xxx.dll lib files, only xxx.dll.a files
|
||||
# so try a find_file in exec paths
|
||||
if( NGSPICE_DLL STREQUAL "NGSPICE_DLL-NOTFOUND" )
|
||||
find_file( NGSPICE_DLL NAMES libngspice-0.dll libngspice-1.dll
|
||||
PATHS
|
||||
${NGSPICE_ROOT_DIR}
|
||||
PATH_SUFFIXES
|
||||
bin
|
||||
lib
|
||||
)
|
||||
endif()
|
||||
|
||||
if( NGSPICE_DLL STREQUAL "NGSPICE_DLL-NOTFOUND" )
|
||||
message( ERROR ":\n***** libngspice-x.dll not found in any executable path *****\n\n" )
|
||||
else()
|
||||
message( STATUS ": libngspice shared lib found: ${NGSPICE_DLL}\n" )
|
||||
endif()
|
||||
else()
|
||||
set( NGSPICE_DLL "${NGSPICE_LIBRARY}" )
|
||||
endif()
|
||||
@@ -62,4 +151,6 @@ mark_as_advanced(
|
||||
NGSPICE_INCLUDE_DIR
|
||||
NGSPICE_LIBRARY
|
||||
NGSPICE_DLL
|
||||
NGSPICE_BUILD_VERSION
|
||||
NGSPICE_HAVE_CONFIG_H
|
||||
)
|
||||
|
||||
@@ -33,24 +33,33 @@
|
||||
function( make_lexer outputTarget inputFile outHeaderFile outCppFile enum )
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${outHeaderFile}
|
||||
${CMAKE_CURRENT_BINARY_DIR}/${outCppFile}
|
||||
OUTPUT ${outHeaderFile}
|
||||
${outCppFile}
|
||||
COMMAND ${CMAKE_COMMAND}
|
||||
-Denum=${enum}
|
||||
-DinputFile=${CMAKE_CURRENT_SOURCE_DIR}/${inputFile}
|
||||
-DoutHeaderFile=${CMAKE_CURRENT_BINARY_DIR}/${outHeaderFile}
|
||||
-DoutCppFile=${CMAKE_CURRENT_BINARY_DIR}/${outCppFile}
|
||||
-DinputFile=${inputFile}
|
||||
-DoutHeaderFile=${outHeaderFile}
|
||||
-DoutCppFile=${outCppFile}
|
||||
-P ${CMAKE_MODULE_PATH}/TokenList2DsnLexer.cmake
|
||||
COMMENT "TokenList2DsnLexer.cmake creating:
|
||||
${outHeaderFile} and
|
||||
${outCppFile} from
|
||||
${inputFile}"
|
||||
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${inputFile}
|
||||
)
|
||||
|
||||
add_custom_target( ${outputTarget}
|
||||
DEPENDS ${outHeaderFile} ${outCppFile}
|
||||
${CMAKE_MODULE_PATH}/TokenList2DsnLexer.cmake
|
||||
)
|
||||
|
||||
target_sources( ${outputTarget} PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/${outCppFile} )
|
||||
target_include_directories( ${outputTarget} PUBLIC ${CMAKE_CURRENT_BINARY_DIR} )
|
||||
# extra_args, if any, are treated as source files (typically headers) which
|
||||
# are known to depend on the generated outHeader.
|
||||
foreach( extra_arg ${ARGN} )
|
||||
set_source_files_properties( ${extra_arg}
|
||||
PROPERTIES OBJECT_DEPENDS ${outHeaderFile}
|
||||
)
|
||||
endforeach()
|
||||
|
||||
endfunction()
|
||||
|
||||
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
#
|
||||
# This program source code file is part of KICAD, a free EDA CAD application.
|
||||
#
|
||||
# Copyright (C) 2019 Kicad Developers, see AUTHORS.txt for contributors.
|
||||
# Copyright (C) 2019 Ian McInerney <Ian.S.McInerney@ieee.org>
|
||||
# Copyright (C) 2019 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
|
||||
@@ -21,27 +22,19 @@
|
||||
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
#
|
||||
|
||||
# Build file for the S-Expression library
|
||||
# This file will create the full KiCad version string. The base of this string
|
||||
# will be either the git tag followed by the commit hash (if built inside a git
|
||||
# repository), or the version from KiCadVersion.cmake. The user-provided
|
||||
# KICAD_VERSION_EXTRA is then appended to the base version string.
|
||||
|
||||
set( SEXPR_LIB_FILES
|
||||
sexpr.cpp
|
||||
sexpr_parser.cpp
|
||||
)
|
||||
# Use git to determine the version string if it's available.
|
||||
include( ${CMAKE_MODULE_PATH}/CreateGitVersionHeader.cmake )
|
||||
create_git_version_header( ${SRC_PATH} )
|
||||
|
||||
add_library( sexpr STATIC
|
||||
${SEXPR_LIB_FILES}
|
||||
)
|
||||
# $KICAD_VERSION is set in KiCadVersion.cmake or by git (if it is available).
|
||||
set( KICAD_VERSION_FULL "${KICAD_VERSION}" )
|
||||
|
||||
target_include_directories( sexpr PUBLIC
|
||||
include
|
||||
)
|
||||
|
||||
# the s-exp parser has a dep on the wxFile methods
|
||||
target_link_libraries( sexpr
|
||||
${wxWidgets_LIBRARIES}
|
||||
)
|
||||
|
||||
# TODO get deps from here out of common
|
||||
target_include_directories( sexpr PRIVATE
|
||||
${CMAKE_SOURCE_DIR}/include
|
||||
)
|
||||
# Optional user version information defined at configuration.
|
||||
if( KICAD_VERSION_EXTRA )
|
||||
set( KICAD_VERSION_FULL "${KICAD_VERSION_FULL}-${KICAD_VERSION_EXTRA}" )
|
||||
endif()
|
||||
@@ -1,100 +0,0 @@
|
||||
# This program source code file is part of KiCad, a free EDA CAD application.
|
||||
#
|
||||
# Copyright (C) 2019 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
|
||||
|
||||
#
|
||||
# Utility CMake functions and targets for marshalling the builds of QA
|
||||
# tests and tools
|
||||
#
|
||||
|
||||
# CI tools can use this to force tests to output machine-readable formats
|
||||
# when possible
|
||||
option( KICAD_TEST_XML_OUTPUT
|
||||
"Cause unit tests to output xUnit results where possible for more granular CI reporting."
|
||||
OFF
|
||||
)
|
||||
mark_as_advanced( KICAD_TEST_XML_OUTPUT ) # Only CI tools need this
|
||||
|
||||
# This is a "meta" target that is used to collect all tests
|
||||
add_custom_target( qa_all_tests )
|
||||
|
||||
# This is a "meta" target used to collect all utility tools
|
||||
add_custom_target( qa_all_tools )
|
||||
|
||||
# This "meta" target builds all QA tools, utils, etc
|
||||
add_custom_target( qa_all
|
||||
DEPENDS qa_all_tests qa_all_tools
|
||||
)
|
||||
|
||||
# Add a target as a "QA test" executable:
|
||||
# * Added as a CTest test with the given name
|
||||
# * Excluded from ALL when KICAD_BUILD_QA_TESTS not set
|
||||
# * Is a dependency of qa_all_tests
|
||||
function( kicad_add_boost_test TEST_EXEC_TARGET TEST_NAME)
|
||||
|
||||
set(BOOST_TEST_PARAMS "")
|
||||
|
||||
if( KICAD_TEST_XML_OUTPUT )
|
||||
# Provide Boost-test-y XML params if asked
|
||||
# Due to Boost issue in 1.62, have to use the --logger parameter, rather than
|
||||
# separate --log_format, --log_sink, etc parameter
|
||||
# https://svn.boost.org/trac10/ticket/12507
|
||||
set(BOOST_TEST_PARAMS --logger=XML,all,${TEST_NAME}.boost-results.xml --report_level=no --result_code=no)
|
||||
endif()
|
||||
|
||||
# Add the test to the CTest registry
|
||||
add_test( NAME ${TEST_NAME}
|
||||
COMMAND $<TARGET_FILE:${TEST_EXEC_TARGET}> ${BOOST_TEST_PARAMS}
|
||||
)
|
||||
|
||||
# Make the overall test meta-target depend on this test
|
||||
add_dependencies( qa_all_tests ${TEST_EXEC_TARGET} )
|
||||
|
||||
# If tests are not enabled by default, remove from the ALL target
|
||||
# They can still be built manually, or all together with the qa_all_test target
|
||||
if( NOT KICAD_BUILD_QA_TESTS )
|
||||
|
||||
set_target_properties( ${TEST_EXEC_TARGET}
|
||||
PROPERTIES EXCLUDE_FROM_ALL TRUE
|
||||
)
|
||||
|
||||
endif()
|
||||
|
||||
endfunction()
|
||||
|
||||
# Add a target as a "QA tool" executable:
|
||||
# * Excluded from ALL when KICAD_BUILD_QA_TESTS not set
|
||||
# * Is a dependency of qa_all_tools
|
||||
function( kicad_add_utils_executable TARGET)
|
||||
|
||||
# If tests are not enabled by default, remove from the ALL target
|
||||
# They can still be built manually, or all together with the qa_all_tools
|
||||
if( NOT KICAD_BUILD_QA_TESTS )
|
||||
|
||||
set_target_properties( ${TARGET}
|
||||
PROPERTIES EXCLUDE_FROM_ALL TRUE
|
||||
)
|
||||
|
||||
endif()
|
||||
|
||||
# Make the overall test meta-target depend on this test
|
||||
add_dependencies( qa_all_tools ${TARGET} )
|
||||
|
||||
endfunction()
|
||||
@@ -1,38 +1,38 @@
|
||||
#
|
||||
# This program source code file is part of KICAD, a free EDA CAD application.
|
||||
#
|
||||
# Copyright (C) 2016 Wayne Stambaugh <stambaughw@gmail.com>
|
||||
# Copyright (C) 2016 - 2019 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
|
||||
#
|
||||
|
||||
# Note: unless you are the person responsible for creating releases,
|
||||
# do *not* change these variables. This way the KiCad project
|
||||
# can maintain control over what is an official KiCad build and
|
||||
# what is not. Setting these variable that conflict with KiCad
|
||||
# releases is a shooting offense.
|
||||
#
|
||||
# This file gets included in the WriteVersionHeader.cmake file to set
|
||||
# the default KiCad version when the source is provided in an archive
|
||||
# file or git is not available on the build system. When KiCad is
|
||||
# cloned using git, the git version is used. This version string should
|
||||
# be set after each version tag is added to the git repo. This will
|
||||
# give developers a reasonable idea where which branch was used to build
|
||||
# KiCad.
|
||||
set( KICAD_VERSION "5.99.0-unknown" )
|
||||
#
|
||||
# This program source code file is part of KICAD, a free EDA CAD application.
|
||||
#
|
||||
# Copyright (C) 2016 Wayne Stambaugh <stambaughw@gmail.com>
|
||||
# Copyright (C) 2016 - 2021 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
|
||||
#
|
||||
|
||||
# Note: unless you are the person responsible for creating releases,
|
||||
# do *not* change these variables. This way the KiCad project
|
||||
# can maintain control over what is an official KiCad build and
|
||||
# what is not. Setting these variable that conflict with KiCad
|
||||
# releases is a shooting offense.
|
||||
#
|
||||
# This file gets included in the WriteVersionHeader.cmake file to set
|
||||
# the default KiCad version when the source is provided in an archive
|
||||
# file or git is not available on the build system. When KiCad is
|
||||
# cloned using git, the git version is used. This version string should
|
||||
# be set after each version tag is added to the git repo. This will
|
||||
# give developers a reasonable idea where which branch was used to build
|
||||
# KiCad.
|
||||
set( KICAD_VERSION "5.1.12-unknown" )
|
||||
|
||||
@@ -150,7 +150,7 @@ set( sourceFileHeader
|
||||
* your DSN lexer.
|
||||
*/
|
||||
|
||||
#include <${outHeaderFile}>
|
||||
#include <${result}_lexer.h>
|
||||
|
||||
using namespace ${enum};
|
||||
|
||||
@@ -268,7 +268,7 @@ public:
|
||||
|
||||
/**
|
||||
* Constructor ( LINE_READER* )
|
||||
* initializes a lexer and prepares to read from @a aLineReader which
|
||||
* intializes a lexer and prepares to read from @a aLineReader which
|
||||
* is assumed ready, and may be in use by other DSNLEXERs also. No ownership
|
||||
* is taken of @a aLineReader. This enables it to be used by other lexers also.
|
||||
* The transition between grammars in such a case, must happen on a text
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
#
|
||||
# This program source code file is part of KICAD, a free EDA CAD application.
|
||||
#
|
||||
# Copyright (C) 2019 Kicad Developers, see AUTHORS.txt for contributors.
|
||||
# Copyright (C) 2019 Ian McInerney <Ian.S.McInerney@ieee.org>
|
||||
# Copyright (C) 2019 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
|
||||
@@ -21,6 +22,25 @@
|
||||
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
#
|
||||
|
||||
# Build file for generic re-useable libraries
|
||||
# This file will configure the linux appdata.xml file to include the version
|
||||
# and build date.
|
||||
|
||||
add_subdirectory( sexpr )
|
||||
message( STATUS "Creating linux metadata" )
|
||||
|
||||
# Create the KiCad version strings
|
||||
set( SRC_PATH ${PROJECT_SOURCE_DIR} )
|
||||
include( ${CMAKE_MODULE_PATH}/KiCadVersion.cmake )
|
||||
include( ${CMAKE_MODULE_PATH}/KiCadFullVersion.cmake )
|
||||
|
||||
# Create the date of the configure
|
||||
string( TIMESTAMP KICAD_CONFIG_TIMESTAMP "%Y-%m-%d" )
|
||||
|
||||
# Configure the KiCad appdata file
|
||||
configure_file( ${PROJECT_SOURCE_DIR}/resources/linux/appdata/kicad.appdata.xml.in
|
||||
${PROJECT_BINARY_DIR}/resources/linux/appdata/kicad.appdata.xml
|
||||
@ONLY )
|
||||
|
||||
# Ensure the file was configured successfully
|
||||
if( NOT EXISTS ${PROJECT_BINARY_DIR}/resources/linux/appdata/kicad.appdata.xml )
|
||||
message( FATAL_ERROR "Configuration failed to write file kicad.appdata.xml." )
|
||||
endif()
|
||||
@@ -0,0 +1,63 @@
|
||||
#
|
||||
# This program source code file is part of KICAD, a free EDA CAD application.
|
||||
#
|
||||
# Copyright (C) 2019 Ian McInerney <Ian.S.McInerney@ieee.org>
|
||||
# Copyright (C) 2019 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
|
||||
#
|
||||
|
||||
# This file will configure the MacOS info.plist files to include the version
|
||||
# and build date.
|
||||
|
||||
message( STATUS "Creating MacOS metadata" )
|
||||
|
||||
# Create the KiCad version strings
|
||||
set( SRC_PATH ${PROJECT_SOURCE_DIR} )
|
||||
include( ${CMAKE_MODULE_PATH}/KiCadVersion.cmake )
|
||||
include( ${CMAKE_MODULE_PATH}/KiCadFullVersion.cmake )
|
||||
|
||||
|
||||
# Configure each plist file from the respurces directory and store it in the build directory
|
||||
configure_file( ${PROJECT_SOURCE_DIR}/resources/macos/plist/bitmap2component.Info.plist.in
|
||||
${PROJECT_BINARY_DIR}/bitmap2component/Info.plist
|
||||
@ONLY )
|
||||
|
||||
configure_file( ${PROJECT_SOURCE_DIR}/resources/macos/plist/eeschema.Info.plist.in
|
||||
${PROJECT_BINARY_DIR}/eeschema/Info.plist
|
||||
@ONLY )
|
||||
|
||||
configure_file( ${PROJECT_SOURCE_DIR}/resources/macos/plist/gerbview.Info.plist.in
|
||||
${PROJECT_BINARY_DIR}/gerbview/Info.plist
|
||||
@ONLY )
|
||||
|
||||
configure_file( ${PROJECT_SOURCE_DIR}/resources/macos/plist/kicad.Info.plist.in
|
||||
${PROJECT_BINARY_DIR}/kicad/Info.plist
|
||||
@ONLY )
|
||||
|
||||
configure_file( ${PROJECT_SOURCE_DIR}/resources/macos/plist/pcb_calculator.Info.plist.in
|
||||
${PROJECT_BINARY_DIR}/pcb_calculator/Info.plist
|
||||
@ONLY )
|
||||
|
||||
configure_file( ${PROJECT_SOURCE_DIR}/resources/macos/plist/pcbnew.Info.plist.in
|
||||
${PROJECT_BINARY_DIR}/pcbnew/Info.plist
|
||||
@ONLY )
|
||||
|
||||
configure_file( ${PROJECT_SOURCE_DIR}/resources/macos/plist/pleditor.Info.plist.in
|
||||
${PROJECT_BINARY_DIR}/pagelayout_editor/Info.plist
|
||||
@ONLY )
|
||||
@@ -22,25 +22,9 @@
|
||||
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
#
|
||||
|
||||
# Automagically create version header file if the version string was
|
||||
# not defined during the build configuration. If CreateGitVersionHeader
|
||||
# cannot determine the current repo version, a version.h file is still
|
||||
# created with KICAD_VERSION set in KiCadVersion.cmake.
|
||||
# Create the KiCad version strings
|
||||
include( ${CMAKE_MODULE_PATH}/KiCadVersion.cmake )
|
||||
|
||||
# Always use git if it's available to determine the version string.
|
||||
message( STATUS "Using Git to determine build version string." )
|
||||
include( ${CMAKE_MODULE_PATH}/CreateGitVersionHeader.cmake )
|
||||
create_git_version_header( ${SRC_PATH} )
|
||||
|
||||
# $KICAD_VERSION will always be set to something. Even if it is the default
|
||||
# value set in KiCadVersion.cmake
|
||||
set( KICAD_VERSION_FULL "${KICAD_VERSION}" )
|
||||
|
||||
# Optional user version information defined at configuration.
|
||||
if( KICAD_VERSION_EXTRA )
|
||||
set( KICAD_VERSION_FULL "${KICAD_VERSION_FULL}-${KICAD_VERSION_EXTRA}" )
|
||||
endif()
|
||||
include( ${CMAKE_MODULE_PATH}/KiCadFullVersion.cmake )
|
||||
|
||||
set( _wvh_new_version_text
|
||||
"/* Do not modify this file, it was automatically generated by CMake. */
|
||||
|
||||
@@ -75,4 +75,10 @@
|
||||
/// Allows scripts install directory to be referenced by the program code.
|
||||
#define PYTHON_DEST "@PYTHON_DEST@"
|
||||
|
||||
/// ngspice version string detected by pkg-config when available.
|
||||
#cmakedefine NGSPICE_BUILD_VERSION "@NGSPICE_BUILD_VERSION@"
|
||||
|
||||
/// When pkg-config config is not available for ngspice, use ngspice/config.h for version.
|
||||
#cmakedefine NGSPICE_HAVE_CONFIG_H
|
||||
|
||||
#endif // CONFIG_H_
|
||||
|
||||
@@ -194,7 +194,7 @@ jp charras:
|
||||
|
||||
* Add item clarification context menu to EESchema when multiple unresolved
|
||||
items are found at the current cross hair position.
|
||||
* Add collector class EE_COLLECTOR for supporting multiple item hit testing.
|
||||
* Add collector class SCH_COLLECTOR for supporting multiple item hit testing.
|
||||
* Removed bit wise masked filtering from schematic item hit testing.
|
||||
* Removed all old hit testing functions and methods scattered about the
|
||||
EESchema source code.
|
||||
|
||||
@@ -50,7 +50,7 @@ developers. The other KiCad developers will appreciate your effort.
|
||||
**Do not modify this document without the consent of the project
|
||||
leader. All changes to this document require approval.**
|
||||
|
||||
## 1.3 Tools ## {#tools}
|
||||
## 1.3 Tools
|
||||
|
||||
There are some tools that can help you format your code easily.
|
||||
|
||||
|
||||
@@ -125,7 +125,7 @@ section.
|
||||
|
||||
## Ngspice Library ## {#ngspice}
|
||||
|
||||
The [Ngspice Library][libngspice] is used to provide Spice simulation support in the schematic
|
||||
The [Ngspice Library][libngsice] is used to provide Spice simulation support in the schematic
|
||||
editor. Make sure the the version of ngspice library used was built with the--with-ngshared
|
||||
option. This library needs to be installed unless the Spice build option is disabled.
|
||||
|
||||
@@ -135,6 +135,17 @@ KiCad has many build options that can be configured to build different options d
|
||||
the availability of support for each option on a given platform. This section documents
|
||||
these options and their default values.
|
||||
|
||||
## Advanced Graphics Context ## {#graphics_context_opt}
|
||||
|
||||
The USE_WX_GRAPHICS_CONTEXT option replaces wxDC with wxGraphicsContext for graphics rendering.
|
||||
This option is disabled by default. Warning: the is experimental and has not been maintained
|
||||
so use at your own risk.
|
||||
|
||||
## Graphics Context Overlay ## {#overlay_opt}
|
||||
|
||||
The USE_WX_OVERLAY option is used to enable the optional wxOverlay class for graphics rendering
|
||||
on macOS. This is enabled on macOS by default and disabled on all other platforms.
|
||||
|
||||
## Scripting Support ## {#scripting_opt}
|
||||
|
||||
The KICAD_SCRIPTING option is used to enable building the Python scripting support into Pcbnew.
|
||||
@@ -201,26 +212,17 @@ whether install them or not with the KICAD_INSTALL_DEMOS option. You can also se
|
||||
install them with the KICAD_DEMOS variable. On Linux the demos are installed in
|
||||
$PREFIX/share/kicad/demos by default.
|
||||
|
||||
## Quality assurance (QA) unit tests ## {#quality_assurance_tests_opt}
|
||||
## Python Scripting Action Menu Support ## {#python_action_menu_opt}
|
||||
|
||||
The KICAD_BUILD_QA_TESTS option allows building unit tests binaries for quality assurance as part
|
||||
of the default build. This option is enabled by default.
|
||||
|
||||
If this option is disabled, the QA binaries can still be built by manually specifying the target.
|
||||
For example, with `make`:
|
||||
|
||||
* Build all QA binaries: `make qa_all`
|
||||
* Build a specific test: `make qa_pcbnew`
|
||||
* Build all unit tests: `make qa_all_tests`
|
||||
* Build all test tool binaries: `make qa_all_tools`
|
||||
|
||||
For more information about testing KiCad, see [this page](testing.md).
|
||||
The KICAD_SCRIPTING_ACTION_MENU option allows Python scripts to be added directly to the Pcbnew
|
||||
menu. This option is disabled by default. Please note that this option is highly experimental
|
||||
and can cause Pcbnew to crash if Python scripts create an invalid object state within Pcbnew.
|
||||
|
||||
## KiCad Build Version ## {#build_version_opt}
|
||||
|
||||
The KiCad version string is defined by the output of `git describe --dirty` when git is available
|
||||
or the version string defined in CMakeModules/KiCadVersion.cmake with the value of
|
||||
KICAD_VERSION_EXTRA appended to the former. If the KICAD_VERSION_EXTRA variable is not define,
|
||||
KICAD_VERSION_EXTRA appended to the former. If the KICAD_VERSION_EXTRA variable is not defined,
|
||||
it is not appended to the version string. If the KICAD_VERSION_EXTRA variable is defined it
|
||||
is appended along with a leading '-' to the full version string as follows:
|
||||
|
||||
@@ -233,18 +235,6 @@ information as follows:
|
||||
|
|
||||
output of `git describe --dirty` if git is available.
|
||||
|
||||
|
||||
## KiCad Config Directory ## {#config_dir_opt}
|
||||
|
||||
The default KiCad configuration directory is `kicad`. On Linux this is located at
|
||||
`~/.config/kicad`, on MSW, this is `C:\Documents and Settings\username\Application Data\kicad` and
|
||||
on MacOS, this is `~/Library/Preferences/kicad`. If the installation package would like to, it may
|
||||
specify an alternate configuration name instead of `kicad`. This may be useful for versioning
|
||||
the configuration parameters and allowing the use of, e.g. `kicad5` and `kicad6` concurrently without
|
||||
losing configuration data.
|
||||
|
||||
This is set by specifying the KICAD_CONFIG_DIR string at compile time.
|
||||
|
||||
# Getting the KiCad Source Code ## {#getting_src}
|
||||
|
||||
There are several ways to get the KiCad source. If you want to build the stable version you
|
||||
@@ -481,8 +471,8 @@ to download and [build Boost][] from source. If you are building Boost on windo
|
||||
you will have to apply the Boost patches in the KiCad source [patches folder][].
|
||||
|
||||
|
||||
[download]: http://kicad-pcb.org/download/
|
||||
[KiCad website]: http://kicad-pcb.org/
|
||||
[download]: http://kicad.org/download/
|
||||
[KiCad website]: http://kicad.org/
|
||||
[KiCad Launchpad]: https://launchpad.net/kicad
|
||||
[GNU GCC]: https://gcc.gnu.org/
|
||||
[Clang]: http://clang.llvm.org/
|
||||
|
||||
@@ -19,13 +19,13 @@ interpreter installed on the system.
|
||||
The Pcbnew Python API can be used stand-alone, i.e. no instance of Pcbnew is
|
||||
running and the board project to be manipulated is loaded and saved from and to
|
||||
file. This approach is shown with some examples in the [user's
|
||||
documentation](http://docs.kicad-pcb.org/stable/en/pcbnew.html#_kicad_scripting_reference).
|
||||
documentation](http://docs.kicad.org/stable/en/pcbnew.html#_kicad_scripting_reference).
|
||||
|
||||
Another documentation source is the auto-generated Doxygen reference of the
|
||||
API. It can be found
|
||||
[here](http://docs.kicad-pcb.org/doxygen-python/namespacepcbnew.html).
|
||||
[here](http://docs.kicad.org/doxygen-python/namespacepcbnew.html).
|
||||
|
||||
# \`Action Plugin\` Support # {#ppi_action_pi}
|
||||
# `Action Plugin` Support # {#ppi_action_pi}
|
||||
Besides the stand-alone usage of the generated Python plugin interface,
|
||||
additional support regarding online manipulation of board projects is available
|
||||
for Pcbnew. Plugins using this feature are called `Action Plugins` and they are
|
||||
@@ -44,23 +44,21 @@ In order for the discovery process to work, the following requirements must be m
|
||||
|
||||
* The plugin must be installed in the KiCad plugins search paths as documented
|
||||
in `scripting/kicadplugins.i`. You can always discover the search path for your
|
||||
setup by opening the scripting console and entering the command:
|
||||
setup by opening the Scripting console and entering the command: `import pcbnew;
|
||||
print pcbnew.PLUGIN_DIRECTORIES_SEARCH`.
|
||||
|
||||
`import pcbnew; print pcbnew.PLUGIN_DIRECTORIES_SEARCH`
|
||||
|
||||
Currently on a Linux Installation the plugins search path is
|
||||
Currently on a Linux Installation the plugins search path is
|
||||
|
||||
* /usr/share/kicad/scripting/plugins/
|
||||
* ~/.kicad/scripting/plugins
|
||||
* ~/.kicad_plugins/
|
||||
|
||||
On Windows
|
||||
On Windows
|
||||
|
||||
* \%KICAD_INSTALL_PATH%/share/kicad/scripting/plugins
|
||||
* \%APPDATA%/Roaming/kicad/scripting/plugins
|
||||
* \{KICAD_INSTALL_PATH\}/share/kicad/scripting/plugins
|
||||
* %APPDATA%/Roaming/kicad/scripting/plugins
|
||||
|
||||
On macOS, there is a security feature that makes it easier to add scripting plugins
|
||||
to the ~/Library... path than to kicad.app, but the search path is
|
||||
On macOS, there is a security feature that makes it easier to add scripting plugins to the ~/Library... path than to kicad.app, but the search path is
|
||||
|
||||
* /Applications/kicad/Kicad/Contents/SharedSupport/scripting/plugins
|
||||
* ~/Library/Application Support/kicad/scripting/plugins
|
||||
|
||||
@@ -101,5 +101,5 @@ capabilities.
|
||||
- In progress.
|
||||
|
||||
|
||||
[kicad-website]:http://kicad-pcb.org/
|
||||
[kicad-docs]:http://ci.kicad-pcb.org/job/kicad-doxygen/ws/Documentation/doxygen/html/index.html
|
||||
[kicad-website]:http://kicad.org/
|
||||
[kicad-docs]:http://ci.kicad.org/job/kicad-doxygen/ws/Documentation/doxygen/html/index.html
|
||||
|
||||
@@ -71,7 +71,7 @@ GitHub plugin.
|
||||
|
||||
To provide a convenient method for system packagers to build KiCad from known stable sources,
|
||||
source archives in the most common formats along with the resulting md5sum checksum will be
|
||||
added to either the KiCad developer's site on Launchpad or the main website at www.kicad-pcb.org.
|
||||
added to either the KiCad developer's site on Launchpad or the main website at www.kicad.org.
|
||||
|
||||
# Stable Release Announcement # {#announcement}
|
||||
|
||||
|
||||
@@ -1,170 +0,0 @@
|
||||
# Technical To-Do List {#technical_todo}
|
||||
|
||||
Some work is blocked for technical reasons, and can only be done once
|
||||
certain other criteria are met (e.g. library versions).
|
||||
|
||||
Because KiCad supports distributions with relatively long support cycles,
|
||||
many of these workarounds will be required for some time, so they are easily
|
||||
forgotten.
|
||||
|
||||
This section collects these so they can be dealt with when the project's
|
||||
minimum version for that dependency is met. This kind of code should always be
|
||||
documented in detail at the place of use, so that it's clear what action should
|
||||
be taken in future.
|
||||
|
||||
[TOC]
|
||||
|
||||
# C++ Versions {#todo_cpp_version}
|
||||
|
||||
Newer C++ versions include features that make some of our current code unnecessary.
|
||||
|
||||
## C++11 {#todo_cpp_11}
|
||||
|
||||
This C++ standard version is already used by KiCad, but much code that pre-dates
|
||||
the version switch exists and can be tidied.
|
||||
|
||||
* [`std::auto_ptr`](https://en.cppreference.com/w/cpp/memory/auto_ptr)
|
||||
should be changed to [`std::unique_ptr`](https://en.cppreference.com/w/cpp/memory/unique_ptr).
|
||||
`auto_ptr` is removed entirely in C++17.
|
||||
|
||||
## C++14 {#todo_cpp_14}
|
||||
|
||||
Compiler support:
|
||||
|
||||
* GCC: complete by GCC 5: [GCC C++14 support](https://gcc.gnu.org/projects/cxx-status.html#cxx14).
|
||||
|
||||
Provides:
|
||||
|
||||
* [`std::make_unique`](https://en.cppreference.com/w/cpp/memory/unique_ptr/make_unique)
|
||||
is available. The "polyfill" in `make_unique.h` is no longer required and can
|
||||
be removed.
|
||||
|
||||
## C++17 {#todo_cpp_17}
|
||||
|
||||
Compiler support:
|
||||
|
||||
* GCC: from GCC 5 to 7: [GCC C++17 support](https://gcc.gnu.org/projects/cxx-status.html#cxx17).
|
||||
|
||||
Provides:
|
||||
|
||||
* `OPT<>` can be replaced with [`std::optional`](https://en.cppreference.com/w/cpp/utility/optional).
|
||||
Header `core/optional.h` can be removed and replaced with the built-in `<optional>`.
|
||||
Needs [GCC 7][].
|
||||
* [`std::filesystem`](https://en.cppreference.com/w/cpp/filesystem)
|
||||
can replace `boost::filesystem` and the Boost dependency can be dropped entirely
|
||||
from the CMake files.
|
||||
|
||||
# Compilers {#compilers}
|
||||
|
||||
Some compilers have bugs or limitations to C++ standard support.
|
||||
|
||||
## GCC {#todo_gcc}
|
||||
|
||||
Current versions:
|
||||
|
||||
* Debian Stretch: [6.3.0](https://packages.debian.org/stretch/gcc)
|
||||
* Debian Buster: [8.3.0](https://packages.debian.org/buster/gcc)
|
||||
* Ubuntu 14.04: [4.8.2](https://packages.ubuntu.com/trusty/gcc)
|
||||
* Ubuntu 16.04: [5.3.1](https://packages.ubuntu.com/xenial/gcc)
|
||||
* Ubuntu 18.04: [7.3.0](https://packages.ubuntu.com/bionic/gcc)
|
||||
|
||||
### GCC 7 {#todo_gcc_7}
|
||||
|
||||
* Fixes [bug #56480](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56480)
|
||||
(Explicit specialization in a different namespace). This
|
||||
means the `BOOST_TEST_PRINT_NAMESPACE_OPEN` macro is not required, a namespace
|
||||
alias can be used instead.
|
||||
|
||||
# 3rd Party Libraries # {#todo_third_party}
|
||||
|
||||
There are several places in KiCad where workarounds exist for defects in 3rd
|
||||
party library limitations or defects.
|
||||
|
||||
## Boost ## {#todo_boost}
|
||||
|
||||
Current versions:
|
||||
|
||||
* Debian Stretch: [1.62](https://packages.debian.org/stretch/libboost-dev)
|
||||
* Ubuntu 14.04: [1.54](https://packages.ubuntu.com/trusty/libboost-dev)
|
||||
* Ubuntu 16.04: [1.58](https://packages.ubuntu.com/xenial/libboost-dev)
|
||||
* Ubuntu 18.04: [1.65](https://packages.ubuntu.com/bionic/libboost-dev)
|
||||
|
||||
### 1.59 {#boost_1_59}
|
||||
|
||||
* Boost 1.59 brings a major overhaul of the [Boost test][] library.
|
||||
* Many "Polyfills" un `unit_test_utils.h` can be removed:
|
||||
* `BOOST_TEST_CONTEXT` and `BOOST_TEST_INFO` are available, remove the
|
||||
polyfill macros.
|
||||
* `boost::unit_test::expected_failures` is available, so can remove the
|
||||
`HAVE_EXPECTED_FAILURES` guard macro.
|
||||
* `BOOST_TEST_PRINT_NAMESPACE_OPEN` doesn't need to switch the namespace
|
||||
|
||||
### 1.64 #### {#todo_boost_1_64}
|
||||
|
||||
* [Boost test][]
|
||||
* Boost test print helper for `nullptr_t` exists, can remove our polyfill
|
||||
* The [`boost_test_print_type`](https://www.boost.org/doc/libs/master/libs/test/doc/html/boost_test/test_output/test_tools_support_for_logging/testing_tool_output_disable.html)
|
||||
customisation point exists and the old code using `BOOST_TEST_PRINT_NAMESPACE_OPEN`
|
||||
can be converted to use that.
|
||||
|
||||
## CMake ### {#todo_cmake}
|
||||
|
||||
Current versions:
|
||||
|
||||
* Debian Stretch: [3.7.2](https://packages.debian.org/stretch/cmake)
|
||||
* Ubuntu 14.04: [2.8.12](https://packages.ubuntu.com/trusty/cmake)
|
||||
* Ubuntu 16.04: [3.5.1](https://packages.ubuntu.com/xenial/cmake)
|
||||
* Ubuntu 18.04: [3.10.2](https://packages.ubuntu.com/bionic/cmake)
|
||||
|
||||
### 3.1 {#todo_cmake_3_1}
|
||||
|
||||
* Can remove [CMake policy CMP0025](https://cmake.org/cmake/help/v3.0/policy/CMP0025.html)
|
||||
from root CMake
|
||||
|
||||
### 3.3 {#todo_cmake_3_3}
|
||||
|
||||
* Can remove check for [CMake policy CMP0063](https://cmake.org/cmake/help/git-stage/policy/CMP0063.html)
|
||||
entirely (the policy exists as of v3.3 and the default is correct).
|
||||
|
||||
### 3.5 {#todo_cmake_3_5}
|
||||
|
||||
* Can use `target_link_libraries(foo Boost::boost)` for Boost header-only libraries,
|
||||
rather than `${Boost_INCLUDE_DIRS}`.
|
||||
C.f. [Github commit](https://github.com/Kitware/CMake/commit/3f9b081f6ee85e0691c36496d989edbe8382589d)
|
||||
|
||||
## OpenSSL {#todo_openssl}
|
||||
|
||||
Current versions:
|
||||
|
||||
* Debian Stretch: [1.0.1](https://packages.debian.org/stretch/openssl)
|
||||
* Ubuntu 14.04: [1.0.1](https://packages.ubuntu.com/trusty/openssl)
|
||||
* Ubuntu 16.04: [1.0.2](https://packages.ubuntu.com/xenial/openssl)
|
||||
* Ubuntu 18.04: [1.1.0](https://packages.ubuntu.com/bionic/openssl)
|
||||
|
||||
### 1.1.0 {#todo_openssl_1_1_0}
|
||||
|
||||
* Can remove all locking code from `kicad_curl.cpp`. From v1.1.0, this is no
|
||||
longer required. C.f. [OpenSSL issue 1260](https://github.com/openssl/openssl/issues/1260)
|
||||
|
||||
## wxWidgets {#todo_wx}
|
||||
|
||||
Current versions:
|
||||
|
||||
* Debian Stretch: [3.0.2](https://packages.debian.org/stretch/wx-common)
|
||||
* Ubuntu 14.04: [3.0.0](https://packages.ubuntu.com/trusty/wx-common)
|
||||
* Ubuntu 16.04: [3.0.2](https://packages.ubuntu.com/xenial/wx-common)
|
||||
* Ubuntu 18.04: [3.0.4](https://packages.ubuntu.com/bionic/wx-common)
|
||||
|
||||
### 3.1 {#todo_wx_3_1}
|
||||
|
||||
This is a development release, but it brings its own set of features and fixes.
|
||||
Most of these will not be available in general distributions until v3.2.
|
||||
|
||||
* DPI scaling on GTK+ available (also needs GTK+ 3.10).
|
||||
C.f. [this commit](https://github.com/wxWidgets/wxWidgets/commit/f95fd11e08482697c3b0c0a9d2ccd661134480ee)
|
||||
`dpi_scaling.cpp` should continue to work normally, but the config should
|
||||
no longer be required and the scaling should auto-detect.
|
||||
|
||||
|
||||
[Boost test]: https://github.com/boostorg/test
|
||||
[GCC 7]: https://gcc.gnu.org/gcc-7/changes.html
|
||||
@@ -44,22 +44,6 @@ Common useful patterns:
|
||||
You can rebuild just a specific test with CMake to avoid rebuilding
|
||||
everything when working on a small area, e.g. `make qa_common`.
|
||||
|
||||
### Automated testing {#automated-testing}
|
||||
|
||||
The unit tests can be run on automated Continuous Integration (CI) systems.
|
||||
|
||||
By default, tests output human-readable results, which is useful when
|
||||
developing or debugging, but not so useful for automated test reporting.
|
||||
Systems that can parse XML test results can enable these by setting the
|
||||
`KICAD_TEST_XML_OUTPUT` option to `ON`. The test results are then output
|
||||
as files ending in `.xml` in the `qa` subdirectory.
|
||||
|
||||
Test results are written to the build directory as follows:
|
||||
|
||||
* Boost units tests: one XML file per test with the extension `.boost-results.xml`
|
||||
* Python unit tests: one directory per test with the extension `.xunit-results.xml`.
|
||||
These directories contain one `.xml` file per Python test case file.
|
||||
|
||||
## Writing Boost tests {#writing-boost-tests}
|
||||
|
||||
Boost unit tests are straightforward to write. Individual test cases can be
|
||||
@@ -130,15 +114,6 @@ the triggering of a bug prior to fixing it. This is advantageous, not only from
|
||||
a "project history" perspective, but also to ensure that the test you write to
|
||||
catch the bug in question does, in fact, catch the bug in the first place.
|
||||
|
||||
### Assertions {#test-assertions}
|
||||
|
||||
It is possible to check for assertions in unit tests. When running the unit
|
||||
tests, `wxASSERT` calls are caught and re-thrown as exceptions. You can then use
|
||||
the `CHECK_WX_ASSERT` macro to check this is called in Debug builds. In Release
|
||||
builds, the check is not run, as `wxASSERT` is disabled in these builds.
|
||||
|
||||
You can use this to ensure that code rejects invalid input correctly.
|
||||
|
||||
## Python modules {#python-tests}
|
||||
|
||||
The Pcbnew Python modules have some test programs in the `qa` directory.
|
||||
@@ -329,6 +304,6 @@ Issues are still welcome for defects discovered.
|
||||
[Boost Unit Test framework]: https://www.boost.org/doc/libs/1_68_0/libs/test/doc/html/index.html
|
||||
[boost-test-functions]: https://www.boost.org/doc/libs/1_68_0/libs/test/doc/html/boost_test/utf_reference/testing_tool_ref.html
|
||||
[AFL fuzzing tool]: http://lcamtuf.coredump.cx/afl/
|
||||
[trace mask documentation]: http://docs.kicad-pcb.org/doxygen/group__trace__env__vars.html
|
||||
[trace mask documentation]: http://docs.kicad-pcb.org/doxygen/group__trace__env__vars.html
|
||||
[advanced config documentation]: http://docs.kicad-pcb.org/doxygen/namespaceAC__KEYS.html
|
||||
[trace mask documentation]: http://docs.kicad.org/doxygen/group__trace__env__vars.html
|
||||
[trace mask documentation]: http://docs.kicad.org/doxygen/group__trace__env__vars.html
|
||||
[advanced config documentation]: http://docs.kicad.org/doxygen/namespaceAC__KEYS.html
|
||||
|
||||
@@ -71,7 +71,8 @@ or not, has a `TOOL_ACTION` instance. This provides:
|
||||
|
||||
GAL tools inherit the `TOOL_BASE` class. A Pcbnew tool will generally
|
||||
inherit from `PCB_TOOL`, which is a `TOOL_INTERACTIVE`, which is
|
||||
a `TOOL_BASE`. Eeschema tools inherit directly from `TOOL_INTERACTIVE`.
|
||||
a `TOOL_BASE`. In the future, Eeschema tools will be developed in a similar
|
||||
manner.
|
||||
|
||||
The tool class for a tool can be fairly lightweight - much of the
|
||||
functionality is inherited from the tool's base classes. These base
|
||||
@@ -131,7 +132,7 @@ a cursor change and by setting a status string.
|
||||
auto& frame = *getEditFrame<PCB_EDIT_FRAME>();
|
||||
|
||||
// set tool hint and cursor (actually looks like a crosshair)
|
||||
frame.SetToolID( ID_LOCAL_RATSNEST_BUTT,
|
||||
frame.SetToolID( ID_PCB_SHOW_1_RATSNEST_BUTT,
|
||||
wxCURSOR_PENCIL, _( "Select item to move left" ) );
|
||||
getViewControls()->ShowCursor( true );
|
||||
|
||||
@@ -545,8 +546,22 @@ Below you will find the contents of useless_tool.cpp:
|
||||
|
||||
The last step is to register the tool in the tool manager.
|
||||
|
||||
This is done in the frame's `setupTools()` function for whichever
|
||||
`EDA_DRAW_FRAME` support that tool.
|
||||
This is done by adding a new instance of the tool to the
|
||||
`registerAllTools()` function in `pcbnew/tools/tools_common.cpp`.
|
||||
|
||||
// add your tool header
|
||||
#include <tools/useless_tool.h>
|
||||
|
||||
void registerAllTools( TOOL_MANAGER *aToolManager )
|
||||
{
|
||||
....
|
||||
aToolManager->RegisterTool( new USELESS_TOOL );
|
||||
....
|
||||
}
|
||||
|
||||
If your new tool applies in the module editor, you also need to do this
|
||||
in `FOOTPRINT_EDIT_FRAME::setupTools()`. Generally, each kind of
|
||||
`EDA_DRAW_FRAME` that can use GAL will have a place to do this.
|
||||
|
||||
## Build and run {#tutorial-summary}
|
||||
|
||||
|
||||
@@ -3,8 +3,6 @@ if( COMPILER_SUPPORTS_WSHADOW )
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${WSHADOW_FLAGS}")
|
||||
endif()
|
||||
|
||||
add_definitions( -DBITMAP_2_CMP )
|
||||
|
||||
include_directories( BEFORE ${INC_BEFORE} )
|
||||
include_directories(
|
||||
../potrace
|
||||
@@ -13,10 +11,9 @@ include_directories(
|
||||
|
||||
set( BITMAP2COMPONENT_SRCS
|
||||
../common/single_top.cpp
|
||||
bitmap2cmp_main.cpp
|
||||
bitmap2component.cpp
|
||||
bitmap2cmp_gui_base.cpp
|
||||
bitmap2cmp_gui.cpp
|
||||
bitmap2cmp_gui_base
|
||||
bitmap2cmp_gui
|
||||
)
|
||||
|
||||
set_source_files_properties( ../common/single_top.cpp PROPERTIES
|
||||
@@ -40,7 +37,7 @@ if( APPLE )
|
||||
MACOSX_PACKAGE_LOCATION Resources
|
||||
)
|
||||
set( MACOSX_BUNDLE_ICON_FILE bitmap2component.icns )
|
||||
set( MACOSX_BUNDLE_GUI_IDENTIFIER org.kicad-pcb.kicad )
|
||||
set( MACOSX_BUNDLE_GUI_IDENTIFIER org.kicad.kicad )
|
||||
set( MACOSX_BUNDLE_NAME bitmap2component )
|
||||
endif()
|
||||
|
||||
@@ -57,11 +54,8 @@ target_link_libraries( bitmap2component
|
||||
)
|
||||
|
||||
if( APPLE )
|
||||
include( ${CMAKE_MODULE_PATH}/KiCadVersion.cmake )
|
||||
configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist.in ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist @ONLY )
|
||||
|
||||
set_target_properties( bitmap2component PROPERTIES
|
||||
MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist
|
||||
MACOSX_BUNDLE_INFO_PLIST ${PROJECT_BINARY_DIR}/bitmap2component/Info.plist
|
||||
)
|
||||
|
||||
# put individual bundle outside of main bundle as a first step
|
||||
@@ -92,6 +86,6 @@ endif()
|
||||
|
||||
if( false ) # linker map with cross reference
|
||||
set_target_properties( bitmap2component PROPERTIES
|
||||
LINK_FLAGS "-Wl,-cref,-Map=bitmap2component.map"
|
||||
LINK_FLAGS "${TO_LINKER},-cref ${TO_LINKER},-Map=bitmap2component.map"
|
||||
)
|
||||
endif()
|
||||
|
||||
@@ -1,42 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDocumentTypes</key>
|
||||
<array/>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>English</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>bitmap2component</string>
|
||||
<key>CFBundleGetInfoString</key>
|
||||
<string></string>
|
||||
<key>CFBundleIconFile</key>
|
||||
<string>bitmap2component.icns</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>org.kicad-pcb.bitmap2component</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleLongVersionString</key>
|
||||
<string>@KICAD_VERSION_FULL@</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>Bitmap 2 Component</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>@KICAD_VERSION@</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>@KICAD_VERSION_FULL@</string>
|
||||
<key>CSResourcesFileMapped</key>
|
||||
<true/>
|
||||
<key>LSRequiresCarbon</key>
|
||||
<true/>
|
||||
<key>NSRequiresAquaSystemAppearance</key>
|
||||
<true/>
|
||||
<key>NSHumanReadableCopyright</key>
|
||||
<string></string>
|
||||
<key>NSHighResolutionCapable</key>
|
||||
<string>True</string>
|
||||
</dict>
|
||||
</plist>
|
||||
+279
-427
@@ -2,7 +2,7 @@
|
||||
* This program source code file is part of KICAD, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 1992-2010 jean-pierre.charras
|
||||
* Copyright (C) 1992-2019 Kicad Developers, see AUTHORS.txt for contributors.
|
||||
* Copyright (C) 1992-2019 Kicad Developers, see change_log.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
|
||||
@@ -22,22 +22,23 @@
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#include "bitmap2cmp_gui.h"
|
||||
#include "bitmap2component.h"
|
||||
#include <bitmap_io.h>
|
||||
#include <bitmaps.h>
|
||||
#include <build_version.h>
|
||||
#include <confirm.h>
|
||||
#include <fctsys.h>
|
||||
#include <gestfich.h>
|
||||
#include <kiface_i.h>
|
||||
#include <kiway.h>
|
||||
#include <macros.h>
|
||||
|
||||
#include <pgm_base.h>
|
||||
#include <potracelib.h>
|
||||
#include <confirm.h>
|
||||
#include <gestfich.h>
|
||||
#include <wildcards_and_files_ext.h>
|
||||
#include <wx/clipbrd.h>
|
||||
#include <bitmap_io.h>
|
||||
#include <build_version.h>
|
||||
#include <menus_helpers.h>
|
||||
#include <kiway.h>
|
||||
#include <kiface_i.h>
|
||||
|
||||
#include <wx/rawbmp.h>
|
||||
#include <potracelib.h>
|
||||
|
||||
#include "bitmap2component.h"
|
||||
|
||||
#include "bitmap2cmp_gui_base.h"
|
||||
|
||||
@@ -52,137 +53,141 @@
|
||||
#define KEYWORD_LAST_MODLAYER wxT( "Last_modlayer" )
|
||||
#define KEYWORD_BINARY_THRESHOLD wxT( "Threshold" )
|
||||
#define KEYWORD_BW_NEGATIVE wxT( "Negative_choice" )
|
||||
#define KEYWORD_UNIT_SELECTION wxT( "Unit_selection" )
|
||||
|
||||
#define DEFAULT_DPI 300 // the image DPI used in formats that do not define a DPI
|
||||
#define DEFAULT_DPI 300 // Default resolution in Bit per inches
|
||||
|
||||
IMAGE_SIZE::IMAGE_SIZE()
|
||||
extern int bitmap2component( potrace_bitmap_t* aPotrace_bitmap, FILE* aOutfile,
|
||||
OUTPUT_FMT_ID aFormat, int aDpi_X, int aDpi_Y,
|
||||
BMP2CMP_MOD_LAYER aModLayer );
|
||||
|
||||
/**
|
||||
* Class BM2CMP_FRAME_BASE
|
||||
* is the main frame for this application
|
||||
*/
|
||||
class BM2CMP_FRAME : public BM2CMP_FRAME_BASE
|
||||
{
|
||||
m_outputSize = 0.0;
|
||||
m_originalDPI = DEFAULT_DPI;
|
||||
m_originalSizePixels = 0;
|
||||
m_unit = MILLIMETRES;
|
||||
}
|
||||
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
|
||||
bool m_Negative;
|
||||
wxString m_BitmapFileName;
|
||||
wxString m_ConvertedFileName;
|
||||
wxSize m_frameSize;
|
||||
wxPoint m_framePos;
|
||||
std::unique_ptr<wxConfigBase> m_config;
|
||||
|
||||
public:
|
||||
BM2CMP_FRAME( KIWAY* aKiway, wxWindow* aParent );
|
||||
~BM2CMP_FRAME();
|
||||
|
||||
void IMAGE_SIZE::SetOutputSizeFromInitialImageSize()
|
||||
{
|
||||
// Set the m_outputSize value from the m_originalSizePixels and the selected unit
|
||||
if( m_unit == MILLIMETRES )
|
||||
// overload KIWAY_PLAYER virtual
|
||||
bool OpenProjectFiles( const std::vector<wxString>& aFilenames, int aCtl=0 ) override;
|
||||
|
||||
private:
|
||||
|
||||
// Event handlers
|
||||
void OnPaintInit( wxPaintEvent& event ) override;
|
||||
void OnPaintGreyscale( wxPaintEvent& event ) override;
|
||||
void OnPaintBW( wxPaintEvent& event ) override;
|
||||
void OnLoadFile( wxCommandEvent& event ) override;
|
||||
void OnExport( wxCommandEvent& event ) override;
|
||||
|
||||
/**
|
||||
* Generate a schematic library which contains one component:
|
||||
* the logo
|
||||
*/
|
||||
void OnExportEeschema();
|
||||
|
||||
/**
|
||||
* Generate a module in S expr format
|
||||
*/
|
||||
void OnExportPcbnew();
|
||||
|
||||
/**
|
||||
* Generate a postscript file
|
||||
*/
|
||||
void OnExportPostScript();
|
||||
|
||||
/**
|
||||
* Generate a file suitable to be copied into a page layout
|
||||
* description file (.kicad_wks file
|
||||
*/
|
||||
void OnExportLogo();
|
||||
|
||||
void Binarize( double aThreshold ); // aThreshold = 0.0 (black level) to 1.0 (white level)
|
||||
void OnNegativeClicked( wxCommandEvent& event ) override;
|
||||
void OnThresholdChange( wxScrollEvent& event ) override;
|
||||
void OnResolutionChange( wxCommandEvent& event ) override;
|
||||
|
||||
// called when texts controls which handle the image resolution
|
||||
// lose the focus, to ensure the right values are displayed
|
||||
// because the m_imageDPI are clipped to acceptable values, and
|
||||
// the text displayed could be differ during text editing
|
||||
// We are using ChangeValue here to avoid generating a wxEVT_TEXT event.
|
||||
void UpdateDPITextValueX( wxMouseEvent& event )
|
||||
{
|
||||
m_outputSize = (double)GetOriginalSizePixels() / m_originalDPI * 25.4;
|
||||
}
|
||||
else if( m_unit == INCHES )
|
||||
{
|
||||
m_outputSize = (double)GetOriginalSizePixels() / m_originalDPI;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_outputSize = m_originalDPI;
|
||||
m_DPIValueX->ChangeValue( wxString::Format( wxT( "%d" ), m_imageDPI.x ) );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
int IMAGE_SIZE::GetOutputDPI()
|
||||
{
|
||||
int outputDPI;
|
||||
|
||||
if( m_unit == MILLIMETRES )
|
||||
void UpdateDPITextValueY( wxMouseEvent& event )
|
||||
{
|
||||
outputDPI = GetOriginalSizePixels() / ( m_outputSize / 25.4 );
|
||||
}
|
||||
else if( m_unit == INCHES )
|
||||
{
|
||||
outputDPI = GetOriginalSizePixels() / m_outputSize;
|
||||
}
|
||||
else
|
||||
{
|
||||
outputDPI = KiROUND( m_outputSize );
|
||||
m_DPIValueY->ChangeValue( wxString::Format( wxT( "%d" ), m_imageDPI.y ) );
|
||||
}
|
||||
|
||||
return outputDPI;
|
||||
}
|
||||
|
||||
|
||||
void IMAGE_SIZE::SetUnit( EDA_UNITS_T aUnit )
|
||||
{
|
||||
// Set the unit used for m_outputSize, and convert the old m_outputSize value
|
||||
// to the value in new unit
|
||||
if( aUnit == m_unit )
|
||||
return;
|
||||
|
||||
// Convert m_outputSize to mm:
|
||||
double size_mm;
|
||||
|
||||
if( m_unit == MILLIMETRES )
|
||||
{
|
||||
size_mm = m_outputSize;
|
||||
}
|
||||
else if( m_unit == INCHES )
|
||||
{
|
||||
size_mm = m_outputSize * 25.4;
|
||||
}
|
||||
else
|
||||
{
|
||||
// m_outputSize is the DPI, not an image size
|
||||
// the image size is m_originalSizePixels / m_outputSize (in inches)
|
||||
if( m_outputSize )
|
||||
size_mm = m_originalSizePixels / m_outputSize * 25.4;
|
||||
else
|
||||
size_mm = 0;
|
||||
}
|
||||
|
||||
// Convert m_outputSize to new value:
|
||||
if( aUnit == MILLIMETRES )
|
||||
{
|
||||
m_outputSize = size_mm;
|
||||
}
|
||||
else if( aUnit == INCHES )
|
||||
{
|
||||
m_outputSize = size_mm / 25.4;
|
||||
}
|
||||
else
|
||||
{
|
||||
if( size_mm )
|
||||
m_outputSize = m_originalSizePixels / size_mm * 25.4;
|
||||
else
|
||||
m_outputSize = 0;
|
||||
}
|
||||
|
||||
m_unit = aUnit;
|
||||
}
|
||||
|
||||
void NegateGreyscaleImage( );
|
||||
void ExportFile( FILE* aOutfile, OUTPUT_FMT_ID aFormat );
|
||||
void updateImageInfo();
|
||||
void OnFormatChange( wxCommandEvent& event ) override;
|
||||
};
|
||||
|
||||
|
||||
BM2CMP_FRAME::BM2CMP_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
|
||||
BM2CMP_FRAME_BASE( aParent )
|
||||
{
|
||||
SetKiway( this, aKiway );
|
||||
|
||||
int tmp;
|
||||
m_config = GetNewConfig( Pgm().App().GetAppName() );
|
||||
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 );
|
||||
|
||||
wxString unitList[] =
|
||||
if( m_config->Read( KEYWORD_BINARY_THRESHOLD, &tmp ) )
|
||||
m_sliderThreshold->SetValue( tmp );
|
||||
|
||||
m_config->Read( KEYWORD_BW_NEGATIVE, &tmp, 0 );
|
||||
m_Negative = tmp != 0;
|
||||
m_checkNegative->SetValue( m_Negative );
|
||||
|
||||
if( m_config->Read( KEYWORD_LAST_FORMAT, &tmp ) )
|
||||
{
|
||||
_("mm"), _("Inch"), _("DPI")
|
||||
};
|
||||
if( tmp < 0 || tmp > FINAL_FMT )
|
||||
tmp = PCBNEW_KICAD_MOD;
|
||||
|
||||
for( int ii = 0; ii < 3; ii++ )
|
||||
m_PixelUnit->Append( unitList[ii] );
|
||||
m_radioBoxFormat->SetSelection( tmp );
|
||||
}
|
||||
|
||||
LoadSettings( m_config.get() );
|
||||
if( tmp == PCBNEW_KICAD_MOD )
|
||||
m_radio_PCBLayer->Enable( true );
|
||||
else
|
||||
m_radio_PCBLayer->Enable( false );
|
||||
|
||||
m_outputSizeX.SetUnit( getUnitFromSelection() );
|
||||
m_outputSizeY.SetUnit( getUnitFromSelection() );
|
||||
m_outputSizeX.SetOutputSize( 0, getUnitFromSelection() );
|
||||
m_outputSizeY.SetOutputSize( 0, getUnitFromSelection() );
|
||||
|
||||
m_UnitSizeX->ChangeValue( FormatOutputSize( m_outputSizeX.GetOutputSize() ) );
|
||||
m_UnitSizeY->ChangeValue( FormatOutputSize( m_outputSizeY.GetOutputSize() ) );
|
||||
|
||||
//Set icon for aspect ratio
|
||||
m_AspectRatioLocked = true;
|
||||
m_AspectRatio = 1;
|
||||
m_AspectRatioLockButton->SetBitmap( KiBitmap( locked_xpm ) );
|
||||
if( m_config->Read( KEYWORD_LAST_MODLAYER, &tmp ) )
|
||||
{
|
||||
if( (unsigned) tmp > MOD_LYR_FINAL ) // Out of range
|
||||
m_radio_PCBLayer->SetSelection( MOD_LYR_FSILKS );
|
||||
else
|
||||
m_radio_PCBLayer->SetSelection( tmp );
|
||||
}
|
||||
|
||||
// Give an icon
|
||||
wxIcon icon;
|
||||
@@ -193,9 +198,9 @@ BM2CMP_FRAME::BM2CMP_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
|
||||
|
||||
SetSize( m_framePos.x, m_framePos.y, m_frameSize.x, m_frameSize.y );
|
||||
|
||||
m_buttonExportFile->Enable( false );
|
||||
m_buttonExportClipboard->Enable( false );
|
||||
m_buttonExport->Enable( false );
|
||||
|
||||
m_imageDPI.x = m_imageDPI.y = DEFAULT_DPI; // Default resolution in Bit per inches
|
||||
|
||||
if ( m_framePos == wxDefaultPosition )
|
||||
Centre();
|
||||
@@ -204,88 +209,27 @@ BM2CMP_FRAME::BM2CMP_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
|
||||
|
||||
BM2CMP_FRAME::~BM2CMP_FRAME()
|
||||
{
|
||||
SaveSettings( m_config.get() );
|
||||
/*
|
||||
* This needed for OSX: avoids further OnDraw processing after this
|
||||
* destructor and before the native window is destroyed
|
||||
*/
|
||||
this->Freeze( );
|
||||
}
|
||||
|
||||
|
||||
void BM2CMP_FRAME::LoadSettings( wxConfigBase* aCfg )
|
||||
{
|
||||
int tmp;
|
||||
aCfg->Read( KEYWORD_FRAME_POSX, & m_framePos.x, -1 );
|
||||
aCfg->Read( KEYWORD_FRAME_POSY, & m_framePos.y, -1 );
|
||||
aCfg->Read( KEYWORD_FRAME_SIZEX, & m_frameSize.x, -1 );
|
||||
aCfg->Read( KEYWORD_FRAME_SIZEY, & m_frameSize.y, -1 );
|
||||
aCfg->Read( KEYWORD_LAST_INPUT_FILE, &m_BitmapFileName );
|
||||
aCfg->Read( KEYWORD_LAST_OUTPUT_FILE, &m_ConvertedFileName );
|
||||
|
||||
int u_select = 0;
|
||||
aCfg->Read( KEYWORD_UNIT_SELECTION, &u_select, 0 );
|
||||
|
||||
if( u_select < 0 || u_select > 2 ) // Validity control
|
||||
u_select = 0;
|
||||
|
||||
m_PixelUnit->SetSelection( u_select );
|
||||
|
||||
if( aCfg->Read( KEYWORD_BINARY_THRESHOLD, &tmp ) )
|
||||
m_sliderThreshold->SetValue( tmp );
|
||||
|
||||
aCfg->Read( KEYWORD_BW_NEGATIVE, &tmp, 0 );
|
||||
m_Negative = tmp != 0;
|
||||
m_checkNegative->SetValue( m_Negative );
|
||||
m_exportToClipboard = false;
|
||||
m_AspectRatioLocked = false;
|
||||
|
||||
if( aCfg->Read( KEYWORD_LAST_FORMAT, &tmp ) )
|
||||
{
|
||||
if( tmp < 0 || tmp > FINAL_FMT )
|
||||
tmp = PCBNEW_KICAD_MOD;
|
||||
|
||||
m_rbOutputFormat->SetSelection( tmp );
|
||||
}
|
||||
|
||||
if( tmp == PCBNEW_KICAD_MOD )
|
||||
m_rbPCBLayer->Enable( true );
|
||||
else
|
||||
m_rbPCBLayer->Enable( false );
|
||||
|
||||
if( aCfg->Read( KEYWORD_LAST_MODLAYER, &tmp ) )
|
||||
{
|
||||
if( (unsigned) tmp > MOD_LYR_FINAL ) // Out of range
|
||||
m_rbPCBLayer->SetSelection( MOD_LYR_FSILKS );
|
||||
else
|
||||
m_rbPCBLayer->SetSelection( tmp );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void BM2CMP_FRAME::SaveSettings( wxConfigBase* aCfg )
|
||||
{
|
||||
if( !aCfg )
|
||||
if( !m_config || IsIconized() )
|
||||
return;
|
||||
|
||||
m_frameSize = GetSize();
|
||||
m_framePos = GetPosition();
|
||||
|
||||
if( !IsIconized() )
|
||||
{
|
||||
aCfg->Write( KEYWORD_FRAME_POSX, (long) m_framePos.x );
|
||||
aCfg->Write( KEYWORD_FRAME_POSY, (long) m_framePos.y );
|
||||
aCfg->Write( KEYWORD_FRAME_SIZEX, (long) m_frameSize.x );
|
||||
aCfg->Write( KEYWORD_FRAME_SIZEY, (long) m_frameSize.y );
|
||||
}
|
||||
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_checkNegative->IsChecked() ? 1 : 0 );
|
||||
m_config->Write( KEYWORD_LAST_FORMAT, m_radioBoxFormat->GetSelection() );
|
||||
m_config->Write( KEYWORD_LAST_MODLAYER, m_radio_PCBLayer->GetSelection() );
|
||||
|
||||
aCfg->Write( KEYWORD_LAST_INPUT_FILE, m_BitmapFileName );
|
||||
aCfg->Write( KEYWORD_LAST_OUTPUT_FILE, m_ConvertedFileName );
|
||||
aCfg->Write( KEYWORD_BINARY_THRESHOLD, m_sliderThreshold->GetValue() );
|
||||
aCfg->Write( KEYWORD_BW_NEGATIVE, m_checkNegative->IsChecked() ? 1 : 0 );
|
||||
aCfg->Write( KEYWORD_LAST_FORMAT, m_rbOutputFormat->GetSelection() );
|
||||
aCfg->Write( KEYWORD_LAST_MODLAYER, m_rbPCBLayer->GetSelection() );
|
||||
aCfg->Write( KEYWORD_UNIT_SELECTION, m_PixelUnit->GetSelection() );
|
||||
/* This needed for OSX: avoids further OnDraw processing after this
|
||||
* destructor and before the native window is destroyed
|
||||
*/
|
||||
this->Freeze( );
|
||||
}
|
||||
|
||||
|
||||
@@ -387,41 +331,33 @@ bool BM2CMP_FRAME::OpenProjectFiles( const std::vector<wxString>& aFileSet, int
|
||||
|
||||
m_Pict_Bitmap = wxBitmap( m_Pict_Image );
|
||||
|
||||
int h = m_Pict_Bitmap.GetHeight();
|
||||
int w = m_Pict_Bitmap.GetWidth();
|
||||
|
||||
// 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 );
|
||||
|
||||
int imageDPIx = m_Pict_Image.GetOptionInt( wxIMAGE_OPTION_RESOLUTIONX );
|
||||
int imageDPIy = m_Pict_Image.GetOptionInt( wxIMAGE_OPTION_RESOLUTIONY );
|
||||
|
||||
if( imageDPIx > 1 && imageDPIy > 1 )
|
||||
if( m_imageDPI.x > 1 && m_imageDPI.y > 1 )
|
||||
{
|
||||
if( m_Pict_Image.GetOptionInt( wxIMAGE_OPTION_RESOLUTIONUNIT ) == wxIMAGE_RESOLUTION_CM )
|
||||
{
|
||||
imageDPIx = KiROUND( imageDPIx * 2.54 );
|
||||
imageDPIy = KiROUND( imageDPIy * 2.54 );
|
||||
// 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 a default value (DEFAULT_DPI)
|
||||
{
|
||||
imageDPIx = imageDPIy = DEFAULT_DPI;
|
||||
}
|
||||
|
||||
m_InputXValueDPI->SetLabel( wxString::Format( wxT( "%d" ), imageDPIx ) );
|
||||
m_InputYValueDPI->SetLabel( wxString::Format( wxT( "%d" ), imageDPIy ) );
|
||||
|
||||
int h = m_Pict_Bitmap.GetHeight();
|
||||
int w = m_Pict_Bitmap.GetWidth();
|
||||
m_AspectRatio = (double) w / h;
|
||||
|
||||
m_outputSizeX.SetOriginalDPI( imageDPIx );
|
||||
m_outputSizeX.SetOriginalSizePixels( w );
|
||||
m_outputSizeY.SetOriginalDPI( imageDPIy );
|
||||
m_outputSizeY.SetOriginalSizePixels( h );
|
||||
|
||||
// Update display to keep aspect ratio
|
||||
auto fakeEvent = wxCommandEvent();
|
||||
OnSizeChangeX( fakeEvent );
|
||||
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();
|
||||
|
||||
m_InitialPicturePanel->SetVirtualSize( w, h );
|
||||
@@ -454,166 +390,51 @@ bool BM2CMP_FRAME::OpenProjectFiles( const std::vector<wxString>& aFileSet, int
|
||||
m_NB_Image = m_Greyscale_Image;
|
||||
Binarize( (double) m_sliderThreshold->GetValue()/m_sliderThreshold->GetMax() );
|
||||
|
||||
m_buttonExportFile->Enable( true );
|
||||
m_buttonExportClipboard->Enable( true );
|
||||
|
||||
m_outputSizeX.SetOutputSizeFromInitialImageSize();
|
||||
m_UnitSizeX->ChangeValue( FormatOutputSize( m_outputSizeX.GetOutputSize() ) );
|
||||
m_outputSizeY.SetOutputSizeFromInitialImageSize();
|
||||
m_UnitSizeY->ChangeValue( FormatOutputSize( m_outputSizeY.GetOutputSize() ) );
|
||||
|
||||
m_buttonExport->Enable( true );
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
// return a string giving the output size, according to the selected unit
|
||||
wxString BM2CMP_FRAME::FormatOutputSize( double aSize )
|
||||
{
|
||||
wxString text;
|
||||
|
||||
if( getUnitFromSelection() == MILLIMETRES )
|
||||
{
|
||||
text.Printf( "%.1f", aSize );
|
||||
}
|
||||
else if( getUnitFromSelection() == INCHES )
|
||||
{
|
||||
text.Printf( "%.2f", aSize );
|
||||
}
|
||||
else
|
||||
{
|
||||
text.Printf( "%d", KiROUND( aSize ) );
|
||||
}
|
||||
|
||||
return text;
|
||||
}
|
||||
|
||||
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 modified here.
|
||||
int h = m_Pict_Bitmap.GetHeight();
|
||||
int w = m_Pict_Bitmap.GetWidth();
|
||||
int nb = m_Pict_Bitmap.GetDepth();
|
||||
|
||||
if( m_Pict_Bitmap.IsOk() )
|
||||
{
|
||||
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->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 ) );
|
||||
}
|
||||
|
||||
|
||||
EDA_UNITS_T BM2CMP_FRAME::getUnitFromSelection()
|
||||
void BM2CMP_FRAME::OnResolutionChange( wxCommandEvent& event )
|
||||
{
|
||||
// return the EDA_UNITS_T from the m_PixelUnit choice
|
||||
switch( m_PixelUnit->GetSelection() )
|
||||
{
|
||||
case 1:
|
||||
return INCHES;
|
||||
long tmp;
|
||||
|
||||
case 2:
|
||||
return UNSCALED_UNITS;
|
||||
if( m_DPIValueX->GetValue().ToLong( &tmp ) )
|
||||
m_imageDPI.x = tmp;
|
||||
|
||||
case 0:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if( m_DPIValueY->GetValue().ToLong( &tmp ) )
|
||||
m_imageDPI.y = tmp;
|
||||
|
||||
return MILLIMETRES;
|
||||
}
|
||||
if( m_imageDPI.x < 32 )
|
||||
m_imageDPI.x = 32;
|
||||
|
||||
|
||||
void BM2CMP_FRAME::OnSizeChangeX( wxCommandEvent& event )
|
||||
{
|
||||
double new_size;
|
||||
|
||||
if( m_UnitSizeX->GetValue().ToDouble( &new_size ) )
|
||||
{
|
||||
if( m_AspectRatioLocked )
|
||||
{
|
||||
double calculatedY = new_size / m_AspectRatio;
|
||||
|
||||
if( getUnitFromSelection() == UNSCALED_UNITS )
|
||||
{
|
||||
// for units in DPI, keeping aspect ratio cannot use m_AspectRatioLocked.
|
||||
// just rescale the other dpi
|
||||
double ratio = new_size / m_outputSizeX.GetOutputSize();
|
||||
calculatedY = m_outputSizeY.GetOutputSize() * ratio;
|
||||
}
|
||||
|
||||
m_outputSizeY.SetOutputSize( calculatedY, getUnitFromSelection() );
|
||||
m_UnitSizeY->ChangeValue( FormatOutputSize( m_outputSizeY.GetOutputSize() ) );
|
||||
}
|
||||
|
||||
m_outputSizeX.SetOutputSize( new_size, getUnitFromSelection() );
|
||||
}
|
||||
if( m_imageDPI.y < 32 )
|
||||
m_imageDPI.y = 32;
|
||||
|
||||
updateImageInfo();
|
||||
}
|
||||
|
||||
|
||||
void BM2CMP_FRAME::OnSizeChangeY( wxCommandEvent& event )
|
||||
{
|
||||
double new_size;
|
||||
|
||||
if( m_UnitSizeY->GetValue().ToDouble( &new_size ) )
|
||||
{
|
||||
if( m_AspectRatioLocked )
|
||||
{
|
||||
double calculatedX = new_size * m_AspectRatio;
|
||||
|
||||
if( getUnitFromSelection() == UNSCALED_UNITS )
|
||||
{
|
||||
// for units in DPI, keeping aspect ratio cannot use m_AspectRatioLocked.
|
||||
// just rescale the other dpi
|
||||
double ratio = new_size / m_outputSizeX.GetOutputSize();
|
||||
calculatedX = m_outputSizeX.GetOutputSize() * ratio;
|
||||
}
|
||||
|
||||
m_outputSizeX.SetOutputSize( calculatedX, getUnitFromSelection() );
|
||||
m_UnitSizeX->ChangeValue( FormatOutputSize( m_outputSizeX.GetOutputSize() ) );
|
||||
}
|
||||
|
||||
m_outputSizeY.SetOutputSize( new_size, getUnitFromSelection() );
|
||||
}
|
||||
|
||||
updateImageInfo();
|
||||
}
|
||||
|
||||
|
||||
void BM2CMP_FRAME::OnSizeUnitChange( wxCommandEvent& event )
|
||||
{
|
||||
m_outputSizeX.SetUnit( getUnitFromSelection() );
|
||||
m_outputSizeY.SetUnit( getUnitFromSelection() );
|
||||
updateImageInfo();
|
||||
|
||||
m_UnitSizeX->ChangeValue( FormatOutputSize( m_outputSizeX.GetOutputSize() ) );
|
||||
m_UnitSizeY->ChangeValue( FormatOutputSize( m_outputSizeY.GetOutputSize() ) );
|
||||
}
|
||||
|
||||
|
||||
void BM2CMP_FRAME::ToggleAspectRatioLock( wxCommandEvent& event )
|
||||
{
|
||||
m_AspectRatioLocked = !m_AspectRatioLocked;
|
||||
|
||||
if( m_AspectRatioLocked )
|
||||
{
|
||||
m_AspectRatioLockButton->SetBitmap( KiBitmap( locked_xpm ) );
|
||||
//Force display update when aspect ratio is locked
|
||||
auto fakeEvent = wxCommandEvent();
|
||||
OnSizeChangeX( fakeEvent );
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
m_AspectRatioLockButton->SetBitmap( KiBitmap( unlocked_xpm ) );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void BM2CMP_FRAME::Binarize( double aThreshold )
|
||||
{
|
||||
int h = m_Greyscale_Image.GetHeight();
|
||||
@@ -681,53 +502,24 @@ void BM2CMP_FRAME::OnThresholdChange( wxScrollEvent& event )
|
||||
}
|
||||
|
||||
|
||||
void BM2CMP_FRAME::OnExportToFile( wxCommandEvent& event )
|
||||
void BM2CMP_FRAME::OnExport( wxCommandEvent& event )
|
||||
{
|
||||
m_exportToClipboard = false;
|
||||
// choices of m_rbOutputFormat are expected to be in same order as
|
||||
// choices of m_radioBoxFormat are expected to be in same order as
|
||||
// OUTPUT_FMT_ID. See bitmap2component.h
|
||||
OUTPUT_FMT_ID format = (OUTPUT_FMT_ID) m_rbOutputFormat->GetSelection();
|
||||
exportBitmap( format );
|
||||
}
|
||||
OUTPUT_FMT_ID sel = (OUTPUT_FMT_ID) m_radioBoxFormat->GetSelection();
|
||||
|
||||
|
||||
void BM2CMP_FRAME::OnExportToClipboard( wxCommandEvent& event )
|
||||
{
|
||||
m_exportToClipboard = true;
|
||||
// choices of m_rbOutputFormat are expected to be in same order as
|
||||
// OUTPUT_FMT_ID. See bitmap2component.h
|
||||
OUTPUT_FMT_ID format = (OUTPUT_FMT_ID) m_rbOutputFormat->GetSelection();
|
||||
|
||||
std::string buffer;
|
||||
ExportToBuffer( buffer, format );
|
||||
|
||||
// Write buffer to the clipboard
|
||||
if (wxTheClipboard->Open())
|
||||
{
|
||||
// This data objects are held by the clipboard,
|
||||
// so do not delete them in the app.
|
||||
wxTheClipboard->SetData( new wxTextDataObject( buffer.c_str() ) );
|
||||
wxTheClipboard->Close();
|
||||
}
|
||||
else
|
||||
wxMessageBox( _( "Unable to export to the Clipboard") );
|
||||
}
|
||||
|
||||
|
||||
void BM2CMP_FRAME::exportBitmap( OUTPUT_FMT_ID aFormat )
|
||||
{
|
||||
switch( aFormat )
|
||||
switch( sel )
|
||||
{
|
||||
case EESCHEMA_FMT:
|
||||
exportEeschemaFormat();
|
||||
OnExportEeschema();
|
||||
break;
|
||||
|
||||
case PCBNEW_KICAD_MOD:
|
||||
exportPcbnewFormat();
|
||||
OnExportPcbnew();
|
||||
break;
|
||||
|
||||
case POSTSCRIPT_FMT:
|
||||
exportPostScriptFormat();
|
||||
OnExportPostScript();
|
||||
break;
|
||||
|
||||
case KICAD_LOGO:
|
||||
@@ -763,19 +555,17 @@ void BM2CMP_FRAME::OnExportLogo()
|
||||
if( outfile == NULL )
|
||||
{
|
||||
wxString msg;
|
||||
msg.Printf( _( "File \"%s\" could not be created." ), m_ConvertedFileName );
|
||||
msg.Printf( _( "File \"%s\" could not be created." ), GetChars( m_ConvertedFileName ) );
|
||||
wxMessageBox( msg );
|
||||
return;
|
||||
}
|
||||
|
||||
std::string buffer;
|
||||
ExportToBuffer( buffer, KICAD_LOGO );
|
||||
fputs( buffer.c_str(), outfile );
|
||||
ExportFile( outfile, KICAD_LOGO );
|
||||
fclose( outfile );
|
||||
}
|
||||
|
||||
|
||||
void BM2CMP_FRAME::exportPostScriptFormat()
|
||||
void BM2CMP_FRAME::OnExportPostScript()
|
||||
{
|
||||
wxFileName fn( m_ConvertedFileName );
|
||||
wxString path = fn.GetPath();
|
||||
@@ -803,19 +593,17 @@ void BM2CMP_FRAME::exportPostScriptFormat()
|
||||
if( outfile == NULL )
|
||||
{
|
||||
wxString msg;
|
||||
msg.Printf( _( "File \"%s\" could not be created." ), m_ConvertedFileName );
|
||||
msg.Printf( _( "File \"%s\" could not be created." ), GetChars( m_ConvertedFileName ) );
|
||||
wxMessageBox( msg );
|
||||
return;
|
||||
}
|
||||
|
||||
std::string buffer;
|
||||
ExportToBuffer( buffer, POSTSCRIPT_FMT );
|
||||
fputs( buffer.c_str(), outfile );
|
||||
ExportFile( outfile, POSTSCRIPT_FMT );
|
||||
fclose( outfile );
|
||||
}
|
||||
|
||||
|
||||
void BM2CMP_FRAME::exportEeschemaFormat()
|
||||
void BM2CMP_FRAME::OnExportEeschema()
|
||||
{
|
||||
wxFileName fn( m_ConvertedFileName );
|
||||
wxString path = fn.GetPath();
|
||||
@@ -842,19 +630,17 @@ void BM2CMP_FRAME::exportEeschemaFormat()
|
||||
if( outfile == NULL )
|
||||
{
|
||||
wxString msg;
|
||||
msg.Printf( _( "File \"%s\" could not be created." ), m_ConvertedFileName );
|
||||
msg.Printf( _( "File \"%s\" could not be created." ), GetChars( m_ConvertedFileName ) );
|
||||
wxMessageBox( msg );
|
||||
return;
|
||||
}
|
||||
|
||||
std::string buffer;
|
||||
ExportToBuffer( buffer, EESCHEMA_FMT );
|
||||
fputs( buffer.c_str(), outfile );
|
||||
ExportFile( outfile, EESCHEMA_FMT );
|
||||
fclose( outfile );
|
||||
}
|
||||
|
||||
|
||||
void BM2CMP_FRAME::exportPcbnewFormat()
|
||||
void BM2CMP_FRAME::OnExportPcbnew()
|
||||
{
|
||||
wxFileName fn( m_ConvertedFileName );
|
||||
wxString path = fn.GetPath();
|
||||
@@ -881,20 +667,18 @@ void BM2CMP_FRAME::exportPcbnewFormat()
|
||||
if( outfile == NULL )
|
||||
{
|
||||
wxString msg;
|
||||
msg.Printf( _( "File \"%s\" could not be created." ), m_ConvertedFileName );
|
||||
msg.Printf( _( "File \"%s\" could not be created." ), GetChars( m_ConvertedFileName ) );
|
||||
wxMessageBox( msg );
|
||||
return;
|
||||
}
|
||||
|
||||
std::string buffer;
|
||||
ExportToBuffer( buffer, PCBNEW_KICAD_MOD );
|
||||
fputs( buffer.c_str(), outfile );
|
||||
ExportFile( outfile, PCBNEW_KICAD_MOD );
|
||||
fclose( outfile );
|
||||
m_mruPath = fn.GetPath();
|
||||
}
|
||||
|
||||
|
||||
void BM2CMP_FRAME::ExportToBuffer( std::string& aOutput, OUTPUT_FMT_ID aFormat )
|
||||
void BM2CMP_FRAME::ExportFile( FILE* aOutfile, OUTPUT_FMT_ID aFormat )
|
||||
{
|
||||
// Create a potrace bitmap
|
||||
int h = m_NB_Image.GetHeight();
|
||||
@@ -919,26 +703,94 @@ void BM2CMP_FRAME::ExportToBuffer( std::string& aOutput, OUTPUT_FMT_ID aFormat )
|
||||
}
|
||||
}
|
||||
|
||||
// choices of m_rbPCBLayer are expected to be in same order as
|
||||
// choices of m_radio_PCBLayer are expected to be in same order as
|
||||
// BMP2CMP_MOD_LAYER. See bitmap2component.h
|
||||
BMP2CMP_MOD_LAYER modLayer = MOD_LYR_FSILKS;
|
||||
|
||||
if( aFormat == PCBNEW_KICAD_MOD )
|
||||
modLayer = (BMP2CMP_MOD_LAYER) m_rbPCBLayer->GetSelection();
|
||||
modLayer = (BMP2CMP_MOD_LAYER) m_radio_PCBLayer->GetSelection();
|
||||
|
||||
BITMAPCONV_INFO converter( aOutput );
|
||||
converter.ConvertBitmap( potrace_bitmap, aFormat, m_outputSizeX.GetOutputDPI(),
|
||||
m_outputSizeY.GetOutputDPI(), modLayer );
|
||||
|
||||
if( !converter.GetErrorMessages().empty() )
|
||||
wxMessageBox( converter.GetErrorMessages().c_str(), _( "Errors" ) );
|
||||
bitmap2component( potrace_bitmap, aOutfile, aFormat, m_imageDPI.x, m_imageDPI.y, modLayer );
|
||||
}
|
||||
|
||||
|
||||
|
||||
//-----<KIFACE>-----------------------------------------------------------------
|
||||
|
||||
namespace BMP2CMP {
|
||||
|
||||
static struct IFACE : public KIFACE_I
|
||||
{
|
||||
bool OnKifaceStart( PGM_BASE* aProgram, int aCtlBits ) override;
|
||||
|
||||
wxWindow* CreateWindow( wxWindow* aParent, int aClassId, KIWAY* aKiway, int aCtlBits = 0 ) override
|
||||
{
|
||||
return new BM2CMP_FRAME( aKiway, aParent );
|
||||
}
|
||||
|
||||
/**
|
||||
* 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 ) override
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
// 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.
|
||||
KIFACE* KIFACE_GETTER( int* aKIFACEversion, int aKIWAYversion, PGM_BASE* aProgram )
|
||||
{
|
||||
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 );
|
||||
}
|
||||
|
||||
void BM2CMP_FRAME::OnFormatChange( wxCommandEvent& event )
|
||||
{
|
||||
if( m_rbOutputFormat->GetSelection() == PCBNEW_KICAD_MOD )
|
||||
m_rbPCBLayer->Enable( true );
|
||||
if( m_radioBoxFormat->GetSelection() == PCBNEW_KICAD_MOD )
|
||||
m_radio_PCBLayer->Enable( true );
|
||||
else
|
||||
m_rbPCBLayer->Enable( false );
|
||||
m_radio_PCBLayer->Enable( false );
|
||||
|
||||
event.Skip();
|
||||
}
|
||||
|
||||
@@ -1,177 +0,0 @@
|
||||
/*
|
||||
* This program source code file is part of KICAD, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2019 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
|
||||
*/
|
||||
#ifndef BITMOP2CMP_GUI_H_
|
||||
#define BITMOP2CMP_GUI_H_
|
||||
|
||||
#include "bitmap2component.h"
|
||||
|
||||
#include "bitmap2cmp_gui_base.h"
|
||||
#include <potracelib.h>
|
||||
#include <common.h> // for EDA_UNITS_T
|
||||
|
||||
|
||||
class IMAGE_SIZE
|
||||
{
|
||||
public:
|
||||
IMAGE_SIZE();
|
||||
|
||||
// Set the unit used for m_outputSize, and convert the old m_outputSize value
|
||||
// to the value in new unit
|
||||
void SetUnit( EDA_UNITS_T aUnit );
|
||||
|
||||
// Accessors:
|
||||
void SetOriginalDPI( int aDPI )
|
||||
{
|
||||
m_originalDPI = aDPI;
|
||||
}
|
||||
|
||||
void SetOriginalSizePixels( int aPixels )
|
||||
{
|
||||
m_originalSizePixels = aPixels;
|
||||
}
|
||||
|
||||
double GetOutputSize()
|
||||
{
|
||||
return m_outputSize;
|
||||
}
|
||||
|
||||
void SetOutputSize( double aSize, EDA_UNITS_T aUnit )
|
||||
{
|
||||
m_unit = aUnit;
|
||||
m_outputSize = aSize;
|
||||
}
|
||||
|
||||
int GetOriginalSizePixels()
|
||||
{
|
||||
return m_originalSizePixels;
|
||||
}
|
||||
|
||||
// Set the m_outputSize value from the m_originalSizePixels and the selected unit
|
||||
void SetOutputSizeFromInitialImageSize();
|
||||
|
||||
/** @return the pixels per inch value to build the output image.
|
||||
* It is used by potrace to build the polygonal image
|
||||
*/
|
||||
int GetOutputDPI();
|
||||
|
||||
private:
|
||||
EDA_UNITS_T m_unit; // The units for m_outputSize (mm, inch, dpi)
|
||||
double m_outputSize; // The size in m_unit of the output image, depending on
|
||||
// the user settings. Set to the initial image size
|
||||
int m_originalDPI; // The image DPI if specified in file, or 0 if unknown
|
||||
int m_originalSizePixels; // The original image size read from file, in pixels
|
||||
};
|
||||
|
||||
class BM2CMP_FRAME : public BM2CMP_FRAME_BASE
|
||||
{
|
||||
|
||||
public:
|
||||
BM2CMP_FRAME( KIWAY* aKiway, wxWindow* aParent );
|
||||
~BM2CMP_FRAME();
|
||||
|
||||
// overload KIWAY_PLAYER virtual
|
||||
bool OpenProjectFiles( const std::vector<wxString>& aFilenames, int aCtl = 0 ) override;
|
||||
|
||||
private:
|
||||
// Event handlers
|
||||
void OnPaintInit( wxPaintEvent& event ) override;
|
||||
void OnPaintGreyscale( wxPaintEvent& event ) override;
|
||||
void OnPaintBW( wxPaintEvent& event ) override;
|
||||
void OnLoadFile( wxCommandEvent& event ) override;
|
||||
void OnExportToFile( wxCommandEvent& event ) override;
|
||||
void OnExportToClipboard( wxCommandEvent& event ) override;
|
||||
|
||||
///> @return the EDA_UNITS_T from the m_PixelUnit choice
|
||||
EDA_UNITS_T getUnitFromSelection();
|
||||
|
||||
// return a string giving the output size, according to the selected unit
|
||||
wxString FormatOutputSize( double aSize );
|
||||
|
||||
/**
|
||||
* Generate a schematic library which contains one component:
|
||||
* the logo
|
||||
*/
|
||||
void exportEeschemaFormat();
|
||||
|
||||
/**
|
||||
* Generate a module in S expr format
|
||||
*/
|
||||
void exportPcbnewFormat();
|
||||
|
||||
/**
|
||||
* Generate a postscript file
|
||||
*/
|
||||
void exportPostScriptFormat();
|
||||
|
||||
/**
|
||||
* Generate a file suitable to be copied into a page layout
|
||||
* description file (.kicad_wks file
|
||||
*/
|
||||
void OnExportLogo();
|
||||
|
||||
void Binarize( double aThreshold ); // aThreshold = 0.0 (black level) to 1.0 (white level)
|
||||
void OnNegativeClicked( wxCommandEvent& event ) override;
|
||||
void OnThresholdChange( wxScrollEvent& event ) override;
|
||||
|
||||
void OnSizeChangeX( wxCommandEvent& event ) override;
|
||||
void OnSizeChangeY( wxCommandEvent& event ) override;
|
||||
void OnSizeUnitChange( wxCommandEvent& event ) override;
|
||||
|
||||
void ToggleAspectRatioLock( wxCommandEvent& event ) override;
|
||||
|
||||
|
||||
void NegateGreyscaleImage();
|
||||
/**
|
||||
* generate a export data of the current bitmap.
|
||||
* @param aOutput is a string buffer to fill with data
|
||||
* @param aFormat is the format to generate
|
||||
*/
|
||||
void ExportToBuffer( std::string& aOutput, OUTPUT_FMT_ID aFormat );
|
||||
|
||||
void updateImageInfo();
|
||||
void OnFormatChange( wxCommandEvent& event ) override;
|
||||
void exportBitmap( OUTPUT_FMT_ID aFormat );
|
||||
|
||||
void LoadSettings( wxConfigBase* aCfg ) override;
|
||||
void SaveSettings( wxConfigBase* aCfg ) override;
|
||||
|
||||
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;
|
||||
IMAGE_SIZE m_outputSizeX;
|
||||
IMAGE_SIZE m_outputSizeY;
|
||||
bool m_Negative;
|
||||
wxString m_BitmapFileName;
|
||||
wxString m_ConvertedFileName;
|
||||
wxSize m_frameSize;
|
||||
wxPoint m_framePos;
|
||||
std::unique_ptr<wxConfigBase> m_config;
|
||||
bool m_exportToClipboard;
|
||||
bool m_AspectRatioLocked;
|
||||
double m_AspectRatio;
|
||||
};
|
||||
#endif// BITMOP2CMP_GUI_H_
|
||||
@@ -1,5 +1,5 @@
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// C++ code generated with wxFormBuilder (version Dec 1 2018)
|
||||
// C++ code generated with wxFormBuilder (version 3.9.0 Nov 1 2020)
|
||||
// http://www.wxformbuilder.org/
|
||||
//
|
||||
// PLEASE DO *NOT* EDIT THIS FILE!
|
||||
@@ -38,7 +38,7 @@ BM2CMP_FRAME_BASE::BM2CMP_FRAME_BASE( wxWindow* parent, wxWindowID id, const wxS
|
||||
brightSizer = new wxBoxSizer( wxVERTICAL );
|
||||
|
||||
wxStaticBoxSizer* sbSizerInfo;
|
||||
sbSizerInfo = new wxStaticBoxSizer( new wxStaticBox( m_panelRight, wxID_ANY, _("Bitmap Info:") ), wxVERTICAL );
|
||||
sbSizerInfo = new wxStaticBoxSizer( new wxStaticBox( m_panelRight, wxID_ANY, _("Bitmap Info") ), wxVERTICAL );
|
||||
|
||||
wxFlexGridSizer* fgSizerInfo;
|
||||
fgSizerInfo = new wxFlexGridSizer( 0, 4, 0, 0 );
|
||||
@@ -47,9 +47,9 @@ BM2CMP_FRAME_BASE::BM2CMP_FRAME_BASE( wxWindow* parent, wxWindowID id, const wxS
|
||||
fgSizerInfo->SetFlexibleDirection( wxBOTH );
|
||||
fgSizerInfo->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
|
||||
|
||||
m_staticTextISize = new wxStaticText( sbSizerInfo->GetStaticBox(), wxID_ANY, _("Bitmap size:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticTextISize->Wrap( -1 );
|
||||
fgSizerInfo->Add( m_staticTextISize, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
||||
m_staticTextSize = new wxStaticText( sbSizerInfo->GetStaticBox(), wxID_ANY, _("Size:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticTextSize->Wrap( -1 );
|
||||
fgSizerInfo->Add( m_staticTextSize, 0, wxALIGN_RIGHT|wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
m_SizeXValue = new wxStaticText( sbSizerInfo->GetStaticBox(), wxID_ANY, _("0000"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_SizeXValue->Wrap( -1 );
|
||||
@@ -63,25 +63,25 @@ BM2CMP_FRAME_BASE::BM2CMP_FRAME_BASE( wxWindow* parent, wxWindowID id, const wxS
|
||||
m_SizePixUnits->Wrap( -1 );
|
||||
fgSizerInfo->Add( m_SizePixUnits, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 );
|
||||
|
||||
m_staticTextDPI = new wxStaticText( sbSizerInfo->GetStaticBox(), wxID_ANY, _("Bitmap PPI:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticTextDPI->Wrap( -1 );
|
||||
fgSizerInfo->Add( m_staticTextDPI, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
||||
m_staticTextSize1 = new wxStaticText( sbSizerInfo->GetStaticBox(), wxID_ANY, _("Size:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticTextSize1->Wrap( -1 );
|
||||
fgSizerInfo->Add( m_staticTextSize1, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_RIGHT, 5 );
|
||||
|
||||
m_InputXValueDPI = new wxStaticText( sbSizerInfo->GetStaticBox(), wxID_ANY, _("0000"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_InputXValueDPI->Wrap( -1 );
|
||||
fgSizerInfo->Add( m_InputXValueDPI, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT, 5 );
|
||||
m_SizeXValue_mm = new wxStaticText( sbSizerInfo->GetStaticBox(), wxID_ANY, _("0000"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_SizeXValue_mm->Wrap( -1 );
|
||||
fgSizerInfo->Add( m_SizeXValue_mm, 0, wxBOTTOM|wxRIGHT, 5 );
|
||||
|
||||
m_InputYValueDPI = new wxStaticText( sbSizerInfo->GetStaticBox(), wxID_ANY, _("0000"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_InputYValueDPI->Wrap( -1 );
|
||||
fgSizerInfo->Add( m_InputYValueDPI, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT, 5 );
|
||||
m_SizeYValue_mm = new wxStaticText( sbSizerInfo->GetStaticBox(), wxID_ANY, _("0000"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_SizeYValue_mm->Wrap( -1 );
|
||||
fgSizerInfo->Add( m_SizeYValue_mm, 0, wxBOTTOM|wxRIGHT, 5 );
|
||||
|
||||
m_DPIUnit = new wxStaticText( sbSizerInfo->GetStaticBox(), wxID_ANY, _("PPI"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_DPIUnit->Wrap( -1 );
|
||||
fgSizerInfo->Add( m_DPIUnit, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT, 5 );
|
||||
m_Size_mmxUnits = new wxStaticText( sbSizerInfo->GetStaticBox(), wxID_ANY, _("mm"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_Size_mmxUnits->Wrap( -1 );
|
||||
fgSizerInfo->Add( m_Size_mmxUnits, 0, wxBOTTOM|wxRIGHT, 5 );
|
||||
|
||||
m_staticTextBPP = new wxStaticText( sbSizerInfo->GetStaticBox(), wxID_ANY, _("BPP:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticTextBPP->Wrap( -1 );
|
||||
fgSizerInfo->Add( m_staticTextBPP, 0, wxBOTTOM|wxLEFT|wxRIGHT, 5 );
|
||||
fgSizerInfo->Add( m_staticTextBPP, 0, wxALIGN_RIGHT|wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
m_BPPValue = new wxStaticText( sbSizerInfo->GetStaticBox(), wxID_ANY, _("0000"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_BPPValue->Wrap( -1 );
|
||||
@@ -92,81 +92,52 @@ BM2CMP_FRAME_BASE::BM2CMP_FRAME_BASE( wxWindow* parent, wxWindowID id, const wxS
|
||||
fgSizerInfo->Add( m_BPPunits, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
|
||||
fgSizerInfo->Add( 0, 0, 0, 0, 5 );
|
||||
fgSizerInfo->Add( 0, 0, 1, wxEXPAND, 5 );
|
||||
|
||||
m_staticTextBPI = new wxStaticText( sbSizerInfo->GetStaticBox(), 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( sbSizerInfo->GetStaticBox(), wxID_ANY, _("300"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_DPIValueX->SetMinSize( wxSize( 45,-1 ) );
|
||||
|
||||
fgSizerInfo->Add( m_DPIValueX, 0, wxBOTTOM|wxRIGHT, 5 );
|
||||
|
||||
m_DPIValueY = new wxTextCtrl( sbSizerInfo->GetStaticBox(), wxID_ANY, _("300"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_DPIValueY->SetMinSize( wxSize( 45,-1 ) );
|
||||
|
||||
fgSizerInfo->Add( m_DPIValueY, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT, 5 );
|
||||
|
||||
m_DPI_Units = new wxStaticText( sbSizerInfo->GetStaticBox(), 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, 5 );
|
||||
sbSizerInfo->Add( fgSizerInfo, 0, wxEXPAND|wxBOTTOM, 5 );
|
||||
|
||||
|
||||
brightSizer->Add( sbSizerInfo, 0, wxEXPAND|wxALL, 5 );
|
||||
|
||||
wxStaticBoxSizer* sbSizerImgPrms;
|
||||
sbSizerImgPrms = new wxStaticBoxSizer( new wxStaticBox( m_panelRight, wxID_ANY, _("Output Parameters:") ), wxVERTICAL );
|
||||
|
||||
wxBoxSizer* bSizerLock;
|
||||
bSizerLock = new wxBoxSizer( wxHORIZONTAL );
|
||||
|
||||
m_textLock = new wxStaticText( sbSizerImgPrms->GetStaticBox(), wxID_ANY, _("Lock height/width ratio"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_textLock->Wrap( -1 );
|
||||
bSizerLock->Add( m_textLock, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
m_AspectRatioLockButton = new wxBitmapButton( sbSizerImgPrms->GetStaticBox(), wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW|0 );
|
||||
bSizerLock->Add( m_AspectRatioLockButton, 0, wxALL, 5 );
|
||||
|
||||
|
||||
sbSizerImgPrms->Add( bSizerLock, 0, wxEXPAND, 5 );
|
||||
|
||||
wxBoxSizer* bSizerRes;
|
||||
bSizerRes = new wxBoxSizer( wxHORIZONTAL );
|
||||
|
||||
m_staticTextOSize = new wxStaticText( sbSizerImgPrms->GetStaticBox(), wxID_ANY, _("Size:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticTextOSize->Wrap( -1 );
|
||||
bSizerRes->Add( m_staticTextOSize, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
|
||||
|
||||
m_UnitSizeX = new wxTextCtrl( sbSizerImgPrms->GetStaticBox(), wxID_ANY, _("300"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_UnitSizeX->SetMinSize( wxSize( 60,-1 ) );
|
||||
|
||||
bSizerRes->Add( m_UnitSizeX, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 );
|
||||
|
||||
m_UnitSizeY = new wxTextCtrl( sbSizerImgPrms->GetStaticBox(), wxID_ANY, _("300"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_UnitSizeY->SetMinSize( wxSize( 60,-1 ) );
|
||||
|
||||
bSizerRes->Add( m_UnitSizeY, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 );
|
||||
|
||||
wxArrayString m_PixelUnitChoices;
|
||||
m_PixelUnit = new wxChoice( sbSizerImgPrms->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_PixelUnitChoices, 0 );
|
||||
m_PixelUnit->SetSelection( 0 );
|
||||
m_PixelUnit->SetMinSize( wxSize( 80,-1 ) );
|
||||
|
||||
bSizerRes->Add( m_PixelUnit, 0, wxTOP|wxBOTTOM|wxRIGHT|wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
|
||||
sbSizerImgPrms->Add( bSizerRes, 0, wxEXPAND, 5 );
|
||||
|
||||
|
||||
brightSizer->Add( sbSizerImgPrms, 0, wxEXPAND|wxALL, 5 );
|
||||
|
||||
m_buttonLoad = new wxButton( m_panelRight, wxID_ANY, _("Load Bitmap"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
brightSizer->Add( m_buttonLoad, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
m_buttonExportFile = new wxButton( m_panelRight, wxID_ANY, _("Export to File"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
brightSizer->Add( m_buttonExportFile, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
||||
m_buttonExport = new wxButton( m_panelRight, wxID_ANY, _("Export"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_buttonExport->SetToolTip( _("Create a library file for Eeschema\nThis library contains only one component: logo") );
|
||||
|
||||
m_buttonExportClipboard = new wxButton( m_panelRight, wxID_ANY, _("Export to Clipboard"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
brightSizer->Add( m_buttonExportClipboard, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
||||
brightSizer->Add( m_buttonExport, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
wxString m_rbOutputFormatChoices[] = { _("Eeschema (.lib file)"), _("Pcbnew (.kicad_mod file)"), _("Postscript (.ps file)"), _("Logo for title block (.kicad_wks file)") };
|
||||
int m_rbOutputFormatNChoices = sizeof( m_rbOutputFormatChoices ) / sizeof( wxString );
|
||||
m_rbOutputFormat = new wxRadioBox( m_panelRight, wxID_ANY, _("Format:"), wxDefaultPosition, wxDefaultSize, m_rbOutputFormatNChoices, m_rbOutputFormatChoices, 1, wxRA_SPECIFY_COLS );
|
||||
m_rbOutputFormat->SetSelection( 1 );
|
||||
brightSizer->Add( m_rbOutputFormat, 0, wxEXPAND|wxALL, 5 );
|
||||
wxString m_radioBoxFormatChoices[] = { _("Eeschema (.lib file)"), _("Pcbnew (.kicad_mod file)"), _("Postscript (.ps file)"), _("Logo for title block (.kicad_wks file)") };
|
||||
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( 1 );
|
||||
brightSizer->Add( m_radioBoxFormat, 0, wxEXPAND|wxALL, 5 );
|
||||
|
||||
wxStaticBoxSizer* sbSizer2;
|
||||
sbSizer2 = new wxStaticBoxSizer( new wxStaticBox( m_panelRight, wxID_ANY, _("Image Options:") ), wxVERTICAL );
|
||||
sbSizer2 = new wxStaticBoxSizer( new wxStaticBox( m_panelRight, wxID_ANY, _("Image Options") ), wxVERTICAL );
|
||||
|
||||
m_ThresholdText = new wxStaticText( sbSizer2->GetStaticBox(), wxID_ANY, _("Black / White Threshold:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_ThresholdText->Wrap( -1 );
|
||||
sbSizer2->Add( m_ThresholdText, 0, wxTOP|wxLEFT, 5 );
|
||||
sbSizer2->Add( m_ThresholdText, 0, 0, 5 );
|
||||
|
||||
m_sliderThreshold = new wxSlider( sbSizer2->GetStaticBox(), 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.") );
|
||||
@@ -174,18 +145,18 @@ BM2CMP_FRAME_BASE::BM2CMP_FRAME_BASE( wxWindow* parent, wxWindowID id, const wxS
|
||||
sbSizer2->Add( m_sliderThreshold, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
m_checkNegative = new wxCheckBox( sbSizer2->GetStaticBox(), wxID_ANY, _("Negative"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
sbSizer2->Add( m_checkNegative, 0, wxTOP|wxBOTTOM, 10 );
|
||||
sbSizer2->Add( m_checkNegative, 0, wxBOTTOM|wxTOP, 10 );
|
||||
|
||||
|
||||
brightSizer->Add( sbSizer2, 0, wxALL|wxEXPAND, 5 );
|
||||
|
||||
wxString m_rbPCBLayerChoices[] = { _("Front silk screen"), _("Front solder mask"), _("User layer Eco1"), _("User layer Eco2") };
|
||||
int m_rbPCBLayerNChoices = sizeof( m_rbPCBLayerChoices ) / sizeof( wxString );
|
||||
m_rbPCBLayer = new wxRadioBox( m_panelRight, wxID_ANY, _("Board Layer for Outline:"), wxDefaultPosition, wxDefaultSize, m_rbPCBLayerNChoices, m_rbPCBLayerChoices, 1, wxRA_SPECIFY_COLS );
|
||||
m_rbPCBLayer->SetSelection( 0 );
|
||||
m_rbPCBLayer->SetToolTip( _("Choose the board layer to place the outline.\nThe 2 invisible fields reference and value are always placed on the silk screen layer.") );
|
||||
wxString m_radio_PCBLayerChoices[] = { _("Front silk screen"), _("Front solder mask"), _("User layer Eco1"), _("User layer Eco2") };
|
||||
int m_radio_PCBLayerNChoices = sizeof( m_radio_PCBLayerChoices ) / sizeof( wxString );
|
||||
m_radio_PCBLayer = new wxRadioBox( m_panelRight, wxID_ANY, _("Board Layer for Outline"), wxDefaultPosition, wxDefaultSize, m_radio_PCBLayerNChoices, m_radio_PCBLayerChoices, 1, wxRA_SPECIFY_COLS );
|
||||
m_radio_PCBLayer->SetSelection( 3 );
|
||||
m_radio_PCBLayer->SetToolTip( _("Choose the board layer to place the outline.\nThe 2 invisible fields reference and value are always placed on the silk screen layer.") );
|
||||
|
||||
brightSizer->Add( m_rbPCBLayer, 0, wxALL|wxEXPAND, 5 );
|
||||
brightSizer->Add( m_radio_PCBLayer, 0, wxALL|wxEXPAND, 5 );
|
||||
|
||||
|
||||
m_panelRight->SetSizer( brightSizer );
|
||||
@@ -196,20 +167,20 @@ BM2CMP_FRAME_BASE::BM2CMP_FRAME_BASE( wxWindow* parent, wxWindowID id, const wxS
|
||||
|
||||
this->SetSizer( bMainSizer );
|
||||
this->Layout();
|
||||
bMainSizer->Fit( this );
|
||||
m_statusBar = this->CreateStatusBar( 1, wxSTB_SIZEGRIP, wxID_ANY );
|
||||
|
||||
// Connect Events
|
||||
m_InitialPicturePanel->Connect( wxEVT_PAINT, wxPaintEventHandler( BM2CMP_FRAME_BASE::OnPaintInit ), NULL, this );
|
||||
m_GreyscalePicturePanel->Connect( wxEVT_PAINT, wxPaintEventHandler( BM2CMP_FRAME_BASE::OnPaintGreyscale ), NULL, this );
|
||||
m_BNPicturePanel->Connect( wxEVT_PAINT, wxPaintEventHandler( BM2CMP_FRAME_BASE::OnPaintBW ), NULL, this );
|
||||
m_AspectRatioLockButton->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BM2CMP_FRAME_BASE::ToggleAspectRatioLock ), NULL, this );
|
||||
m_UnitSizeX->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnSizeChangeX ), NULL, this );
|
||||
m_UnitSizeY->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnSizeChangeY ), NULL, this );
|
||||
m_PixelUnit->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnSizeUnitChange ), 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_buttonExportFile->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnExportToFile ), NULL, this );
|
||||
m_buttonExportClipboard->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnExportToClipboard ), NULL, this );
|
||||
m_rbOutputFormat->Connect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnFormatChange ), NULL, this );
|
||||
m_buttonExport->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnExport ), NULL, this );
|
||||
m_radioBoxFormat->Connect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnFormatChange ), NULL, this );
|
||||
m_sliderThreshold->Connect( wxEVT_SCROLL_THUMBTRACK, wxScrollEventHandler( BM2CMP_FRAME_BASE::OnThresholdChange ), NULL, this );
|
||||
m_checkNegative->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnNegativeClicked ), NULL, this );
|
||||
}
|
||||
@@ -220,14 +191,13 @@ BM2CMP_FRAME_BASE::~BM2CMP_FRAME_BASE()
|
||||
m_InitialPicturePanel->Disconnect( wxEVT_PAINT, wxPaintEventHandler( BM2CMP_FRAME_BASE::OnPaintInit ), NULL, this );
|
||||
m_GreyscalePicturePanel->Disconnect( wxEVT_PAINT, wxPaintEventHandler( BM2CMP_FRAME_BASE::OnPaintGreyscale ), NULL, this );
|
||||
m_BNPicturePanel->Disconnect( wxEVT_PAINT, wxPaintEventHandler( BM2CMP_FRAME_BASE::OnPaintBW ), NULL, this );
|
||||
m_AspectRatioLockButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BM2CMP_FRAME_BASE::ToggleAspectRatioLock ), NULL, this );
|
||||
m_UnitSizeX->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnSizeChangeX ), NULL, this );
|
||||
m_UnitSizeY->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnSizeChangeY ), NULL, this );
|
||||
m_PixelUnit->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnSizeUnitChange ), 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_buttonExportFile->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnExportToFile ), NULL, this );
|
||||
m_buttonExportClipboard->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnExportToClipboard ), NULL, this );
|
||||
m_rbOutputFormat->Disconnect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnFormatChange ), NULL, this );
|
||||
m_buttonExport->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnExport ), NULL, this );
|
||||
m_radioBoxFormat->Disconnect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnFormatChange ), NULL, this );
|
||||
m_sliderThreshold->Disconnect( wxEVT_SCROLL_THUMBTRACK, wxScrollEventHandler( BM2CMP_FRAME_BASE::OnThresholdChange ), NULL, this );
|
||||
m_checkNegative->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnNegativeClicked ), NULL, this );
|
||||
|
||||
|
||||
+1846
-2087
File diff suppressed because it is too large
Load Diff
@@ -1,5 +1,5 @@
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// C++ code generated with wxFormBuilder (version Dec 1 2018)
|
||||
// C++ code generated with wxFormBuilder (version 3.9.0 Nov 1 2020)
|
||||
// http://www.wxformbuilder.org/
|
||||
//
|
||||
// PLEASE DO *NOT* EDIT THIS FILE!
|
||||
@@ -22,13 +22,10 @@
|
||||
#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/bmpbuttn.h>
|
||||
#include <wx/button.h>
|
||||
#include <wx/textctrl.h>
|
||||
#include <wx/valtext.h>
|
||||
#include <wx/choice.h>
|
||||
#include <wx/radiobox.h>
|
||||
#include <wx/slider.h>
|
||||
#include <wx/checkbox.h>
|
||||
@@ -52,44 +49,39 @@ class BM2CMP_FRAME_BASE : public KIWAY_PLAYER
|
||||
wxScrolledWindow* m_GreyscalePicturePanel;
|
||||
wxScrolledWindow* m_BNPicturePanel;
|
||||
wxPanel* m_panelRight;
|
||||
wxStaticText* m_staticTextISize;
|
||||
wxStaticText* m_staticTextSize;
|
||||
wxStaticText* m_SizeXValue;
|
||||
wxStaticText* m_SizeYValue;
|
||||
wxStaticText* m_SizePixUnits;
|
||||
wxStaticText* m_staticTextDPI;
|
||||
wxStaticText* m_InputXValueDPI;
|
||||
wxStaticText* m_InputYValueDPI;
|
||||
wxStaticText* m_DPIUnit;
|
||||
wxStaticText* m_staticTextSize1;
|
||||
wxStaticText* m_SizeXValue_mm;
|
||||
wxStaticText* m_SizeYValue_mm;
|
||||
wxStaticText* m_Size_mmxUnits;
|
||||
wxStaticText* m_staticTextBPP;
|
||||
wxStaticText* m_BPPValue;
|
||||
wxStaticText* m_BPPunits;
|
||||
wxStaticText* m_textLock;
|
||||
wxBitmapButton* m_AspectRatioLockButton;
|
||||
wxStaticText* m_staticTextOSize;
|
||||
wxTextCtrl* m_UnitSizeX;
|
||||
wxTextCtrl* m_UnitSizeY;
|
||||
wxChoice* m_PixelUnit;
|
||||
wxStaticText* m_staticTextBPI;
|
||||
wxTextCtrl* m_DPIValueX;
|
||||
wxTextCtrl* m_DPIValueY;
|
||||
wxStaticText* m_DPI_Units;
|
||||
wxButton* m_buttonLoad;
|
||||
wxButton* m_buttonExportFile;
|
||||
wxButton* m_buttonExportClipboard;
|
||||
wxRadioBox* m_rbOutputFormat;
|
||||
wxButton* m_buttonExport;
|
||||
wxRadioBox* m_radioBoxFormat;
|
||||
wxStaticText* m_ThresholdText;
|
||||
wxSlider* m_sliderThreshold;
|
||||
wxCheckBox* m_checkNegative;
|
||||
wxRadioBox* m_rbPCBLayer;
|
||||
wxRadioBox* m_radio_PCBLayer;
|
||||
wxStatusBar* m_statusBar;
|
||||
|
||||
// Virtual event handlers, overide them in your derived class
|
||||
virtual void OnPaintInit( wxPaintEvent& event ) { event.Skip(); }
|
||||
virtual void OnPaintGreyscale( wxPaintEvent& event ) { event.Skip(); }
|
||||
virtual void OnPaintBW( wxPaintEvent& event ) { event.Skip(); }
|
||||
virtual void ToggleAspectRatioLock( wxCommandEvent& event ) { event.Skip(); }
|
||||
virtual void OnSizeChangeX( wxCommandEvent& event ) { event.Skip(); }
|
||||
virtual void OnSizeChangeY( wxCommandEvent& event ) { event.Skip(); }
|
||||
virtual void OnSizeUnitChange( wxCommandEvent& 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 OnExportToFile( wxCommandEvent& event ) { event.Skip(); }
|
||||
virtual void OnExportToClipboard( wxCommandEvent& event ) { event.Skip(); }
|
||||
virtual void OnExport( wxCommandEvent& event ) { event.Skip(); }
|
||||
virtual void OnFormatChange( wxCommandEvent& event ) { event.Skip(); }
|
||||
virtual void OnThresholdChange( wxScrollEvent& event ) { event.Skip(); }
|
||||
virtual void OnNegativeClicked( wxCommandEvent& event ) { event.Skip(); }
|
||||
@@ -97,7 +89,7 @@ class BM2CMP_FRAME_BASE : public KIWAY_PLAYER
|
||||
|
||||
public:
|
||||
|
||||
BM2CMP_FRAME_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Bitmap to Component Converter"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 746,684 ), long style = wxDEFAULT_FRAME_STYLE|wxRESIZE_BORDER|wxTAB_TRAVERSAL );
|
||||
BM2CMP_FRAME_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Bitmap to Component Converter"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_FRAME_STYLE|wxRESIZE_BORDER|wxTAB_TRAVERSAL );
|
||||
|
||||
~BM2CMP_FRAME_BASE();
|
||||
|
||||
|
||||
@@ -1,99 +0,0 @@
|
||||
/*
|
||||
* This program source code file is part of KICAD, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 1992-2010 jean-pierre.charras
|
||||
* Copyright (C) 1992-2019 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
|
||||
*/
|
||||
|
||||
#include "bitmap2cmp_gui.h"
|
||||
#include <kiface_i.h>
|
||||
#include <kiway.h>
|
||||
#include <pgm_base.h>
|
||||
|
||||
|
||||
//-----<KIFACE>-----------------------------------------------------------------
|
||||
|
||||
namespace BMP2CMP {
|
||||
|
||||
static struct IFACE : public KIFACE_I
|
||||
{
|
||||
bool OnKifaceStart( PGM_BASE* aProgram, int aCtlBits ) override;
|
||||
|
||||
wxWindow* CreateWindow( wxWindow* aParent, int aClassId, KIWAY* aKiway, int aCtlBits = 0 ) override
|
||||
{
|
||||
return new BM2CMP_FRAME( aKiway, aParent );
|
||||
}
|
||||
|
||||
/**
|
||||
* 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 ) override
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
// 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.
|
||||
KIFACE* KIFACE_GETTER( int* aKIFACEversion, int aKIWAYversion, PGM_BASE* aProgram )
|
||||
{
|
||||
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,8 +1,8 @@
|
||||
/*
|
||||
* This program source code file is part of KICAD, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 1992-2019 jean-pierre.charras
|
||||
* Copyright (C) 1992-2019 Kicad Developers, see AUTHORS.txt for contributors.
|
||||
* Copyright (C) 1992-2013 jean-pierre.charras
|
||||
* Copyright (C) 1992-2019 Kicad Developers, see change_log.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
|
||||
@@ -24,7 +24,6 @@
|
||||
|
||||
#include <algorithm> // std::max
|
||||
#include <cmath>
|
||||
#include <string>
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
@@ -32,15 +31,13 @@
|
||||
#include <vector>
|
||||
|
||||
#include <common.h>
|
||||
#include <geometry/shape_poly_set.h>
|
||||
#include <layers_id_colors_and_visibility.h>
|
||||
|
||||
#include <potracelib.h>
|
||||
|
||||
#include "bitmap2component.h"
|
||||
|
||||
// Unit conversion. Coord unit from potrace is mm
|
||||
#define MM2MICRON 1e3 // For pl_editor
|
||||
#define MM2NANOMETER 1e6 // For pcbew
|
||||
|
||||
/* free a potrace bitmap */
|
||||
static void bm_free( potrace_bitmap_t* bm )
|
||||
@@ -53,6 +50,61 @@ static void bm_free( potrace_bitmap_t* bm )
|
||||
}
|
||||
|
||||
|
||||
/* Helper class to handle useful info to convert a bitmap image to
|
||||
* a polygonal object description
|
||||
*/
|
||||
class BITMAPCONV_INFO
|
||||
{
|
||||
public:
|
||||
enum OUTPUT_FMT_ID m_Format; // File format
|
||||
int m_PixmapWidth;
|
||||
int m_PixmapHeight; // the bitmap size in pixels
|
||||
double m_ScaleX;
|
||||
double m_ScaleY; // the conversion scale
|
||||
potrace_path_t* m_Paths; // the list of paths, from potrace (list of lines and bezier curves)
|
||||
FILE* m_Outfile; // File to create
|
||||
const char * m_CmpName; // The string used as cmp/footprint name
|
||||
|
||||
public:
|
||||
BITMAPCONV_INFO();
|
||||
|
||||
/**
|
||||
* Function CreateOutputFile
|
||||
* Creates the output file specified by m_Outfile,
|
||||
* depending on file format given by m_Format
|
||||
*/
|
||||
void CreateOutputFile( BMP2CMP_MOD_LAYER aModLayer = (BMP2CMP_MOD_LAYER) 0 );
|
||||
|
||||
|
||||
private:
|
||||
/**
|
||||
* Function OuputFileHeader
|
||||
* write to file the header depending on file format
|
||||
*/
|
||||
void OuputFileHeader( const char * aBrdLayerName );
|
||||
|
||||
/**
|
||||
* Function OuputFileEnd
|
||||
* write to file the last strings depending on file format
|
||||
*/
|
||||
void OuputFileEnd();
|
||||
|
||||
|
||||
/**
|
||||
* @return the board layer name depending on the board layer selected
|
||||
* @param aChoice = the choice (MOD_LYR_FSILKS to MOD_LYR_FINAL)
|
||||
*/
|
||||
const char * getBrdLayerName( BMP2CMP_MOD_LAYER aChoice );
|
||||
|
||||
/**
|
||||
* Function OuputOnePolygon
|
||||
* write one polygon to output file.
|
||||
* Polygon coordinates are expected scaled by the polugon extraction function
|
||||
*/
|
||||
void OuputOnePolygon( SHAPE_LINE_CHAIN & aPolygon, const char* aBrdLayerName );
|
||||
|
||||
};
|
||||
|
||||
static void BezierToPolyline( std::vector <potrace_dpoint_t>& aCornersBuffer,
|
||||
potrace_dpoint_t p1,
|
||||
potrace_dpoint_t p2,
|
||||
@@ -60,8 +112,7 @@ static void BezierToPolyline( std::vector <potrace_dpoint_t>& aCornersBuffer,
|
||||
potrace_dpoint_t p4 );
|
||||
|
||||
|
||||
BITMAPCONV_INFO::BITMAPCONV_INFO( std::string& aData ):
|
||||
m_Data( aData )
|
||||
BITMAPCONV_INFO::BITMAPCONV_INFO()
|
||||
{
|
||||
m_Format = POSTSCRIPT_FMT;
|
||||
m_PixmapWidth = 0;
|
||||
@@ -69,11 +120,12 @@ BITMAPCONV_INFO::BITMAPCONV_INFO( std::string& aData ):
|
||||
m_ScaleX = 1.0;
|
||||
m_ScaleY = 1.0;
|
||||
m_Paths = NULL;
|
||||
m_Outfile = NULL;
|
||||
m_CmpName = "LOGO";
|
||||
}
|
||||
|
||||
|
||||
int BITMAPCONV_INFO::ConvertBitmap( potrace_bitmap_t* aPotrace_bitmap,
|
||||
int bitmap2component( potrace_bitmap_t* aPotrace_bitmap, FILE* aOutfile,
|
||||
OUTPUT_FMT_ID aFormat, int aDpi_X, int aDpi_Y,
|
||||
BMP2CMP_MOD_LAYER aModLayer )
|
||||
{
|
||||
@@ -82,23 +134,15 @@ int BITMAPCONV_INFO::ConvertBitmap( potrace_bitmap_t* aPotrace_bitmap,
|
||||
|
||||
// set tracing parameters, starting from defaults
|
||||
param = potrace_param_default();
|
||||
|
||||
if( !param )
|
||||
{
|
||||
char msg[256];
|
||||
sprintf( msg, "Error allocating parameters: %s\n", strerror( errno ) );
|
||||
m_errors += msg;
|
||||
fprintf( stderr, "Error allocating parameters: %s\n", strerror( errno ) );
|
||||
return 1;
|
||||
}
|
||||
|
||||
// For parameters: see http://potrace.sourceforge.net/potracelib.pdf
|
||||
param->turdsize = 0; // area (in pixels) of largest path to be ignored.
|
||||
// Potrace default is 2
|
||||
param->opttolerance = 0.2; // curve optimization tolerance. Potrace default is 0.2
|
||||
param->turdsize = 0;
|
||||
|
||||
/* convert the bitmap to curves */
|
||||
st = potrace_trace( param, aPotrace_bitmap );
|
||||
|
||||
if( !st || st->status != POTRACE_STATUS_OK )
|
||||
{
|
||||
if( st )
|
||||
@@ -107,45 +151,45 @@ int BITMAPCONV_INFO::ConvertBitmap( potrace_bitmap_t* aPotrace_bitmap,
|
||||
}
|
||||
potrace_param_free( param );
|
||||
|
||||
char msg[256];
|
||||
sprintf( msg, "Error tracing bitmap: %s\n", strerror( errno ) );
|
||||
m_errors += msg;
|
||||
fprintf( stderr, "Error tracing bitmap: %s\n", strerror( errno ) );
|
||||
return 1;
|
||||
}
|
||||
|
||||
m_PixmapWidth = aPotrace_bitmap->w;
|
||||
m_PixmapHeight = aPotrace_bitmap->h; // the bitmap size in pixels
|
||||
m_Paths = st->plist;
|
||||
BITMAPCONV_INFO info;
|
||||
info.m_PixmapWidth = aPotrace_bitmap->w;
|
||||
info.m_PixmapHeight = aPotrace_bitmap->h; // the bitmap size in pixels
|
||||
info.m_Paths = st->plist;
|
||||
info.m_Outfile = aOutfile;
|
||||
|
||||
switch( aFormat )
|
||||
{
|
||||
case KICAD_LOGO:
|
||||
m_Format = KICAD_LOGO;
|
||||
m_ScaleX = MM2MICRON * 25.4 / aDpi_X; // the conversion scale from PPI to micron
|
||||
m_ScaleY = MM2MICRON * 25.4 / aDpi_Y; // Y axis is top to bottom
|
||||
createOutputData();
|
||||
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.CreateOutputFile();
|
||||
break;
|
||||
|
||||
case POSTSCRIPT_FMT:
|
||||
m_Format = POSTSCRIPT_FMT;
|
||||
m_ScaleX = 1.0; // the conversion scale
|
||||
m_ScaleY = m_ScaleX;
|
||||
info.m_Format = POSTSCRIPT_FMT;
|
||||
info.m_ScaleX = 1.0; // the conversion scale
|
||||
info.m_ScaleY = info.m_ScaleX;
|
||||
// output vector data, e.g. as a rudimentary EPS file (mainly for tests)
|
||||
createOutputData();
|
||||
info.CreateOutputFile();
|
||||
break;
|
||||
|
||||
case EESCHEMA_FMT:
|
||||
m_Format = EESCHEMA_FMT;
|
||||
m_ScaleX = 1000.0 / aDpi_X; // the conversion scale from PPI to UI (mil)
|
||||
m_ScaleY = -1000.0 / aDpi_Y; // Y axis is bottom to Top for components in libs
|
||||
createOutputData();
|
||||
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.CreateOutputFile();
|
||||
break;
|
||||
|
||||
case PCBNEW_KICAD_MOD:
|
||||
m_Format = PCBNEW_KICAD_MOD;
|
||||
m_ScaleX = MM2NANOMETER * 25.4 / aDpi_X; // the conversion scale from PPI to UI
|
||||
m_ScaleY = MM2NANOMETER * 25.4 / aDpi_Y; // Y axis is top to bottom in modedit
|
||||
createOutputData( aModLayer );
|
||||
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.CreateOutputFile( aModLayer );
|
||||
break;
|
||||
|
||||
default:
|
||||
@@ -160,8 +204,7 @@ int BITMAPCONV_INFO::ConvertBitmap( potrace_bitmap_t* aPotrace_bitmap,
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
const char* BITMAPCONV_INFO::getBoardLayerName( BMP2CMP_MOD_LAYER aChoice )
|
||||
const char* BITMAPCONV_INFO::getBrdLayerName( BMP2CMP_MOD_LAYER aChoice )
|
||||
{
|
||||
const char * layerName = "F.SilkS";
|
||||
|
||||
@@ -187,96 +230,87 @@ const char* BITMAPCONV_INFO::getBoardLayerName( BMP2CMP_MOD_LAYER aChoice )
|
||||
return layerName;
|
||||
}
|
||||
|
||||
|
||||
void BITMAPCONV_INFO::outputDataHeader( const char * aBrdLayerName )
|
||||
void BITMAPCONV_INFO::OuputFileHeader( const char * aBrdLayerName )
|
||||
{
|
||||
int Ypos = (int) ( m_PixmapHeight / 2 * m_ScaleY );
|
||||
int fieldSize; // fields text size = 60 mils
|
||||
char strbuf[1024];
|
||||
|
||||
switch( m_Format )
|
||||
{
|
||||
case POSTSCRIPT_FMT:
|
||||
/* output vector data, e.g. as a rudimentary EPS file */
|
||||
m_Data += "%%!PS-Adobe-3.0 EPSF-3.0\n";
|
||||
sprintf( strbuf, "%%%%BoundingBox: 0 0 %d %d\n", m_PixmapWidth, m_PixmapHeight );
|
||||
m_Data += strbuf;
|
||||
m_Data += "gsave\n";
|
||||
fprintf( m_Outfile, "%%!PS-Adobe-3.0 EPSF-3.0\n" );
|
||||
fprintf( m_Outfile, "%%%%BoundingBox: 0 0 %d %d\n",
|
||||
m_PixmapWidth, m_PixmapHeight );
|
||||
fprintf( m_Outfile, "gsave\n" );
|
||||
break;
|
||||
|
||||
case PCBNEW_KICAD_MOD:
|
||||
// fields text size = 1.5 mm
|
||||
// fields text thickness = 1.5 / 5 = 0.3mm
|
||||
sprintf( strbuf, "(module %s (layer F.Cu)\n (at 0 0)\n", m_CmpName.c_str() );
|
||||
m_Data += strbuf;
|
||||
sprintf( strbuf, " (fp_text reference \"G***\" (at 0 0) (layer %s)\n"
|
||||
fprintf( m_Outfile, "(module %s (layer F.Cu)\n (at 0 0)\n",
|
||||
m_CmpName );
|
||||
fprintf( m_Outfile, " (fp_text reference \"G***\" (at 0 0) (layer %s) hide\n"
|
||||
" (effects (font (thickness 0.3)))\n )\n", aBrdLayerName );
|
||||
m_Data += strbuf;
|
||||
sprintf( strbuf, " (fp_text value \"%s\" (at 0.75 0) (layer %s) hide\n"
|
||||
" (effects (font (thickness 0.3)))\n )\n", m_CmpName.c_str(), aBrdLayerName );
|
||||
m_Data += strbuf;
|
||||
fprintf( m_Outfile, " (fp_text value \"%s\" (at 0.75 0) (layer %s) hide\n"
|
||||
" (effects (font (thickness 0.3)))\n )\n", m_CmpName, aBrdLayerName );
|
||||
break;
|
||||
|
||||
case KICAD_LOGO:
|
||||
m_Data += "(polygon (pos 0 0 rbcorner) (rotate 0) (linewidth 0.01)\n";
|
||||
fprintf( m_Outfile, "(polygon (pos 0 0 rbcorner) (rotate 0) (linewidth 0.01)\n" );
|
||||
break;
|
||||
|
||||
case EESCHEMA_FMT:
|
||||
sprintf( strbuf, "EESchema-LIBRARY Version 2.3\n" );
|
||||
m_Data += strbuf;
|
||||
sprintf( strbuf, "#\n# %s\n", m_CmpName.c_str() );
|
||||
m_Data += strbuf;
|
||||
sprintf( strbuf, "# pixmap size w = %d, h = %d\n#\n",
|
||||
fprintf( m_Outfile, "EESchema-LIBRARY Version 2.3\n" );
|
||||
fprintf( m_Outfile, "#\n# %s\n", m_CmpName );
|
||||
fprintf( m_Outfile, "# pixmap size w = %d, h = %d\n#\n",
|
||||
m_PixmapWidth, m_PixmapHeight );
|
||||
m_Data += strbuf;
|
||||
|
||||
// print reference and value
|
||||
fieldSize = 50; // fields text size = 50 mils
|
||||
fieldSize = 60; // fields text size = 60 mils
|
||||
Ypos += fieldSize / 2;
|
||||
sprintf( strbuf, "DEF %s G 0 40 Y Y 1 F N\n", m_CmpName.c_str() );
|
||||
m_Data += strbuf;
|
||||
sprintf( strbuf, "F0 \"#G\" 0 %d %d H I C CNN\n", Ypos, fieldSize );
|
||||
m_Data += strbuf;
|
||||
sprintf( strbuf, "F1 \"%s\" 0 %d %d H I C CNN\n", m_CmpName.c_str(), -Ypos, fieldSize );
|
||||
m_Data += strbuf;
|
||||
m_Data += "DRAW\n";
|
||||
fprintf( m_Outfile, "DEF %s G 0 40 Y Y 1 F N\n", m_CmpName );
|
||||
fprintf( m_Outfile, "F0 \"#G\" 0 %d %d H I C CNN\n", Ypos, fieldSize );
|
||||
fprintf( m_Outfile, "F1 \"%s\" 0 %d %d H I C CNN\n", m_CmpName, -Ypos, fieldSize );
|
||||
fprintf( m_Outfile, "DRAW\n" );
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void BITMAPCONV_INFO::outputDataEnd()
|
||||
void BITMAPCONV_INFO::OuputFileEnd()
|
||||
{
|
||||
switch( m_Format )
|
||||
{
|
||||
case POSTSCRIPT_FMT:
|
||||
m_Data += "grestore\n";
|
||||
m_Data += "%%EOF\n";
|
||||
fprintf( m_Outfile, "grestore\n" );
|
||||
fprintf( m_Outfile, "%%EOF\n" );
|
||||
break;
|
||||
|
||||
case PCBNEW_KICAD_MOD:
|
||||
m_Data += ")\n";
|
||||
fprintf( m_Outfile, ")\n" );
|
||||
break;
|
||||
|
||||
case KICAD_LOGO:
|
||||
m_Data += ")\n";
|
||||
fprintf( m_Outfile, ")\n" );
|
||||
break;
|
||||
|
||||
case EESCHEMA_FMT:
|
||||
m_Data += "ENDDRAW\n";
|
||||
m_Data += "ENDDEF\n";
|
||||
fprintf( m_Outfile, "ENDDRAW\n" );
|
||||
fprintf( m_Outfile, "ENDDEF\n" );
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void BITMAPCONV_INFO::outputOnePolygon( SHAPE_LINE_CHAIN & aPolygon, const char* aBrdLayerName )
|
||||
/**
|
||||
* Function OuputOnePolygon
|
||||
* write one polygon to output file.
|
||||
* Polygon coordinates are expected scaled by the polygon extraction function
|
||||
*/
|
||||
void BITMAPCONV_INFO::OuputOnePolygon( SHAPE_LINE_CHAIN & aPolygon, const char* aBrdLayerName )
|
||||
{
|
||||
// write one polygon to output file.
|
||||
// coordinates are expected in target unit.
|
||||
int ii, jj;
|
||||
VECTOR2I currpoint;
|
||||
char strbuf[1024];
|
||||
|
||||
int offsetX = (int)( m_PixmapWidth / 2 * m_ScaleX );
|
||||
int offsetY = (int)( m_PixmapHeight / 2 * m_ScaleY );
|
||||
@@ -287,106 +321,95 @@ void BITMAPCONV_INFO::outputOnePolygon( SHAPE_LINE_CHAIN & aPolygon, const char*
|
||||
{
|
||||
case POSTSCRIPT_FMT:
|
||||
offsetY = (int)( m_PixmapHeight * m_ScaleY );
|
||||
sprintf( strbuf, "newpath\n%d %d moveto\n",
|
||||
fprintf( m_Outfile, "newpath\n%d %d moveto\n",
|
||||
startpoint.x, offsetY - startpoint.y );
|
||||
m_Data += strbuf;
|
||||
jj = 0;
|
||||
for( ii = 1; ii < aPolygon.PointCount(); ii++ )
|
||||
{
|
||||
currpoint = aPolygon.CPoint( ii );
|
||||
sprintf( strbuf, " %d %d lineto",
|
||||
fprintf( m_Outfile, " %d %d lineto",
|
||||
currpoint.x, offsetY - currpoint.y );
|
||||
m_Data += strbuf;
|
||||
|
||||
if( jj++ > 6 )
|
||||
{
|
||||
jj = 0;
|
||||
m_Data += "\n";
|
||||
fprintf( m_Outfile, ("\n") );
|
||||
}
|
||||
}
|
||||
|
||||
m_Data += "\nclosepath fill\n";
|
||||
fprintf( m_Outfile, "\nclosepath fill\n" );
|
||||
break;
|
||||
|
||||
case PCBNEW_KICAD_MOD:
|
||||
{
|
||||
double width = 0.0; // outline thickness in mm: no thickness
|
||||
m_Data += " (fp_poly (pts";
|
||||
double width = 0.01; // outline thickness in mm
|
||||
fprintf( m_Outfile, " (fp_poly (pts" );
|
||||
|
||||
jj = 0;
|
||||
for( ii = 0; ii < aPolygon.PointCount(); ii++ )
|
||||
{
|
||||
currpoint = aPolygon.CPoint( ii );
|
||||
sprintf( strbuf, " (xy %f %f)",
|
||||
( currpoint.x - offsetX ) / MM2NANOMETER,
|
||||
( currpoint.y - offsetY ) / MM2NANOMETER );
|
||||
m_Data += strbuf;
|
||||
fprintf( m_Outfile, " (xy %f %f)",
|
||||
( currpoint.x - offsetX ) / 1e6,
|
||||
( currpoint.y - offsetY ) / 1e6 );
|
||||
|
||||
if( jj++ > 6 )
|
||||
{
|
||||
jj = 0;
|
||||
m_Data += "\n ";
|
||||
fprintf( m_Outfile, ("\n ") );
|
||||
}
|
||||
}
|
||||
// No need to close polygon
|
||||
m_Data += " )";
|
||||
sprintf( strbuf, "(layer %s) (width %f)\n )\n", aBrdLayerName, width );
|
||||
m_Data += strbuf;
|
||||
// Close polygon
|
||||
fprintf( m_Outfile, " (xy %f %f) )",
|
||||
( startpoint.x - offsetX ) / 1e6, ( startpoint.y - offsetY ) / 1e6 );
|
||||
|
||||
fprintf( m_Outfile, "(layer %s) (width %f)\n )\n", aBrdLayerName, width );
|
||||
|
||||
}
|
||||
break;
|
||||
|
||||
case KICAD_LOGO:
|
||||
m_Data += " (pts";
|
||||
fprintf( m_Outfile, " (pts" );
|
||||
// Internal units = micron, file unit = mm
|
||||
jj = 0;
|
||||
for( ii = 0; ii < aPolygon.PointCount(); ii++ )
|
||||
{
|
||||
currpoint = aPolygon.CPoint( ii );
|
||||
sprintf( strbuf, " (xy %.3f %.3f)",
|
||||
( currpoint.x - offsetX ) / MM2MICRON,
|
||||
( currpoint.y - offsetY ) / MM2MICRON );
|
||||
m_Data += strbuf;
|
||||
fprintf( m_Outfile, " (xy %.3f %.3f)",
|
||||
( currpoint.x - offsetX ) / 1e3,
|
||||
( currpoint.y - offsetY ) / 1e3 );
|
||||
|
||||
if( jj++ > 4 )
|
||||
{
|
||||
jj = 0;
|
||||
m_Data += "\n ";
|
||||
fprintf( m_Outfile, ("\n ") );
|
||||
}
|
||||
}
|
||||
// Close polygon
|
||||
sprintf( strbuf, " (xy %.3f %.3f) )\n",
|
||||
( startpoint.x - offsetX ) / MM2MICRON,
|
||||
( startpoint.y - offsetY ) / MM2MICRON );
|
||||
m_Data += strbuf;
|
||||
fprintf( m_Outfile, " (xy %.3f %.3f) )\n",
|
||||
( startpoint.x - offsetX ) / 1e3, ( startpoint.y - offsetY ) / 1e3 );
|
||||
break;
|
||||
|
||||
case EESCHEMA_FMT:
|
||||
// The polygon outline thickness is fixed here to 1 mil, the minimal
|
||||
// value in Eeschema (0 means use default thickness for graphics)
|
||||
#define EE_LINE_THICKNESS 1
|
||||
sprintf( strbuf, "P %d 0 0 %d",
|
||||
(int) aPolygon.PointCount() + 1, EE_LINE_THICKNESS );
|
||||
m_Data += strbuf;
|
||||
fprintf( m_Outfile, "P %d 0 0 1", (int) aPolygon.PointCount() + 1 );
|
||||
for( ii = 0; ii < aPolygon.PointCount(); ii++ )
|
||||
{
|
||||
currpoint = aPolygon.CPoint( ii );
|
||||
sprintf( strbuf, " %d %d",
|
||||
fprintf( m_Outfile, " %d %d",
|
||||
currpoint.x - offsetX, currpoint.y - offsetY );
|
||||
m_Data += strbuf;
|
||||
}
|
||||
|
||||
// Close polygon
|
||||
sprintf( strbuf, " %d %d",
|
||||
fprintf( m_Outfile, " %d %d",
|
||||
startpoint.x - offsetX, startpoint.y - offsetY );
|
||||
m_Data += strbuf;
|
||||
|
||||
m_Data += " F\n";
|
||||
fprintf( m_Outfile, " F\n" );
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void BITMAPCONV_INFO::createOutputData( BMP2CMP_MOD_LAYER aModLayer )
|
||||
void BITMAPCONV_INFO::CreateOutputFile( BMP2CMP_MOD_LAYER aModLayer )
|
||||
{
|
||||
std::vector <potrace_dpoint_t> cornersBuffer;
|
||||
|
||||
@@ -403,7 +426,7 @@ void BITMAPCONV_INFO::createOutputData( BMP2CMP_MOD_LAYER aModLayer )
|
||||
// The layer name has meaning only for .kicad_mod files.
|
||||
// For these files the header creates 2 invisible texts: value and ref
|
||||
// (needed but not usefull) on silk screen layer
|
||||
outputDataHeader( getBoardLayerName( MOD_LYR_FSILKS ) );
|
||||
OuputFileHeader( getBrdLayerName( MOD_LYR_FSILKS ) );
|
||||
|
||||
bool main_outline = true;
|
||||
|
||||
@@ -411,12 +434,8 @@ void BITMAPCONV_INFO::createOutputData( BMP2CMP_MOD_LAYER aModLayer )
|
||||
* Bezier curves are approximated by a polyline
|
||||
*/
|
||||
potrace_path_t* paths = m_Paths; // the list of paths
|
||||
|
||||
if(!m_Paths)
|
||||
{
|
||||
m_errors += "No path in black and white image: no outline created\n";
|
||||
}
|
||||
|
||||
printf("NULL Paths!\n");
|
||||
while( paths != NULL )
|
||||
{
|
||||
int cnt = paths->curve.n;
|
||||
@@ -470,21 +489,17 @@ void BITMAPCONV_INFO::createOutputData( BMP2CMP_MOD_LAYER aModLayer )
|
||||
*/
|
||||
if( paths->next == NULL || paths->next->sign == '+' )
|
||||
{
|
||||
// Substract holes to main polygon:
|
||||
polyset_areas.Simplify( SHAPE_POLY_SET::PM_STRICTLY_SIMPLE );
|
||||
polyset_holes.Simplify( SHAPE_POLY_SET::PM_STRICTLY_SIMPLE );
|
||||
polyset_areas.BooleanSubtract( polyset_holes, SHAPE_POLY_SET::PM_STRICTLY_SIMPLE );
|
||||
|
||||
// Ensure there are no self intersecting polygons
|
||||
polyset_areas.NormalizeAreaOutlines();
|
||||
|
||||
// Convert polygon with holes to a unique polygon
|
||||
polyset_areas.Fracture( SHAPE_POLY_SET::PM_STRICTLY_SIMPLE );
|
||||
|
||||
// Output current resulting polygon(s)
|
||||
for( int ii = 0; ii < polyset_areas.OutlineCount(); ii++ )
|
||||
{
|
||||
SHAPE_LINE_CHAIN& poly = polyset_areas.Outline( ii );
|
||||
outputOnePolygon( poly, getBoardLayerName( aModLayer ));
|
||||
OuputOnePolygon(poly, getBrdLayerName( aModLayer ) );
|
||||
}
|
||||
|
||||
polyset_areas.RemoveAllContours();
|
||||
@@ -494,7 +509,7 @@ void BITMAPCONV_INFO::createOutputData( BMP2CMP_MOD_LAYER aModLayer )
|
||||
paths = paths->next;
|
||||
}
|
||||
|
||||
outputDataEnd();
|
||||
OuputFileEnd();
|
||||
}
|
||||
|
||||
// a helper function to calculate a square value
|
||||
|
||||
@@ -24,9 +24,6 @@
|
||||
#ifndef BITMAP2COMPONENT_H
|
||||
#define BITMAP2COMPONENT_H
|
||||
|
||||
#include <geometry/shape_poly_set.h>
|
||||
#include <potracelib.h>
|
||||
|
||||
// for consistency this enum should conform to the
|
||||
// indices in m_radioBoxFormat from bitmap2cmp_gui.cpp
|
||||
enum OUTPUT_FMT_ID
|
||||
@@ -47,67 +44,4 @@ enum BMP2CMP_MOD_LAYER
|
||||
MOD_LYR_FINAL = MOD_LYR_ECO2
|
||||
};
|
||||
|
||||
|
||||
/* Helper class to handle useful info to convert a bitmap image to
|
||||
* a polygonal object description
|
||||
*/
|
||||
class BITMAPCONV_INFO
|
||||
{
|
||||
private:
|
||||
enum OUTPUT_FMT_ID m_Format; // File format
|
||||
int m_PixmapWidth;
|
||||
int m_PixmapHeight; // the bitmap size in pixels
|
||||
double m_ScaleX;
|
||||
double m_ScaleY; // the conversion scale
|
||||
potrace_path_t* m_Paths; // the list of paths, from potrace (list of lines and bezier curves)
|
||||
std::string m_CmpName; // The string used as cmp/footprint name
|
||||
std::string& m_Data; // the buffer containing the conversion
|
||||
std::string m_errors; // a buffer to return error messages
|
||||
|
||||
public:
|
||||
BITMAPCONV_INFO( std::string& aData );
|
||||
|
||||
/**
|
||||
* Run the conversion of the bitmap
|
||||
*/
|
||||
int ConvertBitmap( potrace_bitmap_t* aPotrace_bitmap,
|
||||
OUTPUT_FMT_ID aFormat, int aDpi_X, int aDpi_Y,
|
||||
BMP2CMP_MOD_LAYER aModLayer );
|
||||
|
||||
std::string& GetErrorMessages() {return m_errors; }
|
||||
|
||||
private:
|
||||
/**
|
||||
* Creates the data specified by m_Format
|
||||
*/
|
||||
void createOutputData( BMP2CMP_MOD_LAYER aModLayer = (BMP2CMP_MOD_LAYER) 0 );
|
||||
|
||||
/**
|
||||
* Function outputDataHeader
|
||||
* write to file the header depending on file format
|
||||
*/
|
||||
void outputDataHeader( const char * aBrdLayerName );
|
||||
|
||||
/**
|
||||
* Function outputDataEnd
|
||||
* write to file the last strings depending on file format
|
||||
*/
|
||||
void outputDataEnd();
|
||||
|
||||
|
||||
/**
|
||||
* @return the board layer name depending on the board layer selected
|
||||
* @param aChoice = the choice (MOD_LYR_FSILKS to MOD_LYR_FINAL)
|
||||
*/
|
||||
const char * getBoardLayerName( BMP2CMP_MOD_LAYER aChoice );
|
||||
|
||||
/**
|
||||
* Function outputOnePolygon
|
||||
* write one polygon to output file.
|
||||
* Polygon coordinates are expected scaled by the polygon extraction function
|
||||
*/
|
||||
void outputOnePolygon( SHAPE_LINE_CHAIN & aPolygon, const char* aBrdLayerName );
|
||||
|
||||
};
|
||||
|
||||
#endif // BITMAP2COMPONENT_H
|
||||
|
||||
@@ -131,6 +131,7 @@ set( BMAPS_MID
|
||||
add_line_label
|
||||
add_line
|
||||
add_pcb_target
|
||||
add_polygon
|
||||
add_power
|
||||
add_rectangle
|
||||
add_tracks
|
||||
@@ -163,15 +164,14 @@ set( BMAPS_MID
|
||||
axis3d
|
||||
bitmap2component
|
||||
bom
|
||||
book
|
||||
break_bus
|
||||
break_line
|
||||
browse_files
|
||||
bus_definition_tool
|
||||
calculator
|
||||
cancel
|
||||
change_entry_orient
|
||||
contrast_mode
|
||||
curved_ratsnest
|
||||
create_cmp_file
|
||||
checked_ok
|
||||
color_materials
|
||||
@@ -186,10 +186,25 @@ set( BMAPS_MID
|
||||
custom_pad_to_primitives
|
||||
cut
|
||||
cvpcb
|
||||
dashline
|
||||
datasheet
|
||||
delete_association
|
||||
delete_bus
|
||||
delete_circle
|
||||
delete_connection
|
||||
delete_dimension
|
||||
delete_field
|
||||
delete_gerber
|
||||
delete_glabel
|
||||
delete_line
|
||||
delete_module
|
||||
delete_net
|
||||
delete_node
|
||||
delete_pad
|
||||
delete_polygon
|
||||
delete_rectangle
|
||||
delete_sheet
|
||||
delete_track
|
||||
delete
|
||||
directory
|
||||
directory_browser
|
||||
@@ -198,10 +213,13 @@ set( BMAPS_MID
|
||||
distribute_vertical
|
||||
down
|
||||
drag
|
||||
drag_outline_segment
|
||||
drag_pad
|
||||
drag_segment_withslope
|
||||
drc_off
|
||||
drc
|
||||
duplicate
|
||||
edges_sketch
|
||||
edit_comp_footprint
|
||||
edit_comp_ref
|
||||
edit_comp_value
|
||||
@@ -245,6 +263,9 @@ set( BMAPS_MID
|
||||
gerbview_clear_layers
|
||||
general_deletions
|
||||
general_ratsnest
|
||||
glabel2label
|
||||
glabel2text
|
||||
gl_change
|
||||
go_down
|
||||
go_up
|
||||
green
|
||||
@@ -257,6 +278,8 @@ set( BMAPS_MID
|
||||
hierarchy_nav
|
||||
highlight_remove
|
||||
hotkeys
|
||||
hotkeys_import
|
||||
hotkeys_export
|
||||
html
|
||||
icon
|
||||
icon_cvpcb_small
|
||||
@@ -270,12 +293,14 @@ set( BMAPS_MID
|
||||
import_module
|
||||
import_part
|
||||
import_project
|
||||
import_vector
|
||||
import_setup
|
||||
import
|
||||
info
|
||||
insert_module_board
|
||||
invisible_text
|
||||
kicad_icon_small
|
||||
label2glabel
|
||||
label2text
|
||||
label
|
||||
lang_ca
|
||||
lang_bg
|
||||
@@ -315,6 +340,7 @@ set( BMAPS_MID
|
||||
list_nets
|
||||
load_gerber
|
||||
load_module_board
|
||||
load_module_lib
|
||||
local_ratsnest
|
||||
lock_unlock
|
||||
locked
|
||||
@@ -325,6 +351,7 @@ set( BMAPS_MID
|
||||
mirror_v
|
||||
mode_module
|
||||
mode_track
|
||||
modratsnest
|
||||
module_check
|
||||
module_editor
|
||||
module_wizard
|
||||
@@ -334,11 +361,18 @@ set( BMAPS_MID
|
||||
module_pin_filtered_list
|
||||
module_library_list
|
||||
module_name_filtered_list
|
||||
module_ratsnest
|
||||
module
|
||||
modview_icon
|
||||
morgan1
|
||||
morgan2
|
||||
move_glabel
|
||||
move_exactly
|
||||
move_pad
|
||||
move_polygon
|
||||
move_rectangle
|
||||
move_sheet
|
||||
move_target
|
||||
move
|
||||
move_relative
|
||||
mw_add_gap
|
||||
@@ -365,15 +399,34 @@ set( BMAPS_MID
|
||||
noconn
|
||||
normal
|
||||
online_help
|
||||
open_brd_file
|
||||
open_library
|
||||
open_page_layout
|
||||
open_project
|
||||
open_document
|
||||
options_3drender
|
||||
options_all_tracks_and_vias
|
||||
options_all_tracks
|
||||
options_all_vias
|
||||
options_arc
|
||||
options_board
|
||||
options_circle
|
||||
options_generic
|
||||
options_module
|
||||
options_pad
|
||||
options_pinsheet
|
||||
options_pin
|
||||
options_rectangle
|
||||
options_segment
|
||||
options_tracks
|
||||
options_track
|
||||
options_vias
|
||||
opt_show_polygon
|
||||
orient
|
||||
ortho
|
||||
pad_sketch
|
||||
pad
|
||||
pad_dimensions
|
||||
pad_enumerate
|
||||
pads_mask_layers
|
||||
path
|
||||
@@ -387,11 +440,18 @@ set( BMAPS_MID
|
||||
pcbcalculator
|
||||
pcb_offset
|
||||
pin2pin
|
||||
pin_name_to
|
||||
pin_number_to
|
||||
pin_size_to
|
||||
pin_show_etype
|
||||
pin_table
|
||||
pin_to
|
||||
pin
|
||||
plot
|
||||
plot_dxf
|
||||
plot_hpg
|
||||
plot_pdf
|
||||
plot_ps
|
||||
plot_svg
|
||||
plus
|
||||
polar_coord
|
||||
@@ -438,6 +498,10 @@ set( BMAPS_MID
|
||||
rotate_pos_z
|
||||
save_as
|
||||
save_fp_to_board
|
||||
save_gerber
|
||||
save_library
|
||||
save_project
|
||||
save_setup
|
||||
save
|
||||
select_grid
|
||||
select_layer_pair
|
||||
@@ -481,6 +545,7 @@ set( BMAPS_MID
|
||||
track_locked
|
||||
track_sketch
|
||||
track_unlocked
|
||||
transistor
|
||||
undelete
|
||||
undo
|
||||
unit_inch
|
||||
@@ -490,6 +555,7 @@ set( BMAPS_MID
|
||||
unzip
|
||||
up
|
||||
update_fields
|
||||
update_module_board
|
||||
update_pcb_from_sch
|
||||
use_3D_copper_thickness
|
||||
via
|
||||
@@ -497,9 +563,14 @@ set( BMAPS_MID
|
||||
via_microvia
|
||||
via_sketch
|
||||
warning
|
||||
web_support
|
||||
width_net
|
||||
width_segment
|
||||
width_track_via
|
||||
width_track
|
||||
width_vias
|
||||
wizard_add_fplib_small
|
||||
zip_tool
|
||||
zip
|
||||
zone_duplicate
|
||||
zone_unfill
|
||||
|
||||
@@ -8,13 +8,19 @@
|
||||
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, 0x00, 0x52, 0x49, 0x44, 0x41, 0x54, 0x38, 0xcb, 0x63, 0x60, 0x18, 0x2c, 0xa0,
|
||||
0x0d, 0x88, 0xf7, 0x02, 0xf1, 0x7f, 0x20, 0x7e, 0x0b, 0xc4, 0xa7, 0x81, 0x58, 0x82, 0x14, 0x03,
|
||||
0x0e, 0x01, 0x31, 0x1f, 0x12, 0xbf, 0x0a, 0x88, 0x57, 0x90, 0x62, 0xc0, 0x7f, 0x12, 0x31, 0xc8,
|
||||
0xb5, 0x2d, 0xe8, 0x06, 0x90, 0x02, 0xf8, 0x81, 0xf8, 0x00, 0x25, 0x06, 0x60, 0xe8, 0x19, 0x35,
|
||||
0x80, 0x0a, 0x06, 0xec, 0x82, 0x26, 0x24, 0x46, 0x22, 0xb1, 0x00, 0x10, 0xef, 0x40, 0x4f, 0xca,
|
||||
0x7b, 0x28, 0x49, 0x48, 0x03, 0x07, 0x00, 0x53, 0x4f, 0x2f, 0x0f, 0x29, 0x5f, 0x3d, 0xf7, 0x00,
|
||||
0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
0x61, 0x00, 0x00, 0x00, 0x04, 0x73, 0x42, 0x49, 0x54, 0x08, 0x08, 0x08, 0x08, 0x7c, 0x08, 0x64,
|
||||
0x88, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0e, 0xc4, 0x00, 0x00, 0x0e,
|
||||
0xc4, 0x01, 0x95, 0x2b, 0x0e, 0x1b, 0x00, 0x00, 0x00, 0x19, 0x74, 0x45, 0x58, 0x74, 0x53, 0x6f,
|
||||
0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x00, 0x77, 0x77, 0x77, 0x2e, 0x69, 0x6e, 0x6b, 0x73, 0x63,
|
||||
0x61, 0x70, 0x65, 0x2e, 0x6f, 0x72, 0x67, 0x9b, 0xee, 0x3c, 0x1a, 0x00, 0x00, 0x00, 0x69, 0x49,
|
||||
0x44, 0x41, 0x54, 0x38, 0x8d, 0xed, 0xd2, 0x31, 0x0e, 0x82, 0x40, 0x14, 0x06, 0xe1, 0x4f, 0x0e,
|
||||
0x20, 0x94, 0x9c, 0xd5, 0xda, 0x78, 0x16, 0x1a, 0xe8, 0x0d, 0xd9, 0xc4, 0xd8, 0xca, 0x55, 0xb8,
|
||||
0x82, 0x6b, 0x01, 0x41, 0xb4, 0xda, 0xd5, 0x86, 0x82, 0x49, 0xfe, 0xe2, 0x15, 0x33, 0xd5, 0x63,
|
||||
0x2b, 0x5c, 0x10, 0x10, 0x31, 0xe2, 0x81, 0x3a, 0x27, 0x70, 0xc7, 0x71, 0x75, 0x9f, 0xd0, 0xe4,
|
||||
0x04, 0x62, 0xe6, 0x02, 0xce, 0xdf, 0x81, 0x1c, 0x4a, 0xdc, 0xfe, 0x09, 0x2c, 0x4e, 0xf1, 0x83,
|
||||
0xf8, 0xc1, 0x1e, 0x78, 0x07, 0x7a, 0xd3, 0x23, 0x1d, 0x12, 0x57, 0xe1, 0xba, 0x0e, 0x0c, 0xe8,
|
||||
0xf0, 0x4c, 0x5c, 0x3b, 0x3b, 0x1b, 0xe0, 0x05, 0x48, 0x07, 0x25, 0x8f, 0x26, 0x9b, 0x81, 0x8e,
|
||||
0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
};
|
||||
|
||||
const BITMAP_OPAQUE folder_xpm[1] = {{ png, sizeof( png ), "folder_xpm" }};
|
||||
|
||||
@@ -8,14 +8,20 @@
|
||||
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, 0x00, 0x60, 0x49, 0x44, 0x41, 0x54, 0x38, 0xcb, 0x63, 0x90, 0x92, 0x92, 0xfa,
|
||||
0x0f, 0xc2, 0x0c, 0xe4, 0x02, 0xaa, 0x19, 0x20, 0x2e, 0x2e, 0x2e, 0x46, 0x91, 0x01, 0xd2, 0xd2,
|
||||
0xd2, 0x97, 0xc9, 0x32, 0x04, 0x66, 0x00, 0x14, 0x5f, 0x97, 0x97, 0x97, 0x97, 0x24, 0xd7, 0x80,
|
||||
0x4b, 0x64, 0x19, 0x02, 0x33, 0x40, 0x42, 0x42, 0x42, 0x94, 0x2c, 0x43, 0x90, 0x63, 0x01, 0x14,
|
||||
0x06, 0xa0, 0xb0, 0x40, 0xf3, 0x16, 0x5e, 0x4c, 0x3d, 0x03, 0xd0, 0xbd, 0x20, 0x2a, 0x2a, 0x2a,
|
||||
0x41, 0x76, 0x20, 0x12, 0xad, 0x19, 0x5b, 0x34, 0x92, 0xa4, 0x99, 0xaa, 0x09, 0x89, 0xe2, 0xa4,
|
||||
0x3c, 0x60, 0xb9, 0x11, 0x00, 0xd8, 0xbd, 0x63, 0x3e, 0x86, 0xe5, 0x97, 0x0f, 0x00, 0x00, 0x00,
|
||||
0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
0x61, 0x00, 0x00, 0x00, 0xb9, 0x49, 0x44, 0x41, 0x54, 0x38, 0xcb, 0x63, 0x60, 0x40, 0x03, 0x52,
|
||||
0x52, 0x52, 0xff, 0x41, 0x98, 0x01, 0x0b, 0x10, 0x11, 0x11, 0xe1, 0x95, 0x94, 0x94, 0xdc, 0xca,
|
||||
0x80, 0x0f, 0xe0, 0x32, 0x40, 0x5a, 0x5a, 0x5a, 0x06, 0x28, 0x7e, 0x1e, 0x97, 0xe1, 0x70, 0x1b,
|
||||
0xb0, 0x19, 0x20, 0x23, 0x23, 0x63, 0x06, 0x14, 0x7b, 0x81, 0xcf, 0x75, 0x20, 0xc0, 0x08, 0xb4,
|
||||
0x65, 0x2d, 0xba, 0x22, 0xa0, 0x93, 0x83, 0x80, 0xfc, 0xaf, 0x30, 0x71, 0x9c, 0x06, 0x00, 0x35,
|
||||
0xd7, 0xa0, 0x2b, 0x02, 0xd2, 0x65, 0x40, 0xfc, 0x17, 0x2a, 0x36, 0x0b, 0xa7, 0x01, 0x40, 0x41,
|
||||
0x37, 0x20, 0xfe, 0x83, 0xa4, 0x18, 0x84, 0xa7, 0x42, 0xe9, 0x7f, 0x40, 0xdc, 0x80, 0x33, 0x7c,
|
||||
0x80, 0xfe, 0x53, 0x05, 0x0a, 0xbe, 0x07, 0x49, 0x00, 0x9d, 0x5b, 0x85, 0xec, 0x0a, 0x20, 0xfe,
|
||||
0x0e, 0xc4, 0x11, 0x78, 0x03, 0x18, 0x28, 0x70, 0x05, 0x24, 0x08, 0xf2, 0x3f, 0x28, 0x1c, 0xd0,
|
||||
0x0c, 0x20, 0x88, 0x29, 0x37, 0x40, 0x5c, 0x5c, 0x5c, 0x11, 0xc8, 0x78, 0x03, 0x35, 0xa4, 0x9a,
|
||||
0x50, 0x54, 0xe1, 0x4a, 0x3c, 0xae, 0xe8, 0x81, 0xc8, 0x40, 0x2a, 0x40, 0xb6, 0x9d, 0x2c, 0x03,
|
||||
0x70, 0x25, 0x24, 0x92, 0x00, 0xae, 0xa4, 0x4c, 0x6a, 0x78, 0xd0, 0xd7, 0x00, 0x00, 0xe0, 0x1c,
|
||||
0x80, 0xeb, 0x37, 0x41, 0x6c, 0xd9, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42,
|
||||
0x60, 0x82,
|
||||
};
|
||||
|
||||
const BITMAP_OPAQUE pinshape_clock_fall_xpm[1] = {{ png, sizeof( png ), "pinshape_clock_fall_xpm" }};
|
||||
|
||||
@@ -0,0 +1,51 @@
|
||||
|
||||
/* Do not modify this file, it was automatically generated by the
|
||||
* PNG2cpp CMake script, using a *.png file as input.
|
||||
*/
|
||||
|
||||
#include <bitmaps_png/bitmaps_list.h>
|
||||
|
||||
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, 0x02, 0x1d, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0x63, 0x60, 0xa0, 0x27, 0xc8,
|
||||
0xcd, 0xcd, 0x65, 0x4f, 0xc9, 0x4e, 0x9d, 0x94, 0x92, 0x95, 0xf2, 0x01, 0x84, 0x93, 0x73, 0x52,
|
||||
0x27, 0x80, 0xc4, 0xa8, 0x6e, 0x11, 0xc8, 0x92, 0xb0, 0xba, 0xa8, 0x6f, 0x86, 0x3b, 0x1c, 0xff,
|
||||
0x1b, 0xec, 0x70, 0xf8, 0x1f, 0x56, 0x17, 0xf3, 0x15, 0x64, 0x19, 0x31, 0x7a, 0x53, 0x53, 0x53,
|
||||
0xdd, 0xd3, 0xd2, 0xd2, 0x0a, 0x81, 0xd8, 0x8d, 0xb0, 0x45, 0x40, 0x5f, 0x80, 0x2c, 0xd0, 0x3a,
|
||||
0x64, 0x03, 0xc6, 0x20, 0x0b, 0xe3, 0xd3, 0x32, 0x7f, 0x33, 0x30, 0x9c, 0x98, 0xc7, 0xc0, 0x70,
|
||||
0xbc, 0x01, 0x88, 0x53, 0x80, 0xd8, 0x93, 0x81, 0xe1, 0x94, 0x36, 0x03, 0xc3, 0x19, 0x7e, 0x98,
|
||||
0xbe, 0xa4, 0xec, 0x94, 0xcd, 0xb1, 0x25, 0x09, 0x9f, 0xbc, 0xfb, 0x82, 0x7f, 0xc5, 0x16, 0xc7,
|
||||
0x7f, 0x4a, 0xca, 0x4e, 0xda, 0x48, 0xb2, 0x45, 0x71, 0x29, 0xd9, 0xff, 0x81, 0x16, 0xe1, 0xc2,
|
||||
0x9f, 0x15, 0x14, 0x56, 0x3c, 0x8c, 0x2c, 0x48, 0xf9, 0xad, 0x7d, 0xd0, 0x16, 0xac, 0x47, 0xfb,
|
||||
0x80, 0xed, 0xff, 0x38, 0xa0, 0xa5, 0xe9, 0xe9, 0xe9, 0xae, 0x38, 0x2d, 0x02, 0x05, 0x53, 0x78,
|
||||
0x6d, 0xf4, 0x37, 0x90, 0x65, 0x20, 0x4b, 0xc2, 0x6a, 0x62, 0xbe, 0x07, 0x84, 0x95, 0xad, 0x87,
|
||||
0xfa, 0xa4, 0x01, 0xe2, 0xb3, 0x13, 0x3b, 0x81, 0xf8, 0x2a, 0xc8, 0x12, 0x90, 0x65, 0x7a, 0x7a,
|
||||
0x73, 0xfe, 0x7b, 0x75, 0x87, 0xc1, 0x1d, 0x07, 0xc2, 0x3e, 0xbd, 0xc1, 0x3f, 0x81, 0x16, 0x15,
|
||||
0xe1, 0x4d, 0x0c, 0x20, 0xcb, 0x52, 0xb2, 0x53, 0xde, 0x83, 0x70, 0x72, 0x56, 0x6a, 0x5f, 0x68,
|
||||
0x68, 0x28, 0x1b, 0xee, 0x30, 0x38, 0xc3, 0xef, 0xee, 0xde, 0x96, 0x1a, 0x5d, 0x98, 0xf0, 0x0d,
|
||||
0xe4, 0x13, 0x64, 0x1f, 0x01, 0xe3, 0xcc, 0x85, 0xea, 0x89, 0x08, 0x14, 0x27, 0x20, 0xc3, 0xbd,
|
||||
0x7b, 0xc2, 0xfe, 0x45, 0xe6, 0xa5, 0xfd, 0x8f, 0x88, 0xcf, 0x3f, 0x46, 0xb3, 0xac, 0x01, 0x4a,
|
||||
0x6d, 0xf6, 0xf6, 0xdd, 0xdb, 0xa4, 0xa5, 0xd7, 0x81, 0xe2, 0x6e, 0x31, 0x8d, 0x73, 0xe2, 0x51,
|
||||
0x79, 0xa0, 0x25, 0xff, 0x80, 0xf8, 0x0b, 0x03, 0xc3, 0x7e, 0x1e, 0x1a, 0x5b, 0x76, 0xe2, 0x30,
|
||||
0x34, 0x45, 0xc6, 0xd2, 0xd8, 0xa2, 0x93, 0x19, 0x50, 0x8b, 0x76, 0xd0, 0xd8, 0xa2, 0xc3, 0x82,
|
||||
0x40, 0xcb, 0x7e, 0x00, 0x2d, 0xfa, 0x03, 0xcc, 0xd8, 0x12, 0xb4, 0x0e, 0xbe, 0xf5, 0x10, 0x5f,
|
||||
0x9d, 0x2c, 0xa4, 0xb5, 0x45, 0xc1, 0xd0, 0xe0, 0x3b, 0x43, 0x53, 0x6b, 0xac, 0xad, 0xe7, 0xf2,
|
||||
0x5a, 0xdb, 0xf7, 0x7e, 0x8f, 0x4b, 0xc9, 0xfa, 0x9f, 0x9c, 0x99, 0xfa, 0x99, 0xa6, 0xb5, 0x40,
|
||||
0x48, 0x4d, 0xec, 0x6f, 0x72, 0x6a, 0x01, 0x22, 0xc1, 0x45, 0x6e, 0x06, 0x86, 0x63, 0xf6, 0x89,
|
||||
0xe9, 0xe9, 0xdf, 0xd1, 0x0b, 0x67, 0x50, 0x91, 0x46, 0x49, 0x06, 0x55, 0x06, 0xc6, 0x43, 0x0c,
|
||||
0x10, 0x4f, 0x01, 0xe2, 0xb3, 0x40, 0x0c, 0xaa, 0x52, 0xfe, 0x83, 0x82, 0x0c, 0xaf, 0x45, 0xf8,
|
||||
0x6b, 0xd8, 0x33, 0x5c, 0x40, 0x43, 0x6c, 0x80, 0x38, 0x1f, 0x88, 0x57, 0x01, 0xf1, 0x0b, 0x2c,
|
||||
0xd5, 0xc6, 0x1f, 0x50, 0xc9, 0xee, 0xe4, 0xd1, 0x7a, 0x3d, 0xac, 0x26, 0xf6, 0x27, 0xbc, 0x16,
|
||||
0xa8, 0x05, 0x06, 0x1d, 0xb0, 0x80, 0xc6, 0x59, 0xc3, 0x86, 0xd6, 0xc4, 0xfe, 0x70, 0xf5, 0x6e,
|
||||
0x3e, 0x0f, 0xd4, 0x7c, 0x04, 0x9a, 0x37, 0xd0, 0x0d, 0xfe, 0x00, 0xc4, 0xbb, 0xa1, 0x95, 0xa2,
|
||||
0x2f, 0x03, 0xc3, 0x79, 0x01, 0xa2, 0x6a, 0x01, 0x02, 0x15, 0xdf, 0x6f, 0x68, 0xf0, 0x4c, 0x81,
|
||||
0x04, 0x17, 0x28, 0xd8, 0xc8, 0x4d, 0x2d, 0x58, 0x2c, 0x02, 0x45, 0x2c, 0x28, 0x82, 0x21, 0x11,
|
||||
0x4d, 0x25, 0x80, 0x51, 0xc3, 0xa2, 0x87, 0x2d, 0x35, 0x9b, 0x5b, 0xa4, 0xd5, 0xb0, 0x83, 0x18,
|
||||
0x00, 0x00, 0x06, 0xd3, 0x8e, 0xf0, 0xd7, 0x9a, 0xbb, 0xe9, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45,
|
||||
0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
};
|
||||
|
||||
const BITMAP_OPAQUE add_polygon_xpm[1] = {{ png, sizeof( png ), "add_polygon_xpm" }};
|
||||
|
||||
//EOF
|
||||
@@ -8,67 +8,52 @@
|
||||
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, 0x04, 0x73, 0x42, 0x49, 0x54, 0x08, 0x08, 0x08, 0x08, 0x7c, 0x08, 0x64,
|
||||
0x88, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0e, 0xc4, 0x00, 0x00, 0x0e,
|
||||
0xc4, 0x01, 0x95, 0x2b, 0x0e, 0x1b, 0x00, 0x00, 0x00, 0x19, 0x74, 0x45, 0x58, 0x74, 0x53, 0x6f,
|
||||
0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x00, 0x77, 0x77, 0x77, 0x2e, 0x69, 0x6e, 0x6b, 0x73, 0x63,
|
||||
0x61, 0x70, 0x65, 0x2e, 0x6f, 0x72, 0x67, 0x9b, 0xee, 0x3c, 0x1a, 0x00, 0x00, 0x03, 0x6a, 0x49,
|
||||
0x44, 0x41, 0x54, 0x48, 0x89, 0xb5, 0xd5, 0x5d, 0x88, 0xd6, 0x45, 0x14, 0x06, 0xf0, 0xdf, 0xbc,
|
||||
0xbb, 0xb4, 0x9b, 0xa2, 0x52, 0x62, 0x9f, 0x62, 0x6a, 0xa9, 0xb9, 0x57, 0x19, 0xe9, 0x8d, 0x8a,
|
||||
0x41, 0xa5, 0x45, 0xc6, 0xde, 0x44, 0x4a, 0x46, 0x84, 0x94, 0xd1, 0x5d, 0x88, 0xd5, 0x4a, 0xda,
|
||||
0x7b, 0x16, 0x57, 0xcd, 0x0a, 0x2a, 0x6f, 0x02, 0xa1, 0x0b, 0x31, 0x2f, 0x0a, 0xca, 0xa0, 0x2e,
|
||||
0x44, 0xa5, 0x04, 0xc3, 0xec, 0x1b, 0x0c, 0xda, 0x4a, 0x5c, 0x25, 0x71, 0x55, 0x6a, 0x57, 0x2a,
|
||||
0x65, 0x5d, 0x7d, 0x77, 0xa7, 0x8b, 0xf7, 0xdd, 0xdd, 0xb7, 0xfd, 0x08, 0xcc, 0x75, 0xe0, 0xcf,
|
||||
0x7f, 0x66, 0xce, 0xcc, 0x3c, 0x33, 0xcf, 0x79, 0xce, 0x39, 0x49, 0x38, 0x87, 0xdf, 0x5d, 0xdd,
|
||||
0x36, 0xa9, 0x16, 0x67, 0x70, 0xe0, 0x2a, 0x03, 0x2d, 0x2c, 0x8c, 0xc2, 0x21, 0xf5, 0xb8, 0x16,
|
||||
0xe9, 0xbf, 0x16, 0xd5, 0xfe, 0xaf, 0xa3, 0x93, 0x9b, 0x64, 0x33, 0x71, 0x0b, 0xea, 0x2a, 0xb3,
|
||||
0x97, 0xd0, 0x8e, 0x5f, 0x70, 0xea, 0x4a, 0x81, 0x6a, 0x30, 0x4f, 0x36, 0x03, 0xfb, 0xf0, 0x8a,
|
||||
0x82, 0x23, 0x28, 0xe9, 0x35, 0x0b, 0xcb, 0xb1, 0x54, 0xd2, 0x26, 0x3b, 0x84, 0xd2, 0xe5, 0x03,
|
||||
0x65, 0x49, 0xb2, 0x48, 0x32, 0x06, 0xf7, 0x29, 0xda, 0x1f, 0x11, 0x73, 0xf4, 0xba, 0xa7, 0xb2,
|
||||
0xe2, 0xdb, 0x88, 0x68, 0x14, 0xe6, 0xe3, 0x23, 0x2c, 0xc2, 0x67, 0xc8, 0x90, 0x84, 0xa3, 0x86,
|
||||
0x8a, 0xe1, 0x36, 0x4c, 0x1d, 0x04, 0x54, 0x2f, 0x99, 0xa0, 0x60, 0x6e, 0xf4, 0xc6, 0xdf, 0x78,
|
||||
0x17, 0xf7, 0x0f, 0xda, 0xb7, 0x17, 0x4f, 0x47, 0x4d, 0x8c, 0x55, 0xf2, 0xb5, 0xe4, 0x08, 0x0e,
|
||||
0x1b, 0x41, 0x0c, 0x35, 0x98, 0xab, 0xcc, 0xf3, 0x37, 0xfd, 0x5f, 0x72, 0x40, 0xb2, 0x2c, 0x7a,
|
||||
0xe3, 0x98, 0x32, 0x6d, 0x83, 0x41, 0xe0, 0x01, 0xec, 0x8f, 0x9e, 0x38, 0xa1, 0x60, 0x1d, 0x1a,
|
||||
0x70, 0x0d, 0xc3, 0x51, 0x97, 0xdd, 0x21, 0x49, 0x58, 0x2a, 0x74, 0x0e, 0xb1, 0x87, 0x4d, 0x98,
|
||||
0x51, 0x19, 0x75, 0xe3, 0x3d, 0x65, 0xc5, 0xad, 0x50, 0x16, 0xc6, 0x34, 0xac, 0x95, 0x6d, 0xc4,
|
||||
0x16, 0xd9, 0xad, 0xd2, 0x50, 0xa0, 0x24, 0x99, 0x85, 0x6d, 0x42, 0x67, 0x44, 0x7c, 0x8c, 0xc6,
|
||||
0x61, 0x6e, 0x5e, 0x5e, 0x9c, 0xd2, 0x8a, 0x62, 0xb1, 0xf8, 0x21, 0x34, 0x37, 0x37, 0xef, 0xce,
|
||||
0x39, 0x7f, 0x50, 0x31, 0x2d, 0x16, 0x5e, 0x16, 0xbe, 0x97, 0x4c, 0x84, 0xc1, 0xd4, 0x4d, 0xc1,
|
||||
0x38, 0xbc, 0xb9, 0x61, 0xc3, 0x86, 0xd9, 0x78, 0x64, 0x24, 0x10, 0xa8, 0xaf, 0xaf, 0xdf, 0x53,
|
||||
0xd5, 0xdf, 0x5d, 0x65, 0x9a, 0x55, 0xf9, 0x9f, 0xaa, 0xbc, 0x72, 0x08, 0xd0, 0x6c, 0xc9, 0xfb,
|
||||
0xc2, 0x6f, 0x3d, 0x3d, 0x3d, 0x6b, 0x86, 0xb1, 0xff, 0xab, 0x75, 0x75, 0x75, 0x2d, 0xa9, 0xea,
|
||||
0x3f, 0x54, 0x65, 0xfa, 0xb9, 0xf2, 0xbf, 0x59, 0x99, 0xde, 0x2a, 0xd5, 0x95, 0x83, 0x70, 0x31,
|
||||
0xee, 0x6a, 0xa9, 0x6d, 0xe9, 0x28, 0x95, 0x4a, 0x6d, 0x2a, 0x8e, 0xc4, 0xfc, 0x88, 0x38, 0x08,
|
||||
0x11, 0xb1, 0x09, 0x6b, 0x2b, 0xf3, 0xdd, 0xd8, 0xa9, 0xec, 0xa3, 0xc7, 0x0d, 0x04, 0xef, 0xc6,
|
||||
0x18, 0x1b, 0x9b, 0x9d, 0xd7, 0x21, 0xfb, 0x4a, 0x32, 0x79, 0xc0, 0x47, 0x59, 0x03, 0xf6, 0x09,
|
||||
0x87, 0x4b, 0x51, 0x7a, 0xad, 0x0a, 0xe4, 0x8b, 0x88, 0x38, 0xa8, 0xd9, 0x0a, 0x5c, 0x90, 0xb5,
|
||||
0xe0, 0x51, 0x65, 0x41, 0xd4, 0x61, 0xe5, 0xa0, 0x87, 0xb6, 0xe1, 0x55, 0xe7, 0x3d, 0xa3, 0x1c,
|
||||
0x7d, 0x27, 0x31, 0xb9, 0x8f, 0x9a, 0xeb, 0x30, 0x59, 0xb2, 0x39, 0x22, 0xc6, 0x63, 0x55, 0xd5,
|
||||
0xc6, 0xd7, 0x85, 0x7a, 0xd9, 0x5b, 0xb2, 0x1d, 0x21, 0xa6, 0x2b, 0x4b, 0x7b, 0xef, 0x30, 0x6c,
|
||||
0xee, 0xa9, 0xad, 0xad, 0xbd, 0x37, 0xc4, 0x14, 0xb4, 0xa0, 0x15, 0x17, 0x19, 0xf0, 0x41, 0x03,
|
||||
0x7e, 0x50, 0xf4, 0x79, 0x4a, 0xe9, 0x39, 0x4c, 0xa8, 0xe2, 0xfa, 0x53, 0x3c, 0x29, 0x1b, 0x8f,
|
||||
0x4e, 0xc9, 0xfe, 0x48, 0x71, 0x7b, 0x44, 0x2c, 0xc1, 0x9c, 0x94, 0xd2, 0xaa, 0x94, 0xd2, 0xaa,
|
||||
0x42, 0xa1, 0x70, 0x77, 0x44, 0x3c, 0xb8, 0xae, 0xb4, 0x6e, 0x9a, 0x64, 0xbf, 0xec, 0x2c, 0x7e,
|
||||
0xec, 0xbb, 0x41, 0x12, 0xce, 0x60, 0x22, 0x96, 0x6f, 0xbd, 0x7e, 0xeb, 0x27, 0x9d, 0x9d, 0x9d,
|
||||
0x6d, 0xca, 0xc9, 0x52, 0x4a, 0x69, 0x65, 0x31, 0x17, 0xb7, 0xe3, 0x08, 0xba, 0x65, 0xdf, 0x49,
|
||||
0xe6, 0x55, 0x68, 0xdb, 0x27, 0xd9, 0x21, 0xf9, 0x55, 0xaf, 0x1e, 0xdc, 0x89, 0x65, 0x78, 0x58,
|
||||
0x76, 0x54, 0x72, 0x08, 0x3d, 0x15, 0x9c, 0x85, 0xb5, 0xb8, 0x01, 0xc7, 0x35, 0xd8, 0x75, 0xb6,
|
||||
0xf5, 0xec, 0x53, 0x7d, 0x20, 0x38, 0x99, 0x73, 0xde, 0x29, 0x69, 0x94, 0x4d, 0xc5, 0x2e, 0x49,
|
||||
0x0f, 0xbe, 0x94, 0x1c, 0xc3, 0x4c, 0xd9, 0x36, 0x59, 0x7d, 0x65, 0xfd, 0x45, 0xb4, 0xcb, 0xf6,
|
||||
0x4a, 0x23, 0x67, 0xef, 0x2d, 0x1e, 0xd3, 0x9b, 0x23, 0xaf, 0xee, 0x7f, 0x6a, 0x4a, 0x6f, 0x17,
|
||||
0x8b, 0xc5, 0x8b, 0x42, 0x13, 0x8e, 0xe1, 0x5c, 0xff, 0xae, 0xec, 0x34, 0x4e, 0x57, 0x46, 0xf5,
|
||||
0x48, 0xb2, 0x0b, 0x92, 0x3c, 0x52, 0x55, 0x2a, 0x48, 0x3a, 0x8c, 0xb7, 0x3d, 0x22, 0x1a, 0x2b,
|
||||
0xbe, 0x82, 0xbf, 0xea, 0xea, 0xea, 0xb6, 0x09, 0x0b, 0x30, 0x4f, 0xf2, 0xd3, 0xf0, 0xdb, 0xc1,
|
||||
0x05, 0x74, 0x49, 0xe5, 0x2c, 0x3d, 0x52, 0x2b, 0xe0, 0x59, 0xab, 0x75, 0xe1, 0x85, 0xaa, 0xf9,
|
||||
0x77, 0x9a, 0x9a, 0x9a, 0xfe, 0xc4, 0x4b, 0x92, 0x13, 0xf2, 0x30, 0x39, 0xef, 0x32, 0x5b, 0x82,
|
||||
0x88, 0x58, 0x60, 0xa0, 0x54, 0x74, 0x63, 0x7a, 0xd4, 0xc4, 0x38, 0x3d, 0x5a, 0x95, 0x33, 0x75,
|
||||
0xfb, 0x15, 0xe2, 0xf4, 0x97, 0x89, 0x35, 0x55, 0x93, 0x3b, 0x23, 0xa2, 0x5d, 0xc9, 0x8b, 0x92,
|
||||
0x3f, 0x46, 0x01, 0x04, 0x03, 0x71, 0xd4, 0x57, 0x5b, 0x7a, 0x6b, 0x6a, 0x6a, 0xde, 0xb0, 0xd1,
|
||||
0x8d, 0x92, 0x27, 0xe4, 0xfe, 0x9c, 0x35, 0x6a, 0x40, 0x5b, 0x95, 0x9d, 0xba, 0x65, 0xfd, 0xfa,
|
||||
0xf5, 0xad, 0x2e, 0x79, 0xbe, 0x32, 0x3e, 0x3e, 0x5a, 0x40, 0x43, 0xc5, 0x18, 0xc6, 0xc8, 0x4e,
|
||||
0x29, 0x48, 0xb2, 0x8e, 0x51, 0xc2, 0x99, 0xf4, 0x0f, 0x91, 0x83, 0x1f, 0x42, 0x3f, 0x13, 0xec,
|
||||
0x28, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
0xce, 0x00, 0x00, 0x02, 0xbb, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xb5, 0x96, 0x4d, 0x68, 0x15,
|
||||
0x67, 0x14, 0x86, 0x9f, 0x58, 0x0a, 0x1a, 0x6b, 0x29, 0xae, 0xda, 0x85, 0x59, 0x9b, 0xd2, 0x96,
|
||||
0x1a, 0x0a, 0x81, 0xfe, 0x2c, 0xb4, 0x6b, 0x91, 0x62, 0xdc, 0xa8, 0xdd, 0x08, 0x4a, 0x17, 0xa5,
|
||||
0x4b, 0xb7, 0xf3, 0x9c, 0xb9, 0xd7, 0xc0, 0x25, 0x60, 0xd7, 0x01, 0x23, 0x4d, 0x15, 0xdb, 0x4a,
|
||||
0x0b, 0x55, 0x37, 0x7a, 0x15, 0x04, 0xf1, 0x8f, 0xd2, 0xd2, 0x8d, 0x94, 0xb6, 0x1a, 0xab, 0xa6,
|
||||
0xa0, 0x69, 0xb5, 0xad, 0x69, 0x24, 0x31, 0x36, 0xde, 0x2e, 0xfc, 0x26, 0x4c, 0x6e, 0x6e, 0x12,
|
||||
0x91, 0x9b, 0x81, 0x03, 0xc3, 0xfc, 0x9c, 0x67, 0xde, 0xef, 0x9c, 0xf3, 0x7e, 0x03, 0x32, 0x81,
|
||||
0xfc, 0xb6, 0xcc, 0x31, 0x01, 0x32, 0x82, 0x7c, 0xb6, 0xcc, 0x31, 0xb2, 0x14, 0x68, 0x18, 0xf9,
|
||||
0x0a, 0xf9, 0x72, 0xb9, 0x40, 0x75, 0x82, 0x1b, 0xc8, 0x34, 0xd2, 0x48, 0x31, 0x49, 0x70, 0x1d,
|
||||
0x39, 0xd9, 0x0e, 0xd0, 0x61, 0x32, 0x46, 0x90, 0xc7, 0xc8, 0x31, 0x64, 0x3b, 0xd2, 0x43, 0x4e,
|
||||
0x2f, 0xb2, 0x93, 0x8c, 0xd3, 0xe9, 0xde, 0x2f, 0x64, 0x1c, 0x7a, 0x56, 0xd0, 0xe7, 0xc8, 0x28,
|
||||
0x32, 0x86, 0xbc, 0x0d, 0x74, 0xa8, 0x3d, 0xea, 0x9e, 0x14, 0x3d, 0x40, 0x07, 0xb2, 0x89, 0xe0,
|
||||
0x2e, 0x72, 0x93, 0x8c, 0xe1, 0x67, 0x01, 0xfd, 0x88, 0x8c, 0x23, 0xeb, 0xd5, 0x2e, 0xf5, 0xb4,
|
||||
0xda, 0x68, 0x8a, 0xba, 0xda, 0x85, 0xbc, 0x86, 0x4c, 0x92, 0x71, 0xbb, 0x45, 0x87, 0x9d, 0x5d,
|
||||
0x0c, 0x74, 0x84, 0x60, 0x0a, 0xf9, 0x58, 0xed, 0x54, 0x7f, 0x6d, 0x01, 0x29, 0xe2, 0xba, 0xfa,
|
||||
0x02, 0xc1, 0x66, 0xe4, 0x68, 0x53, 0x5c, 0x4c, 0xe3, 0x72, 0x68, 0x21, 0xd0, 0x39, 0x64, 0x92,
|
||||
0xfd, 0xac, 0x52, 0xfb, 0x4b, 0x49, 0xa7, 0xd4, 0x03, 0xea, 0x50, 0x3a, 0x2f, 0xae, 0x57, 0x69,
|
||||
0x75, 0xc8, 0x5a, 0xe4, 0x01, 0x19, 0x97, 0x16, 0x02, 0x5d, 0x41, 0xce, 0x03, 0xa8, 0xdf, 0x17,
|
||||
0x09, 0x23, 0x62, 0xeb, 0x6c, 0x0e, 0xed, 0x5b, 0x44, 0x65, 0x43, 0xfd, 0x36, 0xc1, 0x3e, 0x45,
|
||||
0xfe, 0x4a, 0xa3, 0x31, 0x0f, 0x74, 0x15, 0xf9, 0x26, 0x25, 0x1c, 0x2f, 0x5e, 0xae, 0xd5, 0x6a,
|
||||
0x6b, 0x0a, 0x50, 0xad, 0x56, 0x5b, 0xb3, 0x04, 0x68, 0xa6, 0x52, 0xa9, 0x74, 0x23, 0x5d, 0xc8,
|
||||
0xa3, 0xa6, 0x5a, 0xcd, 0x51, 0x74, 0xa1, 0x59, 0x91, 0xda, 0x57, 0x80, 0x22, 0x62, 0xdb, 0x12,
|
||||
0xa0, 0x86, 0x3a, 0xf4, 0xe4, 0x61, 0x0e, 0x23, 0x77, 0x16, 0xae, 0x91, 0x74, 0xb6, 0xa8, 0xd1,
|
||||
0xc1, 0x14, 0x0f, 0x5b, 0xd5, 0x28, 0xcf, 0xf3, 0xde, 0xd2, 0xf5, 0xe9, 0x6a, 0xb5, 0xba, 0x0e,
|
||||
0x79, 0x03, 0x79, 0x4c, 0xcc, 0x0e, 0x77, 0xa9, 0xeb, 0x64, 0x0a, 0xf9, 0xe4, 0x29, 0xba, 0x6e,
|
||||
0x64, 0x60, 0x60, 0x60, 0x35, 0xc1, 0x56, 0x82, 0x1d, 0x69, 0x15, 0xce, 0x97, 0xee, 0xd7, 0x52,
|
||||
0xad, 0xea, 0xc8, 0xad, 0xd6, 0x73, 0x94, 0xf1, 0x2f, 0x15, 0xba, 0xd3, 0x1c, 0xd5, 0x5b, 0x40,
|
||||
0x4e, 0x55, 0xab, 0xd5, 0x75, 0xe4, 0xbc, 0x9e, 0x56, 0xe0, 0x4f, 0x64, 0x65, 0x44, 0x6c, 0x29,
|
||||
0x3d, 0x73, 0x5f, 0x7d, 0x89, 0x60, 0x63, 0xc9, 0x61, 0xe6, 0x80, 0x86, 0x91, 0x51, 0x82, 0x3f,
|
||||
0xc8, 0x79, 0x0f, 0xe8, 0xc8, 0xf3, 0x7c, 0x43, 0x44, 0xec, 0x8e, 0x88, 0xdd, 0xea, 0x9b, 0x40,
|
||||
0x07, 0xc1, 0xfb, 0xc8, 0x3d, 0xe4, 0x77, 0x32, 0x1e, 0x22, 0x7b, 0x92, 0x8b, 0x5c, 0x29, 0xc1,
|
||||
0xf6, 0x26, 0x55, 0x3f, 0xa4, 0x46, 0x6b, 0xe1, 0x75, 0x72, 0x2d, 0x7d, 0xc9, 0x09, 0x82, 0x1d,
|
||||
0xc8, 0x5b, 0xe4, 0xf4, 0x12, 0x7c, 0x88, 0x9c, 0x69, 0xf2, 0xba, 0x9f, 0xd2, 0xfb, 0x2b, 0xd4,
|
||||
0x5d, 0x25, 0xd0, 0x6d, 0x75, 0x25, 0xd2, 0x87, 0xfc, 0x87, 0x8c, 0x2d, 0xe4, 0xde, 0xa7, 0x92,
|
||||
0x9d, 0xcc, 0x75, 0x6f, 0xe7, 0xb9, 0xf7, 0xd7, 0xc8, 0x0c, 0xc1, 0x07, 0x83, 0x83, 0x83, 0xcf,
|
||||
0xab, 0xb7, 0x4a, 0xb0, 0x5d, 0x1c, 0xe5, 0xb9, 0x94, 0xa7, 0xb1, 0xf8, 0x7e, 0x94, 0xcd, 0xee,
|
||||
0x47, 0x5f, 0x2c, 0x62, 0x98, 0xd7, 0x90, 0xef, 0x52, 0x53, 0xec, 0x2d, 0x81, 0x7e, 0x56, 0x57,
|
||||
0x20, 0x1f, 0x2d, 0x0d, 0x7a, 0x9a, 0x08, 0x8e, 0x27, 0xc5, 0xef, 0xaa, 0x2f, 0xaa, 0x7f, 0x97,
|
||||
0x9c, 0x65, 0x0b, 0xfb, 0x59, 0x45, 0x70, 0xb7, 0x5d, 0x5b, 0xf9, 0x28, 0x72, 0x22, 0xa9, 0xaa,
|
||||
0x95, 0x54, 0x5d, 0x4e, 0x4d, 0xd1, 0xd7, 0x2e, 0x50, 0x3d, 0x35, 0xc9, 0xab, 0xea, 0xcb, 0xea,
|
||||
0x64, 0x01, 0xcb, 0xf3, 0xfc, 0x9d, 0xc2, 0x71, 0xdb, 0xf5, 0x73, 0x32, 0x46, 0x70, 0x20, 0xa9,
|
||||
0x1a, 0x9a, 0x67, 0xb6, 0x6d, 0x04, 0x9d, 0x43, 0xa6, 0xd9, 0xc7, 0x2b, 0x95, 0x4a, 0xa5, 0x5b,
|
||||
0x9d, 0x49, 0xa0, 0x89, 0x76, 0x83, 0x86, 0x91, 0x7f, 0x90, 0xfe, 0xa4, 0xaa, 0x3f, 0x2d, 0x61,
|
||||
0x7f, 0x01, 0x6a, 0xdf, 0x0f, 0x64, 0x30, 0x4e, 0xc6, 0x7d, 0xa4, 0xb3, 0x79, 0x4f, 0xfc, 0x1f,
|
||||
0xf5, 0x11, 0xa2, 0x95, 0x85, 0x61, 0xe4, 0xeb, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44,
|
||||
0xae, 0x42, 0x60, 0x82,
|
||||
};
|
||||
|
||||
const BITMAP_OPAQUE add_zone_xpm[1] = {{ png, sizeof( png ), "add_zone_xpm" }};
|
||||
|
||||
@@ -0,0 +1,95 @@
|
||||
|
||||
/* Do not modify this file, it was automatically generated by the
|
||||
* PNG2cpp CMake script, using a *.png file as input.
|
||||
*/
|
||||
|
||||
#include <bitmaps_png/bitmaps_list.h>
|
||||
|
||||
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, 0xd9, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xbd, 0x96, 0x7f, 0x6c, 0x53,
|
||||
0x55, 0x14, 0xc7, 0xbf, 0xef, 0x47, 0xfb, 0x5e, 0xdb, 0xad, 0xdb, 0xba, 0x75, 0x1d, 0xb0, 0x4e,
|
||||
0xd8, 0x90, 0x6d, 0x20, 0x22, 0x24, 0x6a, 0x20, 0x81, 0x48, 0x86, 0xa8, 0x51, 0xb3, 0x04, 0x21,
|
||||
0xfe, 0xc2, 0x84, 0xc5, 0x3f, 0xd4, 0x18, 0x8d, 0x21, 0xd1, 0x68, 0x62, 0x22, 0x09, 0x89, 0x21,
|
||||
0x18, 0x94, 0x18, 0x31, 0xf1, 0x2f, 0x71, 0x89, 0x9a, 0x18, 0x83, 0x81, 0x04, 0x54, 0x02, 0xba,
|
||||
0xc0, 0x94, 0x00, 0x93, 0x0d, 0x68, 0xe7, 0x7e, 0x65, 0x8e, 0x76, 0x2b, 0x8c, 0xb1, 0xad, 0xdd,
|
||||
0xd6, 0xf6, 0xf5, 0xfd, 0xf4, 0xdc, 0x36, 0x65, 0xab, 0x1b, 0x5b, 0x63, 0x08, 0x2f, 0x39, 0xbd,
|
||||
0xbf, 0x9a, 0xf3, 0xb9, 0xe7, 0x9e, 0x73, 0xcf, 0xb9, 0x1c, 0xee, 0xd1, 0xc7, 0xe5, 0xf3, 0xa7,
|
||||
0x3d, 0x7b, 0x2c, 0x1e, 0x8e, 0xf6, 0x8a, 0x29, 0x23, 0xe5, 0xd7, 0x14, 0xb3, 0x72, 0x62, 0x42,
|
||||
0x5b, 0x91, 0x50, 0xf5, 0x3a, 0x4d, 0x37, 0xfc, 0x86, 0xce, 0x69, 0x4a, 0xd2, 0xdc, 0xfd, 0xeb,
|
||||
0xf7, 0x4f, 0x06, 0xf3, 0x02, 0xfd, 0xd1, 0x36, 0xbc, 0x35, 0x1a, 0x53, 0x7c, 0xa1, 0xeb, 0xf1,
|
||||
0x45, 0xc3, 0x37, 0xe3, 0x75, 0xd1, 0x09, 0x7d, 0x99, 0xaa, 0x6a, 0x55, 0xa2, 0x20, 0xfa, 0x64,
|
||||
0x59, 0x70, 0x88, 0x22, 0xcf, 0xdb, 0x45, 0x0e, 0xbc, 0x20, 0x40, 0x14, 0x2c, 0x98, 0x16, 0x07,
|
||||
0xd3, 0x34, 0xa1, 0xa4, 0x4c, 0x74, 0x76, 0x8d, 0x8d, 0x46, 0xff, 0x89, 0x54, 0xb6, 0xb4, 0x34,
|
||||
0x29, 0xf3, 0x82, 0x7e, 0xf8, 0xb6, 0xe7, 0xa1, 0x1b, 0x53, 0xda, 0x25, 0x95, 0xd3, 0x39, 0xff,
|
||||
0xa2, 0x02, 0x08, 0x3c, 0x07, 0x8e, 0x56, 0x74, 0xdd, 0x82, 0xaa, 0x99, 0xd0, 0x34, 0x23, 0xdd,
|
||||
0x66, 0xfa, 0xac, 0xcd, 0x1d, 0x4f, 0xc5, 0x55, 0xb4, 0x5d, 0x1e, 0xf9, 0xec, 0xc2, 0xf1, 0x6d,
|
||||
0xbb, 0xe7, 0x05, 0x7d, 0xb8, 0xb7, 0xed, 0xf7, 0x2d, 0x5b, 0x96, 0x3c, 0x76, 0xaa, 0x75, 0x10,
|
||||
0x0f, 0xaf, 0xf1, 0xe6, 0x2a, 0x54, 0xb3, 0xfd, 0xcc, 0x78, 0xba, 0x9f, 0xbb, 0x81, 0x5b, 0x63,
|
||||
0x8a, 0xd5, 0xde, 0x31, 0x5a, 0xd7, 0x7f, 0xe1, 0x85, 0x9e, 0x39, 0x41, 0x47, 0x9a, 0xfb, 0xca,
|
||||
0xaf, 0x4d, 0x26, 0x03, 0x64, 0x83, 0x57, 0x72, 0xf3, 0x64, 0x0d, 0xb9, 0x43, 0xe6, 0x6f, 0x2b,
|
||||
0x48, 0x2b, 0x54, 0xe7, 0xb6, 0x68, 0xe6, 0x06, 0x92, 0x8a, 0x81, 0xde, 0x81, 0x58, 0xb0, 0xe3,
|
||||
0x97, 0x6d, 0xab, 0x49, 0xad, 0x35, 0x0b, 0x74, 0xe0, 0xe0, 0xd5, 0x1f, 0x57, 0xd4, 0xb9, 0x9f,
|
||||
0xeb, 0xea, 0x8b, 0xa1, 0xa8, 0xc0, 0x8e, 0xcb, 0xbd, 0x23, 0x58, 0x53, 0x5f, 0x0a, 0x35, 0x7d,
|
||||
0x6c, 0xd3, 0x16, 0xa4, 0x08, 0x96, 0x4c, 0x1a, 0xe9, 0x96, 0xcd, 0xeb, 0x86, 0x05, 0x9d, 0xad,
|
||||
0xe9, 0xb4, 0x96, 0xca, 0xcc, 0xb3, 0x4d, 0x9e, 0xbd, 0x18, 0x69, 0x8a, 0x06, 0x9b, 0x0e, 0xcf,
|
||||
0x02, 0x7d, 0xf5, 0xcd, 0xdf, 0x01, 0x25, 0x69, 0xac, 0xf2, 0x79, 0x65, 0x5c, 0x1b, 0x8a, 0xa3,
|
||||
0xd0, 0x2d, 0x62, 0x70, 0x38, 0x8e, 0x92, 0x22, 0x29, 0xc7, 0x02, 0x25, 0x95, 0x39, 0xc6, 0xb9,
|
||||
0xac, 0xc9, 0xf6, 0x19, 0x3c, 0x9e, 0xd0, 0x13, 0x17, 0x03, 0xe3, 0x4b, 0x30, 0xd0, 0x14, 0xcd,
|
||||
0x01, 0x1d, 0xfe, 0xa9, 0xb7, 0x46, 0x04, 0x7a, 0xfa, 0x7b, 0x26, 0xf9, 0x9a, 0xe5, 0x85, 0xe8,
|
||||
0xea, 0x8d, 0xe1, 0x66, 0x34, 0x81, 0xc5, 0x3e, 0x17, 0x34, 0x7d, 0x5a, 0xe1, 0x9d, 0x8e, 0x2c,
|
||||
0xd7, 0x67, 0x26, 0x1c, 0x0e, 0x01, 0x5d, 0xdd, 0xd1, 0xef, 0x22, 0xed, 0x3b, 0x5f, 0x9e, 0x15,
|
||||
0x0c, 0x5f, 0x36, 0x07, 0x8f, 0x09, 0x16, 0xff, 0x6c, 0x78, 0x28, 0x81, 0x2a, 0xbf, 0x13, 0x43,
|
||||
0x91, 0x38, 0x06, 0x6e, 0x4c, 0xc1, 0xeb, 0x91, 0x33, 0x0a, 0x74, 0x03, 0x86, 0x61, 0x2d, 0x08,
|
||||
0xc9, 0xce, 0x79, 0x4b, 0x9d, 0x38, 0x7d, 0xf6, 0xfa, 0x06, 0x0c, 0xbd, 0x7a, 0x2e, 0x07, 0xf4,
|
||||
0xf9, 0x89, 0x5e, 0x49, 0x0f, 0x27, 0xc7, 0xa7, 0x62, 0xba, 0x83, 0x59, 0x21, 0xb9, 0x04, 0x84,
|
||||
0x22, 0x93, 0xa0, 0x28, 0x87, 0x61, 0x52, 0x98, 0xd3, 0x8f, 0x45, 0xee, 0xcd, 0x07, 0xc2, 0xc6,
|
||||
0x82, 0xc0, 0x93, 0x56, 0x33, 0x1c, 0x3c, 0xdd, 0x59, 0x4d, 0xd7, 0x5d, 0xcf, 0xb9, 0xb0, 0x7b,
|
||||
0x0f, 0xfe, 0xf5, 0xae, 0x2c, 0x89, 0xfb, 0x23, 0x83, 0x09, 0x94, 0xf9, 0x64, 0x8a, 0x22, 0x1d,
|
||||
0x57, 0xba, 0xc7, 0xe0, 0x76, 0xd9, 0x08, 0x66, 0x11, 0x94, 0xcb, 0x0b, 0x92, 0x8d, 0xd2, 0xfb,
|
||||
0xfc, 0x85, 0x08, 0x76, 0x8f, 0x7e, 0x30, 0x1e, 0x6c, 0xda, 0xf7, 0xdf, 0x14, 0x64, 0x7f, 0xff,
|
||||
0xe3, 0xf3, 0x61, 0xc9, 0x2e, 0x96, 0xd3, 0xfe, 0xd3, 0x91, 0x34, 0x3c, 0x12, 0xc7, 0x64, 0x5c,
|
||||
0xa7, 0x2c, 0x00, 0xd8, 0x44, 0x7e, 0x61, 0x88, 0x3a, 0x7d, 0xb7, 0xd8, 0x51, 0xd7, 0xd5, 0x14,
|
||||
0xeb, 0xad, 0x6d, 0x43, 0x4b, 0x31, 0xf8, 0xc6, 0x50, 0x16, 0x64, 0x23, 0x71, 0x35, 0xbe, 0xf8,
|
||||
0xe9, 0xc6, 0x65, 0xb5, 0xeb, 0x8f, 0xda, 0x6d, 0x3c, 0xc7, 0xc2, 0x95, 0x49, 0x77, 0xff, 0x04,
|
||||
0x68, 0x0c, 0x59, 0xe2, 0xf3, 0x86, 0x64, 0xd7, 0x99, 0x8f, 0x29, 0x75, 0x9d, 0xea, 0x6d, 0x7d,
|
||||
0xfe, 0xf1, 0x2c, 0x48, 0x26, 0x29, 0x64, 0xb0, 0x57, 0xde, 0x3e, 0x79, 0xbc, 0xc8, 0xed, 0x5a,
|
||||
0xa9, 0xeb, 0x99, 0xbb, 0x13, 0x9b, 0xd4, 0x30, 0x16, 0x55, 0xe8, 0x12, 0x8b, 0xe9, 0x28, 0x9c,
|
||||
0xef, 0xb8, 0xe6, 0xba, 0xd4, 0x9b, 0x1e, 0x5d, 0x84, 0xf3, 0x97, 0xae, 0x37, 0x72, 0x33, 0x82,
|
||||
0xa2, 0x8c, 0xa4, 0xd8, 0x53, 0x5e, 0xe7, 0xdd, 0xba, 0xfd, 0x8b, 0x33, 0xb2, 0x2c, 0x0a, 0x99,
|
||||
0x8b, 0x68, 0x22, 0x1c, 0x99, 0x42, 0x49, 0xb1, 0x3d, 0x9d, 0x40, 0xf3, 0xb1, 0x24, 0x0b, 0x61,
|
||||
0x1f, 0xdb, 0xe0, 0xea, 0xda, 0xe2, 0xb1, 0x99, 0x3e, 0x12, 0x48, 0xaa, 0x19, 0xac, 0x61, 0xfb,
|
||||
0xd7, 0x1f, 0x15, 0x7b, 0x2a, 0x9f, 0xb6, 0x28, 0xd4, 0x18, 0x28, 0x41, 0x81, 0x31, 0x11, 0x53,
|
||||
0x21, 0xc9, 0x42, 0xda, 0xca, 0x7c, 0x20, 0xcc, 0xa7, 0xa5, 0x25, 0x12, 0xca, 0x4a, 0x1d, 0x58,
|
||||
0xba, 0xa4, 0x70, 0x56, 0x3d, 0x92, 0x48, 0x1e, 0x64, 0xb0, 0xcd, 0x3b, 0x8e, 0x1d, 0x93, 0x1d,
|
||||
0x36, 0x39, 0x9d, 0x0d, 0x48, 0xf9, 0xc8, 0xa8, 0x02, 0x2f, 0x65, 0x8f, 0x18, 0x01, 0x67, 0x1e,
|
||||
0x97, 0x46, 0x4e, 0x97, 0xed, 0x02, 0x0a, 0x9c, 0x22, 0x9c, 0x0e, 0x91, 0xc2, 0x88, 0x23, 0xbf,
|
||||
0x58, 0x70, 0x4a, 0x06, 0xfc, 0xe5, 0x6a, 0x74, 0xdd, 0xfd, 0xe3, 0x72, 0x91, 0x4b, 0x39, 0x32,
|
||||
0x57, 0xe1, 0x63, 0xbe, 0x5a, 0x5f, 0xbd, 0xee, 0xad, 0xa7, 0x2a, 0xaa, 0xb6, 0xbc, 0xc3, 0xc2,
|
||||
0x3a, 0x1b, 0x18, 0xe3, 0xd1, 0x54, 0x3a, 0x6c, 0xd9, 0xce, 0x59, 0x2d, 0x32, 0x0c, 0x03, 0x92,
|
||||
0x4d, 0x85, 0xd7, 0x9d, 0xc0, 0xaa, 0x9a, 0x24, 0x36, 0xae, 0x05, 0xea, 0x97, 0x4b, 0x94, 0x33,
|
||||
0x1d, 0x60, 0x75, 0x46, 0x57, 0x86, 0xa1, 0xc6, 0x43, 0xba, 0xd3, 0x5a, 0x5c, 0x76, 0xa7, 0x0a,
|
||||
0xeb, 0x25, 0x69, 0x58, 0xb9, 0xb9, 0xf9, 0x90, 0xd3, 0x51, 0xe8, 0x61, 0xc7, 0xc1, 0x40, 0x4f,
|
||||
0xac, 0x07, 0x7c, 0xf2, 0x79, 0xd4, 0x54, 0x6a, 0x58, 0x59, 0xad, 0xc3, 0x53, 0x6c, 0xa3, 0x42,
|
||||
0xe8, 0x48, 0x0b, 0x27, 0xc8, 0xb7, 0x5b, 0x2a, 0x8f, 0x94, 0x70, 0xa3, 0xd0, 0x12, 0x61, 0x74,
|
||||
0x74, 0x19, 0xea, 0x33, 0x2f, 0x1d, 0x72, 0xcc, 0x57, 0xca, 0xab, 0x0a, 0x3c, 0x6b, 0x77, 0x95,
|
||||
0xd7, 0xbf, 0xb7, 0x47, 0xa4, 0x4a, 0x58, 0x5e, 0x2a, 0x60, 0xdb, 0x86, 0x20, 0x49, 0xe0, 0xb6,
|
||||
0xd2, 0x99, 0x00, 0x66, 0x81, 0x65, 0xa4, 0x60, 0x1a, 0xc9, 0xb4, 0xa4, 0x34, 0x89, 0x72, 0xa6,
|
||||
0x13, 0x6f, 0x7e, 0xe2, 0xbf, 0xd5, 0xfe, 0x5b, 0x59, 0xc5, 0x42, 0x6f, 0x86, 0xd5, 0xde, 0x55,
|
||||
0x07, 0x8e, 0xda, 0xe5, 0x8a, 0x65, 0x8f, 0x3c, 0xa0, 0x60, 0xdf, 0xae, 0xa3, 0x90, 0x24, 0x09,
|
||||
0x1c, 0xcf, 0x20, 0x04, 0x10, 0x0b, 0x30, 0xa1, 0xb8, 0xa0, 0x28, 0x3c, 0x22, 0xb7, 0x04, 0x2a,
|
||||
0x31, 0x32, 0xce, 0x5d, 0x95, 0x53, 0x2d, 0x17, 0xe5, 0xc0, 0x64, 0xd2, 0xba, 0x42, 0xe9, 0xa4,
|
||||
0x93, 0x52, 0xd1, 0x05, 0x84, 0x5f, 0x3f, 0xb3, 0xf0, 0xe3, 0x44, 0x2c, 0x6d, 0x70, 0xd7, 0xec,
|
||||
0x3f, 0xd9, 0xb8, 0x69, 0x84, 0xdf, 0xb1, 0x31, 0x88, 0xbe, 0x48, 0x09, 0xba, 0x42, 0x1e, 0x0c,
|
||||
0x8e, 0x38, 0xad, 0x40, 0x1f, 0x37, 0x1c, 0xba, 0x81, 0x0e, 0xf0, 0xee, 0xb3, 0xa4, 0x94, 0x4c,
|
||||
0x15, 0x03, 0x08, 0x85, 0x06, 0x28, 0xbf, 0x99, 0xff, 0xeb, 0x15, 0x24, 0x57, 0xbc, 0xb6, 0xcf,
|
||||
0x92, 0x6a, 0x77, 0xa6, 0xe2, 0xe1, 0x0e, 0x58, 0xea, 0x9f, 0x90, 0x7c, 0x3f, 0x23, 0x62, 0x5e,
|
||||
0xcd, 0x26, 0xcc, 0xbb, 0xf6, 0xdc, 0xba, 0x67, 0xef, 0xba, 0xbb, 0xf1, 0xfd, 0x0b, 0x51, 0x82,
|
||||
0xd2, 0x46, 0x06, 0xab, 0x0f, 0xee, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42,
|
||||
0x60, 0x82,
|
||||
};
|
||||
|
||||
const BITMAP_OPAQUE book_xpm[1] = {{ png, sizeof( png ), "book_xpm" }};
|
||||
|
||||
//EOF
|
||||
@@ -1,87 +0,0 @@
|
||||
|
||||
/* Do not modify this file, it was automatically generated by the
|
||||
* PNG2cpp CMake script, using a *.png file as input.
|
||||
*/
|
||||
|
||||
#include <bitmaps_png/bitmaps_list.h>
|
||||
|
||||
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, 0x58, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xb5, 0x96, 0x6b, 0x48, 0xa4,
|
||||
0x55, 0x18, 0xc7, 0x4f, 0x52, 0xb1, 0x49, 0xd4, 0xba, 0x50, 0x51, 0x81, 0x0b, 0xed, 0x87, 0xed,
|
||||
0x02, 0xa2, 0x89, 0x8a, 0xe6, 0xad, 0x56, 0x51, 0x51, 0xd1, 0xe6, 0x83, 0x09, 0x86, 0xa0, 0x48,
|
||||
0xa9, 0x69, 0x48, 0x5e, 0xc2, 0xdb, 0xec, 0x5c, 0xb6, 0x12, 0x9c, 0x34, 0x42, 0x74, 0x57, 0x45,
|
||||
0x68, 0x26, 0xbf, 0x2c, 0x53, 0xe8, 0x8a, 0x69, 0xea, 0x07, 0xef, 0x97, 0x41, 0x4a, 0x44, 0x2b,
|
||||
0x16, 0x46, 0x28, 0x5d, 0xc6, 0x51, 0xca, 0x0f, 0x66, 0x9a, 0x33, 0xce, 0xd3, 0xff, 0x39, 0x3b,
|
||||
0xef, 0xf0, 0x2a, 0xe6, 0x8e, 0xd1, 0x1e, 0xf8, 0x31, 0x73, 0xce, 0x9c, 0xf7, 0xf9, 0x9f, 0xf3,
|
||||
0x3c, 0xff, 0x73, 0xde, 0x11, 0xe2, 0xd4, 0xb6, 0xf8, 0xb4, 0x10, 0xf3, 0xcb, 0x42, 0x2c, 0x7c,
|
||||
0x7e, 0x6c, 0xd8, 0x28, 0xde, 0x12, 0x06, 0xf1, 0xde, 0xb9, 0xb9, 0x21, 0xde, 0x3e, 0x5d, 0x47,
|
||||
0xcc, 0x87, 0x03, 0x02, 0xbf, 0xf8, 0x86, 0x0c, 0xe2, 0x5d, 0x08, 0xdd, 0xc3, 0x43, 0xb7, 0xce,
|
||||
0x8d, 0x41, 0x34, 0xfb, 0x27, 0x74, 0x43, 0xbc, 0x23, 0x45, 0x0c, 0xe2, 0x35, 0xf1, 0xff, 0x36,
|
||||
0x95, 0xd0, 0xc3, 0x13, 0x51, 0x09, 0x5d, 0x18, 0xbb, 0xf7, 0x10, 0x45, 0x54, 0x42, 0x97, 0xac,
|
||||
0x2e, 0x08, 0xbd, 0xe2, 0x1b, 0xd6, 0x89, 0x40, 0xf0, 0xd2, 0x7f, 0xe0, 0x85, 0xb3, 0x85, 0x02,
|
||||
0xa6, 0xec, 0xbe, 0xa1, 0xcf, 0x44, 0x10, 0x44, 0x17, 0xc1, 0xaf, 0x48, 0xa7, 0xfd, 0x5c, 0x18,
|
||||
0xc5, 0x5d, 0x25, 0x4c, 0x1d, 0x78, 0x11, 0x58, 0xc0, 0x6d, 0x21, 0xcc, 0xb1, 0xc7, 0xcc, 0xa0,
|
||||
0x13, 0x17, 0x31, 0xd9, 0x86, 0x14, 0xfa, 0xec, 0x4e, 0x44, 0x17, 0xc0, 0x07, 0x40, 0x07, 0xc2,
|
||||
0xfc, 0xc9, 0x13, 0x56, 0x2f, 0x66, 0x41, 0x21, 0xb8, 0x03, 0x3a, 0x84, 0x08, 0xd3, 0xfb, 0x84,
|
||||
0x4e, 0x11, 0xf1, 0x0a, 0xfd, 0xb4, 0xb2, 0xb2, 0x42, 0x63, 0x63, 0x63, 0x74, 0x78, 0x78, 0xe8,
|
||||
0x41, 0xff, 0xe5, 0x07, 0x09, 0x25, 0x82, 0x56, 0x60, 0x05, 0x1a, 0x50, 0x21, 0xc4, 0xab, 0xcd,
|
||||
0x52, 0xe8, 0x91, 0xd9, 0xbb, 0x8a, 0x08, 0x02, 0xbd, 0x0f, 0x4c, 0xe0, 0x71, 0xaf, 0xd0, 0x51,
|
||||
0x6c, 0x6c, 0x2c, 0x65, 0x67, 0x67, 0xd3, 0xd0, 0xd0, 0x10, 0xba, 0xd4, 0xec, 0x1d, 0xd7, 0x80,
|
||||
0x9b, 0xe0, 0xe2, 0x49, 0xa1, 0x40, 0x2e, 0x0a, 0xb0, 0x01, 0x2e, 0xbc, 0x43, 0x88, 0xaa, 0x4c,
|
||||
0x29, 0x14, 0xf4, 0xed, 0x3e, 0x1f, 0x36, 0x3c, 0x74, 0x6b, 0x6b, 0x6b, 0x8b, 0xe6, 0xe6, 0xe6,
|
||||
0x38, 0xe0, 0x9f, 0xe0, 0x9b, 0xed, 0xed, 0x6d, 0xd2, 0x68, 0x34, 0x64, 0x36, 0x9b, 0x49, 0xab,
|
||||
0xd5, 0xf2, 0xf8, 0x26, 0x98, 0xdf, 0xd9, 0xd9, 0xa1, 0xc9, 0xc9, 0x49, 0xee, 0xff, 0x0e, 0x2e,
|
||||
0xa9, 0x85, 0x1e, 0x05, 0x01, 0xde, 0xef, 0x8f, 0x81, 0x27, 0x7c, 0x66, 0x08, 0xfc, 0xde, 0x89,
|
||||
0xc9, 0x97, 0xf7, 0xf7, 0xf7, 0x29, 0x2e, 0x2e, 0x8e, 0x72, 0x73, 0x73, 0xa9, 0xb8, 0xb8, 0x98,
|
||||
0x26, 0x26, 0x26, 0x28, 0x2b, 0x2b, 0x8b, 0x0c, 0x06, 0x03, 0x4d, 0x4d, 0x4d, 0x51, 0x68, 0x68,
|
||||
0x28, 0x75, 0x74, 0x74, 0x90, 0xd5, 0x6a, 0xa5, 0xf8, 0xf8, 0x78, 0x4a, 0x4d, 0x4d, 0xa5, 0xc1,
|
||||
0xc1, 0x41, 0x16, 0x1b, 0x50, 0x0b, 0x45, 0x83, 0x3f, 0x78, 0xd7, 0xc0, 0x03, 0x56, 0x84, 0xd0,
|
||||
0xa7, 0x28, 0x35, 0xc2, 0xe4, 0x27, 0x3d, 0x1e, 0x8f, 0x3b, 0x3d, 0x3d, 0x5d, 0x3e, 0xdc, 0xd5,
|
||||
0xd5, 0x45, 0x45, 0x45, 0x45, 0xd4, 0xd7, 0xd7, 0x27, 0x45, 0x98, 0xf1, 0xf1, 0x71, 0xd2, 0xeb,
|
||||
0xf5, 0x54, 0x51, 0x51, 0x21, 0x77, 0xcd, 0x8b, 0x58, 0x5e, 0x5e, 0x66, 0x21, 0xd3, 0x59, 0x35,
|
||||
0xd3, 0x0a, 0x11, 0xf2, 0x89, 0xda, 0x75, 0x78, 0xe0, 0xd3, 0xb5, 0xb5, 0x35, 0xb9, 0xd2, 0xd9,
|
||||
0xd9, 0x59, 0x19, 0x7c, 0x66, 0x66, 0x46, 0x7e, 0x57, 0x98, 0x9e, 0x9e, 0x96, 0x63, 0x2d, 0x2d,
|
||||
0x2d, 0xd4, 0xd0, 0xd0, 0xc0, 0x22, 0xdb, 0x27, 0x03, 0x73, 0xea, 0x82, 0xbc, 0x3c, 0x0f, 0x6e,
|
||||
0xc2, 0x88, 0x5a, 0xd5, 0x8e, 0xae, 0x01, 0x8b, 0xd3, 0xe9, 0x94, 0x42, 0x2c, 0xc2, 0x81, 0xb9,
|
||||
0x36, 0x19, 0x19, 0x19, 0x72, 0xac, 0xba, 0xba, 0x5a, 0x8a, 0xb0, 0x98, 0xc9, 0x64, 0xa2, 0xa6,
|
||||
0xa6, 0x26, 0x16, 0x72, 0x80, 0x62, 0xb5, 0x29, 0xa2, 0xc0, 0x96, 0x37, 0x7d, 0xbf, 0x81, 0xef,
|
||||
0x84, 0xe8, 0x8e, 0x67, 0xa1, 0x2b, 0x57, 0x7e, 0x3c, 0x74, 0x38, 0x1c, 0xd4, 0xdf, 0xdf, 0x4f,
|
||||
0x39, 0x39, 0x39, 0x32, 0x08, 0x07, 0xe4, 0xb4, 0xa5, 0xa4, 0xa4, 0x10, 0x17, 0x1e, 0xcd, 0xd3,
|
||||
0xd6, 0xd6, 0x46, 0x65, 0x65, 0x65, 0x72, 0x01, 0x6c, 0x84, 0xa8, 0xa8, 0x28, 0xea, 0xec, 0xec,
|
||||
0xa4, 0xa5, 0xa5, 0x25, 0x3a, 0x3a, 0x3a, 0x62, 0xeb, 0xbf, 0x79, 0x72, 0x77, 0xcf, 0x80, 0x60,
|
||||
0xc5, 0x0c, 0x57, 0xaf, 0x2e, 0x51, 0x48, 0x48, 0x08, 0xe9, 0x74, 0x3a, 0xea, 0xed, 0xed, 0x95,
|
||||
0x22, 0x4c, 0x55, 0x55, 0x95, 0xac, 0x0b, 0xda, 0x17, 0xe0, 0x59, 0xe0, 0x4e, 0x4b, 0x4b, 0x93,
|
||||
0xf5, 0xe1, 0x1d, 0xb3, 0xdd, 0x39, 0x85, 0x5c, 0x2b, 0x8b, 0xc5, 0xc2, 0xf3, 0xbe, 0xe2, 0xe0,
|
||||
0x4f, 0x01, 0xbe, 0x22, 0x86, 0x01, 0xd7, 0xc4, 0x29, 0x44, 0xa9, 0x46, 0x11, 0x8a, 0x88, 0x88,
|
||||
0xa0, 0xfc, 0xfc, 0x7c, 0x32, 0x1a, 0x8d, 0x32, 0x38, 0x0b, 0xd5, 0xd5, 0xd5, 0xd1, 0xc0, 0xc0,
|
||||
0x00, 0x07, 0x18, 0x01, 0x59, 0xbc, 0xea, 0xe4, 0xe4, 0x64, 0x9f, 0x50, 0x4f, 0x4f, 0x0f, 0x95,
|
||||
0x97, 0x97, 0x53, 0x4c, 0x4c, 0x8c, 0xcc, 0x06, 0x5a, 0x17, 0x0b, 0xc5, 0x81, 0x2f, 0xef, 0x9b,
|
||||
0x00, 0x6f, 0x43, 0x1c, 0x22, 0x64, 0xb3, 0x96, 0x85, 0x82, 0x83, 0x7f, 0xd8, 0xe3, 0x59, 0x76,
|
||||
0xbb, 0x9d, 0x6a, 0x6b, 0x6b, 0xa5, 0xb3, 0xb8, 0x0e, 0xa3, 0xa3, 0xa3, 0xd2, 0xee, 0x9c, 0xaa,
|
||||
0xf5, 0xf5, 0x75, 0x69, 0x79, 0x5e, 0x08, 0xf7, 0x79, 0x31, 0xca, 0x6f, 0x7c, 0x2c, 0xd0, 0x76,
|
||||
0x95, 0x5b, 0xe3, 0x9a, 0x57, 0x48, 0x07, 0x3e, 0x04, 0xd7, 0x85, 0x88, 0x68, 0x54, 0x99, 0x81,
|
||||
0xef, 0xb4, 0xd2, 0xdd, 0xdd, 0x5d, 0x79, 0x46, 0x14, 0xc7, 0x0d, 0x0f, 0x0f, 0x53, 0x49, 0x49,
|
||||
0x09, 0xe5, 0xe5, 0xe5, 0x51, 0x7b, 0x7b, 0xbb, 0xcf, 0x79, 0x8d, 0x8d, 0x8d, 0xb2, 0x3e, 0x7c,
|
||||
0x45, 0xf1, 0x19, 0x54, 0xd7, 0xe5, 0x0d, 0x60, 0x3f, 0x4e, 0xc2, 0x47, 0x27, 0xec, 0x7d, 0x7b,
|
||||
0x61, 0x61, 0x41, 0x1a, 0x42, 0x49, 0x8f, 0xda, 0xde, 0x8a, 0xe3, 0xf8, 0x93, 0xd3, 0x56, 0x50,
|
||||
0x50, 0xc0, 0x42, 0x7f, 0x81, 0x40, 0xbf, 0xdf, 0xb0, 0x5c, 0x6c, 0x97, 0xcb, 0xe5, 0x49, 0x4c,
|
||||
0x4c, 0x94, 0x37, 0x42, 0x7d, 0x7d, 0x3d, 0x25, 0x25, 0x25, 0x51, 0x6b, 0x6b, 0xab, 0x74, 0x18,
|
||||
0x0b, 0xf0, 0x8d, 0xc0, 0xc1, 0xf9, 0xde, 0x1b, 0x19, 0x19, 0xa1, 0xc2, 0xc2, 0x42, 0x79, 0xd9,
|
||||
0xa2, 0x7d, 0x7d, 0x6e, 0x21, 0x76, 0x50, 0x42, 0x42, 0x02, 0xb1, 0x95, 0xf9, 0xde, 0xab, 0xa9,
|
||||
0xa9, 0xa1, 0xca, 0xca, 0x4a, 0x59, 0x93, 0xf0, 0xf0, 0x70, 0xb9, 0xb3, 0xd5, 0xd5, 0x55, 0x62,
|
||||
0x53, 0x44, 0x47, 0x47, 0x93, 0xcd, 0x66, 0x63, 0x21, 0xb3, 0xff, 0xff, 0x19, 0xee, 0xa7, 0xae,
|
||||
0xf4, 0xe0, 0xe0, 0xc0, 0xb3, 0xb9, 0xb9, 0x29, 0xbd, 0x01, 0x2a, 0xb9, 0x66, 0x99, 0x99, 0x99,
|
||||
0xd4, 0xdd, 0xdd, 0xad, 0x1c, 0xd0, 0x55, 0xbe, 0xb5, 0xdd, 0x6e, 0xb7, 0x67, 0x63, 0x63, 0x43,
|
||||
0xe9, 0x07, 0x3c, 0x40, 0x68, 0xee, 0x75, 0xaf, 0xd0, 0xcf, 0xaa, 0xf7, 0x4f, 0x18, 0xc8, 0x56,
|
||||
0xf5, 0x5d, 0xec, 0xae, 0xc8, 0xc8, 0x48, 0x59, 0x33, 0xb4, 0xeb, 0xde, 0xf1, 0xcb, 0xa0, 0xc0,
|
||||
0xcf, 0xff, 0x0c, 0x8b, 0x28, 0xe2, 0xfc, 0x20, 0x04, 0x3f, 0xfe, 0xb7, 0x19, 0x08, 0x36, 0xba,
|
||||
0xb7, 0xb7, 0x47, 0x7c, 0x73, 0xa0, 0xfd, 0x0d, 0x9e, 0x3b, 0x2b, 0xe2, 0x3f, 0x64, 0x1d, 0xf5,
|
||||
0x90, 0x43, 0x37, 0x56, 0xad, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60,
|
||||
0x82,
|
||||
};
|
||||
|
||||
const BITMAP_OPAQUE bus_definition_tool_xpm[1] = {{ png, sizeof( png ), "bus_definition_tool_xpm" }};
|
||||
|
||||
//EOF
|
||||
@@ -1,45 +0,0 @@
|
||||
|
||||
/* Do not modify this file, it was automatically generated by the
|
||||
* PNG2cpp CMake script, using a *.png file as input.
|
||||
*/
|
||||
|
||||
#include <bitmaps_png/bitmaps_list.h>
|
||||
|
||||
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, 0x04, 0x00, 0x00, 0x00, 0x03, 0x43, 0x84,
|
||||
0x45, 0x00, 0x00, 0x01, 0xc7, 0x49, 0x44, 0x41, 0x54, 0x38, 0xcb, 0x95, 0x94, 0xbb, 0x4f, 0xc2,
|
||||
0x50, 0x14, 0xc6, 0xbf, 0x2a, 0x21, 0x91, 0xd5, 0x8d, 0x38, 0x34, 0xba, 0xa1, 0xb8, 0xd0, 0xc1,
|
||||
0x41, 0x01, 0x11, 0x16, 0xf1, 0x1f, 0x70, 0x70, 0xd1, 0x89, 0x38, 0xaa, 0x69, 0xe2, 0xa4, 0x4e,
|
||||
0x1a, 0x07, 0x56, 0xcb, 0x66, 0x34, 0xf2, 0x1a, 0x1c, 0xd4, 0xc1, 0x18, 0x12, 0x17, 0x9c, 0x40,
|
||||
0x37, 0x95, 0x89, 0xc6, 0xc4, 0x26, 0xb2, 0xc0, 0x40, 0x4c, 0x0c, 0x31, 0xf5, 0xf6, 0x45, 0xef,
|
||||
0x6d, 0x0b, 0xea, 0x39, 0xcb, 0xbd, 0x3d, 0xfd, 0xf5, 0x9e, 0x47, 0xbf, 0x0b, 0xfc, 0xd3, 0x4e,
|
||||
0x42, 0xf4, 0x6e, 0x04, 0xdc, 0xd0, 0xb7, 0xf5, 0xb8, 0x94, 0x95, 0x54, 0x29, 0xac, 0xef, 0x83,
|
||||
0x81, 0x48, 0x29, 0x29, 0x27, 0xe5, 0x48, 0x31, 0x18, 0x20, 0x5b, 0x1e, 0xeb, 0xc8, 0xe1, 0x8a,
|
||||
0x78, 0x8e, 0xac, 0x78, 0x3b, 0x2e, 0x36, 0x08, 0x92, 0x35, 0x3f, 0x12, 0x29, 0x96, 0x7b, 0x8a,
|
||||
0xaa, 0xa8, 0xe5, 0xde, 0x74, 0x0d, 0x55, 0xb4, 0x70, 0x86, 0x0c, 0x56, 0x88, 0x67, 0xc8, 0xaa,
|
||||
0x85, 0x6a, 0xa8, 0xae, 0xc5, 0x2b, 0xaa, 0xa4, 0x8a, 0xaf, 0xd6, 0xc1, 0xdc, 0x92, 0xac, 0x21,
|
||||
0x9a, 0x2f, 0x74, 0x91, 0x86, 0x8f, 0x49, 0xcb, 0x87, 0x74, 0xb4, 0x6b, 0x20, 0x77, 0x6a, 0xa2,
|
||||
0x69, 0x15, 0xc1, 0x25, 0xfa, 0xd0, 0xe2, 0x9b, 0x47, 0x65, 0x24, 0xae, 0x21, 0x47, 0x24, 0x6e,
|
||||
0x43, 0x10, 0x0a, 0x25, 0x3d, 0xbd, 0xc2, 0xf7, 0xd4, 0x17, 0x44, 0x8c, 0x3a, 0xa9, 0x9d, 0x67,
|
||||
0x0d, 0xd9, 0x52, 0x4b, 0x3d, 0xe1, 0xa2, 0xff, 0x30, 0x18, 0x08, 0xd5, 0x63, 0xdd, 0x54, 0x53,
|
||||
0xc8, 0xfb, 0x67, 0x70, 0x8b, 0x27, 0xcc, 0xd1, 0x48, 0xee, 0x90, 0xd4, 0xd2, 0xe0, 0xdb, 0x7c,
|
||||
0x5b, 0xc8, 0x4f, 0x8c, 0xd1, 0x91, 0x07, 0x2c, 0x9b, 0x07, 0x73, 0x58, 0x83, 0x82, 0x63, 0xf8,
|
||||
0x6d, 0x44, 0xef, 0xd8, 0x1e, 0x71, 0xc6, 0x78, 0x7c, 0x30, 0xe5, 0x8f, 0xe3, 0x12, 0x35, 0x4c,
|
||||
0x52, 0x88, 0x07, 0xb4, 0x81, 0x73, 0x57, 0xf9, 0x9b, 0x78, 0x3f, 0x38, 0xa5, 0xe6, 0xe2, 0x82,
|
||||
0x24, 0x32, 0x11, 0x97, 0xed, 0x96, 0x29, 0xc4, 0x03, 0xba, 0x21, 0xd3, 0x71, 0x18, 0x95, 0xd8,
|
||||
0x00, 0xe8, 0x9a, 0x4c, 0xdf, 0x85, 0xac, 0x7e, 0x22, 0x3e, 0x0c, 0x72, 0xa4, 0x67, 0x9e, 0x32,
|
||||
0x4f, 0xda, 0x93, 0x18, 0x0c, 0x31, 0x8d, 0xa0, 0x12, 0xa3, 0xb1, 0x61, 0x2d, 0x77, 0xd4, 0x62,
|
||||
0x63, 0x2e, 0xa8, 0x3f, 0x5c, 0x57, 0xf9, 0x36, 0xb6, 0xef, 0x80, 0xc8, 0x6f, 0xf4, 0x18, 0xeb,
|
||||
0x26, 0xe5, 0xed, 0x17, 0x17, 0xa2, 0x63, 0x5c, 0x2b, 0x7c, 0x1f, 0xef, 0xc4, 0x3b, 0xa6, 0xde,
|
||||
0x68, 0x3d, 0xb1, 0x7a, 0xa1, 0x6d, 0xb6, 0x52, 0x50, 0x0d, 0xbd, 0x09, 0x79, 0x46, 0x4f, 0x86,
|
||||
0x5e, 0xa2, 0x6d, 0x3d, 0x77, 0x87, 0xc7, 0xda, 0x96, 0x74, 0x18, 0x3d, 0x19, 0x88, 0x32, 0x00,
|
||||
0x8a, 0x7a, 0x40, 0xba, 0x5e, 0x34, 0x84, 0xd1, 0x0b, 0x65, 0x96, 0xde, 0xa8, 0xb8, 0x76, 0xc3,
|
||||
0x88, 0x8d, 0x54, 0x53, 0xd3, 0x13, 0xab, 0x17, 0xbb, 0x51, 0x42, 0x81, 0x89, 0x4b, 0x61, 0xb3,
|
||||
0x63, 0xdc, 0x2f, 0x57, 0x18, 0x1b, 0x67, 0xaf, 0xbf, 0xbf, 0xd8, 0x0f, 0x3c, 0x1e, 0x28, 0x8f,
|
||||
0xaa, 0xd6, 0xe8, 0xf2, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
};
|
||||
|
||||
const BITMAP_OPAQUE curved_ratsnest_xpm[1] = {{ png, sizeof( png ), "curved_ratsnest_xpm" }};
|
||||
|
||||
//EOF
|
||||
@@ -0,0 +1,40 @@
|
||||
|
||||
/* Do not modify this file, it was automatically generated by the
|
||||
* PNG2cpp CMake script, using a *.png file as input.
|
||||
*/
|
||||
|
||||
#include <bitmaps_png/bitmaps_list.h>
|
||||
|
||||
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, 0x75, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xc5, 0x96, 0xbf, 0x4b, 0xc3,
|
||||
0x40, 0x14, 0x80, 0x2f, 0xbd, 0xa4, 0x22, 0x38, 0x14, 0x1d, 0x3a, 0x28, 0x8a, 0x20, 0x3a, 0x3b,
|
||||
0xf9, 0x0b, 0xc5, 0x7f, 0xc0, 0xa9, 0x28, 0xb8, 0x08, 0x0e, 0xfe, 0xc0, 0x45, 0x14, 0x6c, 0xdd,
|
||||
0x04, 0x27, 0x1d, 0x1c, 0x1c, 0x9c, 0x1d, 0x5d, 0x04, 0x87, 0x0a, 0x8e, 0x2e, 0x96, 0x82, 0x93,
|
||||
0x93, 0x8b, 0x60, 0x0b, 0x82, 0x9b, 0x83, 0x83, 0x5a, 0x29, 0xf6, 0xfc, 0x72, 0x3e, 0xdb, 0x0c,
|
||||
0x1d, 0xef, 0x34, 0xf0, 0x91, 0xdc, 0x05, 0xde, 0x97, 0x97, 0x77, 0xf7, 0x12, 0xa5, 0xfe, 0xeb,
|
||||
0x30, 0x4a, 0xf5, 0x43, 0x01, 0xf2, 0xb0, 0x2a, 0x2c, 0xc3, 0xbc, 0xd0, 0xeb, 0x4a, 0xd4, 0x05,
|
||||
0x1f, 0x60, 0x4c, 0x10, 0x18, 0x7b, 0x6e, 0x71, 0x0d, 0x69, 0x97, 0x59, 0x5d, 0x5a, 0x89, 0xd6,
|
||||
0xc6, 0xa4, 0x52, 0xbf, 0x92, 0x7b, 0xc8, 0xb8, 0x7e, 0x7d, 0x2b, 0x36, 0x78, 0x2c, 0x89, 0x65,
|
||||
0x5a, 0x37, 0xb8, 0xde, 0xf0, 0x51, 0xa7, 0x2c, 0x7c, 0x89, 0xac, 0xde, 0x94, 0x85, 0xe1, 0x01,
|
||||
0x73, 0xda, 0xb5, 0xac, 0x04, 0x0d, 0x58, 0x44, 0xb2, 0x04, 0xef, 0x22, 0x8c, 0xeb, 0x94, 0x75,
|
||||
0x29, 0x8a, 0x57, 0x5d, 0xbe, 0x39, 0x8e, 0xa2, 0x51, 0x24, 0x8f, 0x22, 0x7b, 0x62, 0x3c, 0xee,
|
||||
0x6c, 0xf5, 0xb5, 0x99, 0xeb, 0x41, 0x72, 0x25, 0xb2, 0x1a, 0xaf, 0x75, 0xd3, 0xe7, 0x3e, 0x4b,
|
||||
0x51, 0xab, 0x7d, 0x5b, 0xb3, 0x1f, 0xe1, 0x29, 0x73, 0x9d, 0xee, 0x45, 0x61, 0x38, 0x4b, 0xf0,
|
||||
0x62, 0x42, 0xf4, 0x49, 0x66, 0x5b, 0xee, 0xb2, 0xd0, 0x7a, 0x0e, 0xca, 0x12, 0x3c, 0xe6, 0x15,
|
||||
0xe9, 0x31, 0xf7, 0xfa, 0xdc, 0x74, 0x09, 0xea, 0x40, 0xd0, 0x6a, 0x42, 0x50, 0x61, 0xae, 0xe0,
|
||||
0x6c, 0xf3, 0x12, 0xec, 0xc4, 0x3e, 0x75, 0x4b, 0x70, 0x0b, 0x0b, 0x4e, 0xf7, 0x11, 0xc1, 0x86,
|
||||
0xa1, 0x2e, 0xfd, 0xee, 0x01, 0x41, 0xce, 0xd7, 0xca, 0x1a, 0x80, 0xf3, 0x44, 0x33, 0x3d, 0xf3,
|
||||
0xfd, 0xc9, 0x98, 0x82, 0x32, 0x4c, 0xc8, 0x78, 0x1d, 0x26, 0x7d, 0x4b, 0x07, 0xa1, 0x26, 0x19,
|
||||
0x16, 0x61, 0xc8, 0x97, 0x28, 0x0d, 0xdb, 0xf0, 0x22, 0xb2, 0x92, 0xef, 0xcc, 0xba, 0xe1, 0x08,
|
||||
0x66, 0x64, 0xbc, 0x0b, 0x3b, 0xd0, 0xe1, 0x5b, 0xfa, 0x26, 0x19, 0x56, 0x6c, 0xa7, 0x57, 0x2a,
|
||||
0xf0, 0x25, 0x1b, 0x83, 0x1b, 0x91, 0xdd, 0xd9, 0x2e, 0xe2, 0x4b, 0x26, 0xc2, 0x1c, 0x4c, 0xcb,
|
||||
0xf5, 0x1e, 0x5c, 0xc0, 0x88, 0x4f, 0x61, 0x04, 0x55, 0xc9, 0xf0, 0xd9, 0xe9, 0xcf, 0x4c, 0x1b,
|
||||
0x59, 0x06, 0x0e, 0x61, 0xed, 0xcf, 0xff, 0x17, 0xbf, 0x01, 0x98, 0x8d, 0xef, 0xd2, 0xf8, 0x39,
|
||||
0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
};
|
||||
|
||||
const BITMAP_OPAQUE dashline_xpm[1] = {{ png, sizeof( png ), "dashline_xpm" }};
|
||||
|
||||
//EOF
|
||||
@@ -0,0 +1,65 @@
|
||||
|
||||
/* Do not modify this file, it was automatically generated by the
|
||||
* PNG2cpp CMake script, using a *.png file as input.
|
||||
*/
|
||||
|
||||
#include <bitmaps_png/bitmaps_list.h>
|
||||
|
||||
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, 0x07, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xed, 0x95, 0x4b, 0x4c, 0x13,
|
||||
0x61, 0x10, 0xc7, 0xa1, 0x85, 0x10, 0x81, 0xbe, 0x78, 0x97, 0x57, 0xd3, 0x96, 0x47, 0x36, 0x2d,
|
||||
0xa1, 0x5c, 0x84, 0xa0, 0x10, 0xb8, 0x20, 0x44, 0x0e, 0x1a, 0x09, 0x48, 0x44, 0xe4, 0x00, 0x9a,
|
||||
0x18, 0x13, 0x0f, 0xc6, 0x8b, 0x47, 0x6f, 0x1c, 0x0c, 0x89, 0xc6, 0x9b, 0x77, 0x93, 0x56, 0x8f,
|
||||
0x6a, 0xb8, 0x1a, 0x8b, 0xe2, 0x41, 0xe3, 0x05, 0x0d, 0x6d, 0xda, 0xc4, 0xd4, 0x22, 0x84, 0x94,
|
||||
0xdd, 0x2e, 0xef, 0x06, 0xc6, 0xff, 0xd4, 0x5d, 0x5c, 0x2a, 0x52, 0xdb, 0x70, 0xf0, 0xe0, 0x97,
|
||||
0xfc, 0xd2, 0xed, 0x63, 0xe7, 0xb7, 0x33, 0xdf, 0x7c, 0xd3, 0x9c, 0x9c, 0x2c, 0x16, 0x11, 0x59,
|
||||
0x24, 0x49, 0x7a, 0x1d, 0x08, 0x04, 0x56, 0x70, 0xdd, 0x95, 0xf2, 0x9d, 0x63, 0x69, 0x69, 0xe9,
|
||||
0x73, 0x24, 0x12, 0x09, 0xe2, 0xba, 0x29, 0x27, 0xdb, 0xc5, 0x92, 0x58, 0x2c, 0xf6, 0xb1, 0xa3,
|
||||
0xad, 0x8d, 0x8c, 0x85, 0x85, 0xe4, 0xf7, 0xfb, 0x37, 0x55, 0x19, 0x4b, 0x42, 0xa1, 0xd0, 0x37,
|
||||
0x47, 0x4d, 0x0d, 0xd5, 0x57, 0x56, 0xd2, 0xe2, 0xe2, 0xe2, 0xf7, 0xac, 0x64, 0x5a, 0x49, 0x5f,
|
||||
0x49, 0x09, 0x4d, 0x57, 0x54, 0x90, 0xe9, 0x97, 0xec, 0xaa, 0x2a, 0x99, 0x2a, 0x2b, 0xa3, 0x5b,
|
||||
0xe5, 0xe5, 0xd9, 0xcb, 0x76, 0x76, 0x76, 0x7c, 0xaa, 0x24, 0xd6, 0xd4, 0x44, 0x1b, 0x8d, 0x8d,
|
||||
0x34, 0x83, 0xa0, 0x2c, 0xf3, 0x7a, 0xbd, 0xc4, 0x92, 0x49, 0x8b, 0x85, 0x64, 0xbb, 0x9d, 0xd6,
|
||||
0x1b, 0x1a, 0x0e, 0x64, 0x5c, 0xc6, 0x8c, 0x44, 0xbb, 0xbb, 0xbb, 0x4f, 0xbb, 0xdb, 0xdb, 0xa9,
|
||||
0x17, 0xc1, 0x56, 0x11, 0x68, 0x1d, 0x01, 0xe5, 0xba, 0x3a, 0x7a, 0x60, 0x36, 0x53, 0x6e, 0x6e,
|
||||
0x2e, 0x4d, 0x9a, 0x4c, 0x24, 0x41, 0x26, 0xd7, 0xd7, 0x93, 0xec, 0x70, 0x24, 0x33, 0x63, 0x79,
|
||||
0x34, 0x1a, 0xfd, 0x92, 0x69, 0xe9, 0x8c, 0xa2, 0x28, 0xbe, 0xef, 0x82, 0xac, 0x07, 0xb2, 0x95,
|
||||
0xda, 0x5a, 0x8a, 0x5b, 0xad, 0x24, 0xa1, 0x84, 0x73, 0x90, 0x89, 0x08, 0x1c, 0x47, 0x06, 0x92,
|
||||
0x92, 0x19, 0x4b, 0xb8, 0x9c, 0xbc, 0x77, 0x87, 0x02, 0xb9, 0xdd, 0x74, 0xbe, 0xa5, 0x85, 0x26,
|
||||
0xfe, 0x84, 0xcb, 0x45, 0x97, 0x58, 0x16, 0x8f, 0xc7, 0xe7, 0x7b, 0x3b, 0x3b, 0xe9, 0x8c, 0xd1,
|
||||
0x48, 0x51, 0x94, 0x47, 0x44, 0x29, 0x45, 0x64, 0x23, 0x22, 0xb8, 0x88, 0xf7, 0xd7, 0x71, 0x6d,
|
||||
0xab, 0xaa, 0xe2, 0xfd, 0xf9, 0x4d, 0xa2, 0x63, 0xdc, 0xee, 0xfd, 0x79, 0xc8, 0xe8, 0x18, 0x42,
|
||||
0x4a, 0x66, 0x9e, 0x85, 0x85, 0x85, 0x7d, 0xbd, 0x4e, 0x47, 0x4f, 0x20, 0x13, 0x91, 0xcd, 0x5a,
|
||||
0x71, 0x71, 0xf2, 0x75, 0x0e, 0x32, 0x2e, 0xa3, 0xcf, 0xe7, 0xc3, 0xcf, 0x68, 0x4c, 0x2b, 0xd1,
|
||||
0x03, 0x13, 0xb0, 0xba, 0x5c, 0xdb, 0x1f, 0xd2, 0x89, 0xf8, 0x09, 0xc3, 0xe1, 0x70, 0xc4, 0x89,
|
||||
0xb2, 0x4d, 0xe0, 0xc9, 0xd7, 0x50, 0x36, 0x89, 0x33, 0x82, 0x40, 0xe2, 0xd2, 0x21, 0x93, 0x47,
|
||||
0x78, 0x6f, 0x4e, 0x69, 0x7d, 0x5e, 0x85, 0xa0, 0x0d, 0x5c, 0x10, 0x84, 0xe5, 0xc0, 0x71, 0xa2,
|
||||
0xc1, 0x41, 0xfa, 0x7a, 0xd0, 0xc2, 0x08, 0x16, 0x57, 0xf6, 0x48, 0xc4, 0xbe, 0x70, 0x66, 0xcb,
|
||||
0x78, 0x95, 0xb9, 0x19, 0x6c, 0x36, 0x9a, 0x39, 0xdc, 0xfa, 0x49, 0x59, 0x11, 0x38, 0x0d, 0x46,
|
||||
0xf5, 0xfa, 0x92, 0xa9, 0xfc, 0x7c, 0xeb, 0x0d, 0x15, 0x93, 0x69, 0xe8, 0x9e, 0x56, 0xe4, 0xf7,
|
||||
0x6f, 0x6f, 0x3a, 0x10, 0x7c, 0xbc, 0xb4, 0x94, 0x64, 0xa7, 0x33, 0x19, 0x30, 0x8e, 0xae, 0x9b,
|
||||
0x44, 0xc9, 0xb8, 0x8c, 0x3d, 0xc8, 0x70, 0x05, 0x9f, 0xad, 0xe3, 0xbb, 0x8d, 0xe6, 0x66, 0x9a,
|
||||
0x86, 0x98, 0x0f, 0x75, 0x30, 0x18, 0x5c, 0xd6, 0x66, 0x74, 0x11, 0x5c, 0x56, 0x18, 0x05, 0xd7,
|
||||
0x0c, 0x86, 0xbe, 0xbb, 0x5a, 0x91, 0xd7, 0xbb, 0x2f, 0x5d, 0x19, 0x1e, 0x26, 0x01, 0x4f, 0x1f,
|
||||
0x66, 0x11, 0x48, 0x76, 0x57, 0x75, 0x35, 0xf1, 0x9e, 0xa9, 0xdd, 0xb8, 0x8a, 0x33, 0xc6, 0xe7,
|
||||
0xac, 0x0f, 0xd7, 0x1d, 0x1e, 0x0f, 0xf1, 0xb8, 0x52, 0xf7, 0xc8, 0x02, 0xea, 0x80, 0x4d, 0x41,
|
||||
0xe0, 0x52, 0x1a, 0x0c, 0xe7, 0xee, 0x68, 0x45, 0xad, 0xad, 0x14, 0x4e, 0x24, 0x12, 0xcf, 0x54,
|
||||
0xd9, 0x38, 0xca, 0xa7, 0x69, 0x61, 0x8f, 0xda, 0xfa, 0xbd, 0xf8, 0x5c, 0x95, 0xf0, 0x24, 0xe1,
|
||||
0x89, 0xa2, 0xed, 0x3a, 0xbd, 0x86, 0x52, 0x30, 0x90, 0x2a, 0x52, 0x9a, 0x21, 0x8f, 0x65, 0x63,
|
||||
0x23, 0x23, 0xc4, 0x65, 0xd4, 0x9e, 0x13, 0xf5, 0x9c, 0xf1, 0xa1, 0xe6, 0x09, 0x92, 0x2a, 0x39,
|
||||
0x6a, 0x99, 0x41, 0xff, 0x51, 0x22, 0x25, 0x60, 0xde, 0xde, 0xde, 0xde, 0xc3, 0xad, 0xad, 0xad,
|
||||
0x59, 0x5c, 0xdb, 0x53, 0x0f, 0x35, 0x4f, 0x10, 0x1e, 0x57, 0xe9, 0x24, 0x69, 0x45, 0x27, 0xb9,
|
||||
0xfe, 0x8b, 0x4e, 0x5c, 0x94, 0x00, 0xc1, 0x0c, 0xb9, 0x9d, 0x8d, 0x28, 0x63, 0x30, 0xf1, 0xef,
|
||||
0xff, 0x3b, 0xa2, 0x82, 0x02, 0xe1, 0xa6, 0xdd, 0xfe, 0x66, 0xf6, 0x27, 0x73, 0xaf, 0x1c, 0x8e,
|
||||
0xb7, 0x2f, 0xff, 0x8e, 0x77, 0x2f, 0x9c, 0xce, 0x4f, 0xcf, 0x05, 0x41, 0x7e, 0x0c, 0x51, 0x7f,
|
||||
0x5a, 0x11, 0x18, 0x07, 0x13, 0x59, 0xc0, 0xf7, 0x0d, 0x28, 0x71, 0x8e, 0x5d, 0x06, 0x70, 0x96,
|
||||
0xe7, 0x9d, 0x32, 0x6c, 0x33, 0x85, 0xef, 0xeb, 0x06, 0xc6, 0x74, 0x22, 0x9e, 0x7d, 0xa7, 0x94,
|
||||
0xbf, 0x90, 0xe2, 0x2c, 0x28, 0x52, 0xee, 0xd7, 0xa9, 0x01, 0x7f, 0x00, 0x7c, 0x97, 0x16, 0x4f,
|
||||
0xe9, 0xb8, 0xa5, 0x4b, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
};
|
||||
|
||||
const BITMAP_OPAQUE delete_bus_xpm[1] = {{ png, sizeof( png ), "delete_bus_xpm" }};
|
||||
|
||||
//EOF
|
||||
@@ -0,0 +1,95 @@
|
||||
|
||||
/* Do not modify this file, it was automatically generated by the
|
||||
* PNG2cpp CMake script, using a *.png file as input.
|
||||
*/
|
||||
|
||||
#include <bitmaps_png/bitmaps_list.h>
|
||||
|
||||
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, 0xda, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xa5, 0x55, 0x0b, 0x48, 0x9b,
|
||||
0x57, 0x14, 0x36, 0x69, 0x12, 0x5f, 0x69, 0xa2, 0xc6, 0x47, 0xac, 0x9a, 0x97, 0x69, 0xf2, 0x27,
|
||||
0xd1, 0xa9, 0xc8, 0x86, 0x1b, 0xcc, 0xad, 0x3e, 0x46, 0x71, 0x74, 0x63, 0xb0, 0x55, 0x86, 0x0a,
|
||||
0xb5, 0x9d, 0x1d, 0x6b, 0x19, 0xed, 0xba, 0x87, 0xa8, 0xdd, 0x74, 0x30, 0xc6, 0x60, 0x2b, 0x0c,
|
||||
0x69, 0x18, 0x5b, 0xa5, 0x1d, 0x14, 0x1c, 0x1b, 0x05, 0x57, 0xd1, 0xb5, 0x63, 0xe0, 0x60, 0x14,
|
||||
0x6c, 0xa8, 0xce, 0x4d, 0xa4, 0x65, 0x32, 0xdb, 0xd4, 0xb4, 0xf8, 0xa2, 0x9b, 0x51, 0xd3, 0xa8,
|
||||
0x31, 0xff, 0xd9, 0x77, 0xb3, 0xff, 0xd7, 0xdf, 0x36, 0xea, 0xea, 0x2e, 0x7c, 0x78, 0xff, 0x9b,
|
||||
0x73, 0xcf, 0x77, 0xcf, 0x39, 0xdf, 0x39, 0xc6, 0xc4, 0x6c, 0x73, 0x11, 0x51, 0xc5, 0xd8, 0xd8,
|
||||
0xd8, 0x9f, 0xa1, 0x50, 0xe8, 0x14, 0xf6, 0x32, 0xc9, 0xb9, 0x2a, 0x18, 0x0c, 0x9e, 0xf7, 0x7a,
|
||||
0xbd, 0xd7, 0xb1, 0x2f, 0x8a, 0xf9, 0x3f, 0x0b, 0x0e, 0x2a, 0x7b, 0x7b, 0x7b, 0x97, 0xe2, 0x94,
|
||||
0x4a, 0x3a, 0x58, 0x57, 0x47, 0x2b, 0x2b, 0x2b, 0x5f, 0x31, 0x32, 0x46, 0x12, 0x08, 0x04, 0x7a,
|
||||
0xaa, 0xca, 0xcb, 0x29, 0x59, 0xad, 0x26, 0x8f, 0xc7, 0xe3, 0xdf, 0x36, 0x99, 0x48, 0x92, 0x14,
|
||||
0x1f, 0x4f, 0x5f, 0xef, 0xda, 0x45, 0x05, 0x5a, 0x2d, 0x1d, 0xac, 0xad, 0x65, 0x64, 0x67, 0x44,
|
||||
0x92, 0xf2, 0x94, 0x14, 0x6a, 0xd7, 0xeb, 0x49, 0xb7, 0x5d, 0x32, 0x5c, 0x48, 0xe8, 0xef, 0xef,
|
||||
0x0f, 0xa8, 0x63, 0x63, 0xe9, 0x62, 0x76, 0x36, 0x05, 0x6c, 0x36, 0xf2, 0x99, 0xcd, 0xab, 0x64,
|
||||
0x55, 0x65, 0x65, 0x54, 0x96, 0x94, 0x44, 0x33, 0x46, 0x23, 0x2d, 0xe4, 0xe6, 0xd2, 0x97, 0x78,
|
||||
0x08, 0x8b, 0x6c, 0x74, 0x74, 0x74, 0xfc, 0x91, 0x88, 0x06, 0x06, 0x06, 0x94, 0x37, 0xb1, 0x8c,
|
||||
0x78, 0x6d, 0x4b, 0x46, 0x46, 0xc4, 0xd9, 0xbc, 0xc1, 0x40, 0xb7, 0x33, 0x33, 0xa9, 0x60, 0xe7,
|
||||
0x4e, 0x2a, 0x07, 0xe1, 0x14, 0xf6, 0xf3, 0x39, 0x39, 0x34, 0x87, 0x07, 0x1c, 0x48, 0x4d, 0xa5,
|
||||
0x42, 0x8e, 0xa3, 0xe9, 0xe9, 0xe9, 0x2b, 0x9b, 0xbd, 0x5f, 0xe6, 0x72, 0x51, 0x99, 0xcb, 0x15,
|
||||
0x3e, 0xe5, 0x72, 0xf1, 0x57, 0xf3, 0xf2, 0xf8, 0x71, 0xe0, 0xef, 0xbd, 0x7b, 0xc3, 0xe3, 0xd7,
|
||||
0xae, 0x8d, 0x2d, 0x31, 0xb2, 0x66, 0x9d, 0x8e, 0xe6, 0xb2, 0xb2, 0xc8, 0x9f, 0x9e, 0x4e, 0x33,
|
||||
0xd8, 0xff, 0x05, 0xb0, 0xfd, 0x2c, 0x22, 0xa9, 0x4f, 0x4e, 0xa6, 0x42, 0xbb, 0x9d, 0x26, 0x27,
|
||||
0x27, 0x7f, 0x47, 0x26, 0x92, 0xa3, 0x52, 0x80, 0x60, 0x1f, 0x9c, 0x0e, 0xe7, 0xe5, 0x11, 0x45,
|
||||
0x43, 0x65, 0x25, 0x51, 0x7f, 0xff, 0x2d, 0x32, 0x22, 0xaa, 0x93, 0x48, 0x95, 0x1f, 0x04, 0xb3,
|
||||
0x1a, 0x0d, 0xcd, 0x22, 0x22, 0x3f, 0xa2, 0x38, 0x84, 0xb3, 0xc7, 0x90, 0x56, 0x81, 0x24, 0x25,
|
||||
0x1a, 0x81, 0x0a, 0x8e, 0xdc, 0x0f, 0x3b, 0x0f, 0xaf, 0x38, 0x9d, 0xfe, 0x29, 0x8e, 0x9b, 0xf4,
|
||||
0x3a, 0x9d, 0x73, 0xf7, 0x8a, 0x8a, 0x78, 0xbe, 0xaf, 0x6f, 0x91, 0x2a, 0x4b, 0x4b, 0xe9, 0x79,
|
||||
0xe6, 0x1c, 0xc5, 0x8f, 0x10, 0x31, 0xd2, 0xb4, 0x34, 0x2a, 0xc6, 0xbe, 0xae, 0xba, 0x9a, 0x09,
|
||||
0xe4, 0x9c, 0x54, 0xfa, 0x62, 0xaa, 0xe4, 0x70, 0xfa, 0xad, 0x94, 0x80, 0xe3, 0xa6, 0xc6, 0x32,
|
||||
0x33, 0x3f, 0xed, 0x50, 0x28, 0xb2, 0xdf, 0x85, 0xc1, 0x1b, 0xc0, 0x6b, 0x5a, 0xad, 0xb6, 0x61,
|
||||
0x78, 0xf8, 0x8f, 0x91, 0x7d, 0x08, 0x8b, 0x15, 0x7e, 0x0a, 0x29, 0x64, 0xce, 0x59, 0x54, 0x2c,
|
||||
0x9a, 0x39, 0x7c, 0xdf, 0x41, 0xea, 0x8a, 0xf1, 0x5b, 0x7d, 0x4d, 0xcd, 0xaa, 0xf4, 0xa5, 0xd1,
|
||||
0x7c, 0xb8, 0x46, 0xc2, 0xf3, 0x06, 0x43, 0xd7, 0x85, 0x98, 0x18, 0xf9, 0x71, 0xfc, 0x74, 0x18,
|
||||
0x78, 0x05, 0xd8, 0x03, 0x14, 0xfb, 0x7c, 0xbe, 0x3e, 0x26, 0xe1, 0x32, 0xd4, 0x60, 0x1a, 0x42,
|
||||
0x98, 0x87, 0xfa, 0x66, 0x21, 0x80, 0x23, 0xf8, 0x6e, 0x05, 0xd8, 0xf7, 0xbc, 0xc9, 0xf4, 0xaf,
|
||||
0x1a, 0x41, 0x26, 0x48, 0xbf, 0x5d, 0x24, 0xb1, 0x82, 0x60, 0x51, 0x24, 0xca, 0xca, 0x3a, 0xff,
|
||||
0x0d, 0x8e, 0x8f, 0x01, 0x75, 0x40, 0x29, 0x60, 0x01, 0x74, 0x6e, 0xb7, 0x5b, 0xdf, 0xdd, 0xdd,
|
||||
0xcd, 0x2b, 0xe4, 0x72, 0xfa, 0x0d, 0xce, 0x16, 0x2c, 0x16, 0xf2, 0xe3, 0xef, 0x01, 0xa4, 0xae,
|
||||
0x00, 0x85, 0x67, 0x35, 0x6b, 0x46, 0x54, 0x0b, 0x56, 0x2b, 0x05, 0xf0, 0x7d, 0x19, 0xea, 0x93,
|
||||
0xc9, 0x64, 0x34, 0x38, 0x38, 0xe8, 0x8f, 0x10, 0xc1, 0xf9, 0xe7, 0x22, 0x89, 0xcd, 0xe6, 0x1d,
|
||||
0xc1, 0xd1, 0x71, 0x81, 0xe4, 0x71, 0x20, 0x0d, 0x50, 0x01, 0x72, 0x80, 0x75, 0xff, 0x07, 0xef,
|
||||
0x37, 0x35, 0x91, 0x01, 0xfd, 0x31, 0x82, 0x57, 0x37, 0x20, 0x6d, 0x05, 0x28, 0xbc, 0xc7, 0x33,
|
||||
0xb5, 0xe4, 0xf1, 0xdc, 0x26, 0x0b, 0xd2, 0xc6, 0xa4, 0xff, 0x2b, 0x7e, 0xd3, 0x27, 0x26, 0xd2,
|
||||
0xe9, 0xf6, 0x76, 0x1e, 0x77, 0xea, 0x45, 0xa2, 0x3b, 0x22, 0x91, 0x4e, 0x77, 0xe2, 0xb4, 0x90,
|
||||
0xae, 0xa7, 0x81, 0x54, 0x40, 0x11, 0xa5, 0x71, 0xdb, 0x5a, 0x1a, 0x1b, 0x29, 0x41, 0xa1, 0x88,
|
||||
0xf4, 0xc9, 0xc4, 0xc4, 0xc4, 0x70, 0x45, 0xc5, 0xdd, 0xd6, 0x55, 0x35, 0xa2, 0x4e, 0x89, 0x18,
|
||||
0x4f, 0x5f, 0xb8, 0xdd, 0xfc, 0xf2, 0xf2, 0xf2, 0xe1, 0xc8, 0xa5, 0xe2, 0x62, 0xd2, 0xae, 0xd5,
|
||||
0x66, 0x65, 0x59, 0x2e, 0x8f, 0x3d, 0x21, 0xd4, 0xc4, 0x22, 0x44, 0xb2, 0xd1, 0x94, 0x68, 0xed,
|
||||
0xec, 0xec, 0xe4, 0x21, 0xe1, 0x21, 0xd6, 0x27, 0x36, 0xdb, 0x30, 0x27, 0x4a, 0xdf, 0xe3, 0xf1,
|
||||
0x86, 0xbb, 0xba, 0xba, 0xc2, 0x43, 0x43, 0x43, 0x2d, 0x30, 0x8d, 0x15, 0xa2, 0x59, 0x72, 0x88,
|
||||
0x44, 0x90, 0xf0, 0x3d, 0x1c, 0x1d, 0x05, 0x2a, 0x84, 0x68, 0xe4, 0x5b, 0x8c, 0xa4, 0x1c, 0x40,
|
||||
0xc9, 0xf6, 0x56, 0xeb, 0x0f, 0xb1, 0xa2, 0x1f, 0x3c, 0x9e, 0x2f, 0x29, 0xd9, 0xf3, 0x1e, 0x8b,
|
||||
0x03, 0x50, 0xb3, 0x94, 0x43, 0x08, 0x0b, 0x7a, 0xd1, 0xc0, 0xe5, 0x5a, 0xba, 0x8f, 0xc3, 0xd7,
|
||||
0x81, 0xa7, 0x00, 0x6d, 0xc4, 0xe0, 0x3f, 0xae, 0xf5, 0x7e, 0x96, 0x83, 0x51, 0xfc, 0x7c, 0xb7,
|
||||
0x03, 0x72, 0x5e, 0x10, 0x8d, 0x34, 0x9a, 0x97, 0xdb, 0xb6, 0x43, 0x84, 0xb4, 0xbf, 0x24, 0xe9,
|
||||
0x3f, 0x5f, 0xb4, 0x07, 0x63, 0xa6, 0x2d, 0x5e, 0x10, 0x8d, 0xcc, 0xe6, 0x5f, 0x7e, 0x16, 0x52,
|
||||
0xa7, 0xdb, 0x2a, 0x75, 0xeb, 0x89, 0xf8, 0xcb, 0xa2, 0x0f, 0xa3, 0xb1, 0xe7, 0x12, 0x6b, 0xee,
|
||||
0x75, 0xa9, 0x63, 0xcb, 0xe1, 0x98, 0xa8, 0x92, 0x8e, 0x1b, 0x9d, 0xee, 0xed, 0x66, 0x1c, 0x9b,
|
||||
0x37, 0x13, 0xc3, 0x03, 0xa3, 0xeb, 0x55, 0xc9, 0xfd, 0x90, 0x5a, 0x5d, 0xf1, 0x91, 0xd0, 0x1e,
|
||||
0xf6, 0x55, 0x31, 0x08, 0x4b, 0x81, 0x19, 0x76, 0x69, 0x2d, 0xc7, 0xc1, 0xf9, 0x8c, 0x8c, 0x8f,
|
||||
0x1b, 0x36, 0x92, 0xb7, 0x74, 0xe5, 0xe7, 0xd3, 0x8b, 0xb8, 0x13, 0x14, 0xef, 0x9a, 0x4c, 0x3f,
|
||||
0xfd, 0x88, 0xe3, 0x37, 0x81, 0x2a, 0x40, 0x0f, 0xec, 0x90, 0xda, 0xcb, 0x0c, 0x86, 0xb3, 0x16,
|
||||
0xa7, 0xf3, 0xbe, 0x57, 0xfa, 0xb2, 0xdd, 0xbb, 0x6f, 0x9c, 0x4d, 0x4d, 0x6d, 0xb3, 0x49, 0x1b,
|
||||
0x56, 0xbc, 0xc0, 0x71, 0x41, 0x13, 0x6c, 0x3a, 0x60, 0xcb, 0x8b, 0x77, 0xec, 0x76, 0xdf, 0x0d,
|
||||
0xb9, 0x3c, 0xe5, 0x1d, 0x21, 0x9a, 0x02, 0x20, 0x31, 0x5a, 0x9d, 0x15, 0x7a, 0x7d, 0xfb, 0x13,
|
||||
0x0e, 0x87, 0xff, 0xd6, 0xfa, 0xc9, 0xcd, 0x87, 0x9c, 0xce, 0xc0, 0x55, 0x97, 0x6b, 0xae, 0x03,
|
||||
0x0f, 0xf9, 0x0c, 0x8a, 0x3a, 0x03, 0x82, 0x41, 0xfc, 0x16, 0x96, 0xda, 0xd9, 0xed, 0xe3, 0xd7,
|
||||
0x55, 0x2a, 0x53, 0x23, 0xfc, 0xb0, 0x4c, 0x3c, 0x0b, 0xa4, 0x3f, 0x18, 0x8d, 0x74, 0xc5, 0xa9,
|
||||
0xd5, 0x25, 0x0e, 0xab, 0x75, 0xe4, 0x22, 0x8b, 0x68, 0xa3, 0xff, 0x47, 0x52, 0xb8, 0x5c, 0xa1,
|
||||
0xa0, 0xc1, 0xd0, 0xfd, 0x3d, 0x1a, 0xfd, 0x2d, 0x41, 0x00, 0x4c, 0x48, 0x39, 0x5b, 0xd5, 0x97,
|
||||
0x85, 0x19, 0x0f, 0x18, 0xb4, 0xda, 0xda, 0xfd, 0x16, 0xcb, 0x95, 0x1e, 0x8e, 0x9b, 0xb9, 0xfb,
|
||||
0x30, 0x01, 0xcf, 0x73, 0xdc, 0xc4, 0x4d, 0x10, 0x74, 0xab, 0x54, 0x5c, 0x13, 0xec, 0x8f, 0x00,
|
||||
0x35, 0xc2, 0x00, 0xce, 0x16, 0x04, 0xb0, 0x65, 0x6b, 0xc8, 0x84, 0xd7, 0xb0, 0x61, 0x9a, 0x0f,
|
||||
0x3c, 0x17, 0x17, 0xe7, 0x38, 0xa4, 0xd1, 0xec, 0x3f, 0xa9, 0xd3, 0x1d, 0xfd, 0x44, 0xa3, 0x79,
|
||||
0xa1, 0x55, 0xa9, 0xcc, 0x3c, 0x26, 0xcc, 0x43, 0x36, 0x2c, 0xab, 0x81, 0x72, 0xc0, 0x29, 0x88,
|
||||
0x47, 0xf5, 0x28, 0xfd, 0x17, 0x23, 0xe4, 0x37, 0x41, 0x20, 0xcc, 0x05, 0x0a, 0x85, 0x06, 0x64,
|
||||
0xf9, 0x7f, 0x06, 0x78, 0x52, 0x28, 0xb8, 0x59, 0x20, 0x88, 0xdf, 0xac, 0x26, 0xff, 0x00, 0x8c,
|
||||
0xdc, 0x04, 0xd3, 0xa5, 0xbd, 0x0b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae,
|
||||
0x42, 0x60, 0x82,
|
||||
};
|
||||
|
||||
const BITMAP_OPAQUE delete_circle_xpm[1] = {{ png, sizeof( png ), "delete_circle_xpm" }};
|
||||
|
||||
//EOF
|
||||
@@ -0,0 +1,92 @@
|
||||
|
||||
/* Do not modify this file, it was automatically generated by the
|
||||
* PNG2cpp CMake script, using a *.png file as input.
|
||||
*/
|
||||
|
||||
#include <bitmaps_png/bitmaps_list.h>
|
||||
|
||||
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, 0xab, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0x9d, 0x95, 0x7f, 0x4c, 0xd4,
|
||||
0x75, 0x18, 0xc7, 0x3f, 0x1c, 0x27, 0xf1, 0x4b, 0x0e, 0x0f, 0x10, 0xb9, 0xe3, 0x44, 0x18, 0xa0,
|
||||
0x34, 0xc1, 0xc2, 0x1f, 0x07, 0x5b, 0x42, 0x34, 0x17, 0x96, 0xcd, 0x5d, 0xea, 0x40, 0x6d, 0x81,
|
||||
0x59, 0x03, 0x93, 0x54, 0x9a, 0x22, 0x05, 0x69, 0x1b, 0x6b, 0xe0, 0x68, 0x91, 0xb6, 0xdd, 0xdd,
|
||||
0xa2, 0xc9, 0x1f, 0xb2, 0x43, 0xcb, 0x89, 0x7f, 0x34, 0x21, 0x62, 0x25, 0x8c, 0x46, 0x8c, 0x5a,
|
||||
0x80, 0xb2, 0xa8, 0xd9, 0x0a, 0x72, 0xa3, 0x36, 0x60, 0x1c, 0x07, 0x14, 0x52, 0xe7, 0xbb, 0xf7,
|
||||
0xe7, 0xcb, 0x41, 0x88, 0x07, 0x02, 0x9f, 0xed, 0xbd, 0xbb, 0xef, 0x7d, 0xee, 0xfb, 0xbc, 0x3e,
|
||||
0xcf, 0xf3, 0xbc, 0x9f, 0xef, 0x57, 0x88, 0x25, 0x2e, 0x00, 0x61, 0xd4, 0x75, 0xaa, 0x8a, 0xf2,
|
||||
0x73, 0xb3, 0x7f, 0x8a, 0x6a, 0xa2, 0xb6, 0x8b, 0xe5, 0x2e, 0xde, 0xac, 0x1b, 0x1e, 0x1e, 0xbe,
|
||||
0xb3, 0xdd, 0x68, 0xc4, 0xc1, 0x8c, 0x0c, 0x4c, 0x4e, 0x4e, 0x36, 0xcf, 0x86, 0xf1, 0x7b, 0x99,
|
||||
0xd5, 0x6a, 0x45, 0xf8, 0x9a, 0x35, 0xe8, 0xea, 0xea, 0xfa, 0x9b, 0xd7, 0xcf, 0x2c, 0x1b, 0x92,
|
||||
0xbc, 0x79, 0x33, 0x12, 0x56, 0xae, 0x84, 0xde, 0xd7, 0x17, 0x99, 0x7b, 0xf7, 0xce, 0xc0, 0x24,
|
||||
0xc4, 0x62, 0xb1, 0xc0, 0xcb, 0xd3, 0x13, 0x3b, 0xb8, 0x1f, 0x12, 0x18, 0xb8, 0x74, 0x18, 0xff,
|
||||
0xac, 0x75, 0x38, 0x1c, 0x77, 0x52, 0x92, 0x92, 0x14, 0xc8, 0xdd, 0xe8, 0x68, 0xfc, 0x18, 0x19,
|
||||
0x89, 0x08, 0x3f, 0x3f, 0xec, 0x33, 0x99, 0x24, 0xec, 0xf7, 0xca, 0xca, 0x4a, 0x3c, 0xa6, 0x56,
|
||||
0xa3, 0x26, 0x34, 0x14, 0x63, 0x31, 0x31, 0xc8, 0x09, 0x0a, 0x9a, 0x0d, 0x4b, 0x5e, 0x2c, 0xe8,
|
||||
0x60, 0x71, 0x71, 0x31, 0xbc, 0x54, 0x2a, 0xf4, 0x44, 0x45, 0x61, 0x3c, 0x36, 0x16, 0x63, 0xfc,
|
||||
0xec, 0xd2, 0xeb, 0xa1, 0xf7, 0xf1, 0xc1, 0x56, 0x66, 0x29, 0x33, 0xa9, 0x09, 0x0e, 0xc6, 0x68,
|
||||
0x44, 0x84, 0xb2, 0x37, 0x4a, 0xd8, 0xe3, 0xdc, 0x4b, 0xde, 0xb6, 0x0d, 0xb2, 0x9f, 0x8b, 0x05,
|
||||
0x85, 0x0c, 0x0c, 0x0c, 0xf4, 0x25, 0x6e, 0xdc, 0x08, 0x63, 0x40, 0x00, 0xfe, 0x60, 0x36, 0x32,
|
||||
0xa0, 0x83, 0xa0, 0xce, 0x90, 0x10, 0x24, 0x30, 0xa0, 0x8d, 0xa7, 0x77, 0x84, 0x85, 0x61, 0x34,
|
||||
0x3c, 0x5c, 0xd9, 0xcb, 0xd3, 0x6a, 0x11, 0xe8, 0xef, 0x8f, 0xf6, 0xf6, 0xf6, 0x7b, 0xbc, 0xff,
|
||||
0xe9, 0xa5, 0x94, 0x6f, 0xdd, 0xd0, 0xd0, 0x50, 0xdf, 0xd6, 0x4d, 0x9b, 0x60, 0x64, 0xf9, 0xfa,
|
||||
0x75, 0x3a, 0x38, 0xd8, 0xf4, 0x11, 0x66, 0x31, 0xc2, 0xa0, 0x23, 0x2c, 0xd5, 0xc8, 0xea, 0xd5,
|
||||
0x70, 0xf0, 0xf7, 0x37, 0x09, 0xd5, 0xb0, 0xac, 0x6d, 0x6d, 0x6d, 0x12, 0xb2, 0x6b, 0x39, 0x86,
|
||||
0x58, 0xa7, 0x64, 0x16, 0x1f, 0x0f, 0x23, 0x4f, 0xdb, 0x4f, 0x88, 0x7d, 0xd5, 0x2a, 0xd8, 0x99,
|
||||
0xa5, 0x9d, 0xc1, 0x25, 0x34, 0x8f, 0x87, 0x98, 0x95, 0xc9, 0x22, 0x20, 0x67, 0x44, 0x2a, 0x55,
|
||||
0x4d, 0xe5, 0xf0, 0x4a, 0x4d, 0xa9, 0x5c, 0x30, 0x73, 0x79, 0x79, 0x39, 0x56, 0xb0, 0x5f, 0xad,
|
||||
0x0c, 0x2e, 0x01, 0xc3, 0x0c, 0xae, 0x7c, 0xb2, 0x8c, 0xe1, 0xde, 0xde, 0x78, 0x3e, 0x3d, 0x5d,
|
||||
0x1a, 0xa4, 0xc3, 0xdd, 0x9c, 0xb9, 0x03, 0xbd, 0x46, 0x41, 0x9c, 0x16, 0x57, 0x78, 0x15, 0x4f,
|
||||
0x85, 0x39, 0x9d, 0xce, 0x73, 0xd3, 0xee, 0xb2, 0x31, 0x13, 0x59, 0x2a, 0x59, 0x32, 0xbb, 0x2c,
|
||||
0x1d, 0xb3, 0x71, 0xd0, 0x71, 0xdd, 0x2c, 0x67, 0x04, 0xad, 0xef, 0x72, 0x63, 0xf3, 0xa3, 0x61,
|
||||
0xd3, 0xa0, 0x23, 0xe2, 0x26, 0xaf, 0xac, 0xad, 0xad, 0xad, 0xb5, 0xd3, 0x73, 0x52, 0xc3, 0x93,
|
||||
0x8f, 0xd2, 0x08, 0x4a, 0x8f, 0x18, 0xbc, 0x8a, 0xa5, 0xeb, 0xe7, 0xa7, 0x34, 0xc7, 0xe8, 0xda,
|
||||
0xb5, 0xb8, 0x65, 0x30, 0x3c, 0x34, 0x67, 0x8f, 0x06, 0xe5, 0x88, 0x96, 0xac, 0xac, 0xac, 0xaf,
|
||||
0x6d, 0x36, 0x9b, 0x02, 0xb9, 0x4c, 0x67, 0x8d, 0x49, 0xd7, 0x31, 0xa0, 0x74, 0xd8, 0x51, 0x42,
|
||||
0x64, 0x45, 0x95, 0x9e, 0x11, 0x20, 0xad, 0x3d, 0x4e, 0x6b, 0xdf, 0xe2, 0x7f, 0x74, 0x74, 0xe3,
|
||||
0xab, 0xd9, 0xd9, 0xd2, 0xde, 0xe5, 0x8b, 0x02, 0x99, 0x4c, 0xa6, 0xc6, 0xba, 0xba, 0xba, 0xfb,
|
||||
0x5e, 0x2c, 0xd9, 0x79, 0x39, 0x90, 0x1c, 0x58, 0x19, 0x30, 0x8f, 0x7d, 0x91, 0x8d, 0x6f, 0x68,
|
||||
0x68, 0x80, 0x62, 0x10, 0x42, 0xff, 0xe4, 0xde, 0xf8, 0xfa, 0xf5, 0x68, 0xa1, 0xc5, 0x03, 0xbd,
|
||||
0xbc, 0xf0, 0x56, 0x41, 0x81, 0x04, 0x9d, 0x75, 0x87, 0x88, 0xa5, 0x2e, 0x08, 0x5f, 0x71, 0x97,
|
||||
0x82, 0xf0, 0x17, 0x7f, 0xf1, 0xfa, 0x37, 0xb3, 0xd9, 0xdc, 0x50, 0x5b, 0x5b, 0x3b, 0x03, 0x7b,
|
||||
0xe3, 0xc1, 0x39, 0xc9, 0x99, 0x71, 0xa3, 0x46, 0x83, 0x3a, 0x66, 0x26, 0x21, 0xf9, 0xc7, 0x8e,
|
||||
0x49, 0xc8, 0x55, 0x4a, 0x3d, 0x17, 0x72, 0x98, 0x9a, 0x88, 0x8c, 0x30, 0xe0, 0xf5, 0x43, 0x99,
|
||||
0x78, 0xbf, 0x28, 0x0f, 0x27, 0x5f, 0xd9, 0x83, 0xf8, 0x18, 0x83, 0x52, 0x9e, 0xb2, 0xb2, 0xb2,
|
||||
0xef, 0x25, 0x6c, 0x05, 0x4b, 0x38, 0xd7, 0xc2, 0x33, 0xd6, 0xe7, 0x50, 0xcb, 0xcb, 0xfc, 0xe3,
|
||||
0xc7, 0xe7, 0x85, 0xa4, 0x52, 0xce, 0x13, 0xb9, 0xd9, 0x98, 0xec, 0x6d, 0x03, 0x7e, 0xf9, 0x0a,
|
||||
0xe8, 0xbe, 0x06, 0x7c, 0x57, 0x05, 0x67, 0xf3, 0x07, 0xf8, 0x38, 0xff, 0x05, 0xa8, 0x3d, 0x55,
|
||||
0x28, 0x29, 0x29, 0xe9, 0x6e, 0x6a, 0x6a, 0x72, 0x76, 0x76, 0x76, 0x4e, 0xcc, 0x9d, 0x13, 0x09,
|
||||
0x1b, 0x1c, 0x1c, 0xec, 0xad, 0xae, 0xae, 0x96, 0x90, 0x4f, 0xdd, 0x41, 0xe4, 0x6a, 0x4c, 0x4d,
|
||||
0xde, 0x02, 0xf4, 0x7e, 0x03, 0xfc, 0x74, 0x03, 0xe8, 0xb0, 0x01, 0xdf, 0x5a, 0x80, 0x9b, 0xa5,
|
||||
0x40, 0x7d, 0x21, 0xdf, 0x40, 0x47, 0x50, 0xb8, 0x3b, 0x4e, 0x9e, 0x76, 0x32, 0x2d, 0x2d, 0xed,
|
||||
0x52, 0x51, 0x51, 0x51, 0x1a, 0xbf, 0x7b, 0xba, 0x19, 0xea, 0x00, 0x2a, 0x89, 0x52, 0x3d, 0xb8,
|
||||
0xf3, 0x8e, 0x38, 0x2f, 0xde, 0x66, 0x4f, 0x3c, 0x84, 0xb3, 0xea, 0x1c, 0xdf, 0x59, 0xb7, 0x65,
|
||||
0x16, 0x17, 0x81, 0x96, 0x0a, 0xa0, 0xf1, 0x5d, 0xe0, 0xf3, 0x13, 0x2c, 0xc0, 0x21, 0xa0, 0xda,
|
||||
0x84, 0x9e, 0x12, 0xa3, 0x52, 0x16, 0x91, 0xc2, 0xfe, 0xbd, 0x4c, 0xdb, 0x17, 0x0a, 0x8b, 0x72,
|
||||
0x7f, 0x91, 0x52, 0x72, 0x19, 0xd8, 0x63, 0x21, 0x77, 0x41, 0x14, 0x08, 0x25, 0x40, 0xbd, 0xf9,
|
||||
0xf4, 0x9c, 0x2c, 0x72, 0x81, 0xcb, 0xfb, 0xf9, 0xec, 0x7d, 0x0e, 0xb0, 0x24, 0x63, 0xa4, 0x74,
|
||||
0xc3, 0x14, 0xe8, 0x00, 0x75, 0x66, 0x96, 0x4e, 0x89, 0x2f, 0xf8, 0x7b, 0x34, 0x15, 0x3c, 0xfd,
|
||||
0x04, 0x79, 0x78, 0xed, 0x14, 0xed, 0x22, 0x5d, 0xfc, 0xc0, 0x6d, 0xa7, 0xf5, 0xe4, 0x3e, 0x66,
|
||||
0x71, 0xd6, 0x95, 0x05, 0xfd, 0x7f, 0xc9, 0x04, 0x54, 0xa6, 0x01, 0x1f, 0x3d, 0xc9, 0x49, 0x88,
|
||||
0x42, 0xe7, 0x51, 0xcd, 0x14, 0x68, 0x8b, 0xe8, 0x15, 0x3b, 0x44, 0x8f, 0x78, 0x56, 0x74, 0x28,
|
||||
0xf7, 0x26, 0x8a, 0x26, 0xfe, 0x7e, 0x91, 0x3a, 0x40, 0xf9, 0xcc, 0x97, 0xd3, 0x87, 0x94, 0x59,
|
||||
0x5a, 0x38, 0x31, 0x3a, 0x14, 0xff, 0x5e, 0xcb, 0x01, 0x6a, 0x64, 0x16, 0x3b, 0x95, 0x2c, 0x50,
|
||||
0x11, 0x07, 0x94, 0xea, 0x38, 0x09, 0x7e, 0xc8, 0x7d, 0x42, 0xc9, 0x7c, 0x82, 0xfa, 0x92, 0xba,
|
||||
0x41, 0x7d, 0xe2, 0xba, 0x57, 0xaa, 0x82, 0x7a, 0x71, 0x21, 0x90, 0x96, 0x0a, 0xa2, 0xe4, 0x3b,
|
||||
0xe3, 0x5e, 0xa6, 0x51, 0x0f, 0xfb, 0x85, 0xa7, 0x66, 0xb2, 0x40, 0x89, 0x16, 0xff, 0x14, 0x7a,
|
||||
0xe2, 0xbd, 0x14, 0x01, 0x0f, 0xa1, 0x80, 0x6e, 0x53, 0xf5, 0xf2, 0xb1, 0xe4, 0x2a, 0x57, 0x90,
|
||||
0x4b, 0x32, 0x8e, 0xef, 0xc2, 0x7d, 0xfa, 0x7f, 0xed, 0xa1, 0xc6, 0x34, 0xde, 0x2a, 0xec, 0x8e,
|
||||
0xf3, 0x46, 0xbe, 0x51, 0x8d, 0x8c, 0x0d, 0x02, 0x86, 0x00, 0x05, 0x70, 0x9f, 0xfa, 0x99, 0x92,
|
||||
0xfd, 0xb8, 0x4a, 0x65, 0xb9, 0x02, 0x2f, 0x6b, 0xc9, 0xd3, 0x24, 0x50, 0x0d, 0x42, 0x23, 0xec,
|
||||
0x22, 0x8c, 0x80, 0x10, 0xa5, 0x54, 0xbf, 0x52, 0x2d, 0xae, 0x4c, 0x3e, 0xa3, 0x8a, 0x29, 0xdd,
|
||||
0x62, 0x4f, 0x3f, 0xdf, 0x92, 0xb3, 0xa1, 0x17, 0x26, 0x36, 0x57, 0x3a, 0x6a, 0xbf, 0xe8, 0x73,
|
||||
0x01, 0xae, 0xbb, 0x7a, 0xf1, 0x92, 0x7c, 0x65, 0xb8, 0x9b, 0xa1, 0xe5, 0x65, 0x56, 0x20, 0xf2,
|
||||
0x14, 0xd0, 0x61, 0xba, 0x72, 0x2a, 0x8b, 0x7c, 0xca, 0xb0, 0x94, 0x3e, 0xcc, 0x5e, 0xff, 0x01,
|
||||
0x29, 0x35, 0x2e, 0xb3, 0x3a, 0xac, 0xcc, 0x57, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44,
|
||||
0xae, 0x42, 0x60, 0x82,
|
||||
};
|
||||
|
||||
const BITMAP_OPAQUE delete_connection_xpm[1] = {{ png, sizeof( png ), "delete_connection_xpm" }};
|
||||
|
||||
//EOF
|
||||
@@ -0,0 +1,74 @@
|
||||
|
||||
/* Do not modify this file, it was automatically generated by the
|
||||
* PNG2cpp CMake script, using a *.png file as input.
|
||||
*/
|
||||
|
||||
#include <bitmaps_png/bitmaps_list.h>
|
||||
|
||||
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, 0x8a, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xed, 0x94, 0x4b, 0x48, 0x94,
|
||||
0x51, 0x18, 0x86, 0xff, 0xc9, 0xeb, 0x98, 0xcd, 0x78, 0xbf, 0xdf, 0x66, 0x98, 0xd4, 0xca, 0xc0,
|
||||
0x4d, 0x21, 0x64, 0x9b, 0xb2, 0x4d, 0x45, 0x66, 0xd0, 0x22, 0xcd, 0x34, 0x17, 0x2d, 0x22, 0x83,
|
||||
0x0a, 0x42, 0x02, 0xa1, 0x56, 0x49, 0x5a, 0x4a, 0xb4, 0x28, 0xa3, 0x50, 0x43, 0x17, 0x82, 0xda,
|
||||
0xa2, 0x20, 0x53, 0xcb, 0x91, 0x1c, 0xcc, 0x8d, 0x82, 0x31, 0xc4, 0x78, 0xc3, 0x48, 0x62, 0xb2,
|
||||
0x9c, 0x9b, 0x46, 0x5e, 0xbf, 0xde, 0x6f, 0x3c, 0x3f, 0x4d, 0xe3, 0x8c, 0x9a, 0xb5, 0x09, 0x3a,
|
||||
0xf0, 0xf2, 0xff, 0xe7, 0xf6, 0x3d, 0xe7, 0x7c, 0xe7, 0x3d, 0x47, 0x92, 0x36, 0x51, 0x88, 0x28,
|
||||
0x6b, 0x7c, 0x7c, 0xfc, 0xcb, 0xe4, 0xe4, 0xe4, 0x07, 0xfc, 0xa7, 0xb9, 0xf5, 0xed, 0xfa, 0x88,
|
||||
0x32, 0x36, 0x36, 0x36, 0x85, 0xff, 0x3d, 0xd2, 0x66, 0x0b, 0x43, 0x06, 0x07, 0x07, 0x1d, 0x91,
|
||||
0x21, 0x21, 0xa4, 0x4d, 0x48, 0x20, 0x04, 0x34, 0xcb, 0x30, 0x86, 0x8c, 0x8c, 0x8c, 0x4c, 0x25,
|
||||
0xc7, 0xc6, 0x52, 0x74, 0x68, 0x28, 0x0d, 0x0d, 0x0d, 0xd9, 0x37, 0x05, 0x73, 0x85, 0x5c, 0x8e,
|
||||
0x8c, 0xa4, 0xfc, 0xb0, 0x30, 0xd2, 0xc6, 0xc7, 0xcb, 0xb0, 0xbc, 0xe1, 0xe1, 0x61, 0x27, 0xa4,
|
||||
0x38, 0x3c, 0x9c, 0x2e, 0x46, 0x44, 0x6c, 0x0e, 0x86, 0xc1, 0x6a, 0xa3, 0xd1, 0x68, 0x63, 0xc8,
|
||||
0x15, 0x40, 0x66, 0xd3, 0xd2, 0xc8, 0xae, 0xd3, 0x51, 0x3e, 0xef, 0x0c, 0x30, 0xbd, 0x5e, 0x4f,
|
||||
0x0c, 0x29, 0x42, 0xdd, 0xae, 0xd1, 0xd0, 0x0c, 0xfa, 0x64, 0x98, 0xc9, 0x64, 0xb2, 0xfc, 0x0e,
|
||||
0x28, 0xb2, 0xbf, 0xbf, 0x7f, 0x2e, 0x28, 0x20, 0x80, 0x6a, 0x62, 0x62, 0x9c, 0x81, 0x66, 0x52,
|
||||
0x52, 0xc8, 0x96, 0x98, 0x48, 0xf9, 0x2a, 0x15, 0xf1, 0x90, 0x33, 0xf8, 0x5a, 0x01, 0x75, 0x24,
|
||||
0x25, 0xd1, 0x8c, 0x56, 0x4b, 0x95, 0xd1, 0xd1, 0xb4, 0x15, 0xe3, 0x07, 0x06, 0x06, 0xbe, 0x7b,
|
||||
0x8a, 0x79, 0x0f, 0x1a, 0x81, 0xf2, 0x5c, 0xda, 0x0c, 0x50, 0x2d, 0x60, 0xb9, 0x9d, 0x9d, 0x9d,
|
||||
0x0b, 0x3c, 0xb9, 0x06, 0xbb, 0x72, 0x00, 0x62, 0xc7, 0x2e, 0x2c, 0x51, 0x51, 0xd4, 0x0c, 0x88,
|
||||
0x05, 0x6d, 0x76, 0x2c, 0xc2, 0x01, 0xd8, 0x2d, 0xa4, 0x2f, 0x38, 0x30, 0x90, 0xba, 0xbb, 0xbb,
|
||||
0xe7, 0x31, 0xef, 0xa8, 0x27, 0x50, 0x33, 0xb4, 0x0c, 0x2d, 0x42, 0x25, 0xa2, 0x6d, 0x12, 0x7a,
|
||||
0x0b, 0x6d, 0x67, 0x18, 0xd2, 0x34, 0xbf, 0x4d, 0xa9, 0xa4, 0x2a, 0xa4, 0xc9, 0x06, 0x88, 0x15,
|
||||
0x67, 0x65, 0x55, 0xab, 0x9d, 0x5f, 0xae, 0xd7, 0xa0, 0x9d, 0x21, 0x5d, 0x5d, 0x5d, 0x5e, 0x21,
|
||||
0x32, 0xc8, 0x01, 0x3d, 0x13, 0xc0, 0xab, 0x02, 0xf4, 0x0e, 0xca, 0x12, 0x69, 0xbc, 0x54, 0x57,
|
||||
0x57, 0x47, 0x0a, 0xfc, 0x1a, 0x10, 0x94, 0x21, 0x96, 0xe0, 0x60, 0xb2, 0xe2, 0x3c, 0xf4, 0x90,
|
||||
0x42, 0xa1, 0xa0, 0xc6, 0xc6, 0x46, 0x0c, 0xa3, 0xd2, 0xb5, 0x8e, 0x43, 0x06, 0xe5, 0x43, 0x4f,
|
||||
0x5c, 0x76, 0xe7, 0x04, 0x61, 0xf2, 0x4e, 0xbe, 0x23, 0x9a, 0xb8, 0x38, 0x2a, 0x14, 0xe9, 0x62,
|
||||
0x80, 0x95, 0x77, 0x87, 0x74, 0x59, 0x71, 0x2e, 0x05, 0x68, 0x4f, 0x46, 0x0a, 0xe1, 0x42, 0x76,
|
||||
0x63, 0xfa, 0x7a, 0xa0, 0x13, 0x50, 0x00, 0x74, 0x1f, 0x5a, 0x62, 0x50, 0x59, 0x59, 0xd9, 0x29,
|
||||
0xd9, 0xc2, 0xec, 0x2e, 0x3e, 0x78, 0x3b, 0x02, 0xdb, 0x00, 0x1b, 0x06, 0x84, 0xff, 0xed, 0x58,
|
||||
0x80, 0x0d, 0x66, 0x28, 0x10, 0x6e, 0xc4, 0xa2, 0x3e, 0x7b, 0x83, 0xb9, 0x82, 0xb8, 0xf8, 0x41,
|
||||
0x5f, 0x55, 0x2a, 0x95, 0x11, 0x90, 0x69, 0x27, 0x04, 0x67, 0xc1, 0x16, 0x66, 0x77, 0xd9, 0xf9,
|
||||
0xe0, 0x11, 0x74, 0x0b, 0xd2, 0x55, 0x8d, 0x9d, 0xc9, 0x8e, 0x73, 0xa4, 0xa6, 0xd2, 0x69, 0xc0,
|
||||
0x35, 0xe8, 0x9f, 0x98, 0x98, 0xf8, 0xe4, 0x09, 0x14, 0x0d, 0x95, 0xb9, 0x80, 0xb8, 0xec, 0xc8,
|
||||
0xc8, 0xc8, 0xa8, 0xea, 0xe9, 0xe9, 0x59, 0xf2, 0xf3, 0xf1, 0xa1, 0x7a, 0xac, 0xda, 0x69, 0x6f,
|
||||
0xc0, 0x64, 0x77, 0x55, 0x56, 0x56, 0x92, 0xec, 0xc6, 0x59, 0x40, 0xf8, 0x9e, 0x3d, 0xc2, 0xa2,
|
||||
0xfc, 0x7d, 0x7d, 0xc9, 0x60, 0x30, 0x2c, 0x78, 0x4b, 0x9f, 0x16, 0x8a, 0x77, 0xa9, 0xfb, 0x42,
|
||||
0xa9, 0x78, 0xdb, 0x4a, 0x5b, 0x5a, 0x5a, 0x96, 0x03, 0xfd, 0xfc, 0xe8, 0x31, 0x82, 0xdc, 0x45,
|
||||
0xaa, 0x5c, 0xdc, 0x75, 0x53, 0x76, 0xe3, 0x6d, 0x9c, 0x4f, 0x03, 0x16, 0x13, 0xe4, 0xef, 0x4f,
|
||||
0xad, 0xad, 0xad, 0x4b, 0xe8, 0x2b, 0xe4, 0xeb, 0x71, 0x0c, 0x32, 0x4a, 0xd2, 0x85, 0x03, 0xa8,
|
||||
0x6c, 0xd9, 0xc0, 0xc5, 0x2d, 0x91, 0x61, 0x0c, 0xe1, 0xe0, 0x68, 0x3b, 0x22, 0xfa, 0x8e, 0x03,
|
||||
0xea, 0xbc, 0x67, 0x4a, 0xf4, 0xb7, 0xb5, 0x3d, 0xa5, 0x8a, 0x8a, 0x37, 0xad, 0xe8, 0x52, 0x32,
|
||||
0xa8, 0x58, 0x92, 0x1e, 0xe2, 0x66, 0xef, 0xaf, 0x46, 0x25, 0xd8, 0x2d, 0x6e, 0x92, 0x90, 0x3b,
|
||||
0xec, 0x6c, 0x7b, 0x7b, 0xfb, 0x52, 0x5f, 0x5f, 0xdf, 0x9c, 0xd9, 0x6c, 0xe6, 0x14, 0x67, 0x43,
|
||||
0x0a, 0xd1, 0x97, 0xdb, 0xdb, 0xdb, 0x3b, 0xdf, 0xd1, 0xd1, 0xb1, 0x58, 0x58, 0xf8, 0x1a, 0x71,
|
||||
0xcf, 0xbf, 0x14, 0xd9, 0x59, 0x05, 0x62, 0x15, 0x41, 0x5d, 0x90, 0xd9, 0x03, 0x5c, 0x86, 0xa5,
|
||||
0x43, 0x1a, 0x51, 0x7d, 0x01, 0x8d, 0x42, 0x37, 0x20, 0x1d, 0xda, 0xb5, 0x4d, 0x4d, 0xa3, 0xd9,
|
||||
0x2b, 0x71, 0x57, 0x81, 0x32, 0x9f, 0xa3, 0xf2, 0x0a, 0xfa, 0xc6, 0x71, 0x84, 0xfa, 0xa1, 0x93,
|
||||
0x1b, 0x50, 0x83, 0xcb, 0x1c, 0x5a, 0x81, 0xc6, 0xd6, 0x7a, 0x01, 0xe9, 0x2c, 0x6e, 0x83, 0x59,
|
||||
0xb3, 0xe2, 0x55, 0x30, 0x41, 0xef, 0xd7, 0xd0, 0xd4, 0xea, 0xb9, 0x21, 0x8e, 0x95, 0xb8, 0xe7,
|
||||
0xf4, 0x6e, 0xa0, 0xbd, 0xf5, 0xa8, 0x5c, 0x83, 0x3a, 0xa0, 0x69, 0x31, 0x81, 0x21, 0xe5, 0xe2,
|
||||
0x81, 0xcd, 0x81, 0x0e, 0x7a, 0x50, 0x8e, 0x48, 0x1d, 0x89, 0xfb, 0xd7, 0xbb, 0xf2, 0x30, 0x27,
|
||||
0x97, 0x7b, 0x01, 0xfd, 0x62, 0x06, 0x85, 0x38, 0x60, 0x6c, 0x5f, 0xda, 0xbd, 0x8e, 0x11, 0x95,
|
||||
0xe2, 0xf5, 0x38, 0x0c, 0xf9, 0xfc, 0x6c, 0x7e, 0x10, 0xeb, 0x25, 0x75, 0x1e, 0x5d, 0xf7, 0x07,
|
||||
0xe5, 0x3f, 0xe8, 0x1f, 0x04, 0xdd, 0x81, 0x6b, 0xb2, 0xf6, 0x49, 0x92, 0x3f, 0x5b, 0x38, 0xf0,
|
||||
0xef, 0x81, 0xae, 0xe3, 0xdd, 0x3c, 0x94, 0x29, 0x49, 0x11, 0xfc, 0x0e, 0xaa, 0x7f, 0x00, 0x16,
|
||||
0xeb, 0x70, 0x69, 0xbf, 0x1f, 0x42, 0x2d, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae,
|
||||
0x42, 0x60, 0x82,
|
||||
};
|
||||
|
||||
const BITMAP_OPAQUE delete_dimension_xpm[1] = {{ png, sizeof( png ), "delete_dimension_xpm" }};
|
||||
|
||||
//EOF
|
||||
@@ -0,0 +1,71 @@
|
||||
|
||||
/* Do not modify this file, it was automatically generated by the
|
||||
* PNG2cpp CMake script, using a *.png file as input.
|
||||
*/
|
||||
|
||||
#include <bitmaps_png/bitmaps_list.h>
|
||||
|
||||
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, 0x5e, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xd5, 0x94, 0x59, 0x48, 0x54,
|
||||
0x61, 0x14, 0xc7, 0xdd, 0x18, 0x9b, 0xdc, 0x77, 0x67, 0xdc, 0x37, 0x94, 0x08, 0x35, 0xd2, 0x97,
|
||||
0x7c, 0x8a, 0x82, 0x16, 0x7d, 0xb2, 0x14, 0xd1, 0x54, 0x88, 0x32, 0x49, 0x2d, 0x24, 0x0a, 0xa4,
|
||||
0xa4, 0x1e, 0x0a, 0xa2, 0x87, 0x1e, 0x2a, 0x8c, 0xe8, 0xa9, 0x90, 0xd2, 0x0a, 0x53, 0x06, 0xea,
|
||||
0x35, 0x0a, 0x69, 0x1b, 0x88, 0x74, 0xc4, 0x10, 0x1a, 0x17, 0x94, 0x12, 0x5a, 0x66, 0x51, 0x1a,
|
||||
0xab, 0xe9, 0xf4, 0x3f, 0xb7, 0x73, 0xe3, 0x7a, 0x99, 0xd1, 0x1c, 0x9f, 0xfa, 0xe0, 0xcf, 0x5c,
|
||||
0xce, 0x77, 0xbf, 0xf3, 0xbb, 0xe7, 0x9c, 0xff, 0x37, 0x41, 0x41, 0x01, 0x2c, 0x22, 0x32, 0x2c,
|
||||
0x2d, 0x2d, 0xdd, 0x1d, 0x1d, 0x1d, 0x75, 0xe1, 0xb9, 0x56, 0xb7, 0x67, 0x9e, 0x9f, 0x9f, 0x7f,
|
||||
0x3b, 0x39, 0x39, 0x39, 0x8d, 0xe7, 0xcd, 0x41, 0x81, 0x2e, 0x86, 0x78, 0x3c, 0x1e, 0x4b, 0x75,
|
||||
0x55, 0x15, 0x85, 0x85, 0x86, 0x52, 0x7f, 0x7f, 0xbf, 0x17, 0xb1, 0x3a, 0x15, 0x32, 0x33, 0x33,
|
||||
0x63, 0x2f, 0xca, 0xc9, 0xa1, 0x94, 0xb8, 0x38, 0x1a, 0x19, 0x19, 0xf9, 0x1c, 0x10, 0x4c, 0x0b,
|
||||
0xd9, 0x12, 0x13, 0x43, 0xb7, 0xcc, 0x66, 0x8a, 0x34, 0x18, 0x54, 0x58, 0x87, 0x0a, 0x69, 0x4e,
|
||||
0x4c, 0xa4, 0x33, 0xc9, 0xc9, 0x81, 0xc3, 0x70, 0xa0, 0xbb, 0xa1, 0xa6, 0x86, 0x4a, 0x01, 0x99,
|
||||
0xcb, 0xcf, 0xa7, 0xc5, 0x82, 0x02, 0x1a, 0x34, 0x99, 0x14, 0x58, 0x4f, 0x4f, 0x0f, 0x15, 0x65,
|
||||
0x67, 0x53, 0x13, 0x92, 0xbb, 0x00, 0x5b, 0xc0, 0xbe, 0x0a, 0x9b, 0x9a, 0x9a, 0x9a, 0x5e, 0x2b,
|
||||
0xa8, 0xe3, 0x64, 0x67, 0x27, 0x65, 0x45, 0x46, 0xd2, 0x38, 0x92, 0x2e, 0x20, 0xa1, 0x3b, 0x23,
|
||||
0x83, 0x1e, 0x26, 0x24, 0xd0, 0x06, 0xb4, 0xb1, 0x11, 0x1f, 0xe0, 0x40, 0x95, 0x1c, 0x63, 0x58,
|
||||
0x33, 0xe2, 0x5c, 0x21, 0xcf, 0x6c, 0xad, 0xa0, 0x60, 0xaf, 0xd7, 0x7b, 0xed, 0x78, 0x7b, 0xbb,
|
||||
0x02, 0x1b, 0x43, 0x52, 0x17, 0x2a, 0x72, 0xe2, 0xcb, 0xc7, 0xf1, 0xe5, 0x0e, 0xb4, 0xcc, 0x95,
|
||||
0x92, 0x42, 0x8e, 0xb4, 0x34, 0xa5, 0x32, 0xae, 0x90, 0xdb, 0xc9, 0xb3, 0x0b, 0x64, 0x4e, 0x7f,
|
||||
0x60, 0x6d, 0x6d, 0x94, 0x15, 0x11, 0x41, 0x36, 0x24, 0x77, 0xc4, 0xc7, 0x93, 0x23, 0x3a, 0x9a,
|
||||
0x1c, 0xb1, 0xb1, 0xf4, 0x35, 0x29, 0x49, 0xa9, 0x6c, 0x5d, 0x10, 0x0d, 0x2c, 0x6d, 0x6e, 0x6e,
|
||||
0xce, 0x15, 0x8b, 0xaa, 0xce, 0x43, 0x0a, 0x20, 0x2a, 0x4a, 0xf9, 0x1d, 0x97, 0x36, 0xf2, 0xcc,
|
||||
0xb8, 0xd5, 0xeb, 0x81, 0x98, 0x67, 0x67, 0x67, 0xdf, 0x6f, 0xca, 0xcb, 0xa3, 0x46, 0x06, 0xa0,
|
||||
0x55, 0x4e, 0x24, 0xe7, 0xaa, 0x9c, 0xdc, 0xba, 0xd4, 0x54, 0x1a, 0xc4, 0x2f, 0x1b, 0xa4, 0xb7,
|
||||
0xb7, 0xf7, 0xaf, 0xf5, 0xf5, 0x2b, 0x0a, 0xda, 0xaa, 0xd3, 0x46, 0x0d, 0xc4, 0xa4, 0x5a, 0xb8,
|
||||
0x89, 0x13, 0xf3, 0xd0, 0x31, 0x27, 0x07, 0x60, 0x17, 0x50, 0xd1, 0x18, 0x66, 0xe5, 0x4e, 0x4f,
|
||||
0x27, 0x77, 0x56, 0x16, 0x0d, 0x2e, 0xb7, 0xfe, 0xb2, 0x4b, 0xcd, 0xbd, 0x5c, 0xe2, 0x7c, 0x3a,
|
||||
0x1d, 0xd2, 0x80, 0x2e, 0x6f, 0x2b, 0x2b, 0xa3, 0xdd, 0x98, 0x81, 0x0b, 0xf6, 0x5d, 0xc0, 0x1c,
|
||||
0x9c, 0x99, 0x99, 0xd4, 0x84, 0xca, 0x62, 0xd0, 0x42, 0x9e, 0xd9, 0x18, 0x40, 0x0b, 0xa8, 0x76,
|
||||
0xb1, 0xb0, 0x50, 0xb9, 0x67, 0x61, 0x21, 0x21, 0x64, 0xb3, 0xd9, 0x9c, 0x5a, 0x90, 0x09, 0xf2,
|
||||
0xf8, 0x00, 0x3d, 0xd6, 0x80, 0xf6, 0xf6, 0xf5, 0xf5, 0x79, 0x23, 0xc3, 0xc3, 0xc9, 0x82, 0x84,
|
||||
0x0c, 0xe3, 0xca, 0x78, 0xf0, 0x13, 0x13, 0x13, 0xa4, 0x18, 0x84, 0xad, 0x9f, 0x9b, 0xab, 0xdc,
|
||||
0x33, 0xbe, 0xd4, 0xd5, 0x95, 0x95, 0xc4, 0x7f, 0x57, 0xfa, 0xd6, 0x99, 0xa4, 0x5d, 0x33, 0x1a,
|
||||
0x10, 0x57, 0x19, 0xab, 0x81, 0xd5, 0xab, 0xb0, 0x5d, 0xec, 0x2e, 0xb4, 0x71, 0x78, 0x78, 0x98,
|
||||
0x4a, 0x4a, 0x4a, 0xae, 0xda, 0xed, 0xf6, 0x7e, 0xd5, 0xfa, 0xa5, 0x70, 0x21, 0x43, 0xac, 0x56,
|
||||
0xeb, 0x04, 0xff, 0xa3, 0xf8, 0x9a, 0x53, 0x81, 0x00, 0x3e, 0x42, 0xcf, 0xe4, 0xb9, 0x49, 0x67,
|
||||
0x08, 0x05, 0x56, 0x51, 0x5e, 0x4e, 0xf8, 0x63, 0xfd, 0x62, 0x46, 0x8b, 0x10, 0x6e, 0x55, 0xad,
|
||||
0xcf, 0x97, 0xfa, 0x40, 0x6d, 0x2d, 0x0d, 0x0c, 0x0c, 0x90, 0xd1, 0x68, 0x1c, 0xf2, 0x67, 0xac,
|
||||
0x2e, 0x49, 0x7e, 0x1d, 0x3a, 0x26, 0xcf, 0x43, 0x3e, 0xdc, 0xb7, 0x87, 0x67, 0x56, 0x5c, 0x5c,
|
||||
0x7c, 0x49, 0xde, 0x69, 0x55, 0xef, 0x19, 0xdb, 0xda, 0x62, 0xb1, 0x0c, 0x19, 0x60, 0x06, 0x84,
|
||||
0x6e, 0xfb, 0x03, 0xbd, 0x92, 0x83, 0x3b, 0xa1, 0x34, 0xe8, 0x97, 0xcc, 0x2e, 0xda, 0xcf, 0xfb,
|
||||
0xdd, 0xf2, 0x7e, 0x2f, 0xd4, 0x02, 0xb5, 0x41, 0x37, 0xa0, 0x6f, 0xd0, 0x4f, 0xa8, 0xc2, 0xd7,
|
||||
0xa1, 0x74, 0x49, 0xfc, 0x09, 0x0a, 0x93, 0xd8, 0x4b, 0x49, 0x54, 0xb7, 0x0a, 0xc8, 0x97, 0x5e,
|
||||
0x68, 0xf2, 0x2c, 0x5b, 0x1d, 0xf2, 0xc2, 0x1b, 0xf9, 0xba, 0x16, 0x71, 0x1d, 0xc7, 0xee, 0x07,
|
||||
0x00, 0x62, 0x3d, 0x80, 0x82, 0xf5, 0x87, 0x9e, 0xac, 0x70, 0x60, 0x11, 0x8a, 0x58, 0x01, 0xd4,
|
||||
0xaa, 0xbb, 0xf8, 0xf5, 0x90, 0x5b, 0xf6, 0x76, 0x68, 0x0f, 0x24, 0x42, 0x3f, 0x56, 0xf9, 0xba,
|
||||
0x7d, 0xff, 0x08, 0x52, 0xd7, 0x69, 0xd9, 0x3b, 0xab, 0x0d, 0x1e, 0x96, 0xe0, 0x3d, 0x1f, 0x07,
|
||||
0xce, 0xc9, 0xde, 0x9d, 0x35, 0x82, 0x54, 0x07, 0x9f, 0x52, 0x03, 0x0d, 0xd0, 0x3b, 0x09, 0x3e,
|
||||
0x87, 0x8e, 0x6a, 0x5e, 0xde, 0x0f, 0x3d, 0x92, 0x3d, 0xb7, 0x24, 0x0e, 0x95, 0xbd, 0x83, 0xd0,
|
||||
0x6b, 0xd9, 0x7b, 0x2a, 0x6e, 0x63, 0xdd, 0x94, 0xd9, 0x7e, 0x97, 0xbd, 0xed, 0x6a, 0xb2, 0x0f,
|
||||
0x3e, 0xda, 0xa4, 0xce, 0x63, 0xd2, 0xc7, 0x5e, 0xa9, 0x0c, 0x78, 0xb5, 0x56, 0xb3, 0x06, 0xb4,
|
||||
0x66, 0xe8, 0x12, 0x2b, 0x5a, 0xe5, 0x1e, 0x5d, 0xd1, 0x54, 0x74, 0x42, 0xaa, 0xb4, 0x8a, 0xb8,
|
||||
0x7d, 0x46, 0xd9, 0xbb, 0x28, 0xf6, 0xb7, 0xea, 0xc4, 0x39, 0xfa, 0xa0, 0x23, 0xfe, 0xec, 0xfd,
|
||||
0xff, 0xaf, 0xdf, 0x05, 0xe7, 0x4a, 0x51, 0xc1, 0x6d, 0x5e, 0xec, 0x00, 0x00, 0x00, 0x00, 0x49,
|
||||
0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
};
|
||||
|
||||
const BITMAP_OPAQUE delete_field_xpm[1] = {{ png, sizeof( png ), "delete_field_xpm" }};
|
||||
|
||||
//EOF
|
||||
@@ -0,0 +1,101 @@
|
||||
|
||||
/* Do not modify this file, it was automatically generated by the
|
||||
* PNG2cpp CMake script, using a *.png file as input.
|
||||
*/
|
||||
|
||||
#include <bitmaps_png/bitmaps_list.h>
|
||||
|
||||
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, 0x05, 0x38, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0x8d, 0x95, 0x6d, 0x50, 0x54,
|
||||
0x75, 0x14, 0xc6, 0x17, 0x16, 0x45, 0x90, 0x78, 0x11, 0x71, 0x44, 0x40, 0x91, 0x5d, 0x61, 0x18,
|
||||
0xd8, 0x25, 0xf4, 0x03, 0xa9, 0x35, 0x18, 0x4d, 0xdf, 0xc2, 0x20, 0x35, 0xb3, 0x1c, 0x3f, 0x94,
|
||||
0x4e, 0x33, 0xd9, 0xd4, 0x34, 0x8d, 0x43, 0x46, 0x4e, 0x6f, 0x4e, 0x63, 0x4e, 0x4d, 0x36, 0x35,
|
||||
0x69, 0x9a, 0x68, 0x35, 0x59, 0x41, 0x96, 0xf9, 0x81, 0x58, 0xc5, 0x77, 0xe5, 0x45, 0x79, 0x87,
|
||||
0x5d, 0x96, 0x17, 0x59, 0x75, 0x05, 0xd4, 0x15, 0xd8, 0x65, 0x41, 0x42, 0x83, 0xa7, 0xe7, 0xac,
|
||||
0x77, 0xed, 0xb6, 0x2e, 0xe2, 0x7f, 0xe6, 0x37, 0xfc, 0xef, 0xbd, 0xdc, 0xf3, 0xdc, 0x73, 0xce,
|
||||
0x73, 0xfe, 0xab, 0xd1, 0xfc, 0xb7, 0x36, 0x90, 0x6f, 0x7d, 0xd0, 0x6b, 0x26, 0x58, 0x00, 0xd6,
|
||||
0xd6, 0xd5, 0xd5, 0xb9, 0x6f, 0xdf, 0xbe, 0x5d, 0xc4, 0xbd, 0x56, 0x75, 0xff, 0x91, 0x81, 0x81,
|
||||
0x81, 0xa3, 0x66, 0xb3, 0xf9, 0x26, 0xf7, 0xd9, 0xbe, 0xef, 0x05, 0x92, 0x7f, 0xe4, 0xff, 0x7c,
|
||||
0xd8, 0x3a, 0x81, 0xc8, 0xba, 0x7d, 0x45, 0x45, 0xe3, 0x81, 0x01, 0x01, 0x58, 0x9d, 0x9f, 0x8f,
|
||||
0xd1, 0xd1, 0xd1, 0x9f, 0x45, 0x4c, 0x44, 0xfa, 0xfb, 0xfb, 0x2b, 0x97, 0x2c, 0x5c, 0x88, 0xd0,
|
||||
0xa9, 0x53, 0x51, 0x5e, 0x5e, 0x3e, 0xc2, 0x7b, 0xcb, 0x7c, 0xdf, 0x7f, 0x81, 0x6c, 0x23, 0x36,
|
||||
0x95, 0x50, 0x27, 0x09, 0xf0, 0x27, 0x32, 0x23, 0x24, 0x04, 0x7f, 0x25, 0x24, 0xe0, 0x89, 0x19,
|
||||
0x33, 0xb0, 0x32, 0x37, 0x57, 0xc4, 0x7e, 0x71, 0xb9, 0x5c, 0x95, 0xd9, 0x59, 0x59, 0xc8, 0x8f,
|
||||
0x8e, 0x46, 0x71, 0x5c, 0x1c, 0xa2, 0x42, 0x43, 0x71, 0xe4, 0xc8, 0x91, 0x11, 0x7f, 0x99, 0x85,
|
||||
0x90, 0x41, 0x32, 0x4c, 0xda, 0x14, 0xb1, 0x2c, 0x95, 0xc8, 0xcc, 0xb2, 0xb2, 0xb2, 0x3b, 0xa1,
|
||||
0x53, 0xa6, 0xe0, 0xec, 0xbc, 0x79, 0x18, 0x4e, 0x4e, 0x46, 0x6f, 0x62, 0x22, 0xb2, 0x22, 0x22,
|
||||
0x3c, 0x99, 0x49, 0x26, 0xcf, 0x45, 0x45, 0x61, 0x80, 0xcf, 0x86, 0x74, 0x3a, 0x1c, 0x98, 0x33,
|
||||
0xc7, 0x93, 0x19, 0xcb, 0xe8, 0xf0, 0x15, 0x5a, 0xa9, 0x04, 0xff, 0x95, 0xbc, 0xa7, 0xec, 0xbf,
|
||||
0x50, 0x09, 0x05, 0xdb, 0x6c, 0xb6, 0x4e, 0x1d, 0xbf, 0x76, 0xd3, 0xac, 0x59, 0x18, 0x4a, 0x4a,
|
||||
0x82, 0x7b, 0xee, 0x5c, 0x74, 0xc7, 0xc6, 0x22, 0x2b, 0x3c, 0x1c, 0x2b, 0x28, 0xd8, 0xcf, 0xbd,
|
||||
0x3b, 0x3e, 0x1e, 0x4e, 0x8a, 0xad, 0x60, 0x66, 0x22, 0xee, 0x74, 0x3a, 0x8f, 0xfa, 0x0a, 0x95,
|
||||
0x28, 0xc1, 0xf3, 0x88, 0x8e, 0x8c, 0x93, 0x1e, 0xa2, 0x6e, 0x76, 0x7c, 0x57, 0x57, 0x97, 0x4d,
|
||||
0xc7, 0x60, 0x9b, 0x66, 0xce, 0xc4, 0x20, 0xbf, 0xda, 0x45, 0x51, 0x17, 0x83, 0x7a, 0xe0, 0xbe,
|
||||
0x9f, 0xf7, 0x24, 0xb3, 0x25, 0x99, 0x99, 0x90, 0x9e, 0x49, 0xef, 0xd4, 0x22, 0x72, 0x71, 0x8b,
|
||||
0xb8, 0xc8, 0x34, 0xe5, 0xde, 0x05, 0x45, 0x38, 0xc7, 0xa7, 0x4f, 0x1e, 0xb1, 0x24, 0x66, 0x56,
|
||||
0xc8, 0x80, 0x22, 0xe0, 0x64, 0x46, 0x4e, 0x66, 0xe4, 0xa2, 0xb8, 0x64, 0x36, 0x91, 0x88, 0xac,
|
||||
0x17, 0x95, 0xa0, 0x76, 0x95, 0xbd, 0x9b, 0x94, 0x7b, 0xbb, 0x7d, 0x84, 0xc4, 0x5d, 0x55, 0x8b,
|
||||
0x19, 0x6c, 0x6d, 0x64, 0x24, 0x5c, 0x34, 0x84, 0x47, 0x88, 0x7b, 0x67, 0x4c, 0x8c, 0xa7, 0x67,
|
||||
0xcf, 0xe7, 0xe5, 0x79, 0x0c, 0xa2, 0xb6, 0xbe, 0x77, 0x1d, 0xf6, 0x63, 0x6f, 0x2f, 0xfd, 0x24,
|
||||
0xd8, 0x2b, 0xe2, 0x75, 0x57, 0x1e, 0xb3, 0x91, 0x9e, 0xb8, 0x18, 0xdc, 0x53, 0x36, 0xfe, 0x1d,
|
||||
0x9c, 0x3d, 0x1b, 0xd7, 0x99, 0xe9, 0xe3, 0x7c, 0xb6, 0x6a, 0xf9, 0xf2, 0x7b, 0xd6, 0xf7, 0x8a,
|
||||
0x44, 0x92, 0xbf, 0x95, 0x80, 0xdb, 0x7c, 0xb0, 0x2a, 0x62, 0xb9, 0xf2, 0x02, 0x33, 0x39, 0x2b,
|
||||
0x0d, 0x96, 0x46, 0x8b, 0xbb, 0xa4, 0xf1, 0x22, 0x26, 0x99, 0xbd, 0xcb, 0xe0, 0x72, 0x3d, 0x44,
|
||||
0x27, 0xf6, 0xd2, 0x28, 0x59, 0xbc, 0x16, 0x37, 0xca, 0x50, 0x7b, 0x87, 0xf5, 0x0d, 0x25, 0x58,
|
||||
0x29, 0x89, 0x56, 0x65, 0x39, 0x95, 0x7c, 0xae, 0x3c, 0xfb, 0xbd, 0xb8, 0xb8, 0x58, 0x4f, 0xc6,
|
||||
0xa7, 0x05, 0x05, 0xc1, 0x3c, 0x7f, 0xbe, 0xc7, 0x75, 0x22, 0x26, 0x8d, 0x97, 0x32, 0x26, 0xd1,
|
||||
0x04, 0x62, 0x90, 0x21, 0xbd, 0x1e, 0xc3, 0x29, 0x29, 0x9e, 0x39, 0x93, 0xa1, 0xae, 0xad, 0xad,
|
||||
0x95, 0x91, 0xd1, 0xec, 0xf1, 0x29, 0x93, 0x9b, 0x84, 0x2b, 0x42, 0x16, 0x9f, 0x67, 0x97, 0x99,
|
||||
0xd5, 0x87, 0x5b, 0x36, 0x6f, 0xc6, 0xdc, 0xb0, 0x30, 0x34, 0x51, 0x6c, 0x35, 0x03, 0x4b, 0xe3,
|
||||
0xfb, 0xfa, 0xfa, 0xaa, 0xc4, 0x20, 0x7a, 0x06, 0x7f, 0x93, 0xce, 0xab, 0x60, 0x56, 0x31, 0x1c,
|
||||
0xd8, 0xfd, 0x1c, 0x6e, 0x39, 0xae, 0x24, 0x58, 0x81, 0x52, 0x36, 0x6f, 0xb0, 0x46, 0x95, 0xeb,
|
||||
0xfe, 0x50, 0x1d, 0x4d, 0x63, 0xa4, 0x5c, 0xe9, 0xd3, 0x47, 0x85, 0x05, 0x05, 0x08, 0xd6, 0x6a,
|
||||
0x3d, 0x73, 0xe2, 0x75, 0xd7, 0x3d, 0xeb, 0xb3, 0x47, 0x21, 0x1c, 0xea, 0x7d, 0x77, 0x45, 0xd6,
|
||||
0xdd, 0x77, 0x86, 0x75, 0xe8, 0xf5, 0xc1, 0x4d, 0x06, 0x43, 0xd4, 0x44, 0xc8, 0x73, 0x95, 0xf3,
|
||||
0x3e, 0x28, 0x29, 0x29, 0x19, 0x97, 0x9e, 0xa9, 0x2d, 0x2c, 0x62, 0x32, 0xd4, 0x72, 0x82, 0xf8,
|
||||
0x15, 0xf1, 0xd4, 0xc9, 0x68, 0x7c, 0xa5, 0xd5, 0x68, 0xc4, 0x83, 0xb0, 0x18, 0x0c, 0x37, 0x5b,
|
||||
0x0c, 0x86, 0xe2, 0x13, 0xa9, 0xa9, 0x8f, 0x39, 0x1c, 0x8e, 0x39, 0xfe, 0xec, 0x2b, 0x27, 0x88,
|
||||
0x1c, 0x57, 0x13, 0x9d, 0xfc, 0x9a, 0x16, 0xa3, 0x71, 0x7d, 0x7b, 0x76, 0x36, 0x46, 0x2e, 0xd9,
|
||||
0xe1, 0xee, 0xb4, 0xc3, 0xd9, 0x66, 0x47, 0x9f, 0xc5, 0x8e, 0x1b, 0xcd, 0x76, 0xf4, 0xd4, 0xdb,
|
||||
0x71, 0xe5, 0xb4, 0x15, 0x5d, 0x3f, 0x99, 0xd0, 0xf6, 0xf2, 0xeb, 0x22, 0x38, 0x56, 0x9a, 0x92,
|
||||
0xb2, 0x45, 0xb1, 0x7d, 0x80, 0x66, 0xb2, 0x65, 0x59, 0xb4, 0x28, 0xb6, 0xd5, 0x60, 0x28, 0xe2,
|
||||
0x57, 0xee, 0x37, 0x1b, 0x0c, 0x15, 0x1d, 0x39, 0x39, 0xb8, 0x75, 0x0b, 0x70, 0xbb, 0x81, 0x81,
|
||||
0x01, 0xc0, 0xe1, 0x00, 0x7a, 0x7b, 0x81, 0xab, 0x57, 0x81, 0x4b, 0x97, 0x80, 0xce, 0x4e, 0xc0,
|
||||
0x6a, 0x05, 0xcc, 0xdb, 0x7f, 0x00, 0x2b, 0x30, 0xfe, 0x4e, 0x5c, 0xdc, 0xdb, 0xca, 0x61, 0xfc,
|
||||
0xe0, 0x65, 0x4e, 0x4b, 0x9b, 0xcd, 0x4c, 0xf6, 0x1c, 0x4f, 0x4d, 0x3d, 0x58, 0x91, 0x96, 0xd6,
|
||||
0xd8, 0xfe, 0x64, 0x0e, 0x06, 0x07, 0xc1, 0x06, 0x03, 0x37, 0x6e, 0x00, 0x3d, 0x3d, 0x80, 0xdd,
|
||||
0x0e, 0xd8, 0x6c, 0x40, 0x47, 0x07, 0xd0, 0xda, 0x0a, 0x34, 0x37, 0x03, 0x0d, 0x0d, 0x40, 0xcb,
|
||||
0x9a, 0x57, 0x71, 0x38, 0x39, 0xb9, 0x9b, 0x61, 0x16, 0x93, 0x20, 0xcd, 0x43, 0x2c, 0x49, 0xff,
|
||||
0xa5, 0xc2, 0xb8, 0xb8, 0xdf, 0x44, 0xa8, 0xaf, 0x0f, 0xb8, 0x7e, 0x1d, 0xe8, 0xee, 0x06, 0xae,
|
||||
0x5c, 0x01, 0xba, 0xba, 0x80, 0xf6, 0x76, 0xc0, 0x62, 0x01, 0x9a, 0x9a, 0x80, 0xfa, 0x7a, 0xe0,
|
||||
0xc2, 0x05, 0xa0, 0xee, 0x93, 0x03, 0x52, 0xc2, 0xf1, 0x67, 0x22, 0x22, 0xf6, 0x1c, 0xd2, 0xe9,
|
||||
0x96, 0xb4, 0x66, 0x64, 0x24, 0x4f, 0x26, 0x24, 0x35, 0x0e, 0x61, 0x46, 0x1b, 0xdb, 0x96, 0xe5,
|
||||
0xe0, 0xda, 0xb5, 0xbb, 0xa5, 0xba, 0xcc, 0xa9, 0xb9, 0x78, 0x11, 0x68, 0x6b, 0x63, 0xa9, 0xcc,
|
||||
0x40, 0x63, 0x23, 0x83, 0xd7, 0x01, 0xe7, 0xcf, 0x03, 0x15, 0x15, 0x40, 0xd5, 0xce, 0xd3, 0xff,
|
||||
0x33, 0x0a, 0xcb, 0x6f, 0x56, 0x0e, 0x67, 0xed, 0x03, 0xd5, 0x68, 0xe1, 0x0d, 0x22, 0x24, 0xa5,
|
||||
0x52, 0xf7, 0xa3, 0xa5, 0xe5, 0x6e, 0xa9, 0x6a, 0x6b, 0x81, 0xea, 0x6a, 0xe0, 0xdc, 0x39, 0xe0,
|
||||
0xd4, 0x29, 0xee, 0xdf, 0xff, 0x11, 0xcd, 0x34, 0x45, 0x4c, 0x50, 0xd0, 0xc1, 0x70, 0xad, 0x76,
|
||||
0xe7, 0xf4, 0xc0, 0xc0, 0x1d, 0x0c, 0xf3, 0x31, 0x49, 0x54, 0x4e, 0x9c, 0x89, 0x85, 0xac, 0xd9,
|
||||
0x39, 0x7e, 0xfb, 0x51, 0x53, 0xc3, 0x0c, 0xaa, 0x80, 0xb3, 0x9c, 0x9a, 0x93, 0x27, 0x81, 0xe3,
|
||||
0xe5, 0x63, 0x68, 0xcc, 0x5d, 0x8b, 0xe2, 0x05, 0x0b, 0xe4, 0xf7, 0xea, 0x7b, 0xf2, 0x2c, 0x59,
|
||||
0x48, 0x8c, 0x64, 0xfa, 0x7d, 0x4e, 0xec, 0xc8, 0xcc, 0x8c, 0xb1, 0x66, 0x64, 0x6c, 0xb3, 0x64,
|
||||
0x64, 0x7c, 0x6a, 0x36, 0x1a, 0xcb, 0x44, 0xc8, 0x5f, 0x3f, 0x2a, 0x39, 0xfb, 0x67, 0xce, 0x00,
|
||||
0x27, 0x4e, 0x00, 0xc7, 0x8e, 0x8e, 0xe1, 0xfc, 0xc6, 0xed, 0x52, 0xaa, 0xb1, 0xa5, 0x61, 0x61,
|
||||
0x26, 0x86, 0xf9, 0x92, 0xc4, 0x28, 0x86, 0xd0, 0xfa, 0xb5, 0x7b, 0x87, 0xd1, 0x18, 0x4f, 0x81,
|
||||
0x3f, 0xab, 0xd2, 0xd2, 0x8e, 0xd5, 0xa4, 0xa7, 0xb7, 0x5b, 0x17, 0x2f, 0x85, 0x65, 0xaf, 0x09,
|
||||
0xcd, 0xbb, 0x4d, 0x68, 0xdc, 0x65, 0x42, 0xfd, 0x37, 0x26, 0xd4, 0x7c, 0x65, 0x42, 0xf5, 0x0e,
|
||||
0x13, 0x2a, 0x3f, 0x2b, 0x45, 0x75, 0xc1, 0x6e, 0x34, 0x3d, 0x9d, 0x8f, 0x06, 0x83, 0xe1, 0xce,
|
||||
0x9a, 0xe8, 0xe8, 0x73, 0x0c, 0x21, 0x27, 0xf3, 0x2a, 0xef, 0xcf, 0xc8, 0x64, 0x4b, 0xe6, 0x60,
|
||||
0xfd, 0x5b, 0xb1, 0xb1, 0x87, 0x1a, 0xd2, 0xd3, 0x47, 0xea, 0xd2, 0xd3, 0x47, 0xfd, 0x41, 0xb3,
|
||||
0x0c, 0xd3, 0xce, 0x8e, 0xad, 0x09, 0x09, 0xe6, 0x79, 0xc1, 0xc1, 0x72, 0x0e, 0xee, 0x25, 0xaf,
|
||||
0x91, 0xa8, 0x87, 0x1a, 0x5a, 0xaf, 0xeb, 0x48, 0x04, 0x79, 0x94, 0x7c, 0xad, 0x04, 0xf1, 0xc7,
|
||||
0x77, 0x64, 0x17, 0x29, 0x24, 0x4f, 0x29, 0x27, 0xfd, 0xa4, 0x22, 0xff, 0x02, 0x58, 0x70, 0xe4,
|
||||
0x4e, 0x94, 0xa5, 0x11, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60,
|
||||
0x82,
|
||||
};
|
||||
|
||||
const BITMAP_OPAQUE delete_glabel_xpm[1] = {{ png, sizeof( png ), "delete_glabel_xpm" }};
|
||||
|
||||
//EOF
|
||||
@@ -0,0 +1,74 @@
|
||||
|
||||
/* Do not modify this file, it was automatically generated by the
|
||||
* PNG2cpp CMake script, using a *.png file as input.
|
||||
*/
|
||||
|
||||
#include <bitmaps_png/bitmaps_list.h>
|
||||
|
||||
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, 0x96, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xb5, 0x95, 0x5b, 0x48, 0x54,
|
||||
0x61, 0x10, 0xc7, 0x67, 0x75, 0x4b, 0xcd, 0xfb, 0x7a, 0xab, 0x34, 0xef, 0xe2, 0x43, 0x59, 0x14,
|
||||
0x04, 0x05, 0x11, 0xf5, 0xd0, 0x53, 0x45, 0x42, 0x05, 0x11, 0x6d, 0x0f, 0x51, 0x78, 0xe9, 0xa2,
|
||||
0x8f, 0x99, 0x52, 0x92, 0x3e, 0x54, 0xae, 0x19, 0xbd, 0x48, 0x11, 0x85, 0x42, 0x08, 0x0b, 0x42,
|
||||
0x62, 0x94, 0x26, 0xf8, 0xd0, 0xcb, 0xaa, 0x98, 0x4b, 0x22, 0x11, 0x78, 0xa1, 0x82, 0x96, 0x42,
|
||||
0xdb, 0xf6, 0x66, 0x5e, 0xd2, 0x9d, 0xfe, 0x73, 0x3c, 0xa7, 0x0e, 0xb6, 0x5b, 0x69, 0xec, 0x07,
|
||||
0xb3, 0xe7, 0x3b, 0xfb, 0x9d, 0x33, 0xbf, 0xf9, 0xcf, 0x37, 0xf3, 0x1d, 0xa2, 0x55, 0x0c, 0x66,
|
||||
0xde, 0x06, 0xcb, 0x0f, 0xb2, 0x66, 0x84, 0xed, 0x85, 0x99, 0xe8, 0x7f, 0x06, 0x1c, 0x54, 0xf5,
|
||||
0xf6, 0xf6, 0xfa, 0xed, 0x76, 0xfb, 0x3c, 0xe6, 0xc7, 0x97, 0xad, 0x45, 0xfa, 0xfd, 0xfe, 0xe7,
|
||||
0xad, 0xad, 0xad, 0x3c, 0x35, 0x35, 0xf5, 0x11, 0xf7, 0x05, 0xab, 0x85, 0x54, 0x5b, 0xad, 0x56,
|
||||
0x36, 0x86, 0x87, 0x73, 0x7c, 0x74, 0x34, 0xf7, 0xf5, 0xf5, 0x2d, 0x68, 0x30, 0x15, 0xd2, 0x55,
|
||||
0x5e, 0x5a, 0xca, 0x72, 0xbb, 0x7d, 0xcb, 0x16, 0x9e, 0x9c, 0x9c, 0x74, 0xac, 0x18, 0xa6, 0x87,
|
||||
0x5c, 0x4f, 0x49, 0x61, 0x73, 0x62, 0xa2, 0x1e, 0x66, 0xd6, 0x20, 0x31, 0x6b, 0xd6, 0x70, 0xdb,
|
||||
0xc6, 0x8d, 0xbc, 0x19, 0x6b, 0x3b, 0x8a, 0x8a, 0x56, 0x06, 0xc3, 0x83, 0x27, 0xda, 0xdb, 0xdb,
|
||||
0x15, 0x48, 0x1d, 0x20, 0xd3, 0x85, 0x85, 0xec, 0x2d, 0x28, 0x60, 0x73, 0x7c, 0xbc, 0x06, 0x63,
|
||||
0x0d, 0xf2, 0x62, 0xfd, 0x7a, 0xf6, 0xe5, 0xe5, 0xf1, 0x7b, 0x98, 0x06, 0x73, 0x3a, 0x9d, 0x1f,
|
||||
0x96, 0x3c, 0x35, 0xd0, 0x11, 0xb2, 0xd0, 0x45, 0xaa, 0x25, 0x63, 0x10, 0x50, 0x6d, 0x79, 0x59,
|
||||
0x19, 0xc7, 0xc1, 0xd1, 0x50, 0x4e, 0x0e, 0xfb, 0x00, 0xf1, 0xe1, 0xea, 0xce, 0xcc, 0xe4, 0x53,
|
||||
0xb1, 0xb1, 0x4a, 0x00, 0x02, 0xe9, 0x42, 0x10, 0xde, 0x4d, 0x9b, 0xd8, 0x9b, 0x9d, 0xad, 0xc0,
|
||||
0x2a, 0x92, 0x92, 0x78, 0xad, 0xd1, 0xc8, 0x23, 0x23, 0x23, 0x8b, 0x44, 0xb7, 0xc9, 0x04, 0xc8,
|
||||
0x02, 0x8c, 0xa9, 0x91, 0x1e, 0x93, 0x95, 0xc2, 0x03, 0x80, 0x12, 0x67, 0x67, 0x67, 0xed, 0x47,
|
||||
0x0e, 0x1d, 0xe2, 0xb4, 0xa8, 0x28, 0x7e, 0x25, 0xce, 0x00, 0xf1, 0x20, 0x45, 0xae, 0xb4, 0x34,
|
||||
0xbe, 0x82, 0xc8, 0xbb, 0x91, 0x4a, 0x0f, 0xe6, 0xf2, 0x9f, 0xac, 0x55, 0xe1, 0x5e, 0x20, 0x9d,
|
||||
0x9d, 0x9d, 0x78, 0x9d, 0x2b, 0x48, 0x71, 0x6c, 0x21, 0x9b, 0x02, 0x5a, 0xb2, 0x87, 0xf8, 0x35,
|
||||
0x04, 0x80, 0x99, 0xe6, 0xe6, 0xe6, 0xec, 0xc5, 0x87, 0x0f, 0x73, 0x4a, 0x64, 0x24, 0xf7, 0xa5,
|
||||
0xa6, 0x2a, 0x8e, 0xdd, 0xc9, 0xc9, 0xec, 0x82, 0x53, 0x97, 0xc9, 0xa4, 0xcc, 0x3d, 0x48, 0xdd,
|
||||
0xe5, 0xb8, 0x38, 0x05, 0xd2, 0xd1, 0xd1, 0x21, 0x90, 0xca, 0x5f, 0x5e, 0x9a, 0x28, 0x01, 0x80,
|
||||
0xc1, 0x9f, 0xb0, 0x46, 0x7a, 0x10, 0x0c, 0x06, 0x65, 0x43, 0xa2, 0x2c, 0x35, 0x22, 0x82, 0x87,
|
||||
0xe1, 0x5c, 0x20, 0x5f, 0x91, 0x3e, 0x17, 0xf6, 0xcb, 0x8d, 0x54, 0x5d, 0xc3, 0x5c, 0xa7, 0xa4,
|
||||
0xf2, 0xf7, 0x8d, 0xb8, 0x4b, 0x29, 0x80, 0x8c, 0xe8, 0x94, 0xdd, 0x09, 0x00, 0x92, 0x12, 0xee,
|
||||
0x2e, 0x2b, 0x29, 0x51, 0xf6, 0xc4, 0x26, 0x4a, 0x12, 0x12, 0xd8, 0x05, 0x05, 0x72, 0x15, 0x45,
|
||||
0x65, 0x00, 0x49, 0x81, 0x0c, 0x0c, 0x0c, 0x2c, 0xe2, 0xf9, 0x63, 0x81, 0xcb, 0xab, 0x81, 0x52,
|
||||
0x61, 0x6f, 0x74, 0x30, 0xcb, 0x32, 0x48, 0xd7, 0x85, 0xf3, 0xe7, 0x79, 0x1d, 0x22, 0x7e, 0x8a,
|
||||
0xe8, 0xdd, 0x48, 0x9f, 0xa8, 0x70, 0x6b, 0x69, 0x93, 0x54, 0xa6, 0xa7, 0xf3, 0x19, 0xb5, 0x1a,
|
||||
0x6d, 0x36, 0xdb, 0x42, 0x70, 0xd8, 0x4d, 0xca, 0x80, 0xfb, 0x71, 0x1d, 0xac, 0x46, 0xdf, 0x8c,
|
||||
0xa2, 0xa4, 0x1b, 0xfb, 0xe0, 0xcd, 0xc8, 0x60, 0xcf, 0x86, 0x0d, 0x8a, 0xf3, 0x66, 0x28, 0x7a,
|
||||
0x25, 0x20, 0xb5, 0x10, 0x3c, 0xa8, 0xc8, 0x53, 0x50, 0x98, 0x10, 0x13, 0xc3, 0xfd, 0xfd, 0xfd,
|
||||
0x7f, 0x80, 0xdd, 0xa0, 0x4c, 0x00, 0xde, 0x69, 0xb0, 0xb6, 0xb7, 0x6d, 0xcf, 0x6a, 0xaa, 0xab,
|
||||
0x39, 0x5a, 0xfa, 0x04, 0x00, 0x29, 0x6d, 0x6f, 0x56, 0x96, 0x02, 0x93, 0x8d, 0x17, 0xc1, 0xb2,
|
||||
0x67, 0x83, 0x00, 0xcb, 0x9a, 0x2f, 0x3f, 0x9f, 0xbd, 0xe8, 0xb5, 0x93, 0x48, 0xad, 0xc0, 0xc6,
|
||||
0xc6, 0xc6, 0x66, 0x82, 0x77, 0xe9, 0x2d, 0x2a, 0x00, 0xc4, 0x21, 0xa0, 0xd2, 0x9e, 0x52, 0x6e,
|
||||
0x6e, 0x6e, 0x66, 0x63, 0x58, 0x18, 0x3f, 0x12, 0x67, 0x70, 0xe4, 0xcb, 0xcd, 0xe5, 0x2a, 0x44,
|
||||
0x2d, 0x1b, 0x2f, 0xcd, 0xac, 0x14, 0x08, 0xaa, 0x71, 0x08, 0x01, 0x48, 0x43, 0x4f, 0xa2, 0xd7,
|
||||
0xf6, 0x21, 0x88, 0x6c, 0xa4, 0xd2, 0xe1, 0x70, 0x38, 0xff, 0x7c, 0x24, 0xdc, 0xa4, 0x42, 0x80,
|
||||
0x3e, 0x19, 0x2c, 0x06, 0xbe, 0xf7, 0xfa, 0x1e, 0x37, 0x35, 0x35, 0x71, 0x38, 0x60, 0x0f, 0x00,
|
||||
0xab, 0x52, 0x9b, 0x51, 0x2d, 0xe1, 0x1a, 0x94, 0xfe, 0x90, 0x56, 0xfa, 0x2f, 0x01, 0xdb, 0x0f,
|
||||
0x48, 0x26, 0x9e, 0x1b, 0x1d, 0x1d, 0xf5, 0x62, 0x7d, 0xd7, 0xdf, 0xcf, 0x9f, 0x06, 0xda, 0x0a,
|
||||
0xd8, 0x17, 0x81, 0xdd, 0x1f, 0xbe, 0xef, 0x17, 0x58, 0x98, 0xc1, 0xf0, 0x5b, 0x09, 0xeb, 0x4b,
|
||||
0x1f, 0x7d, 0xa1, 0x28, 0x19, 0x1f, 0x1f, 0xff, 0x47, 0x88, 0x36, 0x1a, 0x69, 0x3b, 0x60, 0x4e,
|
||||
0x55, 0x99, 0xbf, 0xa5, 0xa5, 0x85, 0x7b, 0x7a, 0x7a, 0xfc, 0xcb, 0xfb, 0x44, 0x83, 0xd5, 0xd5,
|
||||
0xd5, 0xf1, 0xc4, 0xc4, 0x84, 0x67, 0x65, 0x90, 0x5f, 0xca, 0x76, 0x03, 0xe6, 0x15, 0x58, 0xf1,
|
||||
0x93, 0xe2, 0x85, 0x7a, 0x5b, 0xfd, 0x95, 0x20, 0xe7, 0x62, 0x2c, 0xec, 0x34, 0x2c, 0x6f, 0xf5,
|
||||
0x5f, 0x3d, 0x0b, 0xed, 0x81, 0xf9, 0xd4, 0x6a, 0x9c, 0x03, 0xfc, 0x20, 0x85, 0x6c, 0x58, 0xe8,
|
||||
0x00, 0x6c, 0x46, 0x85, 0x7d, 0x43, 0x5a, 0xf7, 0x87, 0x0e, 0xb6, 0xf4, 0x59, 0x99, 0x57, 0xcf,
|
||||
0xc5, 0x69, 0x5c, 0xf7, 0x86, 0x0e, 0xd6, 0x48, 0x47, 0x01, 0xf8, 0xae, 0x2a, 0x73, 0xc3, 0x76,
|
||||
0x86, 0x32, 0x8d, 0x66, 0xd8, 0xa2, 0x0a, 0xfb, 0x8a, 0x26, 0xdf, 0x11, 0xca, 0x34, 0x9e, 0x03,
|
||||
0xc4, 0xaf, 0xc2, 0x3e, 0xe3, 0x43, 0x9a, 0x1f, 0x4a, 0xd8, 0x25, 0xdd, 0x21, 0x7c, 0x95, 0x42,
|
||||
0x3a, 0x2c, 0x74, 0x16, 0x66, 0x85, 0x65, 0x05, 0x5a, 0xfe, 0x01, 0x70, 0xc0, 0xa2, 0x23, 0x6c,
|
||||
0x9d, 0x3b, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
};
|
||||
|
||||
const BITMAP_OPAQUE delete_line_xpm[1] = {{ png, sizeof( png ), "delete_line_xpm" }};
|
||||
|
||||
//EOF
|
||||
@@ -0,0 +1,82 @@
|
||||
|
||||
/* Do not modify this file, it was automatically generated by the
|
||||
* PNG2cpp CMake script, using a *.png file as input.
|
||||
*/
|
||||
|
||||
#include <bitmaps_png/bitmaps_list.h>
|
||||
|
||||
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, 0x14, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xdd, 0x96, 0x6d, 0x4c, 0x53,
|
||||
0x67, 0x14, 0xc7, 0xbb, 0x2d, 0x59, 0xd4, 0x28, 0x82, 0x28, 0xc8, 0x14, 0x04, 0x14, 0x89, 0xcb,
|
||||
0x36, 0x8d, 0x46, 0xb2, 0x19, 0xa3, 0x41, 0xb7, 0xf9, 0x36, 0x67, 0xdb, 0x5b, 0x6c, 0xa9, 0xa5,
|
||||
0xbc, 0x88, 0x2e, 0x6c, 0x85, 0xd1, 0x25, 0x53, 0x63, 0x82, 0x12, 0x3f, 0x38, 0x70, 0xdf, 0xbb,
|
||||
0xe0, 0x07, 0x12, 0x48, 0x96, 0x18, 0x20, 0x8b, 0x2c, 0xe1, 0x23, 0x0e, 0x4a, 0x20, 0x34, 0x71,
|
||||
0x69, 0xa5, 0x05, 0x16, 0x02, 0x99, 0x6c, 0xbc, 0x24, 0x83, 0xb6, 0xf4, 0xcd, 0x25, 0x2c, 0xe1,
|
||||
0xec, 0xfc, 0x1f, 0xb9, 0xf5, 0x82, 0xb6, 0x10, 0x4d, 0xfc, 0xe0, 0x4d, 0xfe, 0xe9, 0xed, 0x39,
|
||||
0xcf, 0x3d, 0xbf, 0xfb, 0x9c, 0x97, 0x7b, 0xaf, 0x4a, 0xf5, 0x12, 0x07, 0x11, 0x7d, 0x34, 0x31,
|
||||
0x31, 0xf1, 0xd7, 0xcc, 0xcc, 0x8c, 0x87, 0xcf, 0x33, 0x96, 0xf9, 0xf6, 0xb2, 0xef, 0xef, 0xd9,
|
||||
0xd9, 0x59, 0x37, 0x9f, 0xa7, 0xab, 0x5e, 0xf6, 0x00, 0x64, 0x68, 0x68, 0xc8, 0xf7, 0xde, 0xe6,
|
||||
0xcd, 0xb4, 0x27, 0x3b, 0x9b, 0x26, 0x27, 0x27, 0x1f, 0xcb, 0x30, 0x40, 0x06, 0x07, 0x07, 0xfd,
|
||||
0x69, 0xc9, 0xc9, 0xf4, 0xfe, 0xce, 0x9d, 0xf0, 0xfd, 0x19, 0x13, 0xa6, 0x56, 0xab, 0x13, 0x25,
|
||||
0x49, 0xfa, 0x54, 0x96, 0x56, 0xab, 0xfd, 0x18, 0xf6, 0x92, 0x92, 0x92, 0x35, 0xcd, 0xcd, 0xcd,
|
||||
0x97, 0x38, 0x50, 0x10, 0x90, 0x6f, 0x58, 0xd2, 0xa6, 0x4d, 0x02, 0x36, 0x3e, 0x3e, 0x3e, 0xe5,
|
||||
0x70, 0x38, 0xac, 0x1e, 0x8f, 0x27, 0x08, 0x48, 0x25, 0x4b, 0x93, 0x94, 0x14, 0x1f, 0xa6, 0xd3,
|
||||
0xeb, 0x2a, 0x8f, 0x5b, 0x4e, 0x47, 0xf2, 0x6a, 0xf2, 0x7d, 0x90, 0xc6, 0xa0, 0x8d, 0x14, 0x14,
|
||||
0x14, 0xbc, 0x53, 0x51, 0x51, 0x71, 0xca, 0xe5, 0x7e, 0xb4, 0x00, 0x88, 0x65, 0xcb, 0x16, 0x8a,
|
||||
0xe4, 0xe6, 0xd2, 0x1c, 0x07, 0x92, 0x12, 0x13, 0x69, 0x4f, 0x56, 0x16, 0x75, 0x77, 0x77, 0x93,
|
||||
0x80, 0x30, 0x20, 0xcc, 0xf0, 0xc0, 0xae, 0x5d, 0x51, 0x18, 0xd2, 0xf8, 0x1c, 0x48, 0x2a, 0x90,
|
||||
0xbe, 0xcd, 0xbe, 0x9b, 0x47, 0x2a, 0x47, 0x96, 0xd0, 0x99, 0xb2, 0x73, 0xb3, 0x00, 0x59, 0xad,
|
||||
0xd6, 0xb3, 0x0f, 0x9d, 0xbf, 0x2f, 0x6c, 0x58, 0xbb, 0x96, 0xee, 0xa4, 0xa6, 0x52, 0x98, 0x03,
|
||||
0x85, 0x33, 0x33, 0xc9, 0x9f, 0x9e, 0x4e, 0xda, 0x84, 0x04, 0x42, 0xe6, 0x2c, 0xfc, 0x1b, 0xda,
|
||||
0xb6, 0x8d, 0x42, 0x19, 0x19, 0x02, 0x56, 0xc9, 0x37, 0x05, 0x38, 0xea, 0xb9, 0x6a, 0x90, 0x4e,
|
||||
0xa7, 0x3b, 0x6e, 0xf9, 0xf9, 0x4a, 0xa8, 0xd3, 0xfe, 0x80, 0x12, 0x18, 0xf6, 0x23, 0x07, 0x09,
|
||||
0x31, 0x24, 0x98, 0x96, 0x46, 0xde, 0x94, 0x14, 0x6a, 0x63, 0x48, 0x80, 0x77, 0x1a, 0xdc, 0xba,
|
||||
0x95, 0x42, 0xdb, 0xb7, 0x8b, 0x9d, 0x01, 0x82, 0x9a, 0xa1, 0x76, 0x51, 0x40, 0x71, 0x71, 0xf1,
|
||||
0xe5, 0xf2, 0xf2, 0xf2, 0x6e, 0x53, 0x91, 0x69, 0x54, 0x09, 0x3a, 0x7b, 0x51, 0x3d, 0xcf, 0x76,
|
||||
0x3b, 0xfb, 0x1f, 0x1d, 0xac, 0xcd, 0xff, 0xef, 0xb3, 0x3f, 0x8a, 0xe8, 0x41, 0xcf, 0x6f, 0x02,
|
||||
0x56, 0xcf, 0x69, 0x0b, 0x30, 0x64, 0x8e, 0x83, 0xce, 0x6d, 0xdc, 0x48, 0x73, 0x5c, 0x33, 0xfc,
|
||||
0xff, 0x8e, 0xcf, 0x53, 0xd9, 0xe6, 0x74, 0x3a, 0x9f, 0x2c, 0x81, 0xe0, 0x28, 0x2b, 0x2b, 0xfb,
|
||||
0xa5, 0xb5, 0xb5, 0x95, 0x6c, 0x3f, 0xd9, 0x48, 0x09, 0xd2, 0x7d, 0xad, 0xa7, 0xfe, 0xfe, 0x7e,
|
||||
0x6a, 0x69, 0x69, 0xa1, 0xc3, 0xb7, 0x4f, 0x0a, 0x9b, 0xe5, 0xf1, 0x4d, 0x6a, 0x6a, 0x6a, 0xa2,
|
||||
0xb7, 0x38, 0x5d, 0x8e, 0x45, 0x88, 0x7f, 0xfd, 0x7a, 0x01, 0x6c, 0x63, 0x38, 0xd2, 0x88, 0x9a,
|
||||
0x35, 0x36, 0x36, 0xf6, 0x3d, 0x97, 0x32, 0x80, 0xba, 0xba, 0xba, 0xe8, 0x7e, 0xfb, 0x7d, 0xd2,
|
||||
0x7f, 0x65, 0x24, 0x43, 0xd5, 0x05, 0xa1, 0xa2, 0x4b, 0x66, 0x74, 0x8e, 0x80, 0x15, 0x96, 0x5f,
|
||||
0xa0, 0x6b, 0xf5, 0xd7, 0xc9, 0xe9, 0x72, 0x92, 0xe8, 0xbc, 0xc5, 0x74, 0x89, 0x1d, 0xb1, 0x02,
|
||||
0x6c, 0xf3, 0x73, 0xea, 0xf4, 0x0c, 0xce, 0xe5, 0xfa, 0x0d, 0x0f, 0x0f, 0x47, 0x96, 0xcf, 0x59,
|
||||
0x14, 0x34, 0x35, 0x35, 0x15, 0x53, 0x3c, 0xa0, 0xc4, 0x33, 0x14, 0xed, 0xae, 0x20, 0x17, 0x1e,
|
||||
0x35, 0x01, 0xcc, 0xc1, 0x69, 0xc3, 0x39, 0x6c, 0xfe, 0x1d, 0x3b, 0x48, 0x62, 0xff, 0xf2, 0x39,
|
||||
0x53, 0x2d, 0xce, 0x49, 0x1b, 0xcf, 0xc9, 0x42, 0x2c, 0xc8, 0xf4, 0xf4, 0x34, 0x8d, 0x8e, 0x8e,
|
||||
0x0a, 0x48, 0x15, 0xdf, 0x79, 0x98, 0x5b, 0x1a, 0xdd, 0x85, 0x2e, 0xb3, 0xf0, 0x0e, 0x90, 0xc6,
|
||||
0x3b, 0x1c, 0x3c, 0xc4, 0x90, 0x30, 0xb7, 0x74, 0x20, 0x27, 0x27, 0x3a, 0x67, 0xdc, 0xde, 0x9e,
|
||||
0x67, 0xdd, 0x26, 0x49, 0x39, 0x66, 0xb3, 0xb9, 0x93, 0x61, 0xff, 0xc6, 0x02, 0x0d, 0x0c, 0x0c,
|
||||
0x50, 0xc2, 0xba, 0x75, 0x54, 0x2f, 0xb7, 0x37, 0x5a, 0x78, 0xb1, 0xbb, 0x50, 0x33, 0xd1, 0x8d,
|
||||
0x98, 0xb1, 0xdd, 0xbb, 0xc5, 0x9c, 0x61, 0xa8, 0x91, 0x62, 0xde, 0xd5, 0xf8, 0x92, 0xf4, 0x19,
|
||||
0x0c, 0x86, 0xcc, 0xea, 0xea, 0xea, 0x99, 0x58, 0xbb, 0xf2, 0x7a, 0xbd, 0xd4, 0xdb, 0xdb, 0xfb,
|
||||
0x14, 0xc6, 0x69, 0xaa, 0x62, 0x00, 0x20, 0x48, 0x67, 0x20, 0x10, 0xa0, 0x9e, 0x9e, 0x1e, 0x01,
|
||||
0xc3, 0x9c, 0x59, 0x00, 0x79, 0xea, 0xf3, 0xe1, 0xb1, 0x15, 0x85, 0x68, 0x34, 0x9a, 0x14, 0xde,
|
||||
0xd1, 0xbd, 0x86, 0x86, 0x86, 0x48, 0xbc, 0x3a, 0x29, 0x61, 0x32, 0x04, 0xb5, 0x93, 0x7d, 0x80,
|
||||
0x61, 0xa8, 0xb1, 0x13, 0x97, 0xcb, 0x35, 0xbf, 0x04, 0x82, 0xa3, 0xb4, 0xb4, 0xf4, 0x9e, 0xcd,
|
||||
0x66, 0x9b, 0xe7, 0x29, 0x8e, 0xdb, 0x10, 0x72, 0x40, 0xb7, 0xdb, 0x4d, 0x63, 0x63, 0x63, 0x51,
|
||||
0x88, 0xd2, 0x87, 0x14, 0x8f, 0x8c, 0x8c, 0x50, 0x5d, 0x5d, 0x5d, 0x67, 0xcc, 0xf6, 0x5e, 0x09,
|
||||
0xa2, 0xac, 0x19, 0x14, 0xcb, 0x67, 0xb7, 0xdb, 0x09, 0x31, 0x5f, 0x19, 0xb4, 0x92, 0x10, 0x2b,
|
||||
0x2e, 0xe8, 0xd9, 0xc0, 0x9a, 0x84, 0xe4, 0x81, 0xed, 0xeb, 0xeb, 0xa3, 0xf3, 0x26, 0x3d, 0x9d,
|
||||
0xbf, 0x5c, 0x28, 0xa4, 0x37, 0x19, 0x44, 0x8a, 0xe0, 0xc3, 0x9a, 0x42, 0x5e, 0x0b, 0x19, 0xf8,
|
||||
0xda, 0xf6, 0x5f, 0xdb, 0xe3, 0x83, 0x56, 0xfb, 0x08, 0x82, 0x4e, 0xd4, 0xa8, 0xa9, 0xa3, 0xa3,
|
||||
0x43, 0xf8, 0xb0, 0x46, 0xb6, 0xe3, 0x5a, 0xc4, 0x40, 0xac, 0x17, 0x82, 0x56, 0xfb, 0x50, 0x95,
|
||||
0xed, 0x47, 0xbe, 0x3f, 0x31, 0xcf, 0x81, 0x1e, 0xc2, 0x87, 0x35, 0x4a, 0x10, 0x62, 0x20, 0x16,
|
||||
0x62, 0xc6, 0x7c, 0x55, 0xc7, 0x7b, 0x4d, 0xec, 0xbf, 0x75, 0xd4, 0x27, 0xdb, 0x0f, 0x5f, 0xfd,
|
||||
0xfc, 0x1f, 0xb6, 0x7f, 0x08, 0x1f, 0xd6, 0x28, 0x41, 0x88, 0xb1, 0xe2, 0x37, 0xc1, 0x6b, 0x03,
|
||||
0xc9, 0xaf, 0xf2, 0x83, 0x37, 0xf2, 0xfd, 0x90, 0xa6, 0x50, 0xfb, 0x04, 0xc1, 0x58, 0xc7, 0x4e,
|
||||
0x5f, 0xfc, 0x32, 0x98, 0x57, 0x73, 0xcc, 0x0b, 0x7d, 0x61, 0x3e, 0x17, 0xe4, 0x21, 0xff, 0x00,
|
||||
0x3e, 0xb5, 0x51, 0x1b, 0xde, 0xf7, 0xc3, 0x11, 0x1f, 0x74, 0xd4, 0x7a, 0x32, 0x82, 0x18, 0x2b,
|
||||
0x82, 0x8c, 0x46, 0x63, 0x92, 0xf2, 0xe3, 0x84, 0x03, 0x7d, 0x02, 0x3b, 0xff, 0xbe, 0xcb, 0x3a,
|
||||
0x20, 0x8b, 0x3f, 0x5a, 0xf6, 0xd7, 0xd6, 0xd6, 0xbe, 0x2d, 0x6e, 0x4e, 0xa7, 0x3b, 0xa4, 0xbc,
|
||||
0x86, 0x6f, 0x20, 0x59, 0xf5, 0xc6, 0x1f, 0xff, 0x03, 0x5a, 0x5d, 0x9a, 0xeb, 0x46, 0xcc, 0x01,
|
||||
0x08, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
};
|
||||
|
||||
const BITMAP_OPAQUE delete_module_xpm[1] = {{ png, sizeof( png ), "delete_module_xpm" }};
|
||||
|
||||
//EOF
|
||||
@@ -0,0 +1,68 @@
|
||||
|
||||
/* Do not modify this file, it was automatically generated by the
|
||||
* PNG2cpp CMake script, using a *.png file as input.
|
||||
*/
|
||||
|
||||
#include <bitmaps_png/bitmaps_list.h>
|
||||
|
||||
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, 0x33, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xe5, 0x96, 0xbb, 0x4f, 0x93,
|
||||
0x61, 0x14, 0xc6, 0x8b, 0x01, 0x0a, 0x02, 0xa5, 0xdc, 0xef, 0xd0, 0x42, 0x29, 0x43, 0xd3, 0xc5,
|
||||
0xbf, 0x81, 0x81, 0x85, 0xa0, 0xc4, 0x26, 0x46, 0x07, 0x9d, 0x5c, 0x74, 0x71, 0x60, 0x04, 0xdb,
|
||||
0x26, 0x54, 0xd8, 0x28, 0x8d, 0x2c, 0x2c, 0xcc, 0x0c, 0x48, 0x25, 0x26, 0x2d, 0x96, 0xd6, 0x10,
|
||||
0x12, 0x47, 0x42, 0x70, 0x20, 0x20, 0x21, 0x2c, 0x9d, 0x54, 0x7a, 0x23, 0x85, 0x80, 0x1e, 0x9f,
|
||||
0xe7, 0xf5, 0x2b, 0x96, 0x0a, 0x94, 0x1a, 0xc3, 0xe2, 0x9b, 0x9c, 0xbc, 0x97, 0xaf, 0x3d, 0xbf,
|
||||
0xef, 0x9c, 0xe7, 0x9c, 0xb7, 0xd5, 0xe9, 0x0a, 0x1c, 0x22, 0x72, 0x0b, 0x36, 0xb5, 0xbb, 0xbb,
|
||||
0x9b, 0xc6, 0xec, 0xbc, 0xe0, 0xf9, 0xf0, 0xfe, 0xfe, 0x7e, 0xe2, 0xe8, 0xe8, 0x28, 0x88, 0xb5,
|
||||
0x21, 0xaf, 0xc3, 0xa8, 0x4e, 0xe7, 0x81, 0xa5, 0x39, 0xe7, 0x40, 0x66, 0x5f, 0x8e, 0x8d, 0x49,
|
||||
0x51, 0x51, 0x91, 0x4c, 0x7b, 0xbd, 0xd8, 0xca, 0x84, 0xd3, 0xe9, 0xf4, 0xc0, 0xd2, 0x91, 0x48,
|
||||
0x64, 0x21, 0x1c, 0x0e, 0x9f, 0x56, 0x94, 0x95, 0xc9, 0xe0, 0xc0, 0x80, 0xa4, 0xd3, 0xe9, 0x8f,
|
||||
0x79, 0x61, 0x00, 0x1c, 0xc3, 0x84, 0x73, 0x2e, 0xc4, 0x50, 0x5a, 0x2a, 0xe3, 0x0d, 0x0d, 0x52,
|
||||
0x5e, 0x5c, 0xac, 0x60, 0x6b, 0x6b, 0x6b, 0xa7, 0xf3, 0xf3, 0xf3, 0xb2, 0xb2, 0xb2, 0x22, 0x15,
|
||||
0x7a, 0xbd, 0x8c, 0xd4, 0xd5, 0x89, 0xb5, 0xb2, 0xf2, 0x7a, 0x30, 0x0d, 0xa2, 0x4c, 0x03, 0xb9,
|
||||
0x33, 0x90, 0x70, 0x67, 0xa7, 0x1c, 0xf6, 0xf5, 0xc9, 0x62, 0x6b, 0xeb, 0x19, 0x0c, 0x91, 0x28,
|
||||
0x88, 0xbb, 0xb6, 0x56, 0x52, 0x3d, 0x3d, 0xf2, 0xb9, 0xbb, 0xfb, 0x0c, 0x86, 0x34, 0xbe, 0xbf,
|
||||
0x10, 0x62, 0xb1, 0x58, 0xf4, 0xd3, 0x46, 0xa3, 0xbc, 0x30, 0x99, 0xc4, 0x87, 0x99, 0x7b, 0x80,
|
||||
0xde, 0x59, 0xcd, 0x66, 0xe9, 0x37, 0x18, 0x24, 0x6e, 0xb5, 0x2a, 0x67, 0x49, 0x3c, 0x7f, 0xa3,
|
||||
0x45, 0x56, 0x56, 0x52, 0x22, 0xae, 0xea, 0x6a, 0x49, 0x76, 0x74, 0xa8, 0x73, 0x3e, 0x1f, 0xa9,
|
||||
0xaf, 0x17, 0xa6, 0x11, 0x9a, 0x1d, 0x5c, 0x08, 0xb1, 0xdb, 0xed, 0x9f, 0x26, 0xdd, 0x6e, 0x09,
|
||||
0x04, 0x02, 0xc2, 0x19, 0xfb, 0xcd, 0x68, 0x34, 0x7a, 0x67, 0x6f, 0x6f, 0xef, 0x8b, 0xb9, 0xbd,
|
||||
0x5d, 0x86, 0x6b, 0x6a, 0xe4, 0xa0, 0xab, 0x4b, 0x92, 0x58, 0x27, 0x9a, 0x9b, 0x65, 0x09, 0x2f,
|
||||
0xe3, 0xab, 0xaa, 0x92, 0x78, 0x53, 0x93, 0x24, 0x5a, 0x5a, 0x14, 0x8c, 0x91, 0x31, 0x42, 0x6a,
|
||||
0x86, 0x97, 0xbc, 0xff, 0xcb, 0xfb, 0x1c, 0x04, 0x9f, 0xd3, 0x9d, 0xc0, 0xc4, 0xf8, 0xdc, 0x28,
|
||||
0xee, 0x57, 0x6e, 0x81, 0xe3, 0x33, 0x73, 0x79, 0x5c, 0x52, 0xfd, 0xac, 0x5a, 0xec, 0x7e, 0xbb,
|
||||
0xac, 0xef, 0xac, 0x4b, 0x0f, 0x1c, 0x0d, 0xe1, 0xed, 0xbf, 0xc2, 0x69, 0x1c, 0x11, 0xc5, 0xe0,
|
||||
0x34, 0x06, 0x78, 0x1c, 0xda, 0x24, 0x00, 0x1b, 0x07, 0xf8, 0x36, 0x52, 0xbc, 0x1c, 0x5a, 0x96,
|
||||
0xd1, 0xf5, 0xd1, 0x85, 0xdf, 0x61, 0xcc, 0xe9, 0x52, 0x84, 0xd0, 0x4c, 0x0f, 0x4c, 0x12, 0x0c,
|
||||
0x06, 0xcf, 0x81, 0xb8, 0xe7, 0x39, 0x9f, 0x13, 0xb6, 0xb1, 0xb3, 0x21, 0x9d, 0x88, 0xe4, 0x31,
|
||||
0xa3, 0x20, 0x04, 0xe9, 0x8c, 0x69, 0x6b, 0x1f, 0xd6, 0x4c, 0x63, 0x38, 0x12, 0x16, 0xc7, 0x07,
|
||||
0x87, 0x28, 0xdf, 0x59, 0xa0, 0x2b, 0x23, 0x72, 0x8e, 0x3b, 0x55, 0x44, 0x7c, 0xce, 0x2f, 0x87,
|
||||
0xc2, 0x21, 0x95, 0x16, 0x0f, 0xf5, 0x22, 0x08, 0xd1, 0xc5, 0x10, 0x45, 0x1c, 0x9a, 0x2c, 0x61,
|
||||
0x9f, 0x29, 0x90, 0xc9, 0xcd, 0xc9, 0xef, 0xca, 0xf7, 0x65, 0x85, 0x40, 0x4d, 0x26, 0x5c, 0x2e,
|
||||
0xa5, 0x11, 0x9a, 0x44, 0x69, 0x64, 0xb3, 0xd9, 0x4a, 0x91, 0x6b, 0xc7, 0xea, 0xea, 0xea, 0x69,
|
||||
0x25, 0x04, 0x1e, 0x83, 0x63, 0xea, 0xc3, 0xd4, 0x31, 0x65, 0x84, 0x30, 0x6d, 0x89, 0xb6, 0x36,
|
||||
0x59, 0x6c, 0x6c, 0x54, 0x30, 0xef, 0xd4, 0x94, 0xea, 0xb3, 0x4b, 0x4b, 0x9b, 0x30, 0x1f, 0xde,
|
||||
0x52, 0x55, 0x1d, 0x66, 0x0d, 0x32, 0xa8, 0x9a, 0x91, 0x25, 0x0c, 0xc7, 0x49, 0x94, 0x38, 0x9d,
|
||||
0x52, 0x7c, 0x46, 0xf6, 0x04, 0xf6, 0x0d, 0x7b, 0x9e, 0xa7, 0x50, 0xda, 0x7e, 0xac, 0xcb, 0x91,
|
||||
0x42, 0xad, 0xa9, 0x5d, 0x85, 0xf4, 0x51, 0xa8, 0x11, 0x80, 0xbb, 0xd0, 0x22, 0x65, 0xb1, 0x48,
|
||||
0x0a, 0xa5, 0x9e, 0x44, 0xe5, 0xb9, 0x51, 0x04, 0x84, 0x53, 0xb3, 0x7b, 0x4c, 0x21, 0xce, 0x0f,
|
||||
0x7b, 0x7b, 0x55, 0x9f, 0xb1, 0xa9, 0x79, 0x83, 0xe0, 0xba, 0x3a, 0x2c, 0x04, 0xf4, 0xc8, 0xef,
|
||||
0xf7, 0xff, 0xd0, 0x23, 0x25, 0xaf, 0xe1, 0x94, 0xce, 0x18, 0x19, 0x21, 0xbc, 0x11, 0xb6, 0xb7,
|
||||
0xb7, 0xc5, 0x8c, 0x28, 0x86, 0xa1, 0x11, 0xfb, 0x8c, 0x4d, 0xcd, 0xe6, 0x66, 0x93, 0x63, 0x78,
|
||||
0xaf, 0x0d, 0xd2, 0x60, 0x4f, 0x33, 0xb0, 0x21, 0x44, 0x96, 0xe9, 0x13, 0x5e, 0x3f, 0x33, 0x33,
|
||||
0x33, 0xb2, 0xb5, 0xb5, 0x25, 0xec, 0xb3, 0x7e, 0x44, 0x96, 0x05, 0x99, 0xe5, 0xf5, 0x55, 0x10,
|
||||
0x28, 0x1b, 0xd6, 0x04, 0xf1, 0xb5, 0x66, 0x74, 0xe0, 0x42, 0x15, 0x1a, 0x61, 0x6c, 0x6a, 0xde,
|
||||
0x20, 0xce, 0xeb, 0x40, 0xae, 0x02, 0x69, 0xb0, 0x87, 0xb0, 0x00, 0x0b, 0x84, 0xfb, 0x0c, 0x88,
|
||||
0x86, 0x61, 0x83, 0xbd, 0xe5, 0x4f, 0x48, 0x5e, 0x48, 0x3e, 0x50, 0xee, 0xc8, 0x06, 0xe5, 0xfb,
|
||||
0x20, 0x7f, 0x4f, 0x4e, 0xb2, 0xbf, 0x90, 0x0d, 0xca, 0x3e, 0x2f, 0xd0, 0xe8, 0xd3, 0x93, 0x0d,
|
||||
0x4a, 0xe5, 0x7e, 0xe8, 0x1f, 0x81, 0x68, 0xa9, 0x9b, 0x8f, 0xe8, 0xc6, 0x34, 0xfa, 0x6f, 0x40,
|
||||
0xe7, 0xfe, 0x9c, 0xe4, 0x01, 0x1d, 0x6b, 0xa0, 0xe3, 0xbf, 0x01, 0xfd, 0xf1, 0x77, 0x2b, 0x4f,
|
||||
0x7b, 0xa4, 0xf3, 0x0a, 0x7f, 0x13, 0xe3, 0x27, 0xd1, 0x9a, 0x9b, 0x57, 0x27, 0xbf, 0x8f, 0x11,
|
||||
0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
};
|
||||
|
||||
const BITMAP_OPAQUE delete_net_xpm[1] = {{ png, sizeof( png ), "delete_net_xpm" }};
|
||||
|
||||
//EOF
|
||||
@@ -0,0 +1,66 @@
|
||||
|
||||
/* Do not modify this file, it was automatically generated by the
|
||||
* PNG2cpp CMake script, using a *.png file as input.
|
||||
*/
|
||||
|
||||
#include <bitmaps_png/bitmaps_list.h>
|
||||
|
||||
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, 0x09, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xed, 0x94, 0x5d, 0x48, 0x93,
|
||||
0x61, 0x14, 0xc7, 0x9f, 0xa5, 0x85, 0xdf, 0xba, 0xf9, 0x3d, 0xa7, 0xce, 0xf9, 0x95, 0xe1, 0x45,
|
||||
0x20, 0x41, 0x17, 0x62, 0x4e, 0xcc, 0x51, 0x22, 0x81, 0x90, 0x8b, 0xba, 0x0a, 0x4a, 0xba, 0x0e,
|
||||
0xba, 0xe8, 0x6e, 0x53, 0x21, 0xd2, 0x44, 0xbb, 0xd5, 0x9b, 0xb1, 0x9b, 0x2e, 0xc2, 0x76, 0xe5,
|
||||
0x95, 0xe0, 0x85, 0x46, 0xdd, 0xe9, 0xb0, 0x6c, 0x6d, 0xcc, 0x46, 0x30, 0xb1, 0x12, 0x74, 0xaf,
|
||||
0xbe, 0x9b, 0xeb, 0xf3, 0xf4, 0x3f, 0x73, 0xaf, 0xcd, 0x35, 0xbf, 0x86, 0x79, 0xd5, 0x81, 0x3f,
|
||||
0x7b, 0x5e, 0x9e, 0x3d, 0xe7, 0xf7, 0x9e, 0x73, 0xfe, 0xcf, 0x2b, 0x44, 0x12, 0x41, 0x44, 0x0f,
|
||||
0x16, 0x16, 0x16, 0x7e, 0x84, 0xc3, 0xe1, 0x29, 0xac, 0xb3, 0xe2, 0xf6, 0x9a, 0x96, 0x97, 0x97,
|
||||
0x3f, 0xf9, 0xfd, 0xfe, 0xcf, 0x58, 0x5f, 0x10, 0xc9, 0x06, 0x0e, 0x3f, 0xb4, 0xd9, 0x6c, 0x74,
|
||||
0x4a, 0xa5, 0xa2, 0xee, 0xae, 0x2e, 0x02, 0x6c, 0x56, 0x81, 0x31, 0xc4, 0xe3, 0xf1, 0x04, 0x74,
|
||||
0xc5, 0xc5, 0x54, 0x56, 0x58, 0x48, 0x6e, 0xb7, 0x5b, 0x4a, 0x0a, 0xa6, 0x40, 0xce, 0xa4, 0xa4,
|
||||
0xd0, 0x60, 0x51, 0x11, 0xe9, 0x33, 0x32, 0x62, 0x61, 0x97, 0x14, 0x88, 0x59, 0xad, 0xa6, 0x1b,
|
||||
0x50, 0x52, 0x30, 0xfc, 0xf9, 0xa6, 0xdd, 0x6e, 0x8f, 0x40, 0xec, 0x5a, 0x2d, 0x05, 0xeb, 0xeb,
|
||||
0xc9, 0xa5, 0xd7, 0xef, 0xc0, 0x5c, 0x2e, 0x17, 0xe9, 0x00, 0xef, 0xc9, 0xcd, 0x25, 0xc9, 0x60,
|
||||
0xa0, 0x8d, 0xda, 0xda, 0x1d, 0x98, 0xd7, 0xeb, 0x95, 0x8e, 0x02, 0x1a, 0xb8, 0x65, 0x36, 0x53,
|
||||
0x65, 0x7a, 0x3a, 0xf9, 0xaa, 0xab, 0x49, 0xae, 0xa9, 0x21, 0x19, 0xa0, 0x77, 0x80, 0x32, 0xec,
|
||||
0x74, 0x6a, 0x2a, 0xf5, 0x64, 0x67, 0x53, 0x40, 0xa7, 0xa3, 0xcd, 0xca, 0x4a, 0x92, 0x01, 0x9b,
|
||||
0x28, 0x2b, 0x23, 0x15, 0x5a, 0xec, 0x70, 0x38, 0x68, 0xff, 0xec, 0x7d, 0xa2, 0x57, 0xf4, 0x8b,
|
||||
0x31, 0x61, 0x15, 0x16, 0x80, 0xd4, 0xb2, 0x2c, 0xcf, 0x5f, 0x6e, 0x6d, 0xa5, 0x86, 0xac, 0x2c,
|
||||
0xfa, 0x50, 0x51, 0x41, 0x9b, 0xe5, 0xe5, 0xb4, 0x51, 0x5a, 0x4a, 0x8b, 0xf9, 0xf9, 0x64, 0xcd,
|
||||
0xcc, 0xa4, 0x35, 0x54, 0xc4, 0xcf, 0x9b, 0x80, 0x39, 0xd0, 0xc2, 0x34, 0xc0, 0x47, 0x47, 0x46,
|
||||
0x70, 0x94, 0x06, 0x0f, 0x02, 0x3d, 0x87, 0x08, 0x5a, 0x8c, 0x56, 0xa5, 0x0e, 0x85, 0x42, 0x73,
|
||||
0x9d, 0x1d, 0x1d, 0x54, 0x8b, 0xc4, 0x1e, 0x24, 0x93, 0xd0, 0x9a, 0x80, 0x46, 0x43, 0x01, 0xb4,
|
||||
0x49, 0x02, 0x50, 0x02, 0xcc, 0x81, 0xdf, 0xf4, 0x43, 0x43, 0x12, 0x80, 0x14, 0x18, 0x2a, 0x7b,
|
||||
0x63, 0x6c, 0x6e, 0xa6, 0x06, 0xb4, 0x6c, 0x1d, 0x49, 0x03, 0x98, 0xcb, 0x3a, 0xaa, 0x64, 0xd8,
|
||||
0x0c, 0xa0, 0x5c, 0xc9, 0x93, 0xa1, 0x21, 0x86, 0x8c, 0x1c, 0x6e, 0x30, 0x89, 0x41, 0xdb, 0x16,
|
||||
0xc6, 0x9b, 0x9b, 0x31, 0x13, 0xae, 0x22, 0x90, 0x97, 0x17, 0x81, 0xf1, 0xda, 0x8d, 0x0a, 0xf5,
|
||||
0x98, 0x63, 0xbc, 0xf5, 0x8f, 0xda, 0xba, 0xa6, 0xa5, 0xa5, 0xa5, 0x80, 0x1e, 0x06, 0xe8, 0xce,
|
||||
0xc9, 0xa1, 0x35, 0xcc, 0x83, 0x5b, 0x25, 0x15, 0x14, 0x6c, 0x8b, 0x67, 0x84, 0x3d, 0x17, 0x4c,
|
||||
0x60, 0x40, 0xb5, 0x9d, 0x26, 0x13, 0xa1, 0xd5, 0x2f, 0x0f, 0x86, 0xc5, 0x80, 0xf0, 0xe7, 0x46,
|
||||
0xe5, 0x9e, 0xf4, 0x70, 0x05, 0x70, 0x16, 0x0f, 0x9d, 0x87, 0x3f, 0x81, 0x96, 0x19, 0x91, 0xd8,
|
||||
0x5b, 0x52, 0x12, 0x31, 0x88, 0x5c, 0x55, 0x45, 0xef, 0x21, 0x3d, 0xe6, 0xa8, 0x54, 0x76, 0x14,
|
||||
0xd0, 0xb0, 0xa9, 0xbd, 0x9d, 0xaa, 0xd3, 0xd2, 0x48, 0x62, 0x6b, 0xc3, 0xbe, 0x6c, 0xe3, 0x09,
|
||||
0xb4, 0x8a, 0x67, 0xd2, 0x50, 0x57, 0x47, 0xf5, 0x48, 0xcc, 0x6e, 0x64, 0xeb, 0xf3, 0x3d, 0x9b,
|
||||
0xc1, 0x3e, 0x37, 0x62, 0x7c, 0x7c, 0x7c, 0x1f, 0x7b, 0x93, 0x50, 0x01, 0x30, 0x15, 0x05, 0xf9,
|
||||
0xa4, 0x6f, 0xd2, 0x45, 0xa7, 0xd3, 0x19, 0x2a, 0x44, 0x35, 0x77, 0x31, 0x0b, 0x19, 0x17, 0xf2,
|
||||
0x05, 0xaa, 0x61, 0xc8, 0xd3, 0xd1, 0x51, 0x6e, 0xd1, 0x97, 0x0e, 0xa3, 0x91, 0xce, 0xc2, 0x14,
|
||||
0x7c, 0xcf, 0x58, 0xe7, 0xb0, 0x6e, 0x6f, 0x69, 0x21, 0xbe, 0x16, 0x89, 0x21, 0x16, 0xd1, 0x88,
|
||||
0xe4, 0xce, 0x28, 0x44, 0xd1, 0xc7, 0xe1, 0xd7, 0xc3, 0xf7, 0x15, 0xd8, 0x55, 0xcc, 0x48, 0x81,
|
||||
0x20, 0x1e, 0xb3, 0x1b, 0x83, 0xc1, 0xe0, 0x9c, 0x02, 0x8b, 0x81, 0x38, 0xb1, 0xa7, 0x49, 0x04,
|
||||
0xd1, 0x21, 0xe9, 0x6a, 0x1c, 0x44, 0x51, 0x78, 0x6c, 0x6e, 0xec, 0x1e, 0xc3, 0xb4, 0x18, 0xbc,
|
||||
0x02, 0x89, 0xb5, 0x3e, 0xc3, 0xae, 0xa0, 0xc5, 0xa6, 0xb6, 0xb6, 0x48, 0x25, 0x7f, 0x20, 0x16,
|
||||
0xa1, 0xdd, 0x25, 0xab, 0xb0, 0xed, 0x01, 0xd9, 0x96, 0x55, 0xcc, 0x4e, 0xfb, 0xa6, 0xaf, 0x6d,
|
||||
0x7d, 0xdf, 0x7a, 0xe5, 0x97, 0xfc, 0x03, 0xf1, 0xe7, 0x27, 0x7d, 0x93, 0x25, 0x48, 0xfe, 0x2c,
|
||||
0x2a, 0x4d, 0xec, 0xc0, 0xe9, 0x58, 0x65, 0x15, 0xd7, 0xf7, 0x72, 0xd6, 0x89, 0x81, 0x7a, 0x77,
|
||||
0xc9, 0x2a, 0xe6, 0x0f, 0x48, 0xb6, 0xf2, 0xd7, 0x99, 0x58, 0xf5, 0x8b, 0xaa, 0xc3, 0x7d, 0x76,
|
||||
0x06, 0x44, 0x33, 0x0e, 0xfc, 0xdc, 0xe7, 0x8d, 0x6f, 0x8b, 0x63, 0x8b, 0x3e, 0x71, 0x07, 0xfa,
|
||||
0x1a, 0x07, 0xf9, 0x05, 0x3d, 0x12, 0xc7, 0x1e, 0x16, 0x61, 0x40, 0xe2, 0xb7, 0x51, 0xc8, 0x2a,
|
||||
0x9e, 0xcf, 0x8b, 0x7f, 0x16, 0x09, 0xbe, 0xde, 0xff, 0x41, 0x27, 0x0e, 0xfa, 0x0d, 0x13, 0x53,
|
||||
0xbd, 0xcc, 0xf6, 0x5b, 0xb0, 0xdb, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42,
|
||||
0x60, 0x82,
|
||||
};
|
||||
|
||||
const BITMAP_OPAQUE delete_node_xpm[1] = {{ png, sizeof( png ), "delete_node_xpm" }};
|
||||
|
||||
//EOF
|
||||
@@ -0,0 +1,85 @@
|
||||
|
||||
/* Do not modify this file, it was automatically generated by the
|
||||
* PNG2cpp CMake script, using a *.png file as input.
|
||||
*/
|
||||
|
||||
#include <bitmaps_png/bitmaps_list.h>
|
||||
|
||||
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, 0x41, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xa5, 0x95, 0x6d, 0x4c, 0x5b,
|
||||
0x65, 0x14, 0xc7, 0x5b, 0x29, 0x65, 0x94, 0xbe, 0xdc, 0x5b, 0xda, 0x5b, 0x18, 0x2f, 0x61, 0x85,
|
||||
0x51, 0x12, 0x9d, 0x62, 0x8c, 0xd9, 0x17, 0x63, 0x7c, 0xd9, 0xb2, 0x4d, 0x43, 0xcc, 0xec, 0x36,
|
||||
0xdd, 0x82, 0x73, 0xc9, 0x12, 0xfd, 0x00, 0x62, 0x16, 0x31, 0x4b, 0x16, 0x60, 0xf8, 0xc1, 0x49,
|
||||
0x32, 0x35, 0x0e, 0xb6, 0x00, 0x3a, 0x0b, 0x24, 0x26, 0x23, 0xda, 0x80, 0x8e, 0x97, 0x62, 0x3b,
|
||||
0xda, 0x88, 0x64, 0x1f, 0xdc, 0x26, 0x62, 0x42, 0x44, 0xd8, 0xa2, 0xd1, 0x69, 0x44, 0x1d, 0x2b,
|
||||
0xd0, 0x66, 0xb4, 0x85, 0x1e, 0xff, 0xcf, 0xf5, 0xde, 0xad, 0xad, 0x60, 0xa1, 0x9c, 0xe4, 0x9f,
|
||||
0xfb, 0xf6, 0x3c, 0xe7, 0x77, 0x9f, 0x73, 0xfe, 0xcf, 0xbd, 0x0a, 0x45, 0x8a, 0x41, 0x44, 0x8d,
|
||||
0xe3, 0xe3, 0xe3, 0x01, 0x1c, 0x4f, 0x26, 0xdc, 0x57, 0x87, 0x42, 0xa1, 0xee, 0x89, 0x89, 0x09,
|
||||
0x3f, 0xce, 0x0f, 0x28, 0x36, 0x12, 0x48, 0xf0, 0xce, 0xc9, 0xfa, 0x7a, 0x62, 0xa7, 0x6f, 0x35,
|
||||
0x34, 0xe0, 0x92, 0x4e, 0xc9, 0x90, 0xc5, 0xc5, 0xc5, 0x7e, 0x7b, 0x45, 0x05, 0xa5, 0xa7, 0xa5,
|
||||
0x91, 0xd3, 0xe9, 0x5c, 0xc6, 0xbd, 0x17, 0x37, 0x04, 0xb1, 0x68, 0x34, 0xd4, 0x9d, 0x97, 0x27,
|
||||
0x1e, 0x25, 0x58, 0x93, 0x0c, 0x29, 0x37, 0x18, 0xa8, 0x23, 0x37, 0x97, 0xb4, 0x6a, 0x75, 0x6a,
|
||||
0x30, 0x4c, 0xd8, 0x7b, 0xba, 0xa9, 0x49, 0x4c, 0x3e, 0xb6, 0x65, 0x0b, 0x05, 0x4b, 0x4b, 0xe9,
|
||||
0x5a, 0x41, 0x81, 0x78, 0xdd, 0x50, 0x57, 0x47, 0x22, 0x44, 0xaf, 0xa7, 0x9b, 0x85, 0x85, 0x14,
|
||||
0x28, 0x2e, 0xa6, 0x9e, 0xfc, 0x7c, 0xd2, 0x66, 0x64, 0xd0, 0xd0, 0xd0, 0xd0, 0xd2, 0x7a, 0x41,
|
||||
0xbb, 0x3f, 0x6c, 0x6f, 0x27, 0x7e, 0xd3, 0x26, 0xfa, 0x9a, 0x25, 0xb3, 0x5a, 0x69, 0x01, 0xc7,
|
||||
0x2b, 0x16, 0x0b, 0x59, 0x32, 0x33, 0xa9, 0x5c, 0xa7, 0xa3, 0x5f, 0x72, 0x72, 0x68, 0x01, 0xf0,
|
||||
0x40, 0x51, 0x11, 0x39, 0x70, 0x5f, 0x87, 0xb1, 0x23, 0x23, 0x23, 0xa1, 0x54, 0x4a, 0x57, 0xdb,
|
||||
0x7c, 0xe6, 0x8c, 0x08, 0xfb, 0x0a, 0xe5, 0x99, 0xdf, 0xbc, 0x99, 0xe6, 0x90, 0xf0, 0xba, 0xd1,
|
||||
0x48, 0xbf, 0x65, 0x67, 0xd3, 0x9c, 0x20, 0x88, 0xf7, 0x1c, 0x26, 0x93, 0x08, 0x71, 0xbb, 0xdd,
|
||||
0x21, 0xf6, 0x82, 0xa9, 0xf6, 0xa9, 0xb6, 0xbd, 0xad, 0x8d, 0x38, 0x24, 0xf2, 0xb1, 0xe4, 0x90,
|
||||
0x1f, 0x7d, 0xf1, 0x73, 0x1c, 0xcd, 0x01, 0xd0, 0xc9, 0xf3, 0xa4, 0xbf, 0x07, 0xd9, 0xb3, 0x11,
|
||||
0xd7, 0x31, 0x0b, 0x4f, 0x3c, 0xbc, 0x6d, 0x1b, 0xd9, 0xb5, 0x5a, 0xf2, 0x23, 0xf1, 0x6d, 0x94,
|
||||
0x8d, 0xc1, 0x18, 0xa8, 0x18, 0x3d, 0x3b, 0x72, 0xf8, 0x30, 0x33, 0xc8, 0x85, 0xf5, 0xe4, 0x55,
|
||||
0xc6, 0x6a, 0x7a, 0x7a, 0x3a, 0x23, 0x12, 0x89, 0xf4, 0x1d, 0xb4, 0xdb, 0xe9, 0x41, 0x24, 0xff,
|
||||
0xd9, 0x6c, 0xfe, 0x77, 0x45, 0x80, 0xb1, 0x23, 0x2b, 0xe3, 0x35, 0x28, 0x17, 0xb0, 0x46, 0xb8,
|
||||
0x13, 0xf1, 0xf6, 0xaa, 0x99, 0x4d, 0x2e, 0x93, 0x4d, 0xf0, 0x72, 0x0d, 0x66, 0x2f, 0xdf, 0x2f,
|
||||
0x0c, 0xf3, 0x97, 0x05, 0x37, 0xe7, 0x36, 0xf5, 0x73, 0xef, 0x5b, 0xcf, 0x17, 0x3e, 0x1d, 0x0c,
|
||||
0x06, 0x07, 0x65, 0x77, 0xfd, 0x0a, 0x57, 0xb1, 0x7e, 0xcc, 0x23, 0xb1, 0x13, 0x65, 0x1b, 0x05,
|
||||
0x68, 0x1e, 0x96, 0x67, 0x06, 0x61, 0x6e, 0x14, 0x60, 0x10, 0xc9, 0xfa, 0xf1, 0x30, 0xd3, 0xa8,
|
||||
0x49, 0x67, 0xf1, 0x1a, 0x1d, 0x82, 0x97, 0x5f, 0x16, 0x7c, 0x3c, 0x25, 0xaa, 0xe6, 0x87, 0x2a,
|
||||
0xaa, 0xa9, 0xaa, 0xa2, 0x92, 0xac, 0x2c, 0xba, 0x09, 0xc7, 0x05, 0x60, 0x71, 0x96, 0xd4, 0x01,
|
||||
0x23, 0x68, 0xb0, 0x67, 0x38, 0x58, 0x99, 0x19, 0x84, 0xb9, 0x91, 0x59, 0xff, 0x5b, 0x3c, 0xd7,
|
||||
0xa8, 0x54, 0xd4, 0xd5, 0xd5, 0x45, 0xf1, 0x10, 0x9f, 0xf1, 0xca, 0x4a, 0x00, 0x59, 0x3b, 0xae,
|
||||
0x3e, 0x41, 0x43, 0x1e, 0x97, 0xe8, 0x26, 0xb6, 0x21, 0x03, 0x25, 0x25, 0xd4, 0x01, 0x97, 0xb1,
|
||||
0x6b, 0x8f, 0xc7, 0x13, 0x69, 0x69, 0x6e, 0xbe, 0x6b, 0xfd, 0xa0, 0xcd, 0x46, 0x6f, 0xa0, 0xac,
|
||||
0xf9, 0xd0, 0xd4, 0xd4, 0xd4, 0xcc, 0x5d, 0x90, 0xe0, 0x33, 0x76, 0xfc, 0x1f, 0x44, 0xd6, 0xa1,
|
||||
0xef, 0x0f, 0x90, 0xcb, 0x3d, 0x28, 0x26, 0x7f, 0x05, 0xe5, 0x92, 0x20, 0xe1, 0xa5, 0xa5, 0xa5,
|
||||
0x67, 0x98, 0x1b, 0x65, 0x58, 0x25, 0x7a, 0xc6, 0x20, 0x93, 0x93, 0x93, 0x7f, 0xe2, 0x7e, 0x99,
|
||||
0x08, 0xc9, 0xf6, 0x65, 0x97, 0xfd, 0xa7, 0x5c, 0x5e, 0x3e, 0xba, 0xfb, 0xb3, 0x9d, 0xb3, 0x27,
|
||||
0xfa, 0x8e, 0xff, 0x65, 0x77, 0xee, 0xbd, 0x65, 0xbe, 0x74, 0xef, 0xf9, 0xc1, 0xf1, 0xfd, 0xe2,
|
||||
0xca, 0x72, 0xe0, 0x30, 0x58, 0x38, 0x32, 0x36, 0x36, 0x76, 0x08, 0x69, 0xd2, 0x64, 0xeb, 0x9f,
|
||||
0x6d, 0x69, 0x21, 0x2b, 0x7a, 0x14, 0x07, 0x61, 0x61, 0x19, 0xe6, 0xea, 0x12, 0xdf, 0xbc, 0x75,
|
||||
0xe0, 0xdc, 0x1f, 0x14, 0x13, 0xae, 0xcb, 0x83, 0x7f, 0xc3, 0x18, 0x51, 0xf9, 0xf9, 0xf3, 0xdf,
|
||||
0x3d, 0x47, 0x5f, 0xde, 0x18, 0x0a, 0x54, 0x57, 0x57, 0x9f, 0x47, 0x8a, 0x72, 0x28, 0x53, 0x72,
|
||||
0x26, 0x83, 0x1d, 0x85, 0xba, 0xa1, 0xd2, 0x38, 0x13, 0x98, 0x87, 0xf9, 0x0b, 0xb1, 0x90, 0xfb,
|
||||
0x2f, 0xda, 0x02, 0xd1, 0x68, 0x94, 0x12, 0xe3, 0xd9, 0x9e, 0x5d, 0xb7, 0x63, 0xc7, 0x19, 0xbb,
|
||||
0xf4, 0xb3, 0x98, 0xde, 0x0c, 0xb1, 0x4d, 0x69, 0x94, 0x41, 0xab, 0x06, 0xca, 0xe4, 0x8a, 0x4d,
|
||||
0xb0, 0xe7, 0xf3, 0x5d, 0x7e, 0x5a, 0x21, 0x5e, 0xeb, 0xab, 0xba, 0x15, 0x3b, 0xce, 0xf4, 0xa9,
|
||||
0x21, 0x80, 0xe9, 0x6c, 0x45, 0x95, 0x50, 0x1e, 0x74, 0x5f, 0x32, 0xd0, 0x27, 0xb1, 0x09, 0x4a,
|
||||
0xfa, 0x8b, 0xee, 0x60, 0x53, 0x2e, 0x27, 0x82, 0x9e, 0xec, 0x7d, 0xdc, 0x1f, 0xb7, 0x22, 0x87,
|
||||
0xb8, 0xa2, 0x4e, 0xe8, 0x28, 0x54, 0x28, 0xf7, 0x69, 0xd5, 0xb0, 0x78, 0xb8, 0x63, 0x89, 0x3d,
|
||||
0x3a, 0xee, 0x7c, 0x73, 0x26, 0x1c, 0x0e, 0x8b, 0x30, 0x94, 0x31, 0x7a, 0x6e, 0xe0, 0xec, 0x4c,
|
||||
0xe2, 0x18, 0x43, 0x7d, 0xd6, 0x4f, 0x98, 0xde, 0x01, 0x1d, 0x81, 0x0a, 0x92, 0x82, 0xb8, 0x5e,
|
||||
0xae, 0xc8, 0xec, 0xe3, 0xc3, 0x89, 0x89, 0x1e, 0xf8, 0xa2, 0x2c, 0xf8, 0x42, 0xcf, 0xbe, 0xd9,
|
||||
0x47, 0x7a, 0x1f, 0x5a, 0x58, 0xc9, 0xea, 0x19, 0xdb, 0xd3, 0x47, 0x31, 0xbd, 0x15, 0xb2, 0xb3,
|
||||
0xc2, 0x24, 0x2d, 0x1d, 0x6b, 0xa2, 0x79, 0x90, 0xfb, 0x60, 0x2d, 0xfb, 0x48, 0x16, 0xff, 0x9e,
|
||||
0xf6, 0x77, 0xcc, 0xeb, 0x81, 0xd8, 0x6f, 0xfc, 0x31, 0x48, 0x97, 0xd4, 0x0c, 0xe2, 0x80, 0x0a,
|
||||
0x85, 0x06, 0xdf, 0xb3, 0x4b, 0x6b, 0x81, 0x18, 0x3b, 0xf5, 0x7e, 0xa5, 0x5e, 0x39, 0x80, 0x79,
|
||||
0x1f, 0x49, 0xfd, 0xb1, 0x42, 0xe9, 0x6b, 0xff, 0x4a, 0xe7, 0x2b, 0x8c, 0x7c, 0x9b, 0xbe, 0x55,
|
||||
0x70, 0xf3, 0x77, 0x56, 0x02, 0x98, 0xdd, 0xdc, 0xb2, 0xfe, 0x84, 0xe6, 0x86, 0x52, 0xa3, 0xbc,
|
||||
0x28, 0xb9, 0xed, 0x18, 0xf4, 0xe8, 0x5a, 0x57, 0x13, 0x1b, 0x2a, 0xf6, 0xd9, 0x53, 0x6d, 0x55,
|
||||
0xed, 0xd4, 0x55, 0x6b, 0x1c, 0x86, 0x53, 0xba, 0xab, 0xdc, 0xbb, 0xba, 0xeb, 0x86, 0x46, 0xed,
|
||||
0x8f, 0x9a, 0xca, 0xcc, 0x6f, 0xd2, 0x2c, 0x4a, 0x56, 0xaa, 0x8f, 0xa1, 0xd3, 0xd0, 0xab, 0xd0,
|
||||
0x76, 0x88, 0x4f, 0x6a, 0x82, 0x55, 0xfe, 0x3d, 0x0c, 0x66, 0x80, 0x6c, 0xd0, 0x0e, 0xe8, 0x65,
|
||||
0xe8, 0x75, 0xa8, 0x16, 0xaa, 0x81, 0x5e, 0x82, 0x9e, 0x82, 0xb6, 0x42, 0x7a, 0x09, 0xa2, 0x4c,
|
||||
0xf5, 0x27, 0xca, 0x26, 0xaa, 0x99, 0x21, 0xa5, 0x8d, 0x58, 0x0c, 0x95, 0x4a, 0xbd, 0xc8, 0x93,
|
||||
0x5e, 0x44, 0xbd, 0x1e, 0xc0, 0x3f, 0xbb, 0xd3, 0x23, 0x93, 0xd3, 0xc7, 0x4e, 0x68, 0x00, 0x00,
|
||||
0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
};
|
||||
|
||||
const BITMAP_OPAQUE delete_pad_xpm[1] = {{ png, sizeof( png ), "delete_pad_xpm" }};
|
||||
|
||||
//EOF
|
||||
@@ -0,0 +1,93 @@
|
||||
|
||||
/* Do not modify this file, it was automatically generated by the
|
||||
* PNG2cpp CMake script, using a *.png file as input.
|
||||
*/
|
||||
|
||||
#include <bitmaps_png/bitmaps_list.h>
|
||||
|
||||
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, 0xb9, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xad, 0x95, 0x7b, 0x48, 0x9b,
|
||||
0x57, 0x18, 0xc6, 0x93, 0x98, 0x18, 0x35, 0xda, 0x68, 0x92, 0x1a, 0x73, 0xf3, 0x92, 0x8b, 0xd1,
|
||||
0x1a, 0x45, 0xbb, 0xae, 0x8c, 0x55, 0xa9, 0xbd, 0x28, 0x1b, 0x5d, 0x11, 0x5d, 0xa5, 0x88, 0x45,
|
||||
0x36, 0x59, 0xa9, 0x76, 0xdd, 0xac, 0xb0, 0xee, 0xd6, 0xb2, 0x8e, 0xb5, 0x95, 0xb2, 0xfd, 0x51,
|
||||
0xe8, 0xdc, 0x06, 0xa3, 0x60, 0xe9, 0xee, 0xa5, 0x74, 0x20, 0x9d, 0xd2, 0xd1, 0x21, 0xcc, 0x4d,
|
||||
0xe6, 0x3a, 0x9b, 0x9a, 0x56, 0xd4, 0x6c, 0xde, 0xf0, 0x12, 0xaf, 0xd3, 0x44, 0x5b, 0xd4, 0x39,
|
||||
0xdf, 0x3d, 0x27, 0x3b, 0x9f, 0x0d, 0xce, 0x32, 0x15, 0x0f, 0x3c, 0x7c, 0xdf, 0x77, 0x4e, 0x3c,
|
||||
0xbf, 0xf3, 0xbe, 0xe7, 0x79, 0x5f, 0x45, 0xa2, 0x75, 0x0c, 0x22, 0x8a, 0x1d, 0x1b, 0x1b, 0xbb,
|
||||
0xdf, 0xdf, 0xdf, 0xdf, 0x8b, 0xf7, 0xd4, 0x65, 0x6b, 0xc9, 0x43, 0x43, 0x43, 0x5d, 0x1e, 0x8f,
|
||||
0xa7, 0x03, 0xef, 0x66, 0xd1, 0x7a, 0x07, 0x83, 0x00, 0xd0, 0x97, 0x94, 0x90, 0x40, 0x7a, 0x8d,
|
||||
0x86, 0xda, 0xda, 0xda, 0x26, 0x04, 0x18, 0x83, 0xb8, 0xdd, 0xee, 0x51, 0x93, 0x56, 0x4b, 0x16,
|
||||
0xa3, 0x91, 0x7a, 0x7b, 0x7b, 0x07, 0xd7, 0x05, 0x0b, 0x84, 0x14, 0xa9, 0xd5, 0x54, 0x01, 0x90,
|
||||
0x1e, 0x4f, 0x0e, 0x3b, 0x20, 0x40, 0xca, 0x31, 0x5f, 0xa2, 0x52, 0xad, 0x1f, 0x86, 0x74, 0x39,
|
||||
0x05, 0x88, 0xcf, 0x6e, 0xa7, 0x19, 0x9b, 0x8d, 0x8e, 0x47, 0x45, 0xf9, 0x61, 0x75, 0x75, 0x75,
|
||||
0xc4, 0x20, 0x65, 0x00, 0x4c, 0xe3, 0x37, 0x3e, 0xab, 0x75, 0x09, 0x36, 0x3c, 0x3c, 0xdc, 0xbe,
|
||||
0x26, 0x10, 0xfe, 0xa0, 0x2d, 0x41, 0xaf, 0xa7, 0x52, 0x9c, 0x78, 0x1a, 0x90, 0x19, 0x6c, 0x38,
|
||||
0x6d, 0x32, 0x51, 0x85, 0x52, 0x49, 0x2c, 0xe0, 0x32, 0x3c, 0xbd, 0x06, 0x03, 0x4d, 0xc7, 0xc6,
|
||||
0xd2, 0xb4, 0xd9, 0xec, 0x8f, 0x8c, 0xc1, 0x07, 0x06, 0x06, 0xba, 0xd6, 0x9a, 0x3a, 0x6b, 0x77,
|
||||
0x77, 0xb7, 0x27, 0x01, 0x9b, 0x95, 0xe2, 0xb4, 0x3e, 0x40, 0x7c, 0x3a, 0x1d, 0x79, 0xa3, 0xa3,
|
||||
0xe9, 0x26, 0x20, 0x53, 0x9b, 0x37, 0x93, 0x2f, 0x26, 0x86, 0x7c, 0x88, 0x82, 0x45, 0x66, 0xc2,
|
||||
0x3c, 0x4b, 0x27, 0xbb, 0xbb, 0xe5, 0x7b, 0x89, 0x03, 0xb4, 0xe2, 0xda, 0xec, 0xec, 0xac, 0xad,
|
||||
0xa7, 0xa7, 0xc7, 0xc3, 0x52, 0x52, 0x82, 0xcd, 0x27, 0xb1, 0xd9, 0x14, 0x36, 0x9d, 0x62, 0x20,
|
||||
0xa4, 0x71, 0x0a, 0xdf, 0xe5, 0x78, 0x67, 0x90, 0xce, 0xce, 0xce, 0xff, 0x40, 0x0a, 0x65, 0x32,
|
||||
0xd9, 0xed, 0x10, 0xb9, 0xfc, 0x1e, 0xde, 0xdf, 0x84, 0x42, 0x21, 0x19, 0x24, 0x81, 0xd4, 0xd0,
|
||||
0x95, 0x70, 0x85, 0xc2, 0x8d, 0xe7, 0x0d, 0x28, 0x6d, 0x72, 0x72, 0x32, 0xbf, 0xa1, 0xa1, 0xc1,
|
||||
0x9f, 0xae, 0x5a, 0x06, 0x60, 0xc0, 0xf0, 0x70, 0x3f, 0xe8, 0x26, 0xc4, 0xe6, 0xeb, 0xeb, 0xeb,
|
||||
0x89, 0x19, 0x24, 0x10, 0x62, 0xb6, 0xdb, 0x2c, 0x0b, 0x63, 0xbf, 0x7c, 0x43, 0x0f, 0xbf, 0x3f,
|
||||
0x47, 0xcf, 0xa6, 0x1b, 0xc8, 0x68, 0xfc, 0xa2, 0x2f, 0x25, 0x65, 0xd6, 0x95, 0x92, 0x32, 0x7f,
|
||||
0x57, 0xa9, 0x2c, 0x1c, 0xbf, 0x78, 0xe6, 0x04, 0x51, 0xcb, 0x65, 0x6a, 0x38, 0x7f, 0x90, 0x32,
|
||||
0x32, 0x32, 0xfe, 0x40, 0x3a, 0x26, 0xe2, 0x91, 0xb2, 0x52, 0x9e, 0x2e, 0x7f, 0x44, 0x00, 0x78,
|
||||
0x71, 0x27, 0x2c, 0x75, 0xaf, 0x45, 0x46, 0x92, 0x16, 0xdf, 0x2e, 0x97, 0x6b, 0x22, 0xb0, 0xce,
|
||||
0xb2, 0x0f, 0xe6, 0x6c, 0x27, 0xba, 0x51, 0x49, 0x74, 0x69, 0x2f, 0x9d, 0xd9, 0x1b, 0x4e, 0x7a,
|
||||
0x7d, 0x35, 0x39, 0x1c, 0xe4, 0x97, 0x42, 0xb1, 0x9b, 0xda, 0x2e, 0x63, 0xed, 0xeb, 0x62, 0xfa,
|
||||
0xab, 0x26, 0x8f, 0x9a, 0x9b, 0x9b, 0x97, 0xdc, 0xc5, 0xee, 0x82, 0x6d, 0xcc, 0xd2, 0x55, 0x8b,
|
||||
0xcd, 0xbd, 0xec, 0x7e, 0x98, 0x19, 0xe2, 0xe2, 0xe8, 0x38, 0x9c, 0x18, 0x60, 0x7d, 0x3f, 0x4c,
|
||||
0x21, 0x93, 0x4a, 0xdb, 0xdf, 0xd8, 0xa3, 0xa1, 0x73, 0x3b, 0x45, 0xa4, 0x0a, 0x95, 0xcf, 0xa9,
|
||||
0x54, 0x47, 0x6e, 0x45, 0x47, 0xbf, 0x73, 0x4d, 0xab, 0x3d, 0xfb, 0x79, 0x44, 0xc4, 0x33, 0x8d,
|
||||
0x4f, 0xc4, 0x6d, 0x5a, 0xbc, 0xb8, 0x2f, 0x9c, 0x9c, 0xcd, 0x8d, 0x24, 0xd4, 0x09, 0x73, 0x15,
|
||||
0xdb, 0xd0, 0x7f, 0xf1, 0xdc, 0x75, 0xa5, 0x80, 0xf9, 0x30, 0x37, 0x63, 0xb1, 0xd0, 0x03, 0xd8,
|
||||
0xbf, 0x02, 0xd1, 0xb2, 0xa2, 0x86, 0xeb, 0x7a, 0x45, 0xfc, 0x1e, 0x74, 0xd0, 0x69, 0xe8, 0x4b,
|
||||
0xe8, 0x43, 0xe8, 0x3c, 0xf4, 0x16, 0x74, 0x0c, 0x2a, 0x83, 0xaa, 0xc4, 0xe2, 0xa0, 0xeb, 0x4d,
|
||||
0x4d, 0x5d, 0x73, 0x0e, 0xd8, 0xba, 0x00, 0x27, 0xf5, 0xa2, 0x4e, 0x18, 0x4c, 0x70, 0x17, 0xbb,
|
||||
0x33, 0xbf, 0xf5, 0xb1, 0x36, 0x03, 0x08, 0xab, 0x33, 0x56, 0x6f, 0xac, 0xee, 0x46, 0x47, 0x47,
|
||||
0xef, 0x09, 0x6e, 0x0a, 0x81, 0xac, 0xd0, 0x73, 0x50, 0x29, 0x54, 0x0c, 0xed, 0x82, 0x1c, 0x90,
|
||||
0x1d, 0x62, 0xa1, 0xef, 0xc9, 0xca, 0x3a, 0xf0, 0xba, 0xd3, 0xe9, 0x59, 0x10, 0x60, 0x42, 0x9d,
|
||||
0x74, 0x74, 0x74, 0x8c, 0xc3, 0x20, 0x05, 0x4b, 0xd6, 0xc7, 0xbc, 0x00, 0x61, 0x9d, 0x84, 0x75,
|
||||
0x14, 0xe1, 0x9e, 0x24, 0xdc, 0x69, 0x31, 0x50, 0x02, 0xc4, 0x16, 0xa2, 0xf8, 0x01, 0x64, 0xfc,
|
||||
0xa9, 0x62, 0x6b, 0x99, 0x99, 0xc7, 0x4e, 0x3b, 0xef, 0xdc, 0x21, 0x06, 0x63, 0x90, 0xbb, 0x2d,
|
||||
0xb7, 0x29, 0x37, 0x37, 0xf7, 0x23, 0xac, 0xc5, 0xb5, 0xb6, 0xb6, 0x3a, 0xfc, 0x30, 0x44, 0xb6,
|
||||
0x12, 0x24, 0xb0, 0x4e, 0x18, 0x50, 0x0a, 0x05, 0xf1, 0x77, 0xf1, 0x0a, 0x6b, 0x39, 0x25, 0x79,
|
||||
0xbb, 0xc9, 0xdb, 0xe7, 0xa2, 0x31, 0x77, 0x0b, 0x5d, 0x38, 0x94, 0xc6, 0xee, 0xe7, 0x1a, 0xcf,
|
||||
0x86, 0x0e, 0x6d, 0xca, 0x3e, 0x32, 0x32, 0x72, 0x9f, 0xb5, 0xab, 0x95, 0x20, 0xab, 0x1d, 0xfe,
|
||||
0x34, 0x07, 0x05, 0x85, 0x35, 0xe6, 0x3b, 0xc2, 0xe8, 0x85, 0x54, 0x11, 0x85, 0xc8, 0x94, 0x5e,
|
||||
0xcc, 0x55, 0x43, 0x87, 0x21, 0x1b, 0xcf, 0xc0, 0x86, 0x0c, 0x89, 0xd1, 0x58, 0x93, 0x6a, 0xb5,
|
||||
0xba, 0xc8, 0x62, 0xf9, 0x95, 0xd4, 0xea, 0xa3, 0xb5, 0xdc, 0x3c, 0x87, 0x58, 0xfa, 0x78, 0xd4,
|
||||
0x1b, 0x32, 0xc4, 0x56, 0xeb, 0x6f, 0x16, 0xa1, 0xce, 0x34, 0x9a, 0xca, 0xab, 0xbc, 0x9b, 0xec,
|
||||
0xe4, 0xf7, 0x2a, 0xd9, 0x28, 0x90, 0x28, 0x29, 0xa9, 0x27, 0xfe, 0x11, 0xe8, 0xc4, 0x67, 0xbc,
|
||||
0x0c, 0x52, 0x20, 0xf9, 0x63, 0xfa, 0xe4, 0xfa, 0x46, 0x70, 0xb0, 0xa9, 0xca, 0x68, 0x48, 0x24,
|
||||
0x5b, 0x82, 0x85, 0x82, 0x83, 0x2d, 0x9d, 0x98, 0x7a, 0x99, 0xf1, 0xd7, 0x7a, 0x3f, 0xe2, 0xe5,
|
||||
0x5d, 0xdc, 0x6a, 0xfd, 0x5d, 0x9e, 0x9c, 0x3c, 0xff, 0x94, 0xc3, 0xf1, 0x77, 0x45, 0x7c, 0xfc,
|
||||
0x8f, 0xdf, 0x6d, 0x4b, 0x77, 0xd0, 0xbc, 0xf3, 0x2a, 0xd1, 0xad, 0x77, 0xa9, 0x24, 0x33, 0x8e,
|
||||
0xb9, 0x8e, 0x45, 0xb5, 0x8d, 0x75, 0x99, 0xd5, 0x44, 0x74, 0x52, 0xa3, 0x51, 0x0f, 0xaa, 0x22,
|
||||
0x23, 0x06, 0xa4, 0x52, 0x43, 0x95, 0xdd, 0xee, 0x29, 0xdc, 0xb2, 0x65, 0xee, 0x03, 0x87, 0x63,
|
||||
0xf1, 0x67, 0xa4, 0xe8, 0xa1, 0x90, 0x2a, 0xb3, 0xb9, 0x89, 0xf6, 0x67, 0xa6, 0x12, 0x7d, 0x7b,
|
||||
0x84, 0xe8, 0x93, 0xa7, 0xe9, 0x64, 0x96, 0x9c, 0x78, 0x57, 0x2f, 0x80, 0x0c, 0xbc, 0x34, 0x1e,
|
||||
0x3b, 0x76, 0xe5, 0x64, 0xef, 0xf0, 0x9f, 0x72, 0xb6, 0xfe, 0x14, 0x65, 0xda, 0x35, 0x70, 0x54,
|
||||
0xf3, 0x52, 0x63, 0x7d, 0xa4, 0xc5, 0x85, 0xa4, 0xa4, 0xf1, 0xc1, 0xb0, 0xb0, 0x27, 0xbd, 0xcf,
|
||||
0xa7, 0x2a, 0xe8, 0xc5, 0x34, 0x11, 0x85, 0x4a, 0x83, 0xfe, 0x5c, 0x8b, 0xbd, 0x8b, 0x5e, 0x2d,
|
||||
0xcc, 0x26, 0xba, 0xfe, 0xef, 0x29, 0x5f, 0xda, 0x2a, 0x23, 0x93, 0xe9, 0xab, 0x07, 0x89, 0x89,
|
||||
0xdd, 0xed, 0x66, 0xf3, 0x4f, 0x3f, 0xe8, 0x74, 0xd5, 0x57, 0x22, 0x23, 0x8b, 0x2f, 0x48, 0xa5,
|
||||
0xea, 0x53, 0xf8, 0xed, 0xdb, 0x10, 0x7b, 0x7e, 0x0c, 0xd5, 0x40, 0xef, 0xf3, 0x3e, 0x59, 0xb4,
|
||||
0x1a, 0x7b, 0x47, 0x85, 0xc8, 0x24, 0xee, 0x57, 0x76, 0x6c, 0xa2, 0xa3, 0x5b, 0x45, 0x24, 0x93,
|
||||
0x48, 0x46, 0xf9, 0x29, 0xcf, 0x72, 0xeb, 0x56, 0x72, 0x67, 0x1d, 0xe6, 0x7d, 0x30, 0x1f, 0xda,
|
||||
0xcf, 0xfe, 0x61, 0xf2, 0xef, 0x3c, 0x28, 0x1d, 0x52, 0xfe, 0x9f, 0xbd, 0x25, 0x3c, 0xbf, 0x6c,
|
||||
0xd3, 0x4f, 0xf9, 0x29, 0xdf, 0x83, 0xca, 0xa1, 0x7d, 0xd0, 0x76, 0xde, 0x60, 0x6d, 0xbc, 0x0f,
|
||||
0xb2, 0x6e, 0xaf, 0xe5, 0x7f, 0x23, 0x7c, 0x47, 0xf0, 0x68, 0x56, 0x34, 0xc3, 0x3f, 0x3f, 0x19,
|
||||
0xa2, 0x7e, 0x5d, 0xaa, 0x4a, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42,
|
||||
0x60, 0x82,
|
||||
};
|
||||
|
||||
const BITMAP_OPAQUE delete_polygon_xpm[1] = {{ png, sizeof( png ), "delete_polygon_xpm" }};
|
||||
|
||||
//EOF
|
||||
@@ -0,0 +1,87 @@
|
||||
|
||||
/* Do not modify this file, it was automatically generated by the
|
||||
* PNG2cpp CMake script, using a *.png file as input.
|
||||
*/
|
||||
|
||||
#include <bitmaps_png/bitmaps_list.h>
|
||||
|
||||
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, 0x66, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xed, 0x95, 0x6b, 0x4c, 0x5b,
|
||||
0x65, 0x18, 0xc7, 0x5b, 0x3c, 0xb4, 0x3d, 0x5c, 0x4a, 0x0b, 0x74, 0x30, 0xe8, 0x85, 0x6b, 0x61,
|
||||
0x3d, 0xfd, 0x30, 0xc1, 0x65, 0xce, 0x64, 0x90, 0x99, 0xe0, 0xa6, 0x0b, 0x62, 0x54, 0xdc, 0x26,
|
||||
0xd3, 0x8c, 0xa8, 0xd9, 0xb2, 0xc5, 0xc0, 0x36, 0x85, 0xa9, 0x8b, 0x51, 0x67, 0x02, 0xcb, 0xbe,
|
||||
0x80, 0xc6, 0xdb, 0x58, 0x66, 0xb2, 0x04, 0xb3, 0x60, 0x34, 0xeb, 0x07, 0x22, 0xc9, 0xc4, 0x4c,
|
||||
0x67, 0xa0, 0x50, 0x59, 0xa6, 0x59, 0x66, 0xc6, 0xc5, 0x98, 0xe0, 0x48, 0x58, 0x32, 0xa0, 0x2d,
|
||||
0x30, 0x5a, 0x0a, 0x8f, 0xff, 0xe7, 0x78, 0xce, 0x04, 0xa4, 0x64, 0xe5, 0xb3, 0x27, 0xf9, 0xa5,
|
||||
0x87, 0x43, 0xdf, 0xf7, 0x77, 0x9e, 0xcb, 0xfb, 0x54, 0xa3, 0x59, 0xc7, 0x45, 0x44, 0x7b, 0x46,
|
||||
0x46, 0x46, 0x82, 0xa1, 0x50, 0xe8, 0x12, 0xee, 0xc5, 0x15, 0xff, 0x2b, 0x1b, 0x1d, 0x1d, 0xbd,
|
||||
0xe3, 0xf7, 0xfb, 0x7b, 0x71, 0x6f, 0xd1, 0xac, 0xf7, 0xc2, 0xe2, 0x7d, 0x9d, 0x9d, 0x9d, 0x0b,
|
||||
0xfa, 0xf8, 0x78, 0x7a, 0xb6, 0xb2, 0x92, 0xe6, 0xe6, 0xe6, 0xba, 0x55, 0x19, 0x3e, 0xcb, 0x7d,
|
||||
0x3e, 0xdf, 0x6c, 0x6a, 0x72, 0x32, 0x6d, 0x2b, 0x2d, 0xa5, 0x89, 0x89, 0x89, 0x1b, 0xeb, 0x92,
|
||||
0xa9, 0x12, 0x51, 0xa7, 0xa3, 0x0f, 0x2d, 0x16, 0x72, 0x26, 0x25, 0x2d, 0x95, 0xed, 0x52, 0x25,
|
||||
0x47, 0xd3, 0xd2, 0xe8, 0xb1, 0x94, 0x14, 0xda, 0x56, 0x52, 0x12, 0xbb, 0x0c, 0x5f, 0xde, 0xda,
|
||||
0xd5, 0xd5, 0x25, 0x4b, 0x3e, 0xcd, 0xcc, 0xa4, 0x99, 0xa2, 0x22, 0x1a, 0xce, 0xc9, 0x21, 0x67,
|
||||
0x62, 0xa2, 0x2c, 0xeb, 0xeb, 0xeb, 0x23, 0x96, 0x34, 0xa4, 0xa6, 0xd2, 0x74, 0x5e, 0x1e, 0x8d,
|
||||
0xe7, 0xe7, 0xdf, 0x97, 0x05, 0x02, 0x01, 0x6f, 0x2c, 0xa2, 0xea, 0xe6, 0xa6, 0x26, 0x32, 0x41,
|
||||
0xe4, 0x83, 0x60, 0xba, 0xa0, 0x80, 0x82, 0xf8, 0x1c, 0xca, 0xca, 0xa2, 0x42, 0xc8, 0xe2, 0xb4,
|
||||
0x5a, 0x6a, 0xc0, 0xc6, 0x41, 0xab, 0x95, 0x82, 0x0e, 0x07, 0x4d, 0x43, 0xc4, 0x91, 0xb1, 0x1c,
|
||||
0x35, 0x1b, 0x8f, 0x45, 0x14, 0x07, 0xbe, 0x3c, 0x56, 0x5f, 0x4f, 0x16, 0x51, 0xa4, 0xfe, 0xec,
|
||||
0x6c, 0x79, 0xd3, 0xc0, 0xc6, 0x8d, 0x74, 0x2b, 0x3d, 0x9d, 0xce, 0x19, 0x8d, 0xe4, 0xdf, 0xb0,
|
||||
0x41, 0xfe, 0x9b, 0x9f, 0x37, 0x22, 0x32, 0x96, 0x70, 0x3a, 0xb9, 0x76, 0xea, 0x3e, 0x4e, 0x50,
|
||||
0x0f, 0x5e, 0x03, 0x29, 0x40, 0xbb, 0x96, 0xec, 0xad, 0xc6, 0x46, 0x4a, 0x37, 0x18, 0xa8, 0x17,
|
||||
0x75, 0xf2, 0x83, 0x29, 0xb3, 0x99, 0xa6, 0x4c, 0x26, 0xf2, 0x63, 0x73, 0x7f, 0x46, 0x06, 0x35,
|
||||
0x22, 0x32, 0x13, 0xa2, 0xf4, 0x7a, 0xbd, 0xcb, 0x24, 0xdb, 0x6d, 0x56, 0xeb, 0x7c, 0xeb, 0xfb,
|
||||
0xc7, 0xe9, 0x9d, 0x57, 0x2a, 0x49, 0x1f, 0x6f, 0xbc, 0x93, 0x9f, 0xdf, 0x73, 0x50, 0x92, 0x66,
|
||||
0xf7, 0xba, 0xdd, 0x91, 0x17, 0x56, 0x52, 0x52, 0x12, 0xd9, 0x73, 0xfb, 0x36, 0x0d, 0xbc, 0x54,
|
||||
0x53, 0x43, 0x16, 0xa4, 0xf1, 0x2e, 0xd2, 0x33, 0x85, 0x68, 0x26, 0xf1, 0xf6, 0x2c, 0x6c, 0xc3,
|
||||
0x3d, 0xa7, 0x91, 0x6b, 0xc6, 0x0d, 0xb2, 0xf4, 0x45, 0xcf, 0xb6, 0x9f, 0x79, 0x83, 0xe8, 0xca,
|
||||
0x69, 0xa2, 0x8e, 0x97, 0xa9, 0x66, 0x4b, 0x1a, 0xd9, 0xed, 0xdf, 0x92, 0xdb, 0x4d, 0xab, 0x72,
|
||||
0xe0, 0x00, 0x51, 0x4f, 0xcf, 0xc0, 0x3f, 0x85, 0xe7, 0x74, 0x21, 0x6d, 0x1c, 0x8d, 0x1c, 0x11,
|
||||
0xa4, 0x83, 0x48, 0x5f, 0xa1, 0xd2, 0x20, 0x4b, 0x5b, 0x9f, 0xaf, 0x0f, 0x1a, 0x9e, 0xdb, 0x42,
|
||||
0x74, 0x7e, 0x27, 0xdd, 0x3b, 0x65, 0xa5, 0x92, 0x4c, 0x0d, 0xe5, 0xe6, 0xfe, 0x10, 0x92, 0xa4,
|
||||
0x7b, 0xb3, 0x92, 0x14, 0x9a, 0x96, 0xa4, 0x70, 0x50, 0xa5, 0xb6, 0x76, 0x7e, 0xb6, 0xb7, 0x77,
|
||||
0x60, 0x51, 0x96, 0xe0, 0xed, 0x03, 0x68, 0x04, 0xae, 0x0b, 0xcb, 0xee, 0x22, 0x85, 0x01, 0xa4,
|
||||
0x2d, 0x80, 0xda, 0x0d, 0xa1, 0x46, 0x2b, 0x5a, 0x5f, 0x96, 0x19, 0x75, 0xba, 0xc2, 0x9b, 0xce,
|
||||
0x34, 0x81, 0x32, 0x92, 0x12, 0x48, 0x10, 0xd2, 0x7e, 0xc3, 0xb3, 0x36, 0xf0, 0x09, 0x38, 0x03,
|
||||
0x9a, 0x98, 0x8a, 0x8a, 0x8a, 0x36, 0xe4, 0x7c, 0x9e, 0x25, 0x8d, 0x78, 0x73, 0xee, 0xb8, 0xa0,
|
||||
0xcd, 0x26, 0xcb, 0xb8, 0xdb, 0x38, 0x8d, 0x7d, 0x10, 0x05, 0xed, 0x76, 0xb9, 0xbd, 0x47, 0x80,
|
||||
0x2a, 0xc3, 0x04, 0xf1, 0xb0, 0x48, 0x5b, 0x5c, 0x3c, 0x7e, 0x5c, 0x92, 0xe6, 0x90, 0x9a, 0x05,
|
||||
0x32, 0x18, 0x36, 0x7f, 0x85, 0x67, 0x9f, 0x2b, 0x82, 0x37, 0xc1, 0x51, 0xa6, 0xa5, 0xa5, 0xa5,
|
||||
0xfd, 0x04, 0x9a, 0xc0, 0x8c, 0x0d, 0x87, 0xb1, 0x09, 0xb7, 0xef, 0x34, 0x64, 0x1c, 0x19, 0xcb,
|
||||
0xe5, 0x9a, 0xa1, 0x41, 0xfa, 0x21, 0x9f, 0x71, 0x3a, 0xe5, 0x73, 0xc6, 0x87, 0x9a, 0x27, 0x08,
|
||||
0xc6, 0xd5, 0x94, 0x9c, 0x3b, 0x97, 0x6b, 0xf6, 0x75, 0xb5, 0x06, 0x06, 0xc3, 0xc3, 0x17, 0xf0,
|
||||
0xa8, 0x19, 0x3c, 0x09, 0xf2, 0x40, 0x36, 0xc8, 0x2a, 0x2b, 0x2b, 0xcb, 0xc5, 0xc1, 0xfb, 0xe9,
|
||||
0xc5, 0xea, 0x6a, 0x2a, 0xc0, 0x9b, 0x0e, 0x41, 0x76, 0x02, 0x91, 0x71, 0x77, 0x5d, 0xbd, 0xda,
|
||||
0x4f, 0xd7, 0xae, 0xfd, 0xfa, 0xa7, 0xdc, 0x8d, 0xdc, 0xfa, 0x78, 0x81, 0xcf, 0x70, 0xa8, 0x0d,
|
||||
0x90, 0x78, 0x3c, 0x9e, 0x05, 0xa4, 0x6e, 0xaf, 0x2c, 0x92, 0xa4, 0x85, 0xc3, 0xff, 0x8a, 0x4a,
|
||||
0x39, 0x6d, 0xef, 0x82, 0x22, 0x20, 0x28, 0xad, 0x2e, 0x33, 0x36, 0x36, 0x96, 0x10, 0x0e, 0x87,
|
||||
0x2f, 0x3f, 0x5f, 0x55, 0x25, 0x47, 0xc6, 0x91, 0x70, 0x63, 0x70, 0x83, 0xe8, 0xf5, 0x59, 0x1f,
|
||||
0x21, 0xb5, 0x3e, 0x3e, 0x67, 0x26, 0xbd, 0x9e, 0x44, 0x48, 0x78, 0x5c, 0xf1, 0xd8, 0xba, 0xdf,
|
||||
0x76, 0xcb, 0x45, 0x8f, 0x7c, 0x81, 0x47, 0x27, 0x41, 0xce, 0x6a, 0xe7, 0x89, 0x0b, 0xcb, 0x32,
|
||||
0x4e, 0x63, 0x7f, 0xff, 0x40, 0x98, 0x25, 0xbc, 0x4e, 0x10, 0x32, 0x5a, 0x05, 0x41, 0x68, 0x98,
|
||||
0x9c, 0x9c, 0xec, 0x38, 0xdd, 0xdc, 0x4c, 0x3c, 0xae, 0x96, 0x49, 0x62, 0x15, 0x29, 0x32, 0x3d,
|
||||
0xd8, 0x7f, 0xe8, 0xd0, 0x42, 0xab, 0xba, 0x8e, 0x45, 0x5c, 0x53, 0x51, 0x14, 0xed, 0x91, 0x48,
|
||||
0xa4, 0x9a, 0x67, 0xe3, 0x7f, 0x16, 0xc6, 0x2a, 0x5a, 0xb2, 0xee, 0xe4, 0x4a, 0x11, 0xb0, 0x45,
|
||||
0x5d, 0xf7, 0xbf, 0x48, 0xb9, 0x0c, 0x89, 0x89, 0x8f, 0x7b, 0x13, 0x12, 0x36, 0x91, 0x28, 0x6e,
|
||||
0x25, 0xad, 0x36, 0xd9, 0x13, 0x93, 0xc8, 0xe9, 0x1c, 0xfc, 0xab, 0xb0, 0xf0, 0xd6, 0xb0, 0xcb,
|
||||
0x15, 0xfc, 0x59, 0x92, 0x16, 0xbf, 0xc7, 0xb3, 0xcb, 0xab, 0x61, 0x36, 0x1f, 0xfc, 0xe3, 0x70,
|
||||
0xed, 0x3e, 0x0a, 0x5f, 0xef, 0xa0, 0xc1, 0x0b, 0x75, 0x94, 0x69, 0x32, 0x44, 0x94, 0x43, 0x9e,
|
||||
0x0f, 0x1e, 0x5a, 0x55, 0xe4, 0x72, 0xcd, 0x6f, 0x77, 0xbb, 0x17, 0xe7, 0xa2, 0x0d, 0xd2, 0xd5,
|
||||
0x30, 0x1a, 0xab, 0xa8, 0xfb, 0xe3, 0x3a, 0x22, 0xcf, 0x11, 0xa2, 0xb3, 0x3b, 0xe8, 0xe9, 0x62,
|
||||
0x3d, 0x61, 0xab, 0x76, 0xb0, 0x03, 0x24, 0x47, 0x8b, 0x4a, 0x5b, 0x50, 0x70, 0x63, 0x67, 0x5e,
|
||||
0x9e, 0xef, 0x6b, 0x9b, 0xed, 0x1b, 0xaf, 0xcd, 0xd6, 0xf1, 0x8b, 0xc3, 0xd1, 0x79, 0xc5, 0xe1,
|
||||
0xf8, 0xae, 0x3b, 0x1a, 0x66, 0x73, 0xed, 0xef, 0xe5, 0x9b, 0x2c, 0xf4, 0xe3, 0x91, 0x1c, 0x3a,
|
||||
0xff, 0x94, 0x86, 0x44, 0x41, 0x33, 0x83, 0x7d, 0xce, 0x81, 0x3a, 0xe0, 0x00, 0x71, 0xd1, 0x72,
|
||||
0xce, 0x13, 0xb6, 0x14, 0x1c, 0x53, 0x46, 0x50, 0xb3, 0x3a, 0x50, 0xd7, 0xe0, 0x12, 0xb8, 0x09,
|
||||
0xae, 0x83, 0x8b, 0x80, 0xeb, 0xfb, 0xb6, 0xf2, 0x43, 0x2a, 0x44, 0x13, 0xc5, 0x29, 0xbf, 0xae,
|
||||
0x9b, 0xc1, 0x13, 0x60, 0xf7, 0x03, 0xf0, 0x0c, 0x78, 0x15, 0xbc, 0xa7, 0x4c, 0xfa, 0x53, 0x60,
|
||||
0x3f, 0xc8, 0x5c, 0x2b, 0x22, 0x55, 0xa6, 0x57, 0x72, 0x9c, 0xf2, 0x00, 0x98, 0x81, 0x15, 0x3c,
|
||||
0xaa, 0x0c, 0xe1, 0x72, 0x25, 0x6d, 0xba, 0x95, 0x1b, 0xff, 0x0d, 0x5b, 0x77, 0x23, 0x60, 0x96,
|
||||
0x80, 0x07, 0xd9, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
};
|
||||
|
||||
const BITMAP_OPAQUE delete_rectangle_xpm[1] = {{ png, sizeof( png ), "delete_rectangle_xpm" }};
|
||||
|
||||
//EOF
|
||||
@@ -0,0 +1,74 @@
|
||||
|
||||
/* Do not modify this file, it was automatically generated by the
|
||||
* PNG2cpp CMake script, using a *.png file as input.
|
||||
*/
|
||||
|
||||
#include <bitmaps_png/bitmaps_list.h>
|
||||
|
||||
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, 0x88, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xb5, 0x96, 0x5d, 0x48, 0x53,
|
||||
0x61, 0x18, 0xc7, 0xdf, 0x72, 0x33, 0x9d, 0x4b, 0x5d, 0x5a, 0x6e, 0x5a, 0x3a, 0x3f, 0x72, 0x12,
|
||||
0x5e, 0x44, 0x65, 0x14, 0x04, 0xc5, 0xf2, 0xa2, 0x24, 0x2a, 0x33, 0xba, 0x2c, 0xba, 0x30, 0xbc,
|
||||
0x88, 0x8a, 0xb4, 0x60, 0x69, 0xb0, 0x45, 0x73, 0x10, 0xda, 0x37, 0x44, 0x37, 0x7d, 0x17, 0x15,
|
||||
0xe8, 0xc2, 0x02, 0x29, 0x58, 0x17, 0x12, 0x25, 0x2c, 0xba, 0xe8, 0xc3, 0x84, 0x58, 0x45, 0x60,
|
||||
0xab, 0x2e, 0xda, 0xdc, 0x96, 0x82, 0x64, 0x4f, 0xff, 0xe7, 0xe8, 0xa9, 0xb7, 0xe3, 0x94, 0x0d,
|
||||
0xda, 0x03, 0x7f, 0x76, 0xde, 0x9d, 0x73, 0x9e, 0xdf, 0x79, 0xbe, 0xde, 0x73, 0x84, 0x48, 0xd2,
|
||||
0x88, 0x68, 0x0d, 0xf4, 0x04, 0x3a, 0x05, 0xe9, 0x34, 0xe7, 0x66, 0x41, 0xc7, 0xa0, 0x67, 0x50,
|
||||
0xdd, 0xd4, 0xbb, 0x9d, 0xa2, 0x1d, 0x1a, 0x55, 0x7e, 0x67, 0x86, 0xac, 0x1b, 0x18, 0x18, 0x18,
|
||||
0x29, 0x2a, 0x28, 0xa0, 0xb6, 0xd6, 0x56, 0x2c, 0xe9, 0xb6, 0x0a, 0x9b, 0x84, 0x5c, 0x38, 0xd9,
|
||||
0xd9, 0x49, 0xf9, 0x26, 0x13, 0xf9, 0xfd, 0xfe, 0x31, 0xac, 0x37, 0x6b, 0x41, 0x31, 0x88, 0xa0,
|
||||
0x71, 0x68, 0xc9, 0x4c, 0x10, 0x4b, 0x7e, 0x3e, 0xad, 0x9d, 0x3b, 0x97, 0x32, 0x75, 0x3a, 0x3a,
|
||||
0xe2, 0x70, 0xa8, 0x30, 0xbd, 0x0a, 0xd1, 0xa7, 0xa5, 0x91, 0xdd, 0x68, 0x24, 0x13, 0xae, 0x99,
|
||||
0x0a, 0x73, 0x0a, 0xef, 0x24, 0x88, 0x75, 0x35, 0x0e, 0x64, 0xf5, 0xe0, 0xe0, 0xe0, 0x48, 0xe1,
|
||||
0xfc, 0xf9, 0xb4, 0x35, 0x37, 0x97, 0xc2, 0x95, 0x95, 0xf4, 0x70, 0xd1, 0x22, 0x32, 0xea, 0xf5,
|
||||
0x74, 0xa8, 0xa5, 0x85, 0x61, 0x01, 0x86, 0xe8, 0x66, 0xcf, 0xa6, 0xcb, 0x0b, 0x16, 0x50, 0x6c,
|
||||
0xf1, 0x62, 0xda, 0x33, 0x6f, 0x1e, 0xe5, 0x64, 0x65, 0x51, 0x7f, 0x7f, 0x3f, 0xc3, 0x36, 0x4c,
|
||||
0x78, 0x3a, 0x26, 0x6a, 0x24, 0xd0, 0x18, 0x64, 0xd5, 0x80, 0x6e, 0xd5, 0x2c, 0x5b, 0x46, 0x95,
|
||||
0x19, 0x19, 0x0a, 0xe4, 0x07, 0x1c, 0xc5, 0xca, 0xca, 0xa8, 0x07, 0x29, 0xe4, 0xc8, 0xd6, 0xdb,
|
||||
0xed, 0xa4, 0x07, 0xe4, 0x06, 0xa2, 0x8d, 0x96, 0x94, 0x28, 0xe7, 0xa2, 0xb8, 0x66, 0xa5, 0xc1,
|
||||
0x40, 0x65, 0x58, 0xc3, 0x1e, 0xc9, 0x51, 0xf9, 0x24, 0xd8, 0x39, 0x0d, 0x68, 0x9b, 0xcf, 0xe7,
|
||||
0xfb, 0x65, 0x98, 0x33, 0x87, 0x5a, 0xf2, 0xf2, 0x26, 0x1c, 0x15, 0x17, 0x53, 0xa4, 0xa8, 0x88,
|
||||
0x7a, 0xf0, 0xe4, 0xe6, 0xf4, 0x74, 0xba, 0x8e, 0x48, 0x23, 0x16, 0x0b, 0x45, 0x17, 0x2e, 0x54,
|
||||
0x60, 0xed, 0x80, 0x72, 0x1a, 0xbb, 0xbb, 0xbb, 0x19, 0xd4, 0x28, 0x83, 0x6a, 0x25, 0xd0, 0xa8,
|
||||
0x70, 0x0b, 0x8b, 0x06, 0xb6, 0xbb, 0xaf, 0xaf, 0x6f, 0xdc, 0x98, 0x99, 0x49, 0xfb, 0xd9, 0x29,
|
||||
0x20, 0x11, 0x44, 0x34, 0x0c, 0x87, 0xc3, 0x80, 0x2b, 0x42, 0xda, 0x22, 0x85, 0x85, 0xe4, 0x41,
|
||||
0x33, 0xa4, 0x23, 0xd2, 0x49, 0x48, 0x73, 0xbc, 0xee, 0x7b, 0x2a, 0xc1, 0xda, 0xe3, 0xd4, 0x6a,
|
||||
0xb7, 0x1a, 0x59, 0x73, 0x76, 0x36, 0x0d, 0xa3, 0x66, 0x61, 0x38, 0x0d, 0xe3, 0x38, 0x0c, 0x38,
|
||||
0x43, 0xdd, 0x38, 0xe6, 0x48, 0xba, 0xba, 0xba, 0xa6, 0x81, 0xb0, 0xb9, 0x44, 0xbd, 0x04, 0x1a,
|
||||
0x86, 0x72, 0xe3, 0xcc, 0x89, 0xaf, 0xa9, 0xa9, 0x49, 0xa9, 0x49, 0x00, 0x69, 0x0b, 0xe7, 0xe4,
|
||||
0x50, 0x08, 0x5d, 0xc6, 0xa0, 0x6f, 0x00, 0x19, 0x00, 0xd9, 0xde, 0xd0, 0xc0, 0x90, 0x17, 0xda,
|
||||
0x39, 0x93, 0x6d, 0x16, 0x9c, 0xbf, 0xfe, 0x03, 0x73, 0x09, 0x87, 0x06, 0x72, 0x41, 0xed, 0xae,
|
||||
0x4b, 0x1c, 0x01, 0x47, 0xc4, 0x30, 0x44, 0xc5, 0xa9, 0xe3, 0x54, 0xf6, 0x02, 0x96, 0xf5, 0xb7,
|
||||
0x1b, 0x6f, 0x4f, 0x0f, 0x73, 0x89, 0x5d, 0x52, 0x54, 0x5f, 0xc5, 0x49, 0x91, 0xa9, 0x42, 0x3a,
|
||||
0x3b, 0x3a, 0x94, 0xb4, 0x70, 0x77, 0x71, 0x2d, 0x94, 0x1a, 0xa1, 0x2e, 0xaf, 0x00, 0xe3, 0x63,
|
||||
0xfe, 0x8f, 0x9b, 0xe4, 0x3e, 0x9a, 0x42, 0x33, 0x67, 0x71, 0x60, 0x17, 0x85, 0x1e, 0x80, 0x0f,
|
||||
0x12, 0x6c, 0x2f, 0x2e, 0x3c, 0x7c, 0xe6, 0xf4, 0x69, 0x05, 0x72, 0xd3, 0x6c, 0xa6, 0x98, 0xd5,
|
||||
0x4a, 0x51, 0xcc, 0x11, 0x37, 0x84, 0x1b, 0xa9, 0xe3, 0x80, 0x0f, 0xa2, 0x36, 0x0c, 0x89, 0x95,
|
||||
0x96, 0x52, 0xac, 0xa2, 0x82, 0x1e, 0xe0, 0x3c, 0xc3, 0x8e, 0xb6, 0xb5, 0x31, 0xec, 0x44, 0xfc,
|
||||
0xa8, 0xe0, 0x5c, 0x02, 0x7d, 0xfa, 0x39, 0xfe, 0xf3, 0xca, 0x86, 0xda, 0x5a, 0x2a, 0x45, 0xc7,
|
||||
0x7d, 0x2c, 0x2f, 0xa7, 0x18, 0x0b, 0x0e, 0xdd, 0x88, 0x84, 0xe1, 0x6d, 0x70, 0xa6, 0x34, 0x08,
|
||||
0x52, 0xc8, 0xc3, 0xfa, 0xc3, 0x66, 0xa3, 0x2f, 0xf8, 0xad, 0xc6, 0xc0, 0xd6, 0x2c, 0x5d, 0xca,
|
||||
0xa0, 0x9e, 0xe9, 0x40, 0x19, 0xd0, 0x67, 0x15, 0x66, 0xbf, 0x66, 0x3f, 0x10, 0x0a, 0x85, 0x3e,
|
||||
0xac, 0x5a, 0xb1, 0x82, 0x6c, 0x28, 0x7c, 0x00, 0x73, 0xe4, 0x41, 0xfa, 0xa4, 0x16, 0xbe, 0xa3,
|
||||
0xb6, 0xfe, 0x3e, 0xd4, 0x2a, 0xc8, 0xc3, 0x8a, 0x2d, 0xa8, 0x0a, 0x0f, 0x34, 0x34, 0x34, 0xf4,
|
||||
0x15, 0xe7, 0x6d, 0xd3, 0xef, 0xa0, 0xdc, 0x08, 0x7f, 0xa3, 0x7a, 0x1b, 0x1a, 0x0d, 0x59, 0x55,
|
||||
0x98, 0x19, 0x4f, 0x2f, 0x0d, 0x63, 0xb3, 0xb6, 0xf5, 0x79, 0x80, 0xab, 0xb1, 0x83, 0x04, 0x83,
|
||||
0x41, 0x86, 0x54, 0xcd, 0xfc, 0x3e, 0x70, 0x8a, 0x6c, 0x28, 0x24, 0x75, 0x60, 0x3d, 0x6e, 0x2a,
|
||||
0x66, 0xd8, 0xf6, 0xfa, 0x7a, 0xf2, 0x7a, 0xbd, 0x53, 0xe6, 0x44, 0x85, 0x6d, 0xaa, 0xab, 0x4b,
|
||||
0x10, 0xf2, 0xef, 0xeb, 0x43, 0x8d, 0xca, 0x8f, 0x3d, 0x71, 0xf9, 0x4e, 0xef, 0xce, 0x8d, 0x81,
|
||||
0xef, 0x81, 0x9b, 0xbd, 0xef, 0x7a, 0x1d, 0xbc, 0xd6, 0xea, 0x7d, 0xf8, 0xfd, 0x0e, 0x00, 0xce,
|
||||
0x42, 0x15, 0x89, 0xbf, 0xe5, 0xdc, 0xa2, 0x00, 0x80, 0x11, 0x09, 0x96, 0x88, 0x1e, 0x8b, 0xbb,
|
||||
0x22, 0x4d, 0x24, 0x6d, 0x4e, 0x71, 0x3e, 0x49, 0x10, 0xcb, 0x93, 0x3c, 0xe8, 0xb8, 0x28, 0xc1,
|
||||
0x8d, 0xcf, 0x13, 0xd0, 0x1b, 0x09, 0xf4, 0x0b, 0x35, 0xdd, 0x22, 0x52, 0x64, 0xbc, 0x7d, 0xdd,
|
||||
0x93, 0x60, 0x11, 0xa8, 0x2a, 0x35, 0x28, 0x8f, 0x30, 0xc1, 0x79, 0x40, 0x82, 0xbd, 0x84, 0x0c,
|
||||
0xa9, 0x81, 0x71, 0xf7, 0x4d, 0x7c, 0xe8, 0xa8, 0xb0, 0x8b, 0x22, 0x65, 0xe6, 0x12, 0x8d, 0x12,
|
||||
0x28, 0x26, 0x52, 0x6a, 0x4e, 0xd1, 0x91, 0xc8, 0x27, 0xdc, 0x7f, 0xb7, 0xdf, 0xec, 0x55, 0xe0,
|
||||
0x28, 0x5e, 0x44, 0x1a, 0x6b, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60,
|
||||
0x82,
|
||||
};
|
||||
|
||||
const BITMAP_OPAQUE delete_track_xpm[1] = {{ png, sizeof( png ), "delete_track_xpm" }};
|
||||
|
||||
//EOF
|
||||
@@ -0,0 +1,63 @@
|
||||
|
||||
/* Do not modify this file, it was automatically generated by the
|
||||
* PNG2cpp CMake script, using a *.png file as input.
|
||||
*/
|
||||
|
||||
#include <bitmaps_png/bitmaps_list.h>
|
||||
|
||||
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, 0x02, 0xd8, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xed, 0x95, 0x4b, 0x48, 0x54,
|
||||
0x61, 0x14, 0xc7, 0xbf, 0x3b, 0x73, 0x9d, 0xb9, 0xef, 0x3b, 0x8a, 0x44, 0xa2, 0xe0, 0x66, 0x28,
|
||||
0x72, 0x11, 0x44, 0x14, 0xd8, 0x42, 0x2a, 0x23, 0x12, 0x1f, 0xb9, 0x68, 0xd7, 0x2e, 0x02, 0xc3,
|
||||
0x1e, 0x08, 0x2e, 0x4a, 0x2b, 0x88, 0x5e, 0x36, 0x88, 0x56, 0x1b, 0x45, 0x69, 0x51, 0x63, 0x42,
|
||||
0x05, 0x39, 0x6a, 0xe5, 0xa3, 0x07, 0x4c, 0xab, 0x20, 0xa7, 0xb4, 0x14, 0x1c, 0xa1, 0x0c, 0x33,
|
||||
0x47, 0xed, 0xe5, 0x4c, 0x92, 0x95, 0x0e, 0xf3, 0xef, 0xdc, 0xdb, 0x20, 0x04, 0xa6, 0x33, 0x8e,
|
||||
0xab, 0xf0, 0xc2, 0x61, 0xbe, 0xfb, 0xf1, 0xcd, 0xf9, 0xf1, 0xfd, 0xcf, 0xf9, 0x9f, 0xcb, 0x58,
|
||||
0xa2, 0x0f, 0xcf, 0xef, 0xe1, 0x44, 0x71, 0x8c, 0x56, 0xe9, 0x8b, 0x1f, 0x3c, 0xc3, 0x76, 0xc5,
|
||||
0x1d, 0x67, 0xd9, 0x96, 0xe8, 0xbf, 0xb3, 0x38, 0x87, 0x23, 0x28, 0x54, 0x9c, 0x0c, 0x73, 0xba,
|
||||
0x3e, 0x44, 0xef, 0xd2, 0x62, 0x20, 0x2c, 0x2b, 0xf6, 0xb3, 0xdd, 0x9c, 0xa6, 0x05, 0xa4, 0xbb,
|
||||
0x9e, 0x88, 0xf6, 0x79, 0x0a, 0xb6, 0x63, 0x65, 0x33, 0x5c, 0x72, 0x72, 0x17, 0x65, 0xe4, 0x16,
|
||||
0xe4, 0xd4, 0x75, 0xd5, 0x21, 0x9e, 0x28, 0xbb, 0x53, 0x06, 0x76, 0x9a, 0x81, 0x5b, 0xa3, 0xf9,
|
||||
0x85, 0x0b, 0x55, 0xbf, 0xb4, 0xf1, 0x8f, 0x50, 0xc7, 0x27, 0xa1, 0x05, 0x26, 0xc1, 0xe7, 0xe5,
|
||||
0x4d, 0x33, 0x87, 0xa3, 0x66, 0x41, 0x90, 0xcf, 0xe7, 0x43, 0x3c, 0x51, 0xdf, 0x51, 0x0f, 0xb6,
|
||||
0x89, 0x07, 0x13, 0x84, 0x30, 0xbf, 0x33, 0x37, 0x28, 0x3f, 0x7c, 0x0c, 0xf5, 0xfd, 0x07, 0x08,
|
||||
0x57, 0xae, 0xce, 0x5a, 0xb3, 0xb3, 0x83, 0x94, 0x12, 0x14, 0x07, 0x12, 0x02, 0x79, 0xbd, 0x5e,
|
||||
0x38, 0xb7, 0x6e, 0x04, 0x89, 0x03, 0xb6, 0x99, 0x95, 0x33, 0x59, 0xee, 0x24, 0x00, 0x94, 0x37,
|
||||
0xc3, 0xe0, 0x0b, 0x8b, 0xa6, 0x28, 0xdd, 0x29, 0x8a, 0x72, 0x52, 0x0f, 0x74, 0xb3, 0xda, 0xbf,
|
||||
0x64, 0x8c, 0x15, 0xd2, 0xda, 0xda, 0x8a, 0xb5, 0x4e, 0x27, 0xa4, 0xca, 0x4a, 0x30, 0x5d, 0x02,
|
||||
0xcb, 0xa2, 0x4a, 0x89, 0xe2, 0x13, 0x7b, 0x4d, 0x0d, 0xe4, 0x41, 0x3f, 0xac, 0x05, 0x05, 0x06,
|
||||
0xe8, 0x92, 0x51, 0x75, 0x6b, 0xf6, 0xb6, 0x29, 0xba, 0xed, 0x74, 0xb4, 0x66, 0x52, 0xcc, 0xa0,
|
||||
0xc6, 0xc6, 0x46, 0xe8, 0xe9, 0x19, 0x90, 0xae, 0xbb, 0x4d, 0x99, 0x92, 0x0e, 0x97, 0x80, 0x2f,
|
||||
0xde, 0xfb, 0x9d, 0x2f, 0x2e, 0x9e, 0x16, 0xda, 0xda, 0x20, 0xbd, 0x7a, 0x0d, 0x7b, 0xed, 0xe5,
|
||||
0x30, 0x5f, 0x54, 0x14, 0xa2, 0xbd, 0x90, 0x21, 0xa3, 0x3a, 0x32, 0x0a, 0xdb, 0x91, 0xa3, 0x33,
|
||||
0x9c, 0xa6, 0xfb, 0xcd, 0xd6, 0x5f, 0x0a, 0xd2, 0xd2, 0xd2, 0x02, 0xde, 0x6e, 0x87, 0x7c, 0xff,
|
||||
0x01, 0xd4, 0xb1, 0x09, 0x18, 0x09, 0x0c, 0xa9, 0x64, 0xff, 0x10, 0xa4, 0xfe, 0x01, 0x48, 0xbd,
|
||||
0xbd, 0x10, 0xe9, 0x9c, 0xd4, 0xdb, 0x07, 0x69, 0x60, 0xc0, 0xdc, 0x57, 0xde, 0x0e, 0x9b, 0xe7,
|
||||
0xd4, 0xc0, 0x04, 0xec, 0xc7, 0x4f, 0x84, 0x4d, 0x9f, 0x2d, 0x05, 0xea, 0xe9, 0xe9, 0xc1, 0xc1,
|
||||
0xd2, 0x52, 0xa8, 0x1b, 0xb2, 0x20, 0x3f, 0xf7, 0x99, 0x09, 0x44, 0xf7, 0x4d, 0xd8, 0xa9, 0x36,
|
||||
0x86, 0x6c, 0xa2, 0xf7, 0x29, 0xa4, 0x17, 0x2f, 0x21, 0x78, 0x3c, 0xf4, 0x5e, 0x6b, 0xee, 0x4b,
|
||||
0x1d, 0x9d, 0x7f, 0xce, 0xdd, 0xba, 0x1d, 0x21, 0xf9, 0x82, 0x86, 0xa9, 0x63, 0xae, 0x51, 0x95,
|
||||
0xcb, 0x05, 0x25, 0x83, 0xe4, 0xf3, 0xb4, 0x81, 0xd3, 0x65, 0xb0, 0xf5, 0xa9, 0xed, 0x9c, 0xa2,
|
||||
0x0c, 0xda, 0xab, 0xab, 0xe9, 0x66, 0xfd, 0xb0, 0xe6, 0xe7, 0x87, 0x98, 0xaa, 0x76, 0x92, 0xb7,
|
||||
0xda, 0xad, 0xb9, 0xb9, 0x41, 0xe1, 0xfc, 0xc5, 0x59, 0x4e, 0x55, 0x03, 0x86, 0xa9, 0xe3, 0xee,
|
||||
0x3a, 0xb7, 0x9b, 0x6a, 0x94, 0x9e, 0x06, 0x96, 0x64, 0x35, 0x4c, 0xbb, 0x9d, 0x3a, 0xeb, 0x9a,
|
||||
0x71, 0x0b, 0x43, 0xae, 0x68, 0x33, 0x14, 0x52, 0xec, 0xa0, 0xd6, 0x9f, 0xa3, 0x89, 0xd1, 0x47,
|
||||
0xeb, 0xd4, 0x65, 0xfb, 0xc8, 0xd5, 0xec, 0x02, 0x4b, 0x23, 0x1f, 0x59, 0x2c, 0x11, 0xea, 0xba,
|
||||
0x9f, 0xa2, 0xbb, 0x09, 0xca, 0xf0, 0x3b, 0x24, 0x95, 0x1c, 0x9a, 0x21, 0xc0, 0x0f, 0xd3, 0x47,
|
||||
0x36, 0x5b, 0x33, 0xfd, 0xda, 0x12, 0x32, 0x6c, 0x43, 0x77, 0x03, 0xc8, 0x29, 0xe0, 0x1c, 0xda,
|
||||
0x57, 0xa9, 0xfd, 0x1e, 0xd4, 0xd1, 0xb1, 0xf9, 0xb0, 0x55, 0x54, 0xce, 0x52, 0x4d, 0x9e, 0x19,
|
||||
0xa3, 0x36, 0xe1, 0xc9, 0x60, 0x82, 0x8c, 0x59, 0x97, 0xc3, 0x4a, 0xb8, 0x94, 0x94, 0x90, 0x42,
|
||||
0x8d, 0xa0, 0x4d, 0x7c, 0x82, 0x74, 0xa3, 0x29, 0x42, 0xf5, 0x19, 0xa1, 0x94, 0xfa, 0x8a, 0x8c,
|
||||
0xa0, 0x79, 0x90, 0x51, 0x23, 0x9b, 0x6d, 0x9f, 0x25, 0x33, 0xf3, 0x9b, 0xd2, 0xfd, 0x88, 0x1a,
|
||||
0x44, 0xff, 0x42, 0xe9, 0x9c, 0xff, 0x1c, 0xde, 0x09, 0x81, 0xe8, 0xb1, 0x68, 0xda, 0x39, 0x6a,
|
||||
0xdf, 0x39, 0x5a, 0xe6, 0x2c, 0xfa, 0x39, 0x4a, 0x14, 0x14, 0x9d, 0x67, 0xeb, 0x96, 0xfc, 0x40,
|
||||
0xae, 0x00, 0x28, 0xb6, 0x67, 0x15, 0xb4, 0x0a, 0xfa, 0x7f, 0x41, 0xbf, 0x01, 0xba, 0x28, 0xea,
|
||||
0x15, 0x41, 0x75, 0x1d, 0x9d, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60,
|
||||
0x82,
|
||||
};
|
||||
|
||||
const BITMAP_OPAQUE drag_outline_segment_xpm[1] = {{ png, sizeof( png ), "drag_outline_segment_xpm" }};
|
||||
|
||||
//EOF
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user